commit 1097ca5a429173718fac547d5479afbffefd1e2b Author: Colin McLeod Date: Fri Apr 10 12:25:47 2015 -0700 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..bb7a34b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules +bower_components +bower_components/* +build +.DS_Store +*.log +app/js/db.js +nginx.pid \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..2ca4843a --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ + + +To do \ No newline at end of file diff --git a/app/fonts/orbitron-bold-webfont.eot b/app/fonts/orbitron-bold-webfont.eot new file mode 100755 index 00000000..e82acadf Binary files /dev/null and b/app/fonts/orbitron-bold-webfont.eot differ diff --git a/app/fonts/orbitron-bold-webfont.svg b/app/fonts/orbitron-bold-webfont.svg new file mode 100755 index 00000000..277bf551 --- /dev/null +++ b/app/fonts/orbitron-bold-webfont.svg @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/fonts/orbitron-bold-webfont.ttf b/app/fonts/orbitron-bold-webfont.ttf new file mode 100755 index 00000000..c99d5768 Binary files /dev/null and b/app/fonts/orbitron-bold-webfont.ttf differ diff --git a/app/fonts/orbitron-bold-webfont.woff b/app/fonts/orbitron-bold-webfont.woff new file mode 100755 index 00000000..48f95553 Binary files /dev/null and b/app/fonts/orbitron-bold-webfont.woff differ diff --git a/app/fonts/orbitron-bold-webfont.woff2 b/app/fonts/orbitron-bold-webfont.woff2 new file mode 100755 index 00000000..89147946 Binary files /dev/null and b/app/fonts/orbitron-bold-webfont.woff2 differ diff --git a/app/fonts/orbitron-medium-webfont.eot b/app/fonts/orbitron-medium-webfont.eot new file mode 100755 index 00000000..504890d8 Binary files /dev/null and b/app/fonts/orbitron-medium-webfont.eot differ diff --git a/app/fonts/orbitron-medium-webfont.svg b/app/fonts/orbitron-medium-webfont.svg new file mode 100755 index 00000000..3188e702 --- /dev/null +++ b/app/fonts/orbitron-medium-webfont.svg @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/fonts/orbitron-medium-webfont.ttf b/app/fonts/orbitron-medium-webfont.ttf new file mode 100755 index 00000000..fba9a0d3 Binary files /dev/null and b/app/fonts/orbitron-medium-webfont.ttf differ diff --git a/app/fonts/orbitron-medium-webfont.woff b/app/fonts/orbitron-medium-webfont.woff new file mode 100755 index 00000000..5c968ae0 Binary files /dev/null and b/app/fonts/orbitron-medium-webfont.woff differ diff --git a/app/fonts/orbitron-medium-webfont.woff2 b/app/fonts/orbitron-medium-webfont.woff2 new file mode 100755 index 00000000..b564f91c Binary files /dev/null and b/app/fonts/orbitron-medium-webfont.woff2 differ diff --git a/app/fonts/orbitron-regular-webfont.eot b/app/fonts/orbitron-regular-webfont.eot new file mode 100755 index 00000000..cc95d224 Binary files /dev/null and b/app/fonts/orbitron-regular-webfont.eot differ diff --git a/app/fonts/orbitron-regular-webfont.svg b/app/fonts/orbitron-regular-webfont.svg new file mode 100755 index 00000000..af25415b --- /dev/null +++ b/app/fonts/orbitron-regular-webfont.svg @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/fonts/orbitron-regular-webfont.ttf b/app/fonts/orbitron-regular-webfont.ttf new file mode 100755 index 00000000..6b6daaad Binary files /dev/null and b/app/fonts/orbitron-regular-webfont.ttf differ diff --git a/app/fonts/orbitron-regular-webfont.woff b/app/fonts/orbitron-regular-webfont.woff new file mode 100755 index 00000000..03ac6809 Binary files /dev/null and b/app/fonts/orbitron-regular-webfont.woff differ diff --git a/app/fonts/orbitron-regular-webfont.woff2 b/app/fonts/orbitron-regular-webfont.woff2 new file mode 100755 index 00000000..bb47de77 Binary files /dev/null and b/app/fonts/orbitron-regular-webfont.woff2 differ diff --git a/app/images/crosshairs.svg b/app/images/crosshairs.svg new file mode 100644 index 00000000..404d66f2 --- /dev/null +++ b/app/images/crosshairs.svg @@ -0,0 +1,148 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/images/ed-logo-sm.png b/app/images/ed-logo-sm.png new file mode 100644 index 00000000..7e7068a7 Binary files /dev/null and b/app/images/ed-logo-sm.png differ diff --git a/app/images/github-mark.svg b/app/images/github-mark.svg new file mode 100644 index 00000000..e6a247f9 --- /dev/null +++ b/app/images/github-mark.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/images/reddit.svg b/app/images/reddit.svg new file mode 100644 index 00000000..ae97cd78 --- /dev/null +++ b/app/images/reddit.svg @@ -0,0 +1,225 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/index.html b/app/index.html new file mode 100644 index 00000000..aa5d8db2 --- /dev/null +++ b/app/index.html @@ -0,0 +1,26 @@ + + + + + Shipyard + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/app/js/app.js b/app/js/app.js new file mode 100644 index 00000000..e3c9f7b8 --- /dev/null +++ b/app/js/app.js @@ -0,0 +1,36 @@ +angular.module('app', ['ngRoute','shipyard','ngLodash','app.templates']) +.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { + //$locationProvider.html5Mode(true); + $routeProvider + .when('/:ship', { templateUrl: 'views/ship.html', controller: 'ShipController' }) + .when('/', { templateUrl: 'views/ships.html', controller: 'ShipyardController' }) + +}]) +.run(['$rootScope','commonArray','shipPurpose', 'shipSize', 'hardPointClass', 'internalGroupMap', function ($rootScope, CArr, shipPurpose, sz, hpc, igMap) { + + // Global Reference variables + $rootScope.CArr = CArr; + $rootScope.SP = shipPurpose; + $rootScope.SZ = sz; + $rootScope.HPC = hpc; + $rootScope.igMap = igMap; + $rootScope.ships = DB.ships; + + // Formatters + $rootScope.credits = d3.format(',.0f'); + $rootScope.power = d3.format(',.2f'); + $rootScope.percent = d3.format(',.2%'); + + $rootScope.calcJumpRange = function(mass, fsd, fuel) { + return Math.pow( (fuel || fsd.maxfuel) / fds.fuelmul, 1 / fsd.fuelpower ) * fsd.optmass / mass; + }; + + // TODO: Load Saved Ships List from Local Storage + + // TODO: Save Ship + + // TODO: Load Ship + + // TODO: Generate Link for Ship + +}]); diff --git a/app/js/controllers/controller-ship.js b/app/js/controllers/controller-ship.js new file mode 100644 index 00000000..5a8b1a40 --- /dev/null +++ b/app/js/controllers/controller-ship.js @@ -0,0 +1,11 @@ +angular.module('app') +.controller('ShipController', ['$scope', '$routeParams','ShipFactory', 'components', function ($scope, $p, ShipFactory, Components) { + $scope.shipId = $p.ship; + $scope.ship = ShipFactory($scope.shipId, DB.ships[$scope.shipId]); + $scope.availCS = Components.forShip($scope.shipId); + + + // for debugging + window.ship = $scope.ship; + window.availcs = $scope.availCS; +}]); \ No newline at end of file diff --git a/app/js/controllers/controller-shipyard.js b/app/js/controllers/controller-shipyard.js new file mode 100644 index 00000000..056015ab --- /dev/null +++ b/app/js/controllers/controller-shipyard.js @@ -0,0 +1,4 @@ +angular.module('app') +.controller('ShipyardController', ['$rootScope', '$scope', function ($rootScope, $scope) { + +}]); \ No newline at end of file diff --git a/app/js/directives/directive--list-cost.js b/app/js/directives/directive--list-cost.js new file mode 100644 index 00000000..769e8b60 --- /dev/null +++ b/app/js/directives/directive--list-cost.js @@ -0,0 +1,26 @@ +angular.module('app').directive('costList', ['$rootScope', 'lodash', function ($r, _) { + return { + restrict: 'A', + scope: { + ship: '=' + }, + templateUrl: 'views/costs.html', + link: function (scope, element, attributes) { + scope.hps = ship.hardpoints; + scope.ints = ship.internal; + scope.com = ship.common; + scope.$r = $r; + scope.insuranceOptions = { + Alpha: 0.975, + Beta: 0.965, + Standard: 0.95 + }; + scope.insurance = scope.insuranceOptions.Standard; + + scope.toggle = function(item) { + item.incCost = !item.incCost; + scope.ship.updateTotals(); + } + } + }; +}]); \ No newline at end of file diff --git a/app/js/directives/directive-component-details.js b/app/js/directives/directive-component-details.js new file mode 100644 index 00000000..72a4f7a6 --- /dev/null +++ b/app/js/directives/directive-component-details.js @@ -0,0 +1,11 @@ +angular.module('app').directive('componentDetails', [function () { + return { + restrict: 'E', + scope:{ + c: '=', + lbl: '=', + opts: '=' + }, + templateUrl: 'views/component.html' + }; +}]); \ No newline at end of file diff --git a/app/js/directives/directive-component-select.js b/app/js/directives/directive-component-select.js new file mode 100644 index 00000000..fcb2e0af --- /dev/null +++ b/app/js/directives/directive-component-select.js @@ -0,0 +1,17 @@ +angular.module('app').directive('componentSelect', [ function() { + return { + restrict: 'A', + scope:{ + opts: '=', + c: '=', + ship: '=' + }, + templateUrl: 'views/component_select.html', + link: function (scope) { + scope.use = function(id, componentData) { + scope.ship.use(scope.c, id, componentData); + // hide this shit; + }; + } + }; +}]); \ No newline at end of file diff --git a/app/js/directives/directive-list-power.js b/app/js/directives/directive-list-power.js new file mode 100644 index 00000000..02fa42ea --- /dev/null +++ b/app/js/directives/directive-list-power.js @@ -0,0 +1,18 @@ +angular.module('app') + .directive('powerList', ['$rootScope', 'lodash', function ($r, _) { + return { + restrict: 'A', + scope: { + ship: '=ship' + }, + templateUrl: 'views/power.html', + link: function (scope, element, attributes) { + scope.$r = $r; + + scope.toggle = function(component) { + component.enabled = !component.enabled; + scope.ship.updateTotals(); + } + } + }; + }]); \ No newline at end of file diff --git a/app/js/directives/directive-menu.js b/app/js/directives/directive-menu.js new file mode 100644 index 00000000..b75a4a81 --- /dev/null +++ b/app/js/directives/directive-menu.js @@ -0,0 +1,13 @@ +angular.module('app').directive('shipyardMenu', ['$rootScope', 'lodash', function ($rootScope, _) { + + return { + restrict: 'E', + templateUrl: 'views/menu.html', + link: function (scope, element, attributes) { + + // TODO: Saved Ships: load, save, save as, delete, export + // TODO: Links: github, forum, etc + + } + }; +}]); \ No newline at end of file diff --git a/app/js/shipyard/factory-components.js b/app/js/shipyard/factory-components.js new file mode 100644 index 00000000..52d8e529 --- /dev/null +++ b/app/js/shipyard/factory-components.js @@ -0,0 +1,72 @@ +angular.module('shipyard').factory('components', ['lodash', 'commonMap','commonArray', function (_, CMap) { + var C = DB.components; + + function ComponentSet(shipId) { + var ship = DB.ships[shipId]; + var maxInternal = ship.componentCapacity.internal[0]; + + this.mass = ship.mass; + this.common = {}; + this.internal = {}; + this.hardpoints = filter(C.hardpoints, ship.componentCapacity.hardpoints[0], 0, ship.mass); + this.bulkheads = C.bulkheads[shipId]; + this.hpClass = {}; + this.intClass = {}; + + for (var i = 0; i < C.common.length; i ++) { + var max = ship.componentCapacity.common[i]; + switch (i) { + case 3: // Life Support + case 5: // Sensors + this.common[i] = filter(C.common[i], max, max, ship.mass); + break; + default: + this.common[i] = filter(C.common[i], max, 0, ship.mass); + } + + } + + for(var g in C.internal) { + this.internal[g] = filter(C.internal[g], maxInternal, 0, ship.mass); + } + } + + ComponentSet.prototype.getHps = function(c) { + if(!this.hpClass[c]) { + this.hpClass[c] = filter(this.hardpoints, c, c? 1 : 0, this.mass); + } + return this.hpClass[c]; + }; + + ComponentSet.prototype.getInts = function(c) { + if(!this.intClass[c]) { + var o = this.intClass[c] = {}; + for(var key in this.internal) { + var data = filter(this.internal[key], c, 0, this.mass); + if(Object.keys(data).length) { + o[key] = data; + } + } + } + return this.intClass[c]; + }; + + function filter (data, maxClass, minClass, mass) { + var set = {}; + _.forEach(data, function (c,id) { + if (c.class <= maxClass && c.class >= minClass + && (c.maxmass === undefined || mass <= c.maxmass) ) { + //&& (c.minmass === undefined || mass >= c.minmass) ) { // Min mass needs fixed + set[id] = c; + } + }); + return set; + } + + return { + forShip: function (shipId) { + return new ComponentSet(shipId); + } + }; + +}]); diff --git a/app/js/shipyard/factory-ship.js b/app/js/shipyard/factory-ship.js new file mode 100644 index 00000000..6365aa7b --- /dev/null +++ b/app/js/shipyard/factory-ship.js @@ -0,0 +1,252 @@ +angular.module('shipyard').factory('ShipFactory', ['components', 'lodash', function (Components, _) { + + /** + * Ship model used to track all ship components and properties. + * + * @param {string} id Unique ship Id / Key + * @param {object} shipData Data/defaults from the Ship database. + */ + function Ship(id, shipData) { + this.id = id; + this.defaults = shipData.defaultComponents; + this.incCost = true; + this.cargoScoop = { enabled: true, c: { name: 'Cargo Scoop', class: 1, rating: 'H', power: .6} }; + + angular.forEach(shipData,function(o,k){ + if(typeof o != 'object') { + this[k] = o; + } else if (k == 'componentCapacity') { + angular.forEach(o,function(arr,g){ + this[g] = []; + for(var i = 0; i < arr.length; i++){ + this[g].push({ + enabled: true, + incCost: true, + maxClass: arr[i] + }); + } + }.bind(this)) + } + }.bind(this)); + } + + /** + * Reset the ship to the original purchase defaults. + */ + Ship.prototype.clear = function() { + this.buildWith(DB.ships[this.id].defaultComponents); + }; + + /** + * Reset the current build to the previously used default + */ + Ship.prototype.reset = function() { + this.buildWith(this.defaults); + }; + + /** + * Builds/Updates the ship instance with the components[comps] passed in. + * @param {object} comps Collection of components used to build the ship + */ + Ship.prototype.buildWith = function(comps) { + var internal = this.internal; + var common = this.common; + var hps = this.hardpoints; + var availCommon = DB.components.common; + var availHardPoints = DB.components.hardpoints; + var availInternal = DB.components.internal; + + this.bulkheads = { incCost: true, id: comps.bulkheads || 0, c: DB.components.bulkheads[this.id][comps.bulkheads || 0] }; + + for(var i = 0, l = comps.common.length; i < l; i++) { + common[i].id = comps.common[i]; + common[i].c = availCommon[i][comps.common[i]]; + } + + for(var i = 0, l = comps.hardpoints.length; i < l; i++) { + if(comps.hardpoints[i] !== 0) { + hps[i].id = comps.hardpoints[i]; + hps[i].c = availHardPoints[comps.hardpoints[i]]; + } + } + + for(var i = 0, l = comps.internal.length; i < l; i++) { + if(comps.internal[i] !== 0) { + internal[i].id = comps.internal[i]; + internal[i].c = availInternal[comps.internal[i]]; + } + } + this.updateTotals(); + } + + /** + * Serializes the selected components for all slots to a URL friendly string. + * @return {string} Encoded string of components + */ + Ship.prototype.toCode = function() { + var data = [ + this.bulkheads.id, + _.map(this.common, idToStr), + _.map(this.hardpoints, idToStr), + _.map(this.internal, idToStr), + ]; + + return _.flatten(data).join(''); + }; + + /** + * Utility function to retrieve a safe string for selected component for a slot. + * Used for serialization to code only. + * + * @private + * @param {object} slot The slot object. + * @return {string} The id of the selected component or '-' if none selected + */ + function idToStr(slot) { + return o.id === undefined? '-' : o.id; + } + + /** + * Updates the current ship instance's slots with components determined by the + * code. + * + * @param {string} code [description] + */ + Ship.prototype.buildFromCode = function (code) { + var commonCount = this.common.length; + var hpCount = commonCount + this.hardpoints.length; + var comps = { + bulkheads: code.charAt(0) * 1, + common: new Array(this.common.length), + hardpoints: new Array(this.hardpoints.length), + internal: new Array(this.internal.length) + }; + + // TODO: improve... + for (var i = 1, c = 0, l = code.length; i < l; i++) { + if(code.charAt(i) != '-') { + if (c < commonCount) { + comps.common[c] = code.substring(i, i + 2); + } else if (c < hpCount) { + comps.hardpoints[c - commonCount] = code.substring(i, i + 2) + } else { + comps.internal[c - hpCount] = code.substring(i, i + 2) + } + i++; + } + c++; + } + + this.defaults = comps; + this.buildWidth(data); + }; + + /** + * Updates the ship totals based on currently selected component in each slot. + */ + Ship.prototype.updateTotals = function() { + var c = _.reduce(this.common, optsSum, {cost: 0, power: 0, mass: 0, capacity: 0}); + var i = _.reduce(this.internal, optsSum, {cost: 0, power: 0, mass: 0, capacity: 0}); + var h = _.reduce(this.hardpoints, optsSum, {cost: 0, power: 0, mass: 0, capacity: 0}); + + this.totalCost = c.cost + i.cost + h.cost + (this.incCost? this.cost : 0) + (this.bulkheads.incCost? this.bulkheads.c.cost : 0); + this.unladenMass = c.mass + i.mass + h.mass + this.mass + this.bulkheads.c.mass; + this.powerAvailable = this.common[0].c.pGen; + this.fuelCapacity = this.common[6].c.capacity; + this.cargoCapacity = i.capacity; + this.ladenMass = this.unladenMass + this.cargoCapacity + this.fuelCapacity; + this.powerRetracted = c.power + i.power + (this.cargoScoop.enabled? this.cargoScoop.c.power : 0); + this.powerDeployed = this.powerRetracted + h.power; + + // TODO: range + this.armourAdded = 0; // internal.armoradd TODO: Armour (reinforcement, bulkheads) + this.armorTotal = this.armourAdded + this.armour; + + } + + /** + * Update a slot with a the component if the id is different from the current id for this slot. + * Frees the slot of the current component if the id matches the current id for the slot. + * + * @param {object} slot The component slot + * @param {string} id Unique ID for the selected component + * @param {object} componentData Properties for the selected component + */ + Ship.prototype.use = function(slot, id, componentData) { + if (slot.id != id) { // Selecting a different option + slot.id = id; + slot.c = componentData; + + // New componnent is a Shield Generator + if(componentData.group == 'sg') { + // You can only have one shield Generator + // TODO: find shield generator that is not this one + // set c.id = null, c.c = null; + } + // Deselecting current option + } else { + slot.id = null; + slot.c = null; + } + this.updateTotals(); + }; + + /** + * 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} shields Base Shield strength MJ for ship + * @param {object} sg The shield generator used + * @param {number} multiplier Shield multiplier for ship (1 + shield boosters if any) + * @return {number} Approximate shield strengh in MJ + */ + function calcShieldStrength (mass, shields, sg, multiplier) { + if (mass <= sg.minmass) { + return shields * multiplier * sg.minmul; + } + if (mass < sg.optmass) { + return shields * multiplier * (sg.minmul + (mass - sg.minmass) / (sg.optmass - sg.minmass) * (sg.optmul - sg.minmul)); + } + if (mass < sg.maxmass) { + return shields * multiplier * (sg.optmul + (mass - sg.optmass) / (sg.maxmass - sg.optmass) * (sg.maxmul - sg.optmul)); + } + return shields * multiplier * sg.maxmul; + }; + + /** + * Utilify function for summing the components properties + * + * @private + * @param {object} sum Sum of cost, power, mass, capacity + * @param {object} slot Slot object + * @return {object} The mutated sum object + */ + function optsSum(sum, slot) { + if (slot.c) { // The slot has a component selected + sum.cost += (slot.incCost && slot.c.cost)? slot.c.cost : 0; + sum.power += (slot.enabled && slot.c.power)? slot.c.power : 0; + sum.mass += slot.c.mass || 0; + sum.capacity += slot.c.capacity || 0; + } + return sum; + } + + /** + * Ship Factory function. Created a new instance of a ship based on the ship type. + * + * @param {string} id Id/Key for the Ship type + * @param {object} shipData [description] + * @param {string} code [optional] Code to build the ship with + * @return {Ship} A new Ship instance + */ + return function (id, shipData, code) { + var s = new Ship(id, shipData); + if (code) { + s.buildFromCode(code); + } else { + s.clear(); + } + return s; + }; +}]); diff --git a/app/js/shipyard/module-shipyard.js b/app/js/shipyard/module-shipyard.js new file mode 100644 index 00000000..add3d626 --- /dev/null +++ b/app/js/shipyard/module-shipyard.js @@ -0,0 +1,101 @@ +angular.module('shipyard', []) + .value('commonArray', [ + 'Power Plant', + 'Thrusters', + 'Frame Shift Drive', + 'Life Support', + 'Power Distributor', + 'Sensors', + 'Fuel Tank' + ]) + .value('internalGroupMap', { + fs:'Fuel Scoop', + sc:'Scanners', + am:'Auto Field-Maintenance Unit', + cr:'Cargo Racks', + fi:'Frame Shift Drive Interdictor', + hb:'Hatch Breaker Limpet Controller', + hr:'Hull Reinforcement Package', + rf:'Refinery', + sb:'Shield Cell Bank', + sg:'Shield Generator', + dc:'Docking Computer' + }) + .value('shipPurpose', { + mp: 'Multi Purpose', + fr: 'Freighter', + ex: 'Explorer', + co: 'Combat', + pa: 'Passenger Transport' + }) + .value('shipSize', [ + 'N/A', + 'Small', + 'Medium', + 'Large', + 'Capital', + ]) + .factory('commonMap', ['commonArray', function (commonArray) { + var commonMap = {}; + for(var i = 0; i < commonArray.length; i++) { + commonMap[commonArray[i]] = i; + } + return commonMap; + }]) + .value('hardPointClass', [ + 'Utility', + 'Small', + 'Medium', + 'Large', + 'Huge' + ]) + .factory('hardpointGroup', function () { + function groupToLabel (grp) { + var a = grp.toLowerCase().split(''); + var l = []; + switch(a[0]) { + case 's': + l.push('Small'); + break; + case 'm': + l.push('Medium'); + break; + case 'l': + l.push('Large'); + break; + case 'h': + l.push('Huge'); + break; + case 'u': + l.push('Utility'); + break; + default: + console.error('Invalid group size', grp); + } + switch(a[1]) { + case 'o': + l.push('Other'); + break; + case 'k': + l.push('Kinetic'); + break; + case 't': + l.push('Thermal'); + break; + case 's': + l.push('Scanner'); + break; + case 'b': + l.push('Booster'); + break; + case 'm': + l.push('Mount'); + break; + default: + console.error('Invalid group category', grp); + } + return l.join(' '); + } + + return groupToLabel; + }); \ No newline at end of file diff --git a/app/js/template_cache.js b/app/js/template_cache.js new file mode 100644 index 00000000..30982d52 --- /dev/null +++ b/app/js/template_cache.js @@ -0,0 +1,7 @@ +angular.module("app.templates", []).run(["$templateCache", function($templateCache) {$templateCache.put("views/component.html","
{{lbl}}
{{c.maxClass}}
{{c.c.class}}{{c.c.rating}}
{{c.c.mass || c.c.capacity}}T
"); +$templateCache.put("views/component_select.html",""); +$templateCache.put("views/costs.html","
{{ship.name}}
{{$r.credits(ship.cost)}}
{{ship.bulkheads.c.name}}
{{$r.credits(ship.bulkheads.c.cost)}}
{{c.c.class}}{{c.c.rating}} {{$r.CArr[$index]}}
{{$r.credits(c.c.cost)}}
{{c.c.class}}{{c.c.rating}} {{c.c.name}}
{{$r.credits(c.c.cost)}}
{{c.c.class}}{{c.c.rating}} {{c.c.name || $r.igMap[c.c.group]}}
{{$r.credits(c.c.cost)}}
Total
{{$r.credits(ship.totalCost)}}
"); +$templateCache.put("views/menu.html","
"); +$templateCache.put("views/power.html","
{{c.c.class}}{{c.c.rating}} {{$r.CArr[$index]}}
{{$r.power(c.c.power || c.c.pGen)}}
1H Cargo Scoop
{{$r.power(ship.cargoScoop.c.power)}}
{{c.c.class}}{{c.c.rating}} {{c.c.name}}
{{$r.power(c.c.power)}}
{{c.c.class}}{{c.c.rating}} {{c.c.name || $r.igMap[c.c.group]}}
{{$r.power(c.c.power)}}
Retracted: {{$r.power(ship.powerRetracted)}} ({{$r.percent(ship.powerRetracted/ship.powerAvailable)}})
Deployed: {{$r.power(ship.powerDeployed)}} ({{$r.percent(ship.powerDeployed/ship.powerAvailable)}})
"); +$templateCache.put("views/ship.html","
{{ship.name}}
Class: {{ship.class}}
Mass: {{ship.unladenMass}} - {{ship.ladenMass}} [{{ship.mass}}]T
Speed: {{ship.speed}} [{{ship.boost}}] M/s
Agility: {{ship.agility}}
Shields: {{ship.shields}}
Armour: {{ship.armour}}
Fuel: {{ship.fuelCapacity}}T
Cargo: {{ship.cargoCapacity}}T
Armour: {{ship.armour}}
Pad Size: {{[\'\',\'Small\',\'Medium\',\'Large\'][ship.class]}}
Standard
Bulkheads
{{ship.bulkheads.c.name}}
{{ship.bulkheads.c.mass}}T
{{b.name}}
HardPoints
Internal Compartments
{{grp}}
"); +$templateCache.put("views/ships.html","

{{s.name}}{{s.manufacturer}}

Class {{s.class}} / {{SZ[s.class]}}
{{SP[s.group]}}
{{credits(s.cost)}} Credits
");}]); \ No newline at end of file diff --git a/app/less/app.less b/app/less/app.less new file mode 100644 index 00000000..9b2dd712 --- /dev/null +++ b/app/less/app.less @@ -0,0 +1,77 @@ +@import 'colors'; +@import 'fonts'; +@import 'utilities'; +@import 'logos'; + +@import 'shipyard'; +@import 'list'; +@import 'components'; +@import 'ship'; + +html, body { + min-height: 100%; +} + +body { + color: #FFF; + background-color: #000; + margin: 0; + padding: 0; + font-family: @standardFamily; + overflow-x: hidden; +} + +#main { + min-height: 90%; + clear: both; +} + +header { + background-color: @fg; + margin: 0; + height: 40px; + line-height: 40px; + font-family: @titleFamily; + vertical-align: middle; + + a { + vertical-align: middle; + color: @border; + + &:visited { + color: @border; + } + &:hover { + color: teal; + } + } + + .title { + font-size: 1.3em; + display: inline-block; + margin:0px; + text-transform: uppercase; + } +} + + +footer { + font-size: 0.3em; + color: #999; + padding: 10px 0; + width: 100%; + overflow: hidden; +} + +header, footer { + .right { + float: right; + text-align: right; + margin-right: 10px; + } + .left { + float: left; + text-align: left; + margin-left: 10px; + } +} \ No newline at end of file diff --git a/app/less/colors.less b/app/less/colors.less new file mode 100644 index 00000000..ba286f8e --- /dev/null +++ b/app/less/colors.less @@ -0,0 +1,3 @@ +@fg: #FF8C0D; // Light Orange +@warning: #FF3B00; // Dark Orange +@border: rgba(201,34,2,0.50); // Dark Red \ No newline at end of file diff --git a/app/less/components.less b/app/less/components.less new file mode 100644 index 00000000..b5888c8d --- /dev/null +++ b/app/less/components.less @@ -0,0 +1,120 @@ + +.component-group { + border: 2px solid @border; + .border-radius(5px); + margin: 5px; + float: left; + padding: 0 5px 5px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + + legend { + text-transform: uppercase; + padding: 0 5px; + color: @warning; + } + + .component { + text-transform: uppercase; + float: left; + margin: 1%; + border: 1px solid orange; + .border-radius(2px); + width: 250px; + position: relative; + padding-top: 3px; + + color: #BBB; + font-size: 0.8em; + + .lbl,.cla { + color: #666; + } + + .lbl { + float: left; + margin-left: 5px; + } + + .cla { + float: right; + margin-right: 5px; + } + + .clear { + clear: both; + } + + .select { + z-index: 1; + top: 100%; + padding-top: 10px; + display: none; + position: absolute; + width: 100%; + margin: 0; + padding: 0; + background-color: black; + border-left: 1px solid teal; + border-bottom: 1px solid teal; + border-right: 1px solid teal; + .border-bottom-radius(5px); + left: -1px; + max-height: 600px; + overflow-y: scroll; + } + + .select-group { + clear: both; + border-top: 1px solid grey; + border-bottom: 1px solid grey; + padding-left: 5px; + } + + .c { + cursor: pointer; + .border-radius(3px); + display: block; + float:left; + margin: 5px; + padding: 0; + height: 20px; + line-height: 20px; + background-color: #666; + color: #BBB; + + &:hover { + background-color: teal; + color: #FFF; + } + } + + li.c { + width: 25px; + text-align: center; + + &:nth-child(5n +1) { + clear: left; + } + } + + ul { + margin: 0; + list-style: none; + } + + &:hover { + border: 1px solid teal; + color: #FFF; + .lbl,.cla { + color: #999; + } + .select { + display: block; + } + } + + } +} \ No newline at end of file diff --git a/app/less/fonts.less b/app/less/fonts.less new file mode 100644 index 00000000..af9f8fda --- /dev/null +++ b/app/less/fonts.less @@ -0,0 +1,40 @@ +@font-face { + font-family: 'Orbitron-Bold'; + src: url('fonts/orbitron-bold-webfont.eot'); + src: url('fonts/orbitron-bold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/orbitron-bold-webfont.woff2') format('woff2'), + url('fonts/orbitron-bold-webfont.woff') format('woff'), + url('fonts/orbitron-bold-webfont.ttf') format('truetype'), + url('fonts/orbitron-bold-webfont.svg#orbitronbold') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Orbitron-Medium'; + src: url('fonts/orbitron-medium-webfont.eot'); + src: url('fonts/orbitron-medium-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/orbitron-medium-webfont.woff2') format('woff2'), + url('fonts/orbitron-medium-webfont.woff') format('woff'), + url('fonts/orbitron-medium-webfont.ttf') format('truetype'), + url('fonts/orbitron-medium-webfont.svg#orbitronmedium') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Orbitron-Regular'; + src: url('fonts/orbitron-regular-webfont.eot'); + src: url('fonts/orbitron-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/orbitron-regular-webfont.woff2') format('woff2'), + url('fonts/orbitron-regular-webfont.woff') format('woff'), + url('fonts/orbitron-regular-webfont.ttf') format('truetype'), + url('fonts/orbitron-regular-webfont.svg#orbitronregular') format('svg'); + font-weight: normal; + font-style: normal; +} + + +@standardFamily: Helvetica, sans-serif; +@titleFamily: 'Orbitron-Medium', Arial, sans-serif; +@itemFamily: 'Orbitron-Regular', Arial, sans-serif; \ No newline at end of file diff --git a/app/less/list.less b/app/less/list.less new file mode 100644 index 00000000..4a090b68 --- /dev/null +++ b/app/less/list.less @@ -0,0 +1,53 @@ +.list { + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + float: left; + + .list-item { + cursor: pointer; + clear: both; + overflow: hidden; + margin: 3px 0px; + } + + .val { + float:right; + text-align: right; + } + + .lbl { + float: left; + } + +} + + +#cost-list { + color: grey; + width: 300px; + + .enabled { + color: #FFF; + } +} + + +#power-list { + color: grey; + width: 300px; + + .enabled { + color: #FFF; + } + + .consumer.enabled { + color: @fg; + } + + .common, .internal, .hardpoints { + + } + +} \ No newline at end of file diff --git a/app/less/logos.less b/app/less/logos.less new file mode 100644 index 00000000..91ebcfe2 --- /dev/null +++ b/app/less/logos.less @@ -0,0 +1,23 @@ + +.logo { + background-repeat: no-repeat; + background-position: center; + display: inline-block; + width: 30px; + height: 30px; +} + +.github { + background-image: url(images/github-mark.svg); + background-size: contain; +} + +.reddit { + background-image: url(images/reddit.svg); + background-size: contain; +} + +.elite-dangerous { + background-image: url(images/ed-logo-sm.png); + background-size: contain; +} \ No newline at end of file diff --git a/app/less/ship.less b/app/less/ship.less new file mode 100644 index 00000000..fa75592d --- /dev/null +++ b/app/less/ship.less @@ -0,0 +1,26 @@ + +#overview { + margin: 0px auto; + text-align: center; + + h1 { + margin: 5px 0; + } + + div { + display: inline-block; + margin: 0 5px; + } +} + +#hardpoints { + width: 525px; +} + +#standard { + width: 260px; +} + +#internal { + width: 525px; +} \ No newline at end of file diff --git a/app/less/shipyard.less b/app/less/shipyard.less new file mode 100644 index 00000000..4fc9006f --- /dev/null +++ b/app/less/shipyard.less @@ -0,0 +1,41 @@ + +a.ship { + display: block; + float: left; + width: 30%; + height: 30%; + margin: 1% 1%; + background-color: #222; + padding: 0.5%; + text-decoration: none; + color: #FFF; + + &:hover { + background-color: orange; + } + + h2 { + width: 100%; + text-transform: uppercase; + margin: 0; + + small { + float: right; + font-size: 0.5em; + } + } + + .subtitle { + overflow: hidden; + } + + .size { + float: left; + font-size: 0.8em; + } + .category { + text-transform: uppercase; + font-size: 0.7em; + float: right; + } +} \ No newline at end of file diff --git a/app/less/utilities.less b/app/less/utilities.less new file mode 100644 index 00000000..d74c5e44 --- /dev/null +++ b/app/less/utilities.less @@ -0,0 +1,22 @@ +.border-radius (@radius: 5px) { + -webkit-border-radius: @radius; + -moz-border-radius: @radius; + border-radius: @radius; + + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} + +.border-bottom-radius (@radius: 5px) { + -webkit-border-bottom-left-radius: @radius; + -moz-border-bottom-left-radius: @radius; + border-bottom-left-radius: @radius; + -webkit-border-bottom-right-radius: @radius; + -moz-border-bottom-right-radius: @radius; + border-bottom-right-radius: @radius; + + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} \ No newline at end of file diff --git a/app/views/component.html b/app/views/component.html new file mode 100644 index 00000000..f7e2f524 --- /dev/null +++ b/app/views/component.html @@ -0,0 +1,6 @@ +
{{lbl}}
+
{{c.maxClass}}
+
+ {{c.c.class}}{{c.c.rating}} +
{{c.c.mass || c.c.capacity}}T
+
\ No newline at end of file diff --git a/app/views/component_select.html b/app/views/component_select.html new file mode 100644 index 00000000..65a1e0d1 --- /dev/null +++ b/app/views/component_select.html @@ -0,0 +1,3 @@ + diff --git a/app/views/costs.html b/app/views/costs.html new file mode 100644 index 00000000..c1d25e54 --- /dev/null +++ b/app/views/costs.html @@ -0,0 +1,18 @@ +
+
{{ship.name}}
{{$r.credits(ship.cost)}}
+
+
+
{{ship.bulkheads.c.name}}
{{$r.credits(ship.bulkheads.c.cost)}}
+
+
+
{{c.c.class}}{{c.c.rating}} {{$r.CArr[$index]}}
{{$r.credits(c.c.cost)}}
+
+
+
{{c.c.class}}{{c.c.rating}} {{c.c.name}}
{{$r.credits(c.c.cost)}}
+
+
+
{{c.c.class}}{{c.c.rating}} {{c.c.name || $r.igMap[c.c.group]}}
{{$r.credits(c.c.cost)}}
+
+
+
Total
{{$r.credits(ship.totalCost)}}
+
diff --git a/app/views/menu.html b/app/views/menu.html new file mode 100644 index 00000000..0be50c47 --- /dev/null +++ b/app/views/menu.html @@ -0,0 +1,12 @@ +
+
+

Shipyard

+
+ +
+ + + +
+ +
\ No newline at end of file diff --git a/app/views/power.html b/app/views/power.html new file mode 100644 index 00000000..6b7c9945 --- /dev/null +++ b/app/views/power.html @@ -0,0 +1,17 @@ +
+
{{c.c.class}}{{c.c.rating}} {{$r.CArr[$index]}}
{{$r.power(c.c.power || c.c.pGen)}}
+
+
+
1H Cargo Scoop
{{$r.power(ship.cargoScoop.c.power)}}
+
+ +
+
{{c.c.class}}{{c.c.rating}} {{c.c.name}}
{{$r.power(c.c.power)}}
+
+ +
+
{{c.c.class}}{{c.c.rating}} {{c.c.name || $r.igMap[c.c.group]}}
{{$r.power(c.c.power)}}
+
+ +
Retracted: {{$r.power(ship.powerRetracted)}} ({{$r.percent(ship.powerRetracted/ship.powerAvailable)}})
+
Deployed: {{$r.power(ship.powerDeployed)}} ({{$r.percent(ship.powerDeployed/ship.powerAvailable)}})
diff --git a/app/views/ship.html b/app/views/ship.html new file mode 100644 index 00000000..6a7c09e5 --- /dev/null +++ b/app/views/ship.html @@ -0,0 +1,55 @@ + +
+ {{ship.name}} +
Class: {{ship.class}}
+
Mass: {{ship.unladenMass}} - {{ship.ladenMass}} [{{ship.mass}}]T
+
Speed: {{ship.speed}} [{{ship.boost}}] M/s
+
Agility: {{ship.agility}}
+
Shields: {{ship.shields}}
+
Armour: {{ship.armour}}
+
Fuel: {{ship.fuelCapacity}}T
+
Cargo: {{ship.cargoCapacity}}T
+
Armour: {{ship.armour}}
+
Pad Size: {{['','Small','Medium','Large'][ship.class]}}
+
+ +
+ Standard +
+
Bulkheads
+
{{ship.bulkheads.c.name}} +
{{ship.bulkheads.c.mass}}T
+
+
+
{{b.name}}
+
+
+
+ +
+
+
+ +
+ HardPoints +
+ +
+
+
+ +
+ Internal Compartments +
+ +
+
+
{{grp}}
+
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/app/views/ships.html b/app/views/ships.html new file mode 100644 index 00000000..e8c3584b --- /dev/null +++ b/app/views/ships.html @@ -0,0 +1,9 @@ + + +

{{s.name}}{{s.manufacturer}}

+
+
Class {{s.class}} / {{SZ[s.class]}}
+
{{SP[s.group]}}
+
+ {{credits(s.cost)}} Credits +
\ No newline at end of file diff --git a/bower.json b/bower.json new file mode 100644 index 00000000..8313cb72 --- /dev/null +++ b/bower.json @@ -0,0 +1,40 @@ +{ + "name": "shipyard", + "version": "0.0.0", + "authors": [ + "Colin McLeod " + ], + "description": "Elite Dangerous Shipyard", + "main": "app/app.js", + "moduleType": [ + "amd" + ], + "keywords": [ + "elite", + "shipyard" + ], + "license": "MIT", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "d3": "~3.5.5", + "ng-lodash": "~0.2.0", + "nvd3": "~1.7.1", + "angularjs-nvd3-directives": "~0.0.7", + "angular-route": "~1.3.15" + }, + "overrides": { + "nvd3": { + "ignore": true, + "main": [ + "**/*css" + ] + } + } +} diff --git a/data/DATA_README.md b/data/DATA_README.md new file mode 100644 index 00000000..5ac60a97 --- /dev/null +++ b/data/DATA_README.md @@ -0,0 +1,6 @@ + +Explain WTF is going on here.... + + +#TODO + - Fix ALL Ship internal component defaults \ No newline at end of file diff --git a/data/components/bulkheads.json b/data/components/bulkheads.json new file mode 100644 index 00000000..0bcd2cb2 --- /dev/null +++ b/data/components/bulkheads.json @@ -0,0 +1,631 @@ +{ + "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 + } + ], + "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 + } + ], + "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 + } + ], + "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 + } + ] +} \ No newline at end of file diff --git a/data/components/common/frame_shift_drive.json b/data/components/common/frame_shift_drive.json new file mode 100644 index 00000000..895a6eb2 --- /dev/null +++ b/data/components/common/frame_shift_drive.json @@ -0,0 +1,277 @@ +{ + "2A": { + "class": 2, + "rating": "A", + "cost": 160224, + "mass": 2.5, + "power": 0.3, + "optmass": 90, + "maxfuel": 0.9, + "fuelmul": 0.012, + "fuelpower": 2 + }, + "2B": { + "class": 2, + "rating": "B", + "cost": 53408, + "mass": 4, + "power": 0.25, + "optmass": 75, + "maxfuel": 0.8, + "fuelmul": 0.01, + "fuelpower": 2 + }, + "2C": { + "class": 2, + "rating": "C", + "cost": 17803, + "mass": 2.5, + "power": 0.2, + "optmass": 60, + "maxfuel": 0.6, + "fuelmul": 0.008, + "fuelpower": 2 + }, + "2D": { + "class": 2, + "rating": "D", + "cost": 5934, + "mass": 1, + "power": 0.18, + "optmass": 54, + "maxfuel": 0.6, + "fuelmul": 0.01, + "fuelpower": 2 + }, + "2E": { + "class": 2, + "rating": "E", + "cost": 1978, + "mass": 2.5, + "power": 0.16, + "optmass": 48, + "maxfuel": 0.6, + "fuelmul": 0.011, + "fuelpower": 2 + }, + "3A": { + "class": 3, + "rating": "A", + "cost": 507912, + "mass": 5, + "power": 0.45, + "optmass": 150, + "maxfuel": 1.8, + "fuelmul": 0.012, + "fuelpower": 2.15 + }, + "3B": { + "class": 3, + "rating": "B", + "cost": 169304, + "mass": 8, + "power": 0.38, + "optmass": 125, + "maxfuel": 1.5, + "fuelmul": 0.01, + "fuelpower": 2.15 + }, + "3C": { + "class": 3, + "rating": "C", + "cost": 56435, + "mass": 5, + "power": 0.3, + "optmass": 100, + "maxfuel": 1.2, + "fuelmul": 0.008, + "fuelpower": 2.15 + }, + "3D": { + "class": 3, + "rating": "D", + "cost": 18812, + "mass": 2, + "power": 0.27, + "optmass": 90, + "maxfuel": 1.2, + "fuelmul": 0.01, + "fuelpower": 2.15 + }, + "3E": { + "class": 3, + "rating": "E", + "cost": 6271, + "mass": 5, + "power": 0.24, + "optmass": 80, + "maxfuel": 1.2, + "fuelmul": 0.011, + "fuelpower": 2.15 + }, + "4A": { + "class": 4, + "rating": "A", + "cost": 1610080, + "mass": 10, + "power": 0.45, + "optmass": 525, + "maxfuel": 3, + "fuelmul": 0.012, + "fuelpower": 2.3 + }, + "4B": { + "class": 4, + "rating": "B", + "cost": 536693, + "mass": 16, + "power": 0.38, + "optmass": 438, + "maxfuel": 2.5, + "fuelmul": 0.01, + "fuelpower": 2.3 + }, + "4C": { + "class": 4, + "rating": "C", + "cost": 178898, + "mass": 10, + "power": 0.3, + "optmass": 350, + "maxfuel": 2, + "fuelmul": 0.008, + "fuelpower": 2.3 + }, + "4D": { + "class": 4, + "rating": "D", + "cost": 59633, + "mass": 4, + "power": 0.27, + "optmass": 315, + "maxfuel": 2, + "fuelmul": 0.01, + "fuelpower": 2.3 + }, + "4E": { + "class": 4, + "rating": "E", + "cost": 19878, + "mass": 10, + "power": 0.24, + "optmass": 280, + "maxfuel": 2, + "fuelmul": 0.011, + "fuelpower": 2.3 + }, + "5A": { + "class": 5, + "rating": "A", + "cost": 5103953, + "mass": 20, + "power": 0.6, + "optmass": 1050, + "maxfuel": 5, + "fuelmul": 0.012, + "fuelpower": 2.45 + }, + "5B": { + "class": 5, + "rating": "B", + "cost": 1701318, + "mass": 32, + "power": 0.5, + "optmass": 875, + "maxfuel": 4.1, + "fuelmul": 0.01, + "fuelpower": 2.45 + }, + "5C": { + "class": 5, + "rating": "C", + "cost": 567106, + "mass": 20, + "power": 0.4, + "optmass": 700, + "maxfuel": 3.3, + "fuelmul": 0.008, + "fuelpower": 2.45 + }, + "5D": { + "class": 5, + "rating": "D", + "cost": 189036, + "mass": 8, + "power": 0.36, + "optmass": 630, + "maxfuel": 3.3, + "fuelmul": 0.01, + "fuelpower": 2.45 + }, + "5E": { + "class": 5, + "rating": "E", + "cost": 63013, + "mass": 20, + "power": 0.32, + "optmass": 560, + "maxfuel": 3.3, + "fuelmul": 0.011, + "fuelpower": 2.45 + }, + "6A": { + "class": 6, + "rating": "A", + "cost": 16179531, + "mass": 40, + "power": 0.75, + "optmass": 1800, + "maxfuel": 8, + "fuelmul": 0.012, + "fuelpower": 2.6 + }, + "6B": { + "class": 6, + "rating": "B", + "cost": 5393177, + "mass": 64, + "power": 0.63, + "optmass": 1500, + "maxfuel": 6.6, + "fuelmul": 0.01, + "fuelpower": 2.6 + }, + "6C": { + "class": 6, + "rating": "C", + "cost": 1797726, + "mass": 40, + "power": 0.5, + "optmass": 1200, + "maxfuel": 5.3, + "fuelmul": 0.008, + "fuelpower": 2.6 + }, + "6D": { + "class": 6, + "rating": "D", + "cost": 599242, + "mass": 16, + "power": 0.45, + "optmass": 1080, + "maxfuel": 5.3, + "fuelmul": 0.01, + "fuelpower": 2.6 + }, + "6E": { + "class": 6, + "rating": "E", + "cost": 199747, + "mass": 40, + "power": 0.4, + "optmass": 960, + "maxfuel": 5.3, + "fuelmul": 0.011, + "fuelpower": 2.6 + } +} diff --git a/data/components/common/fuel_tank.json b/data/components/common/fuel_tank.json new file mode 100644 index 00000000..da096ba0 --- /dev/null +++ b/data/components/common/fuel_tank.json @@ -0,0 +1,38 @@ +{ + "1C": { + "class": 1, + "rating": "C", + "cost": 1000, + "capacity": 2 + }, + "2C": { + "class": 2, + "rating": "C", + "cost": 3750, + "capacity": 4 + }, + "3C": { + "class": 3, + "rating": "C", + "cost": 7063, + "capacity": 8 + }, + "4C": { + "class": 4, + "rating": "C", + "cost": 24734, + "capacity": 16 + }, + "5C": { + "class": 5, + "rating": "C", + "cost": 97754, + "capacity": 32 + }, + "6C": { + "class": 6, + "rating": "C", + "cost": 341577, + "capacity": 64 + } +} \ No newline at end of file diff --git a/data/components/common/life_support.json b/data/components/common/life_support.json new file mode 100644 index 00000000..0c93edf2 --- /dev/null +++ b/data/components/common/life_support.json @@ -0,0 +1,242 @@ +{ + "1A": { + "class": 1, + "rating": "A", + "cost": 20195, + "mass": 1.3, + "power": 0.48, + "time": 1500 + }, + "1B": { + "class": 1, + "rating": "B", + "cost": 8078, + "mass": 2, + "power": 0.44, + "time": 900 + }, + "1C": { + "class": 1, + "rating": "C", + "cost": 3231, + "mass": 1.3, + "power": 0.4, + "time": 600 + }, + "1D": { + "class": 1, + "rating": "D", + "cost": 1293, + "mass": 0.5, + "power": 0.36, + "time": 450 + }, + "1E": { + "class": 1, + "rating": "E", + "cost": 517, + "mass": 1.3, + "power": 0.32, + "time": 300 + }, + "2A": { + "class": 2, + "rating": "A", + "cost": 56547, + "mass": 2.5, + "power": 0.55, + "time": 1500 + }, + "2B": { + "class": 2, + "rating": "B", + "cost": 22619, + "mass": 4, + "power": 0.51, + "time": 900 + }, + "2C": { + "class": 2, + "rating": "C", + "cost": 9048, + "mass": 2.5, + "power": 0.46, + "time": 600 + }, + "2D": { + "class": 2, + "rating": "D", + "cost": 3619, + "mass": 1, + "power": 0.41, + "time": 450 + }, + "2E": { + "class": 2, + "rating": "E", + "cost": 1448, + "mass": 2.5, + "power": 0.37, + "time": 300 + }, + "3A": { + "class": 3, + "rating": "A", + "cost": 158331, + "mass": 5, + "power": 0.64, + "time": 1500 + }, + "3B": { + "class": 3, + "rating": "B", + "cost": 63333, + "mass": 8, + "power": 0.58, + "time": 900 + }, + "3C": { + "class": 3, + "rating": "C", + "cost": 25333, + "mass": 5, + "power": 0.53, + "time": 600 + }, + "3D": { + "class": 3, + "rating": "D", + "cost": 10133, + "mass": 2, + "power": 0.48, + "time": 450 + }, + "3E": { + "class": 3, + "rating": "E", + "cost": 4053, + "mass": 5, + "power": 0.42, + "time": 300 + }, + "4A": { + "class": 4, + "rating": "A", + "cost": 443328, + "mass": 10, + "power": 0.74, + "time": 1500 + }, + "4B": { + "class": 4, + "rating": "B", + "cost": 177331, + "mass": 16, + "power": 0.68, + "time": 900 + }, + "4C": { + "class": 4, + "rating": "C", + "cost": 70932, + "mass": 10, + "power": 0.62, + "time": 600 + }, + "4D": { + "class": 4, + "rating": "D", + "cost": 28373, + "mass": 4, + "power": 0.56, + "time": 450 + }, + "4E": { + "class": 4, + "rating": "E", + "cost": 11349, + "mass": 10, + "power": 0.5, + "time": 300 + }, + "5A": { + "class": 5, + "rating": "A", + "cost": 1241317, + "mass": 20, + "power": 0.85, + "time": 1500 + }, + "5B": { + "class": 5, + "rating": "B", + "cost": 496527, + "mass": 32, + "power": 0.78, + "time": 900 + }, + "5C": { + "class": 5, + "rating": "C", + "cost": 198611, + "mass": 20, + "power": 0.71, + "time": 600 + }, + "5D": { + "class": 5, + "rating": "D", + "cost": 79444, + "mass": 8, + "power": 0.64, + "time": 450 + }, + "5E": { + "class": 5, + "rating": "E", + "cost": 31778, + "mass": 20, + "power": 0.57, + "time": 300 + }, + "6A": { + "class": 6, + "rating": "A", + "cost": 3475688, + "mass": 40, + "power": 0.96, + "time": 1500 + }, + "6B": { + "class": 6, + "rating": "B", + "cost": 1390275, + "mass": 64, + "power": 0.88, + "time": 900 + }, + "6C": { + "class": 6, + "rating": "C", + "cost": 556110, + "mass": 40, + "power": 0.8, + "time": 600 + }, + "6D": { + "class": 6, + "rating": "D", + "cost": 222444, + "mass": 16, + "power": 0.72, + "time": 450 + }, + "6E": { + "class": 6, + "rating": "E", + "cost": 88978, + "mass": 40, + "power": 0.64, + "time": 300 + } +} diff --git a/data/components/common/power_distributor.json b/data/components/common/power_distributor.json new file mode 100644 index 00000000..66a54e06 --- /dev/null +++ b/data/components/common/power_distributor.json @@ -0,0 +1,522 @@ +{ + "1A": { + "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 + }, + "1B": { + "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 + }, + "1C": { + "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 + }, + "1D": { + "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 + }, + "1E": { + "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 + }, + "2A": { + "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 + }, + "2B": { + "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 + }, + "2C": { + "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 + }, + "2D": { + "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 + }, + "2E": { + "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 + }, + "3A": { + "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 + }, + "3B": { + "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 + }, + "3C": { + "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 + }, + "3D": { + "class": 3, + "rating": "D", + "cost": 10133, + "mass": 2, + "power": 0.45, + "weaponcapacity": 18, + "weaponrecharge": 2.1, + "enginecapacity": 14, + "enginerecharge": 1, + "systemcapacity": 14, + "systemrecharge": 1 + }, + "3E": { + "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 + }, + "4A": { + "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 + }, + "4B": { + "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 + }, + "4C": { + "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 + }, + "4D": { + "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 + }, + "4E": { + "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 + }, + "5A": { + "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 + }, + "5B": { + "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 + }, + "5C": { + "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 + }, + "5D": { + "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 + }, + "5E": { + "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 + }, + "6A": { + "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 + }, + "6B": { + "class": 6, + "rating": "B", + "cost": 1390275, + "mass": 64, + "power": 0.75, + "weaponcapacity": 46, + "weaponrecharge": 4.7, + "enginecapacity": 32, + "enginerecharge": 3, + "systemcapacity": 32, + "systemrecharge": 3 + }, + "6C": { + "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 + }, + "6D": { + "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 + }, + "6E": { + "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 + }, + "7A": { + "class": 7, + "rating": "A", + "cost": 9731925, + "mass": 80, + "power": 0.89, + "weaponcapacity": 61, + "weaponrecharge": 6.1, + "enginecapacity": 41, + "enginerecharge": 4, + "systemcapacity": 41, + "systemrecharge": 4 + }, + "7B": { + "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 + }, + "7C": { + "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 + }, + "7D": { + "class": 7, + "rating": "D", + "cost": 622843, + "mass": 32, + "power": 0.67, + "weaponcapacity": 46, + "weaponrecharge": 4.6, + "enginecapacity": 31, + "enginerecharge": 3, + "systemcapacity": 31, + "systemrecharge": 3 + }, + "7E": { + "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 + }, + "8A": { + "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 + }, + "8B": { + "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 + }, + "8C": { + "class": 8, + "rating": "C", + "cost": 4359903, + "mass": 160, + "power": 0.8, + "weaponcapacity": 60, + "weaponrecharge": 6, + "enginecapacity": 40, + "enginerecharge": 4, + "systemcapacity": 40, + "systemrecharge": 4 + }, + "8D": { + "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 + }, + "8E": { + "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 + } +} diff --git a/data/components/common/power_plant.json b/data/components/common/power_plant.json new file mode 100644 index 00000000..8be517c4 --- /dev/null +++ b/data/components/common/power_plant.json @@ -0,0 +1,282 @@ +{ + "2A": { + "class": 2, + "rating": "A", + "cost": 160224, + "mass": 1.3, + "pGen": 9.6, + "eff": "B" + }, + "2B": { + "class": 2, + "rating": "B", + "cost": 53408, + "mass": 2, + "pGen": 8.8, + "eff": "C" + }, + "2C": { + "class": 2, + "rating": "C", + "cost": 17803, + "mass": 1.3, + "pGen": 8, + "eff": "C" + }, + "2D": { + "class": 2, + "rating": "D", + "cost": 5934, + "mass": 1, + "pGen": 7.2, + "eff": "D" + }, + "2E": { + "class": 2, + "rating": "E", + "cost": 1978, + "mass": 2.5, + "pGen": 6.4, + "eff": "F" + }, + "3A": { + "class": 3, + "rating": "A", + "cost": 507912, + "mass": 2.5, + "pGen": 12, + "eff": "B" + }, + "3B": { + "class": 3, + "rating": "B", + "cost": 169304, + "mass": 4, + "pGen": 11, + "eff": "C" + }, + "3C": { + "class": 3, + "rating": "C", + "cost": 56435, + "mass": 2.5, + "pGen": 10, + "eff": "C" + }, + "3D": { + "class": 3, + "rating": "D", + "cost": 18812, + "mass": 2, + "pGen": 9, + "eff": "D" + }, + "3E": { + "class": 3, + "rating": "E", + "cost": 6271, + "mass": 5, + "pGen": 8, + "eff": "F" + }, + "4A": { + "class": 4, + "rating": "A", + "cost": 1610080, + "mass": 5, + "pGen": 15.6, + "eff": "B" + }, + "4B": { + "class": 4, + "rating": "B", + "cost": 536693, + "mass": 8, + "pGen": 14.3, + "eff": "C" + }, + "4C": { + "class": 4, + "rating": "C", + "cost": 178898, + "mass": 5, + "pGen": 13, + "eff": "C" + }, + "4D": { + "class": 4, + "rating": "D", + "cost": 59633, + "mass": 4, + "pGen": 11.7, + "eff": "D" + }, + "4E": { + "class": 4, + "rating": "E", + "cost": 19878, + "mass": 10, + "pGen": 10.4, + "eff": "F" + }, + "5A": { + "class": 5, + "rating": "A", + "cost": 5103953, + "mass": 10, + "pGen": 20.4, + "eff": "B" + }, + "5B": { + "class": 5, + "rating": "B", + "cost": 1701318, + "mass": 16, + "pGen": 18.7, + "eff": "C" + }, + "5C": { + "class": 5, + "rating": "C", + "cost": 567106, + "mass": 10, + "pGen": 17, + "eff": "C" + }, + "5D": { + "class": 5, + "rating": "D", + "cost": 189035, + "mass": 8, + "pGen": 15.3, + "eff": "D" + }, + "5E": { + "class": 5, + "rating": "E", + "cost": 63012, + "mass": 20, + "pGen": 13.6, + "eff": "F" + }, + "6A": { + "class": 6, + "rating": "A", + "cost": 16179531, + "mass": 20, + "pGen": 25.2, + "eff": "B" + }, + "6B": { + "class": 6, + "rating": "B", + "cost": 5393177, + "mass": 32, + "pGen": 23.1, + "eff": "C" + }, + "6C": { + "class": 6, + "rating": "C", + "cost": 1797726, + "mass": 20, + "pGen": 21, + "eff": "C" + }, + "6D": { + "class": 6, + "rating": "D", + "cost": 599242, + "mass": 16, + "pGen": 18.9, + "eff": "D" + }, + "6E": { + "class": 6, + "rating": "E", + "cost": 199747, + "mass": 40, + "pGen": 16.8, + "eff": "F" + }, + "7A": { + "class": 7, + "rating": "A", + "cost": 51289112, + "mass": 40, + "pGen": 30, + "eff": "B" + }, + "7B": { + "class": 7, + "rating": "B", + "cost": 17096371, + "mass": 64, + "pGen": 27.5, + "eff": "C" + }, + "7C": { + "class": 7, + "rating": "C", + "cost": 5698790, + "mass": 40, + "pGen": 25, + "eff": "C" + }, + "7D": { + "class": 7, + "rating": "D", + "cost": 1899597, + "mass": 32, + "pGen": 22.5, + "eff": "D" + }, + "7E": { + "class": 7, + "rating": "E", + "cost": 633199, + "mass": 80, + "pGen": 20, + "eff": "F" + }, + "8A": { + "class": 8, + "rating": "A", + "cost": 162586486, + "mass": 80, + "pGen": 36, + "eff": "B" + }, + "8B": { + "class": 8, + "rating": "B", + "cost": 54195495, + "mass": 128, + "pGen": 33, + "eff": "C" + }, + "8C": { + "class": 8, + "rating": "C", + "cost": 18065165, + "mass": 80, + "pGen": 30, + "eff": "C" + }, + "8D": { + "class": 8, + "rating": "D", + "cost": 6021722, + "mass": 64, + "pGen": 27, + "eff": "D" + }, + "8E": { + "class": 8, + "rating": "E", + "cost": 2007241, + "mass": 160, + "pGen": 24, + "eff": "F" + } +} diff --git a/data/components/common/sensors.json b/data/components/common/sensors.json new file mode 100644 index 00000000..1d39a689 --- /dev/null +++ b/data/components/common/sensors.json @@ -0,0 +1,282 @@ +{ + "1A": { + "class": 1, + "rating": "A", + "cost": 20195, + "mass": 1.3, + "power": 0.6, + "range": 6 + }, + "1B": { + "class": 1, + "rating": "B", + "cost": 8078, + "mass": 2, + "power": 0.33, + "range": 5.5 + }, + "1C": { + "class": 1, + "rating": "C", + "cost": 3231, + "mass": 1.3, + "power": 0.2, + "range": 5 + }, + "1D": { + "class": 1, + "rating": "D", + "cost": 1293, + "mass": 0.5, + "power": 0.18, + "range": 4.5 + }, + "1E": { + "class": 1, + "rating": "E", + "cost": 517, + "mass": 1.3, + "power": 0.16, + "range": 4 + }, + "2A": { + "class": 2, + "rating": "A", + "cost": 56547, + "mass": 2.5, + "power": 0.69, + "range": 6 + }, + "2B": { + "class": 2, + "rating": "B", + "cost": 22619, + "mass": 4, + "power": 0.38, + "range": 5.5 + }, + "2C": { + "class": 2, + "rating": "C", + "cost": 9048, + "mass": 2.5, + "power": 0.23, + "range": 5 + }, + "2D": { + "class": 2, + "rating": "D", + "cost": 3619, + "mass": 1, + "power": 0.21, + "range": 4.5 + }, + "2E": { + "class": 2, + "rating": "E", + "cost": 1448, + "mass": 2.5, + "power": 0.18, + "range": 4 + }, + "3A": { + "class": 3, + "rating": "A", + "cost": 158331, + "mass": 5, + "power": 0.84, + "range": 6 + }, + "3B": { + "class": 3, + "rating": "B", + "cost": 63333, + "mass": 8, + "power": 0.46, + "range": 5.5 + }, + "3C": { + "class": 3, + "rating": "C", + "cost": 25333, + "mass": 5, + "power": 0.28, + "range": 5 + }, + "3D": { + "class": 3, + "rating": "D", + "cost": 10133, + "mass": 2, + "power": 0.25, + "range": 4.5 + }, + "3E": { + "class": 3, + "rating": "E", + "cost": 4053, + "mass": 5, + "power": 0.22, + "range": 4 + }, + "4A": { + "class": 4, + "rating": "A", + "cost": 443328, + "mass": 10, + "power": 1.02, + "range": 7 + }, + "4B": { + "class": 4, + "rating": "B", + "cost": 177331, + "mass": 16, + "power": 0.56, + "range": 6 + }, + "4C": { + "class": 4, + "rating": "C", + "cost": 70932, + "mass": 10, + "power": 0.34, + "range": 6 + }, + "4D": { + "class": 4, + "rating": "D", + "cost": 28373, + "mass": 4, + "power": 0.31, + "range": 5 + }, + "4E": { + "class": 4, + "rating": "E", + "cost": 11349, + "mass": 10, + "power": 0.27, + "range": 4 + }, + "5A": { + "class": 5, + "rating": "A", + "cost": 1241317, + "mass": 20, + "power": 1.23, + "range": 6.5 + }, + "5B": { + "class": 5, + "rating": "B", + "cost": 496527, + "mass": 32, + "power": 0.68, + "range": 6 + }, + "5C": { + "class": 5, + "rating": "C", + "cost": 198611, + "mass": 20, + "power": 0.41, + "range": 5.5 + }, + "5D": { + "class": 5, + "rating": "D", + "cost": 79444, + "mass": 8, + "power": 0.37, + "range": 5 + }, + "5E": { + "class": 5, + "rating": "E", + "cost": 31778, + "mass": 20, + "power": 0.33, + "range": 4.5 + }, + "6A": { + "class": 6, + "rating": "A", + "cost": 3475688, + "mass": 40, + "power": 1.5, + "range": 7 + }, + "6B": { + "class": 6, + "rating": "B", + "cost": 1390275, + "mass": 64, + "power": 0.83, + "range": 7 + }, + "6C": { + "class": 6, + "rating": "C", + "cost": 556110, + "mass": 40, + "power": 0.5, + "range": 6 + }, + "6D": { + "class": 6, + "rating": "D", + "cost": 222444, + "mass": 16, + "power": 0.45, + "range": 5 + }, + "6E": { + "class": 6, + "rating": "E", + "cost": 88978, + "mass": 40, + "power": 0.4, + "range": 5 + }, + "8A": { + "class": 8, + "rating": "A", + "cost": 27249391, + "mass": 160, + "power": 2.07, + "range": 8 + }, + "8B": { + "class": 8, + "rating": "B", + "cost": 10899756, + "mass": 256, + "power": 1.14, + "range": 7 + }, + "8C": { + "class": 8, + "rating": "C", + "cost": 4359903, + "mass": 160, + "power": 0.69, + "range": 6 + }, + "8D": { + "class": 8, + "rating": "D", + "cost": 1743961, + "mass": 64, + "power": 0.62, + "range": 6 + }, + "8E": { + "class": 8, + "rating": "E", + "cost": 697584, + "mass": 160, + "power": 0.55, + "range": 5 + } +} diff --git a/data/components/common/thrusters.json b/data/components/common/thrusters.json new file mode 100644 index 00000000..c6bbef40 --- /dev/null +++ b/data/components/common/thrusters.json @@ -0,0 +1,272 @@ +{ + "2A": { + "class": 2, + "rating": "A", + "cost": 160224, + "mass": 2.5, + "power": 3, + "optmass": 72, + "maxmass": 108 + }, + "2B": { + "class": 2, + "rating": "B", + "cost": 53408, + "mass": 4, + "power": 2.75, + "optmass": 66, + "maxmass": 99 + }, + "2C": { + "class": 2, + "rating": "C", + "cost": 17803, + "mass": 2.5, + "power": 2.5, + "optmass": 60, + "maxmass": 90 + }, + "2D": { + "class": 2, + "rating": "D", + "cost": 5934, + "mass": 1, + "power": 2.25, + "optmass": 54, + "maxmass": 81 + }, + "2E": { + "class": 2, + "rating": "E", + "cost": 1978, + "mass": 2.5, + "power": 2, + "optmass": 48, + "maxmass": 72 + }, + "3A": { + "class": 3, + "rating": "A", + "cost": 507912, + "mass": 5, + "power": 3.72, + "optmass": 120, + "maxmass": 180 + }, + "3B": { + "class": 3, + "rating": "B", + "cost": 169304, + "mass": 8, + "power": 3.41, + "optmass": 110, + "maxmass": 165 + }, + "3C": { + "class": 3, + "rating": "C", + "cost": 56435, + "mass": 5, + "power": 3.1, + "optmass": 100, + "maxmass": 150 + }, + "3D": { + "class": 3, + "rating": "D", + "cost": 18812, + "mass": 2, + "power": 2.79, + "optmass": 90, + "maxmass": 135 + }, + "3E": { + "class": 3, + "rating": "E", + "cost": 6271, + "mass": 5, + "power": 2.48, + "optmass": 80, + "maxmass": 120 + }, + "4A": { + "class": 4, + "rating": "A", + "cost": 1610080, + "mass": 10, + "power": 4.92, + "optmass": 420, + "maxmass": 630 + }, + "4B": { + "class": 4, + "rating": "B", + "cost": 536693, + "mass": 16, + "power": 4.51, + "optmass": 385, + "maxmass": 578 + }, + "4C": { + "class": 4, + "rating": "C", + "cost": 178898, + "mass": 10, + "power": 4.1, + "optmass": 350, + "maxmass": 525 + }, + "4D": { + "class": 4, + "rating": "D", + "cost": 59633, + "mass": 4, + "power": 3.69, + "optmass": 315, + "maxmass": 473 + }, + "4E": { + "class": 4, + "rating": "E", + "cost": 19878, + "mass": 10, + "power": 3.82, + "optmass": 280, + "maxmass": 420 + }, + "5A": { + "class": 5, + "rating": "A", + "cost": 5103953, + "mass": 20, + "power": 6.12, + "optmass": 840, + "maxmass": 1260 + }, + "5B": { + "class": 5, + "rating": "B", + "cost": 1701318, + "mass": 32, + "power": 5.61, + "optmass": 770, + "maxmass": 1155 + }, + "5C": { + "class": 5, + "rating": "C", + "cost": 567106, + "mass": 20, + "power": 5.1, + "optmass": 700, + "maxmass": 1050 + }, + "5D": { + "class": 5, + "rating": "D", + "cost": 189035, + "mass": 8, + "power": 4.59, + "optmass": 630, + "maxmass": 945 + }, + "5E": { + "class": 5, + "rating": "E", + "cost": 63012, + "mass": 20, + "power": 4.08, + "optmass": 560, + "maxmass": 840 + }, + "6A": { + "class": 6, + "rating": "A", + "cost": 16179531, + "mass": 40, + "power": 7.56, + "optmass": 1440, + "maxmass": 2160 + }, + "6B": { + "class": 6, + "rating": "B", + "cost": 5393177, + "mass": 64, + "power": 6.93, + "optmass": 1320, + "maxmass": 1980 + }, + "6C": { + "class": 6, + "rating": "C", + "cost": 1797726, + "mass": 40, + "power": 6.3, + "optmass": 1200, + "maxmass": 1800 + }, + "6D": { + "class": 6, + "rating": "D", + "cost": 599242, + "mass": 16, + "power": 5.67, + "optmass": 1080, + "maxmass": 1620 + }, + "6E": { + "class": 6, + "rating": "E", + "cost": 199747, + "mass": 40, + "power": 5.04, + "optmass": 960, + "maxmass": 1440 + }, + "7A": { + "class": 7, + "rating": "A", + "cost": 51289112, + "mass": 80, + "power": 9.12, + "optmass": 2160, + "maxmass": 3240 + }, + "7B": { + "class": 7, + "rating": "B", + "cost": 17096371, + "mass": 128, + "power": 8.36, + "optmass": 1980, + "maxmass": 2970 + }, + "7C": { + "class": 7, + "rating": "C", + "cost": 5698790, + "mass": 80, + "power": 7.6, + "optmass": 1800, + "maxmass": 2700 + }, + "7D": { + "class": 7, + "rating": "D", + "cost": 1899597, + "mass": 32, + "power": 6.84, + "optmass": 1620, + "maxmass": 2430 + }, + "7E": { + "class": 7, + "rating": "E", + "cost": 633199, + "mass": 80, + "power": 6.08, + "optmass": 1440, + "maxmass": 2160 + } +} diff --git a/data/components/hardpoints/beam_laser.json b/data/components/hardpoints/beam_laser.json new file mode 100644 index 00000000..542a41ff --- /dev/null +++ b/data/components/hardpoints/beam_laser.json @@ -0,0 +1,146 @@ +{ + "10": { + "group": "lt", + "name": "Beam Laser", + "class": 3, + "rating": "D", + "cost": 19399600, + "mass": 8, + "power": 1.68, + "mode": "T", + "type": "T", + "damage": 5, + "armourpen": "A", + "rof": null, + "dps": 4, + "thermload": 4 + }, + "0o": { + "group": "st", + "name": "Beam Laser", + "class": 1, + "rating": "E", + "cost": 37430, + "mass": 2, + "power": 0.69, + "mode": "F", + "type": "T", + "damage": 4, + "armourpen": "A", + "rof": null, + "dps": 3, + "thermload": 3 + }, + "0p": { + "group": "st", + "name": "Beam Laser", + "class": 1, + "rating": "E", + "cost": 74650, + "mass": 2, + "power": 0.67, + "mode": "G", + "type": "T", + "damage": 4, + "armourpen": "A", + "rof": null, + "dps": 3, + "thermload": 3 + }, + "0q": { + "group": "st", + "name": "Beam Laser", + "class": 1, + "rating": "F", + "cost": 500000, + "mass": 2, + "power": 0.63, + "mode": "T", + "type": "T", + "damage": 3, + "armourpen": "A", + "rof": null, + "dps": 3, + "thermload": 2 + }, + "0r": { + "group": "mt", + "name": "Beam Laser", + "class": 2, + "rating": "D", + "cost": 299520, + "mass": 4, + "power": 1.12, + "mode": "F", + "type": "T", + "damage": 5, + "armourpen": "A", + "rof": null, + "dps": 4, + "thermload": 4 + }, + "0s": { + "group": "mt", + "name": "Beam Laser", + "class": 2, + "rating": "D", + "cost": 500600, + "mass": 4, + "power": 1.1, + "mode": "G", + "type": "T", + "damage": 5, + "armourpen": "A", + "rof": null, + "dps": 4, + "thermload": 4 + }, + "0t": { + "group": "mt", + "name": "Beam Laser", + "class": 2, + "rating": "E", + "cost": 2099900, + "mass": 4, + "power": 1.03, + "mode": "T", + "type": "T", + "damage": 4, + "armourpen": "A", + "rof": null, + "dps": 3, + "thermload": 3 + }, + "0u": { + "group": "lt", + "name": "Beam Laser", + "class": 3, + "rating": "C", + "cost": 1177600, + "mass": 8, + "power": 1.8, + "mode": "F", + "type": "T", + "damage": 6, + "armourpen": "A", + "rof": null, + "dps": 5, + "thermload": 5 + }, + "0v": { + "group": "lt", + "name": "Beam Laser", + "class": 3, + "rating": "C", + "cost": 2396160, + "mass": 8, + "power": 1.78, + "mode": "G", + "type": "T", + "damage": 6, + "armourpen": "A", + "rof": null, + "dps": 4, + "thermload": 6 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/burst_laser.json b/data/components/hardpoints/burst_laser.json new file mode 100644 index 00000000..a05761f7 --- /dev/null +++ b/data/components/hardpoints/burst_laser.json @@ -0,0 +1,98 @@ +{ + "11": { + "group": "st", + "name": "Burst Laser", + "class": 1, + "rating": "F", + "cost": 4400, + "mass": 2, + "power": 0.65, + "mode": "F", + "type": "T", + "damage": 2, + "armourpen": "A", + "rof": 1.6, + "dps": 3, + "thermload": 1 + }, + "12": { + "group": "st", + "name": "Burst Laser", + "class": 1, + "rating": "G", + "cost": 8600, + "mass": 2, + "power": 0.64, + "mode": "G", + "type": "T", + "damage": 2, + "armourpen": "A", + "rof": 1.7, + "dps": 3, + "thermload": 1 + }, + "13": { + "group": "st", + "name": "Burst Laser", + "class": 1, + "rating": "G", + "cost": 52800, + "mass": 2, + "power": 0.6, + "mode": "T", + "type": "T", + "damage": 1, + "armourpen": "B", + "rof": 1.3, + "dps": 2, + "thermload": 1 + }, + "14": { + "group": "lt", + "name": "Burst Laser", + "class": 3, + "rating": "D", + "cost": 140400, + "mass": 8, + "power": 1.66, + "mode": "F", + "type": "T", + "damage": 4, + "armourpen": "B", + "rof": 1, + "dps": 4, + "thermload": 1 + }, + "15": { + "group": "lt", + "name": "Burst Laser", + "class": 3, + "rating": "E", + "cost": 281600, + "mass": 8, + "power": 1.65, + "mode": "G", + "type": "T", + "damage": 3, + "armourpen": "A", + "rof": 1.2, + "dps": 4, + "thermload": 1 + }, + "16": { + "group": "lt", + "name": "Burst Laser", + "class": 3, + "rating": "E", + "cost": 800400, + "mass": 8, + "power": 1.57, + "mode": "T", + "type": "T", + "damage": 3, + "armourpen": "A", + "rof": 0.9, + "dps": 4, + "thermload": 1 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/cannon.json b/data/components/hardpoints/cannon.json new file mode 100644 index 00000000..c96908a8 --- /dev/null +++ b/data/components/hardpoints/cannon.json @@ -0,0 +1,200 @@ +{ + "1h": { + "group": "sk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1i": { + "group": "sk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1j": { + "group": "sk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1k": { + "group": "mk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1l": { + "group": "mk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1m": { + "group": "mk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1n": { + "group": "lk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1o": { + "group": "lk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1p": { + "group": "lk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1q": { + "group": "hk", + "name": "Cannon", + "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, + "ammo": 100 + }, + "1r": { + "group": "hk", + "name": "Cannon", + "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, + "ammo": 100 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/cargo_scanner.json b/data/components/hardpoints/cargo_scanner.json new file mode 100644 index 00000000..fe173e2a --- /dev/null +++ b/data/components/hardpoints/cargo_scanner.json @@ -0,0 +1,57 @@ +{ + "09": { + "group": "us", + "name": "Cargo Scanner", + "class": 0, + "rating": "A", + "cost": 1097095, + "mass": 1.3, + "power": 3.2, + "range": 4, + "time": 10 + }, + "0a": { + "group": "us", + "name": "Cargo Scanner", + "class": 0, + "rating": "B", + "cost": 365698, + "mass": 1.3, + "power": 1.6, + "range": 3.5, + "time": 10 + }, + "0b": { + "group": "us", + "name": "Cargo Scanner", + "class": 0, + "rating": "C", + "cost": 121899, + "mass": 1.3, + "power": 0.8, + "range": 3, + "time": 10 + }, + "0c": { + "group": "us", + "name": "Cargo Scanner", + "class": 0, + "rating": "D", + "cost": 40633, + "mass": 1.3, + "power": 0.4, + "range": 2.5, + "time": 10 + }, + "0d": { + "group": "us", + "name": "Cargo Scanner", + "class": 0, + "rating": "E", + "cost": 13544, + "mass": 1.3, + "power": 0.2, + "range": 2, + "time": 10 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/chaff_launcher.json b/data/components/hardpoints/chaff_launcher.json new file mode 100644 index 00000000..81c45c59 --- /dev/null +++ b/data/components/hardpoints/chaff_launcher.json @@ -0,0 +1,16 @@ +{ + "00": { + "group": "um", + "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 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/electronic_countermeasure.json b/data/components/hardpoints/electronic_countermeasure.json new file mode 100644 index 00000000..47457990 --- /dev/null +++ b/data/components/hardpoints/electronic_countermeasure.json @@ -0,0 +1,15 @@ +{ + "01": { + "group": "um", + "name": "Electronic Countermeasure", + "class": 0, + "rating": "F", + "cost": 12500, + "mass": 1.3, + "power": 0.2, + "range": 3, + "chargeup": 4, + "activepower": 4, + "cooldown": 10 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/fragment_cannon.json b/data/components/hardpoints/fragment_cannon.json new file mode 100644 index 00000000..8769d86f --- /dev/null +++ b/data/components/hardpoints/fragment_cannon.json @@ -0,0 +1,128 @@ +{ + "20": { + "group": "lk", + "name": "Fragment Cannon", + "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, + "ammo": 30 + }, + "21": { + "group": "lk", + "name": "Fragment Cannon", + "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, + "ammo": 30 + }, + "22": { + "group": "lk", + "name": "Fragment Cannon", + "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, + "ammo": 30 + }, + "1s": { + "group": "sk", + "name": "Fragment Cannon", + "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, + "ammo": 30 + }, + "1t": { + "group": "sk", + "name": "Fragment Cannon", + "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, + "ammo": 30 + }, + "1u": { + "group": "sk", + "name": "Fragment Cannon", + "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, + "ammo": 30 + }, + "1v": { + "group": "mk", + "name": "Fragment Cannon", + "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, + "ammo": 30 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/frame_shift_wake_scanner.json b/data/components/hardpoints/frame_shift_wake_scanner.json new file mode 100644 index 00000000..41171d75 --- /dev/null +++ b/data/components/hardpoints/frame_shift_wake_scanner.json @@ -0,0 +1,57 @@ +{ + "0e": { + "group": "us", + "name": "Frame Shift Wake Scanner", + "class": 0, + "rating": "A", + "cost": 1097095, + "mass": 1.3, + "power": 3.2, + "range": 4, + "time": 10 + }, + "0f": { + "group": "us", + "name": "Frame Shift Wake Scanner", + "class": 0, + "rating": "B", + "cost": 365698, + "mass": 1.3, + "power": 1.6, + "range": 3.5, + "time": 10 + }, + "0g": { + "group": "us", + "name": "Frame Shift Wake Scanner", + "class": 0, + "rating": "C", + "cost": 121899, + "mass": 1.3, + "power": 0.8, + "range": 3, + "time": 10 + }, + "0h": { + "group": "us", + "name": "Frame Shift Wake Scanner", + "class": 0, + "rating": "D", + "cost": 40633, + "mass": 1.3, + "power": 0.4, + "range": 2.5, + "time": 10 + }, + "0i": { + "group": "us", + "name": "Frame Shift Wake Scanner", + "class": 0, + "rating": "E", + "cost": 13544, + "mass": 1.3, + "power": 0.2, + "range": 2, + "time": 10 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/heat_sink_launcher.json b/data/components/hardpoints/heat_sink_launcher.json new file mode 100644 index 00000000..faf504f3 --- /dev/null +++ b/data/components/hardpoints/heat_sink_launcher.json @@ -0,0 +1,16 @@ +{ + "02": { + "group": "um", + "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 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/kill_warrant_scanner.json b/data/components/hardpoints/kill_warrant_scanner.json new file mode 100644 index 00000000..8a7ad207 --- /dev/null +++ b/data/components/hardpoints/kill_warrant_scanner.json @@ -0,0 +1,57 @@ +{ + "0j": { + "group": "us", + "name": "Kill Warrant Scanner", + "class": 0, + "rating": "A", + "cost": 1097095, + "mass": 1.3, + "power": 3.2, + "range": 4, + "time": 10 + }, + "0k": { + "group": "us", + "name": "Kill Warrant Scanner", + "class": 0, + "rating": "B", + "cost": 365698, + "mass": 1.3, + "power": 1.6, + "range": 3.5, + "time": 10 + }, + "0l": { + "group": "us", + "name": "Kill Warrant Scanner", + "class": 0, + "rating": "C", + "cost": 121899, + "mass": 1.3, + "power": 0.8, + "range": 3, + "time": 10 + }, + "0m": { + "group": "us", + "name": "Kill Warrant Scanner", + "class": 0, + "rating": "D", + "cost": 40633, + "mass": 1.3, + "power": 0.4, + "range": 2.5, + "time": 10 + }, + "0n": { + "group": "us", + "name": "Kill Warrant Scanner", + "class": 0, + "rating": "E", + "cost": 13544, + "mass": 1.3, + "power": 0.2, + "range": 2, + "time": 10 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/mine_launcher.json b/data/components/hardpoints/mine_launcher.json new file mode 100644 index 00000000..f888b700 --- /dev/null +++ b/data/components/hardpoints/mine_launcher.json @@ -0,0 +1,32 @@ +{ + "2j": { + "group": "so", + "name": "Mine Launcher", + "class": 1, + "rating": "I", + "cost": 24260, + "mass": 2, + "power": 0.4, + "mode": "F", + "type": "T", + "armourpen": "C", + "thermload": 2, + "clip": 1, + "ammo": 24 + }, + "2k": { + "group": "mo", + "name": "Mine Launcher", + "class": 2, + "rating": "I", + "cost": 294080, + "mass": 4, + "power": 0.4, + "mode": "F", + "type": "T", + "armourpen": "C", + "thermload": 3, + "clip": 3, + "ammo": 24 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/mining_laser.json b/data/components/hardpoints/mining_laser.json new file mode 100644 index 00000000..4e1b1bcc --- /dev/null +++ b/data/components/hardpoints/mining_laser.json @@ -0,0 +1,30 @@ +{ + "2l": { + "group": "so", + "name": "Mining Laser", + "class": 1, + "rating": "D", + "cost": 6800, + "mass": 2, + "power": 0.5, + "mode": "F", + "armourpen": "D", + "thermload": 3, + "clip": 1, + "ammo": 1 + }, + "2m": { + "group": "mo", + "name": "Mining Laser", + "class": 2, + "rating": "D", + "cost": 22576, + "mass": 2, + "power": 0.75, + "mode": "F", + "armourpen": "D", + "thermload": 5, + "clip": 1, + "ammo": 1 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/missile_rack.json b/data/components/hardpoints/missile_rack.json new file mode 100644 index 00000000..270e66c6 --- /dev/null +++ b/data/components/hardpoints/missile_rack.json @@ -0,0 +1,78 @@ +{ + "2d": { + "group": "so", + "name": "Missile Rack", + "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, + "missile": "D" + }, + "2e": { + "group": "so", + "name": "Missile Rack", + "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, + "missile": "S" + }, + "2f": { + "group": "mo", + "name": "Missile Rack", + "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, + "missile": "D" + }, + "2g": { + "group": "mo", + "name": "Missile Rack", + "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, + "missile": "S" + } +} \ No newline at end of file diff --git a/data/components/hardpoints/multi_cannon.json b/data/components/hardpoints/multi_cannon.json new file mode 100644 index 00000000..430a6c56 --- /dev/null +++ b/data/components/hardpoints/multi_cannon.json @@ -0,0 +1,110 @@ +{ + "23": { + "group": "sk", + "name": "Multi-cannon", + "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, + "ammo": 2100 + }, + "24": { + "group": "sk", + "name": "Multi-cannon", + "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, + "ammo": 2100 + }, + "25": { + "group": "sk", + "name": "Multi-cannon", + "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, + "ammo": 2100 + }, + "26": { + "group": "mk", + "name": "Multi-cannon", + "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, + "ammo": 2100 + }, + "27": { + "group": "mk", + "name": "Multi-cannon", + "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, + "ammo": 2100 + }, + "28": { + "group": "mk", + "name": "Multi-cannon", + "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, + "ammo": 2100 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/plasma_accelerator.json b/data/components/hardpoints/plasma_accelerator.json new file mode 100644 index 00000000..5af197a6 --- /dev/null +++ b/data/components/hardpoints/plasma_accelerator.json @@ -0,0 +1,56 @@ +{ + "1g": { + "group": "mt", + "name": "Plasma Accelerator", + "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, + "ammo": 100 + }, + "2b": { + "group": "lo", + "name": "Plasma Accelerator", + "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, + "ammo": 100 + }, + "2c": { + "group": "ho", + "name": "Plasma Accelerator", + "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, + "ammo": 100 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/point_defence.json b/data/components/hardpoints/point_defence.json new file mode 100644 index 00000000..f40e2bf2 --- /dev/null +++ b/data/components/hardpoints/point_defence.json @@ -0,0 +1,16 @@ +{ + "03": { + "group": "um", + "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 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/pulse_laser.json b/data/components/hardpoints/pulse_laser.json new file mode 100644 index 00000000..d8b17855 --- /dev/null +++ b/data/components/hardpoints/pulse_laser.json @@ -0,0 +1,146 @@ +{ + "17": { + "group": "st", + "name": "Pulse Laser", + "class": 1, + "rating": "F", + "cost": 2200, + "mass": 2, + "power": 0.39, + "mode": "F", + "type": "T", + "damage": 2, + "armourpen": "A", + "rof": 3.8, + "dps": 3, + "thermload": 1 + }, + "18": { + "group": "st", + "name": "Pulse Laser", + "class": 1, + "rating": "F", + "cost": 6600, + "mass": 2, + "power": 0.39, + "mode": "G", + "type": "T", + "damage": 2, + "armourpen": "A", + "rof": 4, + "dps": 3, + "thermload": 1 + }, + "19": { + "group": "st", + "name": "Pulse Laser", + "class": 1, + "rating": "G", + "cost": 26000, + "mass": 2, + "power": 0.38, + "mode": "T", + "type": "T", + "damage": 2, + "armourpen": "A", + "rof": 2.8, + "dps": 2, + "thermload": 1 + }, + "1a": { + "group": "mt", + "name": "Pulse Laser", + "class": 2, + "rating": "E", + "cost": 17600, + "mass": 4, + "power": 0.6, + "mode": "F", + "type": "T", + "damage": 3, + "armourpen": "A", + "rof": 3.4, + "dps": 3, + "thermload": 1 + }, + "1b": { + "group": "mt", + "name": "Pulse Laser", + "class": 2, + "rating": "F", + "cost": 35400, + "mass": 4, + "power": 0.6, + "mode": "G", + "type": "T", + "damage": 3, + "armourpen": "A", + "rof": 3.6, + "dps": 3, + "thermload": 1 + }, + "1c": { + "group": "mt", + "name": "Pulse Laser", + "class": 2, + "rating": "F", + "cost": 132800, + "mass": 4, + "power": 0.58, + "mode": "T", + "type": "T", + "damage": 2, + "armourpen": "A", + "rof": 2.5, + "dps": 3, + "thermload": 1 + }, + "1d": { + "group": "lt", + "name": "Pulse Laser", + "class": 3, + "rating": "D", + "cost": 70400, + "mass": 8, + "power": 0.9, + "mode": "F", + "type": "T", + "damage": 4, + "armourpen": "A", + "rof": 3, + "dps": 4, + "thermload": 1 + }, + "1e": { + "group": "lt", + "name": "Pulse Laser", + "class": 3, + "rating": "E", + "cost": 140600, + "mass": 8, + "power": 0.92, + "mode": "G", + "type": "T", + "damage": 3, + "armourpen": "A", + "rof": 3.2, + "dps": 4, + "thermload": 1 + }, + "1f": { + "group": "lt", + "name": "Pulse Laser", + "class": 3, + "rating": "F", + "cost": 400400, + "mass": 8, + "power": 0.89, + "mode": "T", + "type": "T", + "damage": 3, + "armourpen": "A", + "rof": 2.3, + "dps": 3, + "thermload": 1 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/rail_gun.json b/data/components/hardpoints/rail_gun.json new file mode 100644 index 00000000..d6bef1d5 --- /dev/null +++ b/data/components/hardpoints/rail_gun.json @@ -0,0 +1,38 @@ +{ + "29": { + "group": "so", + "name": "Rail Gun", + "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, + "ammo": 30 + }, + "2a": { + "group": "mo", + "name": "Rail Gun", + "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, + "ammo": 30 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/shield_booster.json b/data/components/hardpoints/shield_booster.json new file mode 100644 index 00000000..be344109 --- /dev/null +++ b/data/components/hardpoints/shield_booster.json @@ -0,0 +1,57 @@ +{ + "04": { + "group": "ub", + "name": "Shield Booster", + "class": 0, + "rating": "A", + "cost": 281000, + "mass": 3.5, + "power": 1.2, + "passive": 1, + "shieldmul": 1.2 + }, + "05": { + "group": "ub", + "name": "Shield Booster", + "class": 0, + "rating": "B", + "cost": 122000, + "mass": 3, + "power": 1, + "passive": 1, + "shieldmul": 1.16 + }, + "06": { + "group": "ub", + "name": "Shield Booster", + "class": 0, + "rating": "C", + "cost": 53000, + "mass": 2, + "power": 0.7, + "passive": 1, + "shieldmul": 1.12 + }, + "07": { + "group": "ub", + "name": "Shield Booster", + "class": 0, + "rating": "D", + "cost": 23000, + "mass": 1, + "power": 0.5, + "passive": 1, + "shieldmul": 1.08 + }, + "08": { + "group": "ub", + "name": "Shield Booster", + "class": 0, + "rating": "E", + "cost": 10000, + "mass": 0.5, + "power": 0.2, + "passive": 1, + "shieldmul": 1.04 + } +} \ No newline at end of file diff --git a/data/components/hardpoints/torpedo_pylon.json b/data/components/hardpoints/torpedo_pylon.json new file mode 100644 index 00000000..60e61431 --- /dev/null +++ b/data/components/hardpoints/torpedo_pylon.json @@ -0,0 +1,32 @@ +{ + "2h": { + "group": "so", + "name": "Torpedo Pylon", + "class": 1, + "rating": "I", + "cost": 11200, + "mass": 2, + "power": 0.4, + "mode": "F", + "armourpen": "C", + "thermload": 10, + "clip": 1, + "ammo": 1, + "missile": "S" + }, + "2i": { + "group": "mo", + "name": "Torpedo Pylon", + "class": 2, + "rating": "I", + "cost": 44800, + "mass": 4, + "power": 0.4, + "mode": "F", + "armourpen": "C", + "thermload": 10, + "clip": 2, + "ammo": 1, + "missile": "S" + } +} \ No newline at end of file diff --git a/data/components/internal/auto_field_maintenance_unit.json b/data/components/internal/auto_field_maintenance_unit.json new file mode 100644 index 00000000..d7e82802 --- /dev/null +++ b/data/components/internal/auto_field_maintenance_unit.json @@ -0,0 +1,364 @@ +{ + "Auto Field-Maintenance Unit": { + "10": { + "group": "am", + "class": 5, + "rating": "E", + "cost": 104976, + "power": 1.17, + "ammo": 6100, + "repair": 73.2 + }, + "11": { + "group": "am", + "class": 6, + "rating": "A", + "cost": 15305501, + "power": 3.26, + "ammo": 8100, + "repair": 226.8 + }, + "12": { + "group": "am", + "class": 6, + "rating": "B", + "cost": 5101834, + "power": 2.67, + "ammo": 8900, + "repair": 204.7 + }, + "13": { + "group": "am", + "class": 6, + "rating": "C", + "cost": 1700611, + "power": 2.33, + "ammo": 7400, + "repair": 148 + }, + "14": { + "group": "am", + "class": 6, + "rating": "D", + "cost": 566870, + "power": 1.86, + "ammo": 6700, + "repair": 107.2 + }, + "15": { + "group": "am", + "class": 6, + "rating": "E", + "cost": 188957, + "power": 1.4, + "ammo": 7400, + "repair": 88.8 + }, + "16": { + "group": "am", + "class": 7, + "rating": "A", + "cost": 27549901, + "power": 3.68, + "ammo": 9600, + "repair": 268.8 + }, + "17": { + "group": "am", + "class": 7, + "rating": "B", + "cost": 9183300, + "power": 3.02, + "ammo": 10400, + "repair": 239.2 + }, + "18": { + "group": "am", + "class": 7, + "rating": "C", + "cost": 3061100, + "power": 2.63, + "ammo": 8700, + "repair": 174 + }, + "19": { + "group": "am", + "class": 7, + "rating": "D", + "cost": 1020367, + "power": 2.1, + "ammo": 7800, + "repair": 124.8 + }, + "08": { + "group": "am", + "class": 1, + "rating": "A", + "cost": 810000, + "power": 1.26, + "ammo": 1100, + "repair": 30.8 + }, + "09": { + "group": "am", + "class": 1, + "rating": "B", + "cost": 270000, + "power": 1.04, + "ammo": 1200, + "repair": 27.6 + }, + "0a": { + "group": "am", + "class": 1, + "rating": "C", + "cost": 90000, + "power": 0.9, + "ammo": 1000, + "repair": 20 + }, + "0b": { + "group": "am", + "class": 1, + "rating": "D", + "cost": 30000, + "power": 0.72, + "ammo": 900, + "repair": 14.4 + }, + "0c": { + "group": "am", + "class": 1, + "rating": "E", + "cost": 10000, + "power": 0.54, + "ammo": 1000, + "repair": 12 + }, + "0d": { + "group": "am", + "class": 2, + "rating": "A", + "cost": 1458000, + "power": 1.58, + "ammo": 2500, + "repair": 70 + }, + "0e": { + "group": "am", + "class": 2, + "rating": "B", + "cost": 486000, + "power": 1.29, + "ammo": 2800, + "repair": 64.4 + }, + "0f": { + "group": "am", + "class": 2, + "rating": "C", + "cost": 162000, + "power": 1.13, + "ammo": 2300, + "repair": 46 + }, + "0g": { + "group": "am", + "class": 2, + "rating": "D", + "cost": 54000, + "power": 0.9, + "ammo": 2100, + "repair": 33.6 + }, + "0h": { + "group": "am", + "class": 2, + "rating": "E", + "cost": 18000, + "power": 0.68, + "ammo": 2300, + "repair": 27.6 + }, + "0i": { + "group": "am", + "class": 3, + "rating": "A", + "cost": 2624400, + "power": 1.89, + "ammo": 4000, + "repair": 112 + }, + "0j": { + "group": "am", + "class": 3, + "rating": "B", + "cost": 874800, + "power": 1.55, + "ammo": 4300, + "repair": 98.9 + }, + "0k": { + "group": "am", + "class": 3, + "rating": "C", + "cost": 291600, + "power": 1.35, + "ammo": 3600, + "repair": 72 + }, + "0l": { + "group": "am", + "class": 3, + "rating": "D", + "cost": 97200, + "power": 1.08, + "ammo": 3200, + "repair": 51.2 + }, + "0m": { + "group": "am", + "class": 3, + "rating": "E", + "cost": 32400, + "power": 0.81, + "ammo": 3600, + "repair": 43.2 + }, + "0n": { + "group": "am", + "class": 4, + "rating": "A", + "cost": 4723920, + "power": 2.31, + "ammo": 5400, + "repair": 151.2 + }, + "0o": { + "group": "am", + "class": 4, + "rating": "B", + "cost": 1574640, + "power": 1.9, + "ammo": 5900, + "repair": 135.7 + }, + "0p": { + "group": "am", + "class": 4, + "rating": "C", + "cost": 524880, + "power": 1.65, + "ammo": 4900, + "repair": 98 + }, + "0q": { + "group": "am", + "class": 4, + "rating": "D", + "cost": 174960, + "power": 1.32, + "ammo": 4400, + "repair": 70.4 + }, + "0r": { + "group": "am", + "class": 4, + "rating": "E", + "cost": 58320, + "power": 0.99, + "ammo": 4900, + "repair": 58.8 + }, + "0s": { + "group": "am", + "class": 5, + "rating": "A", + "cost": 8503056, + "power": 2.73, + "ammo": 6700, + "repair": 187.6 + }, + "0t": { + "group": "am", + "class": 5, + "rating": "B", + "cost": 2834352, + "power": 2.24, + "ammo": 7300, + "repair": 167.9 + }, + "0u": { + "group": "am", + "class": 5, + "rating": "C", + "cost": 944784, + "power": 1.95, + "ammo": 6100, + "repair": 122 + }, + "0v": { + "group": "am", + "class": 5, + "rating": "D", + "cost": 314928, + "power": 1.56, + "ammo": 5500, + "repair": 88 + }, + "1a": { + "group": "am", + "class": 7, + "rating": "E", + "cost": 340122, + "power": 1.58, + "ammo": 8700, + "repair": 104.4 + }, + "1b": { + "group": "am", + "class": 8, + "rating": "A", + "cost": 49589823, + "power": 4.2, + "ammo": 11000, + "repair": 308 + }, + "1c": { + "group": "am", + "class": 8, + "rating": "B", + "cost": 16529941, + "power": 3.45, + "ammo": 12000, + "repair": 276 + }, + "1d": { + "group": "am", + "class": 8, + "rating": "C", + "cost": 5509980, + "power": 3, + "ammo": 10000, + "repair": 200 + }, + "1e": { + "group": "am", + "class": 8, + "rating": "D", + "cost": 1836660, + "power": 2.4, + "ammo": 9000, + "repair": 144 + }, + "1f": { + "group": "am", + "class": 8, + "rating": "E", + "cost": 612220, + "power": 1.8, + "ammo": 10000, + "repair": 120 + } + } +} \ No newline at end of file diff --git a/data/components/internal/cargo_rack.json b/data/components/internal/cargo_rack.json new file mode 100644 index 00000000..994f3d42 --- /dev/null +++ b/data/components/internal/cargo_rack.json @@ -0,0 +1,68 @@ +{ + "Cargo Rack": { + "00": { + "group": "cr", + "name": "Cargo Rack (Capacity: 2)", + "class": 1, + "rating": "E", + "cost": 1000, + "capacity": 2 + }, + "01": { + "group": "cr", + "name": "Cargo Rack (Capacity: 4)", + "class": 2, + "rating": "E", + "cost": 3250, + "capacity": 4 + }, + "02": { + "group": "cr", + "name": "Cargo Rack (Capacity: 8)", + "class": 3, + "rating": "E", + "cost": 10563, + "capacity": 8 + }, + "03": { + "group": "cr", + "name": "Cargo Rack (Capacity: 16)", + "class": 4, + "rating": "E", + "cost": 34328, + "capacity": 16 + }, + "04": { + "group": "cr", + "name": "Cargo Rack (Capacity: 32)", + "class": 5, + "rating": "E", + "cost": 111566, + "capacity": 32 + }, + "05": { + "group": "cr", + "name": "Cargo Rack (Capacity: 64)", + "class": 6, + "rating": "E", + "cost": 362591, + "capacity": 64 + }, + "06": { + "group": "cr", + "name": "Cargo Rack (Capacity: 128)", + "class": 7, + "rating": "E", + "cost": 1178420, + "capacity": 128 + }, + "07": { + "group": "cr", + "name": "Cargo Rack (Capacity: 256)", + "class": 8, + "rating": "E", + "cost": 3829866, + "capacity": 256 + } + } +} \ No newline at end of file diff --git a/data/components/internal/docking_computer.json b/data/components/internal/docking_computer.json new file mode 100644 index 00000000..4e7a4e99 --- /dev/null +++ b/data/components/internal/docking_computer.json @@ -0,0 +1,12 @@ +{ + "Docking Computer": { + "24": { + "group": "dc", + "name": "Standard Docking Computer", + "class": 1, + "rating": "E", + "cost": 4500, + "power": 0.39 + } + } +} \ No newline at end of file diff --git a/data/components/internal/frame_shift_drive_interdictor.json b/data/components/internal/frame_shift_drive_interdictor.json new file mode 100644 index 00000000..2c34f5d0 --- /dev/null +++ b/data/components/internal/frame_shift_drive_interdictor.json @@ -0,0 +1,184 @@ +{ + "Frame Shift Drive Interdictor": { + "66": { + "group": "fi", + "class": 1, + "rating": "A", + "cost": 972000, + "mass": 1.3, + "power": 0.32, + "range": "C" + }, + "67": { + "group": "fi", + "class": 1, + "rating": "B", + "cost": 324000, + "mass": 2, + "power": 0.28, + "range": "D" + }, + "68": { + "group": "fi", + "class": 1, + "rating": "C", + "cost": 108000, + "mass": 1.3, + "power": 0.23, + "range": "D" + }, + "69": { + "group": "fi", + "class": 1, + "rating": "D", + "cost": 36000, + "mass": 0.5, + "power": 0.18, + "range": "D" + }, + "6a": { + "group": "fi", + "class": 1, + "rating": "E", + "cost": 12000, + "mass": 1.3, + "power": 0.14, + "range": "E" + }, + "6b": { + "group": "fi", + "class": 2, + "rating": "A", + "cost": 2721600, + "mass": 2.5, + "power": 0.39, + "range": "B" + }, + "6c": { + "group": "fi", + "class": 2, + "rating": "B", + "cost": 907200, + "mass": 4, + "power": 0.34, + "range": "C" + }, + "6d": { + "group": "fi", + "class": 2, + "rating": "C", + "cost": 302400, + "mass": 2.5, + "power": 0.28, + "range": "C" + }, + "6e": { + "group": "fi", + "class": 2, + "rating": "D", + "cost": 100800, + "mass": 1, + "power": 0.22, + "range": "C" + }, + "6f": { + "group": "fi", + "class": 2, + "rating": "E", + "cost": 33600, + "mass": 2.5, + "power": 0.17, + "range": "D" + }, + "6g": { + "group": "fi", + "class": 3, + "rating": "A", + "cost": 7620480, + "mass": 5, + "power": 0.48, + "range": "A" + }, + "6h": { + "group": "fi", + "class": 3, + "rating": "B", + "cost": 2540160, + "mass": 8, + "power": 0.41, + "range": "B" + }, + "6i": { + "group": "fi", + "class": 3, + "rating": "C", + "cost": 846720, + "mass": 5, + "power": 0.34, + "range": "B" + }, + "6j": { + "group": "fi", + "class": 3, + "rating": "D", + "cost": 282240, + "mass": 2, + "power": 0.27, + "range": "B" + }, + "6k": { + "group": "fi", + "class": 3, + "rating": "E", + "cost": 94080, + "mass": 5, + "power": 0.2, + "range": "C" + }, + "6l": { + "group": "fi", + "class": 4, + "rating": "A", + "cost": 21337344, + "mass": 10, + "power": 0.57, + "range": "A" + }, + "6m": { + "group": "fi", + "class": 4, + "rating": "B", + "cost": 7112448, + "mass": 16, + "power": 0.49, + "range": "A" + }, + "6n": { + "group": "fi", + "class": 4, + "rating": "C", + "cost": 2370816, + "mass": 10, + "power": 0.41, + "range": "A" + }, + "6o": { + "group": "fi", + "class": 4, + "rating": "D", + "cost": 790272, + "mass": 4, + "power": 0.33, + "range": "A" + }, + "6p": { + "group": "fi", + "class": 4, + "rating": "E", + "cost": 263424, + "mass": 10, + "power": 0.25, + "range": "B" + } + } +} \ No newline at end of file diff --git a/data/components/internal/fuel_scoops.json b/data/components/internal/fuel_scoops.json new file mode 100644 index 00000000..b957dc4d --- /dev/null +++ b/data/components/internal/fuel_scoops.json @@ -0,0 +1,364 @@ +{ + "Fuel Scoops": { + "30": { + "group": "fs", + "name": "Fuel Scoop", + "class": 3, + "rating": "D", + "cost": 14109, + "power": 0.27, + "rate": 100 + }, + "31": { + "group": "fs", + "name": "Fuel Scoop", + "class": 3, + "rating": "E", + "cost": 3386, + "power": 0.2, + "rate": 75 + }, + "32": { + "group": "fs", + "name": "Fuel Scoop", + "class": 4, + "rating": "A", + "cost": 2862364, + "power": 0.57, + "rate": 342 + }, + "33": { + "group": "fs", + "name": "Fuel Scoop", + "class": 4, + "rating": "B", + "cost": 715591, + "power": 0.49, + "rate": 294 + }, + "34": { + "group": "fs", + "name": "Fuel Scoop", + "class": 4, + "rating": "C", + "cost": 178898, + "power": 0.41, + "rate": 245 + }, + "35": { + "group": "fs", + "name": "Fuel Scoop", + "class": 4, + "rating": "D", + "cost": 44724, + "power": 0.33, + "rate": 196 + }, + "36": { + "group": "fs", + "name": "Fuel Scoop", + "class": 4, + "rating": "E", + "cost": 10734, + "power": 0.25, + "rate": 147 + }, + "37": { + "group": "fs", + "name": "Fuel Scoop", + "class": 5, + "rating": "A", + "cost": 9073694, + "power": 0.7, + "rate": 577 + }, + "38": { + "group": "fs", + "name": "Fuel Scoop", + "class": 5, + "rating": "B", + "cost": 2268424, + "power": 0.6, + "rate": 494 + }, + "39": { + "group": "fs", + "name": "Fuel Scoop", + "class": 5, + "rating": "C", + "cost": 567106, + "power": 0.5, + "rate": 412 + }, + "2j": { + "group": "fs", + "name": "Fuel Scoop", + "class": 1, + "rating": "A", + "cost": 82270, + "power": 0.32, + "rate": 42 + }, + "2k": { + "group": "fs", + "name": "Fuel Scoop", + "class": 1, + "rating": "B", + "cost": 20568, + "power": 0.28, + "rate": 36 + }, + "2l": { + "group": "fs", + "name": "Fuel Scoop", + "class": 1, + "rating": "C", + "cost": 5142, + "power": 0.23, + "rate": 30 + }, + "2m": { + "group": "fs", + "name": "Fuel Scoop", + "class": 1, + "rating": "D", + "cost": 1285, + "power": 0.18, + "rate": 24 + }, + "2n": { + "group": "fs", + "name": "Fuel Scoop", + "class": 1, + "rating": "E", + "cost": 309, + "power": 0.14, + "rate": 18 + }, + "2o": { + "group": "fs", + "name": "Fuel Scoop", + "class": 2, + "rating": "A", + "cost": 284844, + "power": 0.39, + "rate": 75 + }, + "2p": { + "group": "fs", + "name": "Fuel Scoop", + "class": 2, + "rating": "B", + "cost": 71211, + "power": 0.34, + "rate": 65 + }, + "2q": { + "group": "fs", + "name": "Fuel Scoop", + "class": 2, + "rating": "C", + "cost": 17803, + "power": 0.28, + "rate": 54 + }, + "2r": { + "group": "fs", + "name": "Fuel Scoop", + "class": 2, + "rating": "D", + "cost": 4451, + "power": 0.22, + "rate": 43 + }, + "2s": { + "group": "fs", + "name": "Fuel Scoop", + "class": 2, + "rating": "E", + "cost": 1068, + "power": 0.17, + "rate": 32 + }, + "2t": { + "group": "fs", + "name": "Fuel Scoop", + "class": 3, + "rating": "A", + "cost": 902954, + "power": 0.48, + "rate": 176 + }, + "2u": { + "group": "fs", + "name": "Fuel Scoop", + "class": 3, + "rating": "B", + "cost": 225738, + "power": 0.41, + "rate": 151 + }, + "2v": { + "group": "fs", + "name": "Fuel Scoop", + "class": 3, + "rating": "C", + "cost": 56435, + "power": 0.34, + "rate": 126 + }, + "3a": { + "group": "fs", + "name": "Fuel Scoop", + "class": 5, + "rating": "D", + "cost": 141776, + "power": 0.4, + "rate": 330 + }, + "3b": { + "group": "fs", + "name": "Fuel Scoop", + "class": 5, + "rating": "E", + "cost": 34026, + "power": 0.3, + "rate": 247 + }, + "3c": { + "group": "fs", + "name": "Fuel Scoop", + "class": 6, + "rating": "A", + "cost": 28763610, + "power": 0.83, + "rate": 878 + }, + "3d": { + "group": "fs", + "name": "Fuel Scoop", + "class": 6, + "rating": "B", + "cost": 7190903, + "power": 0.71, + "rate": 752 + }, + "3e": { + "group": "fs", + "name": "Fuel Scoop", + "class": 6, + "rating": "C", + "cost": 1797726, + "power": 0.59, + "rate": 627 + }, + "3f": { + "group": "fs", + "name": "Fuel Scoop", + "class": 6, + "rating": "D", + "cost": 449431, + "power": 0.47, + "rate": 502 + }, + "3g": { + "group": "fs", + "name": "Fuel Scoop", + "class": 6, + "rating": "E", + "cost": 107864, + "power": 0.35, + "rate": 376 + }, + "3h": { + "group": "fs", + "name": "Fuel Scoop", + "class": 7, + "rating": "A", + "cost": 91180644, + "power": 0.97, + "rate": 1245 + }, + "3i": { + "group": "fs", + "name": "Fuel Scoop", + "class": 7, + "rating": "B", + "cost": 22795161, + "power": 0.83, + "rate": 1068 + }, + "3j": { + "group": "fs", + "name": "Fuel Scoop", + "class": 7, + "rating": "C", + "cost": 5698790, + "power": 0.69, + "rate": 890 + }, + "3k": { + "group": "fs", + "name": "Fuel Scoop", + "class": 7, + "rating": "D", + "cost": 1424698, + "power": 0.55, + "rate": 712 + }, + "3l": { + "group": "fs", + "name": "Fuel Scoop", + "class": 7, + "rating": "E", + "cost": 341927, + "power": 0.41, + "rate": 534 + }, + "3m": { + "group": "fs", + "name": "Fuel Scoop", + "class": 8, + "rating": "A", + "cost": 289042541, + "power": 1.12, + "rate": 1680 + }, + "3n": { + "group": "fs", + "name": "Fuel Scoop", + "class": 8, + "rating": "B", + "cost": 72260660, + "power": 0.96, + "rate": 1440 + }, + "3o": { + "group": "fs", + "name": "Fuel Scoop", + "class": 8, + "rating": "C", + "cost": 18065165, + "power": 0.8, + "rate": 1200 + }, + "3p": { + "group": "fs", + "name": "Fuel Scoop", + "class": 8, + "rating": "D", + "cost": 4516291, + "power": 0.64, + "rate": 960 + }, + "3q": { + "group": "fs", + "name": "Fuel Scoop", + "class": 8, + "rating": "E", + "cost": 1083910, + "power": 0.48, + "rate": 720 + } + } +} \ No newline at end of file diff --git a/data/components/internal/hatch_breaker_limpet_controller.json b/data/components/internal/hatch_breaker_limpet_controller.json new file mode 100644 index 00000000..f0545787 --- /dev/null +++ b/data/components/internal/hatch_breaker_limpet_controller.json @@ -0,0 +1,204 @@ +{ + "Hatch Breaker Limpet Controller": { + "70": { + "group": "hb", + "class": 3, + "rating": "B", + "cost": 43200, + "power": 0.36, + "range": 3.24, + "maximum": 4, + "time": 21 + }, + "71": { + "group": "hb", + "class": 3, + "rating": "C", + "cost": 21600, + "power": 0.3, + "range": 2.7, + "maximum": 3, + "time": 26 + }, + "72": { + "group": "hb", + "class": 3, + "rating": "D", + "cost": 10800, + "power": 0.24, + "range": 2.16, + "maximum": 3, + "time": 31 + }, + "73": { + "group": "hb", + "class": 3, + "rating": "E", + "cost": 5400, + "power": 0.18, + "range": 1.62, + "maximum": 4, + "time": 36 + }, + "74": { + "group": "hb", + "class": 5, + "rating": "A", + "cost": 777600, + "power": 0.7, + "range": 4.62, + "maximum": 6, + "time": 13 + }, + "75": { + "group": "hb", + "class": 5, + "rating": "B", + "cost": 388800, + "power": 0.6, + "range": 3.96, + "maximum": 9, + "time": 18 + }, + "76": { + "group": "hb", + "class": 5, + "rating": "C", + "cost": 194400, + "power": 0.5, + "range": 3.3, + "maximum": 7, + "time": 22 + }, + "77": { + "group": "hb", + "class": 5, + "rating": "D", + "cost": 97200, + "power": 0.4, + "range": 2.64, + "maximum": 6, + "time": 26 + }, + "78": { + "group": "hb", + "class": 5, + "rating": "E", + "cost": 48600, + "power": 0.3, + "range": 1.98, + "maximum": 9, + "time": 31 + }, + "79": { + "group": "hb", + "class": 7, + "rating": "A", + "cost": 6998400, + "power": 0.98, + "range": 6.02, + "maximum": 12, + "time": 11 + }, + "6q": { + "group": "hb", + "class": 1, + "rating": "A", + "cost": 9600, + "power": 0.28, + "range": 3.5, + "maximum": 1, + "time": 18 + }, + "6r": { + "group": "hb", + "class": 1, + "rating": "B", + "cost": 4800, + "power": 0.24, + "range": 3, + "maximum": 2, + "time": 24 + }, + "6s": { + "group": "hb", + "class": 1, + "rating": "C", + "cost": 2400, + "power": 0.2, + "range": 2.5, + "maximum": 1, + "time": 30 + }, + "6t": { + "group": "hb", + "class": 1, + "rating": "D", + "cost": 1200, + "power": 0.16, + "range": 2, + "maximum": 1, + "time": 36 + }, + "6u": { + "group": "hb", + "class": 1, + "rating": "E", + "cost": 600, + "power": 0.12, + "range": 1.5, + "maximum": 2, + "time": 42 + }, + "6v": { + "group": "hb", + "class": 3, + "rating": "A", + "cost": 86400, + "power": 0.42, + "range": 3.78, + "maximum": 3, + "time": 16 + }, + "7a": { + "group": "hb", + "class": 7, + "rating": "B", + "cost": 3499200, + "power": 0.84, + "range": 5.16, + "maximum": 18, + "time": 14 + }, + "7b": { + "group": "hb", + "class": 7, + "rating": "C", + "cost": 1749600, + "power": 0.7, + "range": 4.3, + "maximum": 15, + "time": 18 + }, + "7c": { + "group": "hb", + "class": 7, + "rating": "D", + "cost": 874800, + "power": 0.56, + "range": 3.44, + "maximum": 12, + "time": 22 + }, + "7d": { + "group": "hb", + "class": 7, + "rating": "E", + "cost": 437400, + "power": 0.42, + "range": 2.58, + "maximum": 18, + "time": 25 + } + } +} \ No newline at end of file diff --git a/data/components/internal/hull_reinforcement_package.json b/data/components/internal/hull_reinforcement_package.json new file mode 100644 index 00000000..da8676b1 --- /dev/null +++ b/data/components/internal/hull_reinforcement_package.json @@ -0,0 +1,84 @@ +{ + "Hull Reinforcement Package": { + "25": { + "group": "hr", + "class": 1, + "rating": "D", + "cost": 15000, + "mass": 2, + "armouradd": 15 + }, + "26": { + "group": "hr", + "class": 1, + "rating": "E", + "cost": 5000, + "mass": 4, + "armouradd": 10 + }, + "27": { + "group": "hr", + "class": 2, + "rating": "D", + "cost": 36000, + "mass": 4, + "armouradd": 30 + }, + "28": { + "group": "hr", + "class": 2, + "rating": "E", + "cost": 12000, + "mass": 8, + "armouradd": 20 + }, + "29": { + "group": "hr", + "class": 3, + "rating": "D", + "cost": 84000, + "mass": 8, + "armouradd": 60 + }, + "2a": { + "group": "hr", + "class": 3, + "rating": "E", + "cost": 28000, + "mass": 16, + "armouradd": 40 + }, + "2b": { + "group": "hr", + "class": 4, + "rating": "D", + "cost": 195000, + "mass": 16, + "armouradd": 120 + }, + "2c": { + "group": "hr", + "class": 4, + "rating": "E", + "cost": 65000, + "mass": 32, + "armouradd": 80 + }, + "2d": { + "group": "hr", + "class": 5, + "rating": "D", + "cost": 450000, + "mass": 32, + "armouradd": 240 + }, + "2e": { + "group": "hr", + "class": 5, + "rating": "E", + "cost": 150000, + "mass": 64, + "armouradd": 160 + } + } +} \ No newline at end of file diff --git a/data/components/internal/refinery.json b/data/components/internal/refinery.json new file mode 100644 index 00000000..538ac8d3 --- /dev/null +++ b/data/components/internal/refinery.json @@ -0,0 +1,164 @@ +{ + "Refinery": { + "20": { + "group": "rf", + "class": 4, + "rating": "B", + "cost": 1500282, + "power": 0.49, + "capacity": 9 + }, + "21": { + "group": "rf", + "class": 4, + "rating": "C", + "cost": 500094, + "power": 0.41, + "capacity": 7 + }, + "22": { + "group": "rf", + "class": 4, + "rating": "D", + "cost": 166698, + "power": 0.33, + "capacity": 5 + }, + "23": { + "group": "rf", + "class": 4, + "rating": "E", + "cost": 55566, + "power": 0.25, + "capacity": 4 + }, + "1g": { + "group": "rf", + "class": 1, + "rating": "A", + "cost": 486000, + "power": 0.32, + "capacity": 4 + }, + "1h": { + "group": "rf", + "class": 1, + "rating": "B", + "cost": 162000, + "power": 0.28, + "capacity": 3 + }, + "1i": { + "group": "rf", + "class": 1, + "rating": "C", + "cost": 54000, + "power": 0.23, + "capacity": 2 + }, + "1j": { + "group": "rf", + "class": 1, + "rating": "D", + "cost": 18000, + "power": 0.18, + "capacity": 1 + }, + "1k": { + "group": "rf", + "class": 1, + "rating": "E", + "cost": 6000, + "power": 0.14, + "capacity": 1 + }, + "1l": { + "group": "rf", + "class": 2, + "rating": "A", + "cost": 1020600, + "power": 0.39, + "capacity": 6 + }, + "1m": { + "group": "rf", + "class": 2, + "rating": "B", + "cost": 340200, + "power": 0.34, + "capacity": 5 + }, + "1n": { + "group": "rf", + "class": 2, + "rating": "C", + "cost": 113400, + "power": 0.28, + "capacity": 4 + }, + "1o": { + "group": "rf", + "class": 2, + "rating": "D", + "cost": 37800, + "power": 0.22, + "capacity": 3 + }, + "1p": { + "group": "rf", + "class": 2, + "rating": "E", + "cost": 12600, + "power": 0.17, + "capacity": 2 + }, + "1q": { + "group": "rf", + "class": 3, + "rating": "A", + "cost": 2143260, + "power": 0.48, + "capacity": 8 + }, + "1r": { + "group": "rf", + "class": 3, + "rating": "B", + "cost": 714420, + "power": 0.41, + "capacity": 7 + }, + "1s": { + "group": "rf", + "class": 3, + "rating": "C", + "cost": 238140, + "power": 0.34, + "capacity": 6 + }, + "1t": { + "group": "rf", + "class": 3, + "rating": "D", + "cost": 79380, + "power": 0.27, + "capacity": 4 + }, + "1u": { + "group": "rf", + "class": 3, + "rating": "E", + "cost": 26460, + "power": 0.2, + "capacity": 3 + }, + "1v": { + "group": "rf", + "class": 4, + "rating": "A", + "cost": 4500846, + "power": 0.57, + "capacity": 10 + } + } +} \ No newline at end of file diff --git a/data/components/internal/scanners.json b/data/components/internal/scanners.json new file mode 100644 index 00000000..a0c6dbd8 --- /dev/null +++ b/data/components/internal/scanners.json @@ -0,0 +1,44 @@ +{ + "Scanners": { + "2f": { + "group": "sc", + "name": "Advanced Discovery Scanner", + "class": 1, + "rating": "C", + "cost": 1545000, + "mass": 2, + "power": 0, + "range": null + }, + "2g": { + "group": "sc", + "name": "Intermediate Discovery Scanner", + "class": 1, + "rating": "D", + "cost": 505000, + "mass": 2, + "power": 0, + "range": 1000 + }, + "2h": { + "group": "sc", + "name": "Basic Discovery Scanner", + "class": 1, + "rating": "E", + "cost": 1000, + "mass": 2, + "power": 0, + "range": 500 + }, + "2i": { + "group": "sc", + "name": "Detailed Surface Scanner", + "class": 1, + "rating": "C", + "cost": 250000, + "mass": 1.3, + "power": 0.6, + "range": 0.33 + } + } +} \ No newline at end of file diff --git a/data/components/internal/shield_cell_bank.json b/data/components/internal/shield_cell_bank.json new file mode 100644 index 00000000..955b0032 --- /dev/null +++ b/data/components/internal/shield_cell_bank.json @@ -0,0 +1,404 @@ +{ + "Shield Cell Bank": { + "50": { + "group": "sb", + "class": 1, + "rating": "C", + "cost": 3231, + "mass": 1.3, + "power": 0.69, + "capacity": 3, + "rate": "D" + }, + "51": { + "group": "sb", + "class": 1, + "rating": "D", + "cost": 1293, + "mass": 0.5, + "power": 0.55, + "capacity": 2, + "rate": "E" + }, + "52": { + "group": "sb", + "class": 1, + "rating": "E", + "cost": 517, + "mass": 1.3, + "power": 0.41, + "capacity": 4, + "rate": "E" + }, + "53": { + "group": "sb", + "class": 2, + "rating": "A", + "cost": 56547, + "mass": 2.5, + "power": 1.18, + "capacity": 4, + "rate": "C" + }, + "54": { + "group": "sb", + "class": 2, + "rating": "B", + "cost": 22619, + "mass": 4, + "power": 1.01, + "capacity": 5, + "rate": "D" + }, + "55": { + "group": "sb", + "class": 2, + "rating": "C", + "cost": 9048, + "mass": 2.5, + "power": 0.84, + "capacity": 4, + "rate": "D" + }, + "56": { + "group": "sb", + "class": 2, + "rating": "D", + "cost": 3619, + "mass": 1, + "power": 0.67, + "capacity": 3, + "rate": "D" + }, + "57": { + "group": "sb", + "class": 2, + "rating": "E", + "cost": 1448, + "mass": 2.5, + "power": 0.5, + "capacity": 5, + "rate": "E" + }, + "58": { + "group": "sb", + "class": 3, + "rating": "A", + "cost": 158331, + "mass": 5, + "power": 1.43, + "capacity": 4, + "rate": "C" + }, + "59": { + "group": "sb", + "class": 3, + "rating": "B", + "cost": 63333, + "mass": 8, + "power": 1.22, + "capacity": 5, + "rate": "C" + }, + "60": { + "group": "sb", + "class": 7, + "rating": "E", + "cost": 249137, + "mass": 80, + "power": 1.24, + "capacity": 6, + "rate": "D" + }, + "61": { + "group": "sb", + "class": 8, + "rating": "A", + "cost": 27249391, + "mass": 160, + "power": 3.36, + "capacity": 5, + "rate": "A" + }, + "62": { + "group": "sb", + "class": 8, + "rating": "B", + "cost": 10899756, + "mass": 256, + "power": 2.88, + "capacity": 6, + "rate": "A" + }, + "63": { + "group": "sb", + "class": 8, + "rating": "C", + "cost": 4359903, + "mass": 160, + "power": 2.4, + "capacity": 5, + "rate": "B" + }, + "64": { + "group": "sb", + "class": 8, + "rating": "D", + "cost": 1743961, + "mass": 64, + "power": 1.92, + "capacity": 4, + "rate": "C" + }, + "65": { + "group": "sb", + "class": 8, + "rating": "E", + "cost": 697584, + "mass": 160, + "power": 1.44, + "capacity": 6, + "rate": "C" + }, + "4u": { + "group": "sb", + "class": 1, + "rating": "A", + "cost": 20195, + "mass": 1.3, + "power": 0.97, + "capacity": 3, + "rate": "D" + }, + "4v": { + "group": "sb", + "class": 1, + "rating": "B", + "cost": 8078, + "mass": 2, + "power": 0.83, + "capacity": 4, + "rate": "D" + }, + "5a": { + "group": "sb", + "class": 3, + "rating": "C", + "cost": 25333, + "mass": 5, + "power": 1.02, + "capacity": 4, + "rate": "D" + }, + "5b": { + "group": "sb", + "class": 3, + "rating": "D", + "cost": 10133, + "mass": 2, + "power": 0.82, + "capacity": 3, + "rate": "D" + }, + "5c": { + "group": "sb", + "class": 3, + "rating": "E", + "cost": 4053, + "mass": 5, + "power": 0.61, + "capacity": 5, + "rate": "D" + }, + "5d": { + "group": "sb", + "class": 4, + "rating": "A", + "cost": 443328, + "mass": 10, + "power": 1.72, + "capacity": 4, + "rate": "B" + }, + "5e": { + "group": "sb", + "class": 4, + "rating": "B", + "cost": 177331, + "mass": 16, + "power": 1.48, + "capacity": 5, + "rate": "C" + }, + "5f": { + "group": "sb", + "class": 4, + "rating": "C", + "cost": 70932, + "mass": 10, + "power": 1.23, + "capacity": 4, + "rate": "C" + }, + "5g": { + "group": "sb", + "class": 4, + "rating": "D", + "cost": 28373, + "mass": 4, + "power": 0.98, + "capacity": 3, + "rate": "D" + }, + "5h": { + "group": "sb", + "class": 4, + "rating": "E", + "cost": 11349, + "mass": 10, + "power": 0.74, + "capacity": 5, + "rate": "D" + }, + "5i": { + "group": "sb", + "class": 5, + "rating": "A", + "cost": 1241317, + "mass": 20, + "power": 2.1, + "capacity": 4, + "rate": "B" + }, + "5j": { + "group": "sb", + "class": 5, + "rating": "B", + "cost": 496527, + "mass": 32, + "power": 1.8, + "capacity": 5, + "rate": "B" + }, + "5k": { + "group": "sb", + "class": 5, + "rating": "C", + "cost": 198611, + "mass": 20, + "power": 1.5, + "capacity": 4, + "rate": "C" + }, + "5l": { + "group": "sb", + "class": 5, + "rating": "D", + "cost": 79444, + "mass": 8, + "power": 1.2, + "capacity": 3, + "rate": "C" + }, + "5m": { + "group": "sb", + "class": 5, + "rating": "E", + "cost": 31778, + "mass": 20, + "power": 0.9, + "capacity": 5, + "rate": "D" + }, + "5n": { + "group": "sb", + "class": 6, + "rating": "A", + "cost": 3475688, + "mass": 40, + "power": 2.48, + "capacity": 5, + "rate": "A" + }, + "5o": { + "group": "sb", + "class": 6, + "rating": "B", + "cost": 1390275, + "mass": 64, + "power": 2.12, + "capacity": 6, + "rate": "B" + }, + "5p": { + "group": "sb", + "class": 6, + "rating": "C", + "cost": 556110, + "mass": 40, + "power": 1.77, + "capacity": 5, + "rate": "C" + }, + "5q": { + "group": "sb", + "class": 6, + "rating": "D", + "cost": 222444, + "mass": 16, + "power": 1.42, + "capacity": 4, + "rate": "C" + }, + "5r": { + "group": "sb", + "class": 6, + "rating": "E", + "cost": 88978, + "mass": 40, + "power": 1.06, + "capacity": 6, + "rate": "D" + }, + "5s": { + "group": "sb", + "class": 7, + "rating": "A", + "cost": 9731925, + "mass": 80, + "power": 2.9, + "capacity": 5, + "rate": "A" + }, + "5t": { + "group": "sb", + "class": 7, + "rating": "B", + "cost": 3892770, + "mass": 128, + "power": 2.48, + "capacity": 6, + "rate": "B" + }, + "5u": { + "group": "sb", + "class": 7, + "rating": "C", + "cost": 1557108, + "mass": 80, + "power": 2.07, + "capacity": 5, + "rate": "B" + }, + "5v": { + "group": "sb", + "class": 7, + "rating": "D", + "cost": 622843, + "mass": 32, + "power": 1.66, + "capacity": 4, + "rate": "?" + } + } +} \ No newline at end of file diff --git a/data/components/internal/shield_generator.json b/data/components/internal/shield_generator.json new file mode 100644 index 00000000..a5c1e735 --- /dev/null +++ b/data/components/internal/shield_generator.json @@ -0,0 +1,494 @@ +{ + "Shield Generator": { + "40": { + "group": "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 + }, + "41": { + "group": "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 + }, + "42": { + "group": "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 + }, + "43": { + "group": "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 + }, + "44": { + "group": "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 + }, + "45": { + "group": "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 + }, + "46": { + "group": "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 + }, + "47": { + "group": "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 + }, + "48": { + "group": "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 + }, + "49": { + "group": "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 + }, + "3r": { + "group": "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 + }, + "3s": { + "group": "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 + }, + "3t": { + "group": "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 + }, + "3u": { + "group": "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 + }, + "3v": { + "group": "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 + }, + "4a": { + "group": "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 + }, + "4b": { + "group": "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 + }, + "4c": { + "group": "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 + }, + "4d": { + "group": "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 + }, + "4e": { + "group": "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 + }, + "4f": { + "group": "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 + }, + "4g": { + "group": "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 + }, + "4h": { + "group": "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 + }, + "4i": { + "group": "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 + }, + "4j": { + "group": "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 + }, + "4k": { + "group": "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 + }, + "4l": { + "group": "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 + }, + "4m": { + "group": "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 + }, + "4n": { + "group": "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 + }, + "4o": { + "group": "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 + }, + "4p": { + "group": "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 + }, + "4q": { + "group": "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 + }, + "4r": { + "group": "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 + }, + "4s": { + "group": "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 + }, + "4t": { + "group": "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 + } + } +} \ No newline at end of file diff --git a/data/ships/adder.json b/data/ships/adder.json new file mode 100644 index 00000000..95d4852e --- /dev/null +++ b/data/ships/adder.json @@ -0,0 +1,66 @@ +{ + "adder": { + "group": "ex", + "name": "Adder", + "manufacturer": "Zorgon Peterson", + "class": 1, + "cost": 39993, + "speed": 220, + "boost": 320, + "agility": 8, + "shields": 60, + "armour": 90, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 3, + 3, + 3, + 1, + 2, + 3, + 3 + ], + "hardpoints": [ + 2, + 1, + 1, + 0, + 0 + ], + "internal": [ + 3, + 3, + 2, + 2, + 1 + ] + }, + "defaultComponents": { + "common": [ + "3E", + "3E", + "3E", + "1E", + "2E", + "3E", + "3C" + ], + "hardpoints": [ + 0, + 17, + 17, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 35 + } +} \ No newline at end of file diff --git a/data/ships/anaconda.json b/data/ships/anaconda.json new file mode 100644 index 00000000..cc8c99ee --- /dev/null +++ b/data/ships/anaconda.json @@ -0,0 +1,100 @@ +{ + "anaconda": { + "group": "mp", + "name": "Anaconda", + "manufacturer": "Faulcon DeLacy", + "class": 3, + "cost": 141889932, + "speed": 180, + "boost": 240, + "agility": 2, + "shields": 350, + "armour": 525, + "fuelcost": 50, + "componentCapacity": { + "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 + ] + }, + "defaultComponents": { + "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": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 400 + } +} \ No newline at end of file diff --git a/data/ships/asp.json b/data/ships/asp.json new file mode 100644 index 00000000..f8049067 --- /dev/null +++ b/data/ships/asp.json @@ -0,0 +1,80 @@ +{ + "asp": { + "group": "ex", + "name": "Asp", + "manufacturer": "Lakon", + "class": 2, + "cost": 6135658, + "speed": 250, + "boost": 340, + "agility": 6, + "shields": 140, + "armour": 210, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 5, + 5, + 5, + 4, + 4, + 5, + 5 + ], + "hardpoints": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2 + ], + "internal": [ + 6, + 5, + 3, + 3, + 3, + 2, + 2 + ] + }, + "defaultComponents": { + "common": [ + "5E", + "5E", + "5E", + "4E", + "4E", + "5E", + "5C" + ], + "hardpoints": [ + 0, + 0, + 0, + 0, + 17, + 17, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 280 + } +} \ No newline at end of file diff --git a/data/ships/cobra_mk_iii.json b/data/ships/cobra_mk_iii.json new file mode 100644 index 00000000..d03c1d5a --- /dev/null +++ b/data/ships/cobra_mk_iii.json @@ -0,0 +1,70 @@ +{ + "cobra_mk_iii": { + "group": "mp", + "name": "Cobra Mk III", + "manufacturer": "Faulcon DeLacy", + "class": 1, + "cost": 235787, + "speed": 280, + "boost": 400, + "agility": 6, + "shields": 80, + "armour": 120, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 4, + 4, + 4, + 3, + 3, + 3, + 4 + ], + "hardpoints": [ + 2, + 2, + 1, + 1, + 0, + 0 + ], + "internal": [ + 4, + 4, + 4, + 2, + 2, + 2 + ] + }, + "defaultComponents": { + "common": [ + "4E", + "4E", + "4E", + "3E", + "3E", + "3E", + "4C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 180 + } +} \ No newline at end of file diff --git a/data/ships/eagle.json b/data/ships/eagle.json new file mode 100644 index 00000000..465ffa8d --- /dev/null +++ b/data/ships/eagle.json @@ -0,0 +1,60 @@ +{ + "eagle": { + "group": "co", + "name": "Eagle", + "manufacturer": "Core Dynamics", + "class": 1, + "cost": 10446, + "speed": 240, + "boost": 350, + "agility": 10, + "shields": 60, + "armour": 40, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 2, + 3, + 3, + 1, + 2, + 2, + 2 + ], + "hardpoints": [ + 1, + 1, + 1, + 0 + ], + "internal": [ + 3, + 2, + 1 + ] + }, + "defaultComponents": { + "common": [ + "2E", + "3E", + "3E", + "1E", + "2E", + "2E", + "2C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0 + ] + }, + "mass": 50 + } +} \ No newline at end of file diff --git a/data/ships/federal_dropship.json b/data/ships/federal_dropship.json new file mode 100644 index 00000000..287daa5c --- /dev/null +++ b/data/ships/federal_dropship.json @@ -0,0 +1,78 @@ +{ + "federal_dropship": { + "group": "mp", + "name": "Federal Dropship", + "manufacturer": "Core Dynamics", + "class": 2, + "cost": 18969990, + "speed": 180, + "boost": 300, + "agility": 0, + "shields": 200, + "armour": 300, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 6, + 6, + 5, + 5, + 6, + 4, + 4 + ], + "hardpoints": [ + 0, + 0, + 0, + 0, + 2, + 2, + 3, + 2, + 2 + ], + "internal": [ + 6, + 5, + 5, + 4, + 3, + 3, + 2 + ] + }, + "defaultComponents": { + "common": [ + "6E", + "6E", + "5E", + "5E", + "6E", + "4E", + "4C" + ], + "hardpoints": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17, + 17 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 580 + } +} \ No newline at end of file diff --git a/data/ships/fer_de_lance.json b/data/ships/fer_de_lance.json new file mode 100644 index 00000000..6f2828b0 --- /dev/null +++ b/data/ships/fer_de_lance.json @@ -0,0 +1,78 @@ +{ + "fer_de_lance": { + "group": "co", + "name": "Fer-de-Lance", + "manufacturer": "Zorgon Peterson", + "class": 2, + "cost": 51232230, + "speed": 260, + "boost": 350, + "agility": 6, + "shields": 300, + "armour": 225, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 5, + 5, + 4, + 4, + 6, + 4, + 3 + ], + "hardpoints": [ + 4, + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "internal": [ + 5, + 4, + 4, + 2, + 1 + ] + }, + "defaultComponents": { + "common": [ + "5E", + "5E", + "4E", + "4E", + "6E", + "4E", + "3C" + ], + "hardpoints": [ + 0, + 17, + 17, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 250 + } +} \ No newline at end of file diff --git a/data/ships/hauler.json b/data/ships/hauler.json new file mode 100644 index 00000000..c7bc45cc --- /dev/null +++ b/data/ships/hauler.json @@ -0,0 +1,60 @@ +{ + "hauler": { + "group": "fr", + "name": "Hauler", + "manufacturer": "Zorgon Peterson", + "class": 1, + "cost": 29807, + "speed": 200, + "boost": 300, + "agility": 6, + "shields": 50, + "armour": 50, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 2, + 2, + 2, + 1, + 1, + 1, + 2 + ], + "hardpoints": [ + 1, + 0, + 0 + ], + "internal": [ + 3, + 3, + 2, + 1 + ] + }, + "defaultComponents": { + "common": [ + "2E", + "2E", + "2E", + "1E", + "1E", + "1E", + "2C" + ], + "hardpoints": [ + 17, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0 + ] + }, + "mass": 14 + } +} \ No newline at end of file diff --git a/data/ships/imperial_clipper.json b/data/ships/imperial_clipper.json new file mode 100644 index 00000000..d3fd3f7a --- /dev/null +++ b/data/ships/imperial_clipper.json @@ -0,0 +1,78 @@ +{ + "imperial_clipper": { + "group": "mp", + "name": "Imperial Clipper", + "manufacturer": "Gutamaya", + "class": 3, + "cost": 21077784, + "speed": 300, + "boost": 380, + "agility": 2, + "shields": 180, + "armour": 270, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 6, + 6, + 5, + 5, + 6, + 5, + 4 + ], + "hardpoints": [ + 3, + 3, + 2, + 2, + 0, + 0, + 0, + 0 + ], + "internal": [ + 7, + 6, + 4, + 4, + 3, + 3, + 2, + 2 + ] + }, + "defaultComponents": { + "common": [ + "6E", + "6E", + "5E", + "5E", + "6E", + "5E", + "4C" + ], + "hardpoints": [ + 0, + 0, + 17, + 17, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 400 + } +} \ No newline at end of file diff --git a/data/ships/orca.json b/data/ships/orca.json new file mode 100644 index 00000000..1606e61b --- /dev/null +++ b/data/ships/orca.json @@ -0,0 +1,76 @@ +{ + "orca": { + "group": "pa", + "name": "Orca", + "manufacturer": "Saud Kruger", + "class": 3, + "cost": 47798079, + "speed": 300, + "boost": 380, + "agility": 2, + "shields": 220, + "armour": 220, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 5, + 6, + 5, + 6, + 5, + 4, + 4 + ], + "hardpoints": [ + 3, + 2, + 2, + 0, + 0, + 0, + 0 + ], + "internal": [ + 6, + 5, + 5, + 5, + 4, + 3, + 2, + 2 + ] + }, + "defaultComponents": { + "common": [ + "5E", + "6E", + "5E", + "6E", + "5E", + "4E", + "4C" + ], + "hardpoints": [ + 0, + 17, + 17, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 580 + } +} \ No newline at end of file diff --git a/data/ships/python.json b/data/ships/python.json new file mode 100644 index 00000000..9fb78c0d --- /dev/null +++ b/data/ships/python.json @@ -0,0 +1,82 @@ +{ + "python": { + "group": "mp", + "name": "Python", + "manufacturer": "Faulcon DeLacy", + "class": 2, + "cost": 55171395, + "speed": 230, + "boost": 280, + "agility": 6, + "shields": 260, + "armour": 260, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 7, + 6, + 5, + 4, + 7, + 6, + 5 + ], + "hardpoints": [ + 3, + 3, + 3, + 2, + 2, + 0, + 0, + 0, + 0 + ], + "internal": [ + 6, + 6, + 6, + 5, + 5, + 4, + 3, + 3, + 2 + ] + }, + "defaultComponents": { + "common": [ + "7E", + "6E", + "5E", + "4E", + "7E", + "6E", + "5C" + ], + "hardpoints": [ + 0, + 0, + 0, + 17, + 17, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 350 + } +} \ No newline at end of file diff --git a/data/ships/sidewinder.json b/data/ships/sidewinder.json new file mode 100644 index 00000000..bd3e18af --- /dev/null +++ b/data/ships/sidewinder.json @@ -0,0 +1,59 @@ +{ + "sidewinder": { + "group": "mp", + "name": "Sidewinder", + "class": 1, + "cost": 12887, + "speed": 220, + "boost": 320, + "agility": 8, + "shields": 40, + "armour": 60, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 2, + 2, + 2, + 1, + 1, + 1, + 1 + ], + "hardpoints": [ + 1, + 1, + 0, + 0 + ], + "internal": [ + 2, + 2, + 1 + ] + }, + "defaultComponents": { + "common": [ + "2E", + "2E", + "2E", + "1E", + "1E", + "1E", + "1C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0 + ] + }, + "mass": 25 + } +} \ No newline at end of file diff --git a/data/ships/type_6_transporter.json b/data/ships/type_6_transporter.json new file mode 100644 index 00000000..b94793c1 --- /dev/null +++ b/data/ships/type_6_transporter.json @@ -0,0 +1,70 @@ +{ + "type_6_transporter": { + "group": "fr", + "name": "Type-6 Transporter", + "manufacturer": "Lakon", + "class": 2, + "cost": 865782, + "speed": 220, + "boost": 350, + "agility": 3, + "shields": 90, + "armour": 90, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 3, + 4, + 4, + 2, + 3, + 2, + 4 + ], + "hardpoints": [ + 1, + 1, + 0, + 0, + 0 + ], + "internal": [ + 5, + 5, + 4, + 4, + 3, + 2, + 2 + ] + }, + "defaultComponents": { + "common": [ + "3E", + "4E", + "4E", + "2E", + "3E", + "2E", + "4C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 155 + } +} \ No newline at end of file diff --git a/data/ships/type_7_transport.json b/data/ships/type_7_transport.json new file mode 100644 index 00000000..5fe03f1a --- /dev/null +++ b/data/ships/type_7_transport.json @@ -0,0 +1,78 @@ +{ + "type_7_transport": { + "group": "fr", + "name": "Type-7 Transport", + "manufacturer": "Lakon", + "class": 3, + "cost": 16881511, + "speed": 180, + "boost": 300, + "agility": 2, + "shields": 120, + "armour": 120, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 4, + 5, + 5, + 4, + 3, + 3, + 5 + ], + "hardpoints": [ + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0 + ], + "internal": [ + 6, + 6, + 5, + 5, + 4, + 4, + 2, + 2 + ] + }, + "defaultComponents": { + "common": [ + "4E", + "5E", + "5E", + "4E", + "3E", + "3E", + "5C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 420 + } +} \ No newline at end of file diff --git a/data/ships/type_9_heavy.json b/data/ships/type_9_heavy.json new file mode 100644 index 00000000..5585a20c --- /dev/null +++ b/data/ships/type_9_heavy.json @@ -0,0 +1,81 @@ +{ + "type_9_heavy": { + "group": "fr", + "name": "Type-9 Heavy", + "manufacturer": "Lakon", + "class": 3, + "cost": 73255168, + "speed": 130, + "boost": 200, + "agility": 0, + "shields": 240, + "armour": 240, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 6, + 7, + 6, + 5, + 6, + 4, + 6 + ], + "hardpoints": [ + 2, + 2, + 2, + 1, + 1, + 0, + 0, + 0, + 0 + ], + "internal": [ + 7, + 6, + 5, + 4, + 4, + 3, + 3, + 2 + ] + }, + "defaultComponents": { + "common": [ + "6E", + "7E", + "6E", + "5E", + "6E", + "4E", + "6C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 1000 + } +} \ No newline at end of file diff --git a/data/ships/viper.json b/data/ships/viper.json new file mode 100644 index 00000000..ffa5eda3 --- /dev/null +++ b/data/ships/viper.json @@ -0,0 +1,66 @@ +{ + "viper": { + "group": "co", + "name": "Viper", + "manufacturer": "Faulcon DeLacy", + "class": 1, + "cost": 95893, + "speed": 320, + "boost": 400, + "agility": 6, + "shields": 105, + "armour": 70, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 3, + 3, + 3, + 2, + 3, + 3, + 2 + ], + "hardpoints": [ + 2, + 2, + 1, + 1, + 0, + 0 + ], + "internal": [ + 3, + 3, + 2, + 1 + ] + }, + "defaultComponents": { + "common": [ + "3E", + "3E", + "3E", + "2E", + "3E", + "3E", + "2C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0 + ] + }, + "mass": 60 + } +} \ No newline at end of file diff --git a/data/ships/vulture.json b/data/ships/vulture.json new file mode 100644 index 00000000..10b59c4a --- /dev/null +++ b/data/ships/vulture.json @@ -0,0 +1,68 @@ +{ + "vulture": { + "group": "co", + "name": "Vulture", + "manufacturer": "Core Dynamics", + "class": 1, + "cost": 4689629, + "speed": 210, + "boost": 340, + "agility": 9, + "shields": 240, + "armour": 160, + "fuelcost": 50, + "componentCapacity": { + "common": [ + 4, + 5, + 4, + 3, + 5, + 4, + 3 + ], + "hardpoints": [ + 3, + 3, + 0, + 0, + 0, + 0 + ], + "internal": [ + 5, + 4, + 2, + 1, + 1 + ] + }, + "defaultComponents": { + "common": [ + "4E", + "5E", + "4E", + "3E", + "5E", + "4E", + "3C" + ], + "hardpoints": [ + 17, + 17, + 0, + 0, + 0, + 0 + ], + "internal": [ + 0, + 0, + 0, + 0, + 0 + ] + }, + "mass": 230 + } +} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 00000000..4ccdf3ee --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,129 @@ +var gulp = require('gulp'), + less = require('gulp-less'), + jshint = require('gulp-jshint'), + minifyCSS = require('gulp-minify-css'), + concat = require('gulp-concat'), + uglify = require('gulp-uglify'), + sourcemaps = require('gulp-sourcemaps'), + templateCache = require('gulp-angular-templatecache'), + htmlmin = require('gulp-htmlmin'), + template = require('gulp-template'), + mainBowerFiles = require('main-bower-files'), + del = require('del'), + runSequence = require('run-sequence'), + exec = require('child_process').exec + pkg = require('./package.json'); + +gulp.task('less', function() { + return gulp.src('app/less/app.less') + .pipe(less({paths: ['less/app.less']})) + .pipe(minifyCSS()) + .pipe(gulp.dest('build')); +}); + +gulp.task('lint', function() { + return gulp.src('app/js/**/*.js') + .pipe(jshint()) + .pipe(jshint.reporter('default')); +}); + +gulp.task('bower', function(){ + return gulp.src(mainBowerFiles()) + .pipe(uglify({mangle: false}).on('error',function(e){ + console.log('Bower File:', e.fileName); + console.log('Line:', e.lineNumber); + console.log('Message:', e.message); + })) + .pipe(concat('lib.js')) + .pipe(gulp.dest('build')); +}); + +gulp.task('html2js', function() { + return gulp.src('app/views/**/*.html') + .pipe(htmlmin({ + 'collapseBooleanAttributes': true, + 'collapseWhitespace': true, + 'removeAttributeQuotes': true, + 'removeComments': true, + 'removeEmptyAttributes': true, + 'removeRedundantAttributes': true, + 'removeScriptTypeAttributes': true, + 'removeStyleLinkTypeAttributes': true + }).on('error',function(e){ + console.log('File:', e.fileName); + console.log('Message:',e.message); + })) + .pipe(templateCache({ + 'module': 'app.templates', + 'standalone': true, + 'root': 'views', + 'filename': 'template_cache.js' + })) + .pipe(gulp.dest('app/js')) +}); + +gulp.task('jsonToDB', function(cb) { + exec('node scripts/json-to-db.js', cb); +}); + +gulp.task('js', function() { + return gulp.src([ + 'app/js/db.js', + 'app/js/**/module-*.js', + 'app/js/template_cache.js', + 'app/js/app.js', + 'app/js/**/*.js' + ]) + .pipe(sourcemaps.init()) + .pipe(uglify({mangle: false}).on('error',function(e){ + console.log('File:', e.fileName); + console.log('Line:', e.lineNumber); + console.log('Message:', e.message); + })) + .pipe(concat('app.js')) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('build')); +}); + +gulp.task('copy', function() { + return gulp.src(['app/images/**','app/fonts/**'], {base: 'app/'}) + .pipe(gulp.dest('build')); +}); + +gulp.task('generateIndexHTML', function() { + return gulp.src('app/index.html') + .pipe(template({ + version: pkg.version, + date : (new Date()).toLocaleDateString() + })) + .pipe(gulp.dest('build')); +}); + +gulp.task('serve', function(cb) { + exec('nginx -p $(pwd) -c nginx.conf', function (err, stdout, stderr) { + if (stderr) { + console.warn(stderr); + console.warn('Is NGINX already running?\n'); + } + cb(); + }); +}); + +gulp.task('serve-stop', function(cb) { + exec('kill -QUIT $(cat nginx.pid)', function (err, stdout, stderr) { + if (stderr) console.log(stderr); else cb(err); + }); +}); + +gulp.task('watch', function() { + gulp.watch('app/index.html', ['generateIndexHTML']); + gulp.watch(['app/images/**','app/fonts/**'], ['copy']); + gulp.watch('app/less/*.less', ['less']); + gulp.watch('app/views/**/*', ['html2js']); + gulp.watch('app/js/**/*.js', ['js']); +}); + +gulp.task('clean', function (done) { del(['build'], done); }); +gulp.task('build', function (done) { runSequence('clean', ['html2js','jsonToDB'], ['generateIndexHTML','bower','js','less','copy'], done); }); +gulp.task('dev', function (done) { runSequence('build', 'serve','watch', done); }); + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 00000000..6a035bb1 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,46 @@ +worker_processes 2; +error_log ./nginx.error.log; +worker_rlimit_nofile 8192; +pid nginx.pid; + +events { + worker_connections 1024; + multi_accept on; +} + +http { + + access_log off; + + types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + application/x-javascript js; + text/plain txt; + image/png png; + image/svg+xml svg; + image/x-icon ico; + application/pdf pdf; + } + + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; + + server { + listen 3300; + server_name localhost; + + location / { + root ./build/; + index index.html index.htm; + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..5646e464 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "ed_shipyard", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "https://github.com/cmmcleod/ed-shipyard" + }, + "private": true, + "dependencies": {}, + "devDependencies": { + "async": "^0.9.0", + "del": "^1.1.1", + "gulp": "^3.8.11", + "gulp-angular-templatecache": "^1.6.0", + "gulp-concat": "^2.5.2", + "gulp-htmlmin": "^1.1.1", + "gulp-jshint": "^1.10.0", + "gulp-less": "^3.0.2", + "gulp-minify-css": "^1.0.0", + "gulp-sourcemaps": "^1.5.1", + "gulp-template": "^3.0.0", + "gulp-uglify": "^1.2.0", + "json-concat": "0.0.0", + "main-bower-files": "^2.6.2", + "run-sequence": "^1.0.2", + "uglify-js": "^2.4.19" + } +} diff --git a/scripts/json-to-db.js b/scripts/json-to-db.js new file mode 100644 index 00000000..fddb0e5e --- /dev/null +++ b/scripts/json-to-db.js @@ -0,0 +1,54 @@ +var fs = require('fs'); +var UglifyJS = require('uglify-js'); +var jsonConcat = require('json-concat'); +var async = require('async'); + +var db_filename = './app/js/db.js'; + +async.parallel([ + function(cb) { jsonConcat({ dest: null, src: './data/ships' }, done.bind(cb)); }, + function(cb) { + var common = [ + JSON.parse(fs.readFileSync('./data/components/common/power_plant.json', 'utf8')), + JSON.parse(fs.readFileSync('./data/components/common/thrusters.json', 'utf8')), + JSON.parse(fs.readFileSync('./data/components/common/frame_shift_drive.json', 'utf8')), + JSON.parse(fs.readFileSync('./data/components/common/life_support.json', 'utf8')), + JSON.parse(fs.readFileSync('./data/components/common/power_distributor.json', 'utf8')), + JSON.parse(fs.readFileSync('./data/components/common/sensors.json', 'utf8')), + JSON.parse(fs.readFileSync('./data/components/common/fuel_tank.json', 'utf8')) + ]; + cb(null, common); + }, + function(cb) { jsonConcat({ dest: null, src: './data/components/hardpoints' }, done.bind(cb)); }, + function(cb) { jsonConcat({ dest: null, src: './data/components/internal' }, done.bind(cb)); }, + function(cb) { jsonConcat({ dest: null, src: ['./data/components/bulkheads.json'] }, done.bind(cb)); } + ], writeDB); + +function done(err, json) { this(err,json); } + +function writeDB(err, arr) { + var db = { + ships: arr[0], + components: { + common: arr[1], + hardpoints: arr[2], + internal: arr[3], + bulkheads: arr[4] + } + }; + + var ast = UglifyJS.parse('var DB = ' + JSON.stringify(db)); + var code = ast.print_to_string({beautify: true, indent_level: 2}); + + fs.open(db_filename, 'w', function() { + fs.writeFile(db_filename, code, function(err) { + }); + }); + + fs.open('./build/db.json', 'w', function() { + fs.writeFile('./build/db.json', JSON.stringify(db), function(err) { + }); + }); + +} +