ZSGG Public Library
Umbra
Endari Hero Unit
import { EndariHeroUnit } from "../../../../defaults/endari.js";
import { Attack, Spell } from "../../../../engine/ability.js";
class Umbra extends EndariHeroUnit {
override uuid: string;
static override src = "src/zerospace/mercenary/endari/hero/umbra.ts";
constructor() {
super();
this.name = "Umbra";
this.description =
"Mobile hero who can cloak and jump to ambush enemies. Can temporarily transform into an Impaler, which deals devastating melee damage.";
// Heroes carry the dev-data cost (only Legion's extra heroes differ); everyone gets one
// free hero at game start, so cost applies to the buildable instance.
this.hexiteCost = 220;
this.buildTime = 5;
this.hotkey = "";
this.uuid = "3ff83458-989d-4759-8cb3-c447430c125e";
this.internalId = "Troop_MPHero_Endari_C";
this.internalPath = "/Game/Nova/Archetypes_Heroes/Troop_MPHero_Endari.Default__Troop_MPHero_Endari_C";
this.internalTags = [
"Attackable.Unit.Hero",
"Logic.SpawnAtOldestSpawner",
"Attackable.Biological",
"Logic.NoVeterancy",
"Local.Endari",
];
this.internalSecondaryTags = ["Biological", "Infantry"];
this.hp = 250;
this.shields = 0;
this.armor = 0;
this.healthRegen = 12;
this.speed = 500;
this.stunResist = 60;
this.supply = 10;
this.turnSpeed = 6000;
this.vision = 1800;
this.pushability = 0.1;
this.transformsInto = ["mercenary/endari/unit/endari-impaler"];
this.attacks.shatteredOnesGrasp = new Attack({
internalId: "Default__Weapon_EndariHero_Ranged_C",
name: "Shattered One's Grasp",
damage: 23,
range: 1200,
cooldown: 1.5,
armorPenetration: 0,
delay: 0.1,
targets: ["ground", "air"],
closeupFirerate: {
threshold: 0.3,
speedup: 1.75,
},
parentId: this.id,
parentUUID: this.uuid,
});
this.spells.jump = new Spell({
name: "Jump",
hotkey: "Q",
description: "Jump to a location and deal 70 damage in an area.",
damage: 70,
cooldown: 30,
delay: 0.6,
range: 1400,
targets: ["map"],
targetMode: "location",
parentId: this.id,
parentUUID: this.uuid,
});
// Transform's stat effect has nowhere to live yet: it reduces armor by 2 while active, and we
// have no model for a mode changing a stat.
this.spells.transform = new Spell({
name: "Transform",
hotkey: "W",
description: "Transform into Impaler for 20 seconds.",
cooldown: 90,
duration: 20,
targets: ["self"],
parentId: this.id,
parentUUID: this.uuid,
});
this.spells.cloak = new Spell({
name: "Cloak",
hotkey: "E",
description: "Targeted unit gains cloak and +20% move speed for 8 seconds.",
cooldown: 20,
duration: 8,
targets: ["ground", "air"],
targetMode: "unit",
parentId: this.id,
parentUUID: this.uuid,
});
}
}
export default Umbra;