Skip to content

Commit

Permalink
Rework RpgStatus.Methods.damage to increment attacker pride
Browse files Browse the repository at this point in the history
  • Loading branch information
hubol committed Aug 13, 2024
1 parent b9c8f02 commit 85f836d
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 30 deletions.
8 changes: 5 additions & 3 deletions src/igua/mixins/mxn-enemy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { layers } from "../globals";
import { RpgFaction } from "../rpg/rpg-faction";
import { RpgAttack } from "../rpg/rpg-attack";
import { merge } from "../../lib/object/merge";
import { playerObj } from "../objects/obj-player";

interface MxnEnemyArgs {
hurtboxes: DisplayObject[];
Expand All @@ -28,6 +29,7 @@ export function mxnEnemy(obj: DisplayObject, args: MxnEnemyArgs) {
faction: RpgFaction.Enemy,
quirks: {
emotionalDamageIsFatal: false,
incrementsAttackerPrideOnDamage: false,
}
};

Expand All @@ -36,12 +38,12 @@ export function mxnEnemy(obj: DisplayObject, args: MxnEnemyArgs) {
valuables: {
max: 7,
min: 2,
deltaShame: -3,
deltaPride: -3,
}
};

const enemy: RpgEnemy.Model = {
shameCount: 0,
pride: 0,
}

const died = () => {
Expand All @@ -68,7 +70,7 @@ export function mxnEnemy(obj: DisplayObject, args: MxnEnemyArgs) {
.dispatches<'mxnEnemy.died'>()
.merge({
strikePlayer(attack: RpgAttack.Model) {
RpgEnemy.Methods.strikePlayer(enemy, attack);
playerObj.damage(attack, enemy);
}
});

Expand Down
2 changes: 1 addition & 1 deletion src/igua/mixins/mxn-projectile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export function mxnProjectile(obj: DisplayObject, args: MxnProjectileArgs) {
for (const instance of Instances(mxnRpgStatus)) {
// TODO filter by faction here pls
if (obj.collidesOne(instance.hurtboxes)) {
const result = instance.damage(args.attack);
const result = instance.damage(args.attack, args.enemy);
if (!result.rejected)
self.dispatch('hit');
if (self.destroyed)
Expand Down
7 changes: 4 additions & 3 deletions src/igua/mixins/mxn-rpg-status.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { DisplayObject } from "pixi.js";
import { RpgStatus } from "../rpg/rpg-status";
import { RpgAttack } from "../rpg/rpg-attack";
import { RpgEnemy } from "../rpg/rpg-enemy";

interface MxnRpgStatusArgs {
status: RpgStatus.Model;
Expand All @@ -13,10 +14,10 @@ export function mxnRpgStatus(obj: DisplayObject, args: MxnRpgStatusArgs) {

const rpgStatusObj = obj
.track(mxnRpgStatus)
.merge({ hurtboxes: args.hurtboxes })
.merge(args)
.merge({
damage(attack: RpgAttack.Model) {
return RpgStatus.Methods.damage(args.status, args.effects, attack);
damage(attack: RpgAttack.Model, attacker?: RpgEnemy.Model) {
return RpgStatus.Methods.damage(args.status, args.effects, attack, attacker);
},
heal(amount: number) {
RpgStatus.Methods.heal(args.status, args.effects, amount);
Expand Down
18 changes: 1 addition & 17 deletions src/igua/rpg/rpg-enemy.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,9 @@
import { Integer } from "../../lib/math/number-alias-types";
import { playerObj } from "../objects/obj-player";
import { RpgAttack } from "./rpg-attack";
import { RpgPlayer } from "./rpg-player";

export namespace RpgEnemy {
export interface Model {
shameCount: Integer;
pride: Integer;
// TODO I had loot here before, does it need to be here?
// This shape for an enemy looks like a lie...
}

export const Methods = {
strikePlayer(model: Model, attack: RpgAttack.Model) {
if (!playerObj)
return;

// TODO not sure if a "slow poison" should increase the shameCount

const result = playerObj.damage(attack);
if (!result.rejected && result.damaged)
model.shameCount++;
}
}
}
8 changes: 4 additions & 4 deletions src/igua/rpg/rpg-loot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export namespace RpgLoot {
valuables: {
min: Integer;
max: Integer;
deltaShame: Integer;
deltaPride: Integer;
}
}

Expand All @@ -23,12 +23,12 @@ export namespace RpgLoot {
}

function computeValuables(valuables: Model['valuables'], enemy: RpgEnemy.Model): Integer {
if (valuables.deltaShame === 0)
if (valuables.deltaPride === 0)
return Math.max(valuables.max, valuables.min);

const delta = valuables.deltaShame * enemy.shameCount;
const delta = valuables.deltaPride * enemy.pride;

return valuables.deltaShame < 0
return valuables.deltaPride < 0
? Math.max(valuables.min, valuables.max + delta)
: Math.min(valuables.max, valuables.min + delta);
}
Expand Down
1 change: 1 addition & 0 deletions src/igua/rpg/rpg-player.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ export const RpgPlayer = {
faction: RpgFaction.Player,
quirks: {
emotionalDamageIsFatal: true,
incrementsAttackerPrideOnDamage: true,
},
} satisfies RpgStatus.Model,
get WalkingTopSpeed() {
Expand Down
8 changes: 6 additions & 2 deletions src/igua/rpg/rpg-status.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { RpgAttack } from "./rpg-attack";
import { RpgEnemy } from "./rpg-enemy";
import { RpgFaction } from "./rpg-faction";

export namespace RpgStatus {
Expand All @@ -18,6 +19,7 @@ export namespace RpgStatus {
max: number;
};
quirks: {
incrementsAttackerPrideOnDamage: boolean;
emotionalDamageIsFatal: boolean;
};
}
Expand Down Expand Up @@ -63,8 +65,7 @@ export namespace RpgStatus {
model.invulnerable = Math.max(0, model.invulnerable - 1);
},

// TODO I think API of damage methods should pass ALL damage types, build ups
damage(model: Model, effects: Effects, attack: RpgAttack.Model): DamageResult {
damage(model: Model, effects: Effects, attack: RpgAttack.Model, attacker?: RpgEnemy.Model): DamageResult {
if (attack.versus !== RpgFaction.Anyone && attack.versus !== model.faction)
return { rejected: true, wrongFaction: true };

Expand Down Expand Up @@ -113,6 +114,9 @@ export namespace RpgStatus {
if (damaged && model.health <= 0)
effects.died();

if (damaged && attacker && model.quirks.incrementsAttackerPrideOnDamage)
attacker.pride++;

return { rejected: false, ailments, damaged };
},

Expand Down

0 comments on commit 85f836d

Please sign in to comment.