Sfoglia il codice sorgente

Only show digestion damage if it's non-zero

Also avoid absorbing non-victims, if only certain creatures are being digested.
master
Fen Dweller 5 anni fa
parent
commit
89e5ecd2e1
3 ha cambiato i file con 50 aggiunte e 30 eliminazioni
  1. +16
    -0
      src/game/combat.ts
  2. +2
    -2
      src/game/combat/effects.ts
  3. +32
    -28
      src/game/vore.ts

+ 16
- 0
src/game/combat.ts Vedi File

@@ -172,6 +172,22 @@ export class Damage {
const statEntries = Object.keys(Stat).flatMap(key => statTotals[key as Stat] === 0 ? [] : [new PropElem(key as Stat, statTotals[key as Stat]), ' '])
return new FormatEntry(new LogLine(...vigorEntries.concat(statEntries)), FormatOpt.DamageInst)
}

nonzero (): boolean {
/* eslint-disable-next-line */
const vigorTotals: Vigors = Object.keys(Vigor).reduce((total: any, key) => { total[key] = 0; return total }, {})
/* eslint-disable-next-line */
const statTotals: Stats = Object.keys(Stat).reduce((total: any, key) => { total[key] = 0; return total }, {})
this.damages.forEach(instance => {
const factor = instance.type === DamageType.Heal ? -1 : 1
if (instance.target in Vigor) {
vigorTotals[instance.target as Vigor] += factor * instance.amount
} else if (instance.target in Stat) {
statTotals[instance.target as Stat] += factor * instance.amount
}
})
return Object.values(vigorTotals).some(v => v !== 0) || Object.values(statTotals).some(v => v !== 0)
}
}

/**


+ 2
- 2
src/game/combat/effects.ts Vedi File

@@ -218,10 +218,10 @@ export class InstantDigestionEffect extends StatusEffect {
prey.applyEffect(new InstantKillEffect())
predator.voreStats.Mass += prey.voreStats.Mass
prey.voreStats.Mass = 0
container.tick(1, [prey])
return new LogLines(
`${prey.name.capital} ${prey.name.conjugate(new ToBe())} instantly digested! `,
new FAElem('fas fa-skull')
new FAElem('fas fa-skull'),
container.tick(0, [prey])
)
}
}

+ 32
- 28
src/game/vore.ts Vedi File

@@ -230,40 +230,44 @@ export abstract class NormalVoreContainer extends NormalContainer implements Vor

const tickedEntryList: LogEntry[] = []

const victimList = victims ?? this.contents
victimList.forEach(prey => {
const scaled = this.damage.calc(this.owner, prey).scale(dt / 60)
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(modified))

if (prey.vigors[Vigor.Health] <= 0) {
prey.destroyed = true
this.digested.push(prey)
justDigested.push(prey)
damageResults.push(this.onDigest(prey))
this.contents.forEach(prey => {
if (victims === undefined || victims.indexOf(prey) >= 0) {
const scaled = this.damage.calc(this.owner, prey).scale(dt / 60)
const modified = this.owner.effects.reduce((damage, effect) => effect.modDigestionDamage(this.owner, prey, this, damage), scaled)
if (modified.nonzero()) {
tickedEntryList.push(this.tickLine(this.owner, prey, { damage: modified }))
damageResults.push(prey.takeDamage(modified))
}

if (prey.vigors[Vigor.Health] <= 0) {
prey.destroyed = true
this.digested.push(prey)
justDigested.push(prey)
damageResults.push(this.onDigest(prey))
}
}
})

const tickedEntries = new LogLines(...tickedEntryList)

this.digested.forEach(prey => {
const scaled = this.damage.calc(this.owner, prey).scale(dt / 60)
const damageTotal: number = prey.effectiveDamage(scaled).damages.filter(instance => instance.target === Vigor.Health).reduce(
(total: number, instance: DamageInstance) => total + instance.amount,
0
)

const massStolen = Math.min(damageTotal / 100, prey.voreStats.Mass)

prey.voreStats.Mass -= massStolen
this.owner.voreStats.Mass += massStolen

if (prey.voreStats.Mass === 0) {
this.absorbed.push(prey)
justAbsorbed.push(prey)
damageResults.push(this.onAbsorb(prey))
if (victims === undefined || victims.indexOf(prey) >= 0) {
const scaled = this.damage.calc(this.owner, prey).scale(dt / 60)
const damageTotal: number = prey.effectiveDamage(scaled).damages.filter(instance => instance.target === Vigor.Health).reduce(
(total: number, instance: DamageInstance) => total + instance.amount,
0
)

const massStolen = Math.min(damageTotal / 100, prey.voreStats.Mass)

prey.voreStats.Mass -= massStolen
this.owner.voreStats.Mass += massStolen

if (prey.voreStats.Mass === 0) {
this.absorbed.push(prey)
justAbsorbed.push(prey)
damageResults.push(this.onAbsorb(prey))
}
}
})



Loading…
Annulla
Salva