Equipment balancing
This commit is contained in:
parent
f9d22c31f6
commit
7a99f97b00
|
@ -69,6 +69,13 @@
|
|||
var result = document.getElementById("result");
|
||||
var current_level = 1;
|
||||
var current_name = "";
|
||||
var qualities = {}
|
||||
|
||||
qualities[TS.SpaceTac.EquipmentQuality.WEAK] = "#e66";
|
||||
qualities[TS.SpaceTac.EquipmentQuality.COMMON] = "#eee";
|
||||
qualities[TS.SpaceTac.EquipmentQuality.FINE] = "#669";
|
||||
qualities[TS.SpaceTac.EquipmentQuality.PREMIUM] = "#66b";
|
||||
qualities[TS.SpaceTac.EquipmentQuality.LEGENDARY] = "#66e";
|
||||
|
||||
function update() {
|
||||
result.innerHTML = "";
|
||||
|
@ -79,13 +86,17 @@
|
|||
TS.iterenum(TS.SpaceTac.EquipmentQuality, function (quality) {
|
||||
var loot = template.generate(current_level, quality);
|
||||
|
||||
let title = document.createElement("h2");
|
||||
title.textContent = loot.getFullName() + " (Price " + loot.price.toString() + ")";
|
||||
result.appendChild(title);
|
||||
var block = document.createElement("div");
|
||||
block.setAttribute("style", "color:" + qualities[quality]);
|
||||
result.appendChild(block);
|
||||
|
||||
let description = document.createElement("pre");
|
||||
var title = document.createElement("h2");
|
||||
title.textContent = loot.getFullName() + " (Price " + loot.price.toString() + ")";
|
||||
block.appendChild(title);
|
||||
|
||||
var description = document.createElement("pre");
|
||||
description.textContent = loot.getFullDescription();
|
||||
result.appendChild(description);
|
||||
block.appendChild(description);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ module TS.SpaceTac.Specs {
|
|||
var looter = new LootGenerator(random, false);
|
||||
var template = new LootTemplate(SlotType.Power, "Nuclear Reactor");
|
||||
template.setSkillsRequirements({ "skill_photons": istep(4) });
|
||||
template.addAttributeEffect("power_capacity", 1);
|
||||
template.addAttributeEffect("power_capacity", istep(1));
|
||||
looter.templates = [template];
|
||||
spyOn(outcome, "getLootGenerator").and.returnValue(looter);
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ module TS.SpaceTac.Specs {
|
|||
expect(result.slot_type).toEqual(SlotType.Power);
|
||||
expect(result.code).toEqual("powergenerator");
|
||||
expect(result.name).toEqual("Power Generator");
|
||||
expect(result.price).toEqual(300);
|
||||
expect(result.price).toEqual(350);
|
||||
expect(result.level).toEqual(2);
|
||||
expect(result.quality).toEqual(EquipmentQuality.COMMON);
|
||||
expect(result.description).toEqual("A great power generator !");
|
||||
|
@ -33,7 +33,7 @@ module TS.SpaceTac.Specs {
|
|||
|
||||
it("applies requirements on skills", function () {
|
||||
let template = new LootTemplate(SlotType.Hull, "Hull");
|
||||
template.setSkillsRequirements({ "skill_photons": 1, "skill_gravity": istep(2, istep(1)) });
|
||||
template.setSkillsRequirements({ "skill_photons": istep(1), "skill_gravity": istep(2, istep(1)) });
|
||||
|
||||
let result = template.generate(1);
|
||||
expect(result.requirements).toEqual({
|
||||
|
@ -123,13 +123,13 @@ module TS.SpaceTac.Specs {
|
|||
let template = new LootTemplate(SlotType.Weapon, "Weapon");
|
||||
expect(template.hasDamageEffect()).toBe(false);
|
||||
|
||||
template.addAttributeEffect("maneuvrability", 1);
|
||||
template.addAttributeEffect("maneuvrability", irepeat(1));
|
||||
expect(template.hasDamageEffect()).toBe(false);
|
||||
|
||||
template.addFireAction(1, 50, 50, [new EffectTemplate(new BaseEffect("test"), {})]);
|
||||
template.addFireAction(irepeat(1), irepeat(50), irepeat(50), [new EffectTemplate(new BaseEffect("test"), {})]);
|
||||
expect(template.hasDamageEffect()).toBe(false);
|
||||
|
||||
template.addFireAction(1, 50, 50, [new EffectTemplate(new DamageEffect(20), {})]);
|
||||
template.addFireAction(irepeat(1), irepeat(50), irepeat(50), [new EffectTemplate(new DamageEffect(20), {})]);
|
||||
expect(template.hasDamageEffect()).toBe(true);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
module TS.SpaceTac {
|
||||
/**
|
||||
* A leveled value is either a number multiplied by the level, or a custom iterator
|
||||
* A leveled value is an iterator yielding the desired value for each level (first item is for level 1, and so on)
|
||||
*/
|
||||
type LeveledValue = number | Iterator<number>;
|
||||
type LeveledValue = Iterator<number>;
|
||||
|
||||
/**
|
||||
* Modifiers of generated equipment
|
||||
|
@ -14,12 +14,15 @@ module TS.SpaceTac {
|
|||
* Resolve a leveled value
|
||||
*/
|
||||
function resolveForLevel(value: LeveledValue, level: number): number {
|
||||
if (typeof value === "number") {
|
||||
value *= level;
|
||||
} else {
|
||||
value = iat(value, level - 1) || 0;
|
||||
}
|
||||
return Math.floor(value);
|
||||
let lvalue = iat(value, level - 1) || 0;
|
||||
return Math.floor(lvalue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Balanced generic leveled value
|
||||
*/
|
||||
export function leveled(base: number, increment = base * 0.4, exponent = 0.2): LeveledValue {
|
||||
return istep(base, istep(increment, irepeat(increment * exponent)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -103,11 +106,11 @@ module TS.SpaceTac {
|
|||
// Modifiers applied to "common" equipment to obtain a specific quality
|
||||
protected quality_modifiers: QualityModifier[]
|
||||
|
||||
constructor(slot: SlotType, name: string, description = "", price_base = 100, price_inflation = 200) {
|
||||
constructor(slot: SlotType, name: string, description = "", base_price = 100) {
|
||||
this.slot = slot;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.price = istep(price_base, istep(price_inflation, irepeat(price_inflation)));
|
||||
this.price = leveled(base_price, base_price * 2.5, 1);
|
||||
this.base_modifiers = [];
|
||||
this.quality_modifiers = [LootQualityModifiers.applyStandard];
|
||||
}
|
||||
|
|
|
@ -151,11 +151,11 @@ module TS.SpaceTac {
|
|||
}
|
||||
|
||||
/**
|
||||
* Try to upgrade a skill by 1 point
|
||||
* Try to upgrade a skill by 1 point or more
|
||||
*/
|
||||
upgradeSkill(skill: keyof ShipSkills) {
|
||||
if (this.getAvailableUpgradePoints() > 0) {
|
||||
this.skills[skill].add(1);
|
||||
upgradeSkill(skill: keyof ShipSkills, points = 1) {
|
||||
if (this.getAvailableUpgradePoints() >= points) {
|
||||
this.skills[skill].add(points);
|
||||
this.updateAttributes();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,34 +4,34 @@ module TS.SpaceTac.Equipments {
|
|||
let template = new DamageProtector();
|
||||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_time": 1 });
|
||||
expect(equipment.requirements).toEqual({ "skill_time": 3 });
|
||||
expect(equipment.action).toEqual(new ToggleAction(equipment, 2, 300, [
|
||||
new DamageModifierEffect(-30)
|
||||
new DamageModifierEffect(-17)
|
||||
]));
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_time": 3 });
|
||||
expect(equipment.requirements).toEqual({ "skill_time": 4 });
|
||||
expect(equipment.action).toEqual(new ToggleAction(equipment, 2, 310, [
|
||||
new DamageModifierEffect(-31)
|
||||
new DamageModifierEffect(-22)
|
||||
]));
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_time": 5 });
|
||||
expect(equipment.action).toEqual(new ToggleAction(equipment, 2, 320, [
|
||||
new DamageModifierEffect(-32)
|
||||
expect(equipment.action).toEqual(new ToggleAction(equipment, 2, 322, [
|
||||
new DamageModifierEffect(-28)
|
||||
]));
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_time": 19 });
|
||||
expect(equipment.action).toEqual(new ToggleAction(equipment, 3, 390, [
|
||||
new DamageModifierEffect(-39)
|
||||
expect(equipment.requirements).toEqual({ "skill_time": 22 });
|
||||
expect(equipment.action).toEqual(new ToggleAction(equipment, 8, 462, [
|
||||
new DamageModifierEffect(-60)
|
||||
]));
|
||||
});
|
||||
|
||||
it("reduces damage around the ship", function () {
|
||||
let battle = new Battle();
|
||||
let ship1 = battle.fleets[0].addShip();
|
||||
ship1.upgradeSkill("skill_time");
|
||||
ship1.upgradeSkill("skill_time", 3);
|
||||
let protector = ship1.addSlot(SlotType.Weapon).attach(new DamageProtector().generate(1));
|
||||
TestTools.setShipAP(ship1, 10);
|
||||
let ship2 = battle.fleets[0].addShip();
|
||||
|
@ -64,8 +64,8 @@ module TS.SpaceTac.Equipments {
|
|||
iforeach(battle.iships(), ship => new DamageEffect(10).applyOnShip(ship, ship1));
|
||||
|
||||
expect(ship1.getValue("power")).toEqual(8);
|
||||
expect(ship1.getValue("hull")).toEqual(83);
|
||||
expect(ship2.getValue("hull")).toEqual(83);
|
||||
expect(ship1.getValue("hull")).toEqual(82);
|
||||
expect(ship2.getValue("hull")).toEqual(82);
|
||||
expect(ship3.getValue("hull")).toEqual(80);
|
||||
|
||||
result = protector.action.apply(ship1, null);
|
||||
|
@ -75,8 +75,8 @@ module TS.SpaceTac.Equipments {
|
|||
iforeach(battle.iships(), ship => new DamageEffect(10).applyOnShip(ship, ship1));
|
||||
|
||||
expect(ship1.getValue("power")).toEqual(8);
|
||||
expect(ship1.getValue("hull")).toEqual(73);
|
||||
expect(ship2.getValue("hull")).toEqual(73);
|
||||
expect(ship1.getValue("hull")).toEqual(72);
|
||||
expect(ship2.getValue("hull")).toEqual(72);
|
||||
expect(ship3.getValue("hull")).toEqual(70);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
module TS.SpaceTac.Equipments {
|
||||
export class DamageProtector extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Weapon, "Damage Protector", "Extend a time-displacement subfield, to reduce damage taken by ships around");
|
||||
super(SlotType.Weapon, "Damage Protector", "Extend a time-displacement subfield, to reduce damage taken by ships around", 145);
|
||||
|
||||
this.setSkillsRequirements({ "skill_time": istep(1, irepeat(2)) });
|
||||
this.addToggleAction(istep(2, irepeat(0.2)), istep(300, irepeat(10)), [
|
||||
new EffectTemplate(new DamageModifierEffect(), { factor: istep(-30, irepeat(-1)) })
|
||||
this.setSkillsRequirements({ "skill_time": leveled(3) });
|
||||
this.addToggleAction(leveled(2, 0.4), leveled(300, 10), [
|
||||
new EffectTemplate(new DamageModifierEffect(), { factor: imap(leveled(-20), x => x * (100 / (100 - x))) })
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,24 +12,24 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 2 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 4)]);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 2)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 220, 120, 70));
|
||||
expect(equipment.price).toEqual(320);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 210, 120, 70));
|
||||
expect(equipment.price).toEqual(420);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 6)]);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 3)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 240, 120, 70));
|
||||
expect(equipment.price).toEqual(720);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 220, 120, 70));
|
||||
expect(equipment.price).toEqual(1020);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 10 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 20)]);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 17 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 14)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 380, 120, 70));
|
||||
expect(equipment.price).toEqual(9120);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 290, 120, 70));
|
||||
expect(equipment.price).toEqual(13620);
|
||||
});
|
||||
|
||||
it("generates IonThruster based on level", function () {
|
||||
|
@ -46,22 +46,22 @@ module TS.SpaceTac.Equipments {
|
|||
expect(equipment.requirements).toEqual({ "skill_photons": 2 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 2)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 1));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 135, 120, 80));
|
||||
expect(equipment.price).toEqual(380);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 130, 120, 80));
|
||||
expect(equipment.price).toEqual(525);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 3 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 3)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 1));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 150, 120, 80));
|
||||
expect(equipment.price).toEqual(840);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 140, 120, 80));
|
||||
expect(equipment.price).toEqual(1275);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 10 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 10)]);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 17 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 17)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 1));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 255, 120, 80));
|
||||
expect(equipment.price).toEqual(10500);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 210, 120, 80));
|
||||
expect(equipment.price).toEqual(17025);
|
||||
});
|
||||
|
||||
it("generates VoidhawkEngine based on level", function () {
|
||||
|
@ -69,31 +69,31 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 2 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", -5)]);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", -3)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 250, 0));
|
||||
expect(equipment.price).toEqual(340);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 270, 0));
|
||||
expect(equipment.price).toEqual(300);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 4 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", -5)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 240, 0));
|
||||
expect(equipment.price).toEqual(500);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 6 });
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 3 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", -4)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 230, 0));
|
||||
expect(equipment.price).toEqual(820);
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 245, 0));
|
||||
expect(equipment.price).toEqual(1050);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 5 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", -4)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 224, 0));
|
||||
expect(equipment.price).toEqual(2550);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 20 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 2)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 160, 0));
|
||||
expect(equipment.price).toEqual(7540);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 26 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", -5)]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 0));
|
||||
expect(equipment.action).toEqual(new MoveAction(equipment, 2000, 155, 0));
|
||||
expect(equipment.price).toEqual(34050);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -5,32 +5,32 @@ module TS.SpaceTac.Equipments {
|
|||
constructor() {
|
||||
super(SlotType.Engine, "Rocket Engine", "First-era conventional deep-space engine, based on gas exhausts pushed through a nozzle", 120);
|
||||
|
||||
this.setSkillsRequirements({ "skill_materials": 1 });
|
||||
this.setCooldown(irepeat(2), 0);
|
||||
this.addAttributeEffect("maneuvrability", 2);
|
||||
this.addMoveAction(istep(200, irepeat(20)), undefined, irepeat(70));
|
||||
this.setSkillsRequirements({ "skill_materials": leveled(1, 1) });
|
||||
this.setCooldown(irepeat(2), leveled(0));
|
||||
this.addAttributeEffect("maneuvrability", leveled(2));
|
||||
this.addMoveAction(leveled(200, 10, 0), undefined, irepeat(70));
|
||||
}
|
||||
}
|
||||
|
||||
export class IonThruster extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Engine, "Ion Thruster", "Electric propulsion based on accelerating ions through an electrostatic grid", 150, 230);
|
||||
super(SlotType.Engine, "Ion Thruster", "Electric propulsion based on accelerating ions through an electrostatic grid", 150);
|
||||
|
||||
this.setSkillsRequirements({ "skill_photons": 1 });
|
||||
this.setSkillsRequirements({ "skill_photons": leveled(1, 1) });
|
||||
this.setCooldown(irepeat(3), irepeat(1));
|
||||
this.addAttributeEffect("maneuvrability", 1);
|
||||
this.addMoveAction(istep(120, irepeat(15)));
|
||||
this.addAttributeEffect("maneuvrability", leveled(1, 1));
|
||||
this.addMoveAction(leveled(120, 10, 0));
|
||||
}
|
||||
}
|
||||
|
||||
export class VoidhawkEngine extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Engine, "VoidHawk Engine", "Mid-range gravity field warp generator, allowing to make small jumps", 340, 160);
|
||||
super(SlotType.Engine, "VoidHawk Engine", "Mid-range gravity field warp generator, allowing to make small jumps", 300);
|
||||
|
||||
this.setSkillsRequirements({ "skill_gravity": 2 });
|
||||
this.setCooldown(irepeat(1), 0);
|
||||
this.addAttributeEffect("maneuvrability", istep(-5, irepeat(0.8)));
|
||||
this.addMoveAction(irepeat(2000), istep(250, irepeat(-10)), irepeat(0));
|
||||
this.setSkillsRequirements({ "skill_gravity": leveled(2, 1.5) });
|
||||
this.setCooldown(leveled(1, 0.2, 0), irepeat(0));
|
||||
this.addAttributeEffect("maneuvrability", leveled(-3, -0.1));
|
||||
this.addMoveAction(irepeat(2000), imap(leveled(1), x => 420 - (300 * x / (x + 1))), irepeat(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,19 +5,27 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 1 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(30, 20)]));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 500, 0, [new DamageEffect(30, 20)]));
|
||||
expect(equipment.price).toEqual(100);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 2));
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 2 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(35, 25)]));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 512, 0, [new DamageEffect(42, 28)]));
|
||||
expect(equipment.price).toEqual(350);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 2));
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(40, 30)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 4 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 526, 0, [new DamageEffect(56, 37)]));
|
||||
expect(equipment.price).toEqual(850);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 2));
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 10 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(75, 65)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 23 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 694, 0, [new DamageEffect(224, 149)]));
|
||||
expect(equipment.price).toEqual(11350);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(2, 2));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@ module TS.SpaceTac.Equipments {
|
|||
constructor() {
|
||||
super(SlotType.Weapon, "Gatling Gun", "Mechanical weapon using loads of metal bullets propelled by guided explosions");
|
||||
|
||||
this.setSkillsRequirements({ "skill_materials": 1 });
|
||||
this.setSkillsRequirements({ "skill_materials": leveled(1, 1.4) });
|
||||
this.setCooldown(irepeat(2), irepeat(2));
|
||||
this.addFireAction(irepeat(3), irepeat(600), 0, [
|
||||
new EffectTemplate(new DamageEffect(), { base: istep(30, irepeat(5)), span: istep(20, irepeat(5)) })
|
||||
this.addFireAction(irepeat(3), leveled(500, 12), irepeat(0), [
|
||||
new EffectTemplate(new DamageEffect(), { base: leveled(30), span: leveled(20) })
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,23 +5,23 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 1 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 200)]);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 100)]);
|
||||
expect(equipment.price).toEqual(100);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 2 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 220)]);
|
||||
expect(equipment.price).toEqual(300);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 140)]);
|
||||
expect(equipment.price).toEqual(350);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 240)]);
|
||||
expect(equipment.price).toEqual(700);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 188)]);
|
||||
expect(equipment.price).toEqual(850);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 10 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 380)]);
|
||||
expect(equipment.price).toEqual(9100);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 17 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 748)]);
|
||||
expect(equipment.price).toEqual(11350);
|
||||
});
|
||||
|
||||
it("generates HardCoatedHull based on level", function () {
|
||||
|
@ -30,34 +30,34 @@ module TS.SpaceTac.Equipments {
|
|||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 2 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 300),
|
||||
new AttributeEffect("hull_capacity", 130),
|
||||
new AttributeEffect("maneuvrability", -2),
|
||||
]);
|
||||
expect(equipment.price).toEqual(120);
|
||||
expect(equipment.price).toEqual(124);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 4 });
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 315),
|
||||
new AttributeEffect("hull_capacity", 182),
|
||||
new AttributeEffect("maneuvrability", -3),
|
||||
]);
|
||||
expect(equipment.price).toEqual(330);
|
||||
expect(equipment.price).toEqual(434);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 6 });
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 5 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 330),
|
||||
new AttributeEffect("maneuvrability", -4),
|
||||
new AttributeEffect("hull_capacity", 244),
|
||||
new AttributeEffect("maneuvrability", -5),
|
||||
]);
|
||||
expect(equipment.price).toEqual(750);
|
||||
expect(equipment.price).toEqual(1054);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 20 });
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 24 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 435),
|
||||
new AttributeEffect("maneuvrability", -11),
|
||||
new AttributeEffect("hull_capacity", 972),
|
||||
new AttributeEffect("maneuvrability", -19),
|
||||
]);
|
||||
expect(equipment.price).toEqual(9570);
|
||||
expect(equipment.price).toEqual(14074);
|
||||
});
|
||||
|
||||
it("generates FractalHull based on level", function () {
|
||||
|
@ -66,34 +66,41 @@ module TS.SpaceTac.Equipments {
|
|||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 1 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 260),
|
||||
new AttributeEffect("maneuvrability", -1),
|
||||
new AttributeEffect("hull_capacity", 60),
|
||||
new AttributeEffect("precision", 2),
|
||||
]);
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 1, 0, 0, [
|
||||
new ValueEffect("hull", 60)
|
||||
]))
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 4));
|
||||
expect(equipment.price).toEqual(250);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 2 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 270),
|
||||
new AttributeEffect("maneuvrability", -2),
|
||||
]);
|
||||
expect(equipment.price).toEqual(480);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 3 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 280),
|
||||
new AttributeEffect("maneuvrability", -2),
|
||||
new AttributeEffect("hull_capacity", 84),
|
||||
new AttributeEffect("precision", 2),
|
||||
]);
|
||||
expect(equipment.price).toEqual(940);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 4));
|
||||
expect(equipment.price).toEqual(875);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 5 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 112),
|
||||
new AttributeEffect("precision", 3),
|
||||
]);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 4));
|
||||
expect(equipment.price).toEqual(2125);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 10 });
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 33 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("hull_capacity", 350),
|
||||
new AttributeEffect("maneuvrability", -6),
|
||||
new AttributeEffect("hull_capacity", 448),
|
||||
new AttributeEffect("precision", 14),
|
||||
]);
|
||||
expect(equipment.price).toEqual(10600);
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 4));
|
||||
expect(equipment.price).toEqual(28375);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -5,28 +5,32 @@ module TS.SpaceTac.Equipments {
|
|||
constructor() {
|
||||
super(SlotType.Hull, "Iron Hull", "Protective hull, based on layered iron alloys");
|
||||
|
||||
this.setSkillsRequirements({ "skill_materials": 1 });
|
||||
this.addAttributeEffect("hull_capacity", istep(200, irepeat(20)));
|
||||
this.setSkillsRequirements({ "skill_materials": leveled(1, 1) });
|
||||
this.addAttributeEffect("hull_capacity", leveled(100));
|
||||
}
|
||||
}
|
||||
|
||||
export class HardCoatedHull extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Hull, "Hard Coated Hull", "Hardened hull, with titanium coating", 120, 210);
|
||||
super(SlotType.Hull, "Hard Coated Hull", "Hardened hull, with titanium coating", 124);
|
||||
|
||||
this.setSkillsRequirements({ "skill_materials": 2 });
|
||||
this.addAttributeEffect("hull_capacity", istep(300, irepeat(15)));
|
||||
this.addAttributeEffect("maneuvrability", istep(-2, irepeat(-1)));
|
||||
this.setSkillsRequirements({ "skill_materials": leveled(2, 1.4) });
|
||||
this.addAttributeEffect("hull_capacity", leveled(130));
|
||||
this.addAttributeEffect("maneuvrability", leveled(-2, -1));
|
||||
}
|
||||
}
|
||||
|
||||
export class FractalHull extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Hull, "Fractal Hull", "Hull composed of recursively bound quantum patches", 250, 230);
|
||||
super(SlotType.Hull, "Fractal Hull", "Hull composed of recursively bound quantum patches", 250);
|
||||
|
||||
this.setSkillsRequirements({ "skill_quantum": 1 });
|
||||
this.addAttributeEffect("hull_capacity", istep(260, irepeat(10)));
|
||||
this.addAttributeEffect("maneuvrability", istep(-1, irepeat(-0.5)));
|
||||
this.setSkillsRequirements({ "skill_quantum": leveled(1, 2) });
|
||||
this.addAttributeEffect("hull_capacity", leveled(60));
|
||||
this.addAttributeEffect("precision", leveled(2));
|
||||
this.addFireAction(leveled(1, 0.1), irepeat(0), irepeat(0), [
|
||||
new EffectTemplate(new ValueEffect("hull"), { value: leveled(60) })
|
||||
])
|
||||
this.setCooldown(irepeat(1), irepeat(4));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,30 +10,34 @@ module TS.SpaceTac.Equipments {
|
|||
new AttributeEffect("power_capacity", 7),
|
||||
new AttributeEffect("power_generation", 4),
|
||||
]);
|
||||
expect(equipment.price).toEqual(395);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 2 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("maneuvrability", 2),
|
||||
new AttributeEffect("power_capacity", 8),
|
||||
new AttributeEffect("power_generation", 4),
|
||||
]);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 3 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("maneuvrability", 3),
|
||||
new AttributeEffect("power_capacity", 9),
|
||||
new AttributeEffect("power_generation", 4),
|
||||
new AttributeEffect("maneuvrability", 2),
|
||||
new AttributeEffect("power_capacity", 7),
|
||||
new AttributeEffect("power_generation", 5),
|
||||
]);
|
||||
expect(equipment.price).toEqual(1382);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 5 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("maneuvrability", 3),
|
||||
new AttributeEffect("power_capacity", 8),
|
||||
new AttributeEffect("power_generation", 5),
|
||||
]);
|
||||
expect(equipment.price).toEqual(3357);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 10 });
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 33 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("maneuvrability", 10),
|
||||
new AttributeEffect("power_capacity", 16),
|
||||
new AttributeEffect("power_generation", 6),
|
||||
new AttributeEffect("power_capacity", 15),
|
||||
new AttributeEffect("power_generation", 12),
|
||||
]);
|
||||
expect(equipment.price).toEqual(44832);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
module TS.SpaceTac.Equipments {
|
||||
export class NuclearReactor extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Power, "Nuclear Reactor", "A standard nuclear power core, drawing power from atom fusion cycles");
|
||||
super(SlotType.Power, "Nuclear Reactor", "A standard nuclear power core, drawing power from atom fusion cycles", 395);
|
||||
|
||||
this.setSkillsRequirements({ "skill_photons": 1 });
|
||||
this.addAttributeEffect("maneuvrability", istep(1));
|
||||
this.addAttributeEffect("power_capacity", istep(7));
|
||||
this.addAttributeEffect("power_generation", istep(4, irepeat(0.3)));
|
||||
this.setSkillsRequirements({ "skill_photons": leveled(1, 2) });
|
||||
this.addAttributeEffect("maneuvrability", leveled(1, 1, 0));
|
||||
this.addAttributeEffect("power_capacity", leveled(7, 0.5));
|
||||
this.addAttributeEffect("power_generation", leveled(4.5, 0.5));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,19 +5,31 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 1 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 500, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 460, 0, [
|
||||
new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)
|
||||
]));
|
||||
expect(equipment.price).toEqual(100);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 2 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 520, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 490, 0, [
|
||||
new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)
|
||||
]));
|
||||
expect(equipment.price).toEqual(350);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 3 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 540, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 4 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 526, 0, [
|
||||
new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)
|
||||
]));
|
||||
expect(equipment.price).toEqual(850);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 10 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 680, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 25 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 946, 0, [
|
||||
new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)
|
||||
]));
|
||||
expect(equipment.price).toEqual(11350);
|
||||
});
|
||||
|
||||
it("limits target's AP", () => {
|
||||
|
|
|
@ -5,9 +5,9 @@ module TS.SpaceTac.Equipments {
|
|||
constructor() {
|
||||
super(SlotType.Weapon, "Power Depleter", "Direct-hit weapon that creates an antimatter well near the target, sucking its power surplus");
|
||||
|
||||
this.setSkillsRequirements({ "skill_antimatter": 1 });
|
||||
this.setSkillsRequirements({ "skill_antimatter": leveled(1, 1.5) });
|
||||
this.setCooldown(irepeat(2), irepeat(3));
|
||||
this.addFireAction(irepeat(4), istep(500, irepeat(20)), 0, [
|
||||
this.addFireAction(irepeat(4), leveled(460, 30), irepeat(0), [
|
||||
new StickyEffectTemplate(new AttributeLimitEffect("power_capacity"), { "value": irepeat(3) }, irepeat(2))
|
||||
]);
|
||||
}
|
||||
|
|
|
@ -5,26 +5,36 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 1 });
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 300, 10, 150, [new ValueEffect("hull", 5)]));
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 300, 10, 150, [
|
||||
new ValueEffect("hull", 2)
|
||||
]));
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 2 });
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 310, 11, 155, [new ValueEffect("hull", 6)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 4 });
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 310, 11, 155, [
|
||||
new ValueEffect("hull", 3)
|
||||
]));
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 3 });
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 320, 12, 160, [new ValueEffect("hull", 7)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 7 });
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 322, 12, 161, [
|
||||
new ValueEffect("hull", 4)
|
||||
]));
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 10 });
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 390, 19, 195, [new ValueEffect("hull", 14)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_quantum": 49 });
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 10, 462, 26, 231, [
|
||||
new ValueEffect("hull", 11)
|
||||
]));
|
||||
});
|
||||
|
||||
it("generates a drone that may repair ships hull", function () {
|
||||
let template = new RepairDrone();
|
||||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 4, 300, 10, 150, [new ValueEffect("hull", 5)]));
|
||||
let equipment = template.generate(4);
|
||||
expect(equipment.action).toEqual(new DeployDroneAction(equipment, 5, 336, 13, 168, [
|
||||
new ValueEffect("hull", 5)
|
||||
]));
|
||||
|
||||
let battle = new Battle();
|
||||
let ship = battle.fleets[0].addShip();
|
||||
|
@ -36,7 +46,7 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
expect(battle.drones.length).toBe(1);
|
||||
let drone = battle.drones[0];
|
||||
expect(drone.duration).toBe(10);
|
||||
expect(drone.duration).toBe(13);
|
||||
ship.setAttribute("hull_capacity", 100);
|
||||
ship.setValue("hull", 93);
|
||||
drone.apply([ship]);
|
||||
|
|
|
@ -6,12 +6,12 @@ module TS.SpaceTac.Equipments {
|
|||
*/
|
||||
export class RepairDrone extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Weapon, "Repair Drone", "Drone able to repair small hull breaches, using quantum patches");
|
||||
super(SlotType.Weapon, "Repair Drone", "Drone able to repair small hull breaches, using quantum patches", 190);
|
||||
|
||||
this.setSkillsRequirements({ "skill_quantum": 1 });
|
||||
this.setCooldown(irepeat(1), istep(3, irepeat(0.2)));
|
||||
this.addDroneAction(irepeat(4), istep(300, irepeat(10)), istep(10, irepeat(1)), istep(150, irepeat(5)), [
|
||||
new EffectTemplate(new ValueEffect("hull"), { "value": istep(5) })
|
||||
this.setSkillsRequirements({ "skill_quantum": leveled(1, 3) });
|
||||
this.setCooldown(irepeat(1), leveled(3));
|
||||
this.addDroneAction(leveled(4, 0.4), leveled(300, 10), leveled(10, 1), leveled(150, 5), [
|
||||
new EffectTemplate(new ValueEffect("hull"), { "value": istep(2) })
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,24 +4,32 @@ module TS.SpaceTac.Equipments {
|
|||
let template = new ShieldTransfer();
|
||||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 1 });
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 3));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 250, [new ValueTransferEffect("shield", -40)]));
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 2 });
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 3));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 270, [new ValueTransferEffect("shield", -44)]));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 250, [
|
||||
new ValueTransferEffect("shield", -40)
|
||||
]));
|
||||
|
||||
equipment = template.generate(3);
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 3 });
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 3));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 290, [new ValueTransferEffect("shield", -48)]));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 270, [
|
||||
new ValueTransferEffect("shield", -44)
|
||||
]));
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 5 });
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 3));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 294, [
|
||||
new ValueTransferEffect("shield", -49)
|
||||
]));
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 10 });
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 26 });
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(3, 3));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 430, [new ValueTransferEffect("shield", -76)]));
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 0, 574, [
|
||||
new ValueTransferEffect("shield", -105)
|
||||
]));
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@ module TS.SpaceTac.Equipments {
|
|||
constructor() {
|
||||
super(SlotType.Weapon, "Shield Transfer", "Generates small gravity wells between the ship's and the target's shields, stealing physical properties and energy");
|
||||
|
||||
this.setSkillsRequirements({ "skill_gravity": 1 });
|
||||
this.setSkillsRequirements({ "skill_gravity": leveled(2, 1.5) });
|
||||
this.setCooldown(irepeat(3), irepeat(3));
|
||||
this.addFireAction(irepeat(3), 0, istep(250, irepeat(20)), [
|
||||
new EffectTemplate(new ValueTransferEffect("shield"), { "amount": istep(-40, irepeat(-4)) })
|
||||
this.addFireAction(irepeat(3), irepeat(0), leveled(250, 20), [
|
||||
new EffectTemplate(new ValueTransferEffect("shield"), { "amount": leveled(-40, -4) })
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,23 +5,23 @@ module TS.SpaceTac.Equipments {
|
|||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 1 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 100)]);
|
||||
expect(equipment.price).toEqual(100);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 80)]);
|
||||
expect(equipment.price).toEqual(95);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 3 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 140)]);
|
||||
expect(equipment.price).toEqual(300);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 112)]);
|
||||
expect(equipment.price).toEqual(332);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 5 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 180)]);
|
||||
expect(equipment.price).toEqual(700);
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 150)]);
|
||||
expect(equipment.price).toEqual(807);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 19 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 460)]);
|
||||
expect(equipment.price).toEqual(9100);
|
||||
expect(equipment.requirements).toEqual({ "skill_photons": 33 });
|
||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 598)]);
|
||||
expect(equipment.price).toEqual(10782);
|
||||
});
|
||||
|
||||
it("generates GravitShield based on level", function () {
|
||||
|
@ -30,7 +30,7 @@ module TS.SpaceTac.Equipments {
|
|||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 2 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 80),
|
||||
new AttributeEffect("shield_capacity", 60),
|
||||
]);
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 2, 0, 300, [new RepelEffect(100)]));
|
||||
expect(equipment.price).toEqual(140);
|
||||
|
@ -38,62 +38,62 @@ module TS.SpaceTac.Equipments {
|
|||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 5 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 110),
|
||||
new AttributeEffect("shield_capacity", 84),
|
||||
]);
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 2, 0, 310, [new RepelEffect(105)]));
|
||||
expect(equipment.price).toEqual(320);
|
||||
expect(equipment.price).toEqual(490);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 8 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 140),
|
||||
new AttributeEffect("shield_capacity", 112),
|
||||
]);
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 2, 0, 320, [new RepelEffect(110)]));
|
||||
expect(equipment.price).toEqual(680);
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 2, 0, 322, [new RepelEffect(111)]));
|
||||
expect(equipment.price).toEqual(1190);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 29 });
|
||||
expect(equipment.requirements).toEqual({ "skill_gravity": 50 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 350),
|
||||
new AttributeEffect("shield_capacity", 448),
|
||||
]);
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 2, 0, 390, [new RepelEffect(145)]));
|
||||
expect(equipment.price).toEqual(8240);
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 2, 0, 462, [new RepelEffect(181)]));
|
||||
expect(equipment.price).toEqual(15890);
|
||||
});
|
||||
|
||||
it("generates InverterShield based on level", function () {
|
||||
let template = new InverterShield();
|
||||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 2 });
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 2, "skill_time": 1 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 130),
|
||||
new AttributeEffect("power_generation", -1),
|
||||
new AttributeEffect("shield_capacity", 140),
|
||||
new AttributeEffect("power_capacity", -1),
|
||||
]);
|
||||
expect(equipment.price).toEqual(300);
|
||||
expect(equipment.price).toEqual(258);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 4 });
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 3, "skill_time": 2 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 175),
|
||||
new AttributeEffect("power_generation", -1),
|
||||
new AttributeEffect("shield_capacity", 196),
|
||||
new AttributeEffect("power_capacity", -1),
|
||||
]);
|
||||
expect(equipment.price).toEqual(460);
|
||||
expect(equipment.price).toEqual(903);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 6 });
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 5, "skill_time": 3 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 220),
|
||||
new AttributeEffect("power_generation", -1),
|
||||
new AttributeEffect("shield_capacity", 263),
|
||||
new AttributeEffect("power_capacity", -1),
|
||||
]);
|
||||
expect(equipment.price).toEqual(780);
|
||||
expect(equipment.price).toEqual(2193);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 20 });
|
||||
expect(equipment.requirements).toEqual({ "skill_antimatter": 26, "skill_time": 17 });
|
||||
expect(equipment.effects).toEqual([
|
||||
new AttributeEffect("shield_capacity", 535),
|
||||
new AttributeEffect("power_generation", -3),
|
||||
new AttributeEffect("shield_capacity", 1047),
|
||||
new AttributeEffect("power_capacity", -4),
|
||||
]);
|
||||
expect(equipment.price).toEqual(7500);
|
||||
expect(equipment.price).toEqual(29283);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -3,32 +3,32 @@
|
|||
module TS.SpaceTac.Equipments {
|
||||
export class ForceField extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Shield, "Force Field", "A basic force field, generated by radiating waves of compressed energy");
|
||||
super(SlotType.Shield, "Force Field", "A basic force field, generated by radiating waves of compressed energy", 95);
|
||||
|
||||
this.setSkillsRequirements({ "skill_photons": istep(1, irepeat(2)) });
|
||||
this.addAttributeEffect("shield_capacity", istep(100, irepeat(40)));
|
||||
this.setSkillsRequirements({ "skill_photons": leveled(1, 2) });
|
||||
this.addAttributeEffect("shield_capacity", leveled(80));
|
||||
}
|
||||
}
|
||||
|
||||
export class GravitShield extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Shield, "Gravit Shield", "A shield able to repel damage and enemies using micro-gravity wells", 140, 180);
|
||||
super(SlotType.Shield, "Gravit Shield", "A shield able to repel damage and enemies using micro-gravity wells", 140);
|
||||
|
||||
this.setSkillsRequirements({ "skill_gravity": istep(2, irepeat(3)) });
|
||||
this.addAttributeEffect("shield_capacity", istep(80, irepeat(30)));
|
||||
this.addFireAction(irepeat(2), 0, istep(300, irepeat(10)), [
|
||||
new EffectTemplate(new RepelEffect(), { value: istep(100, irepeat(5)) })
|
||||
this.setSkillsRequirements({ "skill_gravity": leveled(2, 3) });
|
||||
this.addAttributeEffect("shield_capacity", leveled(60));
|
||||
this.addFireAction(irepeat(2), irepeat(0), leveled(300, 10), [
|
||||
new EffectTemplate(new RepelEffect(), { value: leveled(100, 5) })
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
export class InverterShield extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Shield, "Inverter Shield", "An antimatter shield that tries to cancel inbound energy", 300, 160);
|
||||
super(SlotType.Shield, "Inverter Shield", "An antimatter shield that tries to cancel inbound energy", 258);
|
||||
|
||||
this.setSkillsRequirements({ "skill_antimatter": istep(2, irepeat(2)) });
|
||||
this.addAttributeEffect("shield_capacity", istep(130, irepeat(45)));
|
||||
this.addAttributeEffect("power_generation", istep(-0.2, irepeat(-0.3)));
|
||||
this.setSkillsRequirements({ "skill_antimatter": leveled(2, 1.5), "skill_time": leveled(1, 1) });
|
||||
this.addAttributeEffect("shield_capacity", leveled(140));
|
||||
this.addAttributeEffect("power_capacity", leveled(-0.2, -0.2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,20 +4,28 @@ module TS.SpaceTac.Equipments {
|
|||
let template = new SubMunitionMissile();
|
||||
|
||||
let equipment = template.generate(1);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 1 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 500, 150, [new DamageEffect(30, 2)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 1, "skill_photons": 1 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 500, 150, [new DamageEffect(26, 4)]));
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.price).toEqual(163);
|
||||
|
||||
equipment = template.generate(2);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 2 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 520, 155, [new DamageEffect(32, 3)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 2, "skill_photons": 1 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 520, 155, [new DamageEffect(28, 5)]));
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.price).toEqual(570);
|
||||
|
||||
equipment = template.generate(3);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 540, 160, [new DamageEffect(34, 4)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 3, "skill_photons": 2 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 544, 161, [new DamageEffect(30, 6)]));
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.price).toEqual(1385);
|
||||
|
||||
equipment = template.generate(10);
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 10 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 680, 195, [new DamageEffect(48, 11)]));
|
||||
expect(equipment.requirements).toEqual({ "skill_materials": 20, "skill_photons": 13 });
|
||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 824, 231, [new DamageEffect(58, 20)]));
|
||||
expect(equipment.cooldown).toEqual(new Cooldown(1, 0));
|
||||
expect(equipment.price).toEqual(18500);
|
||||
});
|
||||
|
||||
it("hits several targets in circle", function () {
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
module TS.SpaceTac.Equipments {
|
||||
export class SubMunitionMissile extends LootTemplate {
|
||||
constructor() {
|
||||
super(SlotType.Weapon, "SubMunition Missile", "Explosive missile releasing small shelled payloads, that will in turn explode on impact");
|
||||
super(SlotType.Weapon, "SubMunition Missile", "Explosive missile releasing small shelled payloads, that will in turn explode on impact", 163);
|
||||
|
||||
this.setSkillsRequirements({ "skill_materials": 1 });
|
||||
this.setCooldown(irepeat(1), 0);
|
||||
this.addFireAction(irepeat(4), istep(500, irepeat(20)), istep(150, irepeat(5)), [
|
||||
new EffectTemplate(new DamageEffect(), { base: istep(30, irepeat(2)), span: istep(2, irepeat(1)) })
|
||||
this.setSkillsRequirements({ "skill_materials": leveled(1, 1.2), "skill_photons": leveled(1, 0.8) });
|
||||
this.setCooldown(irepeat(1), irepeat(0));
|
||||
this.addFireAction(irepeat(4), leveled(500, 20), leveled(150, 5), [
|
||||
new EffectTemplate(new DamageEffect(), { base: leveled(26, 2), span: leveled(4, 1) })
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,15 +82,15 @@ module TS.SpaceTac.Specs {
|
|||
let template = new LootTemplate(SlotType.Weapon, "Test Weapon");
|
||||
generator.equipment_generator.templates = [template];
|
||||
|
||||
template.price = 350;
|
||||
template.price = irepeat(350);
|
||||
let result = generator.tryGenerateEquipmentReward(500);
|
||||
expect(result).toBeNull();
|
||||
|
||||
template.price = 800;
|
||||
template.price = irepeat(800);
|
||||
result = generator.tryGenerateEquipmentReward(500);
|
||||
expect(result).toBeNull();
|
||||
|
||||
template.price = 500;
|
||||
template.price = irepeat(500);
|
||||
result = generator.tryGenerateEquipmentReward(500);
|
||||
expect(result).not.toBeNull();
|
||||
})
|
||||
|
@ -103,7 +103,7 @@ module TS.SpaceTac.Specs {
|
|||
expect(result).toBe(15000);
|
||||
|
||||
let template = new LootTemplate(SlotType.Weapon, "Test Weapon");
|
||||
template.price = 15000;
|
||||
template.price = irepeat(15000);
|
||||
generator.equipment_generator.templates.push(template);
|
||||
|
||||
generator.random = new SkewedRandomGenerator([0], true);
|
||||
|
|
Loading…
Reference in a new issue