Compare commits

...

85 Commits
1.7.0 ... 1.9.0

Author SHA1 Message Date
Colin McLeod
1b56d39356 Update tests to support latest data changes 2015-11-14 00:15:59 -08:00
Colin McLeod
8d1d6d63ad Merge pull request #119 from sf302/master
Handle new Bi-Weave Shield Generator
2015-11-13 22:38:26 -08:00
Kevin Chang
a713105878 Handle new Bi-Weave Shield Generator 2015-11-13 16:54:00 -08:00
Colin McLeod
c527a62ce6 Tweak loader 2015-11-12 11:27:56 -08:00
Colin McLeod
16c76b2598 Added EDDB IDs to data. Updating submodule 2015-10-27 12:00:25 -07:00
Colin McLeod
ad134330c4 Fix common -> standard for outfitting page 2015-10-27 12:00:25 -07:00
Colin McLeod
05438daf48 Merge pull request #113 from richardbuckle/fix-112
#112 lower-case 'k' in 'kg/s'
2015-10-25 18:45:33 -08:00
Richard Buckle
afebf68cae #112 lower-case 'k' in 'kg/s' 2015-10-26 01:51:52 +00:00
Colin McLeod
ab4bdf355c Fix submodule reference 2015-10-23 09:44:42 -07:00
Colin McLeod
0f4abd6ace Updating data submodule reference 2015-10-23 09:18:53 -07:00
Colin McLeod
2901c978dc Use HTTPS instead of SSH for submodule 2015-10-23 09:10:01 -07:00
Colin McLeod
21e9dbc381 Adding data through submodule 2015-10-22 20:38:28 -07:00
Colin McLeod
b2ceafa89e removing data folder 2015-10-22 20:37:14 -07:00
Colin McLeod
d8633a8411 Rename common to standard for consistency 2015-10-22 20:19:56 -07:00
Colin McLeod
f4bf09eaab fix discount minus sign placement 2015-10-22 20:19:56 -07:00
Colin McLeod
f0c40aae34 Handle erroneous data better 2015-10-22 20:19:55 -07:00
Colin McLeod
90ed8ed198 error page fix 2015-10-22 20:19:55 -07:00
Colin McLeod
9af6a529dd Adding station icons 2015-10-22 20:19:55 -07:00
Colin McLeod
269dfbdc1d Merge pull request #107 from sf302/master
Reload costs refinements
2015-10-14 00:15:43 -07:00
Kevin Chang
d01cd24b0d Updated comment to reflect changes to fuel logic 2015-10-13 15:58:44 -07:00
Kevin Chang
93ac3b217f Clean up unnecessary fuel costs logic 2015-10-13 15:56:17 -07:00
Colin McLeod
a38d6cf839 Merge pull request #109 from Toxicat/patch-1
Correct bad translation
2015-10-13 13:32:29 -07:00
PanzerKadaver
bd656b46ef Correct bad translation
Correct error reported in #108
2015-10-13 22:29:48 +02:00
Kevin Chang
20cce4dcda More logical limpet ammo display, fuel tied to slider 2015-10-12 20:54:47 -07:00
Kevin Chang
d286dda07f Refinements, limpet ammo display added to reloads 2015-10-12 19:38:33 -07:00
Colin McLeod
45b6dabcd2 Bumping version to 1.8.3 2015-10-10 11:47:46 -07:00
Colin McLeod
d476c58a9c Workaround for UI-router bug for build with slash in the name. Fixes #105 2015-10-09 18:29:04 -07:00
Colin McLeod
e837bb68fb Bumping version to 1.8.2 2015-10-09 15:48:54 -07:00
Colin McLeod
e2adc7bdc4 Tweak AFMU for explorer build 2015-10-09 15:44:10 -07:00
Colin McLeod
22716517c5 Remove A-rated build type, now redundant 2015-10-09 15:23:59 -07:00
Colin McLeod
8b82965c12 Fix section quick-fit menu z-index / overlap 2015-10-09 15:23:43 -07:00
Colin McLeod
65cf975a35 Merge pull request #104 from sf302/master
Hull reinforcement auto-fill, hardpoint clobber behavior tweak
2015-10-09 15:09:10 -07:00
Kevin Chang
1c78fea48f Fix behavior for hull reinforcement max at 5D 2015-10-08 22:51:00 -07:00
Kevin Chang
08f49c8339 Fix SCB internal clobber 2015-10-08 19:29:46 -07:00
Kevin Chang
bed81d26b2 Alter auto-fill clobbering behavior for hardpoints 2015-10-08 19:20:17 -07:00
Kevin Chang
38b13fca27 Add armor autofill, prevent internal fill clobber 2015-10-08 18:06:01 -07:00
Colin McLeod
0869230b13 Fix to standard fit all class B. Closes #103 2015-10-08 15:32:01 -07:00
Colin McLeod
80d4b6b431 fix power bug when swapping disabled components 2015-10-07 20:34:52 -07:00
Colin McLeod
fb7e9136d4 Merge pull request #102 from sf302/master
Additional auto-fill for SCB and other weapons
2015-10-07 20:25:38 -07:00
Colin McLeod
059ff367ff Price changes for 1.4 2015-10-07 20:13:21 -07:00
Kevin Chang
d322e062ad Trimming back down to just laser/MC/cannon fills 2015-10-07 20:09:51 -07:00
Kevin Chang
f807f4222f Less hacks to get the same thing done 2015-10-07 20:06:04 -07:00
Kevin Chang
1d4b046723 Tweaked to reenable slot if previously disabled 2015-10-07 19:51:36 -07:00
Kevin Chang
b9fc114e02 Additional auto-fill for SCB and other weapons 2015-10-07 19:43:39 -07:00
Colin McLeod
50047411c3 Correct Viper boost speed 2015-10-07 17:57:22 -07:00
Colin McLeod
610ded2f83 Fix ammo sorting by qty and unit price 2015-10-07 11:35:36 -07:00
Colin McLeod
2a644e787a Merge pull request #100 from sf302/master
Added new 'Reload Costs' tab for ammo, digit display cleanup
2015-10-07 11:33:05 -07:00
Colin McLeod
90b339e5c3 Correct 50% warning on power band 2015-10-07 11:32:52 -07:00
Colin McLeod
a213ad12d0 lint fix 2015-10-07 02:17:49 -07:00
Colin McLeod
a4b8b942a1 Show warning when Power priority group 1 exceeds 50%. 2015-10-07 02:16:00 -07:00
Colin McLeod
df7ef0fbdb Adding more outiftting sub section menu options 2015-10-07 02:14:45 -07:00
Colin McLeod
f42dc481df Added Outfitting section sub-menu 2015-10-06 22:49:09 -07:00
Colin McLeod
623be748c0 New and improved shipyard/home page 2015-10-06 20:06:13 -07:00
Colin McLeod
35c84ee0f0 Handle rounding erros on priority bands 2015-10-06 20:06:13 -07:00
Colin McLeod
4d84f271be Update tests for ignore auto generated property 2015-10-06 20:06:13 -07:00
Colin McLeod
5458c548fb Detailed discover scanner does not use any power 2015-10-06 20:06:12 -07:00
Colin McLeod
a9be057fe8 Readbility changes for fsd, fuel tank, and ls data 2015-10-06 20:06:12 -07:00
Colin McLeod
564c228d41 Massive refactoring to Ship class 2015-10-06 20:06:12 -07:00
Colin McLeod
3f6875abb6 Add find lightest shield generator 2015-10-06 20:06:12 -07:00
Colin McLeod
a2aa829b45 Add/impromve find compoonent functions 2015-10-06 20:06:12 -07:00
Colin McLeod
08b6ec9e31 Add size map 2015-10-06 20:06:12 -07:00
Colin McLeod
ee99d33275 Bumping version to 1.8.0 2015-10-06 20:06:12 -07:00
Colin McLeod
7b9e8dbc7d Sort ships by actual name not file name 2015-10-06 20:06:12 -07:00
Colin McLeod
44f45e7e93 Handle comparison when build is missing. Closes #96 2015-10-06 20:06:12 -07:00
Colin McLeod
a49f7ec594 Handle special characters in build or comparison name. Closes #101 2015-10-06 20:06:12 -07:00
Colin McLeod
9ee12e4167 Rename DBS file 2015-10-06 20:06:11 -07:00
Kevin Chang
33ad7d909a Fix torpedo ammo cost data 2015-10-05 20:27:22 -07:00
Kevin Chang
e5e29dc6cb Cleaned up lint errors 2015-10-05 20:15:46 -07:00
Kevin Chang
34dd40bcbf Added new 'Reload Costs' tab for ammo, digit display cleanup 2015-10-05 20:08:36 -07:00
Colin McLeod
0e8e9f5cbc Merge pull request #97 from SmokyBird/patch-1
Update fr.js
2015-10-05 16:30:00 -07:00
SmokyBird
d39cbb3ef5 Update fr.js
Finally found the full French translation for the Hull Reinforcement.
2015-10-06 00:47:07 +02:00
Colin McLeod
5470b241f6 Merge pull request #94 from koreldan/master
Minor corrections
2015-09-28 09:24:49 -07:00
enrico
6507c22355 minor corrections 2015-09-27 15:36:11 +02:00
Enrico
96c2f4b3b6 Merge pull request #1 from cmmcleod/master
updating
2015-09-27 15:26:35 +02:00
Colin McLeod
b0c521246e Bumping version to 1.7.3 2015-09-22 11:53:08 -07:00
Colin McLeod
5c0616ad47 Display clip + ammo reserve more intelligently 2015-09-22 11:52:44 -07:00
Colin McLeod
523f37ccc1 Correct Torpedo Pylon ammo reserve 2015-09-22 11:52:13 -07:00
Colin McLeod
5e2768bbf6 Correct Pack-Hound cost 2015-09-22 11:51:56 -07:00
Colin McLeod
61b3e7d47d Corrected Federal Gunship hull cost 2015-09-22 11:51:25 -07:00
Colin McLeod
ed6fc32d76 Correct Shield Cell Bank recharge values 2015-09-22 11:50:00 -07:00
Colin McLeod
4c74675edd Bumping version to 1.7.2 2015-09-22 09:27:39 -07:00
Colin McLeod
d43ee25e71 Use full name for Advanced Plasma Accelerator 2015-09-22 09:27:19 -07:00
Colin McLeod
46f00e0bc7 Lint fixes 2015-09-22 09:14:47 -07:00
Colin McLeod
d3cea71e50 Bumping version to 1.7.1 2015-09-22 09:13:43 -07:00
Colin McLeod
0516a6f54d Use calculated boost speed in comparisons. Fixes #91 2015-09-22 09:13:21 -07:00
115 changed files with 1264 additions and 7332 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "data"]
path = data
url = https://github.com/cmmcleod/coriolis-data.git

View File

@@ -23,12 +23,12 @@ See the [Developer's Guide](https://github.com/cmmcleod/coriolis/wiki/Developer'
### Ship and Component Database ### Ship and Component Database
See [Data wiki](https://github.com/cmmcleod/coriolis/wiki/Database) for details on structure, etc. See the [Data wiki](https://github.com/cmmcleod/coriolis-data/wiki) for details on structure, etc.
## License ## License
All Data and [associated JSON](https://github.com/cmmcleod/coriolis/tree/master/data) files are intellectual property and copyright of Frontier Developments plc ('Frontier', 'Frontier Developments') and are subject to their All Data and [associated JSON](https://github.com/cmmcleod/coriolis-data) files are intellectual property and copyright of Frontier Developments plc ('Frontier', 'Frontier Developments') and are subject to their
[terms and conditions](https://www.frontierstore.net/terms-and-conditions/). [terms and conditions](https://www.frontierstore.net/terms-and-conditions/).
The code (Javascript, CSS, HTML, and SVG files only) specificially for Coriolis.io is released under the MIT License. The code (Javascript, CSS, HTML, and SVG files only) specificially for Coriolis.io is released under the MIT License.

View File

@@ -1,3 +0,0 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path d="M10.063 26l1.8-6h8.274l1.8 6h3.551l-6-20h-6.976l-6 20h3.551zM14.863 10h2.274l1.8 6h-5.874l1.8-6z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 265 B

28
app/icons/eddb.svg Normal file
View File

@@ -0,0 +1,28 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" height="400" viewBox="0 0 90 32">
<g>
<path d="M19.1,25.2c0.3,0,0.6,0.1,0.7,0.2c0.2,0.1,0.3,0.3,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.6v3.3c0,0.3-0.1,0.6-0.2,0.7
c-0.1,0.2-0.3,0.3-0.4,0.3c-0.2,0.1-0.4,0.2-0.6,0.1H3.6c-0.3,0-0.6-0.1-0.7-0.2c-0.2-0.1-0.3-0.3-0.3-0.4
c-0.1-0.2-0.2-0.4-0.1-0.6V10.2c0-0.3,0.1-0.5,0.2-0.7C2.7,9.4,2.9,9.3,3,9.2C3.2,9.1,3.4,9,3.6,9h15.5c0.3,0,0.6,0.1,0.7,0.2
c0.2,0.1,0.3,0.3,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.6V22c0,0.3-0.1,0.6-0.2,0.7c-0.1,0.2-0.3,0.3-0.4,0.3c-0.2,0.1-0.4,0.2-0.6,0.1
h-6.8v-6.8c0.3-0.2,0.6-0.4,0.8-0.7c0.2-0.3,0.3-0.7,0.3-1c0-0.6-0.2-1.1-0.6-1.4c-0.4-0.4-0.9-0.6-1.4-0.6c-0.5,0-1,0.2-1.4,0.6
c-0.4,0.4-0.6,0.9-0.6,1.4c0,0.8,0.3,1.4,1,1.8v8.7H19.1z"/>
<path d="M24.6,29.7V10.2c0-0.2,0-0.4,0.1-0.6c0.1-0.1,0.2-0.3,0.3-0.4C25.3,9.1,25.5,9,25.8,9h5.5c0.2,0,0.4,0.1,0.6,0.2
c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.4,0.2,0.7v13.2c-0.7,0.4-1,1-1,1.8c0,0.5,0.2,1,0.6,1.4c0.4,0.4,0.9,0.6,1.4,0.6
c0.6,0,1.1-0.2,1.4-0.6c0.4-0.4,0.6-0.9,0.6-1.4c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.5-0.8-0.7V2.3c0-0.2,0-0.4,0.1-0.6
c0.1-0.1,0.2-0.3,0.3-0.4C35.2,1.1,35.4,1,35.8,1h5.5c0.2,0,0.4,0.1,0.6,0.2c0.1,0.1,0.3,0.2,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.7v27.4
c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.1-0.2,0.3-0.4,0.4c-0.2,0.1-0.4,0.2-0.7,0.2H25.8c-0.2,0-0.4,0-0.6-0.1c-0.1-0.1-0.3-0.2-0.4-0.3
C24.7,30.3,24.6,30,24.6,29.7z"/>
<path d="M46.9,29.7V10.2c0-0.2,0-0.4,0.1-0.6c0.1-0.1,0.2-0.3,0.3-0.4C47.5,9.1,47.7,9,48.1,9h5.5c0.2,0,0.4,0.1,0.6,0.2
c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.4,0.2,0.7v13.2c-0.7,0.4-1,1-1,1.8c0,0.5,0.2,1,0.6,1.4c0.4,0.4,0.9,0.6,1.4,0.6
c0.6,0,1.1-0.2,1.4-0.6c0.4-0.4,0.6-0.9,0.6-1.4c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.5-0.8-0.7V2.3c0-0.2,0-0.4,0.1-0.6
c0.1-0.1,0.2-0.3,0.3-0.4C57.4,1.1,57.7,1,58,1h5.5c0.2,0,0.4,0.1,0.6,0.2c0.1,0.1,0.3,0.2,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.7v27.4
c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.1-0.2,0.3-0.4,0.4s-0.4,0.2-0.7,0.2H48.1c-0.2,0-0.4,0-0.6-0.1c-0.1-0.1-0.3-0.2-0.4-0.3
C46.9,30.3,46.9,30,46.9,29.7z"/>
<path d="M87,29.7c0,0.3-0.1,0.6-0.2,0.7c-0.1,0.2-0.3,0.3-0.4,0.3c-0.2,0.1-0.4,0.2-0.6,0.1H70.3c-0.3,0-0.6-0.1-0.7-0.2
s-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.1-0.6V2.3c0-0.3,0.1-0.6,0.2-0.7c0.1-0.2,0.3-0.3,0.4-0.4C69.9,1.1,70.1,1,70.3,1h5.5
c0.3,0,0.6,0.1,0.7,0.2c0.2,0.1,0.3,0.3,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.6v21.2c-0.7,0.4-1,1-1,1.8c0,0.5,0.2,1,0.6,1.4
c0.4,0.4,0.8,0.6,1.4,0.6c0.6,0,1.1-0.2,1.4-0.6c0.4-0.4,0.6-0.9,0.6-1.4c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.5-0.8-0.7V10.2
c0-0.3,0.1-0.5,0.2-0.7c0.1-0.1,0.3-0.3,0.4-0.3C79.8,9.1,80,9,80.2,9h5.5c0.3,0,0.6,0.1,0.7,0.2c0.2,0.1,0.3,0.3,0.4,0.4
C87,9.8,87,10,87,10.2V29.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,6 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path d="M18 23l3 3 10-10-10-10-3 3 7 7z"></path> <path d="M18 23l3 3 10-10-10-10-3 3 7 7z"></path>
<path d="M14 9l-3-3-10 10 10 10 3-3-7-7z"></path> <path d="M14 9l-3-3-10 10 10 10 3-3-7-7z"></path>

Before

Width:  |  Height:  |  Size: 419 B

After

Width:  |  Height:  |  Size: 248 B

3
app/icons/equalizer.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
<path d="M448 128v-16c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576zM256 256v-128h128v128h-128zM832 432c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-576v128h576v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h192v-128h-192v-16zM640 576v-128h128v128h-128zM448 752c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576v-16zM256 896v-128h128v128h-128z"></path>
</svg>

After

Width:  |  Height:  |  Size: 646 B

View File

@@ -1,3 +0,0 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="724" height="1024" viewBox="0 0 1024 1024">
<path d="M0 1024c128-384 463-1024 1024-1024-263 211-384 704-576 704s-192 0-192 0l-192 320h-64z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 218 B

View File

@@ -1,6 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path d="M28 0h-28v32h32v-28l-4-4zM16 4h4v8h-4v-8zM28 28h-24v-24h2v10h18v-10h2.343l1.657 1.657v22.343z"></path> <path d="M28 0h-28v32h32v-28l-4-4zM16 4h4v8h-4v-8zM28 28h-24v-24h2v10h18v-10h2.343l1.657 1.657v22.343z"></path>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 431 B

After

Width:  |  Height:  |  Size: 260 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<rect x="73.001" y="94.017" width="53.997" height="11.945"/>
<path d="M10.324,185.445l89.217,14.348l0.458,0.077l89.677-14.43L200,99.998l-10.338-89.765L100,0.129L10.34,10.233 L-0.001,99.986L10.324,185.445z M193.206,99.986L100,191.108L6.795,99.986L100,8.868L193.206,99.986z M6.82,107.775l87.583,85.624 l-78.983-12.702L6.82,107.775z M184.583,180.692l-78.992,12.712l87.587-85.634L184.583,180.692z M193.745,92.746L105.26,6.245 l79.339,8.938L193.745,92.746z M15.41,15.185L94.736,6.25L6.255,92.751L15.41,15.185z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 642 B

View File

@@ -0,0 +1,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<path d="M100.002,200C155.139,200,200,155.142,200,100.001c0-55.143-44.861-100.002-99.998-100.002 C44.86-0.001-0.002,44.857-0.002,100.001C-0.001,155.142,44.86,200,100.002,200z M100.002,5.574 c52.063,0,94.423,42.359,94.423,94.427c0,52.067-42.361,94.422-94.423,94.422c-52.07,0-94.428-42.358-94.428-94.422 C5.574,47.933,47.933,5.574,100.002,5.574z"/>
<path d="M100.002,148.557c26.771,0,48.558-21.783,48.558-48.555c0-26.771-21.786-48.556-48.558-48.556 c-26.777,0-48.557,21.782-48.557,48.556C51.446,126.778,73.225,148.557,100.002,148.557z M100.002,57.015 c23.699,0,42.986,19.283,42.986,42.986c0,23.7-19.282,42.987-42.986,42.987c-23.705,0-42.991-19.282-42.991-42.987 C57.011,76.298,76.302,57.015,100.002,57.015z"/>
<rect x="73.404" y="93.985" width="53.197" height="12.033"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 912 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<path d="M100.002,200c55.138,0,99.996-44.861,99.996-100c0-55.141-44.858-100-99.996-100 C44.861,0-0.001,44.857-0.001,100C0,155.139,44.861,200,100.002,200z M100.002,194.424c-35.465,0-66.413-19.663-82.552-48.651 l44.426-23.388c7.704,13.067,21.888,21.884,38.127,21.884c16.054,0,30.096-8.621,37.853-21.446l44.441,23.389 C166.092,174.961,135.282,194.424,100.002,194.424z M100.002,61.306c21.335,0,38.691,17.356,38.691,38.694 c0,21.338-17.364,38.691-38.691,38.691c-21.339,0-38.696-17.354-38.696-38.691C61.307,78.662,78.663,61.306,100.002,61.306z M194.422,100c0,14.802-3.427,28.808-9.521,41.287l-44.447-23.4c2.433-5.477,3.812-11.521,3.812-17.89 c0-23.578-18.539-42.852-41.8-44.145V5.636C153.392,6.956,194.422,48.762,194.422,100z M96.895,5.655v50.233 C73.938,57.491,55.73,76.635,55.73,100c0,6.187,1.286,12.081,3.592,17.434l-44.455,23.402C8.911,128.472,5.571,114.619,5.571,100 C5.577,48.972,46.261,7.297,96.895,5.655z"/>
<rect x="73.403" y="93.983" width="53.196" height="12.032"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<path d="M145.137,59.126h4.498v6.995h5.576V46.556h-5.576v6.994h-4.498V16.328h-5.574v57.667h-15.411v14.824h-7.63 v-14.58h-13.044v14.58h-8.295v-14.58H82.138v14.58h-6.573v-14.58H59.072v14.58h-6.573v-14.58H39.458v36.338h13.041V94.391h6.573 v16.186h16.493V94.391h6.573v16.186h13.044V94.391h8.295v16.186h13.044V94.391h7.63v40.457l17.634,17.637h13.185v31.182h5.577 V73.996H145.14v-14.87H145.137z M154.97,146.907h-10.871l-14.376-14.376V79.57h25.247V146.907z"/>
<rect fill="#999999" x="147.703" y="16.328" width="5.572" height="7.345"/>
<rect fill="#999999" x="131.295" y="16.328" width="5.577" height="7.345"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 744 B

View File

@@ -1,6 +1,6 @@
angular.module('app', ['ui.router', 'ct.ui.router.extras.sticky', 'ui.sortable', 'shipyard', 'ngLodash', 'app.templates', 'pascalprecht.translate']) angular.module('app', ['ui.router', 'ct.ui.router.extras.sticky', 'ui.sortable', 'shipyard', 'ngLodash', 'app.templates', 'pascalprecht.translate'])
.run(['$rootScope', '$location', '$window', '$document', '$state', '$translate', 'localeFormat', 'Persist', 'Discounts', 'Languages', .run(['$rootScope', '$location', '$window', '$document', '$state', '$translate', 'localeFormat', 'Persist', 'Discounts', 'Languages', 'SizeMap',
function($rootScope, $location, $window, $doc, $state, $translate, localeFormat, Persist, Discounts, Languages) { function($rootScope, $location, $window, $doc, $state, $translate, localeFormat, Persist, Discounts, Languages, SizeMap) {
// App is running as a standalone web app on tablet/mobile // App is running as a standalone web app on tablet/mobile
var isStandAlone; var isStandAlone;
// This was causing issues on Windows phones ($window.external was causing Angular js to throw an exception). Backup is to try this and set isStandAlone to false if this fails. // This was causing issues on Windows phones ($window.external was causing Angular js to throw an exception). Backup is to try this and set isStandAlone to false if this fails.
@@ -43,6 +43,7 @@ function($rootScope, $location, $window, $doc, $state, $translate, localeFormat,
$rootScope.insurance = { opts: [{ name: 'standard', pct: 0.05 }, { name: 'alpha', pct: 0.025 }, { name: 'beta', pct: 0.0375 }] }; $rootScope.insurance = { opts: [{ name: 'standard', pct: 0.05 }, { name: 'alpha', pct: 0.025 }, { name: 'beta', pct: 0.0375 }] };
$rootScope.discounts = { opts: Discounts }; $rootScope.discounts = { opts: Discounts };
$rootScope.sizeRatio = Persist.getSizeRatio(); $rootScope.sizeRatio = Persist.getSizeRatio();
$rootScope.SZM = SizeMap;
$rootScope.title = 'Coriolis'; $rootScope.title = 'Coriolis';
$rootScope.changeLanguage = function() { $rootScope.changeLanguage = function() {

View File

@@ -20,6 +20,11 @@ angular.module('app').controller('ComparisonController', ['lodash', '$rootScope'
$scope.addBuild = function(id, name, code) { $scope.addBuild = function(id, name, code) {
var data = Ships[id]; // Get ship properties var data = Ships[id]; // Get ship properties
code = code ? code : Persist.builds[id][name]; // Retrieve build code if not passed code = code ? code : Persist.builds[id][name]; // Retrieve build code if not passed
if (!code) { // No build found
return;
}
var b = new Ship(id, data.properties, data.slots); // Create a new Ship instance var b = new Ship(id, data.properties, data.slots); // Create a new Ship instance
Serializer.toShip(b, code); // Populate components from code Serializer.toShip(b, code); // Populate components from code
// Extend ship instance and add properties below // Extend ship instance and add properties below

View File

@@ -9,7 +9,7 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
var textBuildRegex = new RegExp('^\\[([\\w \\-]+)\\]\n'); var textBuildRegex = new RegExp('^\\[([\\w \\-]+)\\]\n');
var lineRegex = new RegExp('^([\\dA-Z]{1,2}): (\\d)([A-I])[/]?([FGT])?([SD])? ([\\w\\- ]+)'); var lineRegex = new RegExp('^([\\dA-Z]{1,2}): (\\d)([A-I])[/]?([FGT])?([SD])? ([\\w\\- ]+)');
var mountMap = { 'H': 4, 'L': 3, 'M': 2, 'S': 1, 'U': 0 }; var mountMap = { 'H': 4, 'L': 3, 'M': 2, 'S': 1, 'U': 0 };
var commonMap = { 'RB': 0, 'TM': 1, 'FH': 2, 'EC': 3, 'PC': 4, 'SS': 5, 'FS': 6 }; var standardMap = { 'RB': 0, 'TM': 1, 'FH': 2, 'EC': 3, 'PC': 4, 'SS': 5, 'FS': 6 };
var bhMap = { 'lightweight alloy': 0, 'reinforced alloy': 1, 'military grade composite': 2, 'mirrored surface composite': 3, 'reactive surface composite': 4 }; var bhMap = { 'lightweight alloy': 0, 'reinforced alloy': 1, 'military grade composite': 2, 'mirrored surface composite': 3, 'reactive surface composite': 4 };
function isEmptySlot(slot) { function isEmptySlot(slot) {
@@ -26,8 +26,8 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
if (!shipData) { if (!shipData) {
throw '"' + shipId + '" is not a valid Ship Id!'; throw '"' + shipId + '" is not a valid Ship Id!';
} }
if (typeof name != 'string' || name.length < 3) { if (typeof name != 'string' || name.length == 0) {
throw shipData.properties.name + ' build "' + name + '" must be a string at least 3 characters long!'; throw shipData.properties.name + ' build "' + name + '" must be a string at least 1 character long!';
} }
if (typeof code != 'string' || code.length < 10) { if (typeof code != 'string' || code.length < 10) {
throw shipData.properties.name + ' build "' + name + '" is not valid!'; throw shipData.properties.name + ' build "' + name + '" is not valid!';
@@ -45,6 +45,10 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
throw 'Build Name missing!'; throw 'Build Name missing!';
} }
if (!detailedBuild.name.trim()) {
throw 'Build Name must be a string at least 1 character long!';
}
try { try {
ship = Serializer.fromDetailedBuild(detailedBuild); ship = Serializer.fromDetailedBuild(detailedBuild);
} catch (e) { } catch (e) {
@@ -133,7 +137,7 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
var name = parts[6].trim(); var name = parts[6].trim();
var slot, group; var slot, group;
if (isNaN(typeSize)) { // Common or Hardpoint if (isNaN(typeSize)) { // Standard or Hardpoint
if (typeSize.length == 1) { // Hardpoint if (typeSize.length == 1) { // Hardpoint
var slotClass = mountMap[typeSize]; var slotClass = mountMap[typeSize];
@@ -145,11 +149,11 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
group = _.find(GroupMap, equalsIgnoreCase, name); group = _.find(GroupMap, equalsIgnoreCase, name);
var hpid = Components.findHardpointId(group, cl, rating, group ? null : name, mount, missile); var hp = Components.findHardpoint(group, cl, rating, group ? null : name, mount, missile);
if (!hpid) { throw 'Unknown component: "' + line + '"'; } if (!hp) { throw 'Unknown component: "' + line + '"'; }
ship.use(slot, hpid, Components.hardpoints(hpid), true); ship.use(slot, hp.id, hp, true);
} else if (typeSize == 'BH') { } else if (typeSize == 'BH') {
var bhId = bhMap[name.toLowerCase()]; var bhId = bhMap[name.toLowerCase()];
@@ -158,12 +162,12 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
ship.useBulkhead(bhId, true); ship.useBulkhead(bhId, true);
} else if (commonMap[typeSize] != undefined) { } else if (standardMap[typeSize] != undefined) {
var commonIndex = commonMap[typeSize]; var standardIndex = standardMap[typeSize];
if (ship.common[commonIndex].maxClass < cl) { throw name + ' exceeds max class for the ' + ship.name; } if (ship.standard[standardIndex].maxClass < cl) { throw name + ' exceeds max class for the ' + ship.name; }
ship.use(ship.common[commonIndex], cl + rating, Components.common(commonIndex, cl + rating), true); ship.use(ship.standard[standardIndex], cl + rating, Components.standard(standardIndex, cl + rating), true);
} else { } else {
throw 'Unknown component: "' + line + '"'; throw 'Unknown component: "' + line + '"';
@@ -177,11 +181,11 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
group = _.find(GroupMap, equalsIgnoreCase, name); group = _.find(GroupMap, equalsIgnoreCase, name);
var intId = Components.findInternalId(group, cl, rating, group ? null : name); var intComp = Components.findInternal(group, cl, rating, group ? null : name);
if (!intId) { throw 'Unknown component: "' + line + '"'; } if (!intComp) { throw 'Unknown component: "' + line + '"'; }
ship.use(slot, intId, Components.internal(intId)); ship.use(slot, intComp.id, intComp);
} }
} }
@@ -213,7 +217,7 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
if (importData instanceof Array) { // Must be detailed export json if (importData instanceof Array) { // Must be detailed export json
importDetailedArray(importData); importDetailedArray(importData);
} else if (importData.ship && importData.name) { // Using JSON from a single ship build export } else if (importData.ship && typeof importData.name !== undefined) { // Using JSON from a single ship build export
importDetailedArray([importData]); // Convert to array with singleobject importDetailedArray([importData]); // Convert to array with singleobject
} else { // Using Backup JSON } else { // Using Backup JSON
importBackup(importData); importBackup(importData);

View File

@@ -12,22 +12,23 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
ship.buildWith(data.defaults); // Populate with default components ship.buildWith(data.defaults); // Populate with default components
} }
$scope.buildName = $p.bn; $scope.buildName = $p.bn ? $window.decodeURIComponent($p.bn) : null;
$scope.ships = Ships;
$rootScope.title = ship.name + ($scope.buildName ? ' - ' + $scope.buildName : ''); $rootScope.title = ship.name + ($scope.buildName ? ' - ' + $scope.buildName : '');
$scope.ship = ship; $scope.ship = ship;
$scope.pp = ship.common[0]; // Power Plant $scope.pp = ship.standard[0]; // Power Plant
$scope.th = ship.common[1]; // Thruster $scope.th = ship.standard[1]; // Thruster
$scope.fsd = ship.common[2]; // Frame Shrift Drive $scope.fsd = ship.standard[2]; // Frame Shrift Drive
$scope.ls = ship.common[3]; // Life Support $scope.ls = ship.standard[3]; // Life Support
$scope.pd = ship.common[4]; // Power Distributor $scope.pd = ship.standard[4]; // Power Distributor
$scope.ss = ship.common[5]; // Sensors $scope.ss = ship.standard[5]; // Sensors
$scope.ft = ship.common[6]; // Fuel Tank $scope.ft = ship.standard[6]; // Fuel Tank
$scope.hps = ship.hardpoints; $scope.hps = ship.hardpoints;
$scope.internal = ship.internal; $scope.internal = ship.internal;
$scope.costList = ship.costList; $scope.costList = ship.costList;
$scope.powerList = ship.powerList; $scope.powerList = ship.powerList;
$scope.priorityBands = ship.priorityBands; $scope.priorityBands = ship.priorityBands;
$scope.availCS = Components.forShip(ship.id); $scope.availCS = ship.getAvailableComponents();
$scope.selectedSlot = null; $scope.selectedSlot = null;
$scope.savedCode = Persist.getBuild(ship.id, $scope.buildName); $scope.savedCode = Persist.getBuild(ship.id, $scope.buildName);
$scope.canSave = Persist.isEnabled(); $scope.canSave = Persist.isEnabled();
@@ -39,6 +40,8 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.retroPredicate = 'netCost'; $scope.retroPredicate = 'netCost';
$scope.costDesc = true; $scope.costDesc = true;
$scope.costPredicate = 'c.cost'; $scope.costPredicate = 'c.cost';
$scope.ammoDesc = true;
$scope.ammoPredicate = 'ammoUnitCost';
$scope.costTab = Persist.getCostTab() || 'costs'; $scope.costTab = Persist.getCostTab() || 'costs';
if ($scope.savedCode) { if ($scope.savedCode) {
@@ -59,7 +62,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
yMax: ship.unladenRange, yMax: ship.unladenRange,
yMin: 0, yMin: 0,
func: function(cargo) { // X Axis is Cargo func: function(cargo) { // X Axis is Cargo
return ship.jumpRangeWithMass(ship.unladenMass + $scope.fuel + cargo, $scope.fuel); return ship.getJumpRangeForMass(ship.unladenMass + $scope.fuel + cargo, $scope.fuel);
} }
}; };
$scope.jrChart = { $scope.jrChart = {
@@ -163,7 +166,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
} else if (type == 'h') { } else if (type == 'h') {
ship.use(slot, id, Components.hardpoints(id)); ship.use(slot, id, Components.hardpoints(id));
} else if (type == 'c') { } else if (type == 'c') {
ship.use(slot, id, Components.common(ship.common.indexOf(slot), id)); ship.use(slot, id, Components.standard(ship.standard.indexOf(slot), id));
} else if (type == 'i') { } else if (type == 'i') {
ship.use(slot, id, Components.internal(id)); ship.use(slot, id, Components.internal(id));
} else if (type == 'b') { } else if (type == 'b') {
@@ -184,25 +187,9 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
} }
}; };
/** $scope.resetBuild = function() {
* Strip ship to A-class and biggest A-class shield generator with military bulkheads ship.buildWith(data.defaults); // Populate with default components
*/ updateState(null);
$scope.aRatedBuild = function() {
for (var i = 0, l = ship.common.length - 1; i < l; i++) { // All except Fuel Tank
var id = ship.common[i].maxClass + 'A';
ship.use(ship.common[i], id, Components.common(i, id));
}
ship.hardpoints.forEach(function(slot) { ship.use(slot, null, null); });
ship.internal.forEach(function(slot) { ship.use(slot, null, null); });
ship.internal.some(function(slot) {
if (typeof slot.eligible === 'undefined') { // Assuming largest slot can hold an eligible shield
id = Components.findInternalId('Shield Generator', slot.maxClass, 'A');
ship.use(slot, id, Components.internal(id));
return true;
}
});
ship.useBulkhead(2);
updateState(Serializer.fromShip(ship));
}; };
/** /**
@@ -210,21 +197,148 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
* without power management. * without power management.
*/ */
$scope.optimizeMassBuild = function() { $scope.optimizeMassBuild = function() {
var common = ship.common; updateState(Serializer.fromShip(ship.optimizeMass()));
ship.hardpoints.forEach(function(slot) { ship.use(slot, null, null); }); };
ship.internal.forEach(function(slot) { ship.use(slot, null, null); });
ship.useBulkhead(0);
ship.use(common[2], common[2].maxClass + 'A', Components.common(2, common[2].maxClass + 'A')); // FSD
ship.use(common[3], common[3].maxClass + 'D', Components.common(3, common[3].maxClass + 'D')); // Life Support
ship.use(common[5], common[5].maxClass + 'D', Components.common(5, common[5].maxClass + 'D')); // Sensors
var pd = $scope.availCS.lightestPowerDist(ship.boostEnergy); // Find lightest Power Distributor that can still boost /**
ship.use(ship.common[4], pd, Components.common(4, pd)); * Optimize for the lower mass build that can still boost and power the ship
var th = $scope.availCS.lightestThruster(ship.ladenMass); // Find lightest Thruster that still works for the ship at max mass * without power management.
ship.use(ship.common[1], th, Components.common(1, th)); */
var pp = $scope.availCS.lightestPowerPlant(ship.powerRetracted); // Find lightest Power plant that can power the ship $scope.optimizeStandard = function() {
ship.use(ship.common[0], pp, Components.common(0, pp)); updateState(Serializer.fromShip(ship.useLightestStandard()));
};
$scope.useStandard = function(rating) {
updateState(Serializer.fromShip(ship.useStandard(rating)));
};
$scope.useHardpoint = function(group, mount, clobber, missile) {
updateState(Serializer.fromShip(ship.useWeapon(group, mount, clobber, missile)));
};
$scope.useUtility = function(group, rating, clobber) {
updateState(Serializer.fromShip(ship.useUtility(group, rating, clobber)));
};
$scope.emptyInternal = function() {
updateState(Serializer.fromShip(ship.emptyInternal()));
};
$scope.emptyHardpoints = function() {
updateState(Serializer.fromShip(ship.emptyWeapons()));
};
$scope.emptyUtility = function() {
updateState(Serializer.fromShip(ship.emptyUtility()));
};
$scope.fillWithCargo = function() {
ship.internal.forEach(function(slot) {
var id = Components.findInternalId('cr', slot.maxClass, 'E');
if (!slot.c) {
ship.use(slot, id, Components.internal(id));
}
});
updateState(Serializer.fromShip(ship));
};
$scope.fillWithCells = function() {
var chargeCap = 0; // Capacity of single activation
ship.internal.forEach(function(slot) {
var id = Components.findInternalId('scb', slot.maxClass, 'A');
if (!slot.c && (!slot.eligible || slot.eligible.scb)) { // Check eligibility because of Orca, don't overwrite generator
ship.use(slot, id, Components.internal(id));
chargeCap += Components.internal(id).recharge;
ship.setSlotEnabled(slot, chargeCap <= ship.shieldStrength); // Don't waste cell capacity on overcharge
}
});
updateState(Serializer.fromShip(ship));
};
$scope.fillWithArmor = function() {
ship.internal.forEach(function(slot) {
var hr = Components.findInternal('hr', Math.min(slot.maxClass, 5), 'D'); // Hull reinforcements top out at 5D
if (!slot.c && hr) {
ship.use(slot, hr.id, hr);
}
});
updateState(Serializer.fromShip(ship));
};
/**
* Fill all internal slots with Cargo Racks, and optmize internal components.
* Hardpoints are not altered.
*/
$scope.optimizeCargo = function() {
ship.internal.forEach(function(slot) {
var id = Components.findInternalId('cr', slot.maxClass, 'E');
ship.use(slot, id, Components.internal(id));
});
ship.useLightestStandard();
updateState(Serializer.fromShip(ship));
};
/**
* Optimize standard and internal components, hardpoints for exploration
*/
$scope.optimizeExplorer = function() {
var intLength = ship.internal.length,
heatSinkCount = 2, // Fit 2 heat sinks if possible
afmUnitCount = 2, // Fit 2 AFM Units if possible
sgSlot,
fuelScoopSlot,
sgId = $scope.availCS.lightestShieldGenerator(ship.hullMass),
sg = Components.internal(sgId);
ship.setSlotEnabled(ship.cargoHatch, false)
.use(ship.internal[--intLength], '2f', Components.internal('2f')) // Advanced Discovery Scanner
.use(ship.internal[--intLength], '2i', Components.internal('2i')); // Detailed Surface Scanner
for (var i = 0; i < intLength; i++) {
var slot = ship.internal[i];
var nextSlot = (i + 1) < intLength ? ship.internal[i + 1] : null;
if (!fuelScoopSlot && (!slot.eligible || slot.eligible.fs)) { // Fit best possible Fuel Scoop
var fuelScoopId = Components.findInternalId('fs', slot.maxClass, 'A');
fuelScoopSlot = slot;
ship.use(fuelScoopSlot, fuelScoopId, Components.internal(fuelScoopId));
ship.setSlotEnabled(fuelScoopSlot, true);
// Mount a Shield generator if possible AND an AFM Unit has been mounted already (Guarantees at least 1 AFM Unit)
} else if (!sgSlot && afmUnitCount < 2 && sg.class <= slot.maxClass && (!slot.eligible || slot.eligible.sg) && (!nextSlot || nextSlot.maxClass < sg.class)) {
sgSlot = slot;
ship.use(sgSlot, sgId, sg);
ship.setSlotEnabled(sgSlot, true);
} else if (afmUnitCount > 0 && (!slot.eligible || slot.eligible.am)) {
afmUnitCount--;
var am = Components.findInternal('am', slot.maxClass, afmUnitCount ? 'B' : 'A');
ship.use(slot, am.id, am);
ship.setSlotEnabled(slot, false); // Disabled power for AFM Unit
} else {
ship.use(slot, null, null);
}
}
ship.hardpoints.forEach(function(s) {
if (s.maxClass == 0 && heatSinkCount) { // Mount up to 2 heatsinks
ship.use(s, '02', Components.hardpoints('02'));
ship.setSlotEnabled(s, heatSinkCount == 2); // Only enable a single Heatsink
heatSinkCount--;
} else {
ship.use(s, null, null);
}
});
if (sgSlot) {
// The SG and Fuel scoop to not need to be powered at the same time
if (sgSlot.c.power > fuelScoopSlot.c.power) { // The Shield generator uses the most power
ship.setSlotEnabled(fuelScoopSlot, false);
} else { // The Fuel scoop uses the most power
ship.setSlotEnabled(sgSlot, false);
}
}
ship.useLightestStandard({ pd: '1D', ppRating: 'A' });
updateState(Serializer.fromShip(ship)); updateState(Serializer.fromShip(ship));
}; };
@@ -290,6 +404,15 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
ship.setCostIncluded(item, !item.incCost); ship.setCostIncluded(item, !item.incCost);
}; };
/**
* Toggle cost of the selected component for retrofitting comparison
* @param {object} item The component being toggled
*/
$scope.toggleRetrofitCost = function(item) {
retrofitShip.setCostIncluded(item, !item.incCost);
updateRetrofitCosts();
};
/** /**
* [sortCost description] * [sortCost description]
* @param {[type]} key [description] * @param {[type]} key [description]
@@ -310,6 +433,11 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.retroPredicate = key; $scope.retroPredicate = key;
}; };
$scope.sortAmmo = function(key) {
$scope.ammoDesc = $scope.ammoPredicate == key ? !$scope.ammoDesc : $scope.ammoDesc;
$scope.ammoPredicate = key;
};
/** /**
* Toggle the power on/off for the selected component * Toggle the power on/off for the selected component
* @param {object} item The component being toggled * @param {object} item The component being toggled
@@ -333,6 +461,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.fuelChange = function(fuel) { $scope.fuelChange = function(fuel) {
$scope.fuel = fuel; $scope.fuel = fuel;
updateAmmoCosts();
win.triggerHandler('render'); win.triggerHandler('render');
}; };
@@ -353,6 +482,19 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
updateRetrofitCosts(); updateRetrofitCosts();
}; };
$scope.updateCostTab = function(tab) {
Persist.setCostTab(tab);
$scope.costTab = tab;
};
$scope.ppWarning = function(pp) {
return pp.pGen < ship.powerRetracted;
};
$scope.pdWarning = function(pd) {
return pd.enginecapacity < ship.boostEnergy;
};
// Utilify functions // Utilify functions
function updateState(code) { function updateState(code) {
@@ -376,18 +518,21 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
buyName: ship.bulkheads.c.name, buyName: ship.bulkheads.c.name,
sellClassRating: retrofitShip.bulkheads.c.class + retrofitShip.bulkheads.c.rating, sellClassRating: retrofitShip.bulkheads.c.class + retrofitShip.bulkheads.c.rating,
sellName: retrofitShip.bulkheads.c.name, sellName: retrofitShip.bulkheads.c.name,
netCost: ship.bulkheads.discountedCost - retrofitShip.bulkheads.discountedCost netCost: ship.bulkheads.discountedCost - retrofitShip.bulkheads.discountedCost,
retroItem: retrofitShip.bulkheads
}; };
costs.push(item); costs.push(item);
if (retrofitShip.bulkheads.incCost) {
total += item.netCost; total += item.netCost;
} }
}
for (var g in { common: 1, internal: 1, hardpoints: 1 }) { for (var g in { standard: 1, internal: 1, hardpoints: 1 }) {
var retroSlotGroup = retrofitShip[g]; var retroSlotGroup = retrofitShip[g];
var slotGroup = ship[g]; var slotGroup = ship[g];
for (i = 0, l = slotGroup.length; i < l; i++) { for (i = 0, l = slotGroup.length; i < l; i++) {
if (slotGroup[i].id != retroSlotGroup[i].id) { if (slotGroup[i].id != retroSlotGroup[i].id) {
item = { netCost: 0 }; item = { netCost: 0, retroItem: retroSlotGroup[i] };
if (slotGroup[i].id) { if (slotGroup[i].id) {
item.buyName = slotGroup[i].c.name || slotGroup[i].c.grp; item.buyName = slotGroup[i].c.name || slotGroup[i].c.grp;
item.buyClassRating = slotGroup[i].c.class + slotGroup[i].c.rating; item.buyClassRating = slotGroup[i].c.class + slotGroup[i].c.rating;
@@ -399,25 +544,82 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
item.netCost -= retroSlotGroup[i].discountedCost; item.netCost -= retroSlotGroup[i].discountedCost;
} }
costs.push(item); costs.push(item);
if (retroSlotGroup[i].incCost) {
total += item.netCost; total += item.netCost;
} }
} }
} }
}
$scope.retrofitTotal = total; $scope.retrofitTotal = total;
updateAmmoCosts();
} }
$scope.updateCostTab = function(tab) { function updateAmmoCosts() {
Persist.setCostTab(tab); var costs = $scope.ammoList = [];
$scope.costTab = tab; var total = 0, i, l, item, q, limpets = 0, scoop = false;
};
$scope.ppWarning = function(pp) { for (var g in { standard: 1, internal: 1, hardpoints: 1 }) {
return pp.pGen < ship.powerRetracted; var slotGroup = ship[g];
for (i = 0, l = slotGroup.length; i < l; i++) {
if (slotGroup[i].id) {
//special cases needed for SCB, AFMU, and limpet controllers since they don't use standard ammo/clip
q = 0;
switch (slotGroup[i].c.grp) {
case 'fs': //skip fuel calculation if scoop present
scoop = true;
break;
case 'scb':
q = slotGroup[i].c.cells;
break;
case 'am':
q = slotGroup[i].c.ammo;
break;
case 'fx': case 'hb': case 'cc': case 'pc':
limpets = ship.cargoCapacity;
break;
default:
q = slotGroup[i].c.clip + slotGroup[i].c.ammo;
}
//calculate ammo costs only if a cost is specified
if (slotGroup[i].c.ammocost > 0) {
item = {
ammoClassRating: slotGroup[i].c.class + slotGroup[i].c.rating,
ammoName: slotGroup[i].c.name || slotGroup[i].c.grp,
ammoMax: q,
ammoUnitCost: slotGroup[i].c.ammocost,
ammoTotalCost: q * slotGroup[i].c.ammocost
}; };
costs.push(item);
total += item.ammoTotalCost;
}
}
}
}
$scope.pdWarning = function(pd) { //limpets if controllers exist and cargo space available
return pd.enginecapacity < ship.boostEnergy; if (limpets > 0) {
item = {
ammoName: 'limpets',
ammoMax: ship.cargoCapacity,
ammoUnitCost: 101,
ammoTotalCost: ship.cargoCapacity * 101
}; };
costs.push(item);
total += item.ammoTotalCost;
}
//calculate refuel costs if no scoop present
if (!scoop) {
item = {
ammoName: 'fuel',
ammoMax: $scope.fuel,
ammoUnitCost: 50,
ammoTotalCost: $scope.fuel * 50
};
costs.push(item);
total += item.ammoTotalCost;
}
$scope.ammoTotal = total;
}
// Hide any open menu/slot/etc if the background is clicked // Hide any open menu/slot/etc if the background is clicked
$scope.$on('close', function() { $scope.$on('close', function() {

View File

@@ -1,4 +1,59 @@
angular.module('app').controller('ShipyardController', ['$rootScope', 'ShipsDB', function($rootScope, ships) { angular.module('app').controller('ShipyardController', ['$rootScope', '$scope', 'ShipsDB', 'Ship', 'Components', function($rootScope, $scope, ShipsDB, Ship, Components) {
$rootScope.title = 'Coriolis'; $rootScope.title = 'Coriolis - Shipyard';
$rootScope.ships = ships; $scope.shipPredicate = 'properties.name';
$scope.shipDesc = false;
function countHp(slot) {
this.hp[slot.maxClass]++;
this.hpCount++;
}
function countInt(slot) {
var crEligible = !slot.eligible || slot.eligible.cr;
this.int[slot.maxClass - 1]++; // Subtract 1 since there is no Class 0 Internal compartment
this.intCount++;
this.maxCargo += crEligible ? Components.findInternal('cr', slot.maxClass, 'E').capacity : 0;
}
function shipSummary(shipId, shipData) {
var summary = angular.copy(shipData.properties);
var ship = new Ship(shipId, shipData.properties, shipData.slots);
summary.id = s;
summary.hpCount = 0;
summary.intCount = 0;
summary.maxCargo = 0;
summary.hp = [0, 0, 0, 0, 0]; // Utility, Small, Medium, Large, Huge
summary.int = [0, 0, 0, 0, 0, 0, 0, 0]; // Sizes 1 - 8
// Build Ship
ship.buildWith(shipData.defaults); // Populate with stock/default components
ship.hardpoints.forEach(countHp.bind(summary)); // Count Hardpoints by class
ship.internal.forEach(countInt.bind(summary)); // Count Internal Compartments by class
summary.retailCost = ship.totalCost; // Record Stock/Default/retail cost
ship.optimizeMass({ pd: '1D' }); // Optimize Mass with 1D PD for maximum possible jump range
summary.maxJumpRange = ship.unladenRange; // Record Jump Range
ship.optimizeMass({ th: ship.standard[1].maxClass + 'A' }); // Optmize mass with Max Thrusters
summary.topSpeed = ship.topSpeed;
summary.topBoost = ship.topBoost;
return summary;
}
/* Initialization */
if (!$rootScope.shipsOverview) { // Only generate this once
$rootScope.shipsOverview = [];
for (var s in ShipsDB) {
$scope.shipsOverview.push(shipSummary(s, ShipsDB[s]));
}
}
/**
* Sort ships
* @param {object} key Sort predicate
*/
$scope.sortShips = function(key) {
$scope.shipDesc = $scope.shipPredicate == key ? !$scope.shipDesc : $scope.shipDesc;
$scope.shipPredicate = key;
};
}]); }]);

View File

@@ -6,7 +6,7 @@ angular.module('app').directive('componentSelect', ['$translate', function($tran
var prevClass = null, prevRating = null; var prevClass = null, prevRating = null;
for (var i = 0; i < opts.length; i++) { for (var i = 0; i < opts.length; i++) {
var o = opts[i]; var o = opts[i];
var id = o.id || (o.class + o.rating); // Common components' ID is their class and rating var id = o.id || (o.class + o.rating); // Standard components' ID is their class and rating
if (i > 0 && opts.length > 3 && o.class != prevClass && (o.rating != prevRating || o.mode) && o.grp != 'pa') { if (i > 0 && opts.length > 3 && o.class != prevClass && (o.rating != prevRating || o.mode) && o.grp != 'pa') {
list.push('<br/>'); list.push('<br/>');

View File

@@ -10,7 +10,7 @@ angular.module('app').directive('shipyardHeader', ['lodash', '$window', '$rootSc
scope.ships = ships; scope.ships = ships;
scope.allBuilds = Persist.builds; scope.allBuilds = Persist.builds;
scope.buildsList = Object.keys(scope.allBuilds).sort(); scope.buildsList = Object.keys(scope.allBuilds).sort();
scope.allComparisons = Persist.comparisons; scope.allComparisons = Object.keys(Persist.comparisons).sort();
scope.bs = Persist.state; scope.bs = Persist.state;
var win = angular.element($window); // Angularized window object for event triggering var win = angular.element($window); // Angularized window object for event triggering
@@ -57,6 +57,10 @@ angular.module('app').directive('shipyardHeader', ['lodash', '$window', '$rootSc
}); });
}; };
scope.cleanedBuildList = function(shipId) {
return Object.keys(scope.allBuilds[shipId]);
};
scope.openMenu = function(e, menu) { scope.openMenu = function(e, menu) {
e.stopPropagation(); e.stopPropagation();
if (menu == scope.openedMenu) { if (menu == scope.openedMenu) {
@@ -68,6 +72,11 @@ angular.module('app').directive('shipyardHeader', ['lodash', '$window', '$rootSc
scope.openedMenu = null; scope.openedMenu = null;
return; return;
} }
if (menu == 'comp') {
scope.allComparisons = Object.keys(Persist.comparisons).sort();
}
scope.openedMenu = menu; scope.openedMenu = menu;
}; };

View File

@@ -206,7 +206,7 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
var yVal = series ? y0[series[i]] : y0; var yVal = series ? y0[series[i]] : y0;
yTotal += yVal; yTotal += yVal;
return (series ? $translate.instant(series[i]) : '') + ' ' + fmtLong(yVal); return (series ? $translate.instant(series[i]) : '') + ' ' + fmtLong(yVal);
}).append('tspan').attr('class','metric').text(' ' + $translate.instant(labels.yAxis.unit)); }).append('tspan').attr('class', 'metric').text(' ' + $translate.instant(labels.yAxis.unit));
tips.selectAll('text').each(function() { tips.selectAll('text').each(function() {
if (this.getBBox().width > tipWidth) { if (this.getBBox().width > tipWidth) {
@@ -217,7 +217,7 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
tipWidth += 8; tipWidth += 8;
markers.selectAll('circle.marker').attr('cx', x(x0)).attr('cy', function(d, i) { return y(series ? y0[series[i]] : y0); }); markers.selectAll('circle.marker').attr('cx', x(x0)).attr('cy', function(d, i) { return y(series ? y0[series[i]] : y0); });
tips.selectAll('text.label').attr('x', flip ? -12 : 12).style('text-anchor', flip ? 'end' : 'start'); tips.selectAll('text.label').attr('x', flip ? -12 : 12).style('text-anchor', flip ? 'end' : 'start');
tips.selectAll('text.label.x').text(fmtLong(x0)).append('tspan').attr('class','metric').text(' ' + $translate.instant(labels.xAxis.unit)); tips.selectAll('text.label.x').text(fmtLong(x0)).append('tspan').attr('class', 'metric').text(' ' + $translate.instant(labels.xAxis.unit));
tips.attr('transform', 'translate(' + x(x0) + ',' + Math.max(minTransY, y(yTotal / (series ? series.length : 1))) + ')'); tips.attr('transform', 'translate(' + x(x0) + ',' + Math.max(minTransY, y(yTotal / (series ? series.length : 1))) + ')');
tips.selectAll('rect') tips.selectAll('rect')
.attr('width', tipWidth + 4) .attr('width', tipWidth + 4)

View File

@@ -38,7 +38,7 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc
}); });
// Create Y Axis SVG Elements // Create Y Axis SVG Elements
vis.append('g').attr('class', 'watt axis'); var wattAxisGroup = vis.append('g').attr('class', 'watt axis');
vis.append('g').attr('class', 'pct axis'); vis.append('g').attr('class', 'pct axis');
var retText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp'); var retText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp');
var depText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp'); var depText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp');
@@ -94,13 +94,24 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc
retracted.selectAll('text').remove(); retracted.selectAll('text').remove();
deployed.selectAll('rect').remove(); deployed.selectAll('rect').remove();
deployed.selectAll('text').remove(); deployed.selectAll('text').remove();
wattAxisGroup.selectAll('line.threshold').remove();
// Update X & Y Axis // Update X & Y Axis
wattScale.range([0, w]).domain([0, maxPwr]).clamp(true); wattScale.range([0, w]).domain([0, maxPwr]).clamp(true);
pctScale.range([0, w]).domain([0, maxPwr / available]).clamp(true); pctScale.range([0, w]).domain([0, maxPwr / available]).clamp(true);
vis.selectAll('.watt.axis').call(wattAxis); wattAxisGroup.call(wattAxis);
vis.selectAll('.pct.axis').attr('transform', 'translate(0,' + innerHeight + ')').call(pctAxis); vis.selectAll('.pct.axis').attr('transform', 'translate(0,' + innerHeight + ')').call(pctAxis);
var pwrWarningClass = 'threshold' + (bands[0].retractedSum * 2 >= available ? ' exceeded' : '');
vis.select('.pct.axis g:nth-child(6)').selectAll('line, text').attr('class', pwrWarningClass);
wattAxisGroup.append('line')
.attr('x1', pctScale(0.5))
.attr('x2', pctScale(0.5))
.attr('y1', 0)
.attr('y2', innerHeight)
.attr('class', pwrWarningClass);
retText.attr('y', repY); retText.attr('y', repY);
depText.attr('y', depY); depText.attr('y', depY);
updateLabel(retLbl, w, repY, retBandsSelected, retBandsSelected ? retractedSum : maxBand.retractedSum, available); updateLabel(retLbl, w, repY, retBandsSelected, retBandsSelected ? retractedSum : maxBand.retractedSum, available);
@@ -162,7 +173,8 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc
} }
function getClass(selected, sum, avail) { function getClass(selected, sum, avail) {
return selected ? 'secondary' : (sum >= avail) ? 'warning' : 'primary'; // Round to avoid floating point precision errors
return selected ? 'secondary' : ((Math.round(sum * 100) / 100) >= avail) ? 'warning' : 'primary';
} }
function bandText(val, index) { function bandText(val, index) {

View File

@@ -115,6 +115,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
laden: 'Beladen', laden: 'Beladen',
language: 'Sprache', language: 'Sprache',
large: 'Groß', large: 'Groß',
limpets: 'Krallen',
ls: 'Lebenserhaltung', ls: 'Lebenserhaltung',
'Lightweight Alloy': 'Leichte Legierung', 'Lightweight Alloy': 'Leichte Legierung',
'lock factor': 'Massensperrefaktor', 'lock factor': 'Massensperrefaktor',

View File

@@ -24,6 +24,7 @@ angular.module('app').config(['$translateProvider', function($translateProvider)
'build name': 'Build Name', 'build name': 'Build Name',
builds: 'builds', builds: 'builds',
bh: 'bulkheads', bh: 'bulkheads',
'bsg': 'Bi-Weave Shield Generator',
ul: 'Burst Laser', ul: 'Burst Laser',
buy: 'buy', buy: 'buy',
cancel: 'cancel', cancel: 'cancel',
@@ -105,6 +106,7 @@ angular.module('app').config(['$translateProvider', function($translateProvider)
laden: 'laden', laden: 'laden',
language: 'language', language: 'language',
large: 'large', large: 'large',
'limpets': 'Limpets',
ls: 'life support', ls: 'life support',
'Lightweight Alloy': 'Lightweight Alloy', 'Lightweight Alloy': 'Lightweight Alloy',
'lock factor': 'lock factor', 'lock factor': 'lock factor',

View File

@@ -115,6 +115,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
'large': 'Grande', 'large': 'Grande',
'ls': 'Soporte vital', 'ls': 'Soporte vital',
'Lightweight Alloy': 'Aleaci\u00f3n ligera', 'Lightweight Alloy': 'Aleaci\u00f3n ligera',
'limpets': 'Drones',
'lock factor': 'factor de bloqueo', 'lock factor': 'factor de bloqueo',
'mass': 'Masa', 'mass': 'Masa',
'max': 'm\u00e1x', 'max': 'm\u00e1x',

View File

@@ -46,7 +46,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
cells: 'Cellules', cells: 'Cellules',
'Chaff Launcher': 'Lanceur de paillettes', 'Chaff Launcher': 'Lanceur de paillettes',
close: 'fermer', close: 'fermer',
cc: 'Contrôleur de prospecteur', cc: 'Contrôleur de Collecteur',
compare: 'comparer', compare: 'comparer',
'compare all': 'tout comparer', 'compare all': 'tout comparer',
comparison: 'comparaison', comparison: 'comparaison',
@@ -91,7 +91,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
'Heat Sink Launcher': 'Éjecteur de dissipateur thermique', 'Heat Sink Launcher': 'Éjecteur de dissipateur thermique',
huge: 'Très grand', huge: 'Très grand',
hull: 'Coque', hull: 'Coque',
hr: 'Ensemble de mesures permettant de', hr: 'Ensemble de mesures permettant de renforcer la coque',
'Imperial Hammer': 'Marteau impérial', 'Imperial Hammer': 'Marteau impérial',
import: 'Importer', import: 'Importer',
'import all': 'Importer tout', 'import all': 'Importer tout',
@@ -106,6 +106,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
large: 'large', large: 'large',
ls: 'Systèmes de survie', ls: 'Systèmes de survie',
'Lightweight Alloy': 'alliage léger', 'Lightweight Alloy': 'alliage léger',
'limpets': 'Patelles',
'lock factor': 'facteur inhibition de masse', 'lock factor': 'facteur inhibition de masse',
LS: 'SL', LS: 'SL',
LY: 'AL', LY: 'AL',

View File

@@ -116,11 +116,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
small: 'piccolo', small: 'piccolo',
speed: 'velocità', speed: 'velocità',
Stock: 'appena comprata', Stock: 'appena comprata',
t: 'Motori', t: 'thrusters',
time: 'tempo', time: 'tempo',
total: 'totale', total: 'totale',
'total range': 'distanza totale', 'total range': 'distanza totale',
turret: 'turrette', turret: 'torrette',
type: 'tipo', type: 'tipo',
unladen: 'scarico', unladen: 'scarico',
PHRASE_UPDATE_RDY: 'Aggiornamenti disponibili ! Clicca per Aggiornare', PHRASE_UPDATE_RDY: 'Aggiornamenti disponibili ! Clicca per Aggiornare',

View File

@@ -124,6 +124,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
large: 'большой', large: 'большой',
ls: 'Система жизнеобеспечения', ls: 'Система жизнеобеспечения',
'Lightweight Alloy': 'Легкий сплав', 'Lightweight Alloy': 'Легкий сплав',
'limpets': 'Дроны',
'lock factor': 'Масс. блок', 'lock factor': 'Масс. блок',
LS: 'Св.сек', LS: 'Св.сек',
LY: 'Св.лет', LY: 'Св.лет',

View File

@@ -16,7 +16,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
var data = [ var data = [
ship.bulkheads.id, ship.bulkheads.id,
_.map(ship.common, mapGroup, power), _.map(ship.standard, mapGroup, power),
_.map(ship.hardpoints, mapGroup, power), _.map(ship.hardpoints, mapGroup, power),
_.map(ship.internal, mapGroup, power), _.map(ship.internal, mapGroup, power),
'.', '.',
@@ -36,7 +36,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
* @param {string} dataString The string to deserialize * @param {string} dataString The string to deserialize
*/ */
this.toShip = function(ship, dataString) { this.toShip = function(ship, dataString) {
var common = new Array(ship.common.length), var standard = new Array(ship.standard.length),
hardpoints = new Array(ship.hardpoints.length), hardpoints = new Array(ship.hardpoints.length),
internal = new Array(ship.internal.length), internal = new Array(ship.internal.length),
parts = dataString.split('.'), parts = dataString.split('.'),
@@ -52,12 +52,12 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
priorities = LZString.decompressFromBase64(parts[2].replace(/-/g, '/')).split(''); priorities = LZString.decompressFromBase64(parts[2].replace(/-/g, '/')).split('');
} }
decodeToArray(code, internal, decodeToArray(code, hardpoints, decodeToArray(code, common, 1))); decodeToArray(code, internal, decodeToArray(code, hardpoints, decodeToArray(code, standard, 1)));
ship.buildWith( ship.buildWith(
{ {
bulkheads: code.charAt(0) * 1, bulkheads: code.charAt(0) * 1,
common: common, standard: standard,
hardpoints: hardpoints, hardpoints: hardpoints,
internal: internal internal: internal
}, },
@@ -67,7 +67,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
}; };
this.toDetailedBuild = function(buildName, ship, code) { this.toDetailedBuild = function(buildName, ship, code) {
var standard = ship.common, var standard = ship.standard,
hardpoints = ship.hardpoints, hardpoints = ship.hardpoints,
internal = ship.internal; internal = ship.internal;
@@ -128,7 +128,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
throw 'Invalid bulkheads: ' + standard.bulkheads; throw 'Invalid bulkheads: ' + standard.bulkheads;
} }
var common = _.map( var standardIds = _.map(
['powerPlant', 'thrusters', 'frameShiftDrive', 'lifeSupport', 'powerDistributor', 'sensors', 'fuelTank'], ['powerPlant', 'thrusters', 'frameShiftDrive', 'lifeSupport', 'powerDistributor', 'sensors', 'fuelTank'],
function(c) { function(c) {
if (!standard[c].class || !standard[c].rating) { if (!standard[c].class || !standard[c].rating) {
@@ -144,8 +144,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
var hardpoints = _.map(comps.hardpoints, function(c) { var hardpoints = _.map(comps.hardpoints, function(c) {
return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount], c.missile) : 0; return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount], c.missile) : 0;
}); }).concat(_.map(comps.utility, function(c) {
hardpoints = hardpoints.concat(_.map(comps.utility, function(c) {
return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount]) : 0; return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount]) : 0;
})); }));
@@ -157,7 +156,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
_.map(comps.utility, function(c) { return (!c || c.enabled === undefined) ? true : c.enabled * 1; }), _.map(comps.utility, function(c) { return (!c || c.enabled === undefined) ? true : c.enabled * 1; }),
_.map(comps.internal, function(c) { return (!c || c.enabled === undefined) ? true : c.enabled * 1; })); _.map(comps.internal, function(c) { return (!c || c.enabled === undefined) ? true : c.enabled * 1; }));
ship.buildWith({ bulkheads: bulkheads, common: common, hardpoints: hardpoints, internal: internal }, priorities, enabled); ship.buildWith({ bulkheads: bulkheads, standard: standardIds, hardpoints: hardpoints, internal: internal }, priorities, enabled);
return ship; return ship;
}; };

View File

@@ -13,28 +13,28 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
return maxClass; return maxClass;
} }
function ComponentSet(components, mass, maxCommonArr, maxInternal, maxHardPoint) { function ComponentSet(components, mass, maxStandardArr, maxInternal, maxHardPoint) {
this.mass = mass; this.mass = mass;
this.common = {}; this.standard = {};
this.internal = {}; this.internal = {};
this.hardpoints = {}; this.hardpoints = {};
this.hpClass = {}; this.hpClass = {};
this.intClass = {}; this.intClass = {};
this.common[0] = filter(components.common[0], maxCommonArr[0], 0, mass); // Power Plant this.standard[0] = filter(components.standard[0], maxStandardArr[0], 0, mass); // Power Plant
this.common[2] = filter(components.common[2], maxCommonArr[2], 0, mass); // FSD this.standard[2] = filter(components.standard[2], maxStandardArr[2], 0, mass); // FSD
this.common[4] = filter(components.common[4], maxCommonArr[4], 0, mass); // Power Distributor this.standard[4] = filter(components.standard[4], maxStandardArr[4], 0, mass); // Power Distributor
this.common[6] = filter(components.common[6], maxCommonArr[6], 0, mass); // Fuel Tank this.standard[6] = filter(components.standard[6], maxStandardArr[6], 0, mass); // Fuel Tank
// Thrusters, filter components by class only (to show full list of ratings for that class) // Thrusters, filter components by class only (to show full list of ratings for that class)
var minThrusterClass = _.reduce(components.common[1], function(minClass, thruster) { var minThrusterClass = _.reduce(components.standard[1], function(minClass, thruster) {
return (thruster.maxmass >= mass && thruster.class < minClass) ? thruster.class : minClass; return (thruster.maxmass >= mass && thruster.class < minClass) ? thruster.class : minClass;
}, maxCommonArr[1]); }, maxStandardArr[1]);
this.common[1] = filter(components.common[1], maxCommonArr[1], minThrusterClass, 0); // Thrusters this.standard[1] = filter(components.standard[1], maxStandardArr[1], minThrusterClass, 0); // Thrusters
// Slots where component class must be equal to slot class // Slots where component class must be equal to slot class
this.common[3] = filter(components.common[3], maxCommonArr[3], maxCommonArr[3], 0); // Life Supprt this.standard[3] = filter(components.standard[3], maxStandardArr[3], maxStandardArr[3], 0); // Life Supprt
this.common[5] = filter(components.common[5], maxCommonArr[5], maxCommonArr[5], mass); // Sensors this.standard[5] = filter(components.standard[5], maxStandardArr[5], maxStandardArr[5], mass); // Sensors
for (var h in components.hardpoints) { for (var h in components.hardpoints) {
this.hardpoints[h] = filter(components.hardpoints[h], maxHardPoint, 0, mass); this.hardpoints[h] = filter(components.hardpoints[h], maxHardPoint, 0, mass);
@@ -94,7 +94,7 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
} }
ComponentSet.prototype.lightestPowerDist = function(boostEnergy) { ComponentSet.prototype.lightestPowerDist = function(boostEnergy) {
var pds = this.common[4]; var pds = this.standard[4];
var pd = pds[0]; var pd = pds[0];
for (var i = 1; i < pds.length; i++) { for (var i = 1; i < pds.length; i++) {
@@ -106,7 +106,7 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
}; };
ComponentSet.prototype.lightestThruster = function(ladenMass) { ComponentSet.prototype.lightestThruster = function(ladenMass) {
var ths = this.common[1]; var ths = this.standard[1];
var th = ths[0]; var th = ths[0];
for (var i = 1; i < ths.length; i++) { for (var i = 1; i < ths.length; i++) {
@@ -117,8 +117,19 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
return th.class + th.rating; return th.class + th.rating;
}; };
ComponentSet.prototype.lightestPowerPlant = function(powerUsed) { ComponentSet.prototype.lightestShieldGenerator = function(hullMass) {
var pps = this.common[0]; var sg = null;
_.forEach(this.internal.sg, function(s) {
if (sg == null || (s.mass < sg.mass && s.minmass <= hullMass && s.maxmass > hullMass)) {
sg = s;
}
});
return sg.id;
};
ComponentSet.prototype.lightestPowerPlant = function(powerUsed, rating) {
var pps = this.standard[0];
var pp = null; var pp = null;
for (var i = 0; i < pps.length; i++) { for (var i = 0; i < pps.length; i++) {
@@ -126,7 +137,7 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
pp = pps[i]; pp = pps[i];
} }
} }
return pp.class + (pp.rating != 'D' ? 'A' : 'D'); // Use A rated if C,E return pp.class + (pp.rating != 'D' || rating == 'A' ? 'A' : 'D'); // Use A rated if C,E
}; };
return ComponentSet; return ComponentSet;

View File

@@ -8,9 +8,6 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
*/ */
function powerUsageType(slot, component) { function powerUsageType(slot, component) {
if (component) { if (component) {
if (component.retractedOnly) {
return 'retOnly';
}
if (component.passive) { if (component.passive) {
return 'retracted'; return 'retracted';
} }
@@ -23,18 +20,19 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
* *
* @param {string} id Unique ship Id / Key * @param {string} id Unique ship Id / Key
* @param {object} properties Basic ship properties such as name, manufacturer, mass, etc * @param {object} properties Basic ship properties such as name, manufacturer, mass, etc
* @param {object} slots Collection of slot groups (standard/common, internal, hardpoints) with their max class size. * @param {object} slots Collection of slot groups (standard/standard, internal, hardpoints) with their max class size.
*/ */
function Ship(id, properties, slots) { function Ship(id, properties, slots) {
this.id = id; this.id = id;
this.cargoHatch = { c: Components.cargoHatch(), type: 'SYS' }; this.cargoHatch = { c: Components.cargoHatch(), type: 'SYS' };
this.bulkheads = { incCost: true, maxClass: 8 }; this.bulkheads = { incCost: true, maxClass: 8 };
this.availCS = Components.forShip(id);
for (var p in properties) { this[p] = properties[p]; } // Copy all base properties from shipData for (var p in properties) { this[p] = properties[p]; } // Copy all base properties from shipData
for (var slotType in slots) { // Initialize all slots for (var slotType in slots) { // Initialize all slots
var slotGroup = slots[slotType]; var slotGroup = slots[slotType];
var group = this[slotType] = []; // Initialize Slot group (Common, Hardpoints, Internal) var group = this[slotType] = []; // Initialize Slot group (Standard, Hardpoints, Internal)
for (var i = 0; i < slotGroup.length; i++) { for (var i = 0; i < slotGroup.length; i++) {
if (typeof slotGroup[i] == 'object') { if (typeof slotGroup[i] == 'object') {
group.push({ id: null, c: null, incCost: true, maxClass: slotGroup[i].class, eligible: slotGroup[i].eligible }); group.push({ id: null, c: null, incCost: true, maxClass: slotGroup[i].class, eligible: slotGroup[i].eligible });
@@ -46,18 +44,18 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
// Make a Ship 'slot'/item similar to other slots // Make a Ship 'slot'/item similar to other slots
this.c = { incCost: true, type: 'SHIP', discountedCost: this.hullCost, c: { name: this.name, cost: this.hullCost } }; this.c = { incCost: true, type: 'SHIP', discountedCost: this.hullCost, c: { name: this.name, cost: this.hullCost } };
this.costList = _.union(this.internal, this.common, this.hardpoints); this.costList = _.union(this.internal, this.standard, this.hardpoints);
this.costList.push(this.bulkheads); // Add The bulkheads this.costList.push(this.bulkheads); // Add The bulkheads
this.costList.unshift(this.c); // Add the ship itself to the list this.costList.unshift(this.c); // Add the ship itself to the list
this.powerList = _.union(this.internal, this.hardpoints); this.powerList = _.union(this.internal, this.hardpoints);
this.powerList.unshift(this.cargoHatch); this.powerList.unshift(this.cargoHatch);
this.powerList.unshift(this.common[1]); // Add Thrusters this.powerList.unshift(this.standard[1]); // Add Thrusters
this.powerList.unshift(this.common[5]); // Add Sensors this.powerList.unshift(this.standard[5]); // Add Sensors
this.powerList.unshift(this.common[4]); // Add Power Distributor this.powerList.unshift(this.standard[4]); // Add Power Distributor
this.powerList.unshift(this.common[3]); // Add Life Support this.powerList.unshift(this.standard[3]); // Add Life Support
this.powerList.unshift(this.common[2]); // Add FSD this.powerList.unshift(this.standard[2]); // Add FSD
this.powerList.unshift(this.common[0]); // Add Power Plant this.powerList.unshift(this.standard[0]); // Add Power Plant
this.shipCostMultiplier = 1; this.shipCostMultiplier = 1;
this.componentCostMultiplier = 1; this.componentCostMultiplier = 1;
@@ -71,16 +69,101 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
]; ];
} }
//*********//
// GETTERS //
//*********//
Ship.prototype.getAvailableComponents = function() {
return this.availCS;
};
Ship.prototype.getSlotStatus = function(slot, deployed) {
if (!slot.c) { // Empty Slot
return 0; // No Status (Not possible to be active in this state)
} else if (!slot.enabled) {
return 1; // Disabled
} else if (deployed) {
return this.priorityBands[slot.priority].deployedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
// Active hardpoints have no retracted status
} else if ((slot.cat === 1 && !slot.c.passive)) {
return 0; // No Status (Not possible to be active in this state)
}
return this.priorityBands[slot.priority].retractedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
};
/**
* Calculate jump range using the installed FSD and the
* specified mass which can be more or less than ships actual mass
* @param {number} mass Mass in tons
* @param {number} fuel Fuel available in tons
* @return {number} Jump range in Light Years
*/
Ship.prototype.getJumpRangeForMass = function(mass, fuel) {
return calcJumpRange(mass, this.standard[2].c, fuel);
};
/**
* Find an internal slot that has an installed component of the specific group.
*
* @param {string} group Component group/type
* @return {number} The index of the slot in ship.internal
*/
Ship.prototype.findInternalByGroup = function(group) {
var index;
if (group == 'sg' || group == 'psg' || group == 'bsg') {
index = _.findIndex(this.internal, function(slot) {
return slot.c && (slot.c.grp == 'sg' || slot.c.grp == 'psg' || slot.c.grp == 'bsg');
});
} else {
index = _.findIndex(this.internal, function(slot) {
return slot.c && slot.c.grp == group;
});
}
if (index !== -1) {
return this.internal[index];
}
return null;
};
//**********************//
// Mutate / Update Ship //
//**********************//
/**
* Recalculate all item costs and total based on discounts.
* @param {number} shipCostMultiplier Ship cost multiplier discount (e.g. 0.9 === 10% discount)
* @param {number} componentCostMultiplier Component cost multiplier discount (e.g. 0.75 === 25% discount)
*/
Ship.prototype.applyDiscounts = function(shipCostMultiplier, componentCostMultiplier) {
var total = 0;
var costList = this.costList;
for (var i = 0, l = costList.length; i < l; i++) {
var item = costList[i];
if (item.c && item.c.cost) {
item.discountedCost = item.c.cost * (item.type == 'SHIP' ? shipCostMultiplier : componentCostMultiplier);
if (item.incCost) {
total += item.discountedCost;
}
}
}
this.shipCostMultiplier = shipCostMultiplier;
this.componentCostMultiplier = componentCostMultiplier;
this.totalCost = total;
return this;
};
/** /**
* Builds/Updates the ship instance with the components[comps] passed in. * Builds/Updates the ship instance with the components[comps] passed in.
* @param {object} comps Collection of components used to build the ship * @param {object} comps Collection of components used to build the ship
*/ */
Ship.prototype.buildWith = function(comps, priorities, enabled) { Ship.prototype.buildWith = function(comps, priorities, enabled) {
var internal = this.internal, var internal = this.internal,
common = this.common, standard = this.standard,
hps = this.hardpoints, hps = this.hardpoints,
bands = this.priorityBands, bands = this.priorityBands,
cl = common.length, cl = standard.length,
i, l; i, l;
// Reset Cumulative stats // Reset Cumulative stats
@@ -110,26 +193,26 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
} }
for (i = 0; i < cl; i++) { for (i = 0; i < cl; i++) {
common[i].cat = 0; standard[i].cat = 0;
common[i].enabled = enabled ? enabled[i + 1] * 1 : true; standard[i].enabled = enabled ? enabled[i + 1] * 1 : true;
common[i].priority = priorities ? priorities[i + 1] * 1 : 0; standard[i].priority = priorities && priorities[i + 1] ? priorities[i + 1] * 1 : 0;
common[i].type = 'SYS'; standard[i].type = 'SYS';
common[i].c = common[i].id = null; // Resetting 'old' component if there was one standard[i].c = standard[i].id = null; // Resetting 'old' component if there was one
common[i].discountedCost = 0; standard[i].discountedCost = 0;
if (comps) { if (comps) {
this.use(common[i], comps.common[i], Components.common(i, comps.common[i]), true); this.use(standard[i], comps.standard[i], Components.standard(i, comps.standard[i]), true);
} }
} }
common[1].type = 'ENG'; // Thrusters standard[1].type = 'ENG'; // Thrusters
common[2].type = 'ENG'; // FSD standard[2].type = 'ENG'; // FSD
cl++; // Increase accounts for Cargo Scoop cl++; // Increase accounts for Cargo Scoop
for (i = 0, l = hps.length; i < l; i++) { for (i = 0, l = hps.length; i < l; i++) {
hps[i].cat = 1; hps[i].cat = 1;
hps[i].enabled = enabled ? enabled[cl + i] * 1 : true; hps[i].enabled = enabled ? enabled[cl + i] * 1 : true;
hps[i].priority = priorities ? priorities[cl + i] * 1 : 0; hps[i].priority = priorities && priorities[cl + i] ? priorities[cl + i] * 1 : 0;
hps[i].type = hps[i].maxClass ? 'WEP' : 'SYS'; hps[i].type = hps[i].maxClass ? 'WEP' : 'SYS';
hps[i].c = hps[i].id = null; // Resetting 'old' component if there was one hps[i].c = hps[i].id = null; // Resetting 'old' component if there was one
hps[i].discountedCost = 0; hps[i].discountedCost = 0;
@@ -144,7 +227,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
for (i = 0, l = internal.length; i < l; i++) { for (i = 0, l = internal.length; i < l; i++) {
internal[i].cat = 2; internal[i].cat = 2;
internal[i].enabled = enabled ? enabled[cl + i] * 1 : true; internal[i].enabled = enabled ? enabled[cl + i] * 1 : true;
internal[i].priority = priorities ? priorities[cl + i] * 1 : 0; internal[i].priority = priorities && priorities[cl + i] ? priorities[cl + i] * 1 : 0;
internal[i].type = 'SYS'; internal[i].type = 'SYS';
internal[i].id = internal[i].c = null; // Resetting 'old' component if there was one internal[i].id = internal[i].c = null; // Resetting 'old' component if there was one
internal[i].discountedCost = 0; internal[i].discountedCost = 0;
@@ -156,108 +239,54 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
// Update aggragated stats // Update aggragated stats
if (comps) { if (comps) {
this.updatePower(); this.updatePower()
this.updateJumpStats(); .updateJumpStats()
this.updateShieldStrength(); .updateShieldStrength()
this.updateTopSpeed(); .updateTopSpeed();
} }
return this;
}; };
Ship.prototype.useBulkhead = function(index, preventUpdate) { Ship.prototype.emptyHardpoints = function() {
var oldBulkhead = this.bulkheads.c; for (var i = this.hardpoints.length; i--; ) {
this.bulkheads.id = index; this.use(this.hardpoints[i], null, null);
this.bulkheads.c = Components.bulkheads(this.id, index); }
this.bulkheads.discountedCost = this.bulkheads.c.cost * this.componentCostMultiplier; return this;
this.armourMultiplier = ArmourMultiplier[index]; };
this.updateStats(this.bulkheads, this.bulkheads.c, oldBulkhead, preventUpdate);
Ship.prototype.emptyInternal = function() {
for (var i = this.internal.length; i--; ) {
this.use(this.internal[i], null, null);
}
return this;
};
Ship.prototype.emptyUtility = function() {
for (var i = this.hardpoints.length; i--; ) {
if (!this.hardpoints[i].maxClass) {
this.use(this.hardpoints[i], null, null);
}
}
return this;
};
Ship.prototype.emptyWeapons = function() {
for (var i = this.hardpoints.length; i--; ) {
if (this.hardpoints[i].maxClass) {
this.use(this.hardpoints[i], null, null);
}
}
return this;
}; };
/** /**
* Update a slot with a the component if the id is different from the current id for this slot. * Optimize for the lower mass build that can still boost and power the ship
* Has logic handling components that you may only have 1 of (Shield Generator or Refinery). * without power management.
* * @param {object} c Standard Component overrides
* @param {object} slot The component slot
* @param {string} id Unique ID for the selected component
* @param {object} component Properties for the selected component
* @param {boolean} preventUpdate If true, do not update aggregated stats
*/ */
Ship.prototype.use = function(slot, id, component, preventUpdate) { Ship.prototype.optimizeMass = function(c) {
if (slot.id != id) { // Selecting a different component return this.emptyHardpoints().emptyInternal().useLightestStandard(c);
// Slot is an internal slot, is not being emptied, and the selected component group/type must be of unique
if (slot.cat == 2 && component && _.includes(['psg', 'sg', 'rf', 'fs'], component.grp)) {
// Find another internal slot that already has this type/group installed
var similarSlot = this.findInternalByGroup(component.grp);
// If another slot has an installed component with of the same type
if (!preventUpdate && similarSlot && similarSlot !== slot) {
this.updateStats(similarSlot, null, similarSlot.c, true); // Update stats but don't trigger a global update
similarSlot.id = similarSlot.c = null; // Empty the slot
similarSlot.discountedCost = 0;
}
}
var oldComponent = slot.c;
slot.id = id;
slot.c = component;
slot.discountedCost = (component && component.cost) ? component.cost * this.componentCostMultiplier : 0;
this.updateStats(slot, component, oldComponent, preventUpdate);
}
};
/**
* Calculate jump range using the installed FSD and the
* specified mass which can be more or less than ships actual mass
* @param {number} mass Mass in tons
* @param {number} fuel Fuel available in tons
* @return {number} Jump range in Light Years
*/
Ship.prototype.jumpRangeWithMass = function(mass, fuel) {
return calcJumpRange(mass, this.common[2].c, fuel);
};
/**
* Find an internal slot that has an installed component of the specific group.
*
* @param {string} group Component group/type
* @return {number} The index of the slot in ship.internal
*/
Ship.prototype.findInternalByGroup = function(group) {
var index;
if (group == 'sg' || group == 'psg') {
index = _.findIndex(this.internal, function(slot) {
return slot.c && (slot.c.grp == 'sg' || slot.c.grp == 'psg');
});
} else {
index = _.findIndex(this.internal, function(slot) {
return slot.c && slot.c.grp == group;
});
}
if (index !== -1) {
return this.internal[index];
}
return null;
};
/**
* Will change the priority of the specified slot if the new priority is valid
* @param {object} slot The slot to be updated
* @param {number} newPriority The new priority to be set
* @return {boolean} Returns true if the priority was changed (within range)
*/
Ship.prototype.changePriority = function(slot, newPriority) {
if (newPriority >= 0 && newPriority < this.priorityBands.length) {
var oldPriority = slot.priority;
slot.priority = newPriority;
if (slot.enabled) { // Only update power if the slot is enabled
var usage = powerUsageType(slot, slot.c);
this.priorityBands[oldPriority][usage] -= slot.c.power;
this.priorityBands[newPriority][usage] += slot.c.power;
this.updatePower();
}
return true;
}
return false;
}; };
Ship.prototype.setCostIncluded = function(item, included) { Ship.prototype.setCostIncluded = function(item, included) {
@@ -265,6 +294,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
this.totalCost += included ? item.discountedCost : -item.discountedCost; this.totalCost += included ? item.discountedCost : -item.discountedCost;
} }
item.incCost = included; item.incCost = included;
return this;
}; };
Ship.prototype.setSlotEnabled = function(slot, enabled) { Ship.prototype.setSlotEnabled = function(slot, enabled) {
@@ -273,7 +303,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
if (slot.c) { if (slot.c) {
this.priorityBands[slot.priority][powerUsageType(slot, slot.c)] += enabled ? slot.c.power : -slot.c.power; this.priorityBands[slot.priority][powerUsageType(slot, slot.c)] += enabled ? slot.c.power : -slot.c.power;
if (slot.c.grp == 'sg' || slot.c.grp == 'psg') { if (slot.c.grp == 'sg' || slot.c.grp == 'psg' || slot.c.grp == 'bsg') {
this.updateShieldStrength(); this.updateShieldStrength();
} else if (slot.c.grp == 'sb') { } else if (slot.c.grp == 'sb') {
this.shieldMultiplier += slot.c.shieldmul * (enabled ? 1 : -1); this.shieldMultiplier += slot.c.shieldmul * (enabled ? 1 : -1);
@@ -285,27 +315,14 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
this.updatePower(); this.updatePower();
} }
} }
}; return this;
Ship.prototype.getSlotStatus = function(slot, deployed) {
if (!slot.c) { // Empty Slot
return 0; // No Status (Not possible)
} else if (!slot.enabled) {
return 1; // Disabled
} else if (deployed && !slot.c.retractedOnly) { // Certain component (e.g. Detaild Surface scanner) are power only while retracted
return this.priorityBands[slot.priority].deployedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
// Active hardpoints have no retracted status
} else if ((deployed && slot.c.retractedOnly) || (slot.cat === 1 && !slot.c.passive)) {
return 0; // No Status (Not possible)
}
return this.priorityBands[slot.priority].retractedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
}; };
/** /**
* Updates the ship's cumulative and aggregated stats based on the component change. * Updates the ship's cumulative and aggregated stats based on the component change.
*/ */
Ship.prototype.updateStats = function(slot, n, old, preventUpdate) { Ship.prototype.updateStats = function(slot, n, old, preventUpdate) {
var powerChange = slot == this.common[0]; var powerChange = slot == this.standard[0];
if (old) { // Old component now being removed if (old) { // Old component now being removed
switch (old.grp) { switch (old.grp) {
@@ -380,6 +397,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
this.updateJumpStats(); this.updateJumpStats();
this.updateShieldStrength(); this.updateShieldStrength();
} }
return this;
}; };
Ship.prototype.updatePower = function() { Ship.prototype.updatePower = function() {
@@ -392,56 +410,190 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
prevDeployed = band.deployedSum = prevDeployed + band.deployed + band.retracted; prevDeployed = band.deployedSum = prevDeployed + band.deployed + band.retracted;
} }
this.powerAvailable = this.common[0].c.pGen; this.powerAvailable = this.standard[0].c.pGen;
this.powerRetracted = prevRetracted; this.powerRetracted = prevRetracted;
this.powerDeployed = prevDeployed; this.powerDeployed = prevDeployed;
return this;
}; };
Ship.prototype.updateTopSpeed = function() { Ship.prototype.updateTopSpeed = function() {
var speeds = calcSpeed(this.unladenMass + this.fuelCapacity, this.speed, this.boost, this.common[1].c, this.pipSpeed); var speeds = calcSpeed(this.unladenMass + this.fuelCapacity, this.speed, this.boost, this.standard[1].c, this.pipSpeed);
this.topSpeed = speeds['4 Pips']; this.topSpeed = speeds['4 Pips'];
this.topBoost = speeds.boost; this.topBoost = speeds.boost;
return this;
}; };
Ship.prototype.updateShieldStrength = function() { Ship.prototype.updateShieldStrength = function() {
var sgSlot = this.findInternalByGroup('sg'); // Find Shield Generator slot Index if any var sgSlot = this.findInternalByGroup('sg'); // Find Shield Generator slot Index if any
this.shieldStrength = sgSlot && sgSlot.enabled ? calcShieldStrength(this.hullMass, this.baseShieldStrength, sgSlot.c, this.shieldMultiplier) : 0; this.shieldStrength = sgSlot && sgSlot.enabled ? calcShieldStrength(this.hullMass, this.baseShieldStrength, sgSlot.c, this.shieldMultiplier) : 0;
return this;
}; };
/** /**
* Jump Range and total range calculations * Jump Range and total range calculations
*/ */
Ship.prototype.updateJumpStats = function() { Ship.prototype.updateJumpStats = function() {
var fsd = this.common[2].c; // Frame Shift Drive; var fsd = this.standard[2].c; // Frame Shift Drive;
this.unladenRange = calcJumpRange(this.unladenMass + fsd.maxfuel, fsd, this.fuelCapacity); // Include fuel weight for jump this.unladenRange = calcJumpRange(this.unladenMass + fsd.maxfuel, fsd, this.fuelCapacity); // Include fuel weight for jump
this.fullTankRange = calcJumpRange(this.unladenMass + this.fuelCapacity, fsd, this.fuelCapacity); // Full Tanke this.fullTankRange = calcJumpRange(this.unladenMass + this.fuelCapacity, fsd, this.fuelCapacity); // Full Tanke
this.ladenRange = calcJumpRange(this.ladenMass, fsd, this.fuelCapacity); this.ladenRange = calcJumpRange(this.ladenMass, fsd, this.fuelCapacity);
this.unladenTotalRange = calcTotalRange(this.unladenMass, fsd, this.fuelCapacity); this.unladenTotalRange = calcTotalRange(this.unladenMass, fsd, this.fuelCapacity);
this.ladenTotalRange = calcTotalRange(this.unladenMass + this.cargoCapacity, fsd, this.fuelCapacity); this.ladenTotalRange = calcTotalRange(this.unladenMass + this.cargoCapacity, fsd, this.fuelCapacity);
this.maxJumpCount = Math.ceil(this.fuelCapacity / fsd.maxfuel); this.maxJumpCount = Math.ceil(this.fuelCapacity / fsd.maxfuel);
return this;
};
/**
* Update a slot with a the component if the id is different from the current id for this slot.
* Has logic handling components that you may only have 1 of (Shield Generator or Refinery).
*
* @param {object} slot The component slot
* @param {string} id Unique ID for the selected component
* @param {object} component Properties for the selected component
* @param {boolean} preventUpdate If true, do not update aggregated stats
*/
Ship.prototype.use = function(slot, id, component, preventUpdate) {
if (slot.id != id) { // Selecting a different component
// Slot is an internal slot, is not being emptied, and the selected component group/type must be of unique
if (slot.cat == 2 && component && _.includes(['bsg', 'psg', 'sg', 'rf', 'fs'], component.grp)) {
// Find another internal slot that already has this type/group installed
var similarSlot = this.findInternalByGroup(component.grp);
// If another slot has an installed component with of the same type
if (!preventUpdate && similarSlot && similarSlot !== slot) {
this.updateStats(similarSlot, null, similarSlot.c);
similarSlot.id = similarSlot.c = null; // Empty the slot
similarSlot.discountedCost = 0;
}
}
var oldComponent = slot.c;
slot.id = id;
slot.c = component;
slot.discountedCost = (component && component.cost) ? component.cost * this.componentCostMultiplier : 0;
this.updateStats(slot, component, oldComponent, preventUpdate);
}
return this;
}; };
/** /**
* Recalculate all item costs and total based on discounts. * [useBulkhead description]
* @param {number} shipCostMultiplier Ship cost multiplier discount (e.g. 0.9 === 10% discount) * @param {[type]} index [description]
* @param {number} componentCostMultiplier Component cost multiplier discount (e.g. 0.75 === 25% discount) * @param {[type]} preventUpdate [description]
* @return {[type]} [description]
*/ */
Ship.prototype.applyDiscounts = function(shipCostMultiplier, componentCostMultiplier) { Ship.prototype.useBulkhead = function(index, preventUpdate) {
var total = 0; var oldBulkhead = this.bulkheads.c;
var costList = this.costList; this.bulkheads.id = index;
this.bulkheads.c = Components.bulkheads(this.id, index);
this.bulkheads.discountedCost = this.bulkheads.c.cost * this.componentCostMultiplier;
this.armourMultiplier = ArmourMultiplier[index];
this.updateStats(this.bulkheads, this.bulkheads.c, oldBulkhead, preventUpdate);
for (var i = 0, l = costList.length; i < l; i++) { return this;
var item = costList[i]; };
if (item.c && item.c.cost) {
item.discountedCost = item.c.cost * (item.type == 'SHIP' ? shipCostMultiplier : componentCostMultiplier); /**
if (item.incCost) { * [useStandard description]
total += item.discountedCost; * @param {[type]} rating [description]
* @return {[type]} [description]
*/
Ship.prototype.useStandard = function(rating) {
for (var i = this.standard.length - 1; i--; ) { // All except Fuel Tank
var id = this.standard[i].maxClass + rating;
this.use(this.standard[i], id, Components.standard(i, id));
}
return this;
};
/**
* Use the lightest standard components unless otherwise specified
* @param {object} c Component overrides
*/
Ship.prototype.useLightestStandard = function(c) {
c = c || {};
var standard = this.standard,
pd = c.pd || this.availCS.lightestPowerDist(this.boostEnergy), // Find lightest Power Distributor that can still boost;
fsd = c.fsd || standard[2].maxClass + 'A',
ls = c.ls || standard[3].maxClass + 'D',
s = c.s || standard[5].maxClass + 'D',
updated;
this.useBulkhead(0)
.use(standard[2], fsd, Components.standard(2, fsd)) // FSD
.use(standard[3], ls, Components.standard(3, ls)) // Life Support
.use(standard[5], s, Components.standard(5, s)) // Sensors
.use(standard[4], pd, Components.standard(4, pd)); // Power Distributor
// Thrusters and Powerplant must be determined after all other components are mounted
// Loop at least once to determine absolute lightest PD and TH
do {
updated = false;
// Find lightest Thruster that still works for the ship at max mass
var th = c.th || this.availCS.lightestThruster(this.ladenMass);
if (th != standard[1].id) {
this.use(standard[1], th, Components.standard(1, th));
updated = true;
}
// Find lightest Power plant that can power the ship
var pp = c.pp || this.availCS.lightestPowerPlant(Math.max(this.powerRetracted, this.powerDeployed), c.ppRating);
if (pp != standard[0].id) {
this.use(standard[0], pp, Components.standard(0, pp));
updated = true;
}
} while (updated);
return this;
};
Ship.prototype.useUtility = function(group, rating, clobber) {
var component = Components.findHardpoint(group, 0, rating);
for (var i = this.hardpoints.length; i--; ) {
if ((clobber || !this.hardpoints[i].c) && !this.hardpoints[i].maxClass) {
this.use(this.hardpoints[i], component.id, component);
} }
} }
return this;
};
Ship.prototype.useWeapon = function(group, mount, clobber, missile) {
var hps = this.hardpoints;
for (var i = hps.length; i--; ) {
if (hps[i].maxClass) {
var size = hps[i].maxClass, component;
do {
component = Components.findHardpoint(group, size, null, null, mount, missile);
if ((clobber || !hps[i].c) && component) {
this.use(hps[i], component.id, component);
break;
} }
this.shipCostMultiplier = shipCostMultiplier; } while (!component && (--size > 0));
this.componentCostMultiplier = componentCostMultiplier; }
this.totalCost = total; }
return this;
};
/**
* Will change the priority of the specified slot if the new priority is valid
* @param {object} slot The slot to be updated
* @param {number} newPriority The new priority to be set
* @return {boolean} Returns true if the priority was changed (within range)
*/
Ship.prototype.changePriority = function(slot, newPriority) {
if (newPriority >= 0 && newPriority < this.priorityBands.length) {
var oldPriority = slot.priority;
slot.priority = newPriority;
if (slot.enabled) { // Only update power if the slot is enabled
var usage = powerUsageType(slot, slot.c);
this.priorityBands[oldPriority][usage] -= slot.c.power;
this.priorityBands[newPriority][usage] += slot.c.power;
this.updatePower();
}
return true;
}
return false;
}; };
return Ship; return Ship;

View File

@@ -10,16 +10,17 @@ angular.module('shipyard', ['ngLodash'])
// Create 'angularized' references to DB. This will aid testing // Create 'angularized' references to DB. This will aid testing
.constant('ShipsDB', DB.ships) .constant('ShipsDB', DB.ships)
.constant('ComponentsDB', DB.components) .constant('ComponentsDB', DB.components)
.value('ArmourMultiplier', [ .constant('ArmourMultiplier', [
1, // Lightweight 1, // Lightweight
1.4, // Reinforced 1.4, // Reinforced
1.945, // Military 1.945, // Military
1.945, // Mirrored 1.945, // Mirrored
1.945 // Reactive 1.945 // Reactive
]) ])
.constant('SizeMap', ['', 'small', 'medium', 'large', 'capital'])
// Map to lookup group labels/names for component grp, used for JSON Serialization // Map to lookup group labels/names for component grp, used for JSON Serialization
.value('GroupMap', { .constant('GroupMap', {
// Common // Standard
pp: 'Power Plant', pp: 'Power Plant',
t: 'Thrusters', t: 'Thrusters',
fsd: 'Frame Shift Drive', fsd: 'Frame Shift Drive',
@@ -40,6 +41,7 @@ angular.module('shipyard', ['ngLodash'])
scb: 'Shield Cell Bank', scb: 'Shield Cell Bank',
sg: 'Shield Generator', sg: 'Shield Generator',
psg: 'Prismatic Shield Generator', psg: 'Prismatic Shield Generator',
bsg: 'Bi-Weave Shield Generator',
dc: 'Docking Computer', dc: 'Docking Computer',
fx: 'Fuel Transfer Limpet Controller', fx: 'Fuel Transfer Limpet Controller',
pc: 'Prospector Limpet Controller', pc: 'Prospector Limpet Controller',
@@ -64,7 +66,7 @@ angular.module('shipyard', ['ngLodash'])
sb: 'Shield Booster', sb: 'Shield Booster',
tp: 'Torpedo Pylon' tp: 'Torpedo Pylon'
}) })
.value('MountMap', { .constant('MountMap', {
'F': 'Fixed', 'F': 'Fixed',
'G': 'Gimballed', 'G': 'Gimballed',
'T': 'Turret', 'T': 'Turret',
@@ -78,7 +80,7 @@ angular.module('shipyard', ['ngLodash'])
* *
* @type {Array} * @type {Array}
*/ */
.value('ShipFacets', [ .constant('ShipFacets', [
{ // 0 { // 0
title: 'agility', title: 'agility',
props: ['agility'], props: ['agility'],
@@ -87,7 +89,7 @@ angular.module('shipyard', ['ngLodash'])
}, },
{ // 1 { // 1
title: 'speed', title: 'speed',
props: ['topSpeed', 'boost'], props: ['topSpeed', 'topBoost'],
lbls: ['thrusters', 'boost'], lbls: ['thrusters', 'boost'],
unit: 'm/s', unit: 'm/s',
fmt: 'fCrd' fmt: 'fCrd'
@@ -161,7 +163,7 @@ angular.module('shipyard', ['ngLodash'])
/** /**
* Set of all available / theoretical discounts * Set of all available / theoretical discounts
*/ */
.value('Discounts', { .constant('Discounts', {
'0%': 1, '0%': 1,
'5%': 0.95, '5%': 0.95,
'10%': 0.90, '10%': 0.90,

View File

@@ -10,8 +10,8 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
return { name: 'Cargo Hatch', class: 1, rating: 'H', power: 0.6 }; return { name: 'Cargo Hatch', class: 1, rating: 'H', power: 0.6 };
}; };
this.common = function(typeIndex, componentId) { this.standard = function(typeIndex, componentId) {
return C.common[typeIndex][componentId]; return C.standard[typeIndex][componentId];
}; };
this.hardpoints = function(id) { this.hardpoints = function(id) {
@@ -38,61 +38,117 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
return null; return null;
}; };
this.findInternalId = function(groupName, clss, rating, name) { /**
* Finds an internal Component based on Class, Rating, Group and/or name.
* At least one ofGroup name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Advanced Discover Scanner'
* @return {String} The id of the component if found, null if not found
*/
this.findInternal = function(groupName, clss, rating, name) {
var groups = {}; var groups = {};
if (groupName) { if (groupName) {
if (C.internal[groupName]) {
groups[groupName] = C.internal[groupName];
} else {
var grpCode = GrpNameToCodeMap[groupName]; var grpCode = GrpNameToCodeMap[groupName];
if (grpCode && !C.internal[grpCode]) { if (grpCode && C.internal[grpCode]) {
throw 'Invalid internal group: ' + groupName;
}
groups[grpCode] = C.internal[grpCode]; groups[grpCode] = C.internal[grpCode];
}
}
} else if (name) { } else if (name) {
groups = C.internal; groups = C.internal;
} else {
throw 'Invalid group or name not provided';
} }
for (var g in groups) { for (var g in groups) {
var group = groups[g]; var group = groups[g];
for (var i = 0, l = group.length; i < l; i++) { for (var i = 0, l = group.length; i < l; i++) {
if (group[i].class == clss && group[i].rating == rating && ((!name && !group[i].name) || group[i].name == name)) { if (group[i].class == clss && group[i].rating == rating && ((!name && !group[i].name) || group[i].name == name)) {
return group[i].id; return group[i];
} }
} }
} }
return 0; return null;
}; };
this.findHardpointId = function(groupName, clss, rating, name, mode, missile) { /**
* Finds an internal Component ID based on Class, Rating, Group and/or name.
* At least one ofGroup name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Advanced Discover Scanner'
* @return {String} The id of the component if found, null if not found
*/
this.findInternalId = function(groupName, clss, rating, name) {
var i = this.findInternal(groupName, clss, rating, name);
return i ? i.id : 0;
};
/**
* Finds a hardpoint Component based on Class, Rating, Group and/or name.
* At least one ofGroup name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating [Optional] Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Heat Sink Launcher'
* @param {string} mode Mount mode/type - [F]ixed, [G]imballed, [T]urret
* @param {string} missile [Optional] Missile type - [D]umbfire, [S]eeker
* @return {String} The id of the component if found, null if not found
*/
this.findHardpoint = function(groupName, clss, rating, name, mode, missile) {
var groups = {}; var groups = {};
if (groupName) { if (groupName) {
if (C.hardpoints[groupName]) {
groups[groupName] = C.hardpoints[groupName];
} else {
var grpCode = GrpNameToCodeMap[groupName]; var grpCode = GrpNameToCodeMap[groupName];
if (grpCode && !C.hardpoints[grpCode]) { if (grpCode && C.hardpoints[grpCode]) {
throw 'Invalid internal group: ' + groupName;
}
groups[grpCode] = C.hardpoints[grpCode]; groups[grpCode] = C.hardpoints[grpCode];
}
}
} else if (name) { } else if (name) {
groups = C.hardpoints; groups = C.hardpoints;
} else {
throw 'Invalid group or name not provided';
} }
for (var g in groups) { for (var g in groups) {
var group = groups[g]; var group = groups[g];
for (var i = 0, l = group.length; i < l; i++) { for (var i = 0, l = group.length; i < l; i++) {
if (group[i].class == clss && group[i].rating == rating && group[i].mode == mode if (group[i].class == clss && (!rating || group[i].rating == rating) && group[i].mode == mode
&& ((!name && !group[i].name) || group[i].name == name) && ((!name && !group[i].name) || group[i].name == name)
&& ((!missile && !group[i].missile) || group[i].missile == missile) && ((!missile && !group[i].missile) || group[i].missile == missile)
) { ) {
return group[i].id; return group[i];
} }
} }
} }
return 0; return null;
};
/**
* Finds a hardpoint Component ID based on Class, Rating, Group and/or name.
* At least one of Group name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Heat Sink Launcher'
* @param {string} mode Mount mode/type - [F]ixed, [G]imballed, [T]urret
* @param {string} missile [Optional] Missile type - [D]umbfire, [S]eeker
* @return {String} The id of the component if found, null if not found
*/
this.findHardpointId = function(groupName, clss, rating, name, mode, missile) {
var h = this.findHardpoint(groupName, clss, rating, name, mode, missile);
return h ? h.id : 0;
}; };
/** /**
@@ -119,7 +175,7 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
this.forShip = function(shipId) { this.forShip = function(shipId) {
var ship = Ships[shipId]; var ship = Ships[shipId];
var maxInternal = isNaN(ship.slots.internal[0]) ? ship.slots.internal[0].class : ship.slots.internal[0]; var maxInternal = isNaN(ship.slots.internal[0]) ? ship.slots.internal[0].class : ship.slots.internal[0];
return new ComponentSet(C, ship.minMassFilter || ship.properties.hullMass + 5, ship.slots.common, maxInternal, ship.slots.hardpoints[0]); return new ComponentSet(C, ship.minMassFilter || ship.properties.hullMass + 5, ship.slots.standard, maxInternal, ship.slots.hardpoints[0]);
}; };
}]); }]);

View File

@@ -1,16 +1,16 @@
@keyframes hideshow { @keyframes outer {
0% { opacity: 0; } 0% { opacity: 0.3; }
10% { opacity: 1; } 20% { opacity: 1; }
100% { opacity: 0; } 100% { opacity: 0.3; }
} }
@keyframes inner { @keyframes inner {
0% { opacity: 0; } 0% { opacity: 0.4; }
10% { opacity: 1; } 20% { opacity: 1; }
100% { opacity: 0; } 100% { opacity: 0.4; }
} }
@animationTime: 750ms; @animationTime: 1000ms;
@outerTriangles: 19; @outerTriangles: 19;
@animationDelay: @animationTime / @outerTriangles; @animationDelay: @animationTime / @outerTriangles;
@@ -23,11 +23,12 @@
} }
} }
.l1 { animation: hideshow @animationTime linear infinite; } .l1 { animation: outer @animationTime linear infinite; }
.l2 { animation: inner @animationTime linear infinite; } .l2 { animation: inner @animationTime linear infinite; }
.mixin-loop (@i) when (@i > 0) { .mixin-loop (@i) when (@i > 0) {
.d@{i} { .d@{i} {
opacity: @i / @outerTriangles;
animation-delay: @i * @animationDelay; animation-delay: @i * @animationDelay;
} }
.mixin-loop(@i - 1); .mixin-loop(@i - 1);

View File

@@ -51,6 +51,32 @@
transform: scaleX(-1); /* standard */ transform: scaleX(-1); /* standard */
} }
.section-menu {
position: relative;
z-index: 0;
&.selected {
z-index: 1;
h1 {
background-color: @primary;
}
}
h1 {
cursor: pointer;
.icon {
float: right;
margin: 0.1em 0.3em 0 0;
}
}
.select {
box-sizing: border-box;
left: 0;
}
}
#build { #build {
float: right; float: right;
line-height: 2em; line-height: 2em;
@@ -209,6 +235,19 @@ table.total {
stroke-width: 1px; stroke-width: 1px;
stroke: #000; stroke: #000;
} }
}
svg g {
.threshold {
stroke: @secondary-disabled !important;
fill: @secondary-disabled !important;
&.exceeded {
stroke: @warning !important;
fill: @warning !important;
}
}
} }
#componentPriority { #componentPriority {

View File

@@ -87,7 +87,7 @@ select {
.lc, .c { .lc, .c {
border:1px solid @primary-disabled; border:1px solid @primary-disabled;
padding: 0.1em 0.2em; padding: 0.1em 0.25em;
margin: 0.3em; margin: 0.3em;
&.warning { &.warning {

View File

@@ -22,8 +22,8 @@
<div class="dbl" > <div class="dbl" >
<div><ul ng-repeat="shipId in buildsList"> <div><ul ng-repeat="shipId in buildsList">
{{ships[shipId].properties.name}} {{ships[shipId].properties.name}}
<li ng-repeat="(name, build) in allBuilds[shipId]"> <li ng-repeat="(i, name) in cleanedBuildList(shipId)">
<a ui-sref-active="active" class="name" ui-sref="outfit({shipId:shipId, code:build, bn:name})" ng-bind="name"></a> <a ui-sref-active="active" class="name" ui-sref="outfit({shipId:shipId, code:allBuilds[shipId][name], bn:name})" ng-bind="name"></a>
</li> </li>
</ul></div> </ul></div>
</div> </div>
@@ -36,7 +36,7 @@
</div> </div>
<div class="menu-list" ng-if="openedMenu=='comp'" ng-click="$event.stopPropagation();" style="white-space: nowrap;"> <div class="menu-list" ng-if="openedMenu=='comp'" ng-click="$event.stopPropagation();" style="white-space: nowrap;">
<span class="cap" ng-if="!bs.hasComparisons" translate="none created"></span> <span class="cap" ng-if="!bs.hasComparisons" translate="none created"></span>
<a ng-repeat="(name, comp) in allComparisons" ui-sref-active="active" class="block name" ui-sref="compare({name:name})" ng-bind="name"></a> <a ng-repeat="(i, name) in allComparisons" ui-sref-active="active" class="block name" ui-sref="compare({name:name})" ng-bind="name"></a>
<hr /> <hr />
<a ui-sref="compare({name: 'all'})" class="block cap" translate="compare all"></a> <a ui-sref="compare({name: 'all'})" class="block cap" translate="compare all"></a>
<a ui-sref="compare({name: null})" class="block cap" translate="create new"></a> <a ui-sref="compare({name: null})" class="block cap" translate="create new"></a>

View File

@@ -12,6 +12,6 @@
<div class="l" ng-if="hp.c.armourpen">{{'pen' | translate}}: {{hp.c.armourpen}}</div> <div class="l" ng-if="hp.c.armourpen">{{'pen' | translate}}: {{hp.c.armourpen}}</div>
<div class="l" ng-if="hp.c.shieldmul">+{{$r.fRPct(hp.c.shieldmul)}}</div> <div class="l" ng-if="hp.c.shieldmul">+{{$r.fRPct(hp.c.shieldmul)}}</div>
<div class="l" ng-if="hp.c.range">{{hp.c.range}} <u>km</u></div> <div class="l" ng-if="hp.c.range">{{hp.c.range}} <u>km</u></div>
<div class="l" ng-if="hp.c.ammo">{{'ammo' | translate}}: {{$r.fCrd(hp.c.clip)}}/{{$r.fCrd(hp.c.ammo)}}</div> <div class="l" ng-if="hp.c.ammo >= 0">{{'ammo' | translate}}: {{$r.fCrd(hp.c.clip)}}+{{$r.fCrd(hp.c.ammo)}}</div>
</div> </div>
</div> </div>

View File

@@ -7,8 +7,8 @@
<div class="l" ng-if="c.c.optmass">{{'optimal mass' | translate}}: {{c.c.optmass}} <u translate="T"></u></div> <div class="l" ng-if="c.c.optmass">{{'optimal mass' | translate}}: {{c.c.optmass}} <u translate="T"></u></div>
<div class="l" ng-if="c.c.maxmass">{{'max mass' | translate}}: {{c.c.maxmass}} <u translate="T"></u></div> <div class="l" ng-if="c.c.maxmass">{{'max mass' | translate}}: {{c.c.maxmass}} <u translate="T"></u></div>
<div class="l" ng-if="c.c.bins">{{c.c.bins}} <u translate="bins"></u></div> <div class="l" ng-if="c.c.bins">{{c.c.bins}} <u translate="bins"></u></div>
<div class="l" ng-if="c.c.rate">{{'rate' | translate}}: {{c.c.rate}} <u>Kg/s</u>&nbsp;&nbsp;&nbsp;{{'refuel time' | translate}}: {{$r.fTime(fuel * 1000 / c.c.rate)}}</div> <div class="l" ng-if="c.c.rate">{{'rate' | translate}}: {{c.c.rate}} <u>kg/s</u>&nbsp;&nbsp;&nbsp;{{'refuel time' | translate}}: {{$r.fTime(fuel * 1000 / c.c.rate)}}</div>
<div class="l" ng-if="c.c.ammo">{{'ammo' | translate}}: {{c.c.ammo}}</div> <div class="l" ng-if="c.c.ammo">{{'ammo' | translate}}: {{$r.fCrd(c.c.ammo)}}</div>
<div class="l" ng-if="c.c.cells">{{'cells' | translate}}: {{c.c.cells}}</div> <div class="l" ng-if="c.c.cells">{{'cells' | translate}}: {{c.c.cells}}</div>
<div class="l" ng-if="c.c.recharge">{{'recharge' | translate}}: {{c.c.recharge}} <u>MJ</u>&nbsp;&nbsp;&nbsp;{{'total' | translate}}: {{c.c.cells * c.c.recharge}} <u>MJ</u></div> <div class="l" ng-if="c.c.recharge">{{'recharge' | translate}}: {{c.c.recharge}} <u>MJ</u>&nbsp;&nbsp;&nbsp;{{'total' | translate}}: {{c.c.cells * c.c.recharge}} <u>MJ</u></div>
<div class="l" ng-if="c.c.repair">{{'repair' | translate}}: {{c.c.repair}}</div> <div class="l" ng-if="c.c.repair">{{'repair' | translate}}: {{c.c.repair}}</div>

View File

@@ -15,7 +15,7 @@
<div ng-if="path" >Path:<br>{{path}}</div> <div ng-if="path" >Path:<br>{{path}}</div>
<div ng-if="type">Error:<br>{{type}}</div> <div ng-if="type">Error:<br>{{type}}</div>
<div ng-if="errorMessage">Message:<pre>{{errorMessage}}</pre></div> <div ng-if="errorMessage">Message:<pre>{{errorMessage}}</pre></div>
<div ng-if="details">Details:<br><pre>{{details}}<pre></div> <div ng-if="details">Details:<br><pre>{{details}}</pre></div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -13,15 +13,9 @@
<button class="danger" ng-click="deleteBuild()" ng-disabled="!savedCode"> <button class="danger" ng-click="deleteBuild()" ng-disabled="!savedCode">
<svg class="icon lg"><use xlink:href="#bin"></use></svg> <svg class="icon lg"><use xlink:href="#bin"></use></svg>
</button> </button>
<button ui-sref="outfit({shipId: ship.id,code:null, bn: buildName})" ng-disabled="!code"> <button ng-click="resetBuild()" ng-disabled="!code">
<svg class="icon lg"><use xlink:href="#switch"></use></svg><span class="button-lbl" translate="reset"></span> <svg class="icon lg"><use xlink:href="#switch"></use></svg><span class="button-lbl" translate="reset"></span>
</button> </button>
<button ng-click="aRatedBuild()">
<svg class="icon lg"><use xlink:href="#a"></use></svg><span class="button-lbl" translate="A-Rated"></span>
</button>
<button ng-click="optimizeMassBuild()">
<svg class="icon lg"><use xlink:href="#feather"></use></svg><span class="button-lbl" translate="optimize mass"></span>
</button>
<button ng-click="exportBuild($event)" ng-disabled="!buildName"> <button ng-click="exportBuild($event)" ng-disabled="!buildName">
<svg class="icon lg"><use xlink:href="#download"></use></svg><span class="button-lbl" translate="export"></span> <svg class="icon lg"><use xlink:href="#download"></use></svg><span class="button-lbl" translate="export"></span>
</button> </button>
@@ -60,7 +54,7 @@
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="cap" ng-bind="['','small','medium','large','capital'][ship.class] | translate"></td> <td class="cap" ng-bind="SZM[ship.class] | translate"></td>
<td>{{ship.agility}}/10</td> <td>{{ship.agility}}/10</td>
<td> <td>
<span ng-if="th.c.maxmass >= ship.ladenMass">{{fCrd(ship.topSpeed)}} <u translate>m/s</u></span> <span ng-if="th.c.maxmass >= ship.ladenMass">{{fCrd(ship.topSpeed)}} <u translate>m/s</u></span>
@@ -74,12 +68,12 @@
</td> </td>
<td>{{fRound(ship.totalDps)}}</td> <td>{{fRound(ship.totalDps)}}</td>
<td> <td>
{{ship.armour}} {{fCrd(ship.armour)}}
<span ng-if="ship.armourAdded || ship.armourMultiplier > 1"> <span ng-if="ship.armourAdded || ship.armourMultiplier > 1">
(<span ng-if="ship.armourMultiplier > 1">{{fRPct(ship.armourMultiplier)}}</span><span ng-if="ship.armourAdded && ship.armourMultiplier > 1">&nbsp;</span><span ng-if="ship.armourAdded">+ {{ship.armourAdded}}</span>) (<span ng-if="ship.armourMultiplier > 1">{{fRPct(ship.armourMultiplier)}}</span><span ng-if="ship.armourAdded && ship.armourMultiplier > 1">&nbsp;</span><span ng-if="ship.armourAdded">+ {{ship.armourAdded}}</span>)
</span> </span>
</td> </td>
<td>{{fRound(ship.shieldStrength)}} <u translate>MJ</u> <span ng-if="ship.shieldMultiplier > 1 && ship.shieldStrength > 0">({{fRPct(ship.shieldMultiplier)}})</span></td> <td>{{fCrd(ship.shieldStrength)}} <u translate>MJ</u> <span ng-if="ship.shieldMultiplier > 1 && ship.shieldStrength > 0">({{fRPct(ship.shieldMultiplier)}})</span></td>
<td>{{ship.hullMass}} <u translate>T</u></td> <td>{{ship.hullMass}} <u translate>T</u></td>
<td>{{fRound(ship.unladenMass)}} <u translate>T</u></td> <td>{{fRound(ship.unladenMass)}} <u translate>T</u></td>
<td>{{fRound(ship.ladenMass)}} <u translate>T</u></td> <td>{{fRound(ship.ladenMass)}} <u translate>T</u></td>
@@ -98,7 +92,27 @@
</div> </div>
<div id="standard" class="group"> <div id="standard" class="group">
<h1 translate="standard"></h1> <div class="section-menu" ng-class="{selected: selectedSlot=='standard'}" context-menu="optimizeStandard()" ng-click="selectSlot($event, 'standard')">
<h1>
{{'standard' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select" ng-if="selectedSlot=='standard'">
<ul>
<li class="lc" ng-click="optimizeStandard()" translate="Optimize"></li>
<li class="c" ng-click="useStandard('E')">E</li>
<li class="c" ng-click="useStandard('D')">D</li>
<li class="c" ng-click="useStandard('C')">C</li>
<li class="c" ng-click="useStandard('B')">B</li>
<li class="c" ng-click="useStandard('A')">A</li>
</ul>
<div class="select-group cap" translate="builds / roles"></div>
<ul>
<li class="lc" ng-click="optimizeCargo()" translate="Trader"></li>
<li class="lc" ng-click="optimizeExplorer()" translate="Explorer"></li>
</ul>
</div>
</div>
<div class="slot" ng-click="selectSlot($event, ship.bulkheads)" ng-class="{selected: selectedSlot==ship.bulkheads}"> <div class="slot" ng-click="selectSlot($event, ship.bulkheads)" ng-class="{selected: selectedSlot==ship.bulkheads}">
<div class="details"> <div class="details">
<div class="sz"><span>8</span></div> <div class="sz"><span>8</span></div>
@@ -125,7 +139,7 @@
<div class="l cap">{{'efficiency' | translate}}: {{pp.c.eff}}</div> <div class="l cap">{{'efficiency' | translate}}: {{pp.c.eff}}</div>
<div class="l cap">{{'power' | translate}}: {{pp.c.pGen}} <u translate>MW</u></div> <div class="l cap">{{'power' | translate}}: {{pp.c.pGen}} <u translate>MW</u></div>
</div> </div>
<div component-select class="select" s="pp" warning="ppWarning" opts="availCS.common[0]" ng-if="selectedSlot==pp" ng-click="select('c',pp,$event)"></div> <div component-select class="select" s="pp" warning="ppWarning" opts="availCS.standard[0]" ng-if="selectedSlot==pp" ng-click="select('c',pp,$event)"></div>
</div> </div>
<div class="slot" ng-click="selectSlot($event, th)" ng-class="{selected: selectedSlot==th}"> <div class="slot" ng-click="selectSlot($event, th)" ng-class="{selected: selectedSlot==th}">
<div class="details" ng-class="{'warning': th.c.maxmass < ship.ladenMass}"> <div class="details" ng-class="{'warning': th.c.maxmass < ship.ladenMass}">
@@ -136,7 +150,7 @@
<div class="l">{{'optimal mass' | translate}}: {{th.c.optmass}} <u translate>T</u></div> <div class="l">{{'optimal mass' | translate}}: {{th.c.optmass}} <u translate>T</u></div>
<div class="l">{{'max mass' | translate}}: {{th.c.maxmass}} <u translate>T</u></div> <div class="l">{{'max mass' | translate}}: {{th.c.maxmass}} <u translate>T</u></div>
</div> </div>
<div component-select class="select" s="th" mass="ship.ladenMass" opts="availCS.common[1]" ng-if="selectedSlot==th" ng-click="select('c',th,$event)"></div> <div component-select class="select" s="th" mass="ship.ladenMass" opts="availCS.standard[1]" ng-if="selectedSlot==th" ng-click="select('c',th,$event)"></div>
</div> </div>
<div class="slot" ng-click="selectSlot($event, fsd)" ng-class="{selected: selectedSlot==fsd}"> <div class="slot" ng-click="selectSlot($event, fsd)" ng-class="{selected: selectedSlot==fsd}">
<div class="details"> <div class="details">
@@ -147,7 +161,7 @@
<div class="l cap">{{'optimal mass' | translate}}: {{fsd.c.optmass}} <u translate>T</u></div> <div class="l cap">{{'optimal mass' | translate}}: {{fsd.c.optmass}} <u translate>T</u></div>
<div class="l cap">{{'max' | translate}} {{'fuel' | translate}}: {{fsd.c.maxfuel}} <u translate>T</u></div> <div class="l cap">{{'max' | translate}} {{'fuel' | translate}}: {{fsd.c.maxfuel}} <u translate>T</u></div>
</div> </div>
<div component-select class="select" s="fsd" opts="availCS.common[2]" ng-if="selectedSlot==fsd" ng-click="select('c',fsd,$event)"></div> <div component-select class="select" s="fsd" opts="availCS.standard[2]" ng-if="selectedSlot==fsd" ng-click="select('c',fsd,$event)"></div>
</div> </div>
<div class="slot" ng-click="selectSlot($event, ls)" ng-class="{selected: selectedSlot==ls}"> <div class="slot" ng-click="selectSlot($event, ls)" ng-class="{selected: selectedSlot==ls}">
<div class="details"> <div class="details">
@@ -157,7 +171,7 @@
<div class="cb"></div> <div class="cb"></div>
<div class="l cap">{{'time' | translate}}: {{fTime(ls.c.time)}}</div> <div class="l cap">{{'time' | translate}}: {{fTime(ls.c.time)}}</div>
</div> </div>
<div component-select class="select" s="ls" opts="availCS.common[3]" ng-if="selectedSlot==ls" ng-click="select('c',ls,$event)"></div> <div component-select class="select" s="ls" opts="availCS.standard[3]" ng-if="selectedSlot==ls" ng-click="select('c',ls,$event)"></div>
</div> </div>
<div class="slot" ng-click="selectSlot($event, pd)" ng-class="{selected: selectedSlot==pd}"> <div class="slot" ng-click="selectSlot($event, pd)" ng-class="{selected: selectedSlot==pd}">
<div class="details" ng-class="{warning: pd.c.enginecapacity < ship.boostEnergy}"> <div class="details" ng-class="{warning: pd.c.enginecapacity < ship.boostEnergy}">
@@ -169,7 +183,7 @@
<div class="l">{{'SYS' | translate}}: {{pd.c.systemcapacity}} <u translate>MJ</u> / {{pd.c.systemrecharge}} <u translate>MW</u></div> <div class="l">{{'SYS' | translate}}: {{pd.c.systemcapacity}} <u translate>MJ</u> / {{pd.c.systemrecharge}} <u translate>MW</u></div>
<div class="l">{{'ENG' | translate}}: {{pd.c.enginecapacity}} <u translate>MJ</u> / {{pd.c.enginerecharge}} <u translate>MW</u></div> <div class="l">{{'ENG' | translate}}: {{pd.c.enginecapacity}} <u translate>MJ</u> / {{pd.c.enginerecharge}} <u translate>MW</u></div>
</div> </div>
<div component-select class="select" s="pd" warning="pdWarning" opts="availCS.common[4]" ng-if="selectedSlot==pd" ng-click="select('c',pd,$event)"></div> <div component-select class="select" s="pd" warning="pdWarning" opts="availCS.standard[4]" ng-if="selectedSlot==pd" ng-click="select('c',pd,$event)"></div>
</div> </div>
<div class="slot" ng-click="selectSlot($event, ss)" ng-class="{selected: selectedSlot==ss}"> <div class="slot" ng-click="selectSlot($event, ss)" ng-class="{selected: selectedSlot==ss}">
<div class="details"> <div class="details">
@@ -179,7 +193,7 @@
<div class="cb"></div> <div class="cb"></div>
<div class="l cap">{{'range' | translate}}: {{ss.c.range}} <u translate>km</u></div> <div class="l cap">{{'range' | translate}}: {{ss.c.range}} <u translate>km</u></div>
</div> </div>
<div component-select class="select" s="ss" opts="availCS.common[5]" ng-if="selectedSlot==ss" ng-click="select('c',ss,$event)"></div> <div component-select class="select" s="ss" opts="availCS.standard[5]" ng-if="selectedSlot==ss" ng-click="select('c',ss,$event)"></div>
</div> </div>
<div class="slot" ng-click="selectSlot($event, ft)" ng-class="{selected: selectedSlot==ft}"> <div class="slot" ng-click="selectSlot($event, ft)" ng-class="{selected: selectedSlot==ft}">
<div class="details"> <div class="details">
@@ -187,12 +201,25 @@
<div class="l">{{ft.id}} {{'ft' | translate}}</div> <div class="l">{{ft.id}} {{'ft' | translate}}</div>
<div class="r">{{ft.c.capacity}} <u translate>T</u></div> <div class="r">{{ft.c.capacity}} <u translate>T</u></div>
</div> </div>
<div component-select class="select" s="ft" opts="availCS.common[6]" ng-if="selectedSlot==ft" ng-click="select('c',ft,$event)"></div> <div component-select class="select" s="ft" opts="availCS.standard[6]" ng-if="selectedSlot==ft" ng-click="select('c',ft,$event)"></div>
</div> </div>
</div> </div>
<div id="internal" class="group"> <div id="internal" class="group">
<h1 translate="internal compartments"></h1> <div class="section-menu" ng-class="{selected: selectedSlot=='internal'}" context-menu="emptyInternal()" ng-click="selectSlot($event, 'internal')">
<h1>
{{'internal compartments' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select" ng-if="selectedSlot=='internal'">
<ul>
<li class="lc" ng-click="emptyInternal()" translate="empty all"></li>
<li class="lc" ng-click="fillWithCargo()" translate="cargo"></li>
<li class="lc" ng-click="fillWithCells()" translate="scb"></li>
<li class="lc" ng-click="fillWithArmor()" translate="hr"></li>
</ul>
</div>
</div>
<div class="slot" ng-repeat="i in ship.internal" ng-click="selectSlot($event, i)" context-menu="select('i', i, $event, 'empty')" ng-class="{selected: selectedSlot==i}"> <div class="slot" ng-repeat="i in ship.internal" ng-click="selectSlot($event, i)" context-menu="select('i', i, $event, 'empty')" ng-class="{selected: selectedSlot==i}">
<div slot-internal class="details" slot="i" fuel="ship.fuelCapacity"></div> <div slot-internal class="details" slot="i" fuel="ship.fuelCapacity"></div>
<div class="select" ng-if="selectedSlot==i" ng-click="select('i',i,$event)"> <div class="select" ng-if="selectedSlot==i" ng-click="select('i',i,$event)">
@@ -202,7 +229,47 @@
</div> </div>
<div id="hardpoints" class="group"> <div id="hardpoints" class="group">
<h1 translate="hardpoints"></h1> <div class="section-menu" ng-class="{selected: selectedSlot=='hardpoints'}" context-menu="emptyHardpoints()" ng-click="selectSlot($event, 'hardpoints')">
<h1>
{{'hardpoints' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select hardpoint" ng-if="selectedSlot=='hardpoints'">
<ul>
<li class="lc" ng-click="emptyHardpoints()" translate="empty all"></li>
</ul>
<div class="select-group cap" translate="pl"></div>
<ul>
<li class="c" ng-click="useHardpoint('pl','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('pl','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('pl','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="ul"></div>
<ul>
<li class="c" ng-click="useHardpoint('ul','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('ul','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('ul','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="bl"></div>
<ul>
<li class="c" ng-click="useHardpoint('bl','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('bl','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('bl','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="mc"></div>
<ul>
<li class="c" ng-click="useHardpoint('mc','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('mc','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('mc','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="c"></div>
<ul>
<li class="c" ng-click="useHardpoint('c','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('c','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('c','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
</div>
</div>
<div class="slot" ng-repeat="h in ship.hardpoints | filter:{maxClass: '!0'}" ng-click="selectSlot($event, h)" context-menu="select('h', h, $event, 'empty')" ng-class="{selected: selectedSlot==h}"> <div class="slot" ng-repeat="h in ship.hardpoints | filter:{maxClass: '!0'}" ng-click="selectSlot($event, h)" context-menu="select('h', h, $event, 'empty')" ng-class="{selected: selectedSlot==h}">
<div slot-hardpoint class="details" hp="h" size="HPC[h.maxClass]"></div> <div slot-hardpoint class="details" hp="h" size="HPC[h.maxClass]"></div>
<div class="select" ng-class="{hardpoint: h.maxClass > 0}" ng-if="selectedSlot==h" ng-click="select('h',h,$event)"> <div class="select" ng-class="{hardpoint: h.maxClass > 0}" ng-if="selectedSlot==h" ng-click="select('h',h,$event)">
@@ -212,7 +279,25 @@
</div> </div>
<div id="utility" class="group"> <div id="utility" class="group">
<h1 translate="utility mounts"></h1> <div class="section-menu" ng-class="{selected: selectedSlot=='utility'}" context-menu="emptyUtility()" ng-click="selectSlot($event, 'utility')">
<h1>
{{'utility mounts' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select" ng-if="selectedSlot=='utility'">
<ul>
<li class="lc" ng-click="emptyUtility()" translate="empty all"></li>
</ul>
<div class="select-group cap" translate="sb"></div>
<ul>
<li class="c" ng-click="useUtility('sb','E')">E</li>
<li class="c" ng-click="useUtility('sb','D')">D</li>
<li class="c" ng-click="useUtility('sb','C')">C</li>
<li class="c" ng-click="useUtility('sb','B')">B</li>
<li class="c" ng-click="useUtility('sb','A')">A</li>
</ul>
</div>
</div>
<div class="slot" ng-repeat="h in ship.hardpoints | filter:{maxClass: '0'}" ng-click="selectSlot($event, h)" context-menu="select('h', h, $event, 'empty')" ng-class="{selected: selectedSlot==h}"> <div class="slot" ng-repeat="h in ship.hardpoints | filter:{maxClass: '0'}" ng-click="selectSlot($event, h)" context-menu="select('h', h, $event, 'empty')" ng-class="{selected: selectedSlot==h}">
<div slot-hardpoint class="details" hp="h" size="HPC[h.maxClass]"></div> <div slot-hardpoint class="details" hp="h" size="HPC[h.maxClass]"></div>
<div class="select" ng-class="{hardpoint: h.maxClass > 0}" ng-if="selectedSlot==h" ng-click="select('h',h,$event)"> <div class="select" ng-class="{hardpoint: h.maxClass > 0}" ng-if="selectedSlot==h" ng-click="select('h',h,$event)">
@@ -273,8 +358,9 @@
<table class="tabs"> <table class="tabs">
<thead> <thead>
<tr> <tr>
<th style="width:50%" ng-class="{active: costTab == 'retrofit'}" ng-click="updateCostTab('retrofit')" translate="retrofit costs"></th> <th style="width:34%" ng-class="{active: costTab == 'ammo'}" ng-click="updateCostTab('ammo')" translate="reload costs"></th>
<th style="width:50%" ng-class="{active: costTab == 'costs'}" ng-click="updateCostTab('costs')" translate="costs"></th> <th style="width:33%" ng-class="{active: costTab == 'retrofit'}" ng-click="updateCostTab('retrofit')" translate="retrofit costs"></th>
<th style="width:33%" ng-class="{active: costTab == 'costs'}" ng-click="updateCostTab('costs')" translate="costs"></th>
</tr> </tr>
</thead> </thead>
</table> </table>
@@ -319,7 +405,7 @@
<th colspan="2" class="sortable le" ng-click="sortRetrofit('sellName | translate')" translate="sell"></th> <th colspan="2" class="sortable le" ng-click="sortRetrofit('sellName | translate')" translate="sell"></th>
<th colspan="2" class="sortable le" ng-click="sortRetrofit('buyName | translate')" translate="buy"></th> <th colspan="2" class="sortable le" ng-click="sortRetrofit('buyName | translate')" translate="buy"></th>
<th class="sortable le" ng-click="sortRetrofit('netCost')"> <th class="sortable le" ng-click="sortRetrofit('netCost')">
{{'net cost' | translate}} <u class="optional-hide" ng-if="discounts.components < 1">-[{{fRPct(1 - discounts.components)}}]</u> {{'net cost' | translate}} <u class="optional-hide" ng-if="discounts.components < 1">[-{{fRPct(1 - discounts.components)}}]</u>
</th> </th>
</tr> </tr>
</thead> </thead>
@@ -327,12 +413,12 @@
<tr ng-if="!retrofitList || retrofitList.length == 0"> <tr ng-if="!retrofitList || retrofitList.length == 0">
<td colspan="5" style="padding: 3em 0;" translate="PHRASE_NO_RETROCH"></td> <td colspan="5" style="padding: 3em 0;" translate="PHRASE_NO_RETROCH"></td>
</tr> </tr>
<tr class="highlight" ng-repeat="item in retrofitList | orderBy:retroPredicate:retroDesc"> <tr class="highlight" ng-repeat="item in retrofitList | orderBy:retroPredicate:retroDesc" ng-click="toggleRetrofitCost(item.retroItem)" ng-class="{disabled: !item.retroItem.incCost}">
<td style="width:1em;">{{item.sellClassRating}}</td> <td style="width:1em;">{{item.sellClassRating}}</td>
<td class="le shorten cap">{{item.sellName | translate}}</td> <td class="le shorten cap">{{item.sellName | translate}}</td>
<td style="width:1em;">{{item.buyClassRating}}</td> <td style="width:1em;">{{item.buyClassRating}}</td>
<td class="le shorten cap">{{item.buyName | translate}}</td> <td class="le shorten cap">{{item.buyName | translate}}</td>
<td class="ri" ng-class="item.netCost > 0 ? 'warning' : 'secondary-disabled'">{{ fCrd(item.netCost)}} <u translate>CR</u></td> <td class="ri" ng-class="item.retroItem.incCost ? item.netCost > 0 ? 'warning' : 'secondary-disabled' : 'disabled'">{{ fCrd(item.netCost)}} <u translate>CR</u></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -354,6 +440,38 @@
</tr> </tr>
</table> </table>
</div> </div>
<div ng-if="costTab == 'ammo'">
<div class="scroll-x">
<table style="width:100%">
<thead>
<tr class="main">
<th colspan="2" class="sortable le" ng-click="sortAmmo('ammoName | translate')" translate="component"></th>
<th colspan="1" class="sortable le" ng-click="sortAmmo('ammoMax')" translate="quantity"></th>
<th colspan="1" class="sortable le" ng-click="sortAmmo('ammoUnitCost')" translate="unit cost"></th>
<th class="sortable le" ng-click="sortAmmo('ammoTotalCost')">
{{'total cost' | translate}} <u class="optional-hide" ng-if="discounts.ammo < 1">-[{{fRPct(1 - discounts.ammo)}}]</u>
</th>
</tr>
</thead>
<tbody>
<tr class="highlight" ng-repeat="item in ammoList | orderBy:ammoPredicate:ammoDesc">
<td style="width:1em;">{{item.ammoClassRating}}</td>
<td class="le shorten cap">{{item.ammoName | translate}}</td>
<td class="ri">{{fCrd(item.ammoMax)}}</td>
<td class="ri">{{fCrd(item.ammoUnitCost)}} <u translate>CR</u></td>
<td class="ri">{{fCrd(item.ammoTotalCost)}} <u translate>CR</u></td>
</tr>
</tbody>
</table>
</div>
<table class="total">
<tr class="ri">
<td class="lbl" translate="total"></td>
<td>{{fCrd(ammoTotal)}} <u translate>CR</u></td>
</tr>
</table>
</div>
</div> </div>
<div class="group third"> <div class="group third">

View File

@@ -1,9 +1,87 @@
<div id="shipyard"> <div id="shipyard">
<a ui-sref="outfit({shipId:id})" class="ship" ng-repeat="(id,s) in ships">
<h2 ng-bind="s.properties.name"></h2> <div class="scroll-x">
<div class="subtitle"> <table align="center" style="font-size:0.85em;white-space:nowrap">
<small ng-bind="s.properties.manufacturer"></small> <thead>
<tr class="main">
<th rowspan="2" class="sortable le" ng-click="sortShips('name')" translate="ship"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('manufacturer')" translate="manufacturer"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('class')" translate="size"></th>
<th colspan="4" translate="base"></th>
<th colspan="4" translate="max"></th>
<th colspan="5" class="sortable" ng-click="sortShips('hpCount')" translate="hardpoints"></th>
<th colspan="8" class="sortable" ng-click="sortShips('intCount')" translate="internal compartments"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('hullMass')" translate="hull"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('masslock')" translate="MLF"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('retailCost')" translate="cost"></th>
</tr>
<tr>
<!-- Base -->
<th class="sortable lft" ng-click="sortShips('speed')" translate="speed"></th>
<th class="sortable" ng-click="sortShips('boost')" translate="boost"></th>
<th class="sortable" ng-click="sortShips('baseArmour')" translate="armour"></th>
<th class="sortable" ng-click="sortShips('baseShieldStrength')" translate="shields"></th>
<!-- Max -->
<th class="sortable lft" ng-click="sortShips('topSpeed')" translate="speed"></th>
<th class="sortable " ng-click="sortShips('topBoost')" translate="boost"></th>
<th class="sortable " ng-click="sortShips('maxJumpRange')" translate="jump"></th>
<th class="sortable" ng-click="sortShips('maxCargo')" translate="cargo"></th>
<!-- Hardpoints -->
<th class="sortable lft" ng-click="sortShips('hp[1]')" translate="S"></th>
<th class="sortable" ng-click="sortShips('hp[2]')" translate="M"></th>
<th class="sortable" ng-click="sortShips('hp[3]')" translate="L"></th>
<th class="sortable" ng-click="sortShips('hp[4]')" translate="H"></th>
<th class="sortable" ng-click="sortShips('hp[0]')" translate="U"></th>
<!-- Internal -->
<th class="sortable lft" ng-click="sortShips('int[0]')" translate="1"></th>
<th class="sortable" ng-click="sortShips('int[1]')" translate="2"></th>
<th class="sortable" ng-click="sortShips('int[2]')" translate="3"></th>
<th class="sortable" ng-click="sortShips('int[3]')" translate="4"></th>
<th class="sortable" ng-click="sortShips('int[4]')" translate="5"></th>
<th class="sortable" ng-click="sortShips('int[5]')" translate="6"></th>
<th class="sortable" ng-click="sortShips('int[6]')" translate="7"></th>
<th class="sortable" ng-click="sortShips('int[7]')" translate="8"></th>
</tr>
</thead>
<tbody>
<tr class="highlight" ng-repeat="s in shipsOverview | orderBy:shipPredicate:shipDesc">
<td class="le"><a ui-sref="outfit({shipId: s.id})" ng-bind="s.name"></a></td>
<td class="le" ng-bind="s.manufacturer"></td>
<!-- Pad Size -->
<td class="cap" ng-bind="SZM[s.class] | translate"></td>
<!-- Base -->
<td class="ri">{{fCrd(s.speed)}} <u translate>m/s</u></td>
<td class="ri">{{fCrd(s.boost)}} <u translate>m/s</u></td>
<td class="ri" ng-bind="s.baseArmour"></td>
<td class="ri">{{fCrd(s.baseShieldStrength)}} <u translate>Mj</u></td>
<!-- Max -->
<td class="ri">{{fCrd(s.topSpeed)}} <u translate>m/s</u></td>
<td class="ri">{{fCrd(s.topBoost)}} <u translate>m/s</u></td>
<td class="ri">{{fRound(s.maxJumpRange)}} <u translate>LY</u></td>
<td class="ri">{{fCrd(s.maxCargo)}} <u translate>T</u></td>
<!-- Hardpoints -->
<td ng-bind="s.hp[1]" ng-class="{disabled: !s.hp[1]}"></td>
<td ng-bind="s.hp[2]" ng-class="{disabled: !s.hp[2]}"></td>
<td ng-bind="s.hp[3]" ng-class="{disabled: !s.hp[3]}"></td>
<td ng-bind="s.hp[4]" ng-class="{disabled: !s.hp[4]}"></td>
<td ng-bind="s.hp[0]" ng-class="{disabled: !s.hp[0]}"></td>
<!-- Internal -->
<td ng-bind="s.int[0]" ng-class="{disabled: !s.int[0]}"></td>
<td ng-bind="s.int[1]" ng-class="{disabled: !s.int[1]}"></td>
<td ng-bind="s.int[2]" ng-class="{disabled: !s.int[2]}"></td>
<td ng-bind="s.int[3]" ng-class="{disabled: !s.int[3]}"></td>
<td ng-bind="s.int[4]" ng-class="{disabled: !s.int[4]}"></td>
<td ng-bind="s.int[5]" ng-class="{disabled: !s.int[5]}"></td>
<td ng-bind="s.int[6]" ng-class="{disabled: !s.int[6]}"></td>
<td ng-bind="s.int[7]" ng-class="{disabled: !s.int[7]}"></td>
<!-- Other Stats -->
<td class="ri">{{fCrd(s.hullMass)}} <u translate>T</u></td>
<td class="ri" ng-bind="s.masslock"></td>
<td class="ri">{{fCrd(s.retailCost)}} <u translate>CR</u></td>
</tr>
</tbody>
</table>
</div> </div>
{{fCrd(s.retailCost)}} <u>CR</u>
</a>
</div> </div>

1
data Submodule

Submodule data added at a3afc00fa3

View File

@@ -1,853 +0,0 @@
{
"sidewinder": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 25600,
"mass": 2
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 80320,
"mass": 4
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 132064,
"mass": 4
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 139424,
"mass": 4
}
],
"diamondback": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 225700,
"mass": 13
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 507900,
"mass": 26
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 1185100,
"mass": 26
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 1330100,
"mass": 26
}
],
"diamondback_explorer": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 800000,
"mass": 23
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 1800000,
"mass": 47
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 4200000,
"mass": 26
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 4714000,
"mass": 47
}
],
"imperial_courier": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 1017200,
"mass": 4
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 2288600,
"mass": 8
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 5408800,
"mass": 8
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 5993700,
"mass": 8
}
],
"cobra_mk_iii": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 151887,
"mass": 14
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 341746,
"mass": 27
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 797407,
"mass": 27
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 894995,
"mass": 27
}
],
"imperial_clipper": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 8918344,
"mass": 30
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 20066274,
"mass": 60
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 47423294,
"mass": 60
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 52551342,
"mass": 60
}
],
"imperial_eagle": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 66500,
"mass": 4
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 222765,
"mass": 8
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 346555,
"mass": 8
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 372044,
"mass": 8
}
],
"federal_assault_ship": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 7925682,
"mass": 44
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 17832784,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 42144814,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 46702081,
"mass": 87
}
],
"federal_dropship": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 7925682,
"mass": 44
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 17832784,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 42144814,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 46702081,
"mass": 87
}
],
"federal_gunship": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 14325688,
"mass": 44
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 32232788,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 76176811,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 84414088,
"mass": 87
}
],
"python": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 22791271,
"mass": 26
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 51280361,
"mass": 53
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 121192586,
"mass": 53
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 134297567,
"mass": 53
}
],
"anaconda": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 58787780,
"mass": 30
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 132272505,
"mass": 60
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 312604021,
"mass": 60
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 346406995,
"mass": 60
}
],
"eagle": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 26880,
"mass": 4
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 90048,
"mass": 8
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 140089,
"mass": 8
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 150393,
"mass": 8
}
],
"viper": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 57172,
"mass": 5
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 128637,
"mass": 9
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 304014,
"mass": 9
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 336888,
"mass": 9
}
],
"vulture": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 1970246,
"mass": 17
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 4433054,
"mass": 35
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 10476783,
"mass": 35
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 11609675,
"mass": 35
}
],
"fer_de_lance": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 20626816,
"mass": 19
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 46410336,
"mass": 38
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 109683094,
"mass": 38
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 121543513,
"mass": 38
}
],
"hauler": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 42176,
"mass": 1
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 185047,
"mass": 2
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 270295,
"mass": 2
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 282421,
"mass": 2
}
],
"type_6_transporter": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 418378,
"mass": 12
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 941350,
"mass": 23
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 2224725,
"mass": 23
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 2465292,
"mass": 23
}
],
"type_7_transport": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 6988901,
"mass": 32
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 15725027,
"mass": 63
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 37163481,
"mass": 63
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 41182099,
"mass": 63
}
],
"type_9_heavy": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 30622336,
"mass": 75
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 68900257,
"mass": 150
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 162834275,
"mass": 150
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 180442119,
"mass": 150
}
],
"adder": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 35123,
"mass": 3
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 79027,
"mass": 5
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 186767,
"mass": 5
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 206963,
"mass": 5
}
],
"asp": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 2664461,
"mass": 21
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 5995038,
"mass": 42
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 14168273,
"mass": 42
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 15700338,
"mass": 42
}
],
"orca": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 19415954,
"mass": 21
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 43685898,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 103244339,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 114408513,
"mass": 87
}
]
}

View File

@@ -1,302 +0,0 @@
{
"6E": {
"grp": "fd",
"class": 6,
"rating": "E",
"cost": 199747,
"mass": 40,
"power": 0.4,
"optmass": 960,
"maxfuel": 5.3,
"fuelmul": 0.011,
"fuelpower": 2.6
},
"6D": {
"grp": "fd",
"class": 6,
"rating": "D",
"cost": 599242,
"mass": 16,
"power": 0.45,
"optmass": 1080,
"maxfuel": 5.3,
"fuelmul": 0.01,
"fuelpower": 2.6
},
"6C": {
"grp": "fd",
"class": 6,
"rating": "C",
"cost": 1797726,
"mass": 40,
"power": 0.5,
"optmass": 1200,
"maxfuel": 5.3,
"fuelmul": 0.008,
"fuelpower": 2.6
},
"6B": {
"grp": "fd",
"class": 6,
"rating": "B",
"cost": 5393177,
"mass": 64,
"power": 0.63,
"optmass": 1500,
"maxfuel": 6.6,
"fuelmul": 0.01,
"fuelpower": 2.6
},
"6A": {
"grp": "fd",
"class": 6,
"rating": "A",
"cost": 16179531,
"mass": 40,
"power": 0.75,
"optmass": 1800,
"maxfuel": 8,
"fuelmul": 0.012,
"fuelpower": 2.6
},
"5E": {
"grp": "fd",
"class": 5,
"rating": "E",
"cost": 63013,
"mass": 20,
"power": 0.32,
"optmass": 560,
"maxfuel": 3.3,
"fuelmul": 0.011,
"fuelpower": 2.45
},
"5D": {
"grp": "fd",
"class": 5,
"rating": "D",
"cost": 189036,
"mass": 8,
"power": 0.36,
"optmass": 630,
"maxfuel": 3.3,
"fuelmul": 0.01,
"fuelpower": 2.45
},
"5C": {
"grp": "fd",
"class": 5,
"rating": "C",
"cost": 567106,
"mass": 20,
"power": 0.4,
"optmass": 700,
"maxfuel": 3.3,
"fuelmul": 0.008,
"fuelpower": 2.45
},
"5B": {
"grp": "fd",
"class": 5,
"rating": "B",
"cost": 1701318,
"mass": 32,
"power": 0.5,
"optmass": 875,
"maxfuel": 4.1,
"fuelmul": 0.01,
"fuelpower": 2.45
},
"5A": {
"grp": "fd",
"class": 5,
"rating": "A",
"cost": 5103953,
"mass": 20,
"power": 0.6,
"optmass": 1050,
"maxfuel": 5,
"fuelmul": 0.012,
"fuelpower": 2.45
},
"4E": {
"grp": "fd",
"class": 4,
"rating": "E",
"cost": 19878,
"mass": 10,
"power": 0.24,
"optmass": 280,
"maxfuel": 2,
"fuelmul": 0.011,
"fuelpower": 2.3
},
"4D": {
"grp": "fd",
"class": 4,
"rating": "D",
"cost": 59633,
"mass": 4,
"power": 0.27,
"optmass": 315,
"maxfuel": 2,
"fuelmul": 0.01,
"fuelpower": 2.3
},
"4C": {
"grp": "fd",
"class": 4,
"rating": "C",
"cost": 178898,
"mass": 10,
"power": 0.3,
"optmass": 350,
"maxfuel": 2,
"fuelmul": 0.008,
"fuelpower": 2.3
},
"4B": {
"grp": "fd",
"class": 4,
"rating": "B",
"cost": 536693,
"mass": 16,
"power": 0.38,
"optmass": 438,
"maxfuel": 2.5,
"fuelmul": 0.01,
"fuelpower": 2.3
},
"4A": {
"grp": "fd",
"class": 4,
"rating": "A",
"cost": 1610080,
"mass": 10,
"power": 0.45,
"optmass": 525,
"maxfuel": 3,
"fuelmul": 0.012,
"fuelpower": 2.3
},
"3E": {
"grp": "fd",
"class": 3,
"rating": "E",
"cost": 6271,
"mass": 5,
"power": 0.24,
"optmass": 80,
"maxfuel": 1.2,
"fuelmul": 0.011,
"fuelpower": 2.15
},
"3D": {
"grp": "fd",
"class": 3,
"rating": "D",
"cost": 18812,
"mass": 2,
"power": 0.27,
"optmass": 90,
"maxfuel": 1.2,
"fuelmul": 0.01,
"fuelpower": 2.15
},
"3C": {
"grp": "fd",
"class": 3,
"rating": "C",
"cost": 56435,
"mass": 5,
"power": 0.3,
"optmass": 100,
"maxfuel": 1.2,
"fuelmul": 0.008,
"fuelpower": 2.15
},
"3B": {
"grp": "fd",
"class": 3,
"rating": "B",
"cost": 169304,
"mass": 8,
"power": 0.38,
"optmass": 125,
"maxfuel": 1.5,
"fuelmul": 0.01,
"fuelpower": 2.15
},
"3A": {
"grp": "fd",
"class": 3,
"rating": "A",
"cost": 507912,
"mass": 5,
"power": 0.45,
"optmass": 150,
"maxfuel": 1.8,
"fuelmul": 0.012,
"fuelpower": 2.15
},
"2E": {
"grp": "fd",
"class": 2,
"rating": "E",
"cost": 1978,
"mass": 2.5,
"power": 0.16,
"optmass": 48,
"maxfuel": 0.6,
"fuelmul": 0.011,
"fuelpower": 2
},
"2D": {
"grp": "fd",
"class": 2,
"rating": "D",
"cost": 5934,
"mass": 1,
"power": 0.18,
"optmass": 54,
"maxfuel": 0.6,
"fuelmul": 0.01,
"fuelpower": 2
},
"2C": {
"grp": "fd",
"class": 2,
"rating": "C",
"cost": 17803,
"mass": 2.5,
"power": 0.2,
"optmass": 60,
"maxfuel": 0.6,
"fuelmul": 0.008,
"fuelpower": 2
},
"2B": {
"grp": "fd",
"class": 2,
"rating": "B",
"cost": 53408,
"mass": 4,
"power": 0.25,
"optmass": 75,
"maxfuel": 0.8,
"fuelmul": 0.01,
"fuelpower": 2
},
"2A": {
"grp": "fd",
"class": 2,
"rating": "A",
"cost": 160224,
"mass": 2.5,
"power": 0.3,
"optmass": 90,
"maxfuel": 0.9,
"fuelmul": 0.012,
"fuelpower": 2
}
}

View File

@@ -1,44 +0,0 @@
{
"1C": {
"grp": "ft",
"class": 1,
"rating": "C",
"cost": 1000,
"capacity": 2
},
"2C": {
"grp": "ft",
"class": 2,
"rating": "C",
"cost": 3750,
"capacity": 4
},
"3C": {
"grp": "ft",
"class": 3,
"rating": "C",
"cost": 7063,
"capacity": 8
},
"4C": {
"grp": "ft",
"class": 4,
"rating": "C",
"cost": 24734,
"capacity": 16
},
"5C": {
"grp": "ft",
"class": 5,
"rating": "C",
"cost": 97754,
"capacity": 32
},
"6C": {
"grp": "ft",
"class": 6,
"rating": "C",
"cost": 341577,
"capacity": 64
}
}

View File

@@ -1,272 +0,0 @@
{
"6E": {
"grp": "ls",
"class": 6,
"rating": "E",
"cost": 88978,
"mass": 40,
"power": 0.64,
"time": 300
},
"6D": {
"grp": "ls",
"class": 6,
"rating": "D",
"cost": 222444,
"mass": 16,
"power": 0.72,
"time": 450
},
"6C": {
"grp": "ls",
"class": 6,
"rating": "C",
"cost": 556110,
"mass": 40,
"power": 0.8,
"time": 600
},
"6B": {
"grp": "ls",
"class": 6,
"rating": "B",
"cost": 1390275,
"mass": 64,
"power": 0.88,
"time": 900
},
"6A": {
"grp": "ls",
"class": 6,
"rating": "A",
"cost": 3475688,
"mass": 40,
"power": 0.96,
"time": 1500
},
"5E": {
"grp": "ls",
"class": 5,
"rating": "E",
"cost": 31778,
"mass": 20,
"power": 0.57,
"time": 300
},
"5D": {
"grp": "ls",
"class": 5,
"rating": "D",
"cost": 79444,
"mass": 8,
"power": 0.64,
"time": 450
},
"5C": {
"grp": "ls",
"class": 5,
"rating": "C",
"cost": 198611,
"mass": 20,
"power": 0.71,
"time": 600
},
"5B": {
"grp": "ls",
"class": 5,
"rating": "B",
"cost": 496527,
"mass": 32,
"power": 0.78,
"time": 900
},
"5A": {
"grp": "ls",
"class": 5,
"rating": "A",
"cost": 1241317,
"mass": 20,
"power": 0.85,
"time": 1500
},
"4E": {
"grp": "ls",
"class": 4,
"rating": "E",
"cost": 11349,
"mass": 10,
"power": 0.5,
"time": 300
},
"4D": {
"grp": "ls",
"class": 4,
"rating": "D",
"cost": 28373,
"mass": 4,
"power": 0.56,
"time": 450
},
"4C": {
"grp": "ls",
"class": 4,
"rating": "C",
"cost": 70932,
"mass": 10,
"power": 0.62,
"time": 600
},
"4B": {
"grp": "ls",
"class": 4,
"rating": "B",
"cost": 177331,
"mass": 16,
"power": 0.68,
"time": 900
},
"4A": {
"grp": "ls",
"class": 4,
"rating": "A",
"cost": 443328,
"mass": 10,
"power": 0.74,
"time": 1500
},
"3E": {
"grp": "ls",
"class": 3,
"rating": "E",
"cost": 4053,
"mass": 5,
"power": 0.42,
"time": 300
},
"3D": {
"grp": "ls",
"class": 3,
"rating": "D",
"cost": 10133,
"mass": 2,
"power": 0.48,
"time": 450
},
"3C": {
"grp": "ls",
"class": 3,
"rating": "C",
"cost": 25333,
"mass": 5,
"power": 0.53,
"time": 600
},
"3B": {
"grp": "ls",
"class": 3,
"rating": "B",
"cost": 63333,
"mass": 8,
"power": 0.58,
"time": 900
},
"3A": {
"grp": "ls",
"class": 3,
"rating": "A",
"cost": 158331,
"mass": 5,
"power": 0.64,
"time": 1500
},
"2E": {
"grp": "ls",
"class": 2,
"rating": "E",
"cost": 1448,
"mass": 2.5,
"power": 0.37,
"time": 300
},
"2D": {
"grp": "ls",
"class": 2,
"rating": "D",
"cost": 3619,
"mass": 1,
"power": 0.41,
"time": 450
},
"2C": {
"grp": "ls",
"class": 2,
"rating": "C",
"cost": 9048,
"mass": 2.5,
"power": 0.46,
"time": 600
},
"2B": {
"grp": "ls",
"class": 2,
"rating": "B",
"cost": 22619,
"mass": 4,
"power": 0.51,
"time": 900
},
"2A": {
"grp": "ls",
"class": 2,
"rating": "A",
"cost": 56547,
"mass": 2.5,
"power": 0.55,
"time": 1500
},
"1E": {
"grp": "ls",
"class": 1,
"rating": "E",
"cost": 517,
"mass": 1.3,
"power": 0.32,
"time": 300
},
"1D": {
"grp": "ls",
"class": 1,
"rating": "D",
"cost": 1293,
"mass": 0.5,
"power": 0.36,
"time": 450
},
"1C": {
"grp": "ls",
"class": 1,
"rating": "C",
"cost": 3231,
"mass": 1.3,
"power": 0.4,
"time": 600
},
"1B": {
"grp": "ls",
"class": 1,
"rating": "B",
"cost": 8078,
"mass": 2,
"power": 0.44,
"time": 900
},
"1A": {
"grp": "ls",
"class": 1,
"rating": "A",
"cost": 20195,
"mass": 1.3,
"power": 0.48,
"time": 1500
}
}

View File

@@ -1,42 +0,0 @@
{
"8E": { "grp": "pd", "class": 8, "rating": "E", "cost": 697584, "mass": 160, "power": 0.64, "weaponcapacity": 48, "weaponrecharge": 4.8, "enginecapacity": 32, "enginerecharge": 3.2, "systemcapacity": 32, "systemrecharge": 3.2 },
"8D": { "grp": "pd", "class": 8, "rating": "D", "cost": 1743961, "mass": 64, "power": 0.72, "weaponcapacity": 54, "weaponrecharge": 5.4, "enginecapacity": 36, "enginerecharge": 3.6, "systemcapacity": 36, "systemrecharge": 3.6 },
"8C": { "grp": "pd", "class": 8, "rating": "C", "cost": 4359903, "mass": 160, "power": 0.8, "weaponcapacity": 60, "weaponrecharge": 6, "enginecapacity": 40, "enginerecharge": 4, "systemcapacity": 40, "systemrecharge": 4 },
"8B": { "grp": "pd", "class": 8, "rating": "B", "cost": 10899756, "mass": 256, "power": 0.88, "weaponcapacity": 66, "weaponrecharge": 6.6, "enginecapacity": 44, "enginerecharge": 4.4, "systemcapacity": 44, "systemrecharge": 4.4 },
"8A": { "grp": "pd", "class": 8, "rating": "A", "cost": 27249391, "mass": 160, "power": 0.96, "weaponcapacity": 72, "weaponrecharge": 7.2, "enginecapacity": 48, "enginerecharge": 4.8, "systemcapacity": 48, "systemrecharge": 4.8 },
"7E": { "grp": "pd", "class": 7, "rating": "E", "cost": 249137, "mass": 80, "power": 0.59, "weaponcapacity": 41, "weaponrecharge": 4.1, "enginecapacity": 27, "enginerecharge": 2.6, "systemcapacity": 27, "systemrecharge": 2.6 },
"7D": { "grp": "pd", "class": 7, "rating": "D", "cost": 622843, "mass": 32, "power": 0.67, "weaponcapacity": 46, "weaponrecharge": 4.6, "enginecapacity": 31, "enginerecharge": 3, "systemcapacity": 31, "systemrecharge": 3 },
"7C": { "grp": "pd", "class": 7, "rating": "C", "cost": 1557108, "mass": 80, "power": 0.74, "weaponcapacity": 51, "weaponrecharge": 5.1, "enginecapacity": 34, "enginerecharge": 3.3, "systemcapacity": 34, "systemrecharge": 3.3 },
"7B": { "grp": "pd", "class": 7, "rating": "B", "cost": 3892770, "mass": 128, "power": 0.81, "weaponcapacity": 56, "weaponrecharge": 5.6, "enginecapacity": 37, "enginerecharge": 3.6, "systemcapacity": 37, "systemrecharge": 3.6 },
"7A": { "grp": "pd", "class": 7, "rating": "A", "cost": 9731925, "mass": 80, "power": 0.89, "weaponcapacity": 61, "weaponrecharge": 6.1, "enginecapacity": 41, "enginerecharge": 4, "systemcapacity": 41, "systemrecharge": 4 },
"6E": { "grp": "pd", "class": 6, "rating": "E", "cost": 88978, "mass": 40, "power": 0.54, "weaponcapacity": 34, "weaponrecharge": 3.4, "enginecapacity": 23, "enginerecharge": 2.2, "systemcapacity": 23, "systemrecharge": 2.2 },
"6D": { "grp": "pd", "class": 6, "rating": "D", "cost": 222444, "mass": 16, "power": 0.61, "weaponcapacity": 38, "weaponrecharge": 3.9, "enginecapacity": 26, "enginerecharge": 2.4, "systemcapacity": 26, "systemrecharge": 2.4 },
"6C": { "grp": "pd", "class": 6, "rating": "C", "cost": 556110, "mass": 40, "power": 0.68, "weaponcapacity": 42, "weaponrecharge": 4.3, "enginecapacity": 29, "enginerecharge": 2.7, "systemcapacity": 29, "systemrecharge": 2.7 },
"6B": { "grp": "pd", "class": 6, "rating": "B", "cost": 1390275, "mass": 64, "power": 0.75, "weaponcapacity": 46, "weaponrecharge": 4.7, "enginecapacity": 32, "enginerecharge": 3, "systemcapacity": 32, "systemrecharge": 3 },
"6A": { "grp": "pd", "class": 6, "rating": "A", "cost": 3475688, "mass": 40, "power": 0.82, "weaponcapacity": 50, "weaponrecharge": 5.2, "enginecapacity": 35, "enginerecharge": 3.2, "systemcapacity": 35, "systemrecharge": 3.2 },
"5E": { "grp": "pd", "class": 5, "rating": "E", "cost": 31778, "mass": 20, "power": 0.5, "weaponcapacity": 27, "weaponrecharge": 2.9, "enginecapacity": 19, "enginerecharge": 1.7, "systemcapacity": 19, "systemrecharge": 1.7 },
"5D": { "grp": "pd", "class": 5, "rating": "D", "cost": 79444, "mass": 8, "power": 0.56, "weaponcapacity": 31, "weaponrecharge": 3.2, "enginecapacity": 22, "enginerecharge": 1.9, "systemcapacity": 22, "systemrecharge": 1.9 },
"5C": { "grp": "pd", "class": 5, "rating": "C", "cost": 198611, "mass": 20, "power": 0.62, "weaponcapacity": 34, "weaponrecharge": 3.6, "enginecapacity": 24, "enginerecharge": 2.1, "systemcapacity": 24, "systemrecharge": 2.1 },
"5B": { "grp": "pd", "class": 5, "rating": "B", "cost": 496527, "mass": 32, "power": 0.68, "weaponcapacity": 37, "weaponrecharge": 4, "enginecapacity": 26, "enginerecharge": 2.3, "systemcapacity": 26, "systemrecharge": 2.3 },
"5A": { "grp": "pd", "class": 5, "rating": "A", "cost": 1241317, "mass": 20, "power": 0.74, "weaponcapacity": 41, "weaponrecharge": 4.3, "enginecapacity": 29, "enginerecharge": 2.5, "systemcapacity": 29, "systemrecharge": 2.5 },
"4E": { "grp": "pd", "class": 4, "rating": "E", "cost": 11349, "mass": 10, "power": 0.45, "weaponcapacity": 22, "weaponrecharge": 2.3, "enginecapacity": 15, "enginerecharge": 1.3, "systemcapacity": 15, "systemrecharge": 1.3 },
"4D": { "grp": "pd", "class": 4, "rating": "D", "cost": 28373, "mass": 4, "power": 0.5, "weaponcapacity": 24, "weaponrecharge": 2.6, "enginecapacity": 17, "enginerecharge": 1.4, "systemcapacity": 17, "systemrecharge": 1.4 },
"4C": { "grp": "pd", "class": 4, "rating": "C", "cost": 70932, "mass": 10, "power": 0.56, "weaponcapacity": 27, "weaponrecharge": 2.9, "enginecapacity": 19, "enginerecharge": 1.6, "systemcapacity": 19, "systemrecharge": 1.6 },
"4B": { "grp": "pd", "class": 4, "rating": "B", "cost": 177331, "mass": 16, "power": 0.62, "weaponcapacity": 30, "weaponrecharge": 3.2, "enginecapacity": 21, "enginerecharge": 1.8, "systemcapacity": 21, "systemrecharge": 1.8 },
"4A": { "grp": "pd", "class": 4, "rating": "A", "cost": 443328, "mass": 10, "power": 0.67, "weaponcapacity": 32, "weaponrecharge": 3.5, "enginecapacity": 23, "enginerecharge": 1.9, "systemcapacity": 23, "systemrecharge": 1.9 },
"3E": { "grp": "pd", "class": 3, "rating": "E", "cost": 4053, "mass": 5, "power": 0.4, "weaponcapacity": 16, "weaponrecharge": 1.8, "enginecapacity": 12, "enginerecharge": 0.9, "systemcapacity": 12, "systemrecharge": 0.9 },
"3D": { "grp": "pd", "class": 3, "rating": "D", "cost": 10133, "mass": 2, "power": 0.45, "weaponcapacity": 18, "weaponrecharge": 2.1, "enginecapacity": 14, "enginerecharge": 1, "systemcapacity": 14, "systemrecharge": 1 },
"3C": { "grp": "pd", "class": 3, "rating": "C", "cost": 25333, "mass": 5, "power": 0.5, "weaponcapacity": 20, "weaponrecharge": 2.3, "enginecapacity": 15, "enginerecharge": 1.1, "systemcapacity": 15, "systemrecharge": 1.1 },
"3B": { "grp": "pd", "class": 3, "rating": "B", "cost": 63333, "mass": 8, "power": 0.55, "weaponcapacity": 22, "weaponrecharge": 2.5, "enginecapacity": 17, "enginerecharge": 1.2, "systemcapacity": 17, "systemrecharge": 1.2 },
"3A": { "grp": "pd", "class": 3, "rating": "A", "cost": 158331, "mass": 5, "power": 0.6, "weaponcapacity": 24, "weaponrecharge": 2.8, "enginecapacity": 18, "enginerecharge": 1.3, "systemcapacity": 18, "systemrecharge": 1.3 },
"2E": { "grp": "pd", "class": 2, "rating": "E", "cost": 1448, "mass": 2.5, "power": 0.36, "weaponcapacity": 12, "weaponrecharge": 1.4, "enginecapacity": 10, "enginerecharge": 0.6, "systemcapacity": 10, "systemrecharge": 0.6 },
"2D": { "grp": "pd", "class": 2, "rating": "D", "cost": 3619, "mass": 1, "power": 0.41, "weaponcapacity": 14, "weaponrecharge": 1.6, "enginecapacity": 11, "enginerecharge": 0.6, "systemcapacity": 11, "systemrecharge": 0.6 },
"2C": { "grp": "pd", "class": 2, "rating": "C", "cost": 9048, "mass": 2.5, "power": 0.45, "weaponcapacity": 15, "weaponrecharge": 1.8, "enginecapacity": 12, "enginerecharge": 0.7, "systemcapacity": 12, "systemrecharge": 0.7 },
"2B": { "grp": "pd", "class": 2, "rating": "B", "cost": 22619, "mass": 4, "power": 0.5, "weaponcapacity": 17, "weaponrecharge": 2, "enginecapacity": 13, "enginerecharge": 0.8, "systemcapacity": 13, "systemrecharge": 0.8 },
"2A": { "grp": "pd", "class": 2, "rating": "A", "cost": 56547, "mass": 2.5, "power": 0.54, "weaponcapacity": 18, "weaponrecharge": 2.2, "enginecapacity": 14, "enginerecharge": 0.8, "systemcapacity": 14, "systemrecharge": 0.8 },
"1E": { "grp": "pd", "class": 1, "rating": "E", "cost": 517, "mass": 1.3, "power": 0.32, "weaponcapacity": 10, "weaponrecharge": 1.2, "enginecapacity": 8, "enginerecharge": 0.4, "systemcapacity": 8, "systemrecharge": 0.4 },
"1D": { "grp": "pd", "class": 1, "rating": "D", "cost": 1293, "mass": 0.5, "power": 0.36, "weaponcapacity": 11, "weaponrecharge": 1.4, "enginecapacity": 9, "enginerecharge": 0.5, "systemcapacity": 9, "systemrecharge": 0.5 },
"1C": { "grp": "pd", "class": 1, "rating": "C", "cost": 3231, "mass": 1.3, "power": 0.4, "weaponcapacity": 12, "weaponrecharge": 1.5, "enginecapacity": 10, "enginerecharge": 0.5, "systemcapacity": 10, "systemrecharge": 0.5 },
"1B": { "grp": "pd", "class": 1, "rating": "B", "cost": 8078, "mass": 2, "power": 0.44, "weaponcapacity": 13, "weaponrecharge": 1.7, "enginecapacity": 11, "enginerecharge": 0.6, "systemcapacity": 11, "systemrecharge": 0.6 },
"1A": { "grp": "pd", "class": 1, "rating": "A", "cost": 20195, "mass": 1.3, "power": 0.48, "weaponcapacity": 14, "weaponrecharge": 1.8, "enginecapacity": 12, "enginerecharge": 0.6, "systemcapacity": 12, "systemrecharge": 0.6 }
}

View File

@@ -1,37 +0,0 @@
{
"8E":{ "grp": "pp", "class": 8, "rating": "E", "cost": 2007241, "mass": 160, "pGen": 24, "eff": "F" },
"8D":{ "grp": "pp", "class": 8, "rating": "D", "cost": 6021722, "mass": 64, "pGen": 27, "eff": "D" },
"8C":{ "grp": "pp", "class": 8, "rating": "C", "cost": 18065165, "mass": 80, "pGen": 30, "eff": "C" },
"8B":{ "grp": "pp", "class": 8, "rating": "B", "cost": 54195495, "mass": 128, "pGen": 33, "eff": "C" },
"8A":{ "grp": "pp", "class": 8, "rating": "A", "cost": 162586486, "mass": 80, "pGen": 36, "eff": "B" },
"7E":{ "grp": "pp", "class": 7, "rating": "E", "cost": 633199, "mass": 80, "pGen": 20, "eff": "F" },
"7D":{ "grp": "pp", "class": 7, "rating": "D", "cost": 1899597, "mass": 32, "pGen": 22.5, "eff": "D" },
"7C":{ "grp": "pp", "class": 7, "rating": "C", "cost": 5698790, "mass": 40, "pGen": 25, "eff": "C" },
"7B":{ "grp": "pp", "class": 7, "rating": "B", "cost": 17096371, "mass": 64, "pGen": 27.5, "eff": "C" },
"7A":{ "grp": "pp", "class": 7, "rating": "A", "cost": 51289112, "mass": 40, "pGen": 30, "eff": "B" },
"6E":{ "grp": "pp", "class": 6, "rating": "E", "cost": 199747, "mass": 40, "pGen": 16.8, "eff": "F" },
"6D":{ "grp": "pp", "class": 6, "rating": "D", "cost": 599242, "mass": 16, "pGen": 18.9, "eff": "D" },
"6C":{ "grp": "pp", "class": 6, "rating": "C", "cost": 1797726, "mass": 20, "pGen": 21, "eff": "C" },
"6B":{ "grp": "pp", "class": 6, "rating": "B", "cost": 5393177, "mass": 32, "pGen": 23.1, "eff": "C" },
"6A":{ "grp": "pp", "class": 6, "rating": "A", "cost": 16179531, "mass": 20, "pGen": 25.2, "eff": "B" },
"5E":{ "grp": "pp", "class": 5, "rating": "E", "cost": 63012, "mass": 20, "pGen": 13.6, "eff": "F" },
"5D":{ "grp": "pp", "class": 5, "rating": "D", "cost": 189035, "mass": 8, "pGen": 15.3, "eff": "D" },
"5C":{ "grp": "pp", "class": 5, "rating": "C", "cost": 567106, "mass": 10, "pGen": 17, "eff": "C" },
"5B":{ "grp": "pp", "class": 5, "rating": "B", "cost": 1701318, "mass": 16, "pGen": 18.7, "eff": "C" },
"5A":{ "grp": "pp", "class": 5, "rating": "A", "cost": 5103953, "mass": 10, "pGen": 20.4, "eff": "B" },
"4E":{ "grp": "pp", "class": 4, "rating": "E", "cost": 19878, "mass": 10, "pGen": 10.4, "eff": "F" },
"4D":{ "grp": "pp", "class": 4, "rating": "D", "cost": 59633, "mass": 4, "pGen": 11.7, "eff": "D" },
"4C":{ "grp": "pp", "class": 4, "rating": "C", "cost": 178898, "mass": 5, "pGen": 13, "eff": "C" },
"4B":{ "grp": "pp", "class": 4, "rating": "B", "cost": 536693, "mass": 8, "pGen": 14.3, "eff": "C" },
"4A":{ "grp": "pp", "class": 4, "rating": "A", "cost": 1610080, "mass": 5, "pGen": 15.6, "eff": "B" },
"3E":{ "grp": "pp", "class": 3, "rating": "E", "cost": 6271, "mass": 5, "pGen": 8, "eff": "F" },
"3D":{ "grp": "pp", "class": 3, "rating": "D", "cost": 18812, "mass": 2, "pGen": 9, "eff": "D" },
"3C":{ "grp": "pp", "class": 3, "rating": "C", "cost": 56435, "mass": 2.5, "pGen": 10, "eff": "C" },
"3B":{ "grp": "pp", "class": 3, "rating": "B", "cost": 169304, "mass": 4, "pGen": 11, "eff": "C" },
"3A":{ "grp": "pp", "class": 3, "rating": "A", "cost": 507912, "mass": 2.5, "pGen": 12, "eff": "B" },
"2E":{ "grp": "pp", "class": 2, "rating": "E", "cost": 1978, "mass": 2.5, "pGen": 6.4, "eff": "F" },
"2D":{ "grp": "pp", "class": 2, "rating": "D", "cost": 5934, "mass": 1, "pGen": 7.2, "eff": "D" },
"2C":{ "grp": "pp", "class": 2, "rating": "C", "cost": 17803, "mass": 1.3, "pGen": 8, "eff": "C" },
"2B":{ "grp": "pp", "class": 2, "rating": "B", "cost": 53408, "mass": 2, "pGen": 8.8, "eff": "C" },
"2A":{ "grp": "pp", "class": 2, "rating": "A", "cost": 160224, "mass": 1.3, "pGen": 9.6, "eff": "B" }
}

View File

@@ -1,43 +0,0 @@
{
"8E": { "grp": "s", "class": 8, "rating": "E", "cost": 697584, "mass": 160, "power": 0.55, "range": 5.12 },
"8D": { "grp": "s", "class": 8, "rating": "D", "cost": 1743961, "mass": 64, "power": 0.62, "range": 5.76 },
"8C": { "grp": "s", "class": 8, "rating": "C", "cost": 4359903, "mass": 160, "power": 0.69, "range": 6.4 },
"8B": { "grp": "s", "class": 8, "rating": "B", "cost": 10899756, "mass": 256, "power": 1.14, "range": 7.04 },
"8A": { "grp": "s", "class": 8, "rating": "A", "cost": 27249391, "mass": 160, "power": 2.07, "range": 7.68 },
"6E": { "grp": "s", "class": 6, "rating": "E", "cost": 88978, "mass": 40, "power": 0.4, "range": 4.8 },
"6D": { "grp": "s", "class": 6, "rating": "D", "cost": 222444, "mass": 16, "power": 0.45, "range": 5.4 },
"6C": { "grp": "s", "class": 6, "rating": "C", "cost": 556110, "mass": 40, "power": 0.5, "range": 6 },
"6B": { "grp": "s", "class": 6, "rating": "B", "cost": 1390275, "mass": 64, "power": 0.83, "range": 6.6 },
"6A": { "grp": "s", "class": 6, "rating": "A", "cost": 3475688, "mass": 40, "power": 1.5, "range": 7.2 },
"5E": { "grp": "s", "class": 5, "rating": "E", "cost": 31778, "mass": 20, "power": 0.33, "range": 4.64 },
"5D": { "grp": "s", "class": 5, "rating": "D", "cost": 79444, "mass": 8, "power": 0.37, "range": 5.22 },
"5C": { "grp": "s", "class": 5, "rating": "C", "cost": 198611, "mass": 20, "power": 0.41, "range": 5.8 },
"5B": { "grp": "s", "class": 5, "rating": "B", "cost": 496527, "mass": 32, "power": 0.68, "range": 6.38 },
"5A": { "grp": "s", "class": 5, "rating": "A", "cost": 1241317, "mass": 20, "power": 1.23, "range": 6.96 },
"4E": { "grp": "s", "class": 4, "rating": "E", "cost": 11349, "mass": 10, "power": 0.27, "range": 4.48 },
"4D": { "grp": "s", "class": 4, "rating": "D", "cost": 28373, "mass": 4, "power": 0.31, "range": 5.04 },
"4C": { "grp": "s", "class": 4, "rating": "C", "cost": 70932, "mass": 10, "power": 0.34, "range": 5.6 },
"4B": { "grp": "s", "class": 4, "rating": "B", "cost": 177331, "mass": 16, "power": 0.56, "range": 6.16 },
"4A": { "grp": "s", "class": 4, "rating": "A", "cost": 443328, "mass": 10, "power": 1.02, "range": 6.72 },
"3E": { "grp": "s", "class": 3, "rating": "E", "cost": 4053, "mass": 5, "power": 0.22, "range": 4.32 },
"3D": { "grp": "s", "class": 3, "rating": "D", "cost": 10133, "mass": 2, "power": 0.25, "range": 4.86 },
"3C": { "grp": "s", "class": 3, "rating": "C", "cost": 25333, "mass": 5, "power": 0.28, "range": 5.4 },
"3B": { "grp": "s", "class": 3, "rating": "B", "cost": 63333, "mass": 8, "power": 0.46, "range": 5.94 },
"3A": { "grp": "s", "class": 3, "rating": "A", "cost": 158331, "mass": 5, "power": 0.84, "range": 6.48 },
"2E": { "grp": "s", "class": 2, "rating": "E", "cost": 1448, "mass": 2.5, "power": 0.18, "range": 4.16 },
"2D": { "grp": "s", "class": 2, "rating": "D", "cost": 3619, "mass": 1, "power": 0.21, "range": 4.68 },
"2C": { "grp": "s", "class": 2, "rating": "C", "cost": 9048, "mass": 2.5, "power": 0.23, "range": 5.2 },
"2B": { "grp": "s", "class": 2, "rating": "B", "cost": 22619, "mass": 4, "power": 0.38, "range": 5.72 },
"2A": { "grp": "s", "class": 2, "rating": "A", "cost": 56547, "mass": 2.5, "power": 0.69, "range": 6.24 },
"1E": { "grp": "s", "class": 1, "rating": "E", "cost": 517, "mass": 1.3, "power": 0.16, "range": 4 },
"1D": { "grp": "s", "class": 1, "rating": "D", "cost": 1293, "mass": 0.5, "power": 0.18, "range": 4.5 },
"1C": { "grp": "s", "class": 1, "rating": "C", "cost": 3231, "mass": 1.3, "power": 0.2, "range": 5 },
"1B": { "grp": "s", "class": 1, "rating": "B", "cost": 8078, "mass": 2, "power": 0.33, "range": 5.5 },
"1A": { "grp": "s", "class": 1, "rating": "A", "cost": 20195, "mass": 1.3, "power": 0.6, "range": 6 }
}

View File

@@ -1,37 +0,0 @@
{
"7E": { "grp": "t", "class": 7, "rating": "E", "M": 0.17, "P": 0.235, "cost": 633199, "mass": 80, "power": 6.08, "optmass": 1440, "maxmass": 2160 },
"7D": { "grp": "t", "class": 7, "rating": "D", "M": 0.14, "P": 0.5145, "cost": 1899597, "mass": 32, "power": 6.84, "optmass": 1620, "maxmass": 2430 },
"7C": { "grp": "t", "class": 7, "rating": "C", "M": 0.10, "P": 1, "cost": 5698790, "mass": 80, "power": 7.6, "optmass": 1800, "maxmass": 2700 },
"7B": { "grp": "t", "class": 7, "rating": "B", "M": 0.07, "P": 1.51, "cost": 17096371, "mass": 128, "power": 8.36, "optmass": 1980, "maxmass": 2970 },
"7A": { "grp": "t", "class": 7, "rating": "A", "M": 0.04, "P": 2.33, "cost": 51289112, "mass": 80, "power": 9.12, "optmass": 2160, "maxmass": 3240 },
"6E": { "grp": "t", "class": 6, "rating": "E", "M": 0.17, "P": 0.235, "cost": 199747, "mass": 40, "power": 5.04, "optmass": 960, "maxmass": 1440 },
"6D": { "grp": "t", "class": 6, "rating": "D", "M": 0.14, "P": 0.5145, "cost": 599242, "mass": 16, "power": 5.67, "optmass": 1080, "maxmass": 1620 },
"6C": { "grp": "t", "class": 6, "rating": "C", "M": 0.10, "P": 1, "cost": 1797726, "mass": 40, "power": 6.3, "optmass": 1200, "maxmass": 1800 },
"6B": { "grp": "t", "class": 6, "rating": "B", "M": 0.07, "P": 1.51, "cost": 5393177, "mass": 64, "power": 6.93, "optmass": 1320, "maxmass": 1980 },
"6A": { "grp": "t", "class": 6, "rating": "A", "M": 0.04, "P": 2.33, "cost": 16179531, "mass": 40, "power": 7.56, "optmass": 1440, "maxmass": 2160 },
"5E": { "grp": "t", "class": 5, "rating": "E", "M": 0.17, "P": 0.235, "cost": 63012, "mass": 20, "power": 4.08, "optmass": 560, "maxmass": 840 },
"5D": { "grp": "t", "class": 5, "rating": "D", "M": 0.14, "P": 0.5145, "cost": 189035, "mass": 8, "power": 4.59, "optmass": 630, "maxmass": 945 },
"5C": { "grp": "t", "class": 5, "rating": "C", "M": 0.10, "P": 1, "cost": 567106, "mass": 20, "power": 5.1, "optmass": 700, "maxmass": 1050 },
"5B": { "grp": "t", "class": 5, "rating": "B", "M": 0.07, "P": 1.51, "cost": 1701318, "mass": 32, "power": 5.61, "optmass": 770, "maxmass": 1155 },
"5A": { "grp": "t", "class": 5, "rating": "A", "M": 0.04, "P": 2.33, "cost": 5103953, "mass": 20, "power": 6.12, "optmass": 840, "maxmass": 1260 },
"4E": { "grp": "t", "class": 4, "rating": "E", "M": 0.17, "P": 0.235, "cost": 19878, "mass": 10, "power": 3.82, "optmass": 280, "maxmass": 420 },
"4D": { "grp": "t", "class": 4, "rating": "D", "M": 0.14, "P": 0.5145, "cost": 59633, "mass": 4, "power": 3.69, "optmass": 315, "maxmass": 473 },
"4C": { "grp": "t", "class": 4, "rating": "C", "M": 0.10, "P": 1, "cost": 178898, "mass": 10, "power": 4.1, "optmass": 350, "maxmass": 525 },
"4B": { "grp": "t", "class": 4, "rating": "B", "M": 0.07, "P": 1.51, "cost": 536693, "mass": 16, "power": 4.51, "optmass": 385, "maxmass": 578 },
"4A": { "grp": "t", "class": 4, "rating": "A", "M": 0.04, "P": 2.33, "cost": 1610080, "mass": 10, "power": 4.92, "optmass": 420, "maxmass": 630 },
"3E": { "grp": "t", "class": 3, "rating": "E", "M": 0.17, "P": 0.235, "cost": 6271, "mass": 5, "power": 2.48, "optmass": 80, "maxmass": 120 },
"3D": { "grp": "t", "class": 3, "rating": "D", "M": 0.14, "P": 0.5145, "cost": 18812, "mass": 2, "power": 2.79, "optmass": 90, "maxmass": 135 },
"3C": { "grp": "t", "class": 3, "rating": "C", "M": 0.10, "P": 1, "cost": 56435, "mass": 5, "power": 3.1, "optmass": 100, "maxmass": 150 },
"3B": { "grp": "t", "class": 3, "rating": "B", "M": 0.07, "P": 1.51, "cost": 169304, "mass": 8, "power": 3.41, "optmass": 110, "maxmass": 165 },
"3A": { "grp": "t", "class": 3, "rating": "A", "M": 0.04, "P": 2.33, "cost": 507912, "mass": 5, "power": 3.72, "optmass": 120, "maxmass": 180 },
"2E": { "grp": "t", "class": 2, "rating": "E", "M": 0.17, "P": 0.235, "cost": 1978, "mass": 2.5, "power": 2, "optmass": 48, "maxmass": 72 },
"2D": { "grp": "t", "class": 2, "rating": "D", "M": 0.14, "P": 0.5145, "cost": 5934, "mass": 1, "power": 2.25, "optmass": 54, "maxmass": 81 },
"2C": { "grp": "t", "class": 2, "rating": "C", "M": 0.10, "P": 1, "cost": 17803, "mass": 2.5, "power": 2.5, "optmass": 60, "maxmass": 90 },
"2B": { "grp": "t", "class": 2, "rating": "B", "M": 0.07, "P": 1.51, "cost": 53408, "mass": 4, "power": 2.75, "optmass": 66, "maxmass": 99 },
"2A": { "grp": "t", "class": 2, "rating": "A", "M": 0.04, "P": 2.33, "cost": 160224, "mass": 2.5, "power": 3, "optmass": 72, "maxmass": 108 }
}

View File

@@ -1,183 +0,0 @@
{
"bl": [
{
"id": "0u",
"grp": "bl",
"class": 3,
"rating": "C",
"cost": 1177600,
"mass": 8,
"power": 1.8,
"mode": "F",
"type": "T",
"damage": 6,
"armourpen": "A",
"rof": null,
"dps": 5,
"mjdps" : 30.33,
"mjeps" : 5.65,
"thermload": 5
},
{
"id": "0v",
"grp": "bl",
"class": 3,
"rating": "C",
"cost": 2396160,
"mass": 8,
"power": 1.78,
"mode": "G",
"type": "T",
"damage": 6,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 24.00,
"mjeps" : 5.59,
"thermload": 6
},
{
"id": "0o",
"grp": "bl",
"class": 3,
"rating": "D",
"cost": 19399600,
"mass": 8,
"power": 1.68,
"mode": "T",
"type": "T",
"damage": 5,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 14.44,
"mjeps" : 3.54,
"thermload": 4
},
{
"id": "0r",
"grp": "bl",
"class": 2,
"rating": "D",
"cost": 299520,
"mass": 4,
"power": 1.12,
"mode": "F",
"type": "T",
"damage": 5,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 19.38,
"mjeps" : 3.42,
"thermload": 4
},
{
"id": "0s",
"grp": "bl",
"class": 2,
"rating": "D",
"cost": 500600,
"mass": 4,
"power": 1.1,
"mode": "G",
"type": "T",
"damage": 5,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 13.85,
"mjeps" : 3.26,
"thermload": 4
},
{
"id": "0t",
"grp": "bl",
"class": 2,
"rating": "E",
"cost": 2099900,
"mass": 4,
"power": 1.03,
"mode": "T",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 8.95,
"mjeps" : 2.10,
"thermload": 3
},
{
"id": "10",
"grp": "bl",
"class": 1,
"rating": "E",
"cost": 37430,
"mass": 2,
"power": 0.69,
"mode": "F",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 11.61,
"mjeps" : 2.16,
"thermload": 3
},
{
"id": "0p",
"grp": "bl",
"class": 1,
"rating": "E",
"cost": 74650,
"mass": 2,
"power": 0.67,
"mode": "G",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 8.70,
"mjeps" : 2.05,
"thermload": 3
},
{
"id": "0q",
"grp": "bl",
"class": 1,
"rating": "F",
"cost": 500000,
"mass": 2,
"power": 0.63,
"mode": "T",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 5.49,
"mjeps" : 1.29,
"thermload": 2
},
{
"id": "b0",
"grp": "bl",
"name": "Retributor",
"class": 1,
"rating": "E",
"cost": 56145,
"mass": 2,
"power": 0.69,
"mode": "F",
"type": "T",
"damage": 0,
"armourpen": "A",
"rof": null,
"dps": 3,
"thermload": 1
}
]
}

View File

@@ -1,183 +0,0 @@
{
"ul": [
{
"id": "14",
"grp": "ul",
"class": 3,
"rating": "D",
"cost": 140400,
"mass": 8,
"power": 1.66,
"mode": "F",
"type": "T",
"damage": 4,
"armourpen": "B",
"rof": 1,
"dps": 4,
"mjdps" : 24.97,
"mjeps" : 3.52,
"ssdam" : 27.85,
"thermload": 1
},
{
"id": "15",
"grp": "ul",
"class": 3,
"rating": "E",
"cost": 281600,
"mass": 8,
"power": 1.65,
"mode": "G",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 1.2,
"dps": 4,
"mjdps" : 18.56,
"mjeps" : 3.27,
"ssdam" : 18.56,
"thermload": 1
},
{
"id": "16",
"grp": "ul",
"class": 3,
"rating": "E",
"cost": 800400,
"mass": 8,
"power": 1.57,
"mode": "T",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 0.9,
"dps": 4,
"mjdps" : 8.78,
"mjeps" : 1.69,
"ssdam" : 9.45,
"thermload": 1
},
{
"id": "7h",
"grp": "ul",
"class":2,
"rating":"E",
"cost": 23000,
"mass": 4,
"power":1.05,
"mode":"F",
"type":"T",
"damage": 3,
"armourpen":"A",
"rof":1.3,
"dps": 4,
"thermload": 1
},
{
"id": "7i",
"grp": "ul",
"class":2,
"rating":"F",
"cost": 48500,
"mass": 4,
"power":1.04,
"mode":"G",
"type":"T",
"damage": 3,
"armourpen":"A",
"rof":1.5,
"dps": 4,
"thermload": 1
},
{
"id": "7j",
"grp": "ul",
"class":2,
"rating":"F",
"cost": 162800,
"mass": 4,
"power":0.98,
"mode":"T",
"type":"T",
"damage": 2,
"armourpen":"A",
"rof":1.1,
"dps": 3,
"thermload": 1
},
{
"id": "11",
"grp": "ul",
"class": 1,
"rating": "F",
"cost": 4400,
"mass": 2,
"power": 0.65,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.6,
"dps": 3,
"mjdps" : 9.94,
"mjeps" : 1.40,
"ssdam" : 6.45,
"thermload": 1
},
{
"id": "12",
"grp": "ul",
"class": 1,
"rating": "G",
"cost": 8600,
"mass": 2,
"power": 0.64,
"mode": "G",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.7,
"dps": 3,
"mjdps" : 7.95,
"mjeps" : 1.40,
"ssdam" : 4.53,
"thermload": 1
},
{
"id": "13",
"grp": "ul",
"class": 1,
"rating": "G",
"cost": 52800,
"mass": 2,
"power": 0.6,
"mode": "T",
"type": "T",
"damage": 1,
"armourpen": "B",
"rof": 1.3,
"dps": 2,
"mjdps" : 2.98,
"mjeps" : 0.63,
"ssdam" : 2.24,
"thermload": 1
},
{
"id": "cy",
"grp": "ul",
"name": "Cytoscrambler",
"class": 1,
"rating": "F",
"cost": 8800,
"mass": 2,
"power": 0.65,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.6,
"dps": 3,
"thermload": 1
}
]
}

View File

@@ -1,224 +0,0 @@
{
"c": [
{
"id": "1q",
"grp": "c",
"class": 4,
"rating": "B",
"cost": 2700800,
"mass": 16,
"power": 0.92,
"mode": "F",
"type": "K",
"damage": 9,
"armourpen": "A",
"rof": 0.4,
"dps": 5,
"thermload": 2,
"clip": 5,
"mjdps": 8.13,
"ssdam" : 37.13,
"ammo": 100
},
{
"id": "1r",
"grp": "c",
"class": 4,
"rating": "B",
"cost": 5401600,
"mass": 16,
"power": 1.03,
"mode": "G",
"type": "K",
"damage": 8,
"armourpen": "A",
"rof": 0.4,
"dps": 4,
"thermload": 2,
"clip": 5,
"mjdps": 10.97,
"ssdam" : 30.94,
"ammo": 100
},
{
"id": "1n",
"grp": "c",
"class": 3,
"rating": "C",
"cost": 675200,
"mass": 8,
"power": 0.67,
"mode": "F",
"type": "K",
"damage": 7,
"armourpen": "A",
"rof": 0.4,
"dps": 4,
"thermload": 2,
"clip": 5,
"mjdps": 8.13,
"ssdam" : 22.28,
"ammo": 100
},
{
"id": "1o",
"grp": "c",
"class": 3,
"rating": "C",
"cost": 1350400,
"mass": 8,
"power": 0.75,
"mode": "G",
"type": "K",
"damage": 7,
"armourpen": "A",
"rof": 0.4,
"dps": 4,
"thermload": 1,
"clip": 5,
"mjdps" : 7.95,
"ssdam" : 21.04,
"ammo": 100
},
{
"id": "1p",
"grp": "c",
"class": 3,
"rating": "D",
"cost": 16204800,
"mass": 8,
"power": 0.64,
"mode": "T",
"type": "K",
"damage": 6,
"armourpen": "A",
"rof": 0.3,
"dps": 4,
"thermload": 1,
"clip": 5,
"mjdps" : 3.58,
"ssdam" : 12.38,
"ammo": 100
},
{
"id": "1k",
"grp": "c",
"class": 2,
"rating": "D",
"cost": 168430,
"mass": 4,
"power": 0.49,
"mode": "F",
"type": "K",
"damage": 6,
"armourpen": "A",
"rof": 0.5,
"dps": 4,
"thermload": 1,
"clip": 5,
"mjdps" : 6.00,
"ssdam" : 15.47,
"ammo": 100
},
{
"id": "1l",
"grp": "c",
"class": 2,
"rating": "D",
"cost": 337600,
"mass": 4,
"power": 0.54,
"mode": "G",
"type": "K",
"damage": 6,
"armourpen": "A",
"rof": 0.5,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 6.24,
"ssdam" : 15.47,
"ammo": 100
},
{
"id": "1m",
"grp": "c",
"class": 2,
"rating": "E",
"cost": 4051200,
"mass": 4,
"power": 0.45,
"mode": "T",
"type": "K",
"damage": 5,
"armourpen": "A",
"rof": 0.3,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 2.41,
"ssdam" : 7.74,
"ammo": 100
},
{
"id": "1h",
"grp": "c",
"class": 1,
"rating": "D",
"cost": 21100,
"mass": 2,
"power": 0.34,
"mode": "F",
"type": "K",
"damage": 5,
"armourpen": "A",
"rof": 0.5,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 4.00,
"ssdam" : 9.59,
"ammo": 100
},
{
"id": "1i",
"grp": "c",
"class": 1,
"rating": "E",
"cost": 42200,
"mass": 2,
"power": 0.38,
"mode": "G",
"type": "K",
"damage": 5,
"armourpen": "A",
"rof": 0.5,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 3.80,
"ssdam" : 8.97,
"ammo": 100
},
{
"id": "1j",
"grp": "c",
"class": 1,
"rating": "F",
"cost": 506400,
"mass": 2,
"power": 0.32,
"mode": "T",
"type": "K",
"damage": 4,
"armourpen": "A",
"rof": 0.4,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 1.35,
"ssdam" : 4.13,
"ammo": 100
}
]
}

View File

@@ -1,59 +0,0 @@
{
"cs": [
{
"id": "0d",
"grp": "cs",
"class": 0,
"rating": "E",
"cost": 13544,
"mass": 1.3,
"power": 0.2,
"range": 2,
"time": 10
},
{
"id": "0c",
"grp": "cs",
"class": 0,
"rating": "D",
"cost": 40633,
"mass": 1.3,
"power": 0.4,
"range": 2.5,
"time": 10
},
{
"id": "0b",
"grp": "cs",
"class": 0,
"rating": "C",
"cost": 121899,
"mass": 1.3,
"power": 0.8,
"range": 3,
"time": 10
},
{
"id": "0a",
"grp": "cs",
"class": 0,
"rating": "B",
"cost": 365698,
"mass": 1.3,
"power": 1.6,
"range": 3.5,
"time": 10
},
{
"id": "09",
"grp": "cs",
"class": 0,
"rating": "A",
"cost": 1097095,
"mass": 1.3,
"power": 3.2,
"range": 4,
"time": 10
}
]
}

View File

@@ -1,63 +0,0 @@
{
"cm": [
{
"id": "00",
"grp": "cm",
"name": "Chaff Launcher",
"class": 0,
"rating": "I",
"cost": 8500,
"mass": 1.3,
"power": 0.2,
"passive": 1,
"armourpen": "F",
"thermload": 2,
"clip": 1,
"ammo": 10
},
{
"id": "01",
"grp": "cm",
"name": "Electronic Countermeasure",
"class": 0,
"rating": "F",
"cost": 12500,
"mass": 1.3,
"power": 0.2,
"range": 3,
"chargeup": 4,
"activepower": 4,
"cooldown": 10
},
{
"id": "02",
"grp": "cm",
"name": "Heat Sink Launcher",
"class": 0,
"rating": "I",
"cost": 3500,
"mass": 1.3,
"power": 0.2,
"passive": 1,
"armourpen": "F",
"thermload": 0,
"clip": 1,
"ammo": 3
},
{
"id": "03",
"grp": "cm",
"name": "Point Defence",
"class": 0,
"rating": "I",
"cost": 18546,
"mass": 0.5,
"power": 0.2,
"passive": 1,
"armourpen": "F",
"thermload": 1,
"clip": 50,
"ammo": 10000
}
]
}

View File

@@ -1,200 +0,0 @@
{
"fc": [
{
"id": "1t",
"grp": "fc",
"class": 3,
"rating": "C",
"cost": 1167360,
"mass": 8,
"power": 1.02,
"mode": "F",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 4.5,
"dps": 10,
"thermload": 1,
"clip": 3,
"mjdps": 15.19,
"ssdam" : 28.36,
"ammo": 30
},
{
"id": "1u",
"grp": "fc",
"class": 3,
"rating": "C",
"cost": 1751040,
"mass": 8,
"power": 1.55,
"mode": "G",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 4.8,
"dps": 10,
"thermload": 1,
"clip": 3,
"mjdps" : 12.77,
"ssdam" : 23.21,
"ammo": 30
},
{
"id": "1v",
"grp": "fc",
"class": 3,
"rating": "C",
"cost": 5836800,
"mass": 8,
"power": 1.29,
"mode": "T",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 3.3,
"dps": 9,
"thermload": 1,
"clip": 3,
"mjdps" : 6.85,
"ssdam" : 12.89,
"ammo": 30
},
{
"id": "1s",
"grp": "fc",
"class": 2,
"rating": "A",
"cost": 291840,
"mass": 4,
"power": 0.74,
"mode": "F",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 5,
"dps": 9,
"thermload": 1,
"clip": 3,
"mjdps" : 9.50,
"ssdam" : 18.05,
"ammo": 30
},
{
"id": "7e",
"grp": "fc",
"class": 2,
"rating": "D",
"cost": 437800,
"mass": 4,
"power": 1.03,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.3,
"dps": 9,
"thermload": 1,
"clip": 3,
"ammo": 30
},
{
"id": "7f",
"grp": "fc",
"class": 2,
"rating": "D",
"cost": 1459200,
"mass": 4,
"power": 0.79,
"mode": "T",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 3.7,
"dps": 9,
"thermload": 1,
"clip": 3,
"ammo": 30
},
{
"id": "20",
"grp": "fc",
"class": 1,
"rating": "E",
"cost": 36000,
"mass": 2,
"power": 0.45,
"mode": "F",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.5,
"dps": 8,
"thermload": 1,
"clip": 3,
"mjdps" : 5.53,
"ssdam" : 10.31,
"ammo": 30
},
{
"id": "21",
"grp": "fc",
"class": 1,
"rating": "E",
"cost": 54720,
"mass": 2,
"power": 0.59,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.8,
"dps": 7,
"thermload": 1,
"clip": 3,
"mjdps" : 3.58,
"ssdam" : 6.45,
"ammo": 30
},
{
"id": "22",
"grp": "fc",
"class": 1,
"rating": "E",
"cost": 182400,
"mass": 2,
"power": 0.42,
"mode": "T",
"type": "K",
"damage": 1,
"armourpen": "A",
"rof": 4,
"dps": 6,
"thermload": 1,
"clip": 3,
"mjdps" : 2.11,
"ssdam" : 3.87,
"ammo": 30
},
{
"id": "pa",
"grp": "fc",
"name": "Pacifier",
"class": 3,
"rating": "C",
"cost": 1400832,
"mass": 8,
"power": 1.02,
"mode": "F",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 4.5,
"dps": 9,
"thermload": 1,
"clip": 3,
"ammo": 30
}
]
}

View File

@@ -1,59 +0,0 @@
{
"ws": [
{
"id": "0i",
"grp": "ws",
"class": 0,
"rating": "E",
"cost": 13544,
"mass": 1.3,
"power": 0.2,
"range": 2,
"time": 10
},
{
"id": "0h",
"grp": "ws",
"class": 0,
"rating": "D",
"cost": 40633,
"mass": 1.3,
"power": 0.4,
"range": 2.5,
"time": 10
},
{
"id": "0g",
"grp": "ws",
"class": 0,
"rating": "C",
"cost": 121899,
"mass": 1.3,
"power": 0.8,
"range": 3,
"time": 10
},
{
"id": "0f",
"grp": "ws",
"class": 0,
"rating": "B",
"cost": 365698,
"mass": 1.3,
"power": 1.6,
"range": 3.5,
"time": 10
},
{
"id": "0e",
"grp": "ws",
"class": 0,
"rating": "A",
"cost": 1097095,
"mass": 1.3,
"power": 3.2,
"range": 4,
"time": 10
}
]
}

View File

@@ -1,59 +0,0 @@
{
"kw": [
{
"id": "0n",
"grp": "kw",
"class": 0,
"rating": "E",
"cost": 13544,
"mass": 1.3,
"power": 0.2,
"range": 2,
"time": 10
},
{
"id": "0m",
"grp": "kw",
"class": 0,
"rating": "D",
"cost": 40633,
"mass": 1.3,
"power": 0.4,
"range": 2.5,
"time": 10
},
{
"id": "0l",
"grp": "kw",
"class": 0,
"rating": "C",
"cost": 121899,
"mass": 1.3,
"power": 0.8,
"range": 3,
"time": 10
},
{
"id": "0k",
"grp": "kw",
"class": 0,
"rating": "B",
"cost": 365698,
"mass": 1.3,
"power": 1.6,
"range": 3.5,
"time": 10
},
{
"id": "0j",
"grp": "kw",
"class": 0,
"rating": "A",
"cost": 1097095,
"mass": 1.3,
"power": 3.2,
"range": 4,
"time": 10
}
]
}

View File

@@ -1,34 +0,0 @@
{
"nl": [
{
"id": "2j",
"grp": "nl",
"class": 1,
"rating": "I",
"cost": 24260,
"mass": 2,
"power": 0.4,
"mode": "F",
"type": "E",
"armourpen": "C",
"thermload": 2,
"clip": 1,
"ammo": 24
},
{
"id": "2k",
"grp": "nl",
"class": 2,
"rating": "I",
"cost": 294080,
"mass": 4,
"power": 0.4,
"mode": "F",
"type": "E",
"armourpen": "C",
"thermload": 3,
"clip": 3,
"ammo": 24
}
]
}

View File

@@ -1,44 +0,0 @@
{
"ml": [
{
"id": "2l",
"grp": "ml",
"class": 1,
"rating": "D",
"cost": 6800,
"mass": 2,
"power": 0.5,
"mode": "F",
"armourpen": "D",
"thermload": 3
},
{
"id": "2m",
"grp": "ml",
"class": 2,
"rating": "D",
"cost": 22576,
"mass": 2,
"power": 0.75,
"mode": "F",
"armourpen": "D",
"thermload": 5
},
{
"id": "ml",
"grp": "ml",
"name": "Mining Lance",
"class": 1,
"rating": "D",
"cost": 13600,
"mass": 2,
"power": 0.7,
"mode": "F",
"type": "T",
"damage": 3,
"dps": 3,
"armourpen": "D",
"thermload": 3
}
]
}

View File

@@ -1,109 +0,0 @@
{
"mr": [
{
"id": "2f",
"grp": "mr",
"class": 2,
"rating": "B",
"cost": 240400,
"mass": 4,
"power": 1.2,
"mode": "F",
"type": "E",
"damage": 7,
"armourpen": "F",
"rof": 2.5,
"dps": 8,
"thermload": 3,
"clip": 12,
"ammo": 24,
"mjdps": 1.72,
"ssdam" : 3.87,
"missile": "D"
},
{
"id": "2g",
"grp": "mr",
"class": 2,
"rating": "B",
"cost": 512400,
"mass": 4,
"power": 1.2,
"mode": "F",
"type": "E",
"damage": 6,
"armourpen": "F",
"rof": 0.3,
"dps": 3,
"thermload": 3,
"clip": 6,
"ammo": 18,
"mjdps": 0.57,
"ssdam" : 2.58,
"missile": "S"
},
{
"id": "2d",
"grp": "mr",
"class": 1,
"rating": "B",
"cost": 32175,
"mass": 2,
"power": 0.4,
"mode": "F",
"type": "E",
"damage": 7,
"armourpen": "F",
"rof": 2.5,
"dps": 8,
"thermload": 3,
"clip": 8,
"ammo": 16,
"mjdps": 1.63,
"ssdam" : 3.87,
"missile": "D"
},
{
"id": "2e",
"grp": "mr",
"class": 1,
"rating": "B",
"cost": 72600,
"mass": 2,
"power": 0.6,
"mode": "F",
"type": "E",
"damage": 6,
"armourpen": "F",
"rof": 0.3,
"dps": 3,
"thermload": 3,
"clip": 6,
"ammo": 6,
"mjdps": 0.57,
"ssdam" : 2.58,
"missile": "S"
},
{
"id": "Ph",
"grp": "mr",
"name": "Pack-Hound",
"class": 2,
"rating": "B",
"cost": 1000832,
"mass": 4,
"power": 1.2,
"mode": "F",
"type": "E",
"damage": 3,
"armourpen": "F",
"rof": 0.5,
"dps": 4,
"thermload": 3,
"grp": "mr",
"clip": 12,
"ammo": 120,
"missile": "S"
}
]
}

View File

@@ -1,143 +0,0 @@
{
"mc": [
{
"id": "26",
"grp": "mc",
"class": 2,
"rating": "E",
"cost": 38000,
"mass": 4,
"power": 0.46,
"mode": "F",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 7,
"dps": 4,
"thermload": 1,
"clip": 90,
"mjdps" : 6.02,
"ssdam" : 1.20,
"ammo": 2100
},
{
"id": "27",
"grp": "mc",
"class": 2,
"rating": "F",
"cost": 57000,
"mass": 4,
"power": 0.64,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 7.5,
"dps": 4,
"thermload": 1,
"clip": 90,
"mjdps" : 5.59,
"ssdam" : 1.03,
"ammo": 2100
},
{
"id": "28",
"grp": "mc",
"class": 2,
"rating": "F",
"cost": 1292800,
"mass": 4,
"power": 0.5,
"mode": "T",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.3,
"dps": 3,
"thermload": 1,
"clip": 90,
"mjdps" : 2.15,
"ssdam" : 0.52,
"ammo": 2100
},
{
"id": "23",
"grp": "mc",
"class": 1,
"rating": "F",
"cost": 9500,
"mass": 2,
"power": 0.28,
"mode": "F",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 8,
"dps": 3,
"thermload": 1,
"clip": 90,
"mjdps" : 3.75,
"ssdam" : 0.69,
"ammo": 2100
},
{
"id": "24",
"grp": "mc",
"class": 1,
"rating": "G",
"cost": 14250,
"mass": 2,
"power": 0.37,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 8.5,
"dps": 3,
"thermload": 1,
"clip": 90,
"mjdps" : 2.03,
"ssdam" : 0.34,
"ammo": 2100
},
{
"id": "25",
"grp": "mc",
"class": 1,
"rating": "G",
"cost": 81600,
"mass": 2,
"power": 0.26,
"mode": "T",
"type": "K",
"damage": 0,
"armourpen": "A",
"rof": 6,
"dps": 2,
"thermload": 1,
"clip": 90,
"mjdps" : 1.54,
"ssdam" : 0.34,
"ammo": 2100
},
{
"id": "e0",
"grp": "mc",
"name": "Enforcer",
"class": 1,
"rating": "F",
"cost": 13984,
"mass": 2,
"power": 0.28,
"mode": "F",
"type": "K",
"damage": 4,
"armourpen": "A",
"rof": 4.3,
"dps": 4,
"thermload": 1,
"clip": 60,
"ammo": 1000
}
]
}

View File

@@ -1,83 +0,0 @@
{
"pa": [
{
"id": "1g",
"grp": "pa",
"class": 2,
"rating": "C",
"cost": 834200,
"mass": 4,
"power": 1.43,
"mode": "F",
"type": "T",
"damage": 7,
"armourpen": "A",
"rof": 0.3,
"dps": 4,
"thermload": 10,
"clip": 5,
"mjdps" : 6.89,
"ssdam" : 27.85,
"ammo": 100
},
{
"id": "2b",
"grp": "pa",
"class": 3,
"rating": "B",
"cost": 3051200,
"mass": 8,
"power": 1.97,
"mode": "F",
"type": "TK",
"damage": 9,
"armourpen": "A",
"rof": 0.3,
"dps": 4,
"thermload": 8,
"clip": 5,
"mjdps" : 20.98,
"ssdam" : 92.82,
"ammo": 100
},
{
"id": "2c",
"grp": "pa",
"class": 4,
"rating": "A",
"cost": 13793600,
"mass": 16,
"power": 2.63,
"mode": "F",
"type": "TK",
"damage": 10,
"armourpen": "A",
"rof": 0.3,
"dps": 5,
"thermload": 10,
"clip": 5,
"mjdps" : 25.55,
"ssdam" : 123.76,
"ammo": 100
},
{
"id": "Ap",
"grp": "pa",
"name": "Advanced",
"class": 3,
"rating": "B",
"cost": 4119120,
"mass": 8,
"power": 1.97,
"mode": "F",
"type": "TK",
"damage": 8,
"armourpen": "A",
"rof": 0.6,
"dps": 4,
"thermload": 4,
"clip": 20,
"ammo": 300
}
]
}

View File

@@ -1,192 +0,0 @@
{
"pl": [
{
"id": "1d",
"grp": "pl",
"class": 3,
"rating": "D",
"cost": 70400,
"mass": 8,
"power": 0.9,
"mode": "F",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": 3,
"dps": 4,
"mjdps" : 21.62,
"mjeps" : 2.86,
"ssdam" : 7.07,
"thermload": 1
},
{
"id": "1e",
"grp": "pl",
"class": 3,
"rating": "E",
"cost": 140600,
"mass": 8,
"power": 0.92,
"mode": "G",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 3.2,
"dps": 4,
"mjdps" : 18.28,
"mjeps" : 2.98,
"ssdam" : 5.59,
"thermload": 1
},
{
"id": "1f",
"grp": "pl",
"class": 3,
"rating": "F",
"cost": 400400,
"mass": 8,
"power": 0.89,
"mode": "T",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 2.3,
"dps": 3,
"mjdps" : 7.05,
"mjeps" : 1.24,
"ssdam" : 3.15,
"thermload": 1
},
{
"id": "1a",
"grp": "pl",
"class": 2,
"rating": "E",
"cost": 17600,
"mass": 4,
"power": 0.6,
"mode": "F",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 3.4,
"dps": 3,
"mjdps" : 14.29,
"mjeps" : 1.89,
"ssdam" : 4.20,
"thermload": 1
},
{
"id": "1b",
"grp": "pl",
"class": 2,
"rating": "F",
"cost": 35400,
"mass": 4,
"power": 0.6,
"mode": "G",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 3.6,
"dps": 3,
"mjdps" : 11.62,
"mjeps" : 1.89,
"ssdam" : 3.24,
"thermload": 1
},
{
"id": "1c",
"grp": "pl",
"class": 2,
"rating": "F",
"cost": 132800,
"mass": 4,
"power": 0.58,
"mode": "T",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 2.5,
"dps": 3,
"mjdps" : 4.72,
"mjeps" : 0.83,
"ssdam" : 1.86,
"thermload": 1
},
{
"id": "17",
"grp": "pl",
"class": 1,
"rating": "F",
"cost": 2200,
"mass": 2,
"power": 0.39,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 3.8,
"dps": 3,
"mjdps" : 9.35,
"mjeps" : 1.24,
"ssdam" : 2.48,
"thermload": 1
},
{
"id": "18",
"grp": "pl",
"class": 1,
"rating": "G",
"cost": 6600,
"mass": 2,
"power": 0.39,
"mode": "G",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 4,
"dps": 3,
"mjdps" : 7.30,
"mjeps" : 1.19,
"ssdam" : 1.88,
"thermload": 1
},
{
"id": "19",
"grp": "pl",
"class": 1,
"rating": "G",
"cost": 26000,
"mass": 2,
"power": 0.38,
"mode": "T",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 2.8,
"dps": 2,
"mjdps" : 2.90,
"mjeps" : 0.51,
"ssdam" : 1.07,
"thermload": 1
},
{
"id": "PL",
"grp": "pl",
"name": "Distruptor",
"class": 2,
"rating": "E",
"cost": 26400,
"mass": 4,
"power": 0.7,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.6,
"dps": 2,
"thermload": 1
}
]
}

View File

@@ -1,63 +0,0 @@
{
"rg": [
{
"id": "29",
"grp": "rg",
"class": 1,
"rating": "D",
"cost": 51600,
"mass": 2,
"power": 1.15,
"mode": "F",
"type": "TK",
"damage": 6,
"armourpen": "A",
"rof": 0.6,
"dps": 4,
"thermload": 7,
"clip": 1,
"mjdps" : 13.75,
"ssdam" : 24.75,
"ammo": 30
},
{
"id": "2a",
"grp": "rg",
"class": 2,
"rating": "B",
"cost": 412800,
"mass": 4,
"power": 1.63,
"mode": "F",
"type": "TK",
"damage": 7,
"armourpen": "A",
"rof": 0.5,
"dps": 4,
"thermload": 10,
"clip": 1,
"mjdps" : 21.66,
"ssdam" : 43.32,
"ammo": 30
},
{
"id": "ih",
"grp": "rg",
"name": "Imperial Hammer",
"class": 2,
"rating": "B",
"cost": 619200,
"mass": 4,
"power": 1.63,
"mode": "F",
"type": "TK",
"damage": 5,
"armourpen": "A",
"rof": 0.6,
"dps": 5,
"thermload": 3,
"clip": 3,
"ammo": 90
}
]
}

View File

@@ -1,59 +0,0 @@
{
"sb": [
{
"id": "08",
"grp": "sb",
"class": 0,
"rating": "E",
"cost": 10000,
"mass": 0.5,
"power": 0.2,
"passive": 1,
"shieldmul": 0.04
},
{
"id": "07",
"grp": "sb",
"class": 0,
"rating": "D",
"cost": 23000,
"mass": 1,
"power": 0.5,
"passive": 1,
"shieldmul": 0.08
},
{
"id": "06",
"grp": "sb",
"class": 0,
"rating": "C",
"cost": 53000,
"mass": 2,
"power": 0.7,
"passive": 1,
"shieldmul": 0.12
},
{
"id": "05",
"grp": "sb",
"class": 0,
"rating": "B",
"cost": 122000,
"mass": 3,
"power": 1,
"passive": 1,
"shieldmul": 0.16
},
{
"id": "04",
"grp": "sb",
"class": 0,
"rating": "A",
"cost": 281000,
"mass": 3.5,
"power": 1.2,
"passive": 1,
"shieldmul": 0.2
}
]
}

View File

@@ -1,36 +0,0 @@
{
"tp": [
{
"id": "2h",
"grp": "tp",
"class": 1,
"rating": "I",
"cost": 11200,
"mass": 2,
"power": 0.4,
"mode": "F",
"armourpen": "C",
"thermload": 10,
"grp": "tp",
"clip": 1,
"ammo": 1,
"missile": "S"
},
{
"id": "2i",
"grp": "tp",
"class": 2,
"rating": "I",
"cost": 44800,
"mass": 4,
"power": 0.4,
"mode": "F",
"armourpen": "C",
"thermload": 10,
"grp": "tp",
"clip": 2,
"ammo": 1,
"missile": "S"
}
]
}

View File

@@ -1,404 +0,0 @@
{
"am": [
{
"id": "1f",
"grp": "am",
"class": 8,
"rating": "E",
"cost": 612220,
"power": 1.8,
"ammo": 10000,
"repair": 120
},
{
"id": "1e",
"grp": "am",
"class": 8,
"rating": "D",
"cost": 1836660,
"power": 2.4,
"ammo": 9000,
"repair": 144
},
{
"id": "1d",
"grp": "am",
"class": 8,
"rating": "C",
"cost": 5509980,
"power": 3,
"ammo": 10000,
"repair": 200
},
{
"id": "1c",
"grp": "am",
"class": 8,
"rating": "B",
"cost": 16529941,
"power": 3.45,
"ammo": 12000,
"repair": 276
},
{
"id": "1b",
"grp": "am",
"class": 8,
"rating": "A",
"cost": 49589823,
"power": 4.2,
"ammo": 11000,
"repair": 308
},
{
"id": "1a",
"grp": "am",
"class": 7,
"rating": "E",
"cost": 340122,
"power": 1.58,
"ammo": 8700,
"repair": 104.4
},
{
"id": "19",
"grp": "am",
"class": 7,
"rating": "D",
"cost": 1020367,
"power": 2.1,
"ammo": 7800,
"repair": 124.8
},
{
"id": "18",
"grp": "am",
"class": 7,
"rating": "C",
"cost": 3061100,
"power": 2.63,
"ammo": 8700,
"repair": 174
},
{
"id": "17",
"grp": "am",
"class": 7,
"rating": "B",
"cost": 9183300,
"power": 3.02,
"ammo": 10400,
"repair": 239.2
},
{
"id": "16",
"grp": "am",
"class": 7,
"rating": "A",
"cost": 27549901,
"power": 3.68,
"ammo": 9600,
"repair": 268.8
},
{
"id": "15",
"grp": "am",
"class": 6,
"rating": "E",
"cost": 188957,
"power": 1.4,
"ammo": 7400,
"repair": 88.8
},
{
"id": "14",
"grp": "am",
"class": 6,
"rating": "D",
"cost": 566870,
"power": 1.86,
"ammo": 6700,
"repair": 107.2
},
{
"id": "13",
"grp": "am",
"class": 6,
"rating": "C",
"cost": 1700611,
"power": 2.33,
"ammo": 7400,
"repair": 148
},
{
"id": "12",
"grp": "am",
"class": 6,
"rating": "B",
"cost": 5101834,
"power": 2.67,
"ammo": 8900,
"repair": 204.7
},
{
"id": "11",
"grp": "am",
"class": 6,
"rating": "A",
"cost": 15305501,
"power": 3.26,
"ammo": 8100,
"repair": 226.8
},
{
"id": "10",
"grp": "am",
"class": 5,
"rating": "E",
"cost": 104976,
"power": 1.17,
"ammo": 6100,
"repair": 73.2
},
{
"id": "0v",
"grp": "am",
"class": 5,
"rating": "D",
"cost": 314928,
"power": 1.56,
"ammo": 5500,
"repair": 88
},
{
"id": "0u",
"grp": "am",
"class": 5,
"rating": "C",
"cost": 944784,
"power": 1.95,
"ammo": 6100,
"repair": 122
},
{
"id": "0t",
"grp": "am",
"class": 5,
"rating": "B",
"cost": 2834352,
"power": 2.24,
"ammo": 7300,
"repair": 167.9
},
{
"id": "0s",
"grp": "am",
"class": 5,
"rating": "A",
"cost": 8503056,
"power": 2.73,
"ammo": 6700,
"repair": 187.6
},
{
"id": "0r",
"grp": "am",
"class": 4,
"rating": "E",
"cost": 58320,
"power": 0.99,
"ammo": 4900,
"repair": 58.8
},
{
"id": "0q",
"grp": "am",
"class": 4,
"rating": "D",
"cost": 174960,
"power": 1.32,
"ammo": 4400,
"repair": 70.4
},
{
"id": "0p",
"grp": "am",
"class": 4,
"rating": "C",
"cost": 524880,
"power": 1.65,
"ammo": 4900,
"repair": 98
},
{
"id": "0o",
"grp": "am",
"class": 4,
"rating": "B",
"cost": 1574640,
"power": 1.9,
"ammo": 5900,
"repair": 135.7
},
{
"id": "0n",
"grp": "am",
"class": 4,
"rating": "A",
"cost": 4723920,
"power": 2.31,
"ammo": 5400,
"repair": 151.2
},
{
"id": "0m",
"grp": "am",
"class": 3,
"rating": "E",
"cost": 32400,
"power": 0.81,
"ammo": 3600,
"repair": 43.2
},
{
"id": "0l",
"grp": "am",
"class": 3,
"rating": "D",
"cost": 97200,
"power": 1.08,
"ammo": 3200,
"repair": 51.2
},
{
"id": "0k",
"grp": "am",
"class": 3,
"rating": "C",
"cost": 291600,
"power": 1.35,
"ammo": 3600,
"repair": 72
},
{
"id": "0j",
"grp": "am",
"class": 3,
"rating": "B",
"cost": 874800,
"power": 1.55,
"ammo": 4300,
"repair": 98.9
},
{
"id": "0i",
"grp": "am",
"class": 3,
"rating": "A",
"cost": 2624400,
"power": 1.89,
"ammo": 4000,
"repair": 112
},
{
"id": "0h",
"grp": "am",
"class": 2,
"rating": "E",
"cost": 18000,
"power": 0.68,
"ammo": 2300,
"repair": 27.6
},
{
"id": "0g",
"grp": "am",
"class": 2,
"rating": "D",
"cost": 54000,
"power": 0.9,
"ammo": 2100,
"repair": 33.6
},
{
"id": "0f",
"grp": "am",
"class": 2,
"rating": "C",
"cost": 162000,
"power": 1.13,
"ammo": 2300,
"repair": 46
},
{
"id": "0e",
"grp": "am",
"class": 2,
"rating": "B",
"cost": 486000,
"power": 1.29,
"ammo": 2800,
"repair": 64.4
},
{
"id": "0d",
"grp": "am",
"class": 2,
"rating": "A",
"cost": 1458000,
"power": 1.58,
"ammo": 2500,
"repair": 70
},
{
"id": "0c",
"grp": "am",
"class": 1,
"rating": "E",
"cost": 10000,
"power": 0.54,
"ammo": 1000,
"repair": 12
},
{
"id": "0b",
"grp": "am",
"class": 1,
"rating": "D",
"cost": 30000,
"power": 0.72,
"ammo": 900,
"repair": 14.4
},
{
"id": "0a",
"grp": "am",
"class": 1,
"rating": "C",
"cost": 90000,
"power": 0.9,
"ammo": 1000,
"repair": 20
},
{
"id": "09",
"grp": "am",
"class": 1,
"rating": "B",
"cost": 270000,
"power": 1.04,
"ammo": 1200,
"repair": 27.6
},
{
"id": "08",
"grp": "am",
"class": 1,
"rating": "A",
"cost": 810000,
"power": 1.26,
"ammo": 1100,
"repair": 30.8
}
]
}

View File

@@ -1,12 +0,0 @@
{
"cr": [
{ "id": "00", "grp": "cr", "class": 1, "rating": "E", "cost": 1000, "capacity": 2 },
{ "id": "01", "grp": "cr", "class": 2, "rating": "E", "cost": 3250, "capacity": 4 },
{ "id": "02", "grp": "cr", "class": 3, "rating": "E", "cost": 10563, "capacity": 8 },
{ "id": "03", "grp": "cr", "class": 4, "rating": "E", "cost": 34328, "capacity": 16 },
{ "id": "04", "grp": "cr", "class": 5, "rating": "E", "cost": 111566, "capacity": 32 },
{ "id": "05", "grp": "cr", "class": 6, "rating": "E", "cost": 362591, "capacity": 64 },
{ "id": "06", "grp": "cr", "class": 7, "rating": "E", "cost": 1178420, "capacity": 128 },
{ "id": "07", "grp": "cr", "class": 8, "rating": "E", "cost": 3829866, "capacity": 256 }
]
}

View File

@@ -1,27 +0,0 @@
{
"cc": [
{ "id": "Cf", "grp":"cc", "class":7, "rating":"E", "cost": 437400, "mass": 32.0, "power":0.41, "range":1.36, "maximum": 4, "time":300 },
{ "id": "Cg", "grp":"cc", "class":7, "rating":"D", "cost": 874800, "mass": 32.0, "power":0.55, "range":1.02, "maximum": 4, "time":600 },
{ "id": "Ch", "grp":"cc", "class":7, "rating":"C", "cost":1749600, "mass": 80.0, "power":0.69, "range":1.70, "maximum": 4, "time":510 },
{ "id": "Ci", "grp":"cc", "class":7, "rating":"B", "cost":3499200, "mass":128.0, "power":0.83, "range":2.38, "maximum": 4, "time":420 },
{ "id": "Cj", "grp":"cc", "class":7, "rating":"A", "cost":6998400, "mass":128.0, "power":0.97, "range":2.04, "maximum": 4, "time":720 },
{ "id": "Ca", "grp":"cc", "class":5, "rating":"E", "cost": 48600, "mass": 8.0, "power":0.30, "range":1.04, "maximum": 3, "time":300 },
{ "id": "Cb", "grp":"cc", "class":5, "rating":"D", "cost": 97200, "mass": 8.0, "power":0.40, "range":0.78, "maximum": 3, "time":600 },
{ "id": "Cc", "grp":"cc", "class":5, "rating":"C", "cost": 194400, "mass": 20.0, "power":0.50, "range":1.30, "maximum": 3, "time":510 },
{ "id": "Cd", "grp":"cc", "class":5, "rating":"B", "cost": 388800, "mass": 32.0, "power":0.60, "range":1.82, "maximum": 3, "time":420 },
{ "id": "Ce", "grp":"cc", "class":5, "rating":"A", "cost": 777600, "mass": 32.0, "power":0.70, "range":1.56, "maximum": 3, "time":720 },
{ "id": "C6", "grp":"cc", "class":3, "rating":"E", "cost": 5400, "mass": 2.0, "power":0.20, "range":0.88, "maximum": 2, "time":300 },
{ "id": "C7", "grp":"cc", "class":3, "rating":"D", "cost": 10800, "mass": 2.0, "power":0.27, "range":0.66, "maximum": 2, "time":600 },
{ "id": "C8", "grp":"cc", "class":3, "rating":"C", "cost": 21600, "mass": 5.0, "power":0.34, "range":1.10, "maximum": 2, "time":510 },
{ "id": "C9", "grp":"cc", "class":3, "rating":"B", "cost": 43200, "mass": 8.0, "power":0.41, "range":1.54, "maximum": 2, "time":420 },
{ "id": "C0", "grp":"cc", "class":3, "rating":"A", "cost": 86400, "mass": 8.0, "power":0.48, "range":1.32, "maximum": 2, "time":720 },
{ "id": "C1", "grp":"cc", "class":1, "rating":"E", "cost": 600, "mass": 0.5, "power":0.14, "range":0.80, "maximum": 1, "time":300 },
{ "id": "C2", "grp":"cc", "class":1, "rating":"D", "cost": 1200, "mass": 0.5, "power":0.18, "range":0.60, "maximum": 1, "time":600 },
{ "id": "C3", "grp":"cc", "class":1, "rating":"C", "cost": 2400, "mass": 1.3, "power":0.23, "range":1.00, "maximum": 1, "time":510 },
{ "id": "C4", "grp":"cc", "class":1, "rating":"B", "cost": 4800, "mass": 2.0, "power":0.28, "range":1.40, "maximum": 1, "time":420 },
{ "id": "C5", "grp":"cc", "class":1, "rating":"A", "cost": 9600, "mass": 2.0, "power":0.32, "range":1.20, "maximum": 1, "time":720 }
]
}

View File

@@ -1,13 +0,0 @@
{
"dc": [
{
"id": "24",
"grp": "dc",
"name": "Standard Docking Computer",
"class": 1,
"rating": "E",
"cost": 4500,
"power": 0.39
}
]
}

View File

@@ -1,204 +0,0 @@
{
"fi": [
{
"id": "6p",
"grp": "fi",
"class": 4,
"rating": "E",
"cost": 263424,
"mass": 10,
"power": 0.25,
"rangeRating": "B"
},
{
"id": "6o",
"grp": "fi",
"class": 4,
"rating": "D",
"cost": 790272,
"mass": 4,
"power": 0.33,
"rangeRating": "A"
},
{
"id": "6n",
"grp": "fi",
"class": 4,
"rating": "C",
"cost": 2370816,
"mass": 10,
"power": 0.41,
"rangeRating": "A"
},
{
"id": "6m",
"grp": "fi",
"class": 4,
"rating": "B",
"cost": 7112448,
"mass": 16,
"power": 0.49,
"rangeRating": "A"
},
{
"id": "6l",
"grp": "fi",
"class": 4,
"rating": "A",
"cost": 21337344,
"mass": 10,
"power": 0.57,
"rangeRating": "A"
},
{
"id": "6k",
"grp": "fi",
"class": 3,
"rating": "E",
"cost": 94080,
"mass": 5,
"power": 0.2,
"rangeRating": "C"
},
{
"id": "6j",
"grp": "fi",
"class": 3,
"rating": "D",
"cost": 282240,
"mass": 2,
"power": 0.27,
"rangeRating": "B"
},
{
"id": "6i",
"grp": "fi",
"class": 3,
"rating": "C",
"cost": 846720,
"mass": 5,
"power": 0.34,
"rangeRating": "B"
},
{
"id": "6h",
"grp": "fi",
"class": 3,
"rating": "B",
"cost": 2540160,
"mass": 8,
"power": 0.41,
"rangeRating": "B"
},
{
"id": "6g",
"grp": "fi",
"class": 3,
"rating": "A",
"cost": 7620480,
"mass": 5,
"power": 0.48,
"rangeRating": "A"
},
{
"id": "6f",
"grp": "fi",
"class": 2,
"rating": "E",
"cost": 33600,
"mass": 2.5,
"power": 0.17,
"rangeRating": "D"
},
{
"id": "6e",
"grp": "fi",
"class": 2,
"rating": "D",
"cost": 100800,
"mass": 1,
"power": 0.22,
"rangeRating": "C"
},
{
"id": "6d",
"grp": "fi",
"class": 2,
"rating": "C",
"cost": 302400,
"mass": 2.5,
"power": 0.28,
"rangeRating": "C"
},
{
"id": "6c",
"grp": "fi",
"class": 2,
"rating": "B",
"cost": 907200,
"mass": 4,
"power": 0.34,
"rangeRating": "C"
},
{
"id": "6b",
"grp": "fi",
"class": 2,
"rating": "A",
"cost": 2721600,
"mass": 2.5,
"power": 0.39,
"rangeRating": "B"
},
{
"id": "6a",
"grp": "fi",
"class": 1,
"rating": "E",
"cost": 12000,
"mass": 1.3,
"power": 0.14,
"rangeRating": "E"
},
{
"id": "69",
"grp": "fi",
"class": 1,
"rating": "D",
"cost": 36000,
"mass": 0.5,
"power": 0.18,
"rangeRating": "D"
},
{
"id": "68",
"grp": "fi",
"class": 1,
"rating": "C",
"cost": 108000,
"mass": 1.3,
"power": 0.23,
"rangeRating": "D"
},
{
"id": "67",
"grp": "fi",
"class": 1,
"rating": "B",
"cost": 324000,
"mass": 2,
"power": 0.28,
"rangeRating": "D"
},
{
"id": "66",
"grp": "fi",
"class": 1,
"rating": "A",
"cost": 972000,
"mass": 1.3,
"power": 0.32,
"rangeRating": "C"
}
]
}

View File

@@ -1,364 +0,0 @@
{
"fs": [
{
"id": "3q",
"grp": "fs",
"class": 8,
"rating": "E",
"cost": 1083910,
"power": 0.48,
"rate": 720
},
{
"id": "3p",
"grp": "fs",
"class": 8,
"rating": "D",
"cost": 4516291,
"power": 0.64,
"rate": 960
},
{
"id": "3o",
"grp": "fs",
"class": 8,
"rating": "C",
"cost": 18065165,
"power": 0.8,
"rate": 1200
},
{
"id": "3n",
"grp": "fs",
"class": 8,
"rating": "B",
"cost": 72260660,
"power": 0.96,
"rate": 1440
},
{
"id": "3m",
"grp": "fs",
"class": 8,
"rating": "A",
"cost": 289042541,
"power": 1.12,
"rate": 1680
},
{
"id": "3l",
"grp": "fs",
"class": 7,
"rating": "E",
"cost": 341927,
"power": 0.41,
"rate": 534
},
{
"id": "3k",
"grp": "fs",
"class": 7,
"rating": "D",
"cost": 1424698,
"power": 0.55,
"rate": 712
},
{
"id": "3j",
"grp": "fs",
"class": 7,
"rating": "C",
"cost": 5698790,
"power": 0.69,
"rate": 890
},
{
"id": "3i",
"grp": "fs",
"class": 7,
"rating": "B",
"cost": 22795161,
"power": 0.83,
"rate": 1068
},
{
"id": "3h",
"grp": "fs",
"class": 7,
"rating": "A",
"cost": 91180644,
"power": 0.97,
"rate": 1245
},
{
"id": "3g",
"grp": "fs",
"class": 6,
"rating": "E",
"cost": 107864,
"power": 0.35,
"rate": 376
},
{
"id": "3f",
"grp": "fs",
"class": 6,
"rating": "D",
"cost": 449431,
"power": 0.47,
"rate": 502
},
{
"id": "3e",
"grp": "fs",
"class": 6,
"rating": "C",
"cost": 1797726,
"power": 0.59,
"rate": 627
},
{
"id": "3d",
"grp": "fs",
"class": 6,
"rating": "B",
"cost": 7190903,
"power": 0.71,
"rate": 752
},
{
"id": "3c",
"grp": "fs",
"class": 6,
"rating": "A",
"cost": 28763610,
"power": 0.83,
"rate": 878
},
{
"id": "3b",
"grp": "fs",
"class": 5,
"rating": "E",
"cost": 34026,
"power": 0.3,
"rate": 247
},
{
"id": "3a",
"grp": "fs",
"class": 5,
"rating": "D",
"cost": 141776,
"power": 0.4,
"rate": 330
},
{
"id": "39",
"grp": "fs",
"class": 5,
"rating": "C",
"cost": 567106,
"power": 0.5,
"rate": 412
},
{
"id": "38",
"grp": "fs",
"class": 5,
"rating": "B",
"cost": 2268424,
"power": 0.6,
"rate": 494
},
{
"id": "37",
"grp": "fs",
"class": 5,
"rating": "A",
"cost": 9073694,
"power": 0.7,
"rate": 577
},
{
"id": "36",
"grp": "fs",
"class": 4,
"rating": "E",
"cost": 10734,
"power": 0.25,
"rate": 147
},
{
"id": "35",
"grp": "fs",
"class": 4,
"rating": "D",
"cost": 44724,
"power": 0.33,
"rate": 196
},
{
"id": "34",
"grp": "fs",
"class": 4,
"rating": "C",
"cost": 178898,
"power": 0.41,
"rate": 245
},
{
"id": "33",
"grp": "fs",
"class": 4,
"rating": "B",
"cost": 715591,
"power": 0.49,
"rate": 294
},
{
"id": "32",
"grp": "fs",
"class": 4,
"rating": "A",
"cost": 2862364,
"power": 0.57,
"rate": 342
},
{
"id": "31",
"grp": "fs",
"class": 3,
"rating": "E",
"cost": 3386,
"power": 0.2,
"rate": 75
},
{
"id": "30",
"grp": "fs",
"class": 3,
"rating": "D",
"cost": 14109,
"power": 0.27,
"rate": 100
},
{
"id": "2v",
"grp": "fs",
"class": 3,
"rating": "C",
"cost": 56435,
"power": 0.34,
"rate": 126
},
{
"id": "2u",
"grp": "fs",
"class": 3,
"rating": "B",
"cost": 225738,
"power": 0.41,
"rate": 151
},
{
"id": "2t",
"grp": "fs",
"class": 3,
"rating": "A",
"cost": 902954,
"power": 0.48,
"rate": 176
},
{
"id": "2s",
"grp": "fs",
"class": 2,
"rating": "E",
"cost": 1068,
"power": 0.17,
"rate": 32
},
{
"id": "2r",
"grp": "fs",
"class": 2,
"rating": "D",
"cost": 4451,
"power": 0.22,
"rate": 43
},
{
"id": "2q",
"grp": "fs",
"class": 2,
"rating": "C",
"cost": 17803,
"power": 0.28,
"rate": 54
},
{
"id": "2p",
"grp": "fs",
"class": 2,
"rating": "B",
"cost": 71211,
"power": 0.34,
"rate": 65
},
{
"id": "2o",
"grp": "fs",
"class": 2,
"rating": "A",
"cost": 284844,
"power": 0.39,
"rate": 75
},
{
"id": "2n",
"grp": "fs",
"class": 1,
"rating": "E",
"cost": 309,
"power": 0.14,
"rate": 18
},
{
"id": "2m",
"grp": "fs",
"class": 1,
"rating": "D",
"cost": 1285,
"power": 0.18,
"rate": 24
},
{
"id": "2l",
"grp": "fs",
"class": 1,
"rating": "C",
"cost": 5142,
"power": 0.23,
"rate": 30
},
{
"id": "2k",
"grp": "fs",
"class": 1,
"rating": "B",
"cost": 20568,
"power": 0.28,
"rate": 36
},
{
"id": "2j",
"grp": "fs",
"class": 1,
"rating": "A",
"cost": 82270,
"power": 0.32,
"rate": 42
}
]
}

View File

@@ -1,27 +0,0 @@
{
"fx": [
{ "id": "Ff", "grp":"fx", "class":7, "rating":"E", "cost": 437400, "mass": 80.0, "power":0.55, "range":1.02, "maximum": 8 },
{ "id": "Fg", "grp":"fx", "class":7, "rating":"D", "cost": 874800, "mass": 32.0, "power":0.41, "range":1.36, "maximum": 8 },
{ "id": "Fh", "grp":"fx", "class":7, "rating":"C", "cost":1749600, "mass": 80.0, "power":0.69, "range":1.70, "maximum": 8 },
{ "id": "Fi", "grp":"fx", "class":7, "rating":"B", "cost":3499200, "mass":128.0, "power":0.97, "range":2.04, "maximum": 8 },
{ "id": "Fj", "grp":"fx", "class":7, "rating":"A", "cost":6998400, "mass": 80.0, "power":0.83, "range":2.38, "maximum": 8 },
{ "id": "Fa", "grp":"fx", "class":5, "rating":"E", "cost": 48600, "mass": 20.0, "power":0.40, "range":0.78, "maximum": 4 },
{ "id": "Fb", "grp":"fx", "class":5, "rating":"D", "cost": 97200, "mass": 8.0, "power":0.30, "range":1.04, "maximum": 4 },
{ "id": "Fc", "grp":"fx", "class":5, "rating":"C", "cost": 194400, "mass": 20.0, "power":0.50, "range":1.30, "maximum": 4 },
{ "id": "Fd", "grp":"fx", "class":5, "rating":"B", "cost": 388800, "mass": 32.0, "power":0.97, "range":1.56, "maximum": 4 },
{ "id": "Fe", "grp":"fx", "class":5, "rating":"A", "cost": 777600, "mass": 20.0, "power":0.60, "range":1.82, "maximum": 4 },
{ "id": "F5", "grp":"fx", "class":3, "rating":"E", "cost": 5400, "mass": 5.0, "power":0.27, "range":0.66, "maximum": 2 },
{ "id": "F6", "grp":"fx", "class":3, "rating":"D", "cost": 10800, "mass": 2.0, "power":0.20, "range":0.88, "maximum": 2 },
{ "id": "F7", "grp":"fx", "class":3, "rating":"C", "cost": 21600, "mass": 5.0, "power":0.34, "range":1.10, "maximum": 2 },
{ "id": "F8", "grp":"fx", "class":3, "rating":"B", "cost": 43200, "mass": 8.0, "power":0.48, "range":1.32, "maximum": 2 },
{ "id": "F9", "grp":"fx", "class":3, "rating":"A", "cost": 86400, "mass": 5.0, "power":0.41, "range":1.54, "maximum": 2 },
{ "id": "F0", "grp":"fx", "class":1, "rating":"E", "cost": 600, "mass": 1.3, "power":0.18, "range":0.60, "maximum": 1 },
{ "id": "F1", "grp":"fx", "class":1, "rating":"D", "cost": 1200, "mass": 0.5, "power":0.14, "range":0.80, "maximum": 1 },
{ "id": "F2", "grp":"fx", "class":1, "rating":"C", "cost": 2400, "mass": 1.3, "power":0.23, "range":1.00, "maximum": 1 },
{ "id": "F3", "grp":"fx", "class":1, "rating":"B", "cost": 4800, "mass": 2.0, "power":0.32, "range":1.20, "maximum": 1 },
{ "id": "F4", "grp":"fx", "class":1, "rating":"A", "cost": 9600, "mass": 1.3, "power":0.28, "range":1.40, "maximum": 1 }
]
}

View File

@@ -1,224 +0,0 @@
{
"hb": [
{
"id": "7d",
"grp": "hb",
"class": 7,
"rating": "E",
"cost": 437400,
"power": 0.42,
"range": 2.58,
"maximum": 18,
"time": 25
},
{
"id": "7c",
"grp": "hb",
"class": 7,
"rating": "D",
"cost": 874800,
"power": 0.56,
"range": 3.44,
"maximum": 12,
"time": 22
},
{
"id": "7b",
"grp": "hb",
"class": 7,
"rating": "C",
"cost": 1749600,
"power": 0.7,
"range": 4.3,
"maximum": 15,
"time": 18
},
{
"id": "7a",
"grp": "hb",
"class": 7,
"rating": "B",
"cost": 3499200,
"power": 0.84,
"range": 5.16,
"maximum": 18,
"time": 14
},
{
"id": "79",
"grp": "hb",
"class": 7,
"rating": "A",
"cost": 6998400,
"power": 0.98,
"range": 6.02,
"maximum": 12,
"time": 11
},
{
"id": "78",
"grp": "hb",
"class": 5,
"rating": "E",
"cost": 48600,
"power": 0.3,
"range": 1.98,
"maximum": 9,
"time": 31
},
{
"id": "77",
"grp": "hb",
"class": 5,
"rating": "D",
"cost": 97200,
"power": 0.4,
"range": 2.64,
"maximum": 6,
"time": 26
},
{
"id": "76",
"grp": "hb",
"class": 5,
"rating": "C",
"cost": 194400,
"power": 0.5,
"range": 3.3,
"maximum": 7,
"time": 22
},
{
"id": "75",
"grp": "hb",
"class": 5,
"rating": "B",
"cost": 388800,
"power": 0.6,
"range": 3.96,
"maximum": 9,
"time": 18
},
{
"id": "74",
"grp": "hb",
"class": 5,
"rating": "A",
"cost": 777600,
"power": 0.7,
"range": 4.62,
"maximum": 6,
"time": 13
},
{
"id": "73",
"grp": "hb",
"class": 3,
"rating": "E",
"cost": 5400,
"power": 0.18,
"range": 1.62,
"maximum": 4,
"time": 36
},
{
"id": "72",
"grp": "hb",
"class": 3,
"rating": "D",
"cost": 10800,
"power": 0.24,
"range": 2.16,
"maximum": 3,
"time": 31
},
{
"id": "71",
"grp": "hb",
"class": 3,
"rating": "C",
"cost": 21600,
"power": 0.3,
"range": 2.7,
"maximum": 3,
"time": 26
},
{
"id": "70",
"grp": "hb",
"class": 3,
"rating": "B",
"cost": 43200,
"power": 0.36,
"range": 3.24,
"maximum": 4,
"time": 21
},
{
"id": "6v",
"grp": "hb",
"class": 3,
"rating": "A",
"cost": 86400,
"power": 0.42,
"range": 3.78,
"maximum": 3,
"time": 16
},
{
"id": "6u",
"grp": "hb",
"class": 1,
"rating": "E",
"cost": 600,
"power": 0.12,
"range": 1.5,
"maximum": 2,
"time": 42
},
{
"id": "6t",
"grp": "hb",
"class": 1,
"rating": "D",
"cost": 1200,
"power": 0.16,
"range": 2,
"maximum": 1,
"time": 36
},
{
"id": "6s",
"grp": "hb",
"class": 1,
"rating": "C",
"cost": 2400,
"power": 0.2,
"range": 2.5,
"maximum": 1,
"time": 30
},
{
"id": "6r",
"grp": "hb",
"class": 1,
"rating": "B",
"cost": 4800,
"power": 0.24,
"range": 3,
"maximum": 2,
"time": 24
},
{
"id": "6q",
"grp": "hb",
"class": 1,
"rating": "A",
"cost": 9600,
"power": 0.28,
"range": 3.5,
"maximum": 1,
"time": 18
}
]
}

View File

@@ -1,94 +0,0 @@
{
"hr": [
{
"id": "2e",
"grp": "hr",
"class": 5,
"rating": "E",
"cost": 150000,
"mass": 64,
"armouradd": 160
},
{
"id": "2d",
"grp": "hr",
"class": 5,
"rating": "D",
"cost": 450000,
"mass": 32,
"armouradd": 240
},
{
"id": "2c",
"grp": "hr",
"class": 4,
"rating": "E",
"cost": 65000,
"mass": 32,
"armouradd": 80
},
{
"id": "2b",
"grp": "hr",
"class": 4,
"rating": "D",
"cost": 195000,
"mass": 16,
"armouradd": 120
},
{
"id": "2a",
"grp": "hr",
"class": 3,
"rating": "E",
"cost": 28000,
"mass": 16,
"armouradd": 40
},
{
"id": "29",
"grp": "hr",
"class": 3,
"rating": "D",
"cost": 84000,
"mass": 8,
"armouradd": 60
},
{
"id": "28",
"grp": "hr",
"class": 2,
"rating": "E",
"cost": 12000,
"mass": 8,
"armouradd": 20
},
{
"id": "27",
"grp": "hr",
"class": 2,
"rating": "D",
"cost": 36000,
"mass": 4,
"armouradd": 30
},
{
"id": "26",
"grp": "hr",
"class": 1,
"rating": "E",
"cost": 5000,
"mass": 4,
"armouradd": 10
},
{
"id": "25",
"grp": "hr",
"class": 1,
"rating": "D",
"cost": 15000,
"mass": 2,
"armouradd": 15
}
]
}

View File

@@ -1,12 +0,0 @@
{
"ft": [
{ "id": "f1", "grp": "ft", "class": 1, "rating": "C", "cost": 1000, "capacity": 2 },
{ "id": "f2", "grp": "ft", "class": 2, "rating": "C", "cost": 3750, "capacity": 4 },
{ "id": "f3", "grp": "ft", "class": 3, "rating": "C", "cost": 7063, "capacity": 8 },
{ "id": "f4", "grp": "ft", "class": 4, "rating": "C", "cost": 24734, "capacity": 16 },
{ "id": "f5", "grp": "ft", "class": 5, "rating": "C", "cost": 97754, "capacity": 32 },
{ "id": "f6", "grp": "ft", "class": 6, "rating": "C", "cost": 341577, "capacity": 64 },
{ "id": "f7", "grp": "ft", "class": 7, "rating": "C", "cost": 1780900, "capacity": 128 },
{ "id": "f8", "grp": "ft", "class": 8, "rating": "C", "cost": 5428400, "capacity": 256 }
]
}

View File

@@ -1,12 +0,0 @@
{
"psg": [
{ "id": "p6", "grp": "psg", "class": 1, "rating": "A", "cost": 132195, "mass": 2.5, "power": 2.52, "minmass": 13, "optmass": 25, "maxmass": 63, "minmul": 2, "optmul": 1.5, "maxmul": 1 },
{ "id": "p5", "grp": "psg", "class": 2, "rating": "A", "cost": 240336, "mass": 5, "power": 3.15, "minmass": 23, "optmass": 55, "maxmass": 138, "minmul": 2, "optmul": 1.5, "maxmul": 1 },
{ "id": "p4", "grp": "psg", "class": 3, "rating": "A", "cost": 761868, "mass": 10, "power": 3.78, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 2, "optmul": 1.5, "maxmul": 1 },
{ "id": "p3", "grp": "psg", "class": 4, "rating": "A", "cost": 2415120, "mass": 20, "power": 4.62, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 2, "optmul": 1.5, "maxmul": 1 },
{ "id": "p2", "grp": "psg", "class": 5, "rating": "A", "cost": 7655930, "mass": 40, "power": 5.46, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 2, "optmul": 1.5, "maxmul": 1 },
{ "id": "p1", "grp": "psg", "class": 6, "rating": "A", "cost": 24269297, "mass": 80, "power": 6.51, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 2, "optmul": 1.5, "maxmul": 1 },
{ "id": "p0", "grp": "psg", "class": 7, "rating": "A", "cost": 76933668, "mass": 160, "power": 7.35, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 2, "optmul": 1.5, "maxmul": 1 },
{ "id": "p7", "grp": "psg", "class": 8, "rating": "A", "cost": 243879729, "mass": 320, "power": 8.4, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 2, "optmul": 1.5, "maxmul": 1 }
]
}

View File

@@ -1,27 +0,0 @@
{
"pc": [
{ "id": "Pf", "grp":"pc", "class":7, "rating":"E", "cost": 437400, "mass": 80.0, "power":0.55, "range": 5.10, "maximum": 8 },
{ "id": "Pg", "grp":"pc", "class":7, "rating":"D", "cost": 874800, "mass": 32.0, "power":0.41, "range": 6.80, "maximum": 8 },
{ "id": "Ph", "grp":"pc", "class":7, "rating":"C", "cost":1749600, "mass": 80.0, "power":0.69, "range": 8.50, "maximum": 8 },
{ "id": "Pi", "grp":"pc", "class":7, "rating":"B", "cost":3499200, "mass":128.0, "power":0.97, "range":10.20, "maximum": 8 },
{ "id": "Pj", "grp":"pc", "class":7, "rating":"A", "cost":6998400, "mass": 80.0, "power":0.83, "range":11.90, "maximum": 8 },
{ "id": "Pa", "grp":"pc", "class":5, "rating":"E", "cost": 48600, "mass": 20.0, "power":0.40, "range": 3.90, "maximum": 4 },
{ "id": "Pb", "grp":"pc", "class":5, "rating":"D", "cost": 97200, "mass": 8.0, "power":0.30, "range": 5.20, "maximum": 4 },
{ "id": "Pc", "grp":"pc", "class":5, "rating":"C", "cost": 194400, "mass": 20.0, "power":0.50, "range": 6.50, "maximum": 4 },
{ "id": "Pd", "grp":"pc", "class":5, "rating":"B", "cost": 388800, "mass": 32.0, "power":0.97, "range": 7.80, "maximum": 4 },
{ "id": "Pe", "grp":"pc", "class":5, "rating":"A", "cost": 777600, "mass": 20.0, "power":0.60, "range": 9.10, "maximum": 4 },
{ "id": "P5", "grp":"pc", "class":3, "rating":"E", "cost": 5400, "mass": 5.0, "power":0.27, "range": 3.30, "maximum": 2 },
{ "id": "P6", "grp":"pc", "class":3, "rating":"D", "cost": 10800, "mass": 2.0, "power":0.20, "range": 4.40, "maximum": 2 },
{ "id": "P7", "grp":"pc", "class":3, "rating":"C", "cost": 21600, "mass": 5.0, "power":0.34, "range": 5.50, "maximum": 2 },
{ "id": "P8", "grp":"pc", "class":3, "rating":"B", "cost": 43200, "mass": 8.0, "power":0.48, "range": 6.60, "maximum": 2 },
{ "id": "P9", "grp":"pc", "class":3, "rating":"A", "cost": 86400, "mass": 5.0, "power":0.41, "range": 7.70, "maximum": 2 },
{ "id": "P0", "grp":"pc", "class":1, "rating":"E", "cost": 600, "mass": 1.3, "power":0.18, "range": 3.00, "maximum": 1 },
{ "id": "P1", "grp":"pc", "class":1, "rating":"D", "cost": 1200, "mass": 0.5, "power":0.14, "range": 4.00, "maximum": 1 },
{ "id": "P2", "grp":"pc", "class":1, "rating":"C", "cost": 2400, "mass": 1.3, "power":0.23, "range": 5.00, "maximum": 1 },
{ "id": "P3", "grp":"pc", "class":1, "rating":"B", "cost": 4800, "mass": 2.0, "power":0.32, "range": 6.00, "maximum": 1 },
{ "id": "P4", "grp":"pc", "class":1, "rating":"A", "cost": 9600, "mass": 1.3, "power":0.28, "range": 7.00, "maximum": 1 }
]
}

View File

@@ -1,184 +0,0 @@
{
"rf": [
{
"id": "23",
"grp": "rf",
"class": 4,
"rating": "E",
"cost": 55566,
"power": 0.25,
"bins": 4
},
{
"id": "22",
"grp": "rf",
"class": 4,
"rating": "D",
"cost": 166698,
"power": 0.33,
"bins": 5
},
{
"id": "21",
"grp": "rf",
"class": 4,
"rating": "C",
"cost": 500094,
"power": 0.41,
"bins": 7
},
{
"id": "20",
"grp": "rf",
"class": 4,
"rating": "B",
"cost": 1500282,
"power": 0.49,
"bins": 9
},
{
"id": "1v",
"grp": "rf",
"class": 4,
"rating": "A",
"cost": 4500846,
"power": 0.57,
"bins": 10
},
{
"id": "1u",
"grp": "rf",
"class": 3,
"rating": "E",
"cost": 26460,
"power": 0.2,
"bins": 3
},
{
"id": "1t",
"grp": "rf",
"class": 3,
"rating": "D",
"cost": 79380,
"power": 0.27,
"bins": 4
},
{
"id": "1s",
"grp": "rf",
"class": 3,
"rating": "C",
"cost": 238140,
"power": 0.34,
"bins": 6
},
{
"id": "1r",
"grp": "rf",
"class": 3,
"rating": "B",
"cost": 714420,
"power": 0.41,
"bins": 7
},
{
"id": "1q",
"grp": "rf",
"class": 3,
"rating": "A",
"cost": 2143260,
"power": 0.48,
"bins": 8
},
{
"id": "1p",
"grp": "rf",
"class": 2,
"rating": "E",
"cost": 12600,
"power": 0.17,
"bins": 2
},
{
"id": "1o",
"grp": "rf",
"class": 2,
"rating": "D",
"cost": 37800,
"power": 0.22,
"bins": 3
},
{
"id": "1n",
"grp": "rf",
"class": 2,
"rating": "C",
"cost": 113400,
"power": 0.28,
"bins": 4
},
{
"id": "1m",
"grp": "rf",
"class": 2,
"rating": "B",
"cost": 340200,
"power": 0.34,
"bins": 5
},
{
"id": "1l",
"grp": "rf",
"class": 2,
"rating": "A",
"cost": 1020600,
"power": 0.39,
"bins": 6
},
{
"id": "1k",
"grp": "rf",
"class": 1,
"rating": "E",
"cost": 6000,
"power": 0.14,
"bins": 1
},
{
"id": "1j",
"grp": "rf",
"class": 1,
"rating": "D",
"cost": 18000,
"power": 0.18,
"bins": 1
},
{
"id": "1i",
"grp": "rf",
"class": 1,
"rating": "C",
"cost": 54000,
"power": 0.23,
"bins": 2
},
{
"id": "1h",
"grp": "rf",
"class": 1,
"rating": "B",
"cost": 162000,
"power": 0.28,
"bins": 3
},
{
"id": "1g",
"grp": "rf",
"class": 1,
"rating": "A",
"cost": 486000,
"power": 0.32,
"bins": 4
}
]
}

View File

@@ -1,49 +0,0 @@
{
"sc": [
{
"id": "2f",
"grp": "sc",
"name": "Advanced Discovery Scanner",
"class": 1,
"rating": "C",
"cost": 1545000,
"mass": 2,
"power": 0,
"rangeLS": null
},
{
"id": "2g",
"grp": "sc",
"name": "Intermediate Discovery Scanner",
"class": 1,
"rating": "D",
"cost": 505000,
"mass": 2,
"power": 0,
"rangeLS": 1000
},
{
"id": "2h",
"grp": "sc",
"name": "Basic Discovery Scanner",
"class": 1,
"rating": "E",
"cost": 1000,
"mass": 2,
"power": 0,
"rangeLS": 500
},
{
"id": "2i",
"grp": "sc",
"name": "Detailed Surface Scanner",
"class": 1,
"retractedOnly": 1,
"rating": "C",
"cost": 250000,
"mass": 1.3,
"power": 0.6,
"rangeLS": 0.33
}
]
}

View File

@@ -1,51 +0,0 @@
{
"scb": [
{ "id": "65", "grp": "scb", "class": 8, "rating": "E", "cost": 697584, "mass": 160, "power": 1.44, "cells": 6, "rechargeRating": "C", "recharge": 0 },
{ "id": "64", "grp": "scb", "class": 8, "rating": "D", "cost": 1743961, "mass": 64, "power": 1.92, "cells": 4, "rechargeRating": "C", "recharge": 0 },
{ "id": "63", "grp": "scb", "class": 8, "rating": "C", "cost": 4359903, "mass": 160, "power": 2.4, "cells": 5, "rechargeRating": "B", "recharge": 0 },
{ "id": "62", "grp": "scb", "class": 8, "rating": "B", "cost": 10899756, "mass": 256, "power": 2.88, "cells": 6, "rechargeRating": "A", "recharge": 0 },
{ "id": "61", "grp": "scb", "class": 8, "rating": "A", "cost": 27249391, "mass": 160, "power": 3.36, "cells": 5, "rechargeRating": "A", "recharge": 0 },
{ "id": "60", "grp": "scb", "class": 7, "rating": "E", "cost": 249137, "mass": 80, "power": 1.24, "cells": 6, "rechargeRating": "D", "recharge": 97 },
{ "id": "5v", "grp": "scb", "class": 7, "rating": "D", "cost": 622843, "mass": 32, "power": 1.66, "cells": 4, "rechargeRating": "C", "recharge": 130 },
{ "id": "5u", "grp": "scb", "class": 7, "rating": "C", "cost": 1557108, "mass": 80, "power": 2.07, "cells": 5, "rechargeRating": "B", "recharge": 163 },
{ "id": "5t", "grp": "scb", "class": 7, "rating": "B", "cost": 3892770, "mass": 128, "power": 2.48, "cells": 6, "rechargeRating": "B", "recharge": 197 },
{ "id": "5s", "grp": "scb", "class": 7, "rating": "A", "cost": 9731925, "mass": 80, "power": 2.9, "cells": 5, "rechargeRating": "A", "recharge": 230 },
{ "id": "5r", "grp": "scb", "class": 6, "rating": "E", "cost": 88978, "mass": 40, "power": 1.06, "cells": 6, "rechargeRating": "D", "recharge": 92 },
{ "id": "5q", "grp": "scb", "class": 6, "rating": "D", "cost": 222444, "mass": 16, "power": 1.42, "cells": 4, "rechargeRating": "C", "recharge": 120 },
{ "id": "5p", "grp": "scb", "class": 6, "rating": "C", "cost": 556110, "mass": 40, "power": 1.77, "cells": 5, "rechargeRating": "C", "recharge": 148 },
{ "id": "5o", "grp": "scb", "class": 6, "rating": "B", "cost": 1390275, "mass": 64, "power": 2.12, "cells": 6, "rechargeRating": "B", "recharge": 176 },
{ "id": "5n", "grp": "scb", "class": 6, "rating": "A", "cost": 3475688, "mass": 40, "power": 2.48, "cells": 5, "rechargeRating": "A", "recharge": 204 },
{ "id": "5m", "grp": "scb", "class": 5, "rating": "E", "cost": 31778, "mass": 20, "power": 0.9, "cells": 5, "rechargeRating": "D", "recharge": 82 },
{ "id": "5l", "grp": "scb", "class": 5, "rating": "D", "cost": 79444, "mass": 8, "power": 1.2, "cells": 3, "rechargeRating": "C", "recharge": 109 },
{ "id": "5k", "grp": "scb", "class": 5, "rating": "C", "cost": 198611, "mass": 20, "power": 1.5, "cells": 4, "rechargeRating": "C", "recharge": 135 },
{ "id": "5j", "grp": "scb", "class": 5, "rating": "B", "cost": 496527, "mass": 32, "power": 1.8, "cells": 5, "rechargeRating": "B", "recharge": 162 },
{ "id": "5i", "grp": "scb", "class": 5, "rating": "A", "cost": 1241317, "mass": 20, "power": 2.1, "cells": 4, "rechargeRating": "B", "recharge": 189 },
{ "id": "5h", "grp": "scb", "class": 4, "rating": "E", "cost": 11349, "mass": 10, "power": 0.74, "cells": 5, "rechargeRating": "D", "recharge": 72 },
{ "id": "5g", "grp": "scb", "class": 4, "rating": "D", "cost": 28373, "mass": 4, "power": 0.98, "cells": 3, "rechargeRating": "D", "recharge": 94 },
{ "id": "5f", "grp": "scb", "class": 4, "rating": "C", "cost": 70932, "mass": 10, "power": 1.23, "cells": 4, "rechargeRating": "C", "recharge": 117 },
{ "id": "5e", "grp": "scb", "class": 4, "rating": "B", "cost": 177331, "mass": 16, "power": 1.48, "cells": 5, "rechargeRating": "C", "recharge": 140 },
{ "id": "5d", "grp": "scb", "class": 4, "rating": "A", "cost": 443328, "mass": 10, "power": 1.72, "cells": 4, "rechargeRating": "B", "recharge": 163 },
{ "id": "5c", "grp": "scb", "class": 3, "rating": "E", "cost": 4053, "mass": 5, "power": 0.61, "cells": 5, "rechargeRating": "D", "recharge": 61 },
{ "id": "5b", "grp": "scb", "class": 3, "rating": "D", "cost": 10133, "mass": 2, "power": 0.82, "cells": 3, "rechargeRating": "D", "recharge": 80 },
{ "id": "5a", "grp": "scb", "class": 3, "rating": "C", "cost": 25333, "mass": 5, "power": 1.02, "cells": 4, "rechargeRating": "D", "recharge": 100 },
{ "id": "59", "grp": "scb", "class": 3, "rating": "B", "cost": 63333, "mass": 8, "power": 1.22, "cells": 5, "rechargeRating": "C", "recharge": 119 },
{ "id": "58", "grp": "scb", "class": 3, "rating": "A", "cost": 158331, "mass": 5, "power": 1.43, "cells": 4, "rechargeRating": "C", "recharge": 138 },
{ "id": "57", "grp": "scb", "class": 2, "rating": "E", "cost": 1448, "mass": 2.5, "power": 0.5, "cells": 5, "rechargeRating": "E", "recharge": 46 },
{ "id": "56", "grp": "scb", "class": 2, "rating": "D", "cost": 3619, "mass": 1, "power": 0.67, "cells": 3, "rechargeRating": "D", "recharge": 61 },
{ "id": "55", "grp": "scb", "class": 2, "rating": "C", "cost": 9048, "mass": 2.5, "power": 0.84, "cells": 4, "rechargeRating": "D", "recharge": 77 },
{ "id": "54", "grp": "scb", "class": 2, "rating": "B", "cost": 22619, "mass": 4, "power": 1.01, "cells": 5, "rechargeRating": "D", "recharge": 92 },
{ "id": "53", "grp": "scb", "class": 2, "rating": "A", "cost": 56547, "mass": 2.5, "power": 1.18, "cells": 4, "rechargeRating": "C", "recharge": 107 },
{ "id": "52", "grp": "scb", "class": 1, "rating": "E", "cost": 517, "mass": 1.3, "power": 0.41, "cells": 4, "rechargeRating": "E", "recharge": 31 },
{ "id": "51", "grp": "scb", "class": 1, "rating": "D", "cost": 1293, "mass": 0.5, "power": 0.55, "cells": 2, "rechargeRating": "E", "recharge": 41 },
{ "id": "50", "grp": "scb", "class": 1, "rating": "C", "cost": 3231, "mass": 1.3, "power": 0.69, "cells": 3, "rechargeRating": "D", "recharge": 51 },
{ "id": "4v", "grp": "scb", "class": 1, "rating": "B", "cost": 8078, "mass": 2, "power": 0.83, "cells": 4, "rechargeRating": "D", "recharge": 61 },
{ "id": "4u", "grp": "scb", "class": 1, "rating": "A", "cost": 20195, "mass": 1.3, "power": 0.97, "cells": 3, "rechargeRating": "D", "recharge": 72 }
]
}

View File

@@ -1,39 +0,0 @@
{
"sg": [
{ "id": "4t", "grp": "sg", "class": 8, "rating": "E", "cost": 2007241, "mass": 160, "power": 2.4, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4s", "grp": "sg", "class": 8, "rating": "D", "cost": 6021722, "mass": 64, "power": 3.2, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4r", "grp": "sg", "class": 8, "rating": "C", "cost": 18065165, "mass": 160, "power": 4, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4q", "grp": "sg", "class": 8, "rating": "B", "cost": 54195495, "mass": 256, "power": 4.8, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4p", "grp": "sg", "class": 8, "rating": "A", "cost": 162586486, "mass": 160, "power": 5.6, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "4o", "grp": "sg", "class": 7, "rating": "E", "cost": 633199, "mass": 80, "power": 2.1, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4n", "grp": "sg", "class": 7, "rating": "D", "cost": 1899597, "mass": 32, "power": 2.8, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4m", "grp": "sg", "class": 7, "rating": "C", "cost": 5698790, "mass": 80, "power": 3.5, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4l", "grp": "sg", "class": 7, "rating": "B", "cost": 17096371, "mass": 128, "power": 4.2, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4k", "grp": "sg", "class": 7, "rating": "A", "cost": 51289112, "mass": 80, "power": 4.9, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "4j", "grp": "sg", "class": 6, "rating": "E", "cost": 199747, "mass": 40, "power": 1.86, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4i", "grp": "sg", "class": 6, "rating": "D", "cost": 599242, "mass": 16, "power": 2.48, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4h", "grp": "sg", "class": 6, "rating": "C", "cost": 1797726, "mass": 40, "power": 3.1, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4g", "grp": "sg", "class": 6, "rating": "B", "cost": 5393177, "mass": 64, "power": 3.72, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4f", "grp": "sg", "class": 6, "rating": "A", "cost": 16179531, "mass": 40, "power": 4.34, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "4e", "grp": "sg", "class": 5, "rating": "E", "cost": 63012, "mass": 20, "power": 1.56, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4d", "grp": "sg", "class": 5, "rating": "D", "cost": 189035, "mass": 8, "power": 2.08, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4c", "grp": "sg", "class": 5, "rating": "C", "cost": 567106, "mass": 20, "power": 2.6, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4b", "grp": "sg", "class": 5, "rating": "B", "cost": 1701318, "mass": 32, "power": 3.12, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4a", "grp": "sg", "class": 5, "rating": "A", "cost": 5103953, "mass": 20, "power": 3.64, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "49", "grp": "sg", "class": 4, "rating": "E", "cost": 19878, "mass": 10, "power": 1.32, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "48", "grp": "sg", "class": 4, "rating": "D", "cost": 59633, "mass": 4, "power": 1.76, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "47", "grp": "sg", "class": 4, "rating": "C", "cost": 178898, "mass": 10, "power": 2.2, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "46", "grp": "sg", "class": 4, "rating": "B", "cost": 536693, "mass": 16, "power": 2.64, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "45", "grp": "sg", "class": 4, "rating": "A", "cost": 1610080, "mass": 10, "power": 3.08, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "44", "grp": "sg", "class": 3, "rating": "E", "cost": 6271, "mass": 5, "power": 1.08, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "43", "grp": "sg", "class": 3, "rating": "D", "cost": 18812, "mass": 2, "power": 1.44, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "42", "grp": "sg", "class": 3, "rating": "C", "cost": 56435, "mass": 5, "power": 1.8, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "41", "grp": "sg", "class": 3, "rating": "B", "cost": 169304, "mass": 8, "power": 2.16, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "40", "grp": "sg", "class": 3, "rating": "A", "cost": 507912, "mass": 5, "power": 2.52, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "3v", "grp": "sg", "class": 2, "rating": "E", "cost": 1978, "mass": 2.5, "power": 0.9, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "3u", "grp": "sg", "class": 2, "rating": "D", "cost": 5934, "mass": 1, "power": 1.2, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "3t", "grp": "sg", "class": 2, "rating": "C", "cost": 17803, "mass": 2.5, "power": 1.5, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "3s", "grp": "sg", "class": 2, "rating": "B", "cost": 53408, "mass": 4, "power": 1.8, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "3r", "grp": "sg", "class": 2, "rating": "A", "cost": 160224, "mass": 2.5, "power": 2.1, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 }
]
}

View File

@@ -1,70 +0,0 @@
{
"adder": {
"properties": {
"name": "Adder",
"manufacturer": "Zorgon Peterson",
"class": 1,
"hullCost": 39993,
"speed": 220,
"boost": 320,
"boostEnergy": 9,
"agility": 8,
"baseShieldStrength": 60,
"baseArmour": 162,
"hullMass": 35,
"masslock": 7,
"pipSpeed": 0.13625
},
"retailCost": 87808,
"slots": {
"common": [
3,
3,
3,
1,
2,
3,
3
],
"hardpoints": [
2,
1,
1,
0,
0
],
"internal": [
3,
3,
2,
2,
1
]
},
"defaults": {
"common": [
"3E",
"3E",
"3E",
"1E",
"2E",
"3E",
"3C"
],
"hardpoints": [
0,
17,
17,
0,
0
],
"internal": [
"01",
"44",
"00",
0,
"2h"
]
}
}
}

View File

@@ -1,104 +0,0 @@
{
"anaconda": {
"properties": {
"name": "Anaconda",
"manufacturer": "Faulcon DeLacy",
"class": 3,
"hullCost": 141889932,
"speed": 180,
"boost": 240,
"boostEnergy": 29,
"agility": 2,
"baseShieldStrength": 350,
"baseArmour": 945,
"hullMass": 400,
"masslock": 23,
"pipSpeed": 0.13875
},
"retailCost": 146969451,
"slots": {
"common": [
8,
7,
6,
5,
8,
8,
5
],
"hardpoints": [
4,
3,
3,
3,
2,
2,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0
],
"internal": [
7,
6,
6,
6,
5,
5,
5,
4,
4,
4,
2
]
},
"defaults": {
"common": [
"8E",
"7E",
"6E",
"5E",
"8E",
"8E",
"5C"
],
"hardpoints": [
0,
0,
0,
0,
0,
0,
17,
17,
0,
0,
0,
0,
0,
0,
0,
0
],
"internal": [
"05",
"04",
"4j",
0,
"03",
0,
0,
0,
0,
"2h",
"00"
]
}
}
}

View File

@@ -1,84 +0,0 @@
{
"asp": {
"properties": {
"name": "Asp Explorer",
"manufacturer": "Lakon",
"class": 2,
"hullCost": 6135658,
"speed": 250,
"boost": 340,
"boostEnergy": 14,
"agility": 6,
"baseShieldStrength": 140,
"baseArmour": 378,
"hullMass": 280,
"masslock": 11,
"pipSpeed": 0.13
},
"retailCost": 6661153,
"slots": {
"common": [
5,
5,
5,
4,
4,
5,
5
],
"hardpoints": [
2,
2,
1,
1,
1,
1,
0,
0,
0,
0
],
"internal": [
6,
5,
3,
3,
3,
2,
2
]
},
"defaults": {
"common": [
"5E",
"5E",
"5E",
"4E",
"4E",
"5E",
"5C"
],
"hardpoints": [
0,
0,
17,
17,
0,
0,
0,
0,
0,
0
],
"internal": [
"04",
"4e",
"01",
0,
0,
"00",
"2h"
]
}
}
}

View File

@@ -1,74 +0,0 @@
{
"cobra_mk_iii": {
"properties": {
"name": "Cobra Mk III",
"manufacturer": "Faulcon DeLacy",
"class": 1,
"hullCost": 235787,
"speed": 280,
"boost": 400,
"boostEnergy": 11,
"agility": 6,
"baseShieldStrength": 80,
"baseArmour": 216,
"hullMass": 180,
"masslock": 8,
"pipSpeed": 0.125
},
"retailCost": 379718,
"slots": {
"common": [
4,
4,
4,
3,
3,
3,
4
],
"hardpoints": [
2,
2,
1,
1,
0,
0
],
"internal": [
4,
4,
4,
2,
2,
2
]
},
"defaults": {
"common": [
"4E",
"4E",
"4E",
"3E",
"3E",
"3E",
"4C"
],
"hardpoints": [
17,
17,
0,
0,
0,
0
],
"internal": [
"02",
"02",
"49",
"00",
0,
"2h"
]
}
}
}

View File

@@ -1,75 +0,0 @@
{
"diamondback": {
"properties": {
"name": "Diamondback Scout",
"manufacturer": "Lakon",
"class": 1,
"hullCost": 461341,
"speed": 283,
"boost": 380,
"boostEnergy": 11,
"agility": 8,
"baseShieldStrength": 118,
"baseArmour": 216,
"hullMass": 170,
"masslock": 8,
"pipSpeed": 0.09875
},
"retailCost": 564329,
"minMassFilter": 180.5,
"slots": {
"common": [
4,
4,
4,
2,
3,
2,
4
],
"hardpoints": [
2,
2,
1,
1,
0,
0,
0,
0
],
"internal": [
3,
3,
3,
2
]
},
"defaults": {
"common": [
"4E",
"4E",
"4E",
"2E",
"3E",
"2E",
"4C"
],
"hardpoints": [
17,
17,
0,
0,
0,
0,
0,
0
],
"internal": [
"44",
0,
0,
"2h"
]
}
}
}

View File

@@ -1,74 +0,0 @@
{
"diamondback_explorer": {
"properties": {
"name": "Diamondback Explorer",
"manufacturer": "Lakon",
"class": 1,
"hullCost": 1635691,
"speed": 260,
"boost": 340,
"boostEnergy": 14,
"agility": 5,
"baseShieldStrength": 146,
"baseArmour": 270,
"hullMass": 298,
"masslock": 10,
"pipSpeed": 0.09625
},
"retailCost": 1894760,
"slots": {
"common": [
4,
4,
5,
3,
4,
3,
5
],
"hardpoints": [
3,
2,
2,
0,
0,
0,
0
],
"internal": [
4,
4,
3,
3,
2
]
},
"defaults": {
"common": [
"4E",
"4E",
"5E",
"3E",
"4E",
"3E",
"5C"
],
"hardpoints": [
0,
17,
17,
0,
0,
0,
0
],
"internal": [
"49",
"02",
"01",
0,
"2h"
]
}
}
}

View File

@@ -1,64 +0,0 @@
{
"eagle": {
"properties": {
"name": "Eagle",
"manufacturer": "Core Dynamics",
"class": 1,
"hullCost": 10446,
"speed": 240,
"boost": 350,
"boostEnergy": 9,
"agility": 10,
"baseShieldStrength": 60,
"baseArmour": 72,
"hullMass": 50,
"masslock": 6,
"pipSpeed": 0.0625
},
"retailCost": 44800,
"slots": {
"common": [
2,
3,
3,
1,
2,
2,
2
],
"hardpoints": [
1,
1,
1,
0
],
"internal": [
3,
2,
1
]
},
"defaults": {
"common": [
"2E",
"3E",
"3E",
"1E",
"2E",
"2E",
"2C"
],
"hardpoints": [
17,
17,
0,
0
],
"internal": [
"44",
"00",
"2h"
]
}
}
}

View File

@@ -1,78 +0,0 @@
{
"federal_assault_ship": {
"properties": {
"name": "Federal Assault Ship",
"manufacturer": "Core Dynamics",
"class": 2,
"hullCost": 19071993,
"speed": 210,
"boost": 350,
"boostEnergy": 21,
"agility": 6,
"baseShieldStrength": 200,
"baseArmour": 540,
"hullMass": 480,
"masslock": 14,
"pipSpeed": 0.11125
},
"retailCost": 19814205,
"slots": {
"common": [
6,
6,
5,
5,
6,
4,
4
],
"hardpoints": [
3,
3,
2,
2,
0,
0,
0,
0
],
"internal": [
5,
5,
4,
3,
2,
2
]
},
"defaults": {
"common": [
"6E",
"6E",
"5E",
"5E",
"6E",
"4E",
"4C"
],
"hardpoints": [
0,
0,
17,
17,
0,
0,
0,
0
],
"internal": [
"4e",
"03",
"02",
"02",
0,
0
]
}
}
}

View File

@@ -1,82 +0,0 @@
{
"federal_dropship": {
"properties": {
"name": "Federal Dropship",
"manufacturer": "Core Dynamics",
"class": 2,
"hullCost": 18969990,
"speed": 180,
"boost": 300,
"boostEnergy": 21,
"agility": 2,
"baseShieldStrength": 200,
"baseArmour": 540,
"hullMass": 580,
"masslock": 14,
"pipSpeed": 0.0725
},
"retailCost": 19814205,
"slots": {
"common": [
6,
6,
5,
5,
6,
4,
4
],
"hardpoints": [
3,
2,
2,
2,
2,
0,
0,
0,
0
],
"internal": [
6,
5,
5,
4,
3,
3,
2
]
},
"defaults": {
"common": [
"6E",
"6E",
"5E",
"5E",
"6E",
"4E",
"4C"
],
"hardpoints": [
0,
17,
17,
0,
0,
0,
0,
0,
0
],
"internal": [
"04",
"03",
"4e",
"02",
0,
0,
"2h"
]
}
}
}

View File

@@ -1,82 +0,0 @@
{
"federal_gunship": {
"properties": {
"name": "Federal Gunship",
"manufacturer": "Core Dynamics",
"class": 2,
"hullCost": 44774591,
"speed": 170,
"boost": 280,
"boostEnergy": 21,
"agility": 2,
"baseShieldStrength": 250,
"baseArmour": 630,
"hullMass": 580,
"masslock": 14,
"pipSpeed": 0.1025
},
"retailCost": 45814000,
"slots": {
"common": [
6,
6,
5,
5,
7,
5,
4
],
"hardpoints": [
3,
2,
2,
2,
2,
1,
1,
0,
0,
0,
0
],
"internal": [
6,
6,
5,
2,
2
]
},
"defaults": {
"common": [
"6E",
"6E",
"5E",
"5E",
"7E",
"5E",
"4C"
],
"hardpoints": [
0,
17,
17,
0,
0,
0,
0,
0,
0,
0,
0
],
"internal": [
0,
"4j",
"03",
0,
"2h"
]
}
}
}

View File

@@ -1,82 +0,0 @@
{
"fer_de_lance": {
"properties": {
"name": "Fer-de-Lance",
"manufacturer": "Zorgon Peterson",
"class": 2,
"hullCost": 51232230,
"speed": 260,
"boost": 350,
"boostEnergy": 21,
"agility": 6,
"baseShieldStrength": 300,
"baseArmour": 405,
"hullMass": 250,
"masslock": 12,
"pipSpeed": 0.03875
},
"retailCost": 51567040,
"slots": {
"common": [
5,
5,
4,
4,
6,
4,
3
],
"hardpoints": [
4,
2,
2,
2,
2,
0,
0,
0,
0,
0,
0
],
"internal": [
5,
4,
4,
2,
1
]
},
"defaults": {
"common": [
"5E",
"5E",
"4E",
"4E",
"6E",
"4E",
"3C"
],
"hardpoints": [
0,
17,
17,
0,
0,
0,
0,
0,
0,
0,
0
],
"internal": [
"03",
"49",
"02",
0,
"2h"
]
}
}
}

View File

@@ -1,64 +0,0 @@
{
"hauler": {
"properties": {
"name": "Hauler",
"manufacturer": "Zorgon Peterson",
"class": 1,
"hullCost": 29807,
"speed": 200,
"boost": 300,
"agility": 6,
"boostEnergy": 7,
"baseShieldStrength": 50,
"baseArmour": 90,
"hullMass": 14,
"masslock": 6,
"pipSpeed": 0.1625
},
"retailCost": 52720,
"slots": {
"common": [
2,
2,
2,
1,
1,
1,
2
],
"hardpoints": [
1,
0,
0
],
"internal": [
3,
3,
2,
1
]
},
"defaults": {
"common": [
"2E",
"2E",
"2E",
"1E",
"1E",
"1E",
"2C"
],
"hardpoints": [
17,
0,
0
],
"internal": [
"01",
"01",
"3v",
"2h"
]
}
}
}

View File

@@ -1,82 +0,0 @@
{
"imperial_clipper": {
"properties": {
"name": "Imperial Clipper",
"manufacturer": "Gutamaya",
"class": 3,
"hullCost": 21077784,
"speed": 300,
"boost": 380,
"boostEnergy": 21,
"agility": 2,
"baseShieldStrength": 180,
"baseArmour": 486,
"hullMass": 400,
"masslock": 12,
"pipSpeed": 0.1
},
"retailCost": 22296860,
"slots": {
"common": [
6,
6,
5,
5,
6,
5,
4
],
"hardpoints": [
3,
3,
2,
2,
0,
0,
0,
0
],
"internal": [
7,
6,
4,
4,
3,
3,
2,
2
]
},
"defaults": {
"common": [
"6E",
"6E",
"5E",
"5E",
"6E",
"5E",
"4C"
],
"hardpoints": [
0,
0,
17,
17,
0,
0,
0,
0
],
"internal": [
"05",
"4j",
"02",
0,
0,
0,
"00",
"2h"
]
}
}
}

View File

@@ -1,76 +0,0 @@
{
"imperial_courier": {
"properties": {
"name": "Imperial Courier",
"manufacturer": "Gutamaya",
"class": 1,
"hullCost": 2481552,
"speed": 280,
"boost": 380,
"boostEnergy": 11,
"agility": 6,
"baseShieldStrength": 197,
"baseArmour": 144,
"hullMass": 35,
"masslock": 7,
"pipSpeed": 0.05375
},
"retailCost": 2542931,
"slots": {
"common": [
4,
3,
3,
1,
3,
2,
3
],
"hardpoints": [
2,
2,
2,
0,
0,
0,
0
],
"internal": [
3,
3,
2,
2,
2,
1
]
},
"defaults": {
"common": [
"4E",
"3E",
"3E",
"1E",
"3E",
"2E",
"3C"
],
"hardpoints": [
17,
17,
0,
0,
0,
0,
0
],
"internal": [
"01",
"01",
"3v",
"00",
"00",
"2h"
]
}
}
}

View File

@@ -1,64 +0,0 @@
{
"imperial_eagle": {
"properties": {
"name": "Imperial Eagle",
"manufacturer": "Core Dynamics",
"class": 1,
"hullCost": 72186,
"speed": 300,
"boost": 400,
"boostEnergy": 9,
"agility": 6,
"baseShieldStrength": 80,
"baseArmour": 108,
"hullMass": 50,
"masslock": 6,
"pipSpeed": 0.075
},
"retailCost": 110833,
"slots": {
"common": [
3,
3,
3,
1,
2,
2,
2
],
"hardpoints": [
2,
1,
1,
0
],
"internal": [
3,
2,
1
]
},
"defaults": {
"common": [
"3E",
"3E",
"3E",
"1E",
"2E",
"2E",
"2C"
],
"hardpoints": [
0,
17,
17,
0
],
"internal": [
"44",
"00",
"2h"
]
}
}
}

View File

@@ -1,80 +0,0 @@
{
"orca": {
"properties": {
"name": "Orca",
"manufacturer": "Saud Kruger",
"class": 3,
"hullCost": 47798079,
"speed": 300,
"boost": 380,
"boostEnergy": 17,
"agility": 2,
"baseShieldStrength": 220,
"baseArmour": 396,
"hullMass": 580,
"masslock": 13,
"pipSpeed": 0.08375
},
"retailCost": 48539887,
"slots": {
"common": [
5,
6,
5,
6,
5,
4,
4
],
"hardpoints": [
3,
2,
2,
0,
0,
0,
0
],
"internal": [
{ "class": 6, "eligible": { "cr": 1, "hr": 1 } },
{ "class": 5, "eligible": { "cr": 1, "hr": 1 } },
5,
5,
4,
3,
2,
2
]
},
"defaults": {
"common": [
"5E",
"6E",
"5E",
"6E",
"5E",
"4E",
"4C"
],
"hardpoints": [
0,
17,
17,
0,
0,
0,
0
],
"internal": [
"04",
"03",
"03",
"4e",
"02",
0,
0,
"2h"
]
}
}
}

View File

@@ -1,86 +0,0 @@
{
"python": {
"properties": {
"name": "Python",
"manufacturer": "Faulcon DeLacy",
"class": 2,
"hullCost": 55171395,
"speed": 230,
"boost": 300,
"boostEnergy": 24,
"agility": 6,
"baseShieldStrength": 260,
"baseArmour": 468,
"hullMass": 350,
"masslock": 17,
"pipSpeed": 0.0975
},
"retailCost": 56978179,
"slots": {
"common": [
7,
6,
5,
4,
7,
6,
5
],
"hardpoints": [
3,
3,
3,
2,
2,
0,
0,
0,
0
],
"internal": [
6,
6,
6,
5,
5,
4,
3,
3,
2
]
},
"defaults": {
"common": [
"7E",
"6E",
"5E",
"4E",
"7E",
"6E",
"5C"
],
"hardpoints": [
0,
0,
0,
17,
17,
0,
0,
0,
0
],
"internal": [
"04",
"04",
"4j",
"03",
0,
0,
0,
"00",
"2h"
]
}
}
}

Some files were not shown because too many files have changed in this diff Show More