diff --git a/src/components/Statblock.vue b/src/components/Statblock.vue
index 7334ef6..4bbde9e 100644
--- a/src/components/Statblock.vue
+++ b/src/components/Statblock.vue
@@ -44,8 +44,9 @@
Status: {{subject.status}}
-
-
+
+
+
@@ -63,6 +64,11 @@ import 'tippy.js/dist/tippy.css'
components: {
ContainerView
},
+ data () {
+ return {
+ POV: POV
+ }
+ },
methods: {
vigorColor (value: number, max: number) {
if (value * 5 <= max) {
diff --git a/src/game/combat/actions.ts b/src/game/combat/actions.ts
index e0a9e11..1f4d4f5 100644
--- a/src/game/combat/actions.ts
+++ b/src/game/combat/actions.ts
@@ -10,11 +10,11 @@ export class AttackAction extends Action {
protected test: StatTest
protected successLines: POVPairArgs = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(
`You ${this.verb} ${target.name} for `,
args.damage.renderShort()
)],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(
`${user.name.capital} ${this.verb.singular} you for `,
args.damage.renderShort()
)],
@@ -25,8 +25,8 @@ export class AttackAction extends Action {
])
protected failLines: POVPair = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You try to ${this.verb.present} ${target.name}, but you miss`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} misses you`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You try to ${this.verb.present} ${target.name}, but you miss`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} misses you`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} misses ${target.name}`)]
])
@@ -59,8 +59,8 @@ export class DevourAction extends Action {
private test: StatVigorTest
protected failLines: POVPairArgs = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`You fail to ${args.container.consumeVerb} ${target.name}`)],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(`${user.name.capital} tries to ${args.container.consumeVerb} you, but fails`)],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`You fail to ${args.container.consumeVerb} ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(`${user.name.capital} tries to ${args.container.consumeVerb} you, but fails`)],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${user.name.capital} unsuccessfully tries to ${args.container.consumeVerb} ${target.name}`)]
])
@@ -102,8 +102,8 @@ export class FeedAction extends Action {
private test: StatTest
protected failLines: POVPair = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You fail to feed yourself to ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} tries to feed ${user.pronouns.possessive} to you, but fails`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You fail to feed yourself to ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} tries to feed ${user.pronouns.possessive} to you, but fails`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} unsuccessfully tries to feed ${user.pronouns.possessive} to ${target.name}`)]
])
@@ -142,8 +142,8 @@ export class StruggleAction extends Action {
private test: StatVigorTest
protected failLines: POVPair = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You fail to escape from ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} tries to escape from you, but fails`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You fail to escape from ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} tries to escape from you, but fails`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} unsuccessfully struggles against ${target.name}`)]
])
@@ -250,8 +250,8 @@ export class ReleaseAction extends Action {
export class TransferAction extends Action {
lines: POVPairArgs = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`You squeeze ${target.name} from your ${args.from.name} to your ${args.to.name}`)],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(`You're squeezed from ${user.name}'s ${args.from.name} to ${user.pronouns.possessive} ${args.to.name}`)],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`You squeeze ${target.name} from your ${args.from.name} to your ${args.to.name}`)],
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(`You're squeezed from ${user.name}'s ${args.from.name} to ${user.pronouns.possessive} ${args.to.name}`)],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${user.name} sends ${target.name} from ${user.pronouns.possessive} ${args.from.name.all} to ${user.pronouns.possessive} ${args.to.name.all}`)]
])
diff --git a/src/game/combat/effects.ts b/src/game/combat/effects.ts
index 255fc76..9196236 100644
--- a/src/game/combat/effects.ts
+++ b/src/game/combat/effects.ts
@@ -5,7 +5,7 @@ import { POVSolo } from '../language'
export class InstantKill implements Effect {
lines = new POVSolo([
- [[POV.First], (target: Creature) => new LogLine(`You're killed instantly! `, new FAElem('fas fa-skull'))],
+ [[POV.Second], (target: Creature) => new LogLine(`You're killed instantly! `, new FAElem('fas fa-skull'))],
[[POV.Third], (target: Creature) => new LogLine(`${target.name.capital} is killed instantly! `, new FAElem('fas fa-skull'))]
])
diff --git a/src/game/creatures/cafat.ts b/src/game/creatures/cafat.ts
index 0401e11..0d71071 100644
--- a/src/game/creatures/cafat.ts
+++ b/src/game/creatures/cafat.ts
@@ -8,11 +8,11 @@ import { InstantKill } from '../combat/effects'
class BellyCrushAction extends AttackAction {
successLines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new CompositeLog(new LogLine(
+ [[POV.Second, POV.Third], (user, target, args) => new CompositeLog(new LogLine(
`You crush on ${target.name} with your belly for `,
args.damage.renderShort()
), new ImgElem('./media/cafat/images/belly-crush.webp'))],
- [[POV.Third, POV.First], (user, target, args) => new CompositeLog(new LogLine(
+ [[POV.Third, POV.Second], (user, target, args) => new CompositeLog(new LogLine(
`${user.name.capital} crushes on you with ${user.pronouns.possessive} belly for `,
args.damage.renderShort()
), new ImgElem('./media/cafat/images/belly-crush.webp'))],
@@ -39,11 +39,11 @@ class BellyCrushAction extends AttackAction {
class BelchAction extends AttackAction {
successLines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new CompositeLog(new LogLine(
+ [[POV.Second, POV.Third], (user, target, args) => new CompositeLog(new LogLine(
`You belch on ${target.name} for `,
args.damage.renderShort()
), new ImgElem('./media/cafat/images/belch.webp'))],
- [[POV.Third, POV.First], (user, target, args) => new CompositeLog(new LogLine(
+ [[POV.Third, POV.Second], (user, target, args) => new CompositeLog(new LogLine(
`${user.name.capital} belches on you for `,
args.damage.renderShort()
), new ImgElem('./media/cafat/images/belch.webp'))],
@@ -62,8 +62,8 @@ class BelchAction extends AttackAction {
class CrushAction extends EatenAction {
lines: POVPair = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You crush ${target.name} `)],
- [[POV.Third, POV.First], (user) => new CompositeLog(new LogLine(`${user.name.capital} crushes you; ${user.pronouns.subjective} ${user.pronouns.isPlural ? 'belch' : 'belches'} as ${user.pronouns.possessive} gut lets out a fatal CRUNCH `), new ImgElem('./media/cafat/images/crunch.webp'))],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You crush ${target.name} `)],
+ [[POV.Third, POV.Second], (user) => new CompositeLog(new LogLine(`${user.name.capital} crushes you; ${user.pronouns.subjective} ${user.pronouns.isPlural ? 'belch' : 'belches'} as ${user.pronouns.possessive} gut lets out a fatal CRUNCH `), new ImgElem('./media/cafat/images/crunch.webp'))],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} crushes ${target.name}; ${user.pronouns.subjective} ${user.pronouns.isPlural ? 'belch' : 'belches'} as ${user.pronouns.possessive} gut lets out a fatal CRUNCH `, new ImgElem('./media/cafat/images/crunch.webp'))]
])
@@ -110,8 +110,8 @@ export class Cafat extends Creature {
lowerStomach.name = new ImproperNoun("lower stomach", "lower stomachs").all
stomach.consumeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You devour ${target.name}`)],
- [[POV.Third, POV.First], (user) => new CompositeLog(new LogLine(`${user.name.capital} devours you`), new ImgElem('./media/cafat/images/stomach.webp'))],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You devour ${target.name}`)],
+ [[POV.Third, POV.Second], (user) => new CompositeLog(new LogLine(`${user.name.capital} devours you`), new ImgElem('./media/cafat/images/stomach.webp'))],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} munches ${target.name.capital}`)]
])
const crush = new CrushAction(lowerStomach)
@@ -122,8 +122,8 @@ export class Cafat extends Creature {
const transfer = new TransferAction(stomach, lowerStomach)
transfer.lines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`You squeeze ${target.name} from your ${args.from.name} to your ${args.to.name}`)],
- [[POV.Third, POV.First], (user, target, args) => new CompositeLog(new LogLine(`You're squeezed from ${user.name}'s ${args.from.name} to ${user.pronouns.possessive} ${args.to.name}`), new ImgElem('./media/cafat/images/lower-stomach.webp'))],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`You squeeze ${target.name} from your ${args.from.name} to your ${args.to.name}`)],
+ [[POV.Third, POV.Second], (user, target, args) => new CompositeLog(new LogLine(`You're squeezed from ${user.name}'s ${args.from.name} to ${user.pronouns.possessive} ${args.to.name}`), new ImgElem('./media/cafat/images/lower-stomach.webp'))],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${user.name} squeezes ${target.name} from ${user.pronouns.possessive} ${args.from.name} to ${user.pronouns.possessive} ${args.to.name}`)]
])
this.actions.push(transfer)
diff --git a/src/game/creatures/player.ts b/src/game/creatures/player.ts
index c8c5a1c..fc58939 100644
--- a/src/game/creatures/player.ts
+++ b/src/game/creatures/player.ts
@@ -16,6 +16,6 @@ export class Player extends Creature {
const bowels = new Bowels(this, 100, new Damage({ amount: 20, type: DamageType.Crush, target: Vigor.Health }))
this.containers.push(bowels)
- this.perspective = POV.First
+ this.perspective = POV.Second
}
}
diff --git a/src/game/creatures/withers.ts b/src/game/creatures/withers.ts
index 9058d10..02ddfa2 100644
--- a/src/game/creatures/withers.ts
+++ b/src/game/creatures/withers.ts
@@ -30,7 +30,7 @@ class LevelDrain extends Action {
const targetResult = target.takeDamage(damage)
return new LogLines(
- new LogLine(`${user.name.capital.possessive} ${this.container.name} drains power from ${target.name}, siphoning `, damage.renderShort(), ` from ${target.pronouns.possessive} body!`),
+ new LogLine(`${user.name.capital.possessive} ${this.container.name} drains power from ${target.name.objective}, siphoning `, damage.renderShort(), ` from ${target.pronouns.possessive} body!`),
targetResult
)
}
@@ -52,8 +52,8 @@ class LevelDrain extends Action {
}
class HypnotizeAction extends Action {
lines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your hypnotic gaze enthralls ${target.name}, putting ${target.pronouns.objective} under your control!`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s hypnotic gaze enthralls you, putting you under ${user.pronouns.possessive} control!`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your hypnotic gaze enthralls ${target.name}, putting ${target.pronouns.objective} under your control!`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s hypnotic gaze enthralls you, putting you under ${user.pronouns.possessive} control!`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital}'s hypnotic gaze enthralls ${target.name}, putting ${target.pronouns.objective} under ${user.pronouns.possessive} control!`)]
])
@@ -84,20 +84,20 @@ class MawContainer extends NormalContainer {
struggleVerb = new Verb('struggle', 'struggles', 'struggling', 'struggled')
consumeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You snatch ${target.name} up in your jaws`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} snatches you up in ${user.pronouns.possessive} maw`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You snatch ${target.name} up in your jaws`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} snatches you up in ${user.pronouns.possessive} maw`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} snatches ${target.name} up in ${user.pronouns.possessive} maw`)]
])
releaseLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You let out ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} lets you out `)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You let out ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} lets you out `)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} lets out ${target.name}`)]
])
struggleLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You claw your way free of ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way free!`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You claw your way free of ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way free!`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} escapes from ${target.name}`)]
])
@@ -110,8 +110,8 @@ class MawContainer extends NormalContainer {
class FlexToesAction extends GroupAction {
lines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`Your toes crush ${target.name} for `, args.damage.renderShort(), ` damage!`)],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(`${user.name.capital}'s toes crush you for `, args.damage.renderShort(), ` damage!`)],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`Your toes crush ${target.name} for `, args.damage.renderShort(), ` damage!`)],
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(`${user.name.capital}'s toes crush you for `, args.damage.renderShort(), ` damage!`)],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${user.name.capital}'s toes crush ${target.name} for `, args.damage.renderShort(), ` damage!`)]
])
@@ -138,20 +138,20 @@ class FlexToesAction extends GroupAction {
class BootContainer extends NormalContainer {
consumeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You stuff ${target.name} into your boot.`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} stuffs you in ${user.pronouns.possessive} boot, pinning you between toes and insole.`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You stuff ${target.name} into your boot.`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} stuffs you in ${user.pronouns.possessive} boot, pinning you between toes and insole.`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} stuffs ${target.name} in ${user.pronouns.possessive} boot.`)]
])
releaseLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You dump ${target.name} out from your boot.`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} dumps you out from ${user.pronouns.possessive} boot.`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You dump ${target.name} out from your boot.`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} dumps you out from ${user.pronouns.possessive} boot.`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} dumps ${target.name} out from ${user.pronouns.possessive} boot.`)]
])
struggleLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You slip out from ${target.name}'s boot.`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} squeezes ${user.pronouns.possessive} way free of your footwear!`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You slip out from ${target.name}'s boot.`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} squeezes ${user.pronouns.possessive} way free of your footwear!`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} escapes from ${target.name}'s boot.`)]
])
@@ -198,8 +198,8 @@ class BiteAction extends AttackAction {
class ChewAction extends GroupAction {
lines: POVPairArgs = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args: { damage: Damage }) => new LogLine(`You chew on ${target.name} for `, args.damage.renderShort(), `!`)],
- [[POV.Third, POV.First], (user, target, args: { damage: Damage }) => new LogLine(`${user.name.capital} chews on you for `, args.damage.renderShort(), `!`)],
+ [[POV.Second, POV.Third], (user, target, args: { damage: Damage }) => new LogLine(`You chew on ${target.name} for `, args.damage.renderShort(), `!`)],
+ [[POV.Third, POV.Second], (user, target, args: { damage: Damage }) => new LogLine(`${user.name.capital} chews on you for `, args.damage.renderShort(), `!`)],
[[POV.Third, POV.Third], (user, target, args: { damage: Damage }) => new LogLine(`${user.name.capital} chews on ${target.name} for `, args.damage.renderShort(), `!`)]
])
@@ -237,8 +237,8 @@ class ChewAction extends GroupAction {
class StompAction extends GroupAction {
lines: POVPair = new POVPair([
- [[POV.First, POV.Third], (user: Creature, target: Creature) => new LogLine(`You flatten ${target.name} under your foot!`)],
- [[POV.Third, POV.First], (user: Creature) => new LogLine(`${user.name.capital} flattens you under ${user.pronouns.possessive} ${huge} foot!`)],
+ [[POV.Second, POV.Third], (user: Creature, target: Creature) => new LogLine(`You flatten ${target.name} under your foot!`)],
+ [[POV.Third, POV.Second], (user: Creature) => new LogLine(`${user.name.capital} flattens you under ${user.pronouns.possessive} ${huge} foot!`)],
[[POV.Third, POV.Third], (user: Creature, target: Creature) => new LogLine(`${user.name.capital} flattens ${target.name} under ${user.pronouns.possessive} ${huge} foot!`)]
])
@@ -265,8 +265,8 @@ class StompAction extends GroupAction {
class StompAllyAction extends Action {
lines: POVPair = new POVPair([
- [[POV.First, POV.Third], (user: Creature, target: Creature) => new LogLine(`You flatten ${target.name} under your boot!`)],
- [[POV.Third, POV.First], (user: Creature) => new LogLine(`${user.name.capital} flattens you under ${user.pronouns.possessive} ${huge} boot!`)],
+ [[POV.Second, POV.Third], (user: Creature, target: Creature) => new LogLine(`You flatten ${target.name} under your boot!`)],
+ [[POV.Third, POV.Second], (user: Creature) => new LogLine(`${user.name.capital} flattens you under ${user.pronouns.possessive} ${huge} boot!`)],
[[POV.Third, POV.Third], (user: Creature, target: Creature) => new LogLine(`${user.name.capital} flattens ${target.name} under ${user.pronouns.possessive} ${huge} boot!`)]
])
@@ -369,14 +369,14 @@ export class Withers extends Creature {
))
stomach.tickLines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`Your stomach ${Words.Churns.singular} ${target.name} for `, args.damage.renderShort())],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(`${user.name.capital}'s stomach ${Words.Churns.singular} you for `, args.damage.renderShort())],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`Your stomach ${Words.Churns.singular} ${target.name} for `, args.damage.renderShort())],
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(`${user.name.capital}'s stomach ${Words.Churns.singular} you for `, args.damage.renderShort())],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${user.name.capital} ${Words.Churns.singular} ${target.name} for `, args.damage.renderShort())]
])
stomach.digestLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your stomach ${Words.Digests.singular} ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s stomach ${Words.Digests.singular} you`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your stomach ${Words.Digests.singular} ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s stomach ${Words.Digests.singular} you`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${target.name.capital}'s ${Words.Struggles.present} fades as the ${target.kind.all} is ${Words.Digests.past} by the ${user.kind.all}'s ${stomach.name}.`)]
])
diff --git a/src/game/creatures/wolf.ts b/src/game/creatures/wolf.ts
index ba1b517..bcf9111 100644
--- a/src/game/creatures/wolf.ts
+++ b/src/game/creatures/wolf.ts
@@ -15,11 +15,11 @@ class BiteAction extends AttackAction {
class HypnoAction extends AttackAction {
protected successLines: POVPairArgs = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(
`You hypnotize ${target.name} for `,
args.damage.renderShort()
)],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(
`${user.name.capital} hypnotizes you for `,
args.damage.renderShort()
)],
@@ -30,8 +30,8 @@ class HypnoAction extends AttackAction {
])
protected failLines: POVPair = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You try to hypnotize ${target.name}, but you miss`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} misses you`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You try to hypnotize ${target.name}, but you miss`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} misses you`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${target.name} misses ${target.name}`)]
])
diff --git a/src/game/entity.ts b/src/game/entity.ts
index 925ded0..28e29a4 100644
--- a/src/game/entity.ts
+++ b/src/game/entity.ts
@@ -4,7 +4,7 @@ import { LogEntry, LogLine } from './interface'
import { Vore, VoreContainer, VoreType, Container } from './vore'
import { Item } from './items'
-export enum POV {First, Third}
+export enum POV {First, Second, Third}
export interface Entity {
name: Noun;
diff --git a/src/game/language.ts b/src/game/language.ts
index b4f5565..d82a563 100644
--- a/src/game/language.ts
+++ b/src/game/language.ts
@@ -82,6 +82,7 @@ interface WordOptions {
vowel: VowelSound;
count: boolean;
possessive: boolean;
+ objective: boolean;
}
const emptyConfig: WordOptions = {
@@ -93,7 +94,8 @@ const emptyConfig: WordOptions = {
plural: false,
proper: false,
vowel: VowelSound.Default,
- possessive: false
+ possessive: false,
+ objective: false
}
export type TextLike = { toString: () => string }
@@ -221,9 +223,9 @@ export abstract class Word {
return this.configure(opts) as this
}
- get nonpossessive (): this {
+ get objective (): this {
const opts: WordOptions = Object.assign({}, this.opt)
- opts.possessive = false
+ opts.objective = true
return this.configure(opts) as this
}
}
@@ -322,13 +324,13 @@ export class Noun extends Word {
export class ImproperNoun extends Noun {
constructor (singularNoun: string, pluralNoun: string = singularNoun, possessiveNoun: string = singularNoun + "'s") {
- 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 })
+ 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 })
}
}
export class ProperNoun extends Noun {
constructor (singularNoun: string) {
- super(singularNoun, null, null, { plural: false, allCaps: false, capital: false, proper: true, nounKind: NounKind.Specific, verbKind: VerbKind.Root, vowel: VowelSound.Default, count: true, possessive: false })
+ super(singularNoun, null, null, { plural: false, allCaps: false, capital: false, proper: true, nounKind: NounKind.Specific, verbKind: VerbKind.Root, vowel: VowelSound.Default, count: true, possessive: false, objective: false })
}
}
@@ -435,6 +437,14 @@ export class PronounAsNoun extends Noun {
configure (opts: WordOptions): Word {
return new PronounAsNoun(this.pronouns, opts)
}
+
+ toString (): string {
+ if (this.options.objective) {
+ return new Noun(this.pronouns.objective, this.pronouns.objective, this.pronouns.possessive, this.options).toString()
+ } else {
+ return super.toString()
+ }
+ }
}
export const MalePronouns = new Pronoun({
diff --git a/src/game/vore.ts b/src/game/vore.ts
index a4376df..1fda727 100644
--- a/src/game/vore.ts
+++ b/src/game/vore.ts
@@ -1,7 +1,7 @@
import { Entity, Mortal, POV, Creature } from './entity'
import { Damage, DamageType, Stats, Actionable, Action, Vigor, VoreStats } from './combat'
import { LogLines, LogEntry, CompositeLog, LogLine } from './interface'
-import { Noun, Pronoun, POVPair, POVPairArgs, ImproperNoun, POVSolo, TextLike, Verb, SecondPersonPronouns, PronounAsNoun } from './language'
+import { Noun, Pronoun, POVPair, POVPairArgs, ImproperNoun, POVSolo, TextLike, Verb, SecondPersonPronouns, PronounAsNoun, FirstPersonPronouns } from './language'
import { DigestAction, DevourAction, ReleaseAction, StruggleAction } from './combat/actions'
import * as Words from './words'
@@ -22,6 +22,8 @@ export abstract class Vore implements Mortal {
get name (): Noun {
if (this.perspective === POV.First) {
+ return new PronounAsNoun(FirstPersonPronouns)
+ } else if (this.perspective === POV.Second) {
return new PronounAsNoun(SecondPersonPronouns)
} else {
return this.baseName
@@ -30,6 +32,8 @@ export abstract class Vore implements Mortal {
get pronouns (): Pronoun {
if (this.perspective === POV.First) {
+ return FirstPersonPronouns
+ } else if (this.perspective === POV.Second) {
return SecondPersonPronouns
} else {
return this.basePronouns
@@ -53,7 +57,7 @@ export abstract class Vore implements Mortal {
abstract otherContainers: Array;
destroy (): LogEntry {
const lines = new POVSolo([
- [[POV.First], (target: Vore) => new LogLine('You die!')],
+ [[POV.Second], (target: Vore) => new LogLine('You die!')],
[[POV.Third], (target: Vore) => new LogLine(`${target.name.capital} dies!`)]
])
@@ -268,44 +272,44 @@ export class Stomach extends NormalVoreContainer {
}
consumeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You devour ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} munches you`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You devour ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} munches you`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} munches ${target.name}`)]
])
releaseLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You hork up ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} horks you up`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You hork up ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} horks you up`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} horks up ${target.name}`)]
])
struggleLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You claw your way out of ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way up your throat!`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You claw your way out of ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way up your throat!`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} escapes from the gut of ${target.name}`)]
])
tickLines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`Your stomach ${Words.Churns.singular} ${target.name} for `, args.damage.renderShort())],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(`${user.name.capital}'s stomach ${Words.Churns.singular} you for `, args.damage.renderShort())],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`Your stomach ${Words.Churns.singular} ${target.name} for `, args.damage.renderShort())],
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(`${user.name.capital}'s stomach ${Words.Churns.singular} you for `, args.damage.renderShort())],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${user.name.capital} ${Words.Churns.singular} ${target.name} for `, args.damage.renderShort())]
])
digestLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your stomach ${Words.Digests.singular} ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s stomach ${Words.Digests.singular} you`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your stomach ${Words.Digests.singular} ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s stomach ${Words.Digests.singular} you`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${target.name.capital}'s ${Words.Struggles.present} fades as the ${target.kind.all} is ${Words.Digests.past} by the ${user.kind.all}'s ${this.name}.`)]
])
absorbLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} finishes absorbing the remains of ${target.name}`)]
])
disposeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} finishes absorbing the remains of ${target.name}`)]
])
@@ -335,44 +339,44 @@ export class InnerStomach extends InnerContainer {
}
consumeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You devour ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} munches you`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You devour ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} munches you`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} munches ${target.name.capital}`)]
])
releaseLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You hork up ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} horks you up`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You hork up ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} horks you up`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} horks up ${target.name.capital}`)]
])
struggleLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You claw your way out of ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way up your throat!`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You claw your way out of ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way up your throat!`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} escapes from the gut of ${target.name}`)]
])
tickLines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`Your stomach gurgles ${target.name} for `, args.damage.renderShort())],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(`${user.name.capital}'s stomach churns you for `, args.damage.renderShort())],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`Your stomach gurgles ${target.name} for `, args.damage.renderShort())],
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(`${user.name.capital}'s stomach churns you for `, args.damage.renderShort())],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${user.name.capital} churns ${target.name} for `, args.damage.renderShort())]
])
digestLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your stomach overwhelms ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s stomach finishes you off`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your stomach overwhelms ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s stomach finishes you off`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${target.name.capital}'s squirms fade, overwhelmed by the stomach of ${user.name}`)]
])
absorbLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} finishes absorbing the remains of ${target.name}`)]
])
disposeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} finishes absorbing the remains of ${target.name}`)]
])
}
@@ -383,44 +387,44 @@ export class Bowels extends NormalVoreContainer {
}
consumeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You force ${target.name} into your bowels`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} works you into ${user.pronouns.possessive} ass`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You force ${target.name} into your bowels`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} works you into ${user.pronouns.possessive} ass`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} anal-vores ${target.name.capital}`)]
])
releaseLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You let out ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} lets you out `)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You let out ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} lets you out `)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} lets out ${target.name.capital}`)]
])
struggleLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`You claw your way out of ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way out your rump!`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`You claw your way out of ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital} forces ${user.pronouns.possessive} way out your rump!`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} escapes from the bowels of ${target.name}`)]
])
tickLines = new POVPairArgs([
- [[POV.First, POV.Third], (user, target, args) => new LogLine(`Your bowels gurgle ${target.name} for `, args.damage.renderShort())],
- [[POV.Third, POV.First], (user, target, args) => new LogLine(`${user.name.capital}'s bowels churn you for `, args.damage.renderShort())],
+ [[POV.Second, POV.Third], (user, target, args) => new LogLine(`Your bowels gurgle ${target.name} for `, args.damage.renderShort())],
+ [[POV.Third, POV.Second], (user, target, args) => new LogLine(`${user.name.capital}'s bowels churn you for `, args.damage.renderShort())],
[[POV.Third, POV.Third], (user, target, args) => new LogLine(`${target.name.capital} churns ${user.name} for `, args.damage.renderShort())]
])
digestLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your bowels overwhelm ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s bowels finish you off`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your bowels overwhelm ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s bowels finish you off`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${target.name.capital}'s squirms fade, overwhelmed by the bowels of ${user.name}`)]
])
absorbLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} finishes absorbing the remains of ${target.name}`)]
])
disposeLines = new POVPair([
- [[POV.First, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
- [[POV.Third, POV.First], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
+ [[POV.Second, POV.Third], (user, target) => new LogLine(`Your guts completely absorb ${target.name}`)],
+ [[POV.Third, POV.Second], (user, target) => new LogLine(`${user.name.capital}'s guts soak you up like water in a sponge`)],
[[POV.Third, POV.Third], (user, target) => new LogLine(`${user.name.capital} finishes absorbing the remains of ${target.name}`)]
])
}