Updated attributes and skills
This commit is contained in:
parent
ea13e25c5e
commit
7275288f13
22
README.md
22
README.md
|
@ -98,34 +98,34 @@ For battle purpose, the ship is to be considered "dead".
|
||||||
|
|
||||||
### Attributes
|
### Attributes
|
||||||
|
|
||||||
Attributes represent a ship's ability to use its HSP system:
|
Attributes represent a ship's ability to use its HSP system and weapons:
|
||||||
|
|
||||||
* **Initiative** - Ability to play before other ships in the play order
|
|
||||||
* **Hull capacity** - Maximal Hull value (when the battle starts)
|
* **Hull capacity** - Maximal Hull value (when the battle starts)
|
||||||
* **Shield capacity** - Maximal Shield value (when the battle starts)
|
* **Shield capacity** - Maximal Shield value (when the battle starts)
|
||||||
* **Power capacity** - Maximal Power value
|
* **Power capacity** - Maximal Power value
|
||||||
* **Initial power** - Power immediately available at the start of battle
|
* **Power generation** - Power generated at the end of a ship's turn
|
||||||
* **Power recovery** - Power generated at the end of a ship's turn
|
* **Maneuverability** - Ability to move first and fast
|
||||||
|
* **Precision** - Ability to target far and good
|
||||||
|
|
||||||
These attributes are the sum of all currently applied effects (being permanent by an equipped item,
|
These attributes are the sum of all currently applied effects (being permanent by an equipped item,
|
||||||
or a temporary effect caused by a weapon or a drone).
|
or a temporary effect caused by a weapon or a drone).
|
||||||
|
|
||||||
For example, a ship that equips a power generator with "power recovery +3", but has a sticky effect
|
For example, a ship that equips a power generator with "power generation +3", but has a sticky effect
|
||||||
of "power recovery -1" from a previous weapon hit, will have an effective power recovery of 2.
|
of "power generation -1" from a previous weapon hit, will have an effective power generation of 2.
|
||||||
|
|
||||||
### Skills
|
### Skills
|
||||||
|
|
||||||
Skills represent a ship's ability to use equipments:
|
Skills represent a ship's ability to use equipments:
|
||||||
|
|
||||||
* **Materials** - Usage of physical materials such as bullets, shells...
|
* **Materials** - Usage of physical materials such as bullets, shells...
|
||||||
* **Electronics** - Components of computers and communication
|
* **Photons** - Forces of light, and electromagnetic radiation
|
||||||
* **Energy** - Raw energy manipulation
|
* **Antimatter** - Manipulation of matter and antimatter particles
|
||||||
* **Human** - Management of a human team and resources
|
* **Quantum** - Application of quantum uncertainty principle
|
||||||
* **Gravity** - Interaction with gravitational forces
|
* **Gravity** - Interaction with gravitational forces
|
||||||
* **Time** - Manipulation of time
|
* **Time** - Control of relativity's time properties
|
||||||
|
|
||||||
Each equipment has minimal skill requirements to be used. For example, a weapon may require "materials >= 2"
|
Each equipment has minimal skill requirements to be used. For example, a weapon may require "materials >= 2"
|
||||||
and "energy >= 3" to be equipped. A ship that does not meet these requirements will not be able to use
|
and "photons >= 3" to be equipped. A ship that does not meet these requirements will not be able to use
|
||||||
the equipment.
|
the equipment.
|
||||||
|
|
||||||
Skills are defined by the player, using points given while leveling up.
|
Skills are defined by the player, using points given while leveling up.
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
inkscape:version="0.92.1 r15371"
|
inkscape:version="0.92.1 r15371"
|
||||||
sodipodi:docname="character.svg"
|
sodipodi:docname="character.svg"
|
||||||
enable-background="new"
|
enable-background="new"
|
||||||
inkscape:export-filename="/home/michael/workspace/perso/spacetac/out/assets/images/character/close.png"
|
inkscape:export-filename="/tmp/sheet.png"
|
||||||
inkscape:export-xdpi="96"
|
inkscape:export-xdpi="96"
|
||||||
inkscape:export-ydpi="96">
|
inkscape:export-ydpi="96">
|
||||||
<defs
|
<defs
|
||||||
|
@ -573,11 +573,11 @@
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="7.919596"
|
inkscape:zoom="0.49497475"
|
||||||
inkscape:cx="577.1487"
|
inkscape:cx="970.56884"
|
||||||
inkscape:cy="39.46876"
|
inkscape:cy="617.47621"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer2"
|
inkscape:current-layer="layer11"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="1920"
|
inkscape:window-width="1920"
|
||||||
inkscape:window-height="1037"
|
inkscape:window-height="1037"
|
||||||
|
@ -593,13 +593,13 @@
|
||||||
inkscape:snap-object-midpoints="true"
|
inkscape:snap-object-midpoints="true"
|
||||||
inkscape:snap-bbox-edge-midpoints="true"
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
inkscape:snap-others="true"
|
inkscape:snap-others="true"
|
||||||
inkscape:snap-global="false"
|
inkscape:snap-global="true"
|
||||||
showborder="false"
|
showborder="false"
|
||||||
borderlayer="false"
|
borderlayer="false"
|
||||||
inkscape:showpageshadow="true"
|
inkscape:showpageshadow="true"
|
||||||
inkscape:lockguides="true"
|
inkscape:lockguides="true"
|
||||||
inkscape:measure-start="168.929,966.071"
|
inkscape:measure-start="519.581,357.616"
|
||||||
inkscape:measure-end="228.214,927.143">
|
inkscape:measure-end="665.158,357.616">
|
||||||
<sodipodi:guide
|
<sodipodi:guide
|
||||||
position="0,0"
|
position="0,0"
|
||||||
orientation="0,1920"
|
orientation="0,1920"
|
||||||
|
@ -644,7 +644,7 @@
|
||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
<dc:title />
|
<dc:title></dc:title>
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
@ -1188,17 +1188,6 @@
|
||||||
height="10.620193"
|
height="10.620193"
|
||||||
x="191.35637"
|
x="191.35637"
|
||||||
y="195.53967" />
|
y="195.53967" />
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.3499999px;line-height:6.61458349px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
x="194.33784"
|
|
||||||
y="203.16125"
|
|
||||||
id="text6516"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan6514"
|
|
||||||
x="194.33784"
|
|
||||||
y="203.16125"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.3499999px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px">35</tspan></text>
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<use
|
<use
|
||||||
|
@ -1279,26 +1268,6 @@
|
||||||
id="rect6041"
|
id="rect6041"
|
||||||
d="m 165.26733,271.72806 h 15.88055 l 1.60362,12.73588 h -19.08779 z"
|
d="m 165.26733,271.72806 h 15.88055 l 1.60362,12.73588 h -19.08779 z"
|
||||||
style="display:inline;opacity:1;fill:#2d0c08;fill-opacity:1;stroke:none;stroke-width:0.15408839;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9551)" />
|
style="display:inline;opacity:1;fill:#2d0c08;fill-opacity:1;stroke:none;stroke-width:0.15408839;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9551)" />
|
||||||
<text
|
|
||||||
id="text6631"
|
|
||||||
y="282.02341"
|
|
||||||
x="169.983"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px"
|
|
||||||
y="282.02341"
|
|
||||||
x="169.983"
|
|
||||||
id="tspan6629"
|
|
||||||
sodipodi:role="line">2</tspan></text>
|
|
||||||
<path
|
|
||||||
style="display:inline;opacity:1;fill:#d7d07d;fill-opacity:1;stroke:none;stroke-width:0.58238131;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9551)"
|
|
||||||
d="m 517.54102,1067.4453 -0.96875,7.6934 h 72.14257 l -0.96875,-7.6934 z"
|
|
||||||
transform="matrix(0.26458334,0,0,0.26458334,26.987511,0)"
|
|
||||||
id="path4776"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
inkscape:export-filename="/home/michael/workspace/perso/spacetac/out/assets/images/character/experience.png"
|
|
||||||
inkscape:export-xdpi="96"
|
|
||||||
inkscape:export-ydpi="96" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
id="g6064"
|
id="g6064"
|
||||||
|
@ -1315,17 +1284,6 @@
|
||||||
id="rect6044"
|
id="rect6044"
|
||||||
d="m 266.80115,271.72803 h 15.88054 l 1.87089,12.73588 h -19.62232 z"
|
d="m 266.80115,271.72803 h 15.88054 l 1.87089,12.73588 h -19.62232 z"
|
||||||
style="display:inline;opacity:1;fill:#182126;fill-opacity:1;stroke:#d4d6e5;stroke-width:0.79374999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9551)" />
|
style="display:inline;opacity:1;fill:#182126;fill-opacity:1;stroke:#d4d6e5;stroke-width:0.79374999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9551)" />
|
||||||
<text
|
|
||||||
id="text6637"
|
|
||||||
y="281.94846"
|
|
||||||
x="271.37729"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px"
|
|
||||||
y="281.94846"
|
|
||||||
x="271.37729"
|
|
||||||
id="tspan6635"
|
|
||||||
sodipodi:role="line">0</tspan></text>
|
|
||||||
<text
|
<text
|
||||||
id="text6641"
|
id="text6641"
|
||||||
y="280.98312"
|
y="280.98312"
|
||||||
|
@ -1341,29 +1299,6 @@
|
||||||
<g
|
<g
|
||||||
id="g4635"
|
id="g4635"
|
||||||
transform="translate(9.5250003)">
|
transform="translate(9.5250003)">
|
||||||
<g
|
|
||||||
id="g6665"
|
|
||||||
transform="matrix(1,0,0,0.93590183,86.972862,8.8615075)"
|
|
||||||
style="opacity:1">
|
|
||||||
<ellipse
|
|
||||||
style="fill:#267482;fill-opacity:1;stroke-width:0.76175737;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
id="path6647"
|
|
||||||
cy="176.57861"
|
|
||||||
cx="193.08553"
|
|
||||||
rx="13.219336"
|
|
||||||
ry="5.6314278" />
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#dde0a5;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter7193)"
|
|
||||||
x="194.12859"
|
|
||||||
y="179.89624"
|
|
||||||
id="text6651"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan6649"
|
|
||||||
x="194.12859"
|
|
||||||
y="179.89624"
|
|
||||||
style="fill:#dde0a5;fill-opacity:1;stroke-width:0.26458335px">+</tspan></text>
|
|
||||||
</g>
|
|
||||||
<use
|
<use
|
||||||
height="100%"
|
height="100%"
|
||||||
width="100%"
|
width="100%"
|
||||||
|
@ -1421,72 +1356,6 @@
|
||||||
x="106.28822"
|
x="106.28822"
|
||||||
y="164.41965"
|
y="164.41965"
|
||||||
ry="0" />
|
ry="0" />
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
x="122.49858"
|
|
||||||
y="176.74901"
|
|
||||||
id="text6476"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan6474"
|
|
||||||
x="122.49858"
|
|
||||||
y="176.74901"
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Initiative</tspan></text>
|
|
||||||
<text
|
|
||||||
id="text6572"
|
|
||||||
y="193.22876"
|
|
||||||
x="114.94691"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="193.22876"
|
|
||||||
x="114.94691"
|
|
||||||
id="tspan6570"
|
|
||||||
sodipodi:role="line">Hull capacity</tspan></text>
|
|
||||||
<text
|
|
||||||
id="text6576"
|
|
||||||
y="210.2377"
|
|
||||||
x="111.0643"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="210.2377"
|
|
||||||
x="111.0643"
|
|
||||||
id="tspan6574"
|
|
||||||
sodipodi:role="line">Shield capacity</tspan></text>
|
|
||||||
<text
|
|
||||||
id="text6580"
|
|
||||||
y="227.24663"
|
|
||||||
x="111.12289"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="227.24663"
|
|
||||||
x="111.12289"
|
|
||||||
id="tspan6578"
|
|
||||||
sodipodi:role="line">Power capacity</tspan></text>
|
|
||||||
<text
|
|
||||||
id="text6584"
|
|
||||||
y="244.25557"
|
|
||||||
x="115.92712"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="244.25557"
|
|
||||||
x="115.92712"
|
|
||||||
id="tspan6582"
|
|
||||||
sodipodi:role="line">Initial power</tspan></text>
|
|
||||||
<text
|
|
||||||
id="text6588"
|
|
||||||
y="261.26443"
|
|
||||||
x="110.57858"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="261.26443"
|
|
||||||
x="110.57858"
|
|
||||||
id="tspan6586"
|
|
||||||
sodipodi:role="line">Power recovery</tspan></text>
|
|
||||||
<use
|
<use
|
||||||
x="0"
|
x="0"
|
||||||
y="0"
|
y="0"
|
||||||
|
@ -1495,72 +1364,6 @@
|
||||||
transform="translate(106.1661,-6.7705059e-6)"
|
transform="translate(106.1661,-6.7705059e-6)"
|
||||||
width="100%"
|
width="100%"
|
||||||
height="100%" />
|
height="100%" />
|
||||||
<text
|
|
||||||
id="text6733"
|
|
||||||
y="176.75209"
|
|
||||||
x="228.48232"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="176.75209"
|
|
||||||
x="228.48232"
|
|
||||||
id="tspan6731"
|
|
||||||
sodipodi:role="line">Materials</tspan></text>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
x="225.41618"
|
|
||||||
y="193.761"
|
|
||||||
id="text6737"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan6735"
|
|
||||||
x="225.41618"
|
|
||||||
y="193.761"
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Electronics</tspan></text>
|
|
||||||
<text
|
|
||||||
id="text6741"
|
|
||||||
y="209.97757"
|
|
||||||
x="232.23058"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="209.97757"
|
|
||||||
x="232.23058"
|
|
||||||
id="tspan6739"
|
|
||||||
sodipodi:role="line">Energy</tspan></text>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
x="232.05659"
|
|
||||||
y="227.67035"
|
|
||||||
id="text6745"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan6743"
|
|
||||||
x="232.05659"
|
|
||||||
y="227.67035"
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Human</tspan></text>
|
|
||||||
<text
|
|
||||||
id="text6749"
|
|
||||||
y="244.10396"
|
|
||||||
x="231.84818"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
y="244.10396"
|
|
||||||
x="231.84818"
|
|
||||||
id="tspan6747"
|
|
||||||
sodipodi:role="line">Gravity</tspan></text>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
x="236.39742"
|
|
||||||
y="261.79672"
|
|
||||||
id="text6753"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan6751"
|
|
||||||
x="236.39742"
|
|
||||||
y="261.79672"
|
|
||||||
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Time</tspan></text>
|
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-style:normal;font-weight:normal;font-size:8.46666718px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;writing-mode:tb-rl;text-orientation:upright;fill:#d8daf5;fill-opacity:0.07835053;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="font-style:normal;font-weight:normal;font-size:8.46666718px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;writing-mode:tb-rl;text-orientation:upright;fill:#d8daf5;fill-opacity:0.07835053;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
@ -1584,6 +1387,210 @@
|
||||||
y="204.61549"
|
y="204.61549"
|
||||||
style="font-size:6.3499999px;writing-mode:tb-rl;text-orientation:upright;fill:#1e1f21;fill-opacity:1;stroke-width:0.26458335px">| SKILLS |</tspan></text>
|
style="font-size:6.3499999px;writing-mode:tb-rl;text-orientation:upright;fill:#1e1f21;fill-opacity:1;stroke-width:0.26458335px">| SKILLS |</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer11"
|
||||||
|
inkscape:label="Attributes Var"
|
||||||
|
style="display:inline">
|
||||||
|
<g
|
||||||
|
id="g6665"
|
||||||
|
transform="matrix(0.99999999,0,0,0.93590182,96.497863,8.8615076)"
|
||||||
|
style="display:inline;opacity:1">
|
||||||
|
<path
|
||||||
|
style="fill:#267482;fill-opacity:1;stroke-width:0.76175737;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 206.30486,176.57861 c 0,3.11015 -5.91849,5.63143 -13.21933,5.63143 v -11.26285 c 7.30083,0 13.21932,2.52127 13.21933,5.63142 z"
|
||||||
|
id="path6647"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<g
|
||||||
|
aria-label="+"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#dde0a5;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter7193)"
|
||||||
|
id="text6651">
|
||||||
|
<path
|
||||||
|
d="m 198.99651,173.26099 v 2.87837 h 2.87837 v 0.8785 h -2.87837 v 2.87838 h -0.86817 v -2.87838 h -2.87838 v -0.8785 h 2.87838 v -2.87837 z"
|
||||||
|
style="fill:#dde0a5;fill-opacity:1;stroke-width:0.26458335px"
|
||||||
|
id="path4970"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.185;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
x="122.49858"
|
||||||
|
y="176.74901"
|
||||||
|
id="text6476"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan6474"
|
||||||
|
x="122.49858"
|
||||||
|
y="176.74901"
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.185;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Initiative</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6572"
|
||||||
|
y="193.22876"
|
||||||
|
x="114.94691"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="193.22876"
|
||||||
|
x="114.94691"
|
||||||
|
id="tspan6570"
|
||||||
|
sodipodi:role="line">Hull capacity</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6576"
|
||||||
|
y="210.2377"
|
||||||
|
x="111.0643"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="210.2377"
|
||||||
|
x="111.0643"
|
||||||
|
id="tspan6574"
|
||||||
|
sodipodi:role="line">Shield capacity</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6580"
|
||||||
|
y="227.24663"
|
||||||
|
x="111.12289"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="227.24663"
|
||||||
|
x="111.12289"
|
||||||
|
id="tspan6578"
|
||||||
|
sodipodi:role="line">Power capacity</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6584"
|
||||||
|
y="244.25557"
|
||||||
|
x="115.92712"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="244.25557"
|
||||||
|
x="115.92712"
|
||||||
|
id="tspan6582"
|
||||||
|
sodipodi:role="line">Initial power</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6588"
|
||||||
|
y="261.26443"
|
||||||
|
x="110.57858"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="261.26443"
|
||||||
|
x="110.57858"
|
||||||
|
id="tspan6586"
|
||||||
|
sodipodi:role="line">Power recovery</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6733"
|
||||||
|
y="176.75209"
|
||||||
|
x="228.48232"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="176.75209"
|
||||||
|
x="228.48232"
|
||||||
|
id="tspan6731"
|
||||||
|
sodipodi:role="line">Materials</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
x="225.41618"
|
||||||
|
y="193.761"
|
||||||
|
id="text6737"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan6735"
|
||||||
|
x="225.41618"
|
||||||
|
y="193.761"
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Electronics</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6741"
|
||||||
|
y="209.97757"
|
||||||
|
x="232.23058"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="209.97757"
|
||||||
|
x="232.23058"
|
||||||
|
id="tspan6739"
|
||||||
|
sodipodi:role="line">Energy</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
x="232.05659"
|
||||||
|
y="227.67035"
|
||||||
|
id="text6745"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan6743"
|
||||||
|
x="232.05659"
|
||||||
|
y="227.67035"
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Human</tspan></text>
|
||||||
|
<text
|
||||||
|
id="text6749"
|
||||||
|
y="244.10396"
|
||||||
|
x="231.84818"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
y="244.10396"
|
||||||
|
x="231.84818"
|
||||||
|
id="tspan6747"
|
||||||
|
sodipodi:role="line">Gravity</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:7.05555582px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
x="236.39742"
|
||||||
|
y="261.79672"
|
||||||
|
id="text6753"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan6751"
|
||||||
|
x="236.39742"
|
||||||
|
y="261.79672"
|
||||||
|
style="font-size:7.05555582px;fill:#c9d8ef;fill-opacity:1;stroke:#395665;stroke-width:0.18520834;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Time</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="translate(-22.755693,-26.728013)"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.3499999px;line-height:6.61458349px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="194.33784"
|
||||||
|
y="203.16125"
|
||||||
|
id="text6516"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan6514"
|
||||||
|
x="194.33784"
|
||||||
|
y="203.16125"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.3499999px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px">35</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="translate(7.4083334)"
|
||||||
|
id="text6637"
|
||||||
|
y="281.94846"
|
||||||
|
x="271.37729"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px"
|
||||||
|
y="281.94846"
|
||||||
|
x="271.37729"
|
||||||
|
id="tspan6635"
|
||||||
|
sodipodi:role="line">0</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="translate(-26.987511)"
|
||||||
|
id="text6631"
|
||||||
|
y="282.02341"
|
||||||
|
x="169.983"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.61458349px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px"
|
||||||
|
y="282.02341"
|
||||||
|
x="169.983"
|
||||||
|
id="tspan6629"
|
||||||
|
sodipodi:role="line">2</tspan></text>
|
||||||
|
<path
|
||||||
|
style="display:inline;opacity:1;fill:#d7d07d;fill-opacity:1;stroke:none;stroke-width:0.58238131;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9551)"
|
||||||
|
d="m 517.54102,1067.4453 -0.96875,7.6934 h 72.14257 l -0.96875,-7.6934 z"
|
||||||
|
id="path4776"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:export-filename="/home/michael/workspace/perso/spacetac/out/assets/images/character/experience.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
transform="scale(0.26458334)" />
|
||||||
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer3"
|
id="layer3"
|
||||||
|
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 70 KiB |
Binary file not shown.
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 57 KiB |
|
@ -5,15 +5,15 @@ module TS.SpaceTac {
|
||||||
var fleet2 = new Fleet();
|
var fleet2 = new Fleet();
|
||||||
|
|
||||||
var ship1 = new Ship(fleet1, "F1S1");
|
var ship1 = new Ship(fleet1, "F1S1");
|
||||||
ship1.setAttribute("initiative", 2);
|
ship1.setAttribute("maneuvrability", 2);
|
||||||
var ship2 = new Ship(fleet1, "F1S2");
|
var ship2 = new Ship(fleet1, "F1S2");
|
||||||
ship2.setAttribute("initiative", 4);
|
ship2.setAttribute("maneuvrability", 4);
|
||||||
var ship3 = new Ship(fleet1, "F1S3");
|
var ship3 = new Ship(fleet1, "F1S3");
|
||||||
ship3.setAttribute("initiative", 1);
|
ship3.setAttribute("maneuvrability", 1);
|
||||||
var ship4 = new Ship(fleet2, "F2S1");
|
var ship4 = new Ship(fleet2, "F2S1");
|
||||||
ship4.setAttribute("initiative", 8);
|
ship4.setAttribute("maneuvrability", 8);
|
||||||
var ship5 = new Ship(fleet2, "F2S2");
|
var ship5 = new Ship(fleet2, "F2S2");
|
||||||
ship5.setAttribute("initiative", 2);
|
ship5.setAttribute("maneuvrability", 2);
|
||||||
|
|
||||||
var battle = new Battle(fleet1, fleet2);
|
var battle = new Battle(fleet1, fleet2);
|
||||||
expect(battle.play_order.length).toBe(0);
|
expect(battle.play_order.length).toBe(0);
|
||||||
|
@ -77,7 +77,7 @@ module TS.SpaceTac {
|
||||||
expect(battle.playing_ship_index).toBeNull();
|
expect(battle.playing_ship_index).toBeNull();
|
||||||
|
|
||||||
// Force play order
|
// Force play order
|
||||||
iforeach(battle.iships(), ship => ship.setAttribute("initiative", 1));
|
iforeach(battle.iships(), ship => ship.setAttribute("maneuvrability", 1));
|
||||||
var gen = new SkewedRandomGenerator([0.1, 0.2, 0.0]);
|
var gen = new SkewedRandomGenerator([0.1, 0.2, 0.0]);
|
||||||
battle.throwInitiative(gen);
|
battle.throwInitiative(gen);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ module TS.SpaceTac.Specs {
|
||||||
// Force lucky finds with one template
|
// Force lucky finds with one template
|
||||||
var looter = new LootGenerator(random, false);
|
var looter = new LootGenerator(random, false);
|
||||||
var template = new LootTemplate(SlotType.Power, "Nuclear Reactor");
|
var template = new LootTemplate(SlotType.Power, "Nuclear Reactor");
|
||||||
template.setSkillsRequirements({ "skill_energy": istep(4) });
|
template.setSkillsRequirements({ "skill_photons": istep(4) });
|
||||||
template.addAttributeEffect("power_capacity", 1);
|
template.addAttributeEffect("power_capacity", 1);
|
||||||
looter.templates = [template];
|
looter.templates = [template];
|
||||||
spyOn(outcome, "getLootGenerator").and.returnValue(looter);
|
spyOn(outcome, "getLootGenerator").and.returnValue(looter);
|
||||||
|
@ -49,11 +49,11 @@ module TS.SpaceTac.Specs {
|
||||||
expect(outcome.loot[1].name).toBe("Nuclear Reactor");
|
expect(outcome.loot[1].name).toBe("Nuclear Reactor");
|
||||||
expect(outcome.loot[1].level).toBe(4);
|
expect(outcome.loot[1].level).toBe(4);
|
||||||
expect(outcome.loot[1].quality).toBe(EquipmentQuality.COMMON);
|
expect(outcome.loot[1].quality).toBe(EquipmentQuality.COMMON);
|
||||||
expect(outcome.loot[1].requirements).toEqual({ "skill_energy": 7 });
|
expect(outcome.loot[1].requirements).toEqual({ "skill_photons": 7 });
|
||||||
expect(outcome.loot[2].name).toBe("Nuclear Reactor");
|
expect(outcome.loot[2].name).toBe("Nuclear Reactor");
|
||||||
expect(outcome.loot[2].level).toBe(6);
|
expect(outcome.loot[2].level).toBe(6);
|
||||||
expect(outcome.loot[2].quality).toBe(EquipmentQuality.PREMIUM);
|
expect(outcome.loot[2].quality).toBe(EquipmentQuality.PREMIUM);
|
||||||
expect(outcome.loot[2].requirements).toEqual({ "skill_energy": 9 });
|
expect(outcome.loot[2].requirements).toEqual({ "skill_photons": 9 });
|
||||||
});
|
});
|
||||||
|
|
||||||
it("grants experience", function () {
|
it("grants experience", function () {
|
||||||
|
|
|
@ -94,9 +94,9 @@ module TS.SpaceTac {
|
||||||
drone.duration = 3;
|
drone.duration = 3;
|
||||||
drone.effects = [
|
drone.effects = [
|
||||||
new DamageEffect(5),
|
new DamageEffect(5),
|
||||||
new AttributeEffect("skill_human", 1)
|
new AttributeEffect("skill_quantum", 1)
|
||||||
]
|
]
|
||||||
expect(drone.getDescription()).toEqual("For 3 activations:\n• do 5 damage\n• human skill +1");
|
expect(drone.getDescription()).toEqual("For 3 activations:\n• do 5 damage\n• quantum skill +1");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,11 +34,11 @@ module TS.SpaceTac.Specs {
|
||||||
expect(equipment.canBeEquipped(ship.attributes)).toBe(true);
|
expect(equipment.canBeEquipped(ship.attributes)).toBe(true);
|
||||||
|
|
||||||
// Second requirement
|
// Second requirement
|
||||||
equipment.requirements["skill_material"] = 3;
|
equipment.requirements["skill_materials"] = 3;
|
||||||
|
|
||||||
expect(equipment.canBeEquipped(ship.attributes)).toBe(false);
|
expect(equipment.canBeEquipped(ship.attributes)).toBe(false);
|
||||||
|
|
||||||
ship.attributes.skill_material.set(4);
|
ship.attributes.skill_materials.set(4);
|
||||||
|
|
||||||
expect(equipment.canBeEquipped(ship.attributes)).toBe(true);
|
expect(equipment.canBeEquipped(ship.attributes)).toBe(true);
|
||||||
});
|
});
|
||||||
|
@ -65,7 +65,7 @@ module TS.SpaceTac.Specs {
|
||||||
let equipment = new Equipment();
|
let equipment = new Equipment();
|
||||||
expect(equipment.getMinimumLevel()).toBe(1);
|
expect(equipment.getMinimumLevel()).toBe(1);
|
||||||
|
|
||||||
equipment.requirements["skill_human"] = 10;
|
equipment.requirements["skill_quantum"] = 10;
|
||||||
expect(equipment.getMinimumLevel()).toBe(1);
|
expect(equipment.getMinimumLevel()).toBe(1);
|
||||||
|
|
||||||
equipment.requirements["skill_time"] = 1;
|
equipment.requirements["skill_time"] = 1;
|
||||||
|
@ -74,7 +74,7 @@ module TS.SpaceTac.Specs {
|
||||||
equipment.requirements["skill_gravity"] = 2;
|
equipment.requirements["skill_gravity"] = 2;
|
||||||
expect(equipment.getMinimumLevel()).toBe(2);
|
expect(equipment.getMinimumLevel()).toBe(2);
|
||||||
|
|
||||||
equipment.requirements["skill_electronics"] = 4;
|
equipment.requirements["skill_antimatter"] = 4;
|
||||||
expect(equipment.getMinimumLevel()).toBe(3);
|
expect(equipment.getMinimumLevel()).toBe(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -33,23 +33,23 @@ module TS.SpaceTac.Specs {
|
||||||
|
|
||||||
it("applies requirements on skills", function () {
|
it("applies requirements on skills", function () {
|
||||||
let template = new LootTemplate(SlotType.Hull, "Hull");
|
let template = new LootTemplate(SlotType.Hull, "Hull");
|
||||||
template.setSkillsRequirements({ "skill_energy": 1, "skill_gravity": istep(2, istep(1)) });
|
template.setSkillsRequirements({ "skill_photons": 1, "skill_gravity": istep(2, istep(1)) });
|
||||||
|
|
||||||
let result = template.generate(1);
|
let result = template.generate(1);
|
||||||
expect(result.requirements).toEqual({
|
expect(result.requirements).toEqual({
|
||||||
"skill_energy": 1,
|
"skill_photons": 1,
|
||||||
"skill_gravity": 2
|
"skill_gravity": 2
|
||||||
});
|
});
|
||||||
|
|
||||||
result = template.generate(2);
|
result = template.generate(2);
|
||||||
expect(result.requirements).toEqual({
|
expect(result.requirements).toEqual({
|
||||||
"skill_energy": 2,
|
"skill_photons": 2,
|
||||||
"skill_gravity": 3
|
"skill_gravity": 3
|
||||||
});
|
});
|
||||||
|
|
||||||
result = template.generate(10);
|
result = template.generate(10);
|
||||||
expect(result.requirements).toEqual({
|
expect(result.requirements).toEqual({
|
||||||
"skill_energy": 10,
|
"skill_photons": 10,
|
||||||
"skill_gravity": 47
|
"skill_gravity": 47
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -123,7 +123,7 @@ module TS.SpaceTac.Specs {
|
||||||
let template = new LootTemplate(SlotType.Weapon, "Weapon");
|
let template = new LootTemplate(SlotType.Weapon, "Weapon");
|
||||||
expect(template.hasDamageEffect()).toBe(false);
|
expect(template.hasDamageEffect()).toBe(false);
|
||||||
|
|
||||||
template.addAttributeEffect("initiative", 1);
|
template.addAttributeEffect("maneuvrability", 1);
|
||||||
expect(template.hasDamageEffect()).toBe(false);
|
expect(template.hasDamageEffect()).toBe(false);
|
||||||
|
|
||||||
template.addFireAction(1, 50, 50, [new EffectTemplate(new BaseEffect("test"), {})]);
|
template.addFireAction(1, 50, 50, [new EffectTemplate(new BaseEffect("test"), {})]);
|
||||||
|
|
|
@ -291,14 +291,13 @@ module TS.SpaceTac.Specs {
|
||||||
let power_generator = new Equipment(SlotType.Power);
|
let power_generator = new Equipment(SlotType.Power);
|
||||||
power_generator.effects = [
|
power_generator.effects = [
|
||||||
new AttributeEffect("power_capacity", 8),
|
new AttributeEffect("power_capacity", 8),
|
||||||
new AttributeEffect("power_recovery", 3),
|
new AttributeEffect("power_generation", 3),
|
||||||
new AttributeEffect("power_initial", 4)
|
|
||||||
]
|
]
|
||||||
ship.addSlot(SlotType.Power).attach(power_generator);
|
ship.addSlot(SlotType.Power).attach(power_generator);
|
||||||
|
|
||||||
expect(ship.values.power.get()).toBe(0);
|
expect(ship.values.power.get()).toBe(0);
|
||||||
ship.initializeActionPoints();
|
ship.initializeActionPoints();
|
||||||
expect(ship.values.power.get()).toBe(4);
|
expect(ship.values.power.get()).toBe(8);
|
||||||
ship.values.power.set(3);
|
ship.values.power.set(3);
|
||||||
expect(ship.values.power.get()).toBe(3);
|
expect(ship.values.power.get()).toBe(3);
|
||||||
ship.recoverActionPoints();
|
ship.recoverActionPoints();
|
||||||
|
@ -424,13 +423,13 @@ module TS.SpaceTac.Specs {
|
||||||
let slot = ship.addSlot(SlotType.Hull);
|
let slot = ship.addSlot(SlotType.Hull);
|
||||||
expect(ship.canEquip(equipment)).toBe(slot);
|
expect(ship.canEquip(equipment)).toBe(slot);
|
||||||
|
|
||||||
equipment.requirements["skill_energy"] = 2;
|
equipment.requirements["skill_photons"] = 2;
|
||||||
expect(ship.canEquip(equipment)).toBe(null);
|
expect(ship.canEquip(equipment)).toBe(null);
|
||||||
|
|
||||||
ship.upgradeSkill("skill_energy");
|
ship.upgradeSkill("skill_photons");
|
||||||
expect(ship.canEquip(equipment)).toBe(null);
|
expect(ship.canEquip(equipment)).toBe(null);
|
||||||
|
|
||||||
ship.upgradeSkill("skill_energy");
|
ship.upgradeSkill("skill_photons");
|
||||||
expect(ship.canEquip(equipment)).toBe(slot);
|
expect(ship.canEquip(equipment)).toBe(slot);
|
||||||
|
|
||||||
slot.attach(new Equipment(SlotType.Hull));
|
slot.attach(new Equipment(SlotType.Hull));
|
||||||
|
@ -446,17 +445,17 @@ module TS.SpaceTac.Specs {
|
||||||
expect(ship.level.get()).toBe(2);
|
expect(ship.level.get()).toBe(2);
|
||||||
expect(ship.getAvailableUpgradePoints()).toBe(15);
|
expect(ship.getAvailableUpgradePoints()).toBe(15);
|
||||||
|
|
||||||
expect(ship.getAttribute("skill_energy")).toBe(0);
|
expect(ship.getAttribute("skill_photons")).toBe(0);
|
||||||
ship.upgradeSkill("skill_energy");
|
ship.upgradeSkill("skill_photons");
|
||||||
expect(ship.getAttribute("skill_energy")).toBe(1);
|
expect(ship.getAttribute("skill_photons")).toBe(1);
|
||||||
|
|
||||||
range(50).forEach(() => ship.upgradeSkill("skill_gravity"));
|
range(50).forEach(() => ship.upgradeSkill("skill_gravity"));
|
||||||
expect(ship.getAttribute("skill_energy")).toBe(1);
|
expect(ship.getAttribute("skill_photons")).toBe(1);
|
||||||
expect(ship.getAttribute("skill_gravity")).toBe(14);
|
expect(ship.getAttribute("skill_gravity")).toBe(14);
|
||||||
expect(ship.getAvailableUpgradePoints()).toBe(0);
|
expect(ship.getAvailableUpgradePoints()).toBe(0);
|
||||||
|
|
||||||
ship.updateAttributes();
|
ship.updateAttributes();
|
||||||
expect(ship.getAttribute("skill_energy")).toBe(1);
|
expect(ship.getAttribute("skill_photons")).toBe(1);
|
||||||
expect(ship.getAttribute("skill_gravity")).toBe(14);
|
expect(ship.getAttribute("skill_gravity")).toBe(14);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -8,30 +8,30 @@ module TS.SpaceTac {
|
||||||
*/
|
*/
|
||||||
export class ShipSkills {
|
export class ShipSkills {
|
||||||
// Skills
|
// Skills
|
||||||
skill_material = new ShipAttribute("material skill")
|
skill_materials = new ShipAttribute("materials skill")
|
||||||
skill_energy = new ShipAttribute("energy skill")
|
skill_photons = new ShipAttribute("photons skill")
|
||||||
skill_electronics = new ShipAttribute("electronics skill")
|
skill_antimatter = new ShipAttribute("antimatter skill")
|
||||||
skill_human = new ShipAttribute("human skill")
|
skill_quantum = new ShipAttribute("quantum skill")
|
||||||
skill_time = new ShipAttribute("time skill")
|
|
||||||
skill_gravity = new ShipAttribute("gravity skill")
|
skill_gravity = new ShipAttribute("gravity skill")
|
||||||
|
skill_time = new ShipAttribute("time skill")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set of ShipAttribute for a ship
|
* Set of ShipAttribute for a ship
|
||||||
*/
|
*/
|
||||||
export class ShipAttributes extends ShipSkills {
|
export class ShipAttributes extends ShipSkills {
|
||||||
// Attribute controlling the play order
|
|
||||||
initiative = new ShipAttribute("initiative")
|
|
||||||
// Maximal hull value
|
// Maximal hull value
|
||||||
hull_capacity = new ShipAttribute("hull capacity")
|
hull_capacity = new ShipAttribute("hull capacity")
|
||||||
// Maximal shield value
|
// Maximal shield value
|
||||||
shield_capacity = new ShipAttribute("shield capacity")
|
shield_capacity = new ShipAttribute("shield capacity")
|
||||||
// Maximal power value
|
// Maximal power value
|
||||||
power_capacity = new ShipAttribute("power capacity")
|
power_capacity = new ShipAttribute("power capacity")
|
||||||
// Initial power value at the start of a battle
|
|
||||||
power_initial = new ShipAttribute("initial power")
|
|
||||||
// Power value recovered each turn
|
// Power value recovered each turn
|
||||||
power_recovery = new ShipAttribute("power recovery")
|
power_generation = new ShipAttribute("power generation")
|
||||||
|
// Ability to move first and fast
|
||||||
|
maneuvrability = new ShipAttribute("maneuvrability")
|
||||||
|
// Ability to fire far and good
|
||||||
|
precision = new ShipAttribute("precision")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -153,7 +153,7 @@ module TS.SpaceTac {
|
||||||
|
|
||||||
// Make an initiative throw, to resolve play order in a battle
|
// Make an initiative throw, to resolve play order in a battle
|
||||||
throwInitiative(gen: RandomGenerator): void {
|
throwInitiative(gen: RandomGenerator): void {
|
||||||
this.play_priority = gen.random() * this.attributes.initiative.get();
|
this.play_priority = gen.random() * this.attributes.maneuvrability.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the player owning this ship
|
// Return the player owning this ship
|
||||||
|
@ -289,7 +289,7 @@ module TS.SpaceTac {
|
||||||
// If no value is provided, the attribute ap_initial will be used
|
// If no value is provided, the attribute ap_initial will be used
|
||||||
initializeActionPoints(value: number | null = null): void {
|
initializeActionPoints(value: number | null = null): void {
|
||||||
if (value === null) {
|
if (value === null) {
|
||||||
value = this.attributes.power_initial.get();
|
value = this.attributes.power_capacity.get();
|
||||||
}
|
}
|
||||||
this.setValue("power", value);
|
this.setValue("power", value);
|
||||||
}
|
}
|
||||||
|
@ -300,7 +300,7 @@ module TS.SpaceTac {
|
||||||
recoverActionPoints(value: number | null = null): void {
|
recoverActionPoints(value: number | null = null): void {
|
||||||
if (this.alive) {
|
if (this.alive) {
|
||||||
if (value === null) {
|
if (value === null) {
|
||||||
value = this.attributes.power_recovery.get();
|
value = this.attributes.power_generation.get();
|
||||||
}
|
}
|
||||||
this.setValue("power", value, true);
|
this.setValue("power", value, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ module TS.SpaceTac.Specs {
|
||||||
expect(ship.slots[4].type).toBe(SlotType.Weapon);
|
expect(ship.slots[4].type).toBe(SlotType.Weapon);
|
||||||
expect(ship.slots[5].type).toBe(SlotType.Weapon);
|
expect(ship.slots[5].type).toBe(SlotType.Weapon);
|
||||||
expect(ship.slots[6].type).toBe(SlotType.Weapon);
|
expect(ship.slots[6].type).toBe(SlotType.Weapon);
|
||||||
expect(ship.getAttribute("skill_material")).toBe(1);
|
expect(ship.getAttribute("skill_materials")).toBe(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,15 +4,13 @@ module TS.SpaceTac.Specs {
|
||||||
let ship = new Ship();
|
let ship = new Ship();
|
||||||
|
|
||||||
expect(ship.getAttribute("power_capacity")).toBe(0);
|
expect(ship.getAttribute("power_capacity")).toBe(0);
|
||||||
expect(ship.getAttribute("power_initial")).toBe(0);
|
expect(ship.getAttribute("power_generation")).toBe(0);
|
||||||
expect(ship.getAttribute("power_recovery")).toBe(0);
|
|
||||||
expect(ship.getValue("power")).toBe(0);
|
expect(ship.getValue("power")).toBe(0);
|
||||||
|
|
||||||
TestTools.setShipAP(ship, 12, 4);
|
TestTools.setShipAP(ship, 12, 4);
|
||||||
|
|
||||||
expect(ship.getAttribute("power_capacity")).toBe(12);
|
expect(ship.getAttribute("power_capacity")).toBe(12);
|
||||||
expect(ship.getAttribute("power_initial")).toBe(12);
|
expect(ship.getAttribute("power_generation")).toBe(4);
|
||||||
expect(ship.getAttribute("power_recovery")).toBe(4);
|
|
||||||
expect(ship.getValue("power")).toBe(12);
|
expect(ship.getValue("power")).toBe(12);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -59,10 +59,8 @@ module TS.SpaceTac {
|
||||||
if (effect instanceof AttributeEffect) {
|
if (effect instanceof AttributeEffect) {
|
||||||
if (effect.attrcode === "power_capacity") {
|
if (effect.attrcode === "power_capacity") {
|
||||||
effect.value = points;
|
effect.value = points;
|
||||||
} else if (effect.attrcode === "power_recovery") {
|
} else if (effect.attrcode === "power_generation") {
|
||||||
effect.value = recovery;
|
effect.value = recovery;
|
||||||
} else if (effect.attrcode === "power_initial") {
|
|
||||||
effect.value = points;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -44,7 +44,7 @@ module TS.SpaceTac.Specs {
|
||||||
let ship = battle.fleets[0].addShip();
|
let ship = battle.fleets[0].addShip();
|
||||||
TestTools.addEngine(ship, 500);
|
TestTools.addEngine(ship, 500);
|
||||||
let drone = new Drone(ship);
|
let drone = new Drone(ship);
|
||||||
drone.effects = [new AttributeEffect("initiative", 1)];
|
drone.effects = [new AttributeEffect("maneuvrability", 1)];
|
||||||
drone.x = 100;
|
drone.x = 100;
|
||||||
drone.y = 0;
|
drone.y = 0;
|
||||||
drone.radius = 50;
|
drone.radius = 50;
|
||||||
|
@ -56,7 +56,7 @@ module TS.SpaceTac.Specs {
|
||||||
|
|
||||||
maneuver = new Maneuver(ship, new MoveAction(new Equipment()), Target.newFromLocation(100, 30));
|
maneuver = new Maneuver(ship, new MoveAction(new Equipment()), Target.newFromLocation(100, 30));
|
||||||
expect(maneuver.getFinalLocation()).toEqual(jasmine.objectContaining({ x: 100, y: 30 }));
|
expect(maneuver.getFinalLocation()).toEqual(jasmine.objectContaining({ x: 100, y: 30 }));
|
||||||
expect(maneuver.effects).toEqual([[ship, new AttributeEffect("initiative", 1)]]);
|
expect(maneuver.effects).toEqual([[ship, new AttributeEffect("maneuvrability", 1)]]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,7 +144,7 @@ module TS.SpaceTac {
|
||||||
* Evaluate doing nothing, between -1 and 1
|
* Evaluate doing nothing, between -1 and 1
|
||||||
*/
|
*/
|
||||||
static evaluateIdling(ship: Ship, battle: Battle, maneuver: Maneuver): number {
|
static evaluateIdling(ship: Ship, battle: Battle, maneuver: Maneuver): number {
|
||||||
let lost = ship.getValue("power") - maneuver.getPowerUsage() + ship.getAttribute("power_recovery") - ship.getAttribute("power_capacity");
|
let lost = ship.getValue("power") - maneuver.getPowerUsage() + ship.getAttribute("power_generation") - ship.getAttribute("power_capacity");
|
||||||
if (lost > 0) {
|
if (lost > 0) {
|
||||||
return -lost / ship.getAttribute("power_capacity");
|
return -lost / ship.getAttribute("power_capacity");
|
||||||
} else if (maneuver.action instanceof FireWeaponAction || maneuver.action instanceof DeployDroneAction) {
|
} else if (maneuver.action instanceof FireWeaponAction || maneuver.action instanceof DeployDroneAction) {
|
||||||
|
|
|
@ -2,20 +2,20 @@ module TS.SpaceTac {
|
||||||
describe("AttributeEffect", function () {
|
describe("AttributeEffect", function () {
|
||||||
it("is not applied directly", function () {
|
it("is not applied directly", function () {
|
||||||
let ship = new Ship();
|
let ship = new Ship();
|
||||||
expect(ship.getAttribute("initiative")).toBe(0);
|
expect(ship.getAttribute("maneuvrability")).toBe(0);
|
||||||
|
|
||||||
let effect = new AttributeEffect("initiative", 20);
|
let effect = new AttributeEffect("maneuvrability", 20);
|
||||||
effect.applyOnShip(ship, ship);
|
effect.applyOnShip(ship, ship);
|
||||||
expect(ship.getAttribute("initiative")).toBe(0);
|
expect(ship.getAttribute("maneuvrability")).toBe(0);
|
||||||
|
|
||||||
ship.sticky_effects.push(new StickyEffect(effect, 2));
|
ship.sticky_effects.push(new StickyEffect(effect, 2));
|
||||||
ship.updateAttributes();
|
ship.updateAttributes();
|
||||||
expect(ship.getAttribute("initiative")).toBe(20);
|
expect(ship.getAttribute("maneuvrability")).toBe(20);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("has a description", function () {
|
it("has a description", function () {
|
||||||
let effect = new AttributeEffect("initiative", 12);
|
let effect = new AttributeEffect("maneuvrability", 12);
|
||||||
expect(effect.getDescription()).toEqual("initiative +12");
|
expect(effect.getDescription()).toEqual("maneuvrability +12");
|
||||||
|
|
||||||
effect = new AttributeEffect("shield_capacity", -4);
|
effect = new AttributeEffect("shield_capacity", -4);
|
||||||
expect(effect.getDescription()).toEqual("shield capacity -4");
|
expect(effect.getDescription()).toEqual("shield capacity -4");
|
||||||
|
|
|
@ -4,19 +4,19 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new ForceField();
|
let template = new ForceField();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 1 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 1 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 100)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 100)]);
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 3 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 3 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 140)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 140)]);
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 5 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 5 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 180)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 180)]);
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 19 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 19 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 460)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("shield_capacity", 460)]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,7 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
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");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_energy": istep(1, irepeat(2)) });
|
this.setSkillsRequirements({ "skill_photons": istep(1, irepeat(2)) });
|
||||||
this.addAttributeEffect("shield_capacity", istep(100, irepeat(40)));
|
this.addAttributeEffect("shield_capacity", istep(100, irepeat(40)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,19 +4,19 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new GatlingGun();
|
let template = new GatlingGun();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 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, 600, 0, [new DamageEffect(30, 20)]));
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 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, 600, 0, [new DamageEffect(35, 25)]));
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 3 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(40, 30)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(40, 30)]));
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 10 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 10 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(75, 65)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 3, 600, 0, [new DamageEffect(75, 65)]));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,7 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
constructor() {
|
||||||
super(SlotType.Weapon, "Gatling Gun", "Mechanical weapon using loads of metal bullets propelled by guided explosions");
|
super(SlotType.Weapon, "Gatling Gun", "Mechanical weapon using loads of metal bullets propelled by guided explosions");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_material": 1 });
|
this.setSkillsRequirements({ "skill_materials": 1 });
|
||||||
this.setCooldown(irepeat(2), irepeat(2));
|
this.setCooldown(irepeat(2), irepeat(2));
|
||||||
this.addFireAction(irepeat(3), irepeat(600), 0, [
|
this.addFireAction(irepeat(3), irepeat(600), 0, [
|
||||||
new EffectTemplate(new DamageEffect(), { base: istep(30, irepeat(5)), span: istep(20, irepeat(5)) })
|
new EffectTemplate(new DamageEffect(), { base: istep(30, irepeat(5)), span: istep(20, irepeat(5)) })
|
||||||
|
|
|
@ -4,19 +4,19 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new IronHull();
|
let template = new IronHull();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 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", 200)]);
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 2 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 2 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 220)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 220)]);
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 3 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 240)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 240)]);
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 10 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 10 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 380)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("hull_capacity", 380)]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,7 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
constructor() {
|
||||||
super(SlotType.Hull, "Iron Hull", "Protective hull, based on layered iron alloys");
|
super(SlotType.Hull, "Iron Hull", "Protective hull, based on layered iron alloys");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_material": 1 });
|
this.setSkillsRequirements({ "skill_materials": 1 });
|
||||||
this.addAttributeEffect("hull_capacity", istep(200, irepeat(20)));
|
this.addAttributeEffect("hull_capacity", istep(200, irepeat(20)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,39 +4,35 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new NuclearReactor();
|
let template = new NuclearReactor();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 1 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 1 });
|
||||||
expect(equipment.effects).toEqual([
|
expect(equipment.effects).toEqual([
|
||||||
new AttributeEffect("initiative", 1),
|
new AttributeEffect("maneuvrability", 1),
|
||||||
new AttributeEffect("power_capacity", 8),
|
new AttributeEffect("power_capacity", 7),
|
||||||
new AttributeEffect("power_initial", 5),
|
new AttributeEffect("power_generation", 4),
|
||||||
new AttributeEffect("power_recovery", 4),
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 2 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 2 });
|
||||||
expect(equipment.effects).toEqual([
|
expect(equipment.effects).toEqual([
|
||||||
new AttributeEffect("initiative", 2),
|
new AttributeEffect("maneuvrability", 2),
|
||||||
new AttributeEffect("power_capacity", 9),
|
new AttributeEffect("power_capacity", 8),
|
||||||
new AttributeEffect("power_initial", 5),
|
new AttributeEffect("power_generation", 4),
|
||||||
new AttributeEffect("power_recovery", 4),
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 3 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 3 });
|
||||||
expect(equipment.effects).toEqual([
|
expect(equipment.effects).toEqual([
|
||||||
new AttributeEffect("initiative", 3),
|
new AttributeEffect("maneuvrability", 3),
|
||||||
new AttributeEffect("power_capacity", 10),
|
new AttributeEffect("power_capacity", 9),
|
||||||
new AttributeEffect("power_initial", 6),
|
new AttributeEffect("power_generation", 4),
|
||||||
new AttributeEffect("power_recovery", 4),
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 10 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 10 });
|
||||||
expect(equipment.effects).toEqual([
|
expect(equipment.effects).toEqual([
|
||||||
new AttributeEffect("initiative", 10),
|
new AttributeEffect("maneuvrability", 10),
|
||||||
new AttributeEffect("power_capacity", 17),
|
new AttributeEffect("power_capacity", 16),
|
||||||
new AttributeEffect("power_initial", 9),
|
new AttributeEffect("power_generation", 6),
|
||||||
new AttributeEffect("power_recovery", 6),
|
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,11 +5,10 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
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");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_energy": 1 });
|
this.setSkillsRequirements({ "skill_photons": 1 });
|
||||||
this.addAttributeEffect("initiative", istep(1));
|
this.addAttributeEffect("maneuvrability", istep(1));
|
||||||
this.addAttributeEffect("power_capacity", istep(8));
|
this.addAttributeEffect("power_capacity", istep(7));
|
||||||
this.addAttributeEffect("power_initial", istep(5, irepeat(0.5)));
|
this.addAttributeEffect("power_generation", istep(4, irepeat(0.3)));
|
||||||
this.addAttributeEffect("power_recovery", istep(4, irepeat(0.3)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,19 +4,19 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new PowerDepleter();
|
let template = new PowerDepleter();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 1 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 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, 500, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 2 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 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, 520, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 3 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 3 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 540, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 540, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 10 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 10 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 680, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 680, 0, [new StickyEffect(new AttributeLimitEffect("power_capacity", 3), 2, true)]));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
constructor() {
|
||||||
super(SlotType.Weapon, "Power Depleter", "Direct-hit weapon that creates an energy well near the target, sucking its power surplus");
|
super(SlotType.Weapon, "Power Depleter", "Direct-hit weapon that creates an energy well near the target, sucking its power surplus");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_energy": 1 });
|
this.setSkillsRequirements({ "skill_photons": 1 });
|
||||||
this.setCooldown(irepeat(2), irepeat(3));
|
this.setCooldown(irepeat(2), irepeat(3));
|
||||||
this.addFireAction(irepeat(4), istep(500, irepeat(20)), 0, [
|
this.addFireAction(irepeat(4), istep(500, irepeat(20)), 0, [
|
||||||
new StickyEffectTemplate(new AttributeLimitEffect("power_capacity"), { "value": irepeat(3) }, irepeat(2))
|
new StickyEffectTemplate(new AttributeLimitEffect("power_capacity"), { "value": irepeat(3) }, irepeat(2))
|
||||||
|
|
|
@ -4,19 +4,19 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new RepairDrone();
|
let template = new RepairDrone();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_human": 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", 5)]));
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_human": 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.action).toEqual(new DeployDroneAction(equipment, 4, 310, 11, 155, [new ValueEffect("hull", 6)]));
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_human": 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.action).toEqual(new DeployDroneAction(equipment, 4, 320, 12, 160, [new ValueEffect("hull", 7)]));
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_human": 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.action).toEqual(new DeployDroneAction(equipment, 4, 390, 19, 195, [new ValueEffect("hull", 14)]));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
constructor() {
|
||||||
super(SlotType.Weapon, "Repair Drone", "Drone able to repair small hull breaches, remotely controlled by human pilots");
|
super(SlotType.Weapon, "Repair Drone", "Drone able to repair small hull breaches, remotely controlled by human pilots");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_human": 1 });
|
this.setSkillsRequirements({ "skill_quantum": 1 });
|
||||||
this.setCooldown(irepeat(1), istep(3, irepeat(0.2)));
|
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)), [
|
this.addDroneAction(irepeat(4), istep(300, irepeat(10)), istep(10, irepeat(1)), istep(150, irepeat(5)), [
|
||||||
new EffectTemplate(new ValueEffect("hull"), { "value": istep(5) })
|
new EffectTemplate(new ValueEffect("hull"), { "value": istep(5) })
|
||||||
|
|
|
@ -4,23 +4,23 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new RocketEngine();
|
let template = new RocketEngine();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 1 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 1 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("initiative", 1)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 1)]);
|
||||||
expect(equipment.action).toEqual(new MoveAction(equipment, 200));
|
expect(equipment.action).toEqual(new MoveAction(equipment, 200));
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 2 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 2 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("initiative", 2)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 2)]);
|
||||||
expect(equipment.action).toEqual(new MoveAction(equipment, 220));
|
expect(equipment.action).toEqual(new MoveAction(equipment, 220));
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 3 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 3 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("initiative", 3)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 3)]);
|
||||||
expect(equipment.action).toEqual(new MoveAction(equipment, 240));
|
expect(equipment.action).toEqual(new MoveAction(equipment, 240));
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_energy": 10 });
|
expect(equipment.requirements).toEqual({ "skill_photons": 10 });
|
||||||
expect(equipment.effects).toEqual([new AttributeEffect("initiative", 10)]);
|
expect(equipment.effects).toEqual([new AttributeEffect("maneuvrability", 10)]);
|
||||||
expect(equipment.action).toEqual(new MoveAction(equipment, 380));
|
expect(equipment.action).toEqual(new MoveAction(equipment, 380));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,9 +5,9 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
constructor() {
|
||||||
super(SlotType.Engine, "Rocket Engine", "First-era conventional deep-space engine, based on gas exhausts pushed through a nozzle");
|
super(SlotType.Engine, "Rocket Engine", "First-era conventional deep-space engine, based on gas exhausts pushed through a nozzle");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_energy": 1 });
|
this.setSkillsRequirements({ "skill_photons": 1 });
|
||||||
this.setCooldown(irepeat(2), 0);
|
this.setCooldown(irepeat(2), 0);
|
||||||
this.addAttributeEffect("initiative", 1);
|
this.addAttributeEffect("maneuvrability", 1);
|
||||||
this.addMoveAction(istep(200, irepeat(20)));
|
this.addMoveAction(istep(200, irepeat(20)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,19 +4,19 @@ module TS.SpaceTac.Equipments {
|
||||||
let template = new SubMunitionMissile();
|
let template = new SubMunitionMissile();
|
||||||
|
|
||||||
let equipment = template.generate(1);
|
let equipment = template.generate(1);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 1 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 1 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 500, 150, [new DamageEffect(30, 2)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 500, 150, [new DamageEffect(30, 2)]));
|
||||||
|
|
||||||
equipment = template.generate(2);
|
equipment = template.generate(2);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 2 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 2 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 520, 155, [new DamageEffect(32, 3)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 520, 155, [new DamageEffect(32, 3)]));
|
||||||
|
|
||||||
equipment = template.generate(3);
|
equipment = template.generate(3);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 3 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 3 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 540, 160, [new DamageEffect(34, 4)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 540, 160, [new DamageEffect(34, 4)]));
|
||||||
|
|
||||||
equipment = template.generate(10);
|
equipment = template.generate(10);
|
||||||
expect(equipment.requirements).toEqual({ "skill_material": 10 });
|
expect(equipment.requirements).toEqual({ "skill_materials": 10 });
|
||||||
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 680, 195, [new DamageEffect(48, 11)]));
|
expect(equipment.action).toEqual(new FireWeaponAction(equipment, 4, 680, 195, [new DamageEffect(48, 11)]));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ module TS.SpaceTac.Equipments {
|
||||||
constructor() {
|
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");
|
||||||
|
|
||||||
this.setSkillsRequirements({ "skill_material": 1 });
|
this.setSkillsRequirements({ "skill_materials": 1 });
|
||||||
this.setCooldown(irepeat(1), 0);
|
this.setCooldown(irepeat(1), 0);
|
||||||
this.addFireAction(irepeat(4), istep(500, irepeat(20)), istep(150, irepeat(5)), [
|
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)) })
|
new EffectTemplate(new DamageEffect(), { base: istep(30, irepeat(2)), span: istep(2, irepeat(1)) })
|
||||||
|
|
|
@ -10,11 +10,11 @@ module TS.SpaceTac.UI.Specs {
|
||||||
|
|
||||||
expect(sprite.effects.children.length).toBe(0);
|
expect(sprite.effects.children.length).toBe(0);
|
||||||
|
|
||||||
sprite.displayValueChanged(new ValueChangeEvent(ship, ship.attributes.power_recovery, -4));
|
sprite.displayValueChanged(new ValueChangeEvent(ship, ship.attributes.power_generation, -4));
|
||||||
|
|
||||||
expect(sprite.effects.children.length).toBe(1);
|
expect(sprite.effects.children.length).toBe(1);
|
||||||
let t1 = <Phaser.Text>sprite.effects.getChildAt(0);
|
let t1 = <Phaser.Text>sprite.effects.getChildAt(0);
|
||||||
expect(t1.text).toBe("power recovery -4");
|
expect(t1.text).toBe("power generation -4");
|
||||||
|
|
||||||
sprite.displayValueChanged(new ValueChangeEvent(ship, ship.values.shield, 12));
|
sprite.displayValueChanged(new ValueChangeEvent(ship, ship.values.shield, 12));
|
||||||
|
|
||||||
|
|
|
@ -137,16 +137,16 @@ module TS.SpaceTac.UI {
|
||||||
let x1 = 664;
|
let x1 = 664;
|
||||||
let x2 = 1066;
|
let x2 = 1066;
|
||||||
let y = 662;
|
let y = 662;
|
||||||
this.addAttribute("initiative", x1, y);
|
this.addAttribute("hull_capacity", x1, y);
|
||||||
this.addAttribute("hull_capacity", x1, y + 64);
|
this.addAttribute("shield_capacity", x1, y + 64);
|
||||||
this.addAttribute("shield_capacity", x1, y + 128);
|
this.addAttribute("power_capacity", x1, y + 128);
|
||||||
this.addAttribute("power_capacity", x1, y + 192);
|
this.addAttribute("power_generation", x1, y + 192);
|
||||||
this.addAttribute("power_initial", x1, y + 256);
|
this.addAttribute("maneuvrability", x1, y + 256);
|
||||||
this.addAttribute("power_recovery", x1, y + 320);
|
this.addAttribute("precision", x1, y + 320);
|
||||||
this.addAttribute("skill_material", x2, y);
|
this.addAttribute("skill_materials", x2, y);
|
||||||
this.addAttribute("skill_electronics", x2, y + 64);
|
this.addAttribute("skill_photons", x2, y + 64);
|
||||||
this.addAttribute("skill_energy", x2, y + 128);
|
this.addAttribute("skill_antimatter", x2, y + 128);
|
||||||
this.addAttribute("skill_human", x2, y + 192);
|
this.addAttribute("skill_quantum", x2, y + 192);
|
||||||
this.addAttribute("skill_gravity", x2, y + 256);
|
this.addAttribute("skill_gravity", x2, y + 256);
|
||||||
this.addAttribute("skill_time", x2, y + 320);
|
this.addAttribute("skill_time", x2, y + 320);
|
||||||
}
|
}
|
||||||
|
@ -155,11 +155,18 @@ module TS.SpaceTac.UI {
|
||||||
* Add an attribute display
|
* Add an attribute display
|
||||||
*/
|
*/
|
||||||
private addAttribute(attribute: keyof ShipAttributes, x: number, y: number) {
|
private addAttribute(attribute: keyof ShipAttributes, x: number, y: number) {
|
||||||
let text = new Phaser.Text(this.game, x, y, "", { align: "center", font: "18pt Arial", fill: "#FFFFFF" });
|
let attrname = capitalize(SHIP_ATTRIBUTES[attribute].name);
|
||||||
|
let name = new Phaser.Text(this.game, x - 144, y - 2, attrname,
|
||||||
|
{ align: "center", font: "20pt Arial", fill: "#c9d8ef", stroke: "#395665", strokeThickness: 1 });
|
||||||
|
name.anchor.set(0.5, 0.5);
|
||||||
|
this.addChild(name);
|
||||||
|
|
||||||
|
let text = new Phaser.Text(this.game, x, y, "",
|
||||||
|
{ align: "center", font: "bold 18pt Arial", fill: "#FFFFFF" });
|
||||||
text.anchor.set(0.5, 0.5);
|
text.anchor.set(0.5, 0.5);
|
||||||
this.addChild(text);
|
this.addChild(text);
|
||||||
|
|
||||||
this.attributes[SHIP_ATTRIBUTES[attribute].name] = text;
|
this.attributes[attribute] = text;
|
||||||
|
|
||||||
if (SHIP_SKILLS.hasOwnProperty(attribute)) {
|
if (SHIP_SKILLS.hasOwnProperty(attribute)) {
|
||||||
let button = new Phaser.Button(this.game, x + 54, y - 4, "character-skill-upgrade", () => {
|
let button = new Phaser.Button(this.game, x + 54, y - 4, "character-skill-upgrade", () => {
|
||||||
|
@ -169,7 +176,7 @@ module TS.SpaceTac.UI {
|
||||||
button.anchor.set(0.5, 0.5);
|
button.anchor.set(0.5, 0.5);
|
||||||
this.ship_upgrades.add(button);
|
this.ship_upgrades.add(button);
|
||||||
|
|
||||||
this.view.tooltip.bindStaticText(button, `Spend one point to upgrade ${SHIP_ATTRIBUTES[attribute].name}`);
|
this.view.tooltip.bindStaticText(button, `Spend one point to upgrade ${attrname}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +221,7 @@ module TS.SpaceTac.UI {
|
||||||
this.ship_upgrades.visible = upgrade_points > 0;
|
this.ship_upgrades.visible = upgrade_points > 0;
|
||||||
|
|
||||||
iteritems(<any>ship.attributes, (key, value: ShipAttribute) => {
|
iteritems(<any>ship.attributes, (key, value: ShipAttribute) => {
|
||||||
let text = this.attributes[value.name];
|
let text = this.attributes[key];
|
||||||
if (text) {
|
if (text) {
|
||||||
text.setText(value.get().toString());
|
text.setText(value.get().toString());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue