Explorar el Código

Add an acid potion that speeds up digestion

master
Fen Dweller hace 5 años
padre
commit
6b4541f893
Se han modificado 5 ficheros con 75 adiciones y 4 borrados
  1. +8
    -0
      src/game/combat.ts
  2. +21
    -0
      src/game/combat/effects.ts
  3. +28
    -2
      src/game/items.ts
  4. +12
    -0
      src/game/maps/town.ts
  5. +6
    -2
      src/game/vore.ts

+ 8
- 0
src/game/combat.ts Ver fichero

@@ -4,6 +4,7 @@ import { LogEntry, LogLines, FAElem, LogLine, FormatEntry, FormatOpt, PropElem,
import { Resistances } from './entity'
import { World } from './world'
import { TestCategory } from './combat/tests'
import { VoreContainer } from './vore'

export enum DamageType {
Pierce = "Pierce",
@@ -569,6 +570,13 @@ export class Effective {
modTestDefense (defender: Creature, attacker: Creature, kind: TestCategory): number {
return 0
}

/**
* Affects digestion damage
*/
modDigestionDamage (predator: Creature, prey: Creature, container: VoreContainer, damage: Damage): Damage {
return damage
}
}
/**
* A displayable status effect


+ 21
- 0
src/game/combat/effects.ts Ver fichero

@@ -2,6 +2,8 @@ import { StatusEffect, Damage, DamageType, Action, Condition, Vigor } from '../c
import { DynText, LiveText, ToBe, Verb } from '../language'
import { Creature } from "../creature"
import { LogLine, LogEntry, LogLines, FAElem, nilLog } from '../interface'
import { VoreContainer } from '../vore'
import * as Words from '../words'

export class InstantKillEffect extends StatusEffect {
constructor () {
@@ -173,3 +175,22 @@ export class SizeEffect extends StatusEffect {
return scale * this.change
}
}

export class DigestionPowerEffect extends StatusEffect {
constructor (private factor: number) {
super('Acid-fueled', 'This creature is digesting faster than nomral', 'fas fa-flask')
}

onApply (creature: Creature): LogLine {
const voreContainer: VoreContainer|undefined = creature.containers.find(c => c.digest !== null)
if (voreContainer !== undefined) {
return new LogLine(`${creature.name.capital.possessive}'s ${voreContainer.name} ${Words.Churns} and ${voreContainer.sound}`)
} else {
return new LogLine(`${creature.name.capital} can't digest people...`)
}
}

modDigestionDamage (predator: Creature, prey: Creature, container: VoreContainer, damage: Damage): Damage {
return damage.scale(this.factor)
}
}

+ 28
- 2
src/game/items.ts Ver fichero

@@ -2,8 +2,8 @@ import { TextLike, LiveText, DynText, Word, ImproperNoun, Verb, Noun } from './l
import { Actionable, Action, DamageFormula, ConstantDamageFormula, Damage, DamageType, Vigor, StatDamageFormula, Stat, Effective, CompositionAction, Condition, CompositeDamageFormula } from './combat'
import { AttackAction } from './combat/actions'
import { Resistances } from './entity'
import { DamageTypeResistanceEffect } from './combat/effects'
import { DamageConsequence, LogConsequence, HealingConsequence } from './combat/consequences'
import { DamageTypeResistanceEffect, DigestionPowerEffect } from './combat/effects'
import { DamageConsequence, LogConsequence, HealingConsequence, StatusConsequence } from './combat/consequences'
import { SoloCondition } from './combat/conditions'
import { LogLine, LogEntry } from './interface'
import { Creature } from './creature'
@@ -230,3 +230,29 @@ export class HealthPotion extends Consumable {
)
}
}

export class AcidPotion extends Consumable {
constructor () {
super(
new ImproperNoun("Acid Potion"),
"Boosts your digestive power and causes a burst of damage to your prey",
new CompositionAction(
"Drink Potion",
"Speed up your digestion",
{
conditions: [
new SoloCondition()
],
consequences: [
new LogConsequence(
(user, target) => new LogLine(`${user.name.capital} ${user.name.conjugate(new Verb('drink'))} an acid potion.`)
),
new StatusConsequence(
(user, target) => new DigestionPowerEffect(2)
)
]
}
)
)
}
}

+ 12
- 0
src/game/maps/town.ts Ver fichero

@@ -244,6 +244,18 @@ export const Town = (): Place => {
)
)

home.choices.push(
new Choice(
"Grab potions",
"Grab some potions",
(world, executor) => {
executor.items.push(new Items.HealthPotion())
executor.items.push(new Items.AcidPotion())
return new LogLine("You grab some potions")
}
)
)

westAve.choices.push(
new Choice(
"Eat someone",


+ 6
- 2
src/game/vore.ts Ver fichero

@@ -160,6 +160,7 @@ export interface VoreContainer extends Container {
tick: (dt: number) => LogEntry;
digest: (preys: Creature[]) => LogEntry;
absorb: (preys: Creature[]) => LogEntry;
sound: Word;
fluidName: Word;
fluidColor: string;

@@ -176,6 +177,8 @@ export abstract class NormalVoreContainer extends NormalContainer implements Vor
digested: Array<Creature> = []
absorbed: Array<Creature> = []

sound = new Verb("slosh")

abstract fluidName: Word

constructor (name: Noun, owner: Creature, voreTypes: Set<VoreType>, capacity: number, private damage: DamageFormula) {
@@ -223,9 +226,10 @@ export abstract class NormalVoreContainer extends NormalContainer implements Vor

this.contents.forEach(prey => {
const scaled = this.damage.calc(this.owner, prey).scale(dt / 60)
tickedEntryList.push(this.tickLine(this.owner, prey, { damage: scaled }))
const modified = this.owner.effects.reduce((damage, effect) => effect.modDigestionDamage(this.owner, prey, this, damage), scaled)
tickedEntryList.push(this.tickLine(this.owner, prey, { damage: modified }))

damageResults.push(prey.takeDamage(scaled))
damageResults.push(prey.takeDamage(modified))

if (prey.vigors[Vigor.Health] <= 0) {
prey.destroyed = true


Cargando…
Cancelar
Guardar