Fixed equipment price depreciation and displayed stat
This commit is contained in:
parent
7e20599fce
commit
f9859c157e
3
TODO.md
3
TODO.md
|
@ -64,7 +64,6 @@ Battle
|
||||||
Ships models and equipments
|
Ships models and equipments
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
* Smooth the price depreciation in battles, it's too high when first using equipments
|
|
||||||
* Add permanent effects and actions to ship models
|
* Add permanent effects and actions to ship models
|
||||||
* Add critical hit/miss (or indicate lucky/unlucky throws)
|
* Add critical hit/miss (or indicate lucky/unlucky throws)
|
||||||
* Add damage over time effect (tricky to make intuitive)
|
* Add damage over time effect (tricky to make intuitive)
|
||||||
|
@ -86,6 +85,7 @@ Artificial Intelligence
|
||||||
* Abandon fight if the AI judges there is no hope of victory
|
* Abandon fight if the AI judges there is no hope of victory
|
||||||
* Add combination of random small move and actual maneuver, as producer
|
* Add combination of random small move and actual maneuver, as producer
|
||||||
* New duel page with producers/evaluators tweaking
|
* New duel page with producers/evaluators tweaking
|
||||||
|
* Prototype of evolving AI
|
||||||
|
|
||||||
Common UI
|
Common UI
|
||||||
---------
|
---------
|
||||||
|
@ -121,6 +121,7 @@ Postponed
|
||||||
* Secondary story arcs
|
* Secondary story arcs
|
||||||
* Replays
|
* Replays
|
||||||
* Multiplayer/co-op
|
* Multiplayer/co-op
|
||||||
|
* Puzzle mode
|
||||||
* Formation or deployment phase
|
* Formation or deployment phase
|
||||||
* Add ship personality (with icons to identify?), with reaction dialogs
|
* Add ship personality (with icons to identify?), with reaction dialogs
|
||||||
* Hide enemy information (shield, hull, weapons), until they are in play, or until a "spy" effect is used
|
* Hide enemy information (shield, hull, weapons), until they are in play, or until a "spy" effect is used
|
||||||
|
|
6
spacetac
6
spacetac
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Main build/run tool for SpaceTac
|
# Main build/run tool
|
||||||
# REQUIRES yarn
|
# REQUIRES yarn
|
||||||
# If yarn is not found, python3 may be used to create a local node.js environment with yarn in it, and use it
|
# If yarn is not found, python3 may be used to create a local node.js environment with yarn in it, and use it
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ else
|
||||||
dir=$(dirname $0)
|
dir=$(dirname $0)
|
||||||
|
|
||||||
test -x "${dir}/.env/bin/nodeenv" || ( virtualenv -p python3 "${dir}/.env" && "${dir}/.env/bin/pip" install --upgrade nodeenv )
|
test -x "${dir}/.env/bin/nodeenv" || ( virtualenv -p python3 "${dir}/.env" && "${dir}/.env/bin/pip" install --upgrade nodeenv )
|
||||||
test -e "${dir}/.env/node/bin/activate" || "${dir}/.env/bin/nodeenv" --node=6.11.1 --force "${dir}/.env/node"
|
test -e "${dir}/.env/node/bin/activate" || "${dir}/.env/bin/nodeenv" --node=9.3.0 --force "${dir}/.env/node"
|
||||||
test -e "${dir}/.env/node/bin/yarn" || "${dir}/.env/node/bin/shim" "${dir}/.env/node/bin/npm" install -g yarn@1.1.0
|
test -e "${dir}/.env/node/bin/yarn" || "${dir}/.env/node/bin/shim" "${dir}/.env/node/bin/npm" install -g yarn@1.3.2
|
||||||
PATH="${dir}/.env/node/bin:${PATH}" yarn "$@"
|
PATH="${dir}/.env/node/bin:${PATH}" yarn "$@"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -275,7 +275,7 @@ module TK.SpaceTac {
|
||||||
this.outcome = null;
|
this.outcome = null;
|
||||||
this.cycle = 1;
|
this.cycle = 1;
|
||||||
this.placeShips();
|
this.placeShips();
|
||||||
this.stats.onBattleStart(this.fleets[0], this.fleets[1]);
|
this.stats.addFleetsValue(this.fleets[0], this.fleets[1]);
|
||||||
this.throwInitiative();
|
this.throwInitiative();
|
||||||
iforeach(this.iships(), ship => ship.restoreInitialState());
|
iforeach(this.iships(), ship => ship.restoreInitialState());
|
||||||
this.setPlayingShip(this.play_order[0]);
|
this.setPlayingShip(this.play_order[0]);
|
||||||
|
|
|
@ -83,13 +83,13 @@ module TK.SpaceTac.Specs {
|
||||||
let equ2 = TestTools.addEngine(defender, 50);
|
let equ2 = TestTools.addEngine(defender, 50);
|
||||||
equ2.price = 1100;
|
equ2.price = 1100;
|
||||||
|
|
||||||
stats.onBattleStart(attacker.fleet, defender.fleet);
|
stats.addFleetsValue(attacker.fleet, defender.fleet);
|
||||||
check.equals(stats.stats, { "Equipment wear (zotys)": [1000, 1100] });
|
check.equals(stats.stats, { "Equipment wear (zotys)": [1000, 1100] });
|
||||||
|
|
||||||
equ1.price = 500;
|
equ1.price = 500;
|
||||||
equ2.price = 800;
|
equ2.price = 800;
|
||||||
|
|
||||||
stats.onBattleEnd(attacker.fleet, defender.fleet);
|
stats.addFleetsValue(attacker.fleet, defender.fleet, false);
|
||||||
check.equals(stats.stats, { "Equipment wear (zotys)": [500, 300] });
|
check.equals(stats.stats, { "Equipment wear (zotys)": [500, 300] });
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -69,19 +69,12 @@ module TK.SpaceTac {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare some stats at the start of battle
|
* Store the fleets' value, for equipment wear display
|
||||||
*/
|
*/
|
||||||
onBattleStart(attacker: Fleet, defender: Fleet): void {
|
addFleetsValue(attacker: Fleet, defender: Fleet, positive = true): void {
|
||||||
this.addStat("Equipment wear (zotys)", this.getFleetValue(attacker), true);
|
let sgn = positive ? 1 : -1;
|
||||||
this.addStat("Equipment wear (zotys)", this.getFleetValue(defender), false);
|
this.addStat("Equipment wear (zotys)", sgn * this.getFleetValue(attacker), true);
|
||||||
}
|
this.addStat("Equipment wear (zotys)", sgn * this.getFleetValue(defender), false);
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize some stats at the start of battle
|
|
||||||
*/
|
|
||||||
onBattleEnd(attacker: Fleet, defender: Fleet): void {
|
|
||||||
this.addStat("Equipment wear (zotys)", -this.getFleetValue(attacker), true);
|
|
||||||
this.addStat("Equipment wear (zotys)", -this.getFleetValue(defender), false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,13 +87,16 @@ module TK.SpaceTac.Specs {
|
||||||
check.equals(equipment.getPrice(), 99);
|
check.equals(equipment.getPrice(), 99);
|
||||||
|
|
||||||
equipment.addWear(10);
|
equipment.addWear(10);
|
||||||
check.equals(equipment.getPrice(), 90);
|
check.equals(equipment.getPrice(), 97);
|
||||||
|
|
||||||
equipment.addWear(89);
|
equipment.addWear(89);
|
||||||
check.equals(equipment.getPrice(), 50);
|
check.equals(equipment.getPrice(), 83);
|
||||||
|
|
||||||
equipment.addWear(400);
|
equipment.addWear(400);
|
||||||
check.equals(equipment.getPrice(), 16);
|
check.equals(equipment.getPrice(), 50);
|
||||||
|
|
||||||
|
equipment.addWear(12500);
|
||||||
|
check.equals(equipment.getPrice(), 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
test.case("builds a full textual description", check => {
|
test.case("builds a full textual description", check => {
|
||||||
|
|
|
@ -116,7 +116,7 @@ module TK.SpaceTac {
|
||||||
* Get the equipment price value.
|
* Get the equipment price value.
|
||||||
*/
|
*/
|
||||||
getPrice(): number {
|
getPrice(): number {
|
||||||
return Math.floor(this.price * 100 / (100 + this.wear));
|
return Math.floor(this.price * 500 / (500 + this.wear));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,18 +1,40 @@
|
||||||
module TK.SpaceTac.Specs {
|
module TK.SpaceTac.Specs {
|
||||||
testing("EndBattle", test => {
|
testing("EndBattleDiff", test => {
|
||||||
test.case("applies and reverts", check => {
|
test.case("applies and reverts", check => {
|
||||||
let battle = new Battle();
|
let battle = new Battle();
|
||||||
|
|
||||||
|
let ship1 = battle.fleets[0].addShip();
|
||||||
|
let ship2 = battle.fleets[1].addShip();
|
||||||
|
|
||||||
|
let equ1 = new Equipment(SlotType.Weapon);
|
||||||
|
equ1.price = 10000;
|
||||||
|
ship1.addSlot(SlotType.Weapon).attach(equ1);
|
||||||
|
let equ2 = new Equipment(SlotType.Weapon);
|
||||||
|
equ2.price = 20000;
|
||||||
|
ship2.addSlot(SlotType.Weapon).attach(equ2);
|
||||||
|
|
||||||
|
battle.start();
|
||||||
|
|
||||||
TestTools.diffChain(check, battle, [
|
TestTools.diffChain(check, battle, [
|
||||||
new EndBattleDiff(battle.fleets[1], 4)
|
new EndBattleDiff(battle.fleets[1], 4)
|
||||||
], [
|
], [
|
||||||
check => {
|
check => {
|
||||||
check.equals(battle.ended, false, "battle is ongoing");
|
check.equals(battle.ended, false, "battle is ongoing");
|
||||||
check.equals(battle.outcome, null, "battle has no outcome");
|
check.equals(battle.outcome, null, "battle has no outcome");
|
||||||
|
check.equals(equ1.wear, 0, "equipment1 wear");
|
||||||
|
check.equals(equ2.wear, 0, "equipment2 wear");
|
||||||
|
check.equals(battle.stats.getImportant(1), [
|
||||||
|
{ name: 'Equipment wear (zotys)', attacker: 10000, defender: 20000 }
|
||||||
|
], "stats stores equipment value");
|
||||||
},
|
},
|
||||||
check => {
|
check => {
|
||||||
check.equals(battle.ended, true, "battle is ended");
|
check.equals(battle.ended, true, "battle is ended");
|
||||||
check.same(nn(battle.outcome).winner, battle.fleets[1], "battle has an outcome");
|
check.same(nn(battle.outcome).winner, battle.fleets[1], "battle has an outcome");
|
||||||
|
check.equals(equ1.wear, 4, "equipment1 wear");
|
||||||
|
check.equals(equ2.wear, 4, "equipment2 wear");
|
||||||
|
check.equals(battle.stats.getImportant(1), [
|
||||||
|
{ name: 'Equipment wear (zotys)', attacker: 80, defender: 159 }
|
||||||
|
], "stats stores equipment wear");
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,14 +28,18 @@ module TK.SpaceTac {
|
||||||
equipment.addWear(this.cycles);
|
equipment.addWear(this.cycles);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
battle.stats.addFleetsValue(battle.fleets[0], battle.fleets[1], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
revert(battle: Battle): void {
|
revert(battle: Battle): void {
|
||||||
battle.outcome = null;
|
battle.outcome = null;
|
||||||
|
|
||||||
|
battle.stats.addFleetsValue(battle.fleets[0], battle.fleets[1], true);
|
||||||
|
|
||||||
iforeach(battle.iships(), ship => {
|
iforeach(battle.iships(), ship => {
|
||||||
ship.listEquipment().forEach(equipment => {
|
ship.listEquipment().forEach(equipment => {
|
||||||
equipment.addWear(this.cycles);
|
equipment.addWear(-this.cycles);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue