Quellcode durchsuchen

Allow effects to cause test failures; make surrendering drain resolve

Also fixes a dumb bug where humans could make OTHER units surrender
master
Fen Dweller vor 5 Jahren
Ursprung
Commit
fe9ac340b2
4 geänderte Dateien mit 35 neuen und 4 gelöschten Zeilen
  1. +11
    -0
      src/game/combat.ts
  2. +9
    -4
      src/game/combat/effects.ts
  3. +11
    -0
      src/game/combat/tests.ts
  4. +4
    -0
      src/game/creatures/human.ts

+ 11
- 0
src/game/combat.ts Datei anzeigen

@@ -466,6 +466,17 @@ export class Effective {
modResistance (type: DamageType, factor: number): number {
return factor
}

/**
* Called when a test is about to resolve. Decides if the creature should automatically fail.
*/

failTest (creature: Creature, opponent: Creature): { failed: boolean; log: LogEntry } {
return {
failed: false,
log: nilLog
}
}
}
/**
* A displayable status effect


+ 9
- 4
src/game/combat/effects.ts Datei anzeigen

@@ -1,4 +1,4 @@
import { StatusEffect, Damage, DamageType, Action, Condition } from '../combat'
import { StatusEffect, Damage, DamageType, Action, Condition, Vigor } from '../combat'
import { DynText, LiveText, ToBe, Verb } from '../language'
import { Creature } from "../creature"
import { LogLine, LogEntry, LogLines, FAElem, nilLog } from '../interface'
@@ -138,18 +138,23 @@ export class DazzlingEffect extends StatusEffect {

export class SurrenderEffect extends StatusEffect {
constructor () {
super('Surrendered', 'This creature has given up', 'fas fa-flag')
super('Surrendered', 'This creature has given up, and will fail most tests', 'fas fa-flag')
}

onApply (creature: Creature): LogEntry {
creature.takeDamage(
new Damage(
{ amount: creature.vigors.Resolve, target: Vigor.Resolve, type: DamageType.Pure }
)
)
return new LogLine(
`${creature.name.capital} ${creature.name.conjugate(new Verb('surrender'))}!`
)
}

preTurn (creature: Creature): { prevented: boolean; log: LogEntry } {
failTest (creature: Creature, opponent: Creature): { failed: boolean; log: LogEntry } {
return {
prevented: true,
failed: true,
log: nilLog
}
}


+ 11
- 0
src/game/combat/tests.ts Datei anzeigen

@@ -8,8 +8,19 @@ function logistic (x0: number, L: number, k: number): (x: number) => number {
}
}

// TODO this will need to be able to return a LogEntry at some point

abstract class RandomTest implements CombatTest {
test (user: Creature, target: Creature): boolean {
const userFail = user.effects.map(effect => effect.failTest(user, target))
if (userFail.some(result => result.failed)) {
return false
}
const targetFail = target.effects.map(effect => effect.failTest(target, user))
if (targetFail.some(result => result.failed)) {
return true
}

return Math.random() < this.odds(user, target)
}



+ 4
- 0
src/game/creatures/human.ts Datei anzeigen

@@ -4,6 +4,7 @@ import { Noun, Pronoun, ImproperNoun } from '../language'
import { VoreType } from '../vore'
import { StatusConsequence } from '../combat/consequences'
import { SurrenderEffect } from '../combat/effects'
import { SoloCondition } from '../combat/conditions'

export class Human extends Creature {
constructor (name: Noun, pronouns: Pronoun, options: {
@@ -33,6 +34,9 @@ export class Human extends Creature {
new StatusConsequence(
() => new SurrenderEffect()
)
],
conditions: [
new SoloCondition()
]
}
))


Laden…
Abbrechen
Speichern