ZSGG Public Library
Harbinger
Grell T2 Army Unit
import { GrellArmyUnit } from "../../../../defaults/grell.js";
import { Attack, Spell, Upgrade } from "../../../../engine/ability.js";
export class Harbinger extends GrellArmyUnit {
override uuid: string;
static override src = "src/zerospace/faction/grell/unit/harbinger.ts";
constructor() {
super();
this.hexiteCost = 75;
this.fluxCost = 50;
this.buildTime = 35;
this.buildCount = 1;
this.name = "Harbinger";
this.tier = "T2";
this.hotkey = "W";
this.uuid = "ea9c4201-f6df-47b8-b54e-732b03a5daab";
this.internalId = "Troop_GrellHarbinger_C";
this.internalPath = "/Game/Nova/Archetypes_Troops/Troop_GrellHarbinger.Default__Troop_GrellHarbinger_C";
this.internalTags = [
"Attackable.Unit.Troop",
"Attackable.Unit.Light",
"Attackable.ArmorType.Heavy",
"Attackable.Biological",
];
this.internalSecondaryTags = [];
this.unlockedBy = ["faction/grell/building/incubator"];
this.createdBy = ["faction/grell/building/incubator"];
this.upgradedBy = ["faction/grell/building/macrogenesis-canopy"];
this.hp = 400;
this.shields = 0;
this.armor = 1;
this.armorType = "heavy";
this.speed = 475;
this.supply = 4;
this.turnSpeed = 4000;
this.healthRegen = 9;
this.description = "Durable ranged unit that can cause damaging eruptions.";
const harbinger = this;
this.attacks.corrosiveSpit = new Attack({
name: "Corrosive Spit",
damage: 27,
range: 600,
cooldown: 2,
armorPenetration: 0,
delay: 0.17,
targets: ["ground"],
bonusDamage: [{ multiplier: 1.5, vs: ["armor:heavy"] }],
parentId: this.id,
parentUUID: this.uuid,
});
this.spells.eruption = new Spell({
name: "Eruption",
description: "Deals 125 damage to units in the target area after 1.5 seconds.",
targets: ["air", "ground"],
energyCost: 100,
energyType: "health",
delay: 1.5,
range: 1500,
hotkey: "E",
damage: 150,
splash: {
range: 100,
multiplier: 1.0,
},
parentId: this.id,
parentUUID: this.uuid,
});
this.upgrades.thermalCarapace = new Upgrade({
name: "Thermal Carapace",
description: "+2 armor",
tier: "T2.5" as const,
fluxCost: 150,
researchTime: 50,
apply() {
harbinger.armor = (harbinger.armor ?? 0) + 1;
},
parentId: this.id,
parentUUID: this.uuid,
});
this.upgrades.cardiovascularBoost = new Upgrade({
name: "Cardiovascular Boost",
description: "+200 move speed",
tier: "T2.5" as const,
fluxCost: 150,
researchTime: 50,
apply() {
harbinger.speed = (harbinger.speed ?? 0) + 100;
},
parentId: this.id,
parentUUID: this.uuid,
});
this.upgrades.hemalVents = new Upgrade({
name: "Hemal Vents",
description: "Increases Eruption radius by 50%",
tier: "T3.5" as const,
fluxCost: 150,
researchTime: 60,
apply() {
harbinger.spells.eruption.range = (harbinger.spells.eruption.range ?? 0) * 1.5;
},
parentId: this.id,
parentUUID: this.uuid,
});
this.upgrades.coagulatedMembrane = new Upgrade({
name: "Coagulated Membrane",
description: "Reduces Eruption HP Cost to 50",
tier: "T3.5" as const,
fluxCost: 200,
researchTime: 60,
apply() {
harbinger.spells.eruption.energyCost = 50;
},
parentId: this.id,
parentUUID: this.uuid,
});
}
}
export default Harbinger;