|  |  | @@ -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) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } |