|
|
@@ -0,0 +1,148 @@ |
|
|
|
|
|
import { VoreAI } from '@/game/ai' |
|
|
|
|
|
import { DamageType, Side, Stat, StatDamageFormula, StatusEffect, Vigor } from '@/game/combat' |
|
|
|
|
|
import { DigestionPowerEffect } from '@/game/combat/effects' |
|
|
|
|
|
import { Creature } from '@/game/creature' |
|
|
|
|
|
import { LogEntry, LogLine, nilLog } from '@/game/interface' |
|
|
|
|
|
import { ImproperNoun, MalePronouns, ObjectPronouns, Preposition, Verb, ProperNoun, Noun } from '@/game/language' |
|
|
|
|
|
import { anyVore, ConnectionDirection, Container, ContainerCapability, DefaultContainer, Stomach, Throat, transferDescription, VoreType } from '@/game/vore' |
|
|
|
|
|
import * as Words from '@/game/words' |
|
|
|
|
|
import * as Onomatopoeia from '@/game/onomatopoeia' |
|
|
|
|
|
import { ConsumeConsequence } from '@/game/combat/consequences' |
|
|
|
|
|
|
|
|
|
|
|
export default class SheenTheGryph extends Creature { |
|
|
|
|
|
constructor () { |
|
|
|
|
|
super( |
|
|
|
|
|
new ProperNoun("Sheen"), |
|
|
|
|
|
new ImproperNoun("gryphon", "gryphons"), |
|
|
|
|
|
MalePronouns, |
|
|
|
|
|
{ |
|
|
|
|
|
Power: 60, |
|
|
|
|
|
Toughness: 35, |
|
|
|
|
|
Agility: 15, |
|
|
|
|
|
Reflexes: 10, |
|
|
|
|
|
Charm: 20, |
|
|
|
|
|
Willpower: 20 |
|
|
|
|
|
}, |
|
|
|
|
|
anyVore, |
|
|
|
|
|
anyVore, |
|
|
|
|
|
250 |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
class Paw extends DefaultContainer |
|
|
|
|
|
{ |
|
|
|
|
|
constructor(owner:Creature,capacityFactor: number) { |
|
|
|
|
|
super( |
|
|
|
|
|
new Noun("paw","paws"), |
|
|
|
|
|
owner, |
|
|
|
|
|
new Set<VoreType>([VoreType.Paw]), |
|
|
|
|
|
capacityFactor, |
|
|
|
|
|
new Set<ContainerCapability>([ |
|
|
|
|
|
ContainerCapability.Consume, |
|
|
|
|
|
ContainerCapability.Release |
|
|
|
|
|
]) |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const paw = new Paw( |
|
|
|
|
|
this, |
|
|
|
|
|
25 |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
const throat = new Throat( |
|
|
|
|
|
this, |
|
|
|
|
|
25 |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
const stomach = new Stomach( |
|
|
|
|
|
this, |
|
|
|
|
|
50, |
|
|
|
|
|
new StatDamageFormula([ |
|
|
|
|
|
{ fraction: 1, stat: Stat.Toughness, type: DamageType.Acid, target: Vigor.Health } |
|
|
|
|
|
]) |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
stomach.effects.push(new class extends StatusEffect { |
|
|
|
|
|
constructor () { |
|
|
|
|
|
super( |
|
|
|
|
|
"Pinned", |
|
|
|
|
|
"Prey sometimes can't move.", |
|
|
|
|
|
"fas fa-sun" |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
onApply (creature: Creature): LogEntry { |
|
|
|
|
|
return new LogLine( |
|
|
|
|
|
`${stomach.owner.name.capital.possessive} ${stomach.name} is incredibly tight, gripping ${creature.name.objective} like a vice!` |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
preAction (creature: Creature): { prevented: boolean; log: LogEntry } { |
|
|
|
|
|
if (Math.random() < 0.5) { |
|
|
|
|
|
return { |
|
|
|
|
|
prevented: true, |
|
|
|
|
|
log: new LogLine(`${creature.name.capital} can't move!`) |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
return { |
|
|
|
|
|
prevented: false, |
|
|
|
|
|
log: nilLog |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}()) |
|
|
|
|
|
|
|
|
|
|
|
paw.effects.push(new class extends StatusEffect { |
|
|
|
|
|
constructor () { |
|
|
|
|
|
super( |
|
|
|
|
|
"Pinned", |
|
|
|
|
|
"Prey sometimes can't move.", |
|
|
|
|
|
"fas fa-sun" |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
onApply (creature: Creature): LogEntry { |
|
|
|
|
|
return new LogLine( |
|
|
|
|
|
`${stomach.owner.name.capital.possessive} ${stomach.name} is incredibly tight, gripping ${creature.name.objective} like a vice!` |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
preAction (creature: Creature): { prevented: boolean; log: LogEntry } { |
|
|
|
|
|
if (Math.random() < 0.5) { |
|
|
|
|
|
return { |
|
|
|
|
|
prevented: true, |
|
|
|
|
|
log: new LogLine(`${creature.name.capital} can't move!`) |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
return { |
|
|
|
|
|
prevented: false, |
|
|
|
|
|
log: nilLog |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}()) |
|
|
|
|
|
|
|
|
|
|
|
this.addContainer(throat) |
|
|
|
|
|
this.addContainer(stomach) |
|
|
|
|
|
this.addContainer(paw) |
|
|
|
|
|
|
|
|
|
|
|
throat.connect({ |
|
|
|
|
|
destination: stomach, |
|
|
|
|
|
direction: ConnectionDirection.Deeper, |
|
|
|
|
|
description: transferDescription(Words.Swallow, new Preposition("down")) |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
stomach.connect({ |
|
|
|
|
|
destination: throat, |
|
|
|
|
|
direction: ConnectionDirection.Shallower, |
|
|
|
|
|
description: transferDescription(new Verb("hork"), new Preposition("up")) |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
stomach.voreRelay.subscribe("onDigested", (sender, args) => { |
|
|
|
|
|
return Onomatopoeia.makeOnomatopoeia(Onomatopoeia.Burp) |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
this.side = Side.Monsters |
|
|
|
|
|
this.ai = new VoreAI(this) |
|
|
|
|
|
} |
|
|
|
|
|
} |