1
0
Fork 0

Equipment balancing

This commit is contained in:
Michaël Lemaire 2017-09-18 00:49:53 +02:00
parent f9d22c31f6
commit 7a99f97b00
26 changed files with 343 additions and 268 deletions

View file

@ -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);
});
});
}

View file

@ -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);

View file

@ -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);
});
});

View file

@ -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];
}

View file

@ -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();
}
}

View file

@ -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);
});
});

View file

@ -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))) })
]);
}
}

View file

@ -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);
});
});
}

View file

@ -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));
}
}
}

View file

@ -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));
});
});
}

View file

@ -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) })
]);
}
}

View file

@ -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);
});
});
}

View file

@ -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));
}
}
}

View file

@ -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);
});
});
}

View file

@ -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));
}
}
}

View file

@ -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", () => {

View file

@ -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))
]);
}

View file

@ -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]);

View file

@ -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) })
]);
}
}

View file

@ -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)
]));
})
})
}

View file

@ -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) })
]);
}
}

View file

@ -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);
});
});
}

View file

@ -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));
}
}
}

View file

@ -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 () {

View file

@ -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) })
]);
}
}

View file

@ -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);