Compare commits

...

141 Commits

Author SHA1 Message Date
Colin McLeod
3c8b1f7d6a Adding 2.5% discount 2015-12-18 01:05:49 -08:00
Colin McLeod
62d9749660 Adding agility/maneuverability to shipyard overview 2015-12-13 12:31:06 -08:00
Colin McLeod
7db185e635 Bumping version to 1.10.0 2015-12-13 12:20:56 -08:00
Colin McLeod
e69bdac75c Add Cobra MK IV, FdL power plant update, PV Hangar 2015-12-13 12:19:22 -08:00
Colin McLeod
231f7e9267 Add planetary vechile hanger support 2015-12-13 12:19:22 -08:00
Colin McLeod
2ef44e38b3 Merge pull request #123 from fawick/master
Fix typo in languages.js
2015-12-07 10:31:23 -08:00
Fabian Wickborn
d051829f98 Fix typo in languages.js 2015-12-07 19:16:00 +01:00
Colin McLeod
01e8e71b28 Updating data reference, bumping version to 1.9.4 2015-11-30 23:38:06 -08:00
Colin McLeod
14681aa9fa Update tests to include bulkheads 2015-11-30 22:56:28 -08:00
Colin McLeod
b93572b18d Merge pull request #120 from sf302/master
Heat Sink Launcher utility auto-fill
2015-11-19 16:28:51 -08:00
Kevin Chang
41c4b4243a Remove arg overloading in useUtility 2015-11-16 16:36:15 -08:00
Kevin Chang
f5127c2475 Typo fix 2015-11-16 15:37:55 -08:00
Kevin Chang
db4303d3c8 Add Heat Sink auto-fill given new SCB heat output 2015-11-16 15:35:36 -08:00
Colin McLeod
8bc100714f Fix Viper Mk4 data. Bumping version to 1.9.3 2015-11-14 12:04:55 -08:00
Colin McLeod
fabd370f4a Update serializer test fixtures 2015-11-14 10:59:15 -08:00
Colin McLeod
769c20154d Updating Hull Reinforcement packages. Bumping to 1.9.2 2015-11-14 10:48:47 -08:00
Colin McLeod
2b5edd75cb Fix keelback boost/speed. Bump to 1.9.1 2015-11-14 10:37:38 -08:00
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
Colin McLeod
eb8373f8b4 Line chart UI tweaks 2015-09-22 01:43:54 -07:00
Colin McLeod
202bbbd357 Use power icons for power management 2015-09-22 00:43:55 -07:00
Colin McLeod
b9e404c4da Adding italian number format support 2015-09-21 23:44:24 -07:00
Colin McLeod
e16ce83c03 Adding Spanish support 2015-09-21 23:44:05 -07:00
Colin McLeod
83c266d083 Bumping version to 1.7.0 2015-09-21 21:43:56 -07:00
Colin McLeod
349b8f436c Import/export fixture fixes for FSD Interdictor 2015-09-21 21:43:17 -07:00
Colin McLeod
e9a0a01e14 Lint fixes 2015-09-21 21:42:48 -07:00
Colin McLeod
457b8920f2 Partial Italian translation 2015-09-21 21:00:29 -07:00
Colin McLeod
31b63e9a87 en.js formatting 2015-09-21 21:00:17 -07:00
Colin McLeod
8dc3725b47 Chart UI Tweaks 2015-09-21 20:58:13 -07:00
Colin McLeod
e2096ba9f4 Display calculate boost speed 2015-09-21 20:47:59 -07:00
Colin McLeod
231fcbb3bc Calculate top boost speed 2015-09-21 20:47:31 -07:00
Colin McLeod
75c22de166 Use true base boost speeds 2015-09-21 20:45:44 -07:00
Colin McLeod
d196127392 Improve Shield Cell bank readability 2015-09-20 10:56:39 -07:00
Colin McLeod
fb4dc906aa Empty Spanish translations for now 2015-09-20 10:56:18 -07:00
Colin McLeod
9937ba8039 Merge pull request #93 from koreldan/master
added italian language
2015-09-19 22:10:06 -07:00
enrico
d92722f1c2 added italian language 2015-09-20 01:13:07 +02:00
Colin McLeod
69096d7816 Merge pull request #92 from SmokyBird/patch-1
Update fr.js
2015-09-19 14:48:55 -07:00
SmokyBird
2846827959 Update fr.js
Changed a few translations to keep the real ones, coming from the game.
2015-09-19 14:50:53 +02:00
Colin McLeod
67bd56e692 Top speed display and test tweaks 2015-09-17 22:09:30 -07:00
Colin McLeod
95f5e8e5ae Bumping version to 1.6.0 2015-09-17 01:00:38 -07:00
Colin McLeod
eb52a7548c Improve multi series tooltips for line chart 2015-09-17 01:00:10 -07:00
Colin McLeod
b479b61926 Minor bar chart UI tweak 2015-09-17 00:59:29 -07:00
Colin McLeod
726a08b05b Calculate speed based on Thrusters. Closes #16 2015-09-17 00:59:09 -07:00
Colin McLeod
fc2f76c31c Updating ships and thrusters for speed calculation support 2015-09-17 00:57:31 -07:00
Colin McLeod
839e1a5cbd Removing unused icon 2015-09-17 00:55:26 -07:00
Colin McLeod
12beeffae0 Hack to component select. Closes #89 2015-09-14 10:45:06 -07:00
Colin McLeod
83ad7d9f6c Correct price of Federal Gunship 2015-09-07 12:43:52 -07:00
Colin McLeod
6e65d67f14 Bumping version to 1.5.5 2015-09-05 23:01:19 -07:00
Colin McLeod
a127e2f5a5 Merge pull request #85 from gbiobob/master
Corrections for French localisation
2015-09-05 11:01:13 -07:00
gbiobob
9154b7f38c Corrections for French localisation 2015-09-05 11:13:26 +02:00
Colin McLeod
c2d8cad249 Bumping version to 1.5.4 2015-09-04 17:31:08 -07:00
Colin McLeod
e9ffe5baec Fix to Russian language name 2015-09-04 17:30:41 -07:00
Colin McLeod
fffa325e83 Corrections to French translation 2015-09-04 12:45:14 -07:00
Colin McLeod
ed14ed2bb7 Bumping version to 1.5.2 2015-09-03 12:19:59 -07:00
Colin McLeod
7c9e020b88 Minor french translation correction 2015-09-03 12:10:21 -07:00
Colin McLeod
d711d1519b Correct base shield strength on fed assault and gun ship 2015-09-03 12:07:50 -07:00
Colin McLeod
3361f7e435 Another russian translation correction 2015-09-03 12:01:13 -07:00
Colin McLeod
3a79f99f77 Correct Russian translations 2015-09-03 11:58:29 -07:00
126 changed files with 2085 additions and 7903 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

3
app/icons/no-power.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<path d="M437.020 74.98c-48.353-48.351-112.64-74.98-181.020-74.98s-132.667 26.629-181.020 74.98c-48.351 48.353-74.98 112.64-74.98 181.020s26.629 132.667 74.98 181.020c48.353 48.351 112.64 74.98 181.020 74.98s132.667-26.629 181.020-74.98c48.351-48.353 74.98-112.64 74.98-181.020s-26.629-132.667-74.98-181.020zM448 256c0 41.407-13.177 79.794-35.556 111.19l-267.633-267.634c31.396-22.379 69.782-35.556 111.189-35.556 105.869 0 192 86.131 192 192zM64 256c0-41.407 13.177-79.793 35.556-111.189l267.635 267.634c-31.397 22.378-69.784 35.555-111.191 35.555-105.869 0-192-86.131-192-192z"></path>
</svg>

After

Width:  |  Height:  |  Size: 697 B

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

@@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<path d="M192 0l-192 256h192l-128 256 448-320h-256l192-192z"></path>
</svg>

After

Width:  |  Height:  |  Size: 178 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

@@ -18,7 +18,6 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="/images/logo/apple-touch-icon-precomposed.png"> <link rel="apple-touch-icon-precomposed" sizes="180x180" href="/images/logo/apple-touch-icon-precomposed.png">
<link rel="apple-touch-icon" href="/images/logo/apple-touch-icon.png"> <link rel="apple-touch-icon" href="/images/logo/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="180x180" href="/images/logo/apple-touch-icon-180x180.png">
<!-- iPhone, iPod Touch, portrait --> <!-- iPhone, iPod Touch, portrait -->
<link href="/images/splash/320x460.png" media="(device-width: 320px) and (device-height: 480px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" rel="apple-touch-startup-image"> <link href="/images/splash/320x460.png" media="(device-width: 320px) and (device-height: 480px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" rel="apple-touch-startup-image">
<!-- iPhone, iPod Touch, landscape --> <!-- iPhone, iPod Touch, landscape -->

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.
@@ -42,9 +42,8 @@ function($rootScope, $location, $window, $doc, $state, $translate, localeFormat,
// Global Reference variables // Global Reference variables
$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.STATUS = ['', 'disabled', 'off', 'on'];
$rootScope.STATUS_CLASS = ['', 'disabled', 'warning', 'secondary-disabled'];
$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 = {
@@ -100,11 +103,12 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.speedSeries = { $scope.speedSeries = {
xMin: 0, xMin: 0,
xMax: ship.cargoCapacity, xMax: ship.cargoCapacity,
yMax: 500, yMax: calcSpeed(ship.unladenMass, ship.speed, ship.boost, $scope.th.c, ship.pipSpeed).boost,
yMin: 0, yMin: 0,
series: ['speed', 'boost'], series: ['boost', '4 Pips', '2 Pips', '0 Pips'],
colors: ['#0088d2', '#ff8c0d', '#D26D00', '#c06400'],
func: function(cargo) { // X Axis is Cargo func: function(cargo) { // X Axis is Cargo
return calcSpeed(ship.unladenMass + $scope.fuel + cargo, ship.speed, ship.boost, $scope.th.c); return calcSpeed(ship.unladenMass + $scope.fuel + cargo, ship.speed, ship.boost, $scope.th.c, ship.pipSpeed);
} }
}; };
$scope.speedChart = { $scope.speedChart = {
@@ -162,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') {
@@ -183,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));
}; };
/** /**
@@ -209,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));
}; };
@@ -289,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]
@@ -309,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
@@ -332,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');
}; };
@@ -352,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) {
@@ -360,6 +503,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.speedSeries.xMax = $scope.trSeries.xMax = $scope.jrSeries.xMax = ship.cargoCapacity; $scope.speedSeries.xMax = $scope.trSeries.xMax = $scope.jrSeries.xMax = ship.cargoCapacity;
$scope.jrSeries.yMax = ship.unladenRange; $scope.jrSeries.yMax = ship.unladenRange;
$scope.trSeries.yMax = ship.unladenTotalRange; $scope.trSeries.yMax = ship.unladenTotalRange;
$scope.speedSeries.yMax = calcSpeed(ship.unladenMass, ship.speed, ship.boost, $scope.th.c, ship.pipSpeed).boost;
updateRetrofitCosts(); updateRetrofitCosts();
win.triggerHandler('pwrchange'); win.triggerHandler('pwrchange');
} }
@@ -374,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;
@@ -397,25 +544,96 @@ 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, srvs = 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;
case 'pv':
srvs += slotGroup[i].c.vehicles;
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 (srvs > 0) {
item = {
ammoName: 'SRVs',
ammoMax: srvs,
ammoUnitCost: 6005,
ammoTotalCost: srvs * 6005
}; };
costs.push(item);
total += item.ammoTotalCost;
}
//limpets if controllers exist and cargo space available
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,12 +6,14 @@ angular.module('app').directive('barChart', ['$window', '$translate', '$rootScop
function insertLinebreaks(d) { function insertLinebreaks(d) {
var el = d3.select(this); var el = d3.select(this);
var words = d.split('\n'); var lines = d.split('\n');
el.text('').attr('y', -6); el.text('').attr('y', -6);
for (var i = 0; i < words.length; i++) { for (var i = 0; i < lines.length; i++) {
var tspan = el.append('tspan').text(words[i]); var tspan = el.append('tspan').text(lines[i].length > 18 ? lines[i].substring(0, 15) + '...' : lines[i]);
if (i > 0) { if (i > 0) {
tspan.attr('x', -9).attr('dy', '1em'); tspan.attr('x', -9).attr('dy', '1em');
} else {
tspan.attr('class', 'primary');
} }
} }
} }
@@ -65,7 +67,7 @@ angular.module('app').directive('barChart', ['$window', '$translate', '$rootScop
var data = scope.data, var data = scope.data,
width = element[0].offsetWidth, width = element[0].offsetWidth,
w = width - margin.left - margin.right, w = width - margin.left - margin.right,
height = 45 + (30 * data.length * $rootScope.sizeRatio), height = 50 + (30 * data.length * $rootScope.sizeRatio),
h = height - margin.top - margin.bottom, h = height - margin.top - margin.bottom,
maxVal = d3.max(data, function(d) { return d3.max(properties, function(p) {return d[p]; }); }); maxVal = d3.max(data, function(d) { return d3.max(properties, function(p) {return d[p]; }); });

View File

@@ -6,9 +6,9 @@ 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 > 4 && o.class != prevClass && (o.rating != prevRating || o.mode)) { 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

@@ -1,4 +1,7 @@
angular.module('app').directive('lineChart', ['$window', '$translate', '$rootScope', function($window, $translate, $rootScope) { angular.module('app').directive('lineChart', ['$window', '$translate', '$rootScope', function($window, $translate, $rootScope) {
var RENDER_POINTS = 20; // Only render 20 points on the graph
return { return {
restrict: 'A', restrict: 'A',
scope: { scope: {
@@ -8,7 +11,7 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
link: function(scope, element) { link: function(scope, element) {
var seriesConfig = scope.series, var seriesConfig = scope.series,
series = seriesConfig.series, series = seriesConfig.series,
color = d3.scale.ordinal().range([ '#ff8c0d', '#1fb0ff', '#a05d56', '#d0743c']), color = d3.scale.ordinal().range(scope.series.colors ? scope.series.colors : ['#ff8c0d']),
config = scope.config, config = scope.config,
labels = config.labels, labels = config.labels,
margin = { top: 15, right: 15, bottom: 35, left: 60 }, margin = { top: 15, right: 15, bottom: 35, left: 60 },
@@ -39,20 +42,33 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
.attr('transform', 'rotate(-90)') .attr('transform', 'rotate(-90)')
.attr('y', -50) .attr('y', -50)
.attr('dy', '.1em') .attr('dy', '.1em')
.style('text-anchor', 'middle') .style('text-anchor', 'middle');
.text($translate.instant(labels.yAxis.title) + ' (' + $translate.instant(labels.yAxis.unit) + ')');
// Create X Axis SVG Elements // Create X Axis SVG Elements
var xLbl = vis.append('g').attr('class', 'x axis'); var xLbl = vis.append('g').attr('class', 'x axis');
var xTxt = xLbl.append('text') var xTxt = xLbl.append('text')
.attr('class', 'cap') .attr('class', 'cap')
.attr('y', 30) .attr('y', 30)
.attr('dy', '.1em') .attr('dy', '.1em')
.style('text-anchor', 'middle') .style('text-anchor', 'middle');
.text($translate.instant(labels.xAxis.title) + ' (' + $translate.instant(labels.xAxis.unit) + ')');
// xTxt.append('tspan').attr('class', 'metric');
// yTxt.append('tspan').attr('class', 'metric');
// Create and Add tooltip // Create and Add tooltip
var tipWidth = (Math.max(labels.yAxis.unit.length, labels.xAxis.unit.length) * 1.25) + 2.5; var tipHeight = 2 + (1.25 * (series ? series.length : 0.75));
var tips = vis.append('g').style('display', 'none'); var tips = vis.append('g').style('display', 'none').attr('class', 'tooltip');
var markers = vis.append('g').style('display', 'none');
tips.append('rect')
.attr('height', tipHeight + 'em')
.attr('y', (-tipHeight / 2) + 'em')
.attr('class', 'tip');
tips.append('text')
.attr('class', 'label x')
.attr('dy', (-tipHeight / 2) + 'em')
.attr('y', '1.25em');
var background = vis.append('rect') // Background to capture hover/drag var background = vis.append('rect') // Background to capture hover/drag
.attr('fill-opacity', 0) .attr('fill-opacity', 0)
@@ -84,7 +100,7 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
yMin = seriesConfig.yMin, yMin = seriesConfig.yMin,
w = width - margin.left - margin.right, w = width - margin.left - margin.right,
h = height - margin.top - margin.bottom, h = height - margin.top - margin.bottom,
s, val, yVal, delta; c, s, val, yVal, delta;
data.length = 0; // Reset Data array data.length = 0; // Reset Data array
@@ -105,12 +121,14 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
data[s].push( [ xMin, yVal[ series[s] ] ], [ 1, yVal[ series[s] ] ]); data[s].push( [ xMin, yVal[ series[s] ] ], [ 1, yVal[ series[s] ] ]);
} }
} else { } else {
delta = (xMax - xMin) / 30; // Only render 30 points on the graph delta = (xMax - xMin) / RENDER_POINTS;
for (val = xMin; val <= xMax; val += delta) { val = 0;
for (c = 0; c <= RENDER_POINTS; c++) {
yVal = func(val); yVal = func(val);
for (s = 0; s < series.length; s++) { for (s = 0; s < series.length; s++) {
data[s].push([ val, yVal[ series[s] ] ]); data[s].push([ val, yVal[ series[s] ] ]);
} }
val += delta;
} }
} }
@@ -120,9 +138,11 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
yVal = func(xMin); yVal = func(xMin);
seriesData.push([ xMin, yVal ], [ 1, yVal ]); seriesData.push([ xMin, yVal ], [ 1, yVal ]);
} else { } else {
delta = (xMax - xMin) / 30; // Only render 30 points on the graph delta = (xMax - xMin) / RENDER_POINTS;
for (val = xMin; val <= xMax; val += delta) { val = 0;
for (c = 0; c <= RENDER_POINTS; c++) {
seriesData.push([val, func(val) ]); seriesData.push([val, func(val) ]);
val += delta;
} }
} }
@@ -152,35 +172,63 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
.attr('stroke-width', 2) .attr('stroke-width', 2)
.attr('d', line); .attr('d', line);
var tip = tips.selectAll('g.tooltip').data(data).enter().append('g').attr('class', 'tooltip'); tips.selectAll('text.label.y').data(data).enter()
tip.append('rect').attr('width', tipWidth + 'em').attr('height', '2em').attr('x', '0.5em').attr('y', '-1em').attr('class', 'tip'); .append('text')
tip.append('circle').attr('class', 'marker').attr('r', 4); .attr('class', 'label y')
tip.append('text').attr('class', 'label x').attr('y', '-0.25em'); .attr('dy', (-tipHeight / 2) + 'em')
tip.append('text').attr('class', 'label y').attr('y', '0.85em'); .attr('y', function(d, i) { return 1.25 * (i + 2) + 'em'; });
markers.selectAll('circle.marker').data(data).enter().append('circle').attr('class', 'marker').attr('r', 4);
} }
function showTip() { function showTip() {
tips.style('display', null); tips.style('display', null);
markers.style('display', null);
} }
function hideTip() { function hideTip() {
if (!dragging) { if (!dragging) {
tips.style('display', 'none'); tips.style('display', 'none');
markers.style('display', 'none');
} }
} }
function moveTip() { function moveTip() {
var xPos = d3.mouse(this)[0], x0 = x.invert(xPos), y0 = func(x0), flip = (x0 / x.domain()[1] > 0.65); var xPos = d3.mouse(this)[0],
var tip = tips.selectAll('g.tooltip').attr('transform', function(d, i) { return 'translate(' + x(x0) + ',' + y(series ? y0[series[i]] : y0) + ')'; }); x0 = x.invert(xPos),
tip.selectAll('rect').attr('x', flip ? (-tipWidth - 0.5) + 'em' : '0.5em').style('text-anchor', flip ? 'end' : 'start'); y0 = func(x0),
tip.selectAll('text.label').attr('x', flip ? '-1em' : '1em').style('text-anchor', flip ? 'end' : 'start'); yTotal = 0,
tip.selectAll('text.label.x').text(fmtLong(x0) + ' ' + $translate.instant(labels.xAxis.unit)); flip = (x0 / x.domain()[1] > 0.65),
tips.selectAll('text.label.y').text(function(d, i) { return fmtLong(series ? y0[series[i]] : y0) + ' ' + $translate.instant(labels.yAxis.unit); }); tipWidth = 0,
minTransY = (tips.selectAll('rect').node().getBoundingClientRect().height / 2) - margin.top;
tips.selectAll('text.label.y').text(function(d, i) {
var yVal = series ? y0[series[i]] : y0;
yTotal += yVal;
return (series ? $translate.instant(series[i]) : '') + ' ' + fmtLong(yVal);
}).append('tspan').attr('class', 'metric').text(' ' + $translate.instant(labels.yAxis.unit));
tips.selectAll('text').each(function() {
if (this.getBBox().width > tipWidth) {
tipWidth = Math.ceil(this.getBBox().width);
}
});
tipWidth += 8;
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.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.selectAll('rect')
.attr('width', tipWidth + 4)
.attr('x', flip ? -tipWidth - 12 : 8)
.style('text-anchor', flip ? 'end' : 'start');
} }
function updateFormats() { function updateFormats() {
xTxt.text($translate.instant(labels.xAxis.title) + ' (' + $translate.instant(labels.xAxis.unit) + ')'); xTxt.text($translate.instant(labels.xAxis.title)).append('tspan').attr('class', 'metric').text(' (' + $translate.instant(labels.xAxis.unit) + ')');
yTxt.text($translate.instant(labels.yAxis.title) + ' (' + $translate.instant(labels.yAxis.unit) + ')'); yTxt.text($translate.instant(labels.yAxis.title)).append('tspan').attr('class', 'metric').text(' (' + $translate.instant(labels.yAxis.unit) + ')');
fmtLong = $rootScope.localeFormat.numberFormat('.2f'); fmtLong = $rootScope.localeFormat.numberFormat('.2f');
xAxis.tickFormat($rootScope.localeFormat.numberFormat('.2r')); xAxis.tickFormat($rootScope.localeFormat.numberFormat('.2r'));
yAxis.tickFormat($rootScope.localeFormat.numberFormat('.3r')); yAxis.tickFormat($rootScope.localeFormat.numberFormat('.3r'));

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

@@ -1,7 +1,5 @@
angular.module('app').config(['$translateProvider', function($translateProvider) { angular.module('app').config(['$translateProvider', function($translateProvider) {
$translateProvider.translations('en', {
$translateProvider
.translations('en', {
PHRASE_EXPORT_DESC: 'A detailed JSON export of your build for use in other sites and tools', PHRASE_EXPORT_DESC: 'A detailed JSON export of your build for use in other sites and tools',
'A-Rated': 'A-Rated', 'A-Rated': 'A-Rated',
about: 'about', about: 'about',
@@ -26,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',
@@ -107,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',
@@ -154,6 +154,7 @@ angular.module('app').config(['$translateProvider', function($translateProvider)
proceed: 'proceed', proceed: 'proceed',
pc: 'Prospector Limpet Controller', pc: 'Prospector Limpet Controller',
pl: 'Pulse Laser', pl: 'Pulse Laser',
pv: 'Planetary Vehicle Hangar',
PWR: 'PWR', PWR: 'PWR',
rg: 'Rail Gun', rg: 'Rail Gun',
range: 'range', range: 'range',

View File

@@ -17,247 +17,196 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
}); });
$translateProvider.translations('es', { $translateProvider.translations('es', {
PHRASE_EXPORT_DESC: 'Ein detaillierter JSON-Export Ihrer Konfiguration für die Verwendung in anderen Websites und Tools', 'PHRASE_EXPORT_DESC': 'Una detallada exportaci\u00f3n JSON de tu construcci\u00f3n para usarlo en otros sitios web y herramientas',
A_RATED: 'A-Klasse', 'A-Rated': 'Calidad-A',
ABOUT: 'Über', 'about': 'Acerca',
ACTION: 'Aktion', 'action': 'Acci\u00f3n',
ADDED: 'Hinzugefügt', 'added': 'A\u00f1adido',
ADDER: 'Adder', 'Advanced Discovery Scanner': 'Esc\u00e1ner de exploraci\u00f3n avanzado',
ADVANCED: 'Fortgeschritten', 'agility': 'Maniobrabilidad',
'Advanced Discovery Scanner': 'Fortgeschrittener Aufklärungsscanner', 'alpha': 'Alfa',
'Advanced Plasma Laser': 'Fortgeschrittener Plasma-Laser', 'ammo': 'Munici\u00f3n',
AGILITY: 'Beweglichkeit', 'PHRASE_CONFIRMATION': '\u00bfEst\u00e1s seguro?',
ALPHA: 'Alpha', 'armour': 'Blindaje',
AMMO: 'Munition', 'am': 'Unidad de auto-reparaciones',
ANACONDA: 'Anaconda', 'available': 'Disponible',
PHRASE_CONFIRMATION: 'Sind Sie sicher?', 'backup': 'Reserva',
ARMOUR: 'Panzerung', 'Basic Discovery Scanner': 'Esc\u00e1ner de exploraci\u00f3n b\u00e1sico',
ASP_EXPLORER: 'Asp Explorer', 'bl': 'L\u00e1ser de haz',
am: 'Automatische Feldwartungseinheit', 'bins': 'contenedores',
AVAILABLE: 'Verfügbar', 'boost': 'incrementar',
BACKUP: 'Sicherungsdatei', 'build': 'Construcci\u00f3n',
'Basic Discovery Scanner': 'Einfacher Aufklärungsscanner', 'build name': 'Nombre de la construcci\u00f3n',
bl: 'Strahlenlaser', 'builds': 'Construcciones',
BELUGA_LINER: 'Beluga Liner', 'bh': 'mamparos',
BETA: 'beta', 'ul': 'Laser de r\u00e1fagas',
BINS: 'Behälter', 'buy': 'Comprar',
BOOST: 'Boost', 'cancel': 'Cancelar',
BUILD: 'Konfiguration', 'c': 'Ca\u00f1\u00f3n',
BUILD_NAME: 'Konfigurationsname', 'capital': 'capital',
BUILDS: 'Konfigurationen', 'cargo': 'Carga',
BULKHEADS: 'Rumpfhüllenverstärkung', 'Cargo Hatch': 'Compuerta de carga',
ul: 'Salvenlaser', 'cr': 'Compartimento de carga',
BUY: 'Kaufen', 'cs': 'Esc\u00e1ner de carga',
CANCEL: 'Abbrechen', 'cells': 'celdas',
c: 'Kanone', 'Chaff Launcher': 'Lanzador de birutas',
CAPITAL: 'kapital', 'close': 'Cerrar',
CARGO: 'Fracht', 'cc': 'Controlador de Drones de Recogida',
CARGO_HATCH: 'Frachtluke', 'compare': 'Comparar',
cr: 'Frachtgestell', 'compare all': 'comparar todas',
cs: 'Frachtscanner', 'comparison': 'Comparativa',
CELLS: 'Zellen', 'comparisons': 'Comparativas',
CHAFF_LAUNCHER: 'Düppel-Werfer', 'component': 'Componente',
CLOSE: 'Schließen', 'cost': 'Coste',
COBRA_MK_III: 'Cobra MK III', 'costs': 'Costes',
COBRA_MK_IV: 'Cobra MK IV', 'cm': 'Contramedidas',
cc: 'Krallensteuerung: Sammler', 'create': 'Crear',
COMPARE: 'Vergleichen', 'create new': 'Crear nuevo',
COMPARE_ALL: 'Alles Vergleichen', 'credits': 'Cr\u00e9ditos',
COMPARISON: 'Vergleich', 'damage': 'Da\u00f1o',
COMPARISONS: 'Vergleiche', 'delete': 'Borrar',
COMPONENT: 'Komponente', 'delete all': 'Borrar todo',
COST: 'Kostet', 'dep': 'desp',
COSTS: 'Kosten', 'deployed': 'Desplegado',
cm: 'Gegenmaßnahme', 'detailed export': 'Exportacion detallada',
CR: 'CR', 'Detailed Surface Scanner': 'Escaner de exploraci\u00f3n detallada',
CREATE: 'Erstellen', 'disabled': 'Desactivado',
CREATE_NEW: 'Neu Erstellen', 'discount': 'Descuento',
CREDITS: 'Credits', 'dc': 'Ordenador de aterrizaje',
Cytoscrambler: 'Zytostreuer', 'done': 'Hecho',
DAMAGE: 'Schaden', 'DPS': 'DPS (Da\u00f1o Por Segundo)',
DELETE: 'Löschen', 'edit data': 'Editar datos',
DELETE_ALL: 'Alles Löschen', 'efficiency': 'Eficiencia',
DEP: 'Ausg', 'Electronic Countermeasure': 'Contramedidas electr\u00f3nicas',
DEPLOYED: 'Ausgefahren', 'empty': 'Vac\u00edo',
DETAILED_EXPORT: 'Detailiertes Exportieren', 'ENG': 'MOT',
'Detailed Surface Scanner': 'Detailoberflächenscanner', 'enter name': 'Introduce el nombre',
DIAMONDBACK_EXPLORER: 'Diamondback-Erkunder', 'export': 'exportar',
DIAMONDBACK_SCOUT: 'Diamondback-Aufklärer', 'fixed': 'fijo',
DISABLED: 'Deaktiviert', 'forum': 'Foro',
DISCOUNT: 'Rabatt', 'fc': 'Ca\u00f1\u00f3n de fragmentaci\u00f3n',
Distruptor: 'Disruptor', 'fd': 'Motor de salto',
dc: 'Standard-Landecomputer', 'ws': 'Esc\u00e1ner de Salto',
DOLPHIN: 'Dolphin', 'fi': 'Interdictor FSD',
DONE: 'Fertig', 'fuel': 'Combustible',
DPS: 'DPS', 'fs': 'Recolector de Combustible',
EAGLE: 'Eagle', 'ft': 'Tanque de combustible',
EDIT_DATA: 'Bearbeiten', 'fx': 'Sistema de Transferencia de Combustilble',
EFFICIENCY: 'Effizienz', 'full tank': 'Tanque lleno',
'Electronic Countermeasure': 'Elektronische Gegenmaßnahme', 'Gimballed': 'Card\u00e1n',
EMPTY: 'leer', 'H': 'E',
ENFORCER: 'Vollstrecker', 'hardpoints': 'Montura de armas',
ENG: 'FAH', 'hb': 'Controlador de Apertura de Bah\u00eda de Carga',
PHRASE_ENTER_BUILD_NAME: '', 'Heat Sink Launcher': 'Eyector de Acumulador de Calor',
EPS: 'en/s', 'huge': 'enorme',
EXPORT: 'Exportieren', 'hull': 'Casco',
FEDERAL_CORVETTE: 'Föderale Korvette', 'hr': 'Sistema de Casco Reforzado',
FEDERAL_DROPSHIP: 'Föderales Abwurfschiff', 'import': 'Importar',
FEDERAL_DROPSHIP_MK_II: 'Föderales Abwurfschiff Mk II', 'import all': 'Importar todo',
FEDERAL_GUNSHIP: 'Föderales Kanonenschiff', 'insurance': 'Seguro',
FER_DE_LANCE: 'Fer-de-Lance', 'Intermediate Discovery Scanner': 'Esc\u00e1ner de exploraci\u00f3n media',
FIXED: '', 'internal compartments': 'Compartimentos internos',
FORUM: 'Forum', 'jump range': 'Rango de salto',
fc: 'Splitterkanone', 'jumps': 'Saltos',
fd: 'Frameshift-Antrieb', 'kw': 'Esc\u00e1ner Detector de Recompensas',
ws: 'Sogwolkenscanner', 'L': 'G',
FSD: 'FSA', 'laden': 'Cargada',
fi: 'FSA-Unterbrecher', 'language': 'Idioma',
FUEL: 'Treibstoff', 'large': 'Grande',
fs: 'Treibstoffsammler', 'ls': 'Soporte vital',
ft: 'Treibstofftank', 'Lightweight Alloy': 'Aleaci\u00f3n ligera',
fx: 'Krallensteuerung Treibstoffstransfer', 'limpets': 'Drones',
FULL_TANK: 'Tank voll', 'lock factor': 'factor de bloqueo',
GIMBALLED: 'Kardianisch', 'mass': 'Masa',
H: 'H', 'max': 'm\u00e1x',
HARDPOINTS: 'Waffenaufhängungen', 'max mass': 'Masa m\u00e1xima',
hb: 'Krallen-Steuereinheit (Ladelukenöffner)', 'medium': 'medio',
HAULER: 'Hauler', 'Military Grade Composite': 'Blindaje Militar',
'Heat Sink Launcher': 'Kühlkörperwerfer', 'nl': 'Lanzaminas',
HUGE: 'Riesig', 'Mining Lance': 'Lanza de miner\u00eda',
HULL: 'Hülle', 'ml': 'L\u00e1ser de miner\u00eda',
hr: 'Rumpfhüllenverstärkung (Paket)', 'Mirrored Surface Composite': 'Blindaje Reflectante',
IMPERIAL_CLIPPER: 'Imperialer Clipper', 'mr': 'Bah\u00eda de Misiles',
IMPERIAL_COURIER: 'Imperialer Kurier', 'mc': 'Ca\u00f1\u00f3n m\u00faltiple',
IMPERIAL_CUTTER: 'Imperialer Cutter', 'net cost': 'Coste neto',
IMPERIAL_EAGLE: 'Imperialer Eagle', 'PHRASE_NO_BUILDS': '\u00a1No se a\u00f1adieron plantillas para comparaci\u00f3n!',
IMPERIAL_HAMMER: 'Imperialer Hammer', 'PHRASE_NO_RETROCH': 'No hay cambios en los ajutes',
IMPORT: 'Importieren', 'none': 'Nada',
IMPORT_ALL: 'Alles Importieren', 'none created': 'Nada creado',
INSURANCE: 'Versicherung', 'off': 'apagado',
'Intermediate Discover Scanner': 'Mittlerer Aufklärungsscanner', 'on': 'encendido',
INTERNAL_COMPARTMENTS: 'Innenbereichkabine', 'optimal': '\u00f3ptimo',
JUMP_RANGE: 'Sprungreichweite', 'optimal mass': 'masa \u00f3ptima',
JUMPS: 'Sprünge', 'optimize mass': 'optimizar masa',
kw: 'Tötungsbefehlscanner', 'overwrite': 'Sobreescribir',
KRAIT: 'Krait', 'PHRASE_IMPORT': 'Pega el JSON o imp\u00f3rtalo aqu\u00ed',
L: 'L', 'penetration': 'penetraci\u00f3n',
LADEN: 'Beladen', 'permalink': 'enlace permanente',
LANGUAGE: 'Sprache', 'pa': 'Acelerador de Plasma',
LARGE: 'Groß', 'Point Defence': 'Punto de Defensa',
ls: 'Lebenserhaltung', 'power': 'energ\u00eda',
'Lightweight Alloy': 'Leichte Legierung', 'pd': 'distribuidor de energ\u00eda',
LOCK_FACTOR: 'Massensperrefaktor', 'pp': 'Planta de Energ\u00eda',
LS: 'LS', 'priority': 'prioridad',
LY: 'LJ', 'proceed': 'Proceder',
M: 'M', 'pc': 'Controlador de drones de prospecci\u00f3n',
'm/s': 'M/Sec.', 'pl': 'L\u00e1ser de Pulso',
MASS: 'Masse', 'PWR': 'POT',
MAX: 'max', 'rg': 'Ca\u00f1\u00f3n de Riel',
MAX_MASS: 'maximale Masse', 'range': 'rango',
MEDIUM: 'Mittel', 'rate': 'ratio',
'Military Grade Composite': 'Militär-Komposit', 'Reactive Surface Composite': 'Blindaje Reactivo',
nl: 'Minenwerfer', 'recharge': 'recargar',
'Mining Lance': 'Lanzenabbaulaser', 'rf': 'Refineria',
ml: 'Abbaulaser', 'refuel time': 'Tiempo para repostar',
'Mirrored Surface Composite': 'Gespiegelte-Oberfläche-Komposit', 'Reinforced Alloy': 'Armadura reforzada',
mr: 'Raketenbatterie', 'reload': 'Recargar',
mc: 'Mehrfachgeschütz', 'rename': 'Renombrar',
NET_COST: 'Nettokosten', 'repair': 'Reparar',
NO: 'Nein', 'reset': 'Reiniciar',
NO_RETROFITTING_CHANGES: 'Keine Umrüständerungen', 'ret': 'PLE',
NONE: 'Nichts', 'retracted': 'plegadas',
NONE_CREATED: 'Nichts erstellt', 'retrofit costs': 'costes de equipamiento',
OFF: 'Aus', 'retrofit from': 'equipamiento desde',
ON: 'An', 'ROF': 'RDF',
OPTIMAL: 'optimal', 'S': 'P',
OPTIMAL_MASS: 'optimale Masse', 'save': 'guardar',
OPTIMIZE_MASS: 'Masse optimieren', 'sc': 'sc\u00e1ner',
ORCA: 'Orca', 'PHRASE_SELECT_BUILDS': 'Selecciona equipamientos para comparar',
OVERWRITE: 'Überschreiben', 'sell': 'Vender',
Pacifier: 'Friedensstifter', 's': 'Sensores',
'Pack-Hound': 'Schwarmwerfer', 'settings': 'Configuraci\u00f3n',
PANTHER_CLIPPER: 'Panter Clipper', 'sb': 'Potenciador de Escudos',
PHRASE_IMPORT: 'JSON hier einfügen oder hier importieren', 'scb': 'C\u00e9lula de Energ\u00eda de Escudos',
PEN: 'Durchdr', 'sg': 'Generador de escudos',
PENETRATION: 'Durchdringung', 'shields': 'Escudos',
PERMALINK: 'Permalink', 'ship': 'Nave ',
pa: 'Plasmabeschleuniger', 'ships': 'Naves',
POINT_DEFENCE: 'Punktverteidigung', 'shortened': 'Abreviado',
POWER: 'Energie', 'size': 'Tama\u00f1o',
pd: 'Energieverteiler', 'skip': 'omitir',
pp: 'Kraftwerk', 'small': 'Peque\u00f1o',
PRI: 'Prio', 'speed': 'velocidad',
PRIORITY: 'Priorität', 'standard': 'est\u00e1ndar',
psg: 'Prismaschildgenerator', 'Standard Docking Computer': 'Computador de Atraque Est\u00e1ndar',
PROCEED: 'Fortfahren', 'Stock': 'De serie',
pc: 'Krallensteuerung: Erzsucher', 'SYS': 'SIS',
pl: 'Impulslaser', 'T_LOAD': 'c-t\u00e9rmica',
PWR: 'En', 't': 'Propulsores',
PYTHON: 'Python', 'time': 'Tiempo',
rg: 'Schienenkanone', 'tp': 'Anclaje de torpedo',
RANGE: 'Reichweite', 'total': 'Total',
RATE: 'Rate', 'total range': 'Rango total',
'Reactive Surface Composite': 'Reaktive-Oberfläche-Komposit', 'turret': 'torreta',
RECHARGE: 'Aufladen', 'type': 'Tipo',
rf: 'Raffinerie', 'unladen': 'Sin carga',
REFUEL_TIME: 'Auftankzeit', 'PHRASE_UPDATE_RDY': 'Actualizacion disponible! Haz click para recargar',
'Reinforced Alloy': 'Verstärkte Legierungen', 'URL': 'Enlace',
RELOAD: 'Aktualisieren', 'utility': 'utilidad',
RENAME: 'Umbenennen', 'utility mounts': 'monturas de utilidad',
REPAIR: 'Reparieren', 'version': 'Versi\u00f3n',
RESET: 'Zurücksetzen', 'WEP': 'ARM',
RET: 'eing', 'yes': 'si',
RETRACTED: 'Eingefahren', 'PHRASE_BACKUP_DESC': 'Copia de seguridad de todos los datos de Coriolis para guardarlos o transferirlos a otro navegador\/dispositivo'
RETROFIT_COSTS: 'Nachrüstkosten',
RETROFIT_FROM: 'Nachrüsten von',
ROF: 'Kad',
S: 'S',
SAVE: 'Speichern',
sc: 'Scanner',
PHRASE_SELECT_BUILDS: 'Wähle Konfigurationen zum Vergleichen',
SELL: 'Verkaufen',
s: 'Sensoren',
SETTINGS: 'Konfiguration',
sb: 'Schildverstärker',
scb: 'Schildzellenbank',
sg: 'Schildgenerator',
SHIELDS: 'Schilde',
SHIP: 'Schiff',
SHIPS: 'Schiffe',
SHORTENED: 'Gekürzt',
SIDEWINDER: 'Sidewinder',
SIZE: 'Größe',
SKIP: 'Überspringen',
SMALL: 'S',
SPEED: 'Geschwindigkeit',
STANDARD: 'Standard',
STANDARD_DOCKING_COMPUTER: 'Landecomputer',
STOCK: 'Standard',
SYS: 'SYS',
T: 'T',
T_LOAD: 'T-Lad',
THE_HUNTER: 'The Hunter',
'The Retributor': 'Retributor',
t: 'Schubdüsen',
TIME: 'Dauer',
tp: 'Torpedoaufhängung',
TOTAL: 'Gesamt',
TOTAL_RANGE: 'Maximale Reichweite',
TURRET: 'Geschützturm',
TYPE: 'Typ',
TYPE_6_TRANSPORTER: 'Typ-6 Transporter',
TYPE_7_TRANSPORTER: 'Typ-7 Transporter',
TYPE_9_HEAVY: 'Typ-9 Transporter (schwer)',
U: 'U',
UNLADEN: 'Unbeladen',
UPDATE_NOTIFICATION: 'Update verfügbar! Klicken zum Aktualisieren',
URL: 'URL',
UTILITY: 'Werkzeug',
UTILITY_MOUNTS: 'Werkzeug-Steckplatz',
VERSION: 'Version',
VIPER: 'Viper',
VULTURE: 'Vulture',
WEP: 'WAF',
YES: 'Ja'
}); });
}]); }]);

View File

@@ -15,38 +15,38 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
shortMonths: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'] shortMonths: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']
}); });
$translateProvider.translations('fr', { $translateProvider.translations('fr', {
PHRASE_EXPORT_DESC: 'Un export détaillé en JSON de votre configuration pour l\'utilisation dans d\'autres sites et outils', PHRASE_EXPORT_DESC: 'Export détaillé en JSON de votre configuration pour utilisation sur d\'autres sites et outils',
'A-Rated': 'Classe-A ', 'A-Rated': 'Classe-A ',
about: 'à propos', about: 'à propos',
added: 'ajouté', added: 'ajouté',
Advanced: 'Avancé', Advanced: 'Avancé',
'Advanced Discovery Scanner': 'Scanner de découverte avancé', 'Advanced Discovery Scanner': 'Détecteur découverte avancé',
agility: 'agilité', agility: 'manœuvrabilité',
ammo: 'munition', ammo: 'munitions',
PHRASE_CONFIRMATION: 'Êtes-vous sûr ?', PHRASE_CONFIRMATION: 'Êtes-vous sûr ?',
armour: 'Armure', armour: 'Armure',
am: 'Unité de réparation automatique', am: 'Unité de maintenance de terrain auto',
available: 'Disponibilité', available: 'Disponibilité',
backup: 'sauvegarde', backup: 'sauvegarde',
'Basic Discovery Scanner': 'Scanner de découverte de base', 'Basic Discovery Scanner': 'Détecteur découverte simple',
bl: 'Laser rayon', bl: 'Rayon Laser',
bins: 'bacs', bins: 'bennes',
build: 'Configuration', build: 'Configuration',
'build name': 'Nom de la configuration', 'build name': 'Nom de la configuration',
builds: 'Configurations', builds: 'Configurations',
bh: 'Coque', bh: 'Coque',
ul: 'Laser salves', ul: 'Laser à rafale',
buy: 'Acheter', buy: 'Acheter',
cancel: 'Annuler', cancel: 'Annuler',
c: 'Canon', c: 'Canon',
cargo: 'Soute', cargo: 'Soute',
'Cargo Hatch': 'hublot de chargement', 'Cargo Hatch': 'Écoutille de soute',
cr: 'Compartiment de soute', cr: 'Compartiment de soute',
cs: 'Scanner de soute', cs: 'Détecteur de cargaison',
cells: 'Cellule', 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',
@@ -64,17 +64,17 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
dep: 'depl', dep: 'depl',
deployed: 'déployé', deployed: 'déployé',
'detailed export': 'export détaillé', 'detailed export': 'export détaillé',
'Detailed Surface Scanner': 'Scanner de surface détaillé', 'Detailed Surface Scanner': 'Détecteur surface détaillé',
disabled: 'désactivé', disabled: 'désactivé',
discount: 'ristourne', discount: 'réduction',
Distruptor: 'Disrupteur', Distruptor: 'Disrupteur',
dc: 'Ordinateur d\'appontage', dc: 'Ordinateur d\'appontage',
done: 'Fait', done: 'Valider',
'edit data': 'Editer donnée', 'edit data': 'Editer donnée',
efficiency: 'efficience', efficiency: 'efficacité',
'Electronic Countermeasure': 'Contre mesure électronique', 'Electronic Countermeasure': 'Contre-mesures électroniques',
empty: 'Vide', empty: 'Vide',
'enter name': 'Entrer nom', 'enter name': 'Entrer un nom',
fixed: 'fixé', fixed: 'fixé',
fc: 'Canon à fragmentation', fc: 'Canon à fragmentation',
fd: 'Réacteur FSD', fd: 'Réacteur FSD',
@@ -83,30 +83,30 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
fuel: 'carburant', fuel: 'carburant',
fs: 'Récupérateur de carburant', fs: 'Récupérateur de carburant',
ft: 'Réservoir de carburant', ft: 'Réservoir de carburant',
fx: 'Drone de ravitaillement', fx: 'Contrôleur de ravitailleur',
'full tank': 'Réservoir plein', 'full tank': 'Réservoir plein',
Gimballed: 'Point', Gimballed: 'Point',
hardpoints: 'Points d\'emport', hardpoints: 'Points d\'emport',
hb: 'Contrôle de patelle perce-soute', hb: 'Contrôle de patelle perce-soute',
'Heat Sink Launcher': 'Ejecteur de dissipateur thermique', 'Heat Sink Launcher': 'Éjecteur de dissipateur thermique',
huge: 'Très grand', huge: 'Très grand',
hull: 'Coque', hull: 'Coque',
hr: 'Renfort de soute', 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',
insurance: 'Assurance', insurance: 'Assurance',
'Intermediate Discovery Scanner': 'Scanner de découverte de portée intermédiaire', 'Intermediate Discovery Scanner': 'Détecteur découverte intermédiaire',
'internal compartments': 'compartiments internes', 'internal compartments': 'compartiments internes',
'jump range': 'Distance de saut', 'jump range': 'Distance de saut',
jumps: 'Sauts', jumps: 'Sauts',
kw: 'Détecteur d\'avis de recherche', kw: 'Détecteur d\'avis de recherche',
L: 'Langage',
laden: 'chargé', laden: 'chargé',
language: 'Langage', language: 'Langue',
large: 'grand', large: 'large',
ls: 'Support vital', 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',
@@ -116,37 +116,37 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
nl: 'Lance-mines', nl: 'Lance-mines',
'Mining Lance': 'Lance de minage', 'Mining Lance': 'Lance de minage',
ml: 'Laser minier', ml: 'Laser minier',
'Mirrored Surface Composite': 'Composite à surface mirroir', 'Mirrored Surface Composite': 'Composite à surface miroir',
mr: 'Lance missiles', mr: 'Batterie de missiles',
mc: 'Canon multiple', mc: 'Canon multiple',
'net cost': 'coûts nets', 'net cost': 'coûts nets',
no: 'non', no: 'non',
PHRASE_NO_BUILDS: 'Défaut de configuration pour comparaison', PHRASE_NO_BUILDS: 'Aucune configuration ajoutée pour comparaison',
PHRASE_NO_RETROCH: 'configuration non modifiée', PHRASE_NO_RETROCH: 'Configuration non modifiée',
none: 'aucun', none: 'aucun',
'none created': 'Rien de créé', 'none created': 'Rien de créé',
off: 'éteint', off: 'éteint',
on: 'allumé', on: 'allumé',
'optimal mass': 'masse optimale', 'optimal mass': 'masse optimale',
'optimize mass': 'optimiser masse', 'optimize mass': 'optimiser masse',
overwrite: 'écraser', overwrite: 'remplacer',
Pacifier: 'Pacificateur', Pacifier: 'Pacificateur',
PHRASE_IMPORT: 'Coller JSON ou importer ici', PHRASE_IMPORT: 'Coller ici votre JSON à importer',
pen: 'pén.', pen: 'pén.',
penetration: 'pénétration', penetration: 'pénétration',
permalink: 'lien durable', permalink: 'lien durable',
pa: 'accélérateur plasma', pa: 'accélérateur plasma',
'Point Defence': 'Défense ponctuelle', 'Point Defence': 'Défense ponctuelle',
power: 'énergie', power: 'énergie',
pd: 'distributeur d\'énérgie', pd: 'Répartiteur de puissance',
pp: 'centrale d\'énergie', pp: 'Générateur',
priority: 'priorité', priority: 'priorité',
psg: 'générateur de bouclier prisme', psg: 'générateur de bouclier prisme',
proceed: 'continuer', proceed: 'continuer',
pc: 'Drône de minage', pc: 'Contrôleur de prospecteur',
pl: 'Laser à impulsion', pl: 'Laser à impulsion',
PWR: 'Puissance', PWR: 'P',
rg: 'Canon électromagnétique', rg: 'Canon électrique',
range: 'portée', range: 'portée',
rate: 'cadence', rate: 'cadence',
'Reactive Surface Composite': 'Composite à surface réactive', 'Reactive Surface Composite': 'Composite à surface réactive',
@@ -165,9 +165,9 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
ROF: 'cadence', ROF: 'cadence',
save: 'sauvegarder', save: 'sauvegarder',
sc: 'scanner', sc: 'scanner',
PHRASE_SELECT_BUILDS: 'Sélectionner configurations à comparer', PHRASE_SELECT_BUILDS: 'Sélectionner les configurations à comparer',
sell: 'vendre', sell: 'vendre',
s: 'détecteurs', s: 'Capteurs',
settings: 'paramètres', settings: 'paramètres',
sb: 'Survolteur de bouclier', sb: 'Survolteur de bouclier',
scb: 'Réserve de cellules d\'énergie', scb: 'Réserve de cellules d\'énergie',
@@ -180,9 +180,9 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
skip: 'Suivant', skip: 'Suivant',
small: 'petit', small: 'petit',
speed: 'vitesse', speed: 'vitesse',
'Standard Docking Computer': 'ordinateur amarrage standard', 'Standard Docking Computer': 'Ordinateur d\'appontage standard',
Stock: 'de base', Stock: 'de base',
T_LOAD: 'degrés', T_LOAD: 'Charge thermique',
'The Retributor': 'Le Rétributeur', 'The Retributor': 'Le Rétributeur',
t: 'propulseurs', t: 'propulseurs',
time: 'temps', time: 'temps',
@@ -190,11 +190,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
'total range': 'Distance maximale', 'total range': 'Distance maximale',
turret: 'tourelle', turret: 'tourelle',
unladen: 'Non chargé', unladen: 'Non chargé',
PHRASE_UPDATE_RDY: 'Mise à jour disponible ! Cliquez pour rafraichir', PHRASE_UPDATE_RDY: 'Mise à jour disponible ! Cliquez ici pour mettre à jour',
utility: 'utilitaire', utility: 'utilitaire',
'utility mounts': 'Support utilitaire', 'utility mounts': 'Support utilitaire',
WEP: 'ARM', WEP: 'ARM',
yes: 'oui', yes: 'oui',
PHRASE_BACKUP_DESC: 'Exportation détaillée des données Coriolis pour l\'utilisation dans d\'autres sites et outils' PHRASE_BACKUP_DESC: 'Exportation détaillée des données de Coriolis pour l\'utilisation dans d\'autres sites et outils'
}); });
}]); }]);

133
app/js/i18n/it.js Normal file
View File

@@ -0,0 +1,133 @@
angular.module('app').config(['$translateProvider', 'localeFormatProvider', function($translateProvider, localeFormatProvider) {
// Declare number format settings
localeFormatProvider.addFormat('es', {
decimal: ',',
thousands: '.',
grouping: [3],
currency: ['€', ''],
dateTime: '%A %e %B %Y, %X',
date: '%d/%m/%Y',
time: '%H:%M:%S',
periods: ['AM', 'PM'], // unused
days: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],
shortDays: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
shortMonths: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic']
});
$translateProvider.translations('it', {
PHRASE_EXPORT_DESC: 'Un export dettagliato in formato JSON della tua configurazione per essere usato in altri siti o tools',
'A-Rated': 'Classe A',
about: 'Info su Coriolis',
action: 'azione',
added: 'aggiunto',
Advanced: 'Avanzato',
agility: 'agilità',
ammo: 'munizioni',
PHRASE_CONFIRMATION: 'Sei sicuro ?',
armour: 'armatura',
available: 'disponibile',
bins: 'contenitore',
build: 'configurazione',
'build name': 'Nome Configurazione',
builds: 'configurazioni',
buy: 'compra',
cancel: 'cancella',
cells: 'celle',
close: 'chiudi',
compare: 'confronta',
'compare all': 'confronta tutti',
comparison: 'comparazione',
comparisons: 'comparazioni',
component: 'componente',
cost: 'costo',
costs: 'costi',
cm: 'Contromisure',
create: 'crea',
'create new': 'crea nuovo',
credits: 'crediti',
damage: 'danno',
delete: 'elimina',
'delete all': 'elimina tutto',
dep: 'dep',
deployed: 'deployed',
'detailed export': 'esportazione dettagliata',
disabled: 'disabilita',
discount: 'sconto',
done: 'fatto',
'edit data': 'modifica i dati',
efficiency: 'efficenza',
empty: 'vuoto',
Enforcer: 'Rinforzatore',
'enter name': 'Inserisci un nome',
export: 'esporta',
fixed: 'fissi',
fuel: 'carburante',
'full tank': 'Serbatoio Pieno',
huge: 'enorme',
hull: 'corazza',
import: 'importa',
'import all': 'importa tutto',
insurance: 'assicurazione',
'internal compartments': 'compartimenti interni',
'jump range': 'distanza di salto',
jumps: 'salti',
laden: 'carico',
language: 'lingua',
large: 'largo',
mass: 'massa',
max: 'massimo',
'max mass': 'massa massimale',
medium: 'medio',
'net cost': 'costo netto',
PHRASE_NO_BUILDS: 'nessuna configurazione è stata aggiunta per la comparazione!',
PHRASE_NO_RETROCH: 'Nessun cambiamento di Retrofitting',
none: 'nessuno',
'none created': 'nessuno creato',
optimal: 'ottimale',
'optimal mass': 'massa ottimale',
'optimize mass': 'ottimizza la massa',
overwrite: 'sovrasscrivi',
PHRASE_IMPORT: 'Incolla un JSON o importalo qua',
penetration: 'penetrazione',
power: 'potenza',
priority: 'priorità',
proceed: 'procedi',
range: 'distanza',
rate: 'rateo',
recharge: 'ricarica',
reload: 'ricarica',
rename: 'rinomina',
repair: 'ripara',
reset: 'resetta',
retracted: 'retratti',
'retrofit costs': 'costi di retrofit',
'retrofit from': 'retrofit da',
save: 'salva',
sell: 'vendi',
settings: 'impostazioni',
shields: 'scudi',
ship: 'nave',
ships: 'navi',
shortened: 'accorciato',
size: 'grandezza',
skip: 'salta',
small: 'piccolo',
speed: 'velocità',
Stock: 'appena comprata',
t: 'thrusters',
time: 'tempo',
total: 'totale',
'total range': 'distanza totale',
turret: 'torrette',
type: 'tipo',
unladen: 'scarico',
PHRASE_UPDATE_RDY: 'Aggiornamenti disponibili ! Clicca per Aggiornare',
utility: 'supporti',
'utility mounts': 'supporti di utilità',
version: 'versione',
yes: 'sì',
PHRASE_BACKUP_DESC: 'Esportazione di tutti i dati su Coriolis per salvarli o trasferirli in un altro Browser/dispositivo'
});
}]);

View File

@@ -3,19 +3,21 @@ angular.module('app').config(['$translateProvider', function($translateProvider)
.useSanitizeValueStrategy('escapeParameters') .useSanitizeValueStrategy('escapeParameters')
.useStorage('Persist') .useStorage('Persist')
.fallbackLanguage('en') // Use English as default/fallback language .fallbackLanguage('en') // Use English as default/fallback language
.registerAvailableLanguageKeys(['en', 'de', 'fr', 'ru'], { // TODO: add 'es' to the array when ready .registerAvailableLanguageKeys(['en', 'de', 'es', 'fr', 'it', 'ru'], {
'en*': 'en', 'en*': 'en',
'de*': 'de', 'de*': 'de',
//'es*': 'es', 'es*': 'es',
'fr*': 'fr', 'fr*': 'fr',
'it*': 'it',
'ru*': 'ru' 'ru*': 'ru'
}) })
.determinePreferredLanguage(); .determinePreferredLanguage();
}]) }])
.value('Languages', { .value('Languages', {
en: 'English', en: 'English',
de: 'Deutsh', de: 'Deutsch',
//es: 'Español', it: 'Italiano',
es: 'Español',
fr: 'Français', fr: 'Français',
ru: 'ру́сский язы́к' ru: 'ру́сский'
}); });

View File

@@ -31,7 +31,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
armour: 'Броня', armour: 'Броня',
am: 'Ремонтный модуль', am: 'Ремонтный модуль',
available: 'доступно', available: 'доступно',
backup: 'бэкап', backup: 'Резервная копия',
'Basic Discovery Scanner': 'Стандартный исследовательский сканер', 'Basic Discovery Scanner': 'Стандартный исследовательский сканер',
bl: 'Лучевой лазер', bl: 'Лучевой лазер',
beta: 'Бета', beta: 'Бета',
@@ -40,11 +40,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
build: 'cборка', build: 'cборка',
'build name': 'название сборки', 'build name': 'название сборки',
builds: 'cборки', builds: 'cборки',
bh: 'Переборки', bh: 'Корпус',
ul: 'Мультиимпульсный лазер', ul: 'Мультиимпульсный лазер',
buy: 'купить', buy: 'купить',
cancel: 'отменить', cancel: 'отменить',
c: 'Крупнокалиберное орудие', c: 'Пушка',
capital: 'Крупный', capital: 'Крупный',
cargo: 'Груз', cargo: 'Груз',
'Cargo Hatch': 'Грузовой люк', 'Cargo Hatch': 'Грузовой люк',
@@ -71,7 +71,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
delete: 'Удалить', delete: 'Удалить',
'delete all': 'Удалить все', 'delete all': 'Удалить все',
dep: 'Вып', dep: 'Вып',
deployed: 'Готово', deployed: 'Открыты',
'detailed export': 'Подробный экспорт', 'detailed export': 'Подробный экспорт',
'Detailed Surface Scanner': 'Подробный сканер поверхности', 'Detailed Surface Scanner': 'Подробный сканер поверхности',
disabled: 'Отключено', disabled: 'Отключено',
@@ -79,15 +79,15 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
Distruptor: 'Дисраптор', Distruptor: 'Дисраптор',
dc: 'Стыковочный компьютер', dc: 'Стыковочный компьютер',
done: 'готово', done: 'готово',
DPS: 'ПВС', DPS: 'УВС',
'edit data': 'Редактирование', 'edit data': 'Редактирование',
efficiency: 'Эффективность', efficiency: 'Эффективность',
'Electronic Countermeasure': 'Электронное противодействие', 'Electronic Countermeasure': 'Электронная противомера',
empty: 'пусто', empty: 'пусто',
Enforcer: 'Энфорсер', Enforcer: 'Энфорсер',
ENG: 'ДВГ', ENG: 'ДВГ',
'enter name': 'Введите имя', 'enter name': 'Введите имя',
EPS: 'э/с', EPS: 'ЭВС',
export: 'Экспорт', export: 'Экспорт',
fixed: 'Фиксированое', fixed: 'Фиксированое',
forum: 'Форум', forum: 'Форум',
@@ -97,11 +97,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
fi: 'Перехватчик FSD', fi: 'Перехватчик FSD',
fuel: 'Топливо', fuel: 'Топливо',
fs: 'Топливозаборник', fs: 'Топливосборщик',
ft: 'Топливный бак', ft: 'Топливный бак',
fx: 'Контроллер Дрона-заправщика', fx: 'Контроллер Дрона-заправщика',
'full tank': 'Полный бак', 'full tank': 'Полный бак',
Gimballed: 'Доводимое', Gimballed: 'Шарнирное',
H: 'O', H: 'O',
hardpoints: 'Орудийные порты', hardpoints: 'Орудийные порты',
hb: 'Контроллер "дрон-взломщик"', hb: 'Контроллер "дрон-взломщик"',
@@ -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: 'Св.лет',
@@ -133,13 +134,13 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
max: 'Макс', max: 'Макс',
'max mass': 'Максимальная масса', 'max mass': 'Максимальная масса',
medium: 'Средний', medium: 'Средний',
'Military Grade Composite': 'Композит военного класса', 'Military Grade Composite': 'Военный композит',
nl: 'Минный аппарат', nl: 'Минноукладчик',
'Mining Lance': 'Бурильная сулица', 'Mining Lance': 'Бурильная сулица',
ml: 'Горный лазер', ml: 'Бурильный лазер',
'Mirrored Surface Composite': 'Композит с зеркальной поверхностью', 'Mirrored Surface Composite': 'Зеркальный композит',
mr: 'Ракетная установка', mr: 'Ракетная установка',
mc: 'Скорострельное орудие', mc: 'Многоствольное орудие',
'net cost': 'разница в цене', 'net cost': 'разница в цене',
no: 'Нет', no: 'Нет',
PHRASE_NO_BUILDS: 'Нечего сравнивать', PHRASE_NO_BUILDS: 'Нечего сравнивать',
@@ -153,7 +154,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
'optimize mass': 'Оптимизировать массу', 'optimize mass': 'Оптимизировать массу',
overwrite: 'перезаписать', overwrite: 'перезаписать',
Pacifier: 'Миротворец', Pacifier: 'Миротворец',
'Pack-Hound': 'Ракеты "Собачья стая" or original name(eng)', 'Pack-Hound': 'Ракета "Гончая"',
PHRASE_IMPORT: 'Для импорта вставьте код в эту форму', PHRASE_IMPORT: 'Для импорта вставьте код в эту форму',
pen: 'ПБ', pen: 'ПБ',
penetration: 'Пробитие', penetration: 'Пробитие',
@@ -170,10 +171,10 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
pc: 'Контроллер "Дрон-исследователь"', pc: 'Контроллер "Дрон-исследователь"',
pl: 'Импульсный лазер', pl: 'Импульсный лазер',
PWR: 'Эн', PWR: 'Эн',
rg: 'Рельсовая пушка', rg: 'Рельсотрон',
range: 'Дальность', range: 'Дальность',
rate: 'скорость', rate: 'скорость',
'Reactive Surface Composite': 'Композитно-реактивная поверхность', 'Reactive Surface Composite': 'Динамическая защита',
recharge: 'Перезарядка', recharge: 'Перезарядка',
rf: 'Переработка', rf: 'Переработка',
'refuel time': 'Время дозаправки', 'refuel time': 'Время дозаправки',
@@ -211,8 +212,8 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
SYS: 'СИС', SYS: 'СИС',
T: 'Т', T: 'Т',
T_LOAD: 'Тепл.', T_LOAD: 'Тепл.',
'The Retributor': 'Орудие Возмездия', 'The Retributor': '"Возмездие"',
t: 'Ускорители', t: 'Двигатели',
time: 'Время', time: 'Время',
tp: 'Торпедный аппарат', tp: 'Торпедный аппарат',
total: 'Всего', total: 'Всего',

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

@@ -1,4 +1,4 @@
angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength', 'calcJumpRange', 'calcTotalRange', 'lodash', 'ArmourMultiplier', function(Components, calcShieldStrength, calcJumpRange, calcTotalRange, _, ArmourMultiplier) { angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength', 'calcJumpRange', 'calcTotalRange', 'calcSpeed', 'lodash', 'ArmourMultiplier', function(Components, calcShieldStrength, calcJumpRange, calcTotalRange, calcSpeed, _, ArmourMultiplier) {
/** /**
* Returns the power usage type of a slot and it's particular component * Returns the power usage type of a slot and it's particular component
@@ -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,107 +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()
.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) {
@@ -264,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) {
@@ -272,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);
@@ -284,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) {
@@ -375,9 +393,11 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
if (powerChange) { if (powerChange) {
this.updatePower(); this.updatePower();
} }
this.updateTopSpeed();
this.updateJumpStats(); this.updateJumpStats();
this.updateShieldStrength(); this.updateShieldStrength();
} }
return this;
}; };
Ship.prototype.updatePower = function() { Ship.prototype.updatePower = function() {
@@ -390,50 +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() {
var speeds = calcSpeed(this.unladenMass + this.fuelCapacity, this.speed, this.boost, this.standard[1].c, this.pipSpeed);
this.topSpeed = speeds['4 Pips'];
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, name, clobber) {
var component = Components.findHardpoint(group, 0, rating, name);
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',
@@ -33,17 +34,19 @@ angular.module('shipyard', ['ngLodash'])
sc: 'Scanner', sc: 'Scanner',
am: 'Auto Field-Maintenance Unit', am: 'Auto Field-Maintenance Unit',
cr: 'Cargo Rack', cr: 'Cargo Rack',
fi: 'FSD Interdictor', fi: 'Frame Shift Drive Interdictor',
hb: 'Hatch Breaker Limpet Controller', hb: 'Hatch Breaker Limpet Controller',
hr: 'Hull Reinforcement Package', hr: 'Hull Reinforcement Package',
rf: 'Refinery', rf: 'Refinery',
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',
cc: 'Collector Limpet Controller', cc: 'Collector Limpet Controller',
pv: 'Planetary Vehicle Hangar',
// Hard Points // Hard Points
bl: 'Beam Laser', bl: 'Beam Laser',
@@ -64,7 +67,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 +81,7 @@ angular.module('shipyard', ['ngLodash'])
* *
* @type {Array} * @type {Array}
*/ */
.value('ShipFacets', [ .constant('ShipFacets', [
{ // 0 { // 0
title: 'agility', title: 'agility',
props: ['agility'], props: ['agility'],
@@ -87,10 +90,10 @@ angular.module('shipyard', ['ngLodash'])
}, },
{ // 1 { // 1
title: 'speed', title: 'speed',
props: ['speed', 'boost'], props: ['topSpeed', 'topBoost'],
lbls: ['thrusters', 'boost'], lbls: ['thrusters', 'boost'],
unit: 'm/s', unit: 'm/s',
fmt: 'fRound' fmt: 'fCrd'
}, },
{ // 2 { // 2
title: 'armour', title: 'armour',
@@ -161,8 +164,9 @@ angular.module('shipyard', ['ngLodash'])
/** /**
* Set of all available / theoretical discounts * Set of all available / theoretical discounts
*/ */
.value('Discounts', { .constant('Discounts', {
'0%': 1, '0%': 1,
'2.5%': 0.975,
'5%': 0.95, '5%': 0.95,
'10%': 0.90, '10%': 0.90,
'15%': 0.85, '15%': 0.85,
@@ -204,7 +208,6 @@ angular.module('shipyard', ['ngLodash'])
/** /**
* Calculate the a ships shield strength based on mass, shield generator and shield boosters used. * Calculate the a ships shield strength based on mass, shield generator and shield boosters used.
* *
* @private
* @param {number} mass Current mass of the ship * @param {number} mass Current mass of the ship
* @param {number} shields Base Shield strength MJ for ship * @param {number} shields Base Shield strength MJ for ship
* @param {object} sg The shield generator used * @param {object} sg The shield generator used
@@ -230,18 +233,23 @@ angular.module('shipyard', ['ngLodash'])
} }
}) })
/** /**
* Calculate the a ships speed based on mass, and thrusters. Currently Innacurate / Incomplete :( * Calculate the a ships speed based on mass, and thrusters.
* *
* @private
* @param {number} mass Current mass of the ship * @param {number} mass Current mass of the ship
* @param {number} baseSpeed Base speed m/s for ship * @param {number} baseSpeed Base speed m/s for ship
* @param {number} baseBoost Base boost m/s for ship * @param {number} baseBoost Base boost speed m/s for ship
* @param {object} thrusters The shield generator used * @param {object} thrusters The Thrusters used
* @return {object} Approximate speed and boost speed in m/s * @param {number} pipSpeed Speed pip multiplier
* @return {object} Approximate speed by pips
*/ */
.value('calcSpeed', function(mass, baseSpeed, baseBoost) { //, thrusters) { .value('calcSpeed', function(mass, baseSpeed, baseBoost, thrusters, pipSpeed) {
//var speed = baseSpeed * (1 + ((thrusters.optmass / mass) * 0.1 ) ); // TODO: find thruser coefficient(s) var multiplier = mass > thrusters.maxmass ? 0 : ((1 - thrusters.M) + (thrusters.M * Math.pow(3 - (2 * Math.max(0.5, mass / thrusters.optmass)), thrusters.P)));
//var boost = baseBoost * (1 + ((thrusters.optmass / mass) * 0.1 ) ); var speed = baseSpeed * multiplier;
return { boost: baseSpeed, speed: baseBoost }; return {
'0 Pips': speed * (1 - (pipSpeed * 4)),
'2 Pips': speed * (1 - (pipSpeed * 2)),
'4 Pips': speed,
'boost': baseBoost * multiplier
};
}); });

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

@@ -2,7 +2,7 @@
font-size: 0.8em; font-size: 0.8em;
padding: 0.25em 0.5em; padding: 0.25em 0.5em;
background: @primary-disabled; background: @primary-disabled;
text-transform: capitalize;
color: @primary-bg; color: @primary-bg;
pointer-events: none; pointer-events: none;
} }

View File

@@ -39,12 +39,14 @@ svg {
fill: @primary-disabled; fill: @primary-disabled;
} }
&.y {
text tspan:first-child {
fill: @primary;
}
} }
.label {
text-transform: capitalize;
}
.metric {
text-transform: none;
} }
.marker { .marker {
@@ -60,5 +62,6 @@ svg {
fill: @bgBlack; fill: @bgBlack;
stroke: @secondary; stroke: @secondary;
stroke-width: 1px; stroke-width: 1px;
font-size: 0.75em
} }
} }

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;
@@ -163,12 +189,6 @@ table.total {
.smallTablet({ .smallTablet({
width: 50%; width: 50%;
.axis.x {
g.tick:nth-child(2n + 1) text {
display: none;
}
}
}); });
.largePhone({ .largePhone({
@@ -192,12 +212,12 @@ table.total {
&.third { &.third {
width: 33%; width: 33%;
.largePhone({ .smallTablet({
width: 100% !important; width: 100% !important;
}); });
} }
.smallTablet({ .smallScreen({
.axis.x { .axis.x {
g.tick:nth-child(2n + 1) text { g.tick:nth-child(2n + 1) text {
display: none; display: none;
@@ -215,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

@@ -32,3 +32,9 @@
@rules(); @rules();
} }
} }
.smallScreen(@rules) {
@media only screen and /*(min-width: 601px) and */(max-width: 1400px) {
@rules();
}
}

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,9 @@
<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.vehicles">{{'vehicles' | translate}}: {{c.c.vehicles}}</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,26 +54,26 @@
</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">{{fRound(ship.speed)}} <u translate>m/s</u></span> <span ng-if="th.c.maxmass >= ship.ladenMass">{{fCrd(ship.topSpeed)}} <u translate>m/s</u></span>
<span class="warning" ng-if="th.c.maxmass < ship.ladenMass">0 <svg class="icon"><use xlink:href="#warning"></use></svg></span> <span class="warning" ng-if="th.c.maxmass < ship.ladenMass">0 <svg class="icon"><use xlink:href="#warning"></use></svg></span>
</td> </td>
<td> <td>
<span ng-if="pd.c.enginecapacity >= ship.boostEnergy && th.c.maxmass >= ship.ladenMass">{{fRound(ship.boost)}} <u translate>m/s</u></span> <span ng-if="pd.c.enginecapacity >= ship.boostEnergy && th.c.maxmass >= ship.ladenMass">{{fCrd(ship.topBoost)}} <u translate>m/s</u></span>
<span class="warning" ng-if="pd.c.enginecapacity < ship.boostEnergy || th.c.maxmass < ship.ladenMass">0 <span class="warning" ng-if="pd.c.enginecapacity < ship.boostEnergy || th.c.maxmass < ship.ladenMass">0
<svg class="icon"><use xlink:href="#warning"></use></svg> <svg class="icon"><use xlink:href="#warning"></use></svg>
</span> </span>
</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,29 @@
</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 class="select-group cap" translate="Heat Sink Launcher"></div>
<ul>
<li class="lc" ng-click="useUtility('cm',null,'Heat Sink Launcher')" translate="Heat Sink Launcher"></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)">
@@ -229,8 +318,8 @@
<th style="width:3em;" class="sortable" ng-click="sortPwr('type')" translate="TYPE"></th> <th style="width:3em;" class="sortable" ng-click="sortPwr('type')" translate="TYPE"></th>
<th style="width:4em;" class="sortable" ng-click="sortPwr('priority')" translate="PRI"></th> <th style="width:4em;" class="sortable" ng-click="sortPwr('priority')" translate="PRI"></th>
<th colspan="2" class="sortable" ng-click="sortPwr('c.power')" translate="PWR"></th> <th colspan="2" class="sortable" ng-click="sortPwr('c.power')" translate="PWR"></th>
<th style="width:3em;" class="sortable" ng-click="sortPwr(statusRetracted)" translate="RET"></th> <th style="width:3em;" class="sortable" ng-click="sortPwr(statusRetracted)" translate="ret"></th>
<th style="width:3em;" class="sortable" ng-click="sortPwr(statusDeployed)" translate="DEP"></th> <th style="width:3em;" class="sortable" ng-click="sortPwr(statusDeployed)" translate="dep"></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -250,11 +339,19 @@
<td class="le shorten cap" ng-click="togglePwr(c)" ng-bind="cName(c)"></td> <td class="le shorten cap" ng-click="togglePwr(c)" ng-bind="cName(c)"></td>
<td ng-click="togglePwr(c)"><u ng-bind="c.type | translate"></u></td> <td ng-click="togglePwr(c)"><u ng-bind="c.type | translate"></u></td>
<td><span ng-click="decPriority(c)" class="flip">&#9658;</span> {{c.priority + 1}} <span ng-click="incPriority(c)">&#9658;</span></td> <td><span ng-click="decPriority(c)" class="flip">&#9658;</span> {{c.priority + 1}} <span ng-click="incPriority(c)">&#9658;</span></td>
<td class="ri" style="width:3.25em;">{{fPwr(c.c.power)}}</td> <td class="ri" style="width:3.25em;" ng-click="togglePwr(c)">{{fPwr(c.c.power)}}</td>
<td class="ri" style="width:3em;"><u>{{f1Pct(c.c.power/ship.powerAvailable)}}</u></td> <td class="ri" style="width:3em;" ng-click="togglePwr(c)"><u>{{f1Pct(c.c.power/ship.powerAvailable)}}</u></td>
<td ng-if="!c.enabled" class="disabled upp" colspan="2" translate="disabled"></td> <td ng-if="!c.enabled" class="disabled upp" colspan="2" translate="disabled" ng-click="togglePwr(c)"></td>
<td class="upp" ng-if="c.enabled" ng-class="STATUS_CLASS[statusRetracted(c)]">{{STATUS[statusRetracted(c)] | translate}}</td> <td class="upp" ng-if="c.enabled" ng-click="togglePwr(c)">
<td class="upp" ng-if="c.enabled" ng-class="STATUS_CLASS[statusDeployed(c)]">{{STATUS[statusDeployed(c)] | translate}}</td> <svg class="icon secondary-disabled" ng-if="statusRetracted(c) == 3"><use xlink:href="#power"><title class="cap">{{'on' | translate}}</title></use></svg>
<svg class="icon warning" ng-if="statusRetracted(c) == 2"><use xlink:href="#no-power"><title class="cap">{{'off' | translate}}</title></use></svg>
<span class="disabled" translate="disabled" ng-if="statusRetracted(c) == 1"></span>
</td>
<td class="upp" ng-if="c.enabled" ng-click="togglePwr(c)">
<svg class="icon secondary-disabled" ng-if="statusDeployed(c) == 3"><use xlink:href="#power"><title class="cap">{{'on' | translate}}</title></use></svg>
<svg class="icon warning" ng-if="statusDeployed(c) == 2"><use xlink:href="#no-power"><title class="cap">{{'off' | translate}}</title></use></svg>
<span class="disabled" translate="disabled" ng-if="statusDeployed(c) == 1"></span>
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -265,8 +362,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>
@@ -311,7 +409,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>
@@ -319,12 +417,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>
@@ -346,24 +444,55 @@
</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 half"> <div class="group third">
<h1 translate="jump range"></h1> <h1 translate="jump range"></h1>
<div line-chart config="jrChart" series="jrSeries"></div> <div line-chart config="jrChart" series="jrSeries"></div>
</div> </div>
<div class="group half"> <div class="group third">
<h1 translate="total range"></h1> <h1 translate="total range"></h1>
<div line-chart config="trChart" series="trSeries"></div> <div line-chart config="trChart" series="trSeries"></div>
</div> </div>
<!-- TODO: Add back in once calcSpeed is dynamic and accurate
<div class="group third"> <div class="group third">
<h1 translate="speed"></h1> <h1 translate="speed"></h1>
<div line-chart config="speedChart" series="speedSeries"></div> <div line-chart config="speedChart" series="speedSeries"></div>
</div> </div>
-->
<div class="group half"> <div class="group half">
<div slider max="ship.fuelCapacity" unit="'T'" on-change="::fuelChange(val)" style="position:relative; margin: 0 auto;"> <div slider max="ship.fuelCapacity" unit="'T'" on-change="::fuelChange(val)" style="position:relative; margin: 0 auto;">

View File

@@ -1,9 +1,89 @@
<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 rowspan="2" class="sortable" ng-click="sortShips('agility')" translate="agility"></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>
<td class="ri" ng-bind="s.agility"></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 bb316e77b2

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,32 +0,0 @@
{
"7E": { "grp": "t", "class": 7, "rating": "E", "cost": 633199, "mass": 80, "power": 6.08, "optmass": 1440, "maxmass": 2160 },
"7D": { "grp": "t", "class": 7, "rating": "D", "cost": 1899597, "mass": 32, "power": 6.84, "optmass": 1620, "maxmass": 2430 },
"7C": { "grp": "t", "class": 7, "rating": "C", "cost": 5698790, "mass": 80, "power": 7.6, "optmass": 1800, "maxmass": 2700 },
"7B": { "grp": "t", "class": 7, "rating": "B", "cost": 17096371, "mass": 128, "power": 8.36, "optmass": 1980, "maxmass": 2970 },
"7A": { "grp": "t", "class": 7, "rating": "A", "cost": 51289112, "mass": 80, "power": 9.12, "optmass": 2160, "maxmass": 3240 },
"6E": { "grp": "t", "class": 6, "rating": "E", "cost": 199747, "mass": 40, "power": 5.04, "optmass": 960, "maxmass": 1440 },
"6D": { "grp": "t", "class": 6, "rating": "D", "cost": 599242, "mass": 16, "power": 5.67, "optmass": 1080, "maxmass": 1620 },
"6C": { "grp": "t", "class": 6, "rating": "C", "cost": 1797726, "mass": 40, "power": 6.3, "optmass": 1200, "maxmass": 1800 },
"6B": { "grp": "t", "class": 6, "rating": "B", "cost": 5393177, "mass": 64, "power": 6.93, "optmass": 1320, "maxmass": 1980 },
"6A": { "grp": "t", "class": 6, "rating": "A", "cost": 16179531, "mass": 40, "power": 7.56, "optmass": 1440, "maxmass": 2160 },
"5E": { "grp": "t", "class": 5, "rating": "E", "cost": 63012, "mass": 20, "power": 4.08, "optmass": 560, "maxmass": 840 },
"5D": { "grp": "t", "class": 5, "rating": "D", "cost": 189035, "mass": 8, "power": 4.59, "optmass": 630, "maxmass": 945 },
"5C": { "grp": "t", "class": 5, "rating": "C", "cost": 567106, "mass": 20, "power": 5.1, "optmass": 700, "maxmass": 1050 },
"5B": { "grp": "t", "class": 5, "rating": "B", "cost": 1701318, "mass": 32, "power": 5.61, "optmass": 770, "maxmass": 1155 },
"5A": { "grp": "t", "class": 5, "rating": "A", "cost": 5103953, "mass": 20, "power": 6.12, "optmass": 840, "maxmass": 1260 },
"4E": { "grp": "t", "class": 4, "rating": "E", "cost": 19878, "mass": 10, "power": 3.82, "optmass": 280, "maxmass": 420 },
"4D": { "grp": "t", "class": 4, "rating": "D", "cost": 59633, "mass": 4, "power": 3.69, "optmass": 315, "maxmass": 473 },
"4C": { "grp": "t", "class": 4, "rating": "C", "cost": 178898, "mass": 10, "power": 4.1, "optmass": 350, "maxmass": 525 },
"4B": { "grp": "t", "class": 4, "rating": "B", "cost": 536693, "mass": 16, "power": 4.51, "optmass": 385, "maxmass": 578 },
"4A": { "grp": "t", "class": 4, "rating": "A", "cost": 1610080, "mass": 10, "power": 4.92, "optmass": 420, "maxmass": 630 },
"3E": { "grp": "t", "class": 3, "rating": "E", "cost": 6271, "mass": 5, "power": 2.48, "optmass": 80, "maxmass": 120 },
"3D": { "grp": "t", "class": 3, "rating": "D", "cost": 18812, "mass": 2, "power": 2.79, "optmass": 90, "maxmass": 135 },
"3C": { "grp": "t", "class": 3, "rating": "C", "cost": 56435, "mass": 5, "power": 3.1, "optmass": 100, "maxmass": 150 },
"3B": { "grp": "t", "class": 3, "rating": "B", "cost": 169304, "mass": 8, "power": 3.41, "optmass": 110, "maxmass": 165 },
"3A": { "grp": "t", "class": 3, "rating": "A", "cost": 507912, "mass": 5, "power": 3.72, "optmass": 120, "maxmass": 180 },
"2E": { "grp": "t", "class": 2, "rating": "E", "cost": 1978, "mass": 2.5, "power": 2, "optmass": 48, "maxmass": 72 },
"2D": { "grp": "t", "class": 2, "rating": "D", "cost": 5934, "mass": 1, "power": 2.25, "optmass": 54, "maxmass": 81 },
"2C": { "grp": "t", "class": 2, "rating": "C", "cost": 17803, "mass": 2.5, "power": 2.5, "optmass": 60, "maxmass": 90 },
"2B": { "grp": "t", "class": 2, "rating": "B", "cost": 53408, "mass": 4, "power": 2.75, "optmass": 66, "maxmass": 99 },
"2A": { "grp": "t", "class": 2, "rating": "A", "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.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p5", "grp": "psg", "class": 2, "rating": "A", "cost": 240336, "mass": 5, "power": 3.15, "minmass": 23, "optmass": 55, "maxmass": 138, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p4", "grp": "psg", "class": 3, "rating": "A", "cost": 761868, "mass": 10, "power": 3.78, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p3", "grp": "psg", "class": 4, "rating": "A", "cost": 2415120, "mass": 20, "power": 4.62, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p2", "grp": "psg", "class": 5, "rating": "A", "cost": 7655930, "mass": 40, "power": 5.46, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p1", "grp": "psg", "class": 6, "rating": "A", "cost": 24269297, "mass": 80, "power": 6.51, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p0", "grp": "psg", "class": 7, "rating": "A", "cost": 76933668, "mass": 160, "power": 7.35, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p7", "grp": "psg", "class": 8, "rating": "A", "cost": 243879729, "mass": 320, "power": 8.4, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 }
]
}

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,44 +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,69 +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
},
"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,103 +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
},
"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,83 +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
},
"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,73 +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
},
"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,74 +0,0 @@
{
"diamondback": {
"properties": {
"name": "Diamondback Scout",
"manufacturer": "Lakon",
"class": 1,
"hullCost": 461341,
"speed": 283,
"boost": 384,
"boostEnergy": 11,
"agility": 8,
"baseShieldStrength": 118,
"baseArmour": 216,
"hullMass": 170,
"masslock": 8
},
"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,73 +0,0 @@
{
"diamondback_explorer": {
"properties": {
"name": "Diamondback Explorer",
"manufacturer": "Lakon",
"class": 1,
"hullCost": 1635691,
"speed": 242,
"boost": 316,
"boostEnergy": 14,
"agility": 5,
"baseShieldStrength": 146,
"baseArmour": 270,
"hullMass": 298,
"masslock": 10
},
"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,63 +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
},
"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,77 +0,0 @@
{
"federal_assault_ship": {
"properties": {
"name": "Federal Assault Ship",
"manufacturer": "Core Dynamics",
"class": 2,
"hullCost": 19071993,
"speed": 216,
"boost": 361,
"boostEnergy": 21,
"agility": 6,
"baseShieldStrength": 180,
"baseArmour": 540,
"hullMass": 480,
"masslock": 14
},
"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,81 +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
},
"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"
]
}
}
}

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