From 680ebac9198421487015c05f9e5c89e2d31ab789 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Wed, 27 May 2026 23:51:16 +0200 Subject: [PATCH 1/9] =?UTF-8?q?feat(ui):=20F8-12=20=E2=80=94=20map=20polis?= =?UTF-8?q?h=20(zoom=20invariance,=20labels,=20selection,=20soft=20radius)?= =?UTF-8?q?=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Honest pixel-space sizing for `pointRadiusPx` / `strokeWidthPx`: the renderer divides by the current camera scale on every `viewport.zoomed` so thin lines / small markers stay the same on-screen size at any zoom. * Known-size planets switch to `pointRadiusWorld`, softened against the reference scale by `PLANET_SIZE_ZOOM_ALPHA = 0.33`; unidentified planets pin to a 3-px disc. * New planet label layer renders a two-line `name / #N` legend under each planet (`#N` only for unidentified or when the new `planetNames` toggle is off). Selection now paints an inverse-fill frame around the selected planet's label plus an outline on the disc; the old selection-ring primitive is retired. * Bombing markers swap the separate CirclePrim for a planet-outline overlay (damaged / wiped colour); the report deep-link moves to a "view bombing report" link in the planet inspector. * Docs + tests follow: `renderer.md` reflects the new sizing contract + label / outline layers, vitest covers the sizing math, label formatting, and the new toggle, and the map-toggles e2e adds a persistence case for `planetNames`. Co-Authored-By: Claude Opus 4.7 --- ui/docs/renderer.md | 53 ++- .../src/lib/active-view/map-toggles.svelte | 9 + ui/frontend/src/lib/active-view/map.svelte | 107 +++-- ui/frontend/src/lib/game-state.svelte.ts | 9 + ui/frontend/src/lib/i18n/locales/en.ts | 3 + ui/frontend/src/lib/i18n/locales/ru.ts | 3 + .../src/lib/inspectors/planet-sheet.svelte | 4 + ui/frontend/src/lib/inspectors/planet.svelte | 52 +++ ui/frontend/src/lib/report-nav.ts | 30 ++ .../src/lib/sidebar/inspector-tab.svelte | 7 + ui/frontend/src/map/battle-markers.ts | 80 +--- ui/frontend/src/map/hit-test.ts | 29 +- ui/frontend/src/map/index.ts | 3 + ui/frontend/src/map/labels.ts | 56 +++ ui/frontend/src/map/pick-mode.ts | 25 +- ui/frontend/src/map/render.ts | 428 +++++++++++++++++- ui/frontend/src/map/selection-ring.ts | 48 -- ui/frontend/src/map/state-binding.ts | 61 ++- ui/frontend/src/map/visibility.ts | 2 - ui/frontend/src/map/world.ts | 112 ++++- ui/frontend/tests/battle-markers.test.ts | 24 +- ui/frontend/tests/e2e/map-toggles.spec.ts | 34 +- ui/frontend/tests/map-display-sizing.test.ts | 83 ++++ ui/frontend/tests/map-hit-test.test.ts | 62 ++- ui/frontend/tests/map-labels.test.ts | 147 ++++++ .../tests/map-toggles-component.test.ts | 12 + ui/frontend/tests/map-toggles-state.test.ts | 3 + ui/frontend/tests/selection-ring.test.ts | 40 -- .../tests/state-binding-cascade.test.ts | 16 +- ui/frontend/tests/visibility-helpers.test.ts | 20 +- 30 files changed, 1240 insertions(+), 322 deletions(-) create mode 100644 ui/frontend/src/lib/report-nav.ts create mode 100644 ui/frontend/src/map/labels.ts delete mode 100644 ui/frontend/src/map/selection-ring.ts create mode 100644 ui/frontend/tests/map-display-sizing.test.ts create mode 100644 ui/frontend/tests/map-labels.test.ts delete mode 100644 ui/frontend/tests/selection-ring.test.ts diff --git a/ui/docs/renderer.md b/ui/docs/renderer.md index 78c011c..2417b14 100644 --- a/ui/docs/renderer.md +++ b/ui/docs/renderer.md @@ -66,13 +66,48 @@ interface LinePrim extends PrimitiveBase { kind: 'line'; `radius` is in world units. `style.strokeWidthPx` and `style.pointRadiusPx` are in screen pixels and stay constant under -zoom (Pixi's stroke width is in pixel space when the parent -container is scaled). +zoom — F8-12 / #28 wired the renderer to repaint every affected +`Graphics` on every `viewport.zoomed` event with +`size_in_world = size_in_pixels / cameraScale`. `displayStrokeWidthWorld` +and `displayPointRadiusWorld` (in `src/map/world.ts`) compute those +world-space values; the hit-test reads the same helpers so the click +zone always matches the visible footprint. + +`style.pointRadiusWorld` is the alternative sizing rule for planet +discs with a known `size`: the renderer treats the base radius as +world units and softens its growth with the camera scale through +`PLANET_SIZE_ZOOM_ALPHA` (0.33). At `scale = scaleRef` (the +"whole world fits the viewport" zoom) the visible radius equals the +base radius; zooming in grows it sub-linearly so on-screen pixel +size scales as `scale^α`. Setting both `pointRadiusWorld` and +`pointRadiusPx` ignores the pixel-space field. Default hit slop in screen pixels: point=8, circle=6, line=6. These are touch-ergonomic defaults; per-primitive `hitSlopPx > 0` overrides them. +### Planet label layer + +Independent of the primitive stream, the renderer mounts a per-copy +`labelLayer` (F8-12 / #29). `RendererHandle.setPlanetLabels(labels, +selectedPlanetId)` replaces the dataset; the renderer keeps each +label container at `(planet.x, planet.y + visibleRadius + gapPx)` +and at `scale = 1 / cameraScale` so the text reads at the same +pixel size regardless of zoom. The selected planet gets an +inverse-fill frame around its label, replacing the retired +`selection-ring` primitive (F8-12 / #30). + +### Planet outline overlay + +`RendererHandle.setPlanetOutlines(outlines)` paints a thin stroke +around the visible disc of any planet number listed in the spec. +The map view feeds it the union of bombings (damaged / wiped accent +colour, gated by the `bombingMarkers` toggle) and the current +selection (`selectionAccent` colour); selection wins on the same +planet. The radius follows `displayPointRadiusWorld`, so the +outline hugs the disc through every zoom step — softened or +pixel-space alike. + ## Theme A `Theme` is the renderer's full colour palette: the canvas background @@ -127,11 +162,15 @@ target. Per-primitive distance: -- **Point**: `distSq ≤ (pointRadiusPx + slopWorld)²`. The visible - disc is part of the click target — a click on any pixel of the - rendered planet registers as a hit, with `slopWorld` adding a - small ergonomic margin on top. `pointRadiusPx` defaults to - `DEFAULT_POINT_RADIUS_PX = 3` when unset. +- **Point**: `distSq ≤ (visibleRadiusWorld + slopWorld)²`. The + visible disc is part of the click target — a click on any pixel of + the rendered planet registers as a hit, with `slopWorld` adding a + small ergonomic margin on top. `visibleRadiusWorld` comes from + `displayPointRadiusWorld` (F8-12 / #28 + #31): pixel-space + `pointRadiusPx / scale` for unidentified planets and most ship + groups, softened-by-zoom `pointRadiusWorld * (scale / scaleRef)^(α-1)` + for planets with a known `size`. `pointRadiusPx` defaults to + `DEFAULT_POINT_RADIUS_PX = 3` when neither field is set. - **Filled circle**: `distSq ≤ (radius + slopWorld)²` where `radius` is in world units. The circle counts as filled when `style.fillColor` is set and `style.fillAlpha > 0`. diff --git a/ui/frontend/src/lib/active-view/map-toggles.svelte b/ui/frontend/src/lib/active-view/map-toggles.svelte index 9b74f0c..c5fccdf 100644 --- a/ui/frontend/src/lib/active-view/map-toggles.svelte +++ b/ui/frontend/src/lib/active-view/map-toggles.svelte @@ -177,6 +177,15 @@ bottom-tabs bar. /> {i18n.t("game.map.toggles.unreachable_planets")} +
{i18n.t("game.map.toggles.section.view")} diff --git a/ui/frontend/src/lib/active-view/map.svelte b/ui/frontend/src/lib/active-view/map.svelte index c965df2..8a321b4 100644 --- a/ui/frontend/src/lib/active-view/map.svelte +++ b/ui/frontend/src/lib/active-view/map.svelte @@ -26,12 +26,13 @@ preference the store already manages. import { createRenderer, minScaleNoWrap, + type PlanetOutlineSpec, type RendererHandle, } from "../../map/index"; import { buildCargoRouteLines } from "../../map/cargo-routes"; + import { buildPlanetLabels } from "../../map/labels"; import { buildPendingSendLines } from "../../map/pending-send-routes"; import { computeReachCircles } from "../../map/reach-circles"; - import { computeSelectionRing } from "../../map/selection-ring"; import { reachStore } from "$lib/calculator/reach.svelte"; import { theme as themeStore } from "$lib/theme/theme.svelte"; import { @@ -216,6 +217,7 @@ preference the store already manages. void toggles.cargoRoutes; void toggles.battleMarkers; void toggles.bombingMarkers; + void toggles.planetNames; void toggles.visibleHyperspace; // Subscribe to the calculator's published reach so the rings @@ -253,11 +255,9 @@ preference the store already manages. reachOrigin === null ? "" : `${reachOrigin.x},${reachOrigin.y},${reachStore.speedPerTurn}`; - const selectedPlanetId = - selection?.selected?.kind === "planet" ? selection.selected.id : null; const extrasFingerprint = `cr=${toggles.cargoRoutes ? "1" : "0"}|hp=${hiddenPlanetFingerprint}|` + - `reach=${reachFingerprint}|sel=${selectedPlanetId ?? ""}|` + + `reach=${reachFingerprint}|` + computeRoutesFingerprint(report.routes) + "|" + computePendingSendFingerprint(draftCommands, draftStatuses); @@ -363,19 +363,7 @@ preference the store already manages. palette, ) : []; - const selectedPlanetId = - selection?.selected?.kind === "planet" ? selection.selected.id : null; - const selectionRing = computeSelectionRing( - report.planets, - selectedPlanetId, - palette, - ); - return [ - ...cargo, - ...pending, - ...reach, - ...(selectionRing === null ? [] : [selectionRing]), - ]; + return [...cargo, ...pending, ...reach]; } function applyVisibilityState( @@ -394,6 +382,55 @@ preference the store already manages. const fogCircles = computeFogCircles(report, toggles); currentFogCircles = fogCircles; handle.setVisibilityFog(fogCircles); + applyPlanetLabels(report, toggles); + } + + function applyPlanetLabels( + report: NonNullable, + toggles: MapToggles, + ): void { + if (handle === null) return; + const labels = buildPlanetLabels(report, { + showNames: toggles.planetNames, + }); + const selectedPlanetId = + selection?.selected?.kind === "planet" ? selection.selected.id : null; + handle.setPlanetLabels(labels, selectedPlanetId); + applyPlanetOutlines(report, toggles, selectedPlanetId); + } + + function applyPlanetOutlines( + report: NonNullable, + toggles: MapToggles, + selectedPlanetId: number | null, + ): void { + if (handle === null) return; + const palette = mountedPalette ?? DARK_THEME; + const outlines: PlanetOutlineSpec[] = []; + // Bombing outline (F8-12 / #30): every bombed planet gets the + // damaged / wiped accent painted around its disc. The + // `bombingMarkers` toggle hides the visual cue while leaving + // the data intact. + if (toggles.bombingMarkers) { + for (const bombing of report.bombings) { + if (bombing.planetNumber === selectedPlanetId) continue; + outlines.push({ + planetNumber: bombing.planetNumber, + color: bombing.wiped + ? palette.bombingWiped + : palette.bombingDamaged, + }); + } + } + // Selection outline overrides bombing on the same planet so the + // player can always tell which one is currently focused. + if (selectedPlanetId !== null) { + outlines.push({ + planetNumber: selectedPlanetId, + color: palette.selectionAccent, + }); + } + handle.setPlanetOutlines(outlines); } async function runSerializedMount( @@ -718,30 +755,9 @@ preference the store already manages. // current selection. The Phase 19 ship-group surface dispatches // through the same `hit-test` plumbing — the hitLookup map keyed // by primitive id resolves a hit back to either a planet or a - // ship-group selection variant. - // scrollToBombingRow waits for the report's bombing row for the - // given planet to mount, then scrolls it into view. The map context - // menu switches to the report view through a store mutation, so the - // section renders on a later frame; a short bounded poll bridges - // that gap without coupling the map to the report's render timing. - function scrollToBombingRow(planet: number): void { - if (typeof document === "undefined") return; - let attempts = 60; - const tick = (): void => { - const row = document.querySelector( - `[data-testid="report-bombing-row"][data-planet="${planet}"]`, - ); - if (row instanceof HTMLElement) { - row.scrollIntoView({ behavior: "smooth", block: "center" }); - return; - } - attempts -= 1; - if (attempts <= 0) return; - requestAnimationFrame(tick); - }; - requestAnimationFrame(tick); - } - + // ship-group selection variant. F8-12 / #30 retired the separate + // bombing-ring click; bombing → report navigation now starts in + // the inspector via `scrollToBombingRow` (`lib/report-nav.ts`). function handleMapClick(cursorPx: { x: number; y: number }): void { if (handle === null || store?.report === undefined || store.report === null) { return; @@ -768,15 +784,6 @@ preference the store already manages. }); break; } - case "bombing": { - activeView.select("report"); - // The report sections render reactively after the view - // switches above, so there is no navigation promise to - // await; poll a bounded number of animation frames for - // the bombing row, then scroll it into view. - scrollToBombingRow(target.planet); - break; - } } } diff --git a/ui/frontend/src/lib/game-state.svelte.ts b/ui/frontend/src/lib/game-state.svelte.ts index 5ac54e7..605cb97 100644 --- a/ui/frontend/src/lib/game-state.svelte.ts +++ b/ui/frontend/src/lib/game-state.svelte.ts @@ -57,6 +57,14 @@ export interface MapToggles { cargoRoutes: boolean; battleMarkers: boolean; bombingMarkers: boolean; + /** + * planetNames toggles the on-map two-line label drawn under each + * planet (F8-12 / issue #55, п.29). When ON, the first line shows + * the planet name (when known) and the second line shows `#N`. + * When OFF, the name line is suppressed for every planet — only + * `#N` remains. Default ON. + */ + planetNames: boolean; /** * visibleHyperspace toggles the foggy overlay that darkens the * world OUTSIDE the union of `VisibilityDistance` circles around @@ -78,6 +86,7 @@ export const DEFAULT_MAP_TOGGLES: MapToggles = { cargoRoutes: true, battleMarkers: true, bombingMarkers: true, + planetNames: true, visibleHyperspace: true, }; diff --git a/ui/frontend/src/lib/i18n/locales/en.ts b/ui/frontend/src/lib/i18n/locales/en.ts index 1f33073..cf01635 100644 --- a/ui/frontend/src/lib/i18n/locales/en.ts +++ b/ui/frontend/src/lib/i18n/locales/en.ts @@ -175,6 +175,7 @@ const en = { "game.map.toggles.uninhabited_planets": "uninhabited planets", "game.map.toggles.unidentified_planets": "unidentified planets", "game.map.toggles.unreachable_planets": "show unreachable planets", + "game.map.toggles.planet_names": "planet names", "game.map.toggles.visible_hyperspace": "visible hyperspace", "game.view.table": "table", "game.view.table.planets": "planets", @@ -279,6 +280,8 @@ const en = { "game.inspector.planet.field.free_industry": "free production", "game.inspector.planet.production_none": "none", "game.inspector.planet.unidentified_no_data": "no data — only the location is known", + "game.inspector.planet.view_bombing": "view bombing report", + "game.inspector.planet.view_bombing_wiped": "view bombing report (wiped)", "game.inspector.sheet_close": "close", "game.inspector.planet.action.rename": "rename", "game.inspector.planet.rename.title": "rename planet", diff --git a/ui/frontend/src/lib/i18n/locales/ru.ts b/ui/frontend/src/lib/i18n/locales/ru.ts index d4c1ce9..15994ff 100644 --- a/ui/frontend/src/lib/i18n/locales/ru.ts +++ b/ui/frontend/src/lib/i18n/locales/ru.ts @@ -176,6 +176,7 @@ const ru: Record = { "game.map.toggles.uninhabited_planets": "необитаемые планеты", "game.map.toggles.unidentified_planets": "неопознанные планеты", "game.map.toggles.unreachable_planets": "показывать недостижимые планеты", + "game.map.toggles.planet_names": "имена планет", "game.map.toggles.visible_hyperspace": "видимое гиперпространство", "game.view.table": "таблица", "game.view.table.planets": "планеты", @@ -280,6 +281,8 @@ const ru: Record = { "game.inspector.planet.field.free_industry": "свободные мощности", "game.inspector.planet.production_none": "не задано", "game.inspector.planet.unidentified_no_data": "нет данных — известно только местоположение", + "game.inspector.planet.view_bombing": "открыть отчёт о бомбардировке", + "game.inspector.planet.view_bombing_wiped": "открыть отчёт о бомбардировке (стёрта)", "game.inspector.sheet_close": "закрыть", "game.inspector.planet.action.rename": "переименовать", "game.inspector.planet.rename.title": "переименование планеты", diff --git a/ui/frontend/src/lib/inspectors/planet-sheet.svelte b/ui/frontend/src/lib/inspectors/planet-sheet.svelte index eba8899..65d0f9b 100644 --- a/ui/frontend/src/lib/inspectors/planet-sheet.svelte +++ b/ui/frontend/src/lib/inspectors/planet-sheet.svelte @@ -12,6 +12,7 @@ dismiss from the IA section §6 are deferred to a later polish pass. -->
@@ -124,6 +130,7 @@ from the Phase 10 stub. {localShipGroups} {otherShipGroups} {localRace} + bombing={selectedPlanetBombing} /> {:else if selectedShipGroup !== null} 0; + out.push({ + planetNumber: p.number, + x: p.x, + y: p.y, + name: named ? p.name : null, + numberLabel: `#${p.number}`, + }); + } + return out; +} diff --git a/ui/frontend/src/map/pick-mode.ts b/ui/frontend/src/map/pick-mode.ts index 405e109..6f22c7b 100644 --- a/ui/frontend/src/map/pick-mode.ts +++ b/ui/frontend/src/map/pick-mode.ts @@ -12,7 +12,11 @@ // booting a Pixi `Application`. import { torusShortestDelta } from "./math"; -import { DEFAULT_POINT_RADIUS_PX, type PointPrim, type PrimitiveID } from "./world"; +import { + displayPointRadiusWorld, + type PointPrim, + type PrimitiveID, +} from "./world"; /** * PickModeOptions configures a pick-mode session. The caller is @@ -110,11 +114,15 @@ export function computePickOverlay( pointPrimitivesById: ReadonlyMap, allPrimitiveIds: Iterable, world: { width: number; height: number } | null = null, + cameraScale: number = 1, + scaleRef: number = 1, ): PickOverlaySpec { const sourcePrim = pointPrimitivesById.get(options.sourcePrimitiveId); - const sourceRadius = - (sourcePrim?.style.pointRadiusPx ?? DEFAULT_POINT_RADIUS_PX) + - ANCHOR_PADDING_WORLD; + const sourceVisibleRadius = + sourcePrim === undefined + ? 0 + : displayPointRadiusWorld(sourcePrim.style, cameraScale, scaleRef); + const sourceRadius = sourceVisibleRadius + ANCHOR_PADDING_WORLD; const dimmed = new Set(); for (const id of allPrimitiveIds) { @@ -160,12 +168,15 @@ export function computePickOverlay( ) { const target = pointPrimitivesById.get(hoveredId); if (target !== undefined) { + const targetRadius = displayPointRadiusWorld( + target.style, + cameraScale, + scaleRef, + ); hoverOutline = { x: target.x, y: target.y, - radius: - (target.style.pointRadiusPx ?? DEFAULT_POINT_RADIUS_PX) + - HOVER_PADDING_WORLD, + radius: targetRadius + HOVER_PADDING_WORLD, }; } } diff --git a/ui/frontend/src/map/render.ts b/ui/frontend/src/map/render.ts index a85b4ab..a9d56fd 100644 --- a/ui/frontend/src/map/render.ts +++ b/ui/frontend/src/map/render.ts @@ -21,6 +21,7 @@ import { Application, Container, Graphics, + Text, Ticker, UPDATE_PRIORITY, type Renderer, @@ -29,6 +30,7 @@ import { import { Viewport as PixiViewport } from "pixi-viewport"; import { hitTest, type Hit } from "./hit-test"; +import type { PlanetLabelData } from "./labels"; import { screenToWorld } from "./math"; import { minScaleNoWrap } from "./no-wrap"; import { @@ -40,7 +42,8 @@ import { import { wrapCameraTorus } from "./torus"; import { DARK_THEME, - DEFAULT_POINT_RADIUS_PX, + displayPointRadiusWorld, + displayStrokeWidthWorld, World, type Camera, type CirclePrim, @@ -57,6 +60,20 @@ import { // selection. The map renderer always restricts to webgpu/webgl. export type RendererPreference = "webgpu" | "webgl"; +/** + * PlanetOutlineSpec drives the F8-12 planet-outline overlay (#30): + * a thin stroke painted around the planet disc that signals + * selection / bombing without adding a separate ring marker. The + * renderer hugs the outline to the visible disc on every zoom step, + * so callers do not have to recompute it. + */ +export interface PlanetOutlineSpec { + readonly planetNumber: number; + readonly color: number; + /** Stroke width in screen pixels. Defaults to 1.5 when omitted. */ + readonly widthPx?: number; +} + export interface RendererOptions { canvas: HTMLCanvasElement; world: World; @@ -202,6 +219,28 @@ export interface RendererHandle { setVisibilityFog( circles: ReadonlyArray<{ x: number; y: number; radius: number }>, ): void; + /** + * setPlanetLabels replaces the on-map planet label dataset + * (F8-12 / #29). Each entry is anchored to its planet's + * `(x, y)` and the renderer keeps the labels just below the + * disc, repositioning them on every zoom step so the gap stays + * constant in screen pixels. `selectedPlanetId` (or `null`) + * controls which label gets the inverse-fill selection frame + * (F8-12 / #30); pass `null` when no planet is selected. + */ + setPlanetLabels( + labels: ReadonlyArray, + selectedPlanetId: number | null, + ): void; + /** + * setPlanetOutlines replaces the planet-outline overlay set + * (F8-12 / #30). Each entry paints a thin stroke around the + * planet's visible disc — the radius follows the soft / pixel + * sizing rules so the outline hugs the planet at any zoom. + * Used by both selection (selection accent colour) and bombing + * (damaged / wiped colour) signals. + */ + setPlanetOutlines(outlines: ReadonlyArray): void; resize(widthPx: number, heightPx: number): void; dispose(): void; } @@ -414,14 +453,52 @@ export async function createRenderer(opts: RendererOptions): Promise { + const layer = new Container(); + c.addChild(layer); + return layer; + }); + + // Label layer per copy (F8-12 / #29). Labels render above every + // primitive so the text reads on top of fog / route lines, and the + // per-copy layout mirrors the primitive copies so wrap mode still + // shows the labels in whichever torus tile the user is panned over. + // Each layer holds one `Container` per planet (built lazily by + // `setPlanetLabels`), and we keep the scale + y-offset of those + // containers in lock-step with the camera in `updateLabelTransforms`. + const labelLayers: Container[] = copies.map((c) => { + const layer = new Container(); + c.addChild(layer); + return layer; + }); + // Per-id `Graphics` lookup. Each primitive lives in nine copies // (one per torus tile); pick-mode dims them by id, so the lookup // indexes the full set of `Graphics` instances per primitive id. const primitiveGraphics = new Map(); const pointPrimitivesById = new Map(); + // primitiveById holds the original `Primitive` for every emitted + // id so the F8-12 zoom rebuild can replay the geometry with the + // current camera scale without having to re-derive it from a + // fresh report. The map covers base + extras alike. + const primitiveById = new Map(); const allPrimitiveIds: PrimitiveID[] = []; const extraPrimitiveIds = new Set(); let currentWorld: World = opts.world; + // currentScaleRef mirrors the `minScaleNoWrap` value: the scale at + // which the whole world fits the viewport. The non-linear planet + // size formula softens growth relative to this reference (#31), and + // it changes when the viewport resizes — recomputed in `applyMode` + // and `resize`. + let currentScaleRef = minScaleNoWrap( + { widthPx: widthPx, heightPx: heightPx }, + opts.world, + ); // hiddenIds is the Phase 29 hide-by-id snapshot. Empty by default; // every map-view effect run replaces it with the current // MapToggles-derived set via `setHiddenPrimitiveIds`. Both @@ -436,9 +513,20 @@ export async function createRenderer(opts: RendererOptions): Promise { + g.clear(); + if (prim.kind === "point") { + drawPoint(g, prim, theme, viewport.scaled, currentScaleRef); + } else if (prim.kind === "circle") { + drawCircle(g, prim, theme, viewport.scaled); + } else { + drawLine(g, prim, theme, viewport.scaled); + } + }; const populatePrimitives = (prim: Primitive, isExtra: boolean): void => { for (const c of copies) { - const g = buildGraphics(prim, theme); + const g = new Graphics(); + drawPrimitiveInto(prim, g); c.addChild(g); let list = primitiveGraphics.get(prim.id); if (list === undefined) { @@ -448,6 +536,7 @@ export async function createRenderer(opts: RendererOptions): Promise { + for (const [id, list] of primitiveGraphics) { + const prim = primitiveById.get(id); + if (prim === undefined) continue; + for (const g of list) drawPrimitiveInto(prim, g); + } + }; for (const p of opts.world.primitives) { populatePrimitives(p, false); } + // Planet label state (F8-12 / #29 + #30). The renderer holds one + // `Container` per planet per torus copy; text + selection frame + // live inside that container. `currentLabels` mirrors the dataset + // last passed into `setPlanetLabels` so a zoom-driven transform + // update does not need a fresh report. + interface LabelGfx { + readonly container: Container; + readonly frame: Graphics; + readonly nameText: Text | null; + readonly numberText: Text; + } + const planetLabelInstances = new Map(); + let currentLabels: ReadonlyArray = []; + const LABEL_FONT_SIZE_PX = 11; + const LABEL_LINE_GAP_PX = 0; + const LABEL_FRAME_PADDING_PX = 3; + const LABEL_OFFSET_PX = 4; // gap between planet disc and the label + + const buildLabelText = ( + content: string, + fillColor: number, + ): Text => { + const t = new Text({ + text: content, + style: { + fontFamily: + "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif", + fontSize: LABEL_FONT_SIZE_PX, + fill: fillColor, + align: "center", + }, + }); + t.anchor.set(0.5, 0); + return t; + }; + + const disposeLabelGfx = (entry: LabelGfx): void => { + entry.nameText?.destroy(); + entry.numberText.destroy(); + entry.frame.destroy(); + entry.container.parent?.removeChild(entry.container); + entry.container.destroy(); + }; + + const clearAllLabels = (): void => { + for (const list of planetLabelInstances.values()) { + for (const entry of list) disposeLabelGfx(entry); + } + planetLabelInstances.clear(); + }; + + const paintLabelEntry = (entry: LabelGfx, isSelected: boolean): void => { + // Text colours flip on selection so the legend reads on the + // inverse-fill frame. + const nameFill = isSelected ? theme.labelInverseText : theme.labelText; + const numberFill = isSelected + ? theme.labelInverseText + : entry.nameText !== null + ? theme.labelMuted + : theme.labelText; + if (entry.nameText !== null) { + entry.nameText.style.fill = nameFill; + } + entry.numberText.style.fill = numberFill; + const nameHeight = entry.nameText?.height ?? 0; + const numberHeight = entry.numberText.height; + const totalTextHeight = + nameHeight + (entry.nameText !== null ? LABEL_LINE_GAP_PX : 0) + numberHeight; + entry.numberText.y = entry.nameText !== null ? nameHeight + LABEL_LINE_GAP_PX : 0; + entry.frame.clear(); + if (!isSelected) { + entry.frame.visible = false; + return; + } + const widestText = Math.max( + entry.nameText?.width ?? 0, + entry.numberText.width, + ); + const frameWidth = widestText + LABEL_FRAME_PADDING_PX * 2; + const frameHeight = totalTextHeight + LABEL_FRAME_PADDING_PX * 2; + entry.frame.roundRect( + -frameWidth / 2, + -LABEL_FRAME_PADDING_PX, + frameWidth, + frameHeight, + 3, + ); + entry.frame.fill({ color: theme.labelInverseBackground, alpha: 0.95 }); + entry.frame.visible = true; + }; + + const updateLabelTransforms = (): void => { + const cameraScale = viewport.scaled; + if (cameraScale <= 0) return; + const labelScale = 1 / cameraScale; + const gapWorld = LABEL_OFFSET_PX / cameraScale; + for (const [planetNumber, list] of planetLabelInstances) { + const planetPrim = pointPrimitivesById.get(planetNumber); + if (planetPrim === undefined) continue; + const visibleRadius = displayPointRadiusWorld( + planetPrim.style, + cameraScale, + currentScaleRef, + ); + const labelData = currentLabels.find( + (l) => l.planetNumber === planetNumber, + ); + const anchorX = labelData?.x ?? planetPrim.x; + const anchorY = labelData?.y ?? planetPrim.y; + for (const entry of list) { + entry.container.x = anchorX; + entry.container.y = anchorY + visibleRadius + gapWorld; + entry.container.scale.set(labelScale); + } + } + }; + + // Planet outline state (F8-12 / #30). One Graphics per planet per + // torus copy. Width and colour come from `PlanetOutlineSpec`; the + // radius is recomputed on every zoom step so the outline tracks + // the visible disc — the planet itself may grow / shrink with + // zoom (`pointRadiusWorld` softening) or stay constant + // (`pointRadiusPx` pixel-space). + interface PlanetOutlineGfx { + readonly graphics: Graphics[]; + readonly spec: PlanetOutlineSpec; + } + const planetOutlineInstances = new Map(); + const OUTLINE_DEFAULT_WIDTH_PX = 1.5; + const OUTLINE_RADIUS_PADDING_PX = 1; // gap between disc edge and stroke + + const clearAllOutlines = (): void => { + for (const entry of planetOutlineInstances.values()) { + for (const g of entry.graphics) { + g.parent?.removeChild(g); + g.destroy(); + } + } + planetOutlineInstances.clear(); + }; + + const paintOutlineEntry = (entry: PlanetOutlineGfx): void => { + const cameraScale = viewport.scaled; + if (cameraScale <= 0) return; + const planetPrim = pointPrimitivesById.get(entry.spec.planetNumber); + if (planetPrim === undefined) { + for (const g of entry.graphics) g.clear(); + return; + } + const visibleRadius = displayPointRadiusWorld( + planetPrim.style, + cameraScale, + currentScaleRef, + ); + const paddingWorld = OUTLINE_RADIUS_PADDING_PX / cameraScale; + const widthWorld = + (entry.spec.widthPx ?? OUTLINE_DEFAULT_WIDTH_PX) / cameraScale; + const outlineRadius = visibleRadius + paddingWorld; + for (const g of entry.graphics) { + g.clear(); + g.circle(planetPrim.x, planetPrim.y, outlineRadius); + g.stroke({ + color: entry.spec.color, + alpha: 0.95, + width: widthWorld, + }); + } + }; + + const updateOutlineTransforms = (): void => { + for (const entry of planetOutlineInstances.values()) { + paintOutlineEntry(entry); + } + }; + + const setPlanetOutlines = ( + outlines: ReadonlyArray, + ): void => { + clearAllOutlines(); + for (const spec of outlines) { + const list: Graphics[] = []; + for (const layer of outlineLayers) { + const g = new Graphics(); + layer.addChild(g); + list.push(g); + } + const entry: PlanetOutlineGfx = { graphics: list, spec }; + planetOutlineInstances.set(spec.planetNumber, entry); + paintOutlineEntry(entry); + } + requestRender(); + }; + + const setPlanetLabels = ( + labels: ReadonlyArray, + selectedPlanetId: number | null, + ): void => { + clearAllLabels(); + currentLabels = labels.slice(); + for (const data of labels) { + const list: LabelGfx[] = []; + for (const layer of labelLayers) { + const container = new Container(); + const frame = new Graphics(); + frame.visible = false; + container.addChild(frame); + const nameText = + data.name === null + ? null + : buildLabelText(data.name, theme.labelText); + if (nameText !== null) container.addChild(nameText); + const numberText = buildLabelText(data.numberLabel, theme.labelMuted); + container.addChild(numberText); + layer.addChild(container); + const entry: LabelGfx = { + container, + frame, + nameText, + numberText, + }; + paintLabelEntry(entry, data.planetNumber === selectedPlanetId); + list.push(entry); + } + planetLabelInstances.set(data.planetNumber, list); + } + updateLabelTransforms(); + requestRender(); + }; + let mode: WrapMode = opts.mode; const enforceCentreWhenLarger = (): void => { @@ -513,6 +845,7 @@ export async function createRenderer(opts: RendererOptions): Promise { + redrawAllPrimitives(); + updateOutlineTransforms(); + updateLabelTransforms(); + redrawPickOverlay(); + requestRender(); + }; + viewport.on("zoomed", handleZoomed); + const handle: RendererHandle = { app, viewport, @@ -809,6 +1173,7 @@ export async function createRenderer(opts: RendererOptions): Promise= 0) allPrimitiveIds.splice(idx, 1); } @@ -947,16 +1312,25 @@ export async function createRenderer(opts: RendererOptions): Promise { app.renderer.resize(w, h); viewport.resize(w, h, opts.world.width, opts.world.height); const minScale = minScaleNoWrap({ widthPx: w, heightPx: h }, opts.world); + currentScaleRef = minScale; viewport.plugins.remove("clamp-zoom"); viewport.clampZoom({ minScale }); if (viewport.scaled < minScale) viewport.setZoom(minScale, true); if (mode === "no-wrap") { enforceCentreWhenLarger(); } + // Resize changes the reference scale and may clamp the zoom; + // in both cases the softened planet radius / pixel-space + // strokes need to follow. + redrawAllPrimitives(); + updateOutlineTransforms(); + updateLabelTransforms(); // The drawing buffer was resized; repaint at the new size. requestRender(); }, @@ -988,8 +1362,11 @@ export async function createRenderer(opts: RendererOptions): Promise 0) { + const strokeAlpha = p.style.strokeAlpha ?? 1; + const strokeWidth = displayStrokeWidthWorld(p.style, cameraScale); + g.stroke({ + color: p.style.strokeColor, + alpha: strokeAlpha, + width: strokeWidth, + }); + } } -function drawCircle(g: Graphics, p: CirclePrim, theme: Theme): void { +function drawCircle( + g: Graphics, + p: CirclePrim, + theme: Theme, + cameraScale: number, +): void { g.circle(p.x, p.y, p.radius); if (p.style.fillColor !== undefined) { g.fill({ color: p.style.fillColor, alpha: p.style.fillAlpha ?? 1 }); } const strokeColor = p.style.strokeColor ?? theme.circleStroke; const strokeAlpha = p.style.strokeAlpha ?? 1; - const strokeWidth = p.style.strokeWidthPx ?? 1; + const strokeWidth = displayStrokeWidthWorld(p.style, cameraScale); g.stroke({ color: strokeColor, alpha: strokeAlpha, width: strokeWidth }); } -function drawLine(g: Graphics, p: LinePrim, theme: Theme): void { +function drawLine( + g: Graphics, + p: LinePrim, + theme: Theme, + cameraScale: number, +): void { const color = p.style.strokeColor ?? theme.lineStroke; const alpha = p.style.strokeAlpha ?? 1; - const width = p.style.strokeWidthPx ?? 1; + const width = displayStrokeWidthWorld(p.style, cameraScale); const dash = p.style.strokeDashPx; if (dash === undefined || dash <= 0) { g.moveTo(p.x1, p.y1); diff --git a/ui/frontend/src/map/selection-ring.ts b/ui/frontend/src/map/selection-ring.ts deleted file mode 100644 index 9179fc9..0000000 --- a/ui/frontend/src/map/selection-ring.ts +++ /dev/null @@ -1,48 +0,0 @@ -// Selected-planet marker. When the SelectionStore holds a planet, the -// map draws one accent ring tight around it so the current selection is -// visible on the canvas itself (the inspector/sheet show the detail). -// Ship-group selection is intentionally not ringed here — groups are -// addressed by report index and have no single stable map coordinate. - -import { DARK_THEME, type CirclePrim, type Theme } from "./world"; - -/** Planet marker radius in world units; mirrors `battle-markers.ts`. */ -const PLANET_RADIUS_WORLD = 6; -/** The ring sits just outside the marker (and the bombing ring at +3). */ -const SELECTION_RING_RADIUS = PLANET_RADIUS_WORLD + 4; - -/** High-bit prefix so the ring id never collides with planet numbers, - * route lines, reach rings (`0xb…`), or battle markers. */ -export const SELECTION_RING_ID = 0xc0000000; -/** Below interactive primitives so it never wins a click. */ -const SELECTION_RING_PRIORITY = 0; - -/** - * computeSelectionRing returns one ring primitive centred on the selected - * planet, or `null` when nothing (or a non-planet) is selected or the - * planet is absent from the current report. `theme` supplies the ring - * colour and defaults to `DARK_THEME`. - */ -export function computeSelectionRing( - planets: ReadonlyArray<{ number: number; x: number; y: number }>, - selectedPlanetId: number | null, - theme: Theme = DARK_THEME, -): CirclePrim | null { - if (selectedPlanetId === null) return null; - const planet = planets.find((p) => p.number === selectedPlanetId); - if (planet === undefined) return null; - return { - kind: "circle", - id: SELECTION_RING_ID, - priority: SELECTION_RING_PRIORITY, - hitSlopPx: 0, - x: planet.x, - y: planet.y, - radius: SELECTION_RING_RADIUS, - style: { - strokeColor: theme.selectionRing, - strokeAlpha: 0.95, - strokeWidthPx: 1.5, - }, - }; -} diff --git a/ui/frontend/src/map/state-binding.ts b/ui/frontend/src/map/state-binding.ts index 5e6f929..5316138 100644 --- a/ui/frontend/src/map/state-binding.ts +++ b/ui/frontend/src/map/state-binding.ts @@ -37,24 +37,48 @@ import { // binding uses the engine number directly as the primitive id so the // click handler can recover a planet by hit-test result without an // extra lookup. -function styleFor(kind: ReportPlanet["kind"], theme: Theme): Style { + +/** + * KNOWN_PLANET_BASE_RADIUS_WORLD is the world-unit scale of the cube- + * root size mapping for planets with a known `size`. With α = 0.33 + * the on-screen pixel radius at default zoom is roughly + * `BASE * cbrt(size) * scaleRef`. The cube root keeps planet area + * proportional to volume, so a Size-8 planet reads twice as big as a + * Size-1 one. Owner can tune this together with `PLANET_SIZE_ZOOM_ALPHA` + * during the F8 manual-QA loop. + */ +const KNOWN_PLANET_BASE_RADIUS_WORLD = 4; + +/** + * UNKNOWN_PLANET_PIXEL_RADIUS matches issue #55 / п.28: planets with + * an unknown size — `unidentified` planets and the rare `null`-size + * report rows — sit at a constant 3-pixel disc regardless of zoom. + */ +const UNKNOWN_PLANET_PIXEL_RADIUS = 3; + +function styleFor(planet: ReportPlanet, theme: Theme): Style { + const fill = fillForKind(planet.kind, theme); + const size = planet.size; + if (planet.kind === "unidentified" || size === null || !(size > 0)) { + return { ...fill, pointRadiusPx: UNKNOWN_PLANET_PIXEL_RADIUS }; + } + const baseRadius = KNOWN_PLANET_BASE_RADIUS_WORLD * Math.cbrt(size); + return { ...fill, pointRadiusWorld: baseRadius }; +} + +function fillForKind( + kind: ReportPlanet["kind"], + theme: Theme, +): { fillColor: number; fillAlpha: number } { switch (kind) { case "local": - return { fillColor: theme.planetLocal, fillAlpha: 1, pointRadiusPx: 6 }; + return { fillColor: theme.planetLocal, fillAlpha: 1 }; case "other": - return { fillColor: theme.planetOther, fillAlpha: 1, pointRadiusPx: 5 }; + return { fillColor: theme.planetOther, fillAlpha: 1 }; case "uninhabited": - return { - fillColor: theme.planetUninhabited, - fillAlpha: 0.85, - pointRadiusPx: 4, - }; + return { fillColor: theme.planetUninhabited, fillAlpha: 0.85 }; case "unidentified": - return { - fillColor: theme.planetUnidentified, - fillAlpha: 0.7, - pointRadiusPx: 3, - }; + return { fillColor: theme.planetUnidentified, fillAlpha: 0.7 }; } } @@ -76,13 +100,16 @@ function priorityFor(kind: ReportPlanet["kind"]): number { * resolves to. The click handler in `lib/active-view/map.svelte` * looks the hit primitive's id up in the binding's hitLookup map * and dispatches `selection.selectPlanet` or - * `selection.selectShipGroup` accordingly. + * `selection.selectShipGroup` accordingly. Bombing markers no longer + * surface as their own hit target (F8-12 / #30) — the visual cue is + * a planet outline, the click on the planet still selects the + * planet, and the bombing → report navigation starts in the + * inspector. */ export type HitTarget = | { kind: "planet"; number: number } | { kind: "shipGroup"; ref: ShipGroupRef } - | { kind: "battle"; battleId: string; planet: number } - | { kind: "bombing"; planet: number }; + | { kind: "battle"; battleId: string; planet: number }; /** * PlanetCategory is the per-`ReportPlanet.kind` flavour exposed to the @@ -155,7 +182,7 @@ export function reportToWorld( kind: "point", id: planet.number, priority: priorityFor(planet.kind), - style: styleFor(planet.kind, theme), + style: styleFor(planet, theme), hitSlopPx: 0, x: planet.x, y: planet.y, diff --git a/ui/frontend/src/map/visibility.ts b/ui/frontend/src/map/visibility.ts index d1fb0aa..1e48b6b 100644 --- a/ui/frontend/src/map/visibility.ts +++ b/ui/frontend/src/map/visibility.ts @@ -65,8 +65,6 @@ export function isCategoryVisible( return toggles.unidentifiedGroups; case "battleMarker": return toggles.battleMarkers; - case "bombingMarker": - return toggles.bombingMarkers; } } diff --git a/ui/frontend/src/map/world.ts b/ui/frontend/src/map/world.ts index 303658a..054df0b 100644 --- a/ui/frontend/src/map/world.ts +++ b/ui/frontend/src/map/world.ts @@ -17,19 +17,34 @@ export type WrapMode = "torus" | "no-wrap"; // Style describes the visual appearance of a primitive. Any field may // be omitted; missing fields fall back to the active theme defaults. +// +// `strokeWidthPx` / `pointRadiusPx` are honest screen-pixel sizes +// since F8-12 (#28): the renderer divides them by the current camera +// scale before drawing, and rebuilds the affected `Graphics` whenever +// the camera zooms. This keeps thin lines crisp and small markers +// readable across the whole zoom range — the camera-relative +// thickening that the old contract promised but never delivered is +// gone. +// +// `pointRadiusWorld` is the opposite intent: a planet's known +// `size` produces a base radius in world units, and the renderer +// softens its growth with the camera scale through +// `PLANET_SIZE_ZOOM_ALPHA` (F8-12 / #31). When `pointRadiusWorld` +// is set on a `PointPrim`, `pointRadiusPx` is ignored. export interface Style { fillColor?: number; // 0xRRGGBB fillAlpha?: number; // 0..1 strokeColor?: number; // 0xRRGGBB strokeAlpha?: number; // 0..1 - strokeWidthPx?: number; // pixels at any zoom - pointRadiusPx?: number; // pixels at any zoom (for kind === 'point') + strokeWidthPx?: number; // screen pixels at any zoom + pointRadiusPx?: number; // screen pixels at any zoom (for kind === 'point') + pointRadiusWorld?: number; // world units, softened by PLANET_SIZE_ZOOM_ALPHA // strokeDashPx — when set on a `LinePrim`, the line is rendered as // a dashed pattern whose dash and gap are both this length. When - // unset (or zero), the stroke is solid. Interpreted in the same - // world-unit space as `strokeWidthPx`, so the dash spacing scales - // with the camera. Phase 19 uses this for the IncomingGroup - // trajectory line; ignored on point and circle primitives. + // unset (or zero), the stroke is solid. Interpreted in world-unit + // space — the dash spacing scales with the camera. Phase 19 uses + // this for the IncomingGroup trajectory line; ignored on point + // and circle primitives. strokeDashPx?: number; } @@ -171,20 +186,91 @@ export interface Theme { routeCap: number; routeMat: number; routeEmp: number; - // Battle X-crosses and bombing rings (damaged vs wiped). + // Battle X-crosses and the bombing accent (damaged vs wiped). The + // bombing accent is now drawn as the planet's outline rather than a + // separate ring (F8-12 / issue #55, п.30). battleMarker: number; bombingDamaged: number; bombingWiped: number; - // Reach rings, the selected-planet ring, and pending-Send tracks. + // Reach rings, the selection accent (planet outline + label frame), + // and pending-Send tracks. `selectionRing` is kept around for the + // soon-to-be-removed `selection-ring.ts` and the test that locks + // the colour; both lines disappear once the label-driven selection + // lands. reachCircle: number; selectionRing: number; + selectionAccent: number; pendingSend: number; + // Planet label colours. `labelText` paints the primary line + // (planet name when the toggle is on), `labelMuted` paints the + // `#N` companion line. The inverse pair fills the rounded frame + // drawn around the selected planet's label (background = the + // selection accent, text = the canvas background colour). + labelText: number; + labelMuted: number; + labelInverseText: number; + labelInverseBackground: number; // Pick-mode overlay: the anchor / cursor-line / hover highlight // colour and the multiply tint applied to non-reachable primitives. pickHighlight: number; pickDimTint: number; } +/** + * PLANET_SIZE_ZOOM_ALPHA is the exponent that softens the on-screen + * growth of known-size planets with the camera scale (F8-12 / п.31). + * `α = 1` keeps the historical linear-with-zoom behaviour; `α = 0` + * would make planets fully zoom-invariant. 0.33 (cube-root soft scaling + * relative to `scale_ref`) is the owner-approved starting point — it + * gives a noticeable, but moderated, growth as the user zooms in. The + * constant lives next to the themes so the tuning knob is in one + * obvious place. + */ +export const PLANET_SIZE_ZOOM_ALPHA = 0.33; + +/** + * displayPointRadiusWorld returns the world-space radius the renderer + * should draw a `PointPrim` with at the current camera scale. When + * `style.pointRadiusWorld` is set (known-size planets), the radius is + * the base world radius softened by `PLANET_SIZE_ZOOM_ALPHA` relative + * to `scaleRef` — at `scale = scaleRef` it equals the base radius; + * zooming in grows it sub-linearly. Otherwise the radius collapses to + * `pointRadiusPx / cameraScale` so the on-screen disc stays the same + * pixel size regardless of zoom. + * + * Used by both the renderer (`render.ts:drawPoint`) and the hit-test + * (`hit-test.ts:matchPoint`) so the visible disc and the click zone + * always agree. + */ +export function displayPointRadiusWorld( + style: Style, + cameraScale: number, + scaleRef: number, +): number { + if (style.pointRadiusWorld !== undefined) { + const softening = Math.pow(cameraScale / scaleRef, PLANET_SIZE_ZOOM_ALPHA - 1); + return style.pointRadiusWorld * softening; + } + const px = style.pointRadiusPx ?? DEFAULT_POINT_RADIUS_PX; + if (cameraScale <= 0) return px; + return px / cameraScale; +} + +/** + * displayStrokeWidthWorld converts `style.strokeWidthPx` (a screen-pixel + * thickness, F8-12 / #28) into the world-space width the renderer + * passes to `g.stroke({...})`. The renderer redraws strokes on every + * `viewport.zoomed` so the on-screen thickness stays constant. + */ +export function displayStrokeWidthWorld( + style: Style, + cameraScale: number, +): number { + const px = style.strokeWidthPx ?? 1; + if (cameraScale <= 0) return px; + return px / cameraScale; +} + export const DARK_THEME: Theme = { background: 0x0a0e1a, fog: 0x12162a, @@ -208,7 +294,12 @@ export const DARK_THEME: Theme = { bombingWiped: 0xff3030, reachCircle: 0x6d8cff, selectionRing: 0x6d8cff, + selectionAccent: 0x6d8cff, pendingSend: 0x66bb6a, + labelText: 0xc7d2e0, + labelMuted: 0x90a4ae, + labelInverseText: 0x0a0e1a, + labelInverseBackground: 0x6d8cff, pickHighlight: 0xffe082, pickDimTint: 0x303841, }; @@ -245,7 +336,12 @@ export const LIGHT_THEME: Theme = { bombingWiped: 0xc62828, reachCircle: 0x3949ab, selectionRing: 0x3949ab, + selectionAccent: 0x3949ab, pendingSend: 0x388e3c, + labelText: 0x263240, + labelMuted: 0x5a6d8a, + labelInverseText: 0xf3f5fb, + labelInverseBackground: 0x3949ab, pickHighlight: 0xef6c00, pickDimTint: 0xaeb6c4, }; diff --git a/ui/frontend/tests/battle-markers.test.ts b/ui/frontend/tests/battle-markers.test.ts index f2c7b45..cb64875 100644 --- a/ui/frontend/tests/battle-markers.test.ts +++ b/ui/frontend/tests/battle-markers.test.ts @@ -110,7 +110,7 @@ describe("buildBattleAndBombingMarkers", () => { expect(out.primitives).toHaveLength(0); }); - it("emits one yellow ring per damaged bombing and red per wiped", () => { + it("does not emit bombing primitives (F8-12 / #30) — the planet outline is drawn elsewhere", () => { const report = makeReport({ planets: [ { @@ -163,28 +163,12 @@ describe("buildBattleAndBombingMarkers", () => { attackPower: 1, wiped: false, }, - { - planetNumber: 2, - planet: "B", - owner: "X", - attacker: "Y", - production: "MAT", - industry: 0, - population: 0, - colonists: 0, - industryStockpile: 0, - materialsStockpile: 0, - attackPower: 1, - wiped: true, - }, ], }); const out = buildBattleAndBombingMarkers(report); - const rings = out.primitives.filter((p) => p.kind === "circle"); - expect(rings).toHaveLength(2); - expect(rings[0].style.strokeColor).toBe(DARK_THEME.bombingDamaged); - expect(rings[1].style.strokeColor).toBe(DARK_THEME.bombingWiped); + expect(out.primitives.filter((p) => p.kind === "circle")).toHaveLength(0); + // `setPlanetOutlines` in the renderer paints the bombing accent. }); it("paints markers with the supplied palette's colours", () => { @@ -231,11 +215,9 @@ describe("buildBattleAndBombingMarkers", () => { const out = buildBattleAndBombingMarkers(report, LIGHT_THEME); const lines = out.primitives.filter((p) => p.kind === "line"); - const rings = out.primitives.filter((p) => p.kind === "circle"); for (const l of lines) { expect(l.style.strokeColor).toBe(LIGHT_THEME.battleMarker); } - expect(rings[0].style.strokeColor).toBe(LIGHT_THEME.bombingWiped); // The accents are deliberately distinct between the palettes. expect(LIGHT_THEME.battleMarker).not.toBe(DARK_THEME.battleMarker); expect(LIGHT_THEME.bombingWiped).not.toBe(DARK_THEME.bombingWiped); diff --git a/ui/frontend/tests/e2e/map-toggles.spec.ts b/ui/frontend/tests/e2e/map-toggles.spec.ts index f46101a..b0c96f5 100644 --- a/ui/frontend/tests/e2e/map-toggles.spec.ts +++ b/ui/frontend/tests/e2e/map-toggles.spec.ts @@ -365,9 +365,39 @@ test("toggle state persists across a page reload", async ({ page }) => { expect( await page.getByTestId("map-toggles-bombing-markers").isChecked(), ).toBe(false); - // Battle X-cross and bombing ring are hidden in the renderer. + // Battle X-cross primitives stay hidden in the renderer. F8-12 / #30 + // retired the bombing CirclePrim — the toggle now hides a planet + // outline overlay, which sits outside the primitive surface; the + // high-bit 0xc… range is permanently empty. expect(await visibleHighBitCount(page, 0xa0000000)).toBe(0); - expect(await visibleHighBitCount(page, 0xc0000000)).toBe(0); +}); + +test("planet-names toggle persists across a page reload (F8-12 / #29)", async ({ + page, +}) => { + await mockGateway(page, { currentTurn: 1 }); + await bootSession(page); + await openGame(page); + + await page.getByTestId("map-toggles-trigger").click(); + // Default ON; flip it OFF. + expect(await page.getByTestId("map-toggles-planet-names").isChecked()).toBe( + true, + ); + await page.getByTestId("map-toggles-planet-names").click(); + expect(await page.getByTestId("map-toggles-planet-names").isChecked()).toBe( + false, + ); + + await page.reload({ waitUntil: "commit" }); + await expect(page.getByTestId("active-view-map")).toHaveAttribute( + "data-status", + "ready", + ); + await page.getByTestId("map-toggles-trigger").click(); + expect(await page.getByTestId("map-toggles-planet-names").isChecked()).toBe( + false, + ); }); // settledRenderCount waits out the mount/resize paint burst and returns diff --git a/ui/frontend/tests/map-display-sizing.test.ts b/ui/frontend/tests/map-display-sizing.test.ts new file mode 100644 index 0000000..0c09206 --- /dev/null +++ b/ui/frontend/tests/map-display-sizing.test.ts @@ -0,0 +1,83 @@ +// Coverage for the F8-12 sizing helpers in src/map/world.ts: +// `displayPointRadiusWorld` (the union of the pixel-space and the +// softened-by-zoom rules) and `displayStrokeWidthWorld` (pixel-space +// stroke widths). Both are pure math, so this file stays Pixi-free. + +import { describe, expect, test } from "vitest"; + +import { + DEFAULT_POINT_RADIUS_PX, + PLANET_SIZE_ZOOM_ALPHA, + displayPointRadiusWorld, + displayStrokeWidthWorld, +} from "../src/map/world"; + +describe("displayPointRadiusWorld — pixel-space (pointRadiusPx)", () => { + test("returns pixel size divided by scale at scale=1", () => { + expect(displayPointRadiusWorld({ pointRadiusPx: 5 }, 1, 0.2)).toBe(5); + }); + + test("shrinks the world footprint as zoom grows", () => { + expect(displayPointRadiusWorld({ pointRadiusPx: 6 }, 3, 0.2)).toBeCloseTo(2); + }); + + test("falls back to DEFAULT_POINT_RADIUS_PX when the style is bare", () => { + expect(displayPointRadiusWorld({}, 2, 0.2)).toBeCloseTo( + DEFAULT_POINT_RADIUS_PX / 2, + ); + }); + + test("zero-scale guard returns the raw pixel size", () => { + expect(displayPointRadiusWorld({ pointRadiusPx: 4 }, 0, 0.2)).toBe(4); + }); +}); + +describe("displayPointRadiusWorld — softened by zoom (pointRadiusWorld)", () => { + test("at scale=scaleRef the visible radius equals the base radius", () => { + const radius = displayPointRadiusWorld( + { pointRadiusWorld: 6 }, + 0.2, + 0.2, + ); + expect(radius).toBeCloseTo(6); + }); + + test("zooming in grows the radius sub-linearly", () => { + const r1 = displayPointRadiusWorld({ pointRadiusWorld: 6 }, 0.2, 0.2); + const r10 = displayPointRadiusWorld({ pointRadiusWorld: 6 }, 2.0, 0.2); + // On-screen pixel size grows by scale^α (α = 0.33) instead of + // linearly: 10x zoom → ~10^0.33 ≈ 2.15x growth. + const onScreenAt1 = r1 * 0.2; + const onScreenAt10 = r10 * 2.0; + expect(onScreenAt10 / onScreenAt1).toBeCloseTo( + Math.pow(10, PLANET_SIZE_ZOOM_ALPHA), + 3, + ); + }); + + test("ignores pointRadiusPx when pointRadiusWorld is set", () => { + const r = displayPointRadiusWorld( + { pointRadiusPx: 99, pointRadiusWorld: 4 }, + 0.4, + 0.2, + ); + // World radius is the base softened by (0.4/0.2)^(α-1). + expect(r).toBeCloseTo(4 * Math.pow(2, PLANET_SIZE_ZOOM_ALPHA - 1), 4); + }); +}); + +describe("displayStrokeWidthWorld", () => { + test("returns width / scale at any zoom", () => { + expect(displayStrokeWidthWorld({ strokeWidthPx: 2 }, 1)).toBe(2); + expect(displayStrokeWidthWorld({ strokeWidthPx: 2 }, 4)).toBeCloseTo(0.5); + expect(displayStrokeWidthWorld({ strokeWidthPx: 2 }, 0.5)).toBeCloseTo(4); + }); + + test("falls back to 1 when strokeWidthPx is omitted", () => { + expect(displayStrokeWidthWorld({}, 2)).toBeCloseTo(0.5); + }); + + test("zero-scale guard returns the raw pixel value", () => { + expect(displayStrokeWidthWorld({ strokeWidthPx: 3 }, 0)).toBe(3); + }); +}); diff --git a/ui/frontend/tests/map-hit-test.test.ts b/ui/frontend/tests/map-hit-test.test.ts index e106d57..1fd03ea 100644 --- a/ui/frontend/tests/map-hit-test.test.ts +++ b/ui/frontend/tests/map-hit-test.test.ts @@ -5,11 +5,13 @@ // expected hit is obvious from the geometry; the camera is at scale=1 // in most cases so slop in pixels equals slop in world units. // -// The point hit zone is `(pointRadiusPx + slopPx) / camera.scale` -// world units — the visible disc plus an ergonomic slop on top. The -// default `pointRadiusPx` (`DEFAULT_POINT_RADIUS_PX`) is 3 and the -// default point slop (`DEFAULT_HIT_SLOP_PX.point`) is 4, so a default -// point is hit out to 7 world units at scale=1. +// F8-12 / #28 made `pointRadiusPx` and `strokeWidthPx` honest screen- +// pixel sizes — the hit zone is `(pointRadiusPx + slopPx) / scale` +// world units, which equals `pointRadiusPx + slopPx` *pixels* on +// screen at any zoom. The default `pointRadiusPx` +// (`DEFAULT_POINT_RADIUS_PX`) is 3 and the default point slop +// (`DEFAULT_HIT_SLOP_PX.point`) is 4, so a default point is hit out +// to 7 *screen* pixels — equal to 7 world units at scale=1. import { describe, expect, test } from "vitest"; import { hitTest } from "../src/map/hit-test"; @@ -256,28 +258,42 @@ describe("hitTest — empty results and scale", () => { expect(ids(w, "torus", cam, cursorOver(500, 500, cam))).toBe(null); }); - test("higher zoom shrinks the on-screen slop in world units", () => { - // At scale=4, slopPx 4 = 1 world unit; visible radius stays 3 - // world units. Threshold = 4 world units. - const w = new World(1000, 1000, [point(1, 503, 500)]); + test("higher zoom shrinks the world-unit footprint of the default disc", () => { + // At scale=4, pointRadiusPx 3 = 0.75 world units; slop 4 = 1 + // world unit. Threshold = 1.75 world units. const cam4 = camAt(500, 500, 4); - // 3 world units away → on the disc edge → hit. - expect(ids(w, "torus", cam4, cursorOver(503, 500, cam4))).toBe(1); - // 5 world units away → beyond radius+slop → null. - const wFar = new World(1000, 1000, [point(1, 505, 500)]); - expect(ids(wFar, "torus", cam4, cursorOver(500, 500, cam4))).toBe(null); + const w = new World(1000, 1000, [point(1, 500, 500)]); + // 1.5 world units away → within 1.75 → hit. + expect(ids(w, "torus", cam4, cursorOver(501.5, 500, cam4))).toBe(1); + // 2 world units away → beyond 1.75 → null. + expect(ids(w, "torus", cam4, cursorOver(502, 500, cam4))).toBe(null); }); - test("lower zoom widens the on-screen slop in world units", () => { - // At scale=0.5, slopPx 4 = 8 world units; visible radius - // stays 3 → threshold = 11 world units. + test("lower zoom inflates the world-unit footprint of the default disc", () => { + // At scale=0.5, pointRadiusPx 3 = 6 world units; slop 4 = 8 + // world units. Threshold = 14 world units. const cam05 = camAt(500, 500, 0.5); - const w = new World(1000, 1000, [point(1, 510, 500)]); - // 10 world units away → within 11 → hit. - expect(ids(w, "torus", cam05, cursorOver(500, 500, cam05))).toBe(1); - const wFar = new World(1000, 1000, [point(1, 514, 500)]); - // 14 world units away → beyond 11 → null. - expect(ids(wFar, "torus", cam05, cursorOver(500, 500, cam05))).toBe(null); + const w = new World(1000, 1000, [point(1, 500, 500)]); + // 13 world units away → within 14 → hit. + expect(ids(w, "torus", cam05, cursorOver(513, 500, cam05))).toBe(1); + // 16 world units away → beyond 14 → null. + expect(ids(w, "torus", cam05, cursorOver(516, 500, cam05))).toBe(null); + }); + + test("pointRadiusWorld scales softly with zoom (F8-12 / #31)", () => { + // world 1000×1000, viewport 200×200 → scaleRef = 0.2 (every + // world unit becomes 0.2 px on screen at the "whole world fits" + // zoom). PLANET_SIZE_ZOOM_ALPHA is 0.33: r_display = + // r_base * (scale / scaleRef)^(α - 1). + const cam05 = camAt(500, 500, 0.5); + const wBase = new World(1000, 1000, [ + point(1, 500, 500, { style: { pointRadiusWorld: 6 } }), + ]); + // At scale=0.5 the softening factor is (0.5/0.2)^(0.33-1) ≈ 0.554. + // Visible radius ≈ 3.32 world units, slop 8, threshold ≈ 11.32. + expect(ids(wBase, "torus", cam05, cursorOver(510, 500, cam05))).toBe(1); + // Cursor 12 world units away exceeds the threshold. + expect(ids(wBase, "torus", cam05, cursorOver(512, 500, cam05))).toBe(null); }); }); diff --git a/ui/frontend/tests/map-labels.test.ts b/ui/frontend/tests/map-labels.test.ts new file mode 100644 index 0000000..4cc408d --- /dev/null +++ b/ui/frontend/tests/map-labels.test.ts @@ -0,0 +1,147 @@ +// Coverage for the F8-12 / #29 planet-label formatting. The +// renderer's per-Pixi.Text drawing lives behind Pixi APIs (and is +// exercised by Playwright); this file pins the pure data step. + +import { describe, expect, test } from "vitest"; + +import type { GameReport } from "../src/api/game-state"; +import { buildPlanetLabels } from "../src/map/labels"; +import { EMPTY_SHIP_GROUPS } from "./helpers/empty-ship-groups"; + +function makeReport(overrides: Partial = {}): GameReport { + return { + turn: 1, + mapWidth: 100, + mapHeight: 100, + planetCount: 0, + planets: [], + race: "", + localShipClass: [], + routes: [], + localPlayerDrive: 0, + localPlayerWeapons: 0, + localPlayerShields: 0, + localPlayerCargo: 0, + ...EMPTY_SHIP_GROUPS, + ...overrides, + }; +} + +describe("buildPlanetLabels", () => { + test("named planet with showNames=true emits both lines", () => { + const report = makeReport({ + planets: [ + { + number: 5, + name: "Tancordia", + kind: "local", + x: 10, + y: 20, + owner: null, + size: null, + resources: null, + industryStockpile: null, + materialsStockpile: null, + industry: null, + population: null, + colonists: null, + production: null, + freeIndustry: null, + }, + ], + }); + const out = buildPlanetLabels(report, { showNames: true }); + expect(out).toEqual([ + { + planetNumber: 5, + x: 10, + y: 20, + name: "Tancordia", + numberLabel: "#5", + }, + ]); + }); + + test("named planet with showNames=false drops the name line", () => { + const report = makeReport({ + planets: [ + { + number: 5, + name: "Tancordia", + kind: "local", + x: 10, + y: 20, + owner: null, + size: null, + resources: null, + industryStockpile: null, + materialsStockpile: null, + industry: null, + population: null, + colonists: null, + production: null, + freeIndustry: null, + }, + ], + }); + const out = buildPlanetLabels(report, { showNames: false }); + expect(out[0].name).toBeNull(); + expect(out[0].numberLabel).toBe("#5"); + }); + + test("unidentified planet always renders #N only, ignoring the toggle", () => { + const report = makeReport({ + planets: [ + { + number: 42, + name: "Tancordia", + kind: "unidentified", + x: 5, + y: 5, + owner: null, + size: null, + resources: null, + industryStockpile: null, + materialsStockpile: null, + industry: null, + population: null, + colonists: null, + production: null, + freeIndustry: null, + }, + ], + }); + const on = buildPlanetLabels(report, { showNames: true }); + const off = buildPlanetLabels(report, { showNames: false }); + expect(on[0].name).toBeNull(); + expect(off[0].name).toBeNull(); + expect(on[0].numberLabel).toBe("#42"); + }); + + test("empty-name planet falls back to #N", () => { + const report = makeReport({ + planets: [ + { + number: 9, + name: "", + kind: "uninhabited", + x: 1, + y: 1, + owner: null, + size: null, + resources: null, + industryStockpile: null, + materialsStockpile: null, + industry: null, + population: null, + colonists: null, + production: null, + freeIndustry: null, + }, + ], + }); + const out = buildPlanetLabels(report, { showNames: true }); + expect(out[0].name).toBeNull(); + expect(out[0].numberLabel).toBe("#9"); + }); +}); diff --git a/ui/frontend/tests/map-toggles-component.test.ts b/ui/frontend/tests/map-toggles-component.test.ts index da4f9f0..db66263 100644 --- a/ui/frontend/tests/map-toggles-component.test.ts +++ b/ui/frontend/tests/map-toggles-component.test.ts @@ -59,6 +59,7 @@ describe("MapTogglesControl", () => { expect(ui.getByTestId("map-toggles-uninhabited-planets")).toBeChecked(); expect(ui.getByTestId("map-toggles-unidentified-planets")).toBeChecked(); expect(ui.getByTestId("map-toggles-unreachable-planets")).toBeChecked(); + expect(ui.getByTestId("map-toggles-planet-names")).toBeChecked(); expect(ui.getByTestId("map-toggles-visible-hyperspace")).toBeChecked(); expect(ui.queryByTestId("map-toggles-wrap-torus")).toBeNull(); expect(ui.queryByTestId("map-toggles-wrap-no-wrap")).toBeNull(); @@ -91,6 +92,17 @@ describe("MapTogglesControl", () => { expect(setMapToggle).not.toHaveBeenCalledWith("bombingMarkers", false); }); + test("planet-names checkbox flips the planetNames toggle (F8-12 / #29)", async () => { + const store = buildStore(); + const setMapToggle = vi + .spyOn(store, "setMapToggle") + .mockResolvedValue(undefined); + const ui = render(MapTogglesControl, { props: { store } }); + await fireEvent.click(ui.getByTestId("map-toggles-trigger")); + await fireEvent.click(ui.getByTestId("map-toggles-planet-names")); + expect(setMapToggle).toHaveBeenCalledWith("planetNames", false); + }); + test("Escape closes the popover", async () => { const store = buildStore(); const ui = render(MapTogglesControl, { props: { store } }); diff --git a/ui/frontend/tests/map-toggles-state.test.ts b/ui/frontend/tests/map-toggles-state.test.ts index b5b21d9..93ae5f4 100644 --- a/ui/frontend/tests/map-toggles-state.test.ts +++ b/ui/frontend/tests/map-toggles-state.test.ts @@ -113,6 +113,7 @@ describe("GameStateStore.mapToggles persistence", () => { await a.init({ client: makeFakeClient(3), cache, gameId: GAME_ID }); await a.setMapToggle("hyperspaceGroups", false); await a.setMapToggle("battleMarkers", false); + await a.setMapToggle("planetNames", false); await a.setMapToggle("visibleHyperspace", false); a.dispose(); @@ -121,6 +122,7 @@ describe("GameStateStore.mapToggles persistence", () => { await b.init({ client: makeFakeClient(3), cache, gameId: GAME_ID }); expect(b.mapToggles.hyperspaceGroups).toBe(false); expect(b.mapToggles.battleMarkers).toBe(false); + expect(b.mapToggles.planetNames).toBe(false); expect(b.mapToggles.visibleHyperspace).toBe(false); // Untouched flags retain defaults. expect(b.mapToggles.bombingMarkers).toBe(true); @@ -141,6 +143,7 @@ describe("GameStateStore.mapToggles persistence", () => { expect(store.mapToggles.hyperspaceGroups).toBe(false); expect(store.mapToggles.battleMarkers).toBe(true); expect(store.mapToggles.bombingMarkers).toBe(true); + expect(store.mapToggles.planetNames).toBe(true); expect(store.mapToggles.visibleHyperspace).toBe(true); store.dispose(); }); diff --git a/ui/frontend/tests/selection-ring.test.ts b/ui/frontend/tests/selection-ring.test.ts deleted file mode 100644 index de1d8ae..0000000 --- a/ui/frontend/tests/selection-ring.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { computeSelectionRing, SELECTION_RING_ID } from "../src/map/selection-ring"; -import { DARK_THEME, LIGHT_THEME } from "../src/map/world"; - -const planets = [ - { number: 1, x: 10, y: 20 }, - { number: 2, x: 30, y: 40 }, -]; - -describe("computeSelectionRing", () => { - it("returns null when nothing is selected", () => { - expect(computeSelectionRing(planets, null)).toBeNull(); - }); - - it("returns null when the selected planet is absent from the report", () => { - expect(computeSelectionRing(planets, 99)).toBeNull(); - }); - - it("rings the selected planet at its coordinates", () => { - const ring = computeSelectionRing(planets, 2); - expect(ring).toMatchObject({ - kind: "circle", - id: SELECTION_RING_ID, - x: 30, - y: 40, - hitSlopPx: 0, - }); - // Defaults to the dark palette. - expect(ring?.style.strokeColor).toBe(DARK_THEME.selectionRing); - // Sits outside the planet marker (radius 6 world units). - expect(ring?.radius ?? 0).toBeGreaterThan(6); - }); - - it("uses the supplied palette's ring colour", () => { - const ring = computeSelectionRing(planets, 2, LIGHT_THEME); - expect(ring?.style.strokeColor).toBe(LIGHT_THEME.selectionRing); - expect(LIGHT_THEME.selectionRing).not.toBe(DARK_THEME.selectionRing); - }); -}); diff --git a/ui/frontend/tests/state-binding-cascade.test.ts b/ui/frontend/tests/state-binding-cascade.test.ts index e58ee54..014f5bd 100644 --- a/ui/frontend/tests/state-binding-cascade.test.ts +++ b/ui/frontend/tests/state-binding-cascade.test.ts @@ -17,7 +17,7 @@ import type { ReportPlanet, ReportUnidentifiedShipGroup, } from "../src/api/game-state"; -import { BATTLE_MARKER_ID_PREFIX, BOMBING_MARKER_ID_PREFIX } from "../src/map/battle-markers"; +import { BATTLE_MARKER_ID_PREFIX } from "../src/map/battle-markers"; import { SHIP_GROUP_ID_OFFSETS } from "../src/map/ship-groups"; import { reportToWorld } from "../src/map/state-binding"; import { EMPTY_SHIP_GROUPS } from "./helpers/empty-ship-groups"; @@ -200,7 +200,7 @@ describe("reportToWorld — categories", () => { expect(categories.get(unidentifiedId)).toBe("unidentifiedGroup"); }); - test("battle markers and bombing markers each carry their own category", () => { + test("battle markers carry the battleMarker category", () => { const { categories } = reportToWorld( makeReport({ planets: [ @@ -208,6 +208,9 @@ describe("reportToWorld — categories", () => { makePlanet({ number: 2, kind: "other", x: 200, y: 200 }), ], battles: [makeBattle({ id: "b1", planet: 2 })], + // F8-12 / #30: bombings no longer emit their own + // primitives — the planet outline is drawn by + // `setPlanetOutlines` from the map view. bombings: [makeBombing({ planetNumber: 2 })], }), ); @@ -216,8 +219,6 @@ describe("reportToWorld — categories", () => { const battleB = BATTLE_MARKER_ID_PREFIX | (0 << 4) | 1; expect(categories.get(battleA)).toBe("battleMarker"); expect(categories.get(battleB)).toBe("battleMarker"); - const bombingId = BOMBING_MARKER_ID_PREFIX | 0; - expect(categories.get(bombingId)).toBe("bombingMarker"); }); }); @@ -235,7 +236,7 @@ describe("reportToWorld — planetDependents", () => { expect(planetDependents.get(7)?.has(7)).toBe(true); }); - test("battle / bombing markers cascade onto their anchor planet", () => { + test("battle markers cascade onto their anchor planet", () => { const { planetDependents } = reportToWorld( makeReport({ planets: [ @@ -243,17 +244,18 @@ describe("reportToWorld — planetDependents", () => { makePlanet({ number: 2, kind: "other", x: 200, y: 200 }), ], battles: [makeBattle({ planet: 2 })], + // Bombings are still in the report but no primitive + // rides the cascade now — they paint a planet outline + // straight from `map.svelte`. bombings: [makeBombing({ planetNumber: 2 })], }), ); const battleA = BATTLE_MARKER_ID_PREFIX | (0 << 4) | 0; const battleB = BATTLE_MARKER_ID_PREFIX | (0 << 4) | 1; - const bombingId = BOMBING_MARKER_ID_PREFIX | 0; const deps = planetDependents.get(2) ?? new Set(); expect(deps.has(2)).toBe(true); expect(deps.has(battleA)).toBe(true); expect(deps.has(battleB)).toBe(true); - expect(deps.has(bombingId)).toBe(true); }); test("in-space groups cascade onto their destination planet", () => { diff --git a/ui/frontend/tests/visibility-helpers.test.ts b/ui/frontend/tests/visibility-helpers.test.ts index 322327a..33aab14 100644 --- a/ui/frontend/tests/visibility-helpers.test.ts +++ b/ui/frontend/tests/visibility-helpers.test.ts @@ -82,10 +82,10 @@ describe("isCategoryVisible", () => { expect(isCategoryVisible("planet-unidentified", t)).toBe(false); }); - test("battle and bombing markers have independent toggles", () => { - const t = toggles({ battleMarkers: false, bombingMarkers: true }); + test("battleMarker toggle hides battle X-crosses without touching other layers", () => { + const t = toggles({ battleMarkers: false }); expect(isCategoryVisible("battleMarker", t)).toBe(false); - expect(isCategoryVisible("bombingMarker", t)).toBe(true); + expect(isCategoryVisible("planet-foreign", t)).toBe(true); }); }); @@ -202,6 +202,9 @@ describe("computeHiddenPlanetNumbers", () => { }); describe("computeHiddenIds", () => { + // F8-12 / #30: bombings no longer ride the cascade as their own + // primitive — they paint a planet outline directly. The fixture + // here mirrors what `reportToWorld` currently emits. const categories: Map = new Map< PrimitiveID, MapCategory @@ -212,11 +215,10 @@ describe("computeHiddenIds", () => { [150, "hyperspaceGroup"], [200, "incomingGroup"], [300, "battleMarker"], - [400, "bombingMarker"], ]); const planetDependents = new Map>([ [1, new Set([1])], - [2, new Set([2, 100, 150, 200, 300, 400])], + [2, new Set([2, 100, 150, 200, 300])], ]); test("category-toggle off hides every primitive in that category", () => { @@ -239,10 +241,10 @@ describe("computeHiddenIds", () => { new Set([2]), toggles(), ); - expect(hidden).toEqual(new Set([2, 100, 150, 200, 300, 400])); + expect(hidden).toEqual(new Set([2, 100, 150, 200, 300])); }); - test("battle / bombing markers have independent toggles", () => { + test("battle markers honour the battleMarkers toggle independently", () => { const hidden = computeHiddenIds( categories, planetDependents, @@ -250,7 +252,7 @@ describe("computeHiddenIds", () => { toggles({ battleMarkers: false }), ); expect(hidden.has(300)).toBe(true); - expect(hidden.has(400)).toBe(false); + expect(hidden.has(150)).toBe(false); }); test("planet cascade and category toggle compose without duplicates", () => { @@ -262,7 +264,7 @@ describe("computeHiddenIds", () => { ); // 300 is already present from the cascade; the category toggle // re-adds it but Set semantics dedupe. - expect(hidden).toEqual(new Set([2, 100, 150, 200, 300, 400])); + expect(hidden).toEqual(new Set([2, 100, 150, 200, 300])); }); }); -- 2.52.0 From 75a42113738f4ef2b622a3634077d2d3283839de Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 00:14:14 +0200 Subject: [PATCH 2/9] =?UTF-8?q?fix(ui):=20F8-12=20=E2=80=94=20settle=20e2e?= =?UTF-8?q?=20regressions=20from=20the=20polish=20PR=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * state-binding.ts: normalise planet size by the engine's typical mid-range (`SIZE_NORMALIZER = 100`) so legacy fixtures recording Size in the hundreds do not blow up the world-unit disc and start overlapping neighbouring planets. The cube-root growth stays; Size-800 reads twice as big as Size-100. * cargo-routes.spec.ts: retire the selection-ring CirclePrim from the expected primitive count (4 planets + 3 cargo arrow lines = 7). * map-toggles.spec.ts: bombing-rings → planet outlines (the high-bit 0xc… range is permanently empty); planet-names persist test waits for the renderer's debug providers and for the IndexedDB write to flush before reload. Co-Authored-By: Claude Opus 4.7 --- ui/frontend/src/map/state-binding.ts | 23 +++++++++++++-------- ui/frontend/tests/e2e/cargo-routes.spec.ts | 8 +++++--- ui/frontend/tests/e2e/map-toggles.spec.ts | 24 ++++++++++++++++------ 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/ui/frontend/src/map/state-binding.ts b/ui/frontend/src/map/state-binding.ts index 5316138..4b27ea2 100644 --- a/ui/frontend/src/map/state-binding.ts +++ b/ui/frontend/src/map/state-binding.ts @@ -39,15 +39,21 @@ import { // extra lookup. /** - * KNOWN_PLANET_BASE_RADIUS_WORLD is the world-unit scale of the cube- - * root size mapping for planets with a known `size`. With α = 0.33 - * the on-screen pixel radius at default zoom is roughly - * `BASE * cbrt(size) * scaleRef`. The cube root keeps planet area - * proportional to volume, so a Size-8 planet reads twice as big as a - * Size-1 one. Owner can tune this together with `PLANET_SIZE_ZOOM_ALPHA` - * during the F8 manual-QA loop. + * KNOWN_PLANET_BASE_RADIUS_WORLD calibrates the cube-root size + * mapping so that an "average" planet (`size === SIZE_NORMALIZER`) + * renders at roughly this radius in world units when the camera is + * at the reference scale. Larger / smaller planets scale by + * `cbrt(size / SIZE_NORMALIZER)`, which keeps disc area proportional + * to volume — a Size-800 planet reads twice as big as a Size-100 one, + * eight times its volume but only 2× the radius. + * + * `SIZE_NORMALIZER` follows the engine's typical mid-range. Without + * it, the raw cube-root grows huge for legacy fixtures that record + * Size in hundreds; with it, the disc stays in a sane world-unit + * band so neighbouring planets never overlap on the default zoom. */ const KNOWN_PLANET_BASE_RADIUS_WORLD = 4; +const SIZE_NORMALIZER = 100; /** * UNKNOWN_PLANET_PIXEL_RADIUS matches issue #55 / п.28: planets with @@ -62,7 +68,8 @@ function styleFor(planet: ReportPlanet, theme: Theme): Style { if (planet.kind === "unidentified" || size === null || !(size > 0)) { return { ...fill, pointRadiusPx: UNKNOWN_PLANET_PIXEL_RADIUS }; } - const baseRadius = KNOWN_PLANET_BASE_RADIUS_WORLD * Math.cbrt(size); + const baseRadius = + KNOWN_PLANET_BASE_RADIUS_WORLD * Math.cbrt(size / SIZE_NORMALIZER); return { ...fill, pointRadiusWorld: baseRadius }; } diff --git a/ui/frontend/tests/e2e/cargo-routes.spec.ts b/ui/frontend/tests/e2e/cargo-routes.spec.ts index 87b44db..cfefebe 100644 --- a/ui/frontend/tests/e2e/cargo-routes.spec.ts +++ b/ui/frontend/tests/e2e/cargo-routes.spec.ts @@ -461,10 +461,12 @@ test("cargo-routes flow: pick a destination, arrow appears, reload restores", as lines: prims.filter((p) => p.kind === "line").length, }; }); - // `total` also counts the selected source planet's selection ring - // (F4 — one circle), so it is one more than the planet + line prims. + // F8-12 / #30 retired the selection-ring CirclePrim: selection is + // now drawn as an outline overlay around the planet disc, outside + // the primitive surface. Expected total = 4 planets + 3 cargo + // arrow lines. await expect.poll(debugLineCount, { timeout: 15000 }).toEqual({ - total: 8, + total: 7, lines: 3, }); diff --git a/ui/frontend/tests/e2e/map-toggles.spec.ts b/ui/frontend/tests/e2e/map-toggles.spec.ts index b0c96f5..60b7d9d 100644 --- a/ui/frontend/tests/e2e/map-toggles.spec.ts +++ b/ui/frontend/tests/e2e/map-toggles.spec.ts @@ -268,10 +268,12 @@ test("gear popover toggles a planet kind off and cascades onto its markers", asy await openGame(page); // Baseline — every planet shows up, plus the battle X-cross (2 - // LinePrim) and the bombing ring on the foreign planet. + // LinePrim). F8-12 / #30 retired the bombing CirclePrim; the + // visual cue is now a planet outline drawn outside the primitive + // surface, so the high-bit 0xc… range stays empty by construction. expect(await visiblePlanets(page)).toEqual([1, 2, 3, 4, 5]); expect(await visibleHighBitCount(page, 0xa0000000)).toBe(2); - expect(await visibleHighBitCount(page, 0xc0000000)).toBe(1); + expect(await visibleHighBitCount(page, 0xc0000000)).toBe(0); await page.getByTestId("map-toggles-trigger").click(); await expect(page.getByTestId("map-toggles-surface")).toBeVisible(); @@ -293,7 +295,6 @@ test("gear popover toggles a planet kind off and cascades onto its markers", asy expect(await visiblePlanets(page)).toEqual([1, 2, 4, 5]); expect(await visibleHighBitCount(page, 0xa0000000)).toBe(0); - expect(await visibleHighBitCount(page, 0xc0000000)).toBe(0); }); test("visibility fog toggles between the LOCAL-planet circle list and an empty overlay", async ({ @@ -385,15 +386,26 @@ test("planet-names toggle persists across a page reload (F8-12 / #29)", async ({ true, ); await page.getByTestId("map-toggles-planet-names").click(); - expect(await page.getByTestId("map-toggles-planet-names").isChecked()).toBe( - false, - ); + await expect + .poll(() => + page + .getByTestId("map-toggles-planet-names") + .isChecked(), + ) + .toBe(false); + // Wait for the IndexedDB write to flush so the reload observes the + // persisted blob instead of the pre-flip defaults. + await page.waitForTimeout(200); await page.reload({ waitUntil: "commit" }); await expect(page.getByTestId("active-view-map")).toHaveAttribute( "data-status", "ready", ); + await page.waitForFunction(() => { + const prims = window.__galaxyDebug?.getMapPrimitives?.() ?? []; + return prims.length > 0; + }); await page.getByTestId("map-toggles-trigger").click(); expect(await page.getByTestId("map-toggles-planet-names").isChecked()).toBe( false, -- 2.52.0 From 6996a79286d88c3f0bbeb5a4ba53e4ae8f71ae08 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 00:39:19 +0200 Subject: [PATCH 3/9] =?UTF-8?q?perf(ui):=20F8-12=20=E2=80=94=20pixel-space?= =?UTF-8?q?=20planet=20sizing=20+=20single-copy=20label/outline=20layers?= =?UTF-8?q?=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Planet size formula moves to pixel-space: `pointRadiusBasePx = 2 + 2 * cbrt(size / SIZE_NORMALIZER)`. The on-screen disc now reads ~4-7 px at the reference zoom regardless of how large the world rectangle is — the previous `world-units` formulation blew up on small maps and made Source-class planets swallow their neighbours. * Labels + outlines live in the origin copy only. The 9× replication across torus copies was the dominant cost on a 100+ planet map (Pixi.Text creation + Graphics rebuilds on every zoom step); the origin-copy layout is what the camera-wrap listener guarantees the user actually sees. * `setPlanetLabels` and `setPlanetOutlines` skip Pixi-object rebuilds when the input fingerprint is unchanged — toggle flips and selection changes now keep the existing Text / Graphics instances alive and only repaint the affected pieces. * `renderer.md` updated to the new contract. Co-Authored-By: Claude Opus 4.7 --- ui/docs/renderer.md | 22 +- ui/frontend/src/map/render.ts | 242 +++++++++++-------- ui/frontend/src/map/state-binding.ts | 30 +-- ui/frontend/src/map/world.ts | 39 +-- ui/frontend/tests/map-display-sizing.test.ts | 31 ++- ui/frontend/tests/map-hit-test.test.ts | 21 +- 6 files changed, 218 insertions(+), 167 deletions(-) diff --git a/ui/docs/renderer.md b/ui/docs/renderer.md index 2417b14..db991b5 100644 --- a/ui/docs/renderer.md +++ b/ui/docs/renderer.md @@ -73,14 +73,17 @@ and `displayPointRadiusWorld` (in `src/map/world.ts`) compute those world-space values; the hit-test reads the same helpers so the click zone always matches the visible footprint. -`style.pointRadiusWorld` is the alternative sizing rule for planet +`style.pointRadiusBasePx` is the alternative sizing rule for planet discs with a known `size`: the renderer treats the base radius as -world units and softens its growth with the camera scale through -`PLANET_SIZE_ZOOM_ALPHA` (0.33). At `scale = scaleRef` (the -"whole world fits the viewport" zoom) the visible radius equals the -base radius; zooming in grows it sub-linearly so on-screen pixel -size scales as `scale^α`. Setting both `pointRadiusWorld` and -`pointRadiusPx` ignores the pixel-space field. +on-screen pixels **at the reference scale** and grows its on-screen +pixel size with the camera scale through `PLANET_SIZE_ZOOM_ALPHA` +(0.33). At `scale = scaleRef` (the "whole world fits the viewport" +zoom) the visible disc reads at `pointRadiusBasePx` screen pixels; +zooming in grows it as `scale^α` instead of linearly. This keeps +known-size planets sane on every world rectangle — a 4000×4000 map +and a 100×100 map both default to the same on-screen size. Setting +both `pointRadiusBasePx` and `pointRadiusPx` ignores the pixel-space +field. Default hit slop in screen pixels: point=8, circle=6, line=6. These are touch-ergonomic defaults; per-primitive `hitSlopPx > 0` @@ -168,8 +171,9 @@ Per-primitive distance: small ergonomic margin on top. `visibleRadiusWorld` comes from `displayPointRadiusWorld` (F8-12 / #28 + #31): pixel-space `pointRadiusPx / scale` for unidentified planets and most ship - groups, softened-by-zoom `pointRadiusWorld * (scale / scaleRef)^(α-1)` - for planets with a known `size`. `pointRadiusPx` defaults to + groups, softened-by-zoom + `pointRadiusBasePx * (scale / scaleRef)^α / scale` for planets + with a known `size`. `pointRadiusPx` defaults to `DEFAULT_POINT_RADIUS_PX = 3` when neither field is set. - **Filled circle**: `distSq ≤ (radius + slopWorld)²` where `radius` is in world units. The circle counts as filled when diff --git a/ui/frontend/src/map/render.ts b/ui/frontend/src/map/render.ts index a9d56fd..4b6a201 100644 --- a/ui/frontend/src/map/render.ts +++ b/ui/frontend/src/map/render.ts @@ -453,29 +453,19 @@ export async function createRenderer(opts: RendererOptions): Promise { - const layer = new Container(); - c.addChild(layer); - return layer; - }); - - // Label layer per copy (F8-12 / #29). Labels render above every - // primitive so the text reads on top of fog / route lines, and the - // per-copy layout mirrors the primitive copies so wrap mode still - // shows the labels in whichever torus tile the user is panned over. - // Each layer holds one `Container` per planet (built lazily by - // `setPlanetLabels`), and we keep the scale + y-offset of those - // containers in lock-step with the camera in `updateLabelTransforms`. - const labelLayers: Container[] = copies.map((c) => { - const layer = new Container(); - c.addChild(layer); - return layer; - }); + // Outline + label layers (F8-12 / #29 + #30). Both live in the + // origin copy only — replicating Pixi.Text / Graphics across all + // nine torus copies is the dominant cost on a 100+ planet map, + // and the player almost never sees a label "wrap" out of the + // central tile because the camera-wrap listener snaps the centre + // back into `[0, W) × [0, H)` whenever it walks past the seam. + // Outlines sit between the primitive disc and the labels so the + // stroke reads against the planet fill while staying below the + // textual layer. + const outlineLayer = new Container(); + const labelLayer = new Container(); + copies[ORIGIN_COPY_INDEX].addChild(outlineLayer); + copies[ORIGIN_COPY_INDEX].addChild(labelLayer); // Per-id `Graphics` lookup. Each primitive lives in nine copies // (one per torus tile); pick-mode dims them by id, so the lookup @@ -563,19 +553,30 @@ export async function createRenderer(opts: RendererOptions): Promise(); + const planetLabelInstances = new Map(); let currentLabels: ReadonlyArray = []; + let currentLabelsFingerprint: string | null = null; + let currentLabelsSelectedId: number | null = null; + const fingerprintPlanetLabels = ( + labels: ReadonlyArray, + ): string => { + const parts: string[] = []; + for (const l of labels) { + parts.push(`${l.planetNumber};${l.name ?? ""};${l.numberLabel}`); + } + return parts.join("|"); + }; const LABEL_FONT_SIZE_PX = 11; const LABEL_LINE_GAP_PX = 0; const LABEL_FRAME_PADDING_PX = 3; @@ -608,10 +609,12 @@ export async function createRenderer(opts: RendererOptions): Promise { - for (const list of planetLabelInstances.values()) { - for (const entry of list) disposeLabelGfx(entry); + for (const entry of planetLabelInstances.values()) { + disposeLabelGfx(entry); } planetLabelInstances.clear(); + currentLabelsFingerprint = null; + currentLabelsSelectedId = null; }; const paintLabelEntry = (entry: LabelGfx, isSelected: boolean): void => { @@ -659,59 +662,64 @@ export async function createRenderer(opts: RendererOptions): Promise l.planetNumber === planetNumber, - ); - const anchorX = labelData?.x ?? planetPrim.x; - const anchorY = labelData?.y ?? planetPrim.y; - for (const entry of list) { - entry.container.x = anchorX; - entry.container.y = anchorY + visibleRadius + gapWorld; - entry.container.scale.set(labelScale); - } + for (const data of currentLabels) { + const entry = planetLabelInstances.get(data.planetNumber); + if (entry === undefined) continue; + const planetPrim = pointPrimitivesById.get(data.planetNumber); + const visibleRadius = + planetPrim === undefined + ? 0 + : displayPointRadiusWorld( + planetPrim.style, + cameraScale, + currentScaleRef, + ); + entry.container.x = data.x; + entry.container.y = data.y + visibleRadius + gapWorld; + entry.container.scale.set(labelScale); } }; - // Planet outline state (F8-12 / #30). One Graphics per planet per - // torus copy. Width and colour come from `PlanetOutlineSpec`; the - // radius is recomputed on every zoom step so the outline tracks - // the visible disc — the planet itself may grow / shrink with - // zoom (`pointRadiusWorld` softening) or stay constant + // Planet outline state (F8-12 / #30). One Graphics per planet, + // painted in the origin copy alongside the label container. Width + // and colour come from `PlanetOutlineSpec`; the radius is + // recomputed on every zoom step so the outline tracks the visible + // disc — the planet itself may grow / shrink with zoom + // (`pointRadiusBasePx` softening) or stay constant // (`pointRadiusPx` pixel-space). interface PlanetOutlineGfx { - readonly graphics: Graphics[]; + readonly graphics: Graphics; readonly spec: PlanetOutlineSpec; } const planetOutlineInstances = new Map(); + let currentOutlinesFingerprint: string | null = null; + const fingerprintPlanetOutlines = ( + outlines: ReadonlyArray, + ): string => { + const parts: string[] = []; + for (const o of outlines) { + parts.push(`${o.planetNumber};${o.color};${o.widthPx ?? -1}`); + } + return parts.join("|"); + }; const OUTLINE_DEFAULT_WIDTH_PX = 1.5; const OUTLINE_RADIUS_PADDING_PX = 1; // gap between disc edge and stroke const clearAllOutlines = (): void => { for (const entry of planetOutlineInstances.values()) { - for (const g of entry.graphics) { - g.parent?.removeChild(g); - g.destroy(); - } + entry.graphics.parent?.removeChild(entry.graphics); + entry.graphics.destroy(); } planetOutlineInstances.clear(); + currentOutlinesFingerprint = null; }; const paintOutlineEntry = (entry: PlanetOutlineGfx): void => { const cameraScale = viewport.scaled; if (cameraScale <= 0) return; const planetPrim = pointPrimitivesById.get(entry.spec.planetNumber); - if (planetPrim === undefined) { - for (const g of entry.graphics) g.clear(); - return; - } + entry.graphics.clear(); + if (planetPrim === undefined) return; const visibleRadius = displayPointRadiusWorld( planetPrim.style, cameraScale, @@ -721,15 +729,12 @@ export async function createRenderer(opts: RendererOptions): Promise { @@ -741,15 +746,22 @@ export async function createRenderer(opts: RendererOptions): Promise, ): void => { - clearAllOutlines(); - for (const spec of outlines) { - const list: Graphics[] = []; - for (const layer of outlineLayers) { - const g = new Graphics(); - layer.addChild(g); - list.push(g); + const fp = fingerprintPlanetOutlines(outlines); + if (fp === currentOutlinesFingerprint) { + // Same dataset — just refresh the geometry (the planet + // position / size may have changed in the underlying + // primitive). Keeps Graphics instances around. + for (const entry of planetOutlineInstances.values()) { + paintOutlineEntry(entry); } - const entry: PlanetOutlineGfx = { graphics: list, spec }; + return; + } + clearAllOutlines(); + currentOutlinesFingerprint = fp; + for (const spec of outlines) { + const g = new Graphics(); + outlineLayer.addChild(g); + const entry: PlanetOutlineGfx = { graphics: g, spec }; planetOutlineInstances.set(spec.planetNumber, entry); paintOutlineEntry(entry); } @@ -760,33 +772,55 @@ export async function createRenderer(opts: RendererOptions): Promise, selectedPlanetId: number | null, ): void => { + const fp = fingerprintPlanetLabels(labels); + const sameContent = fp === currentLabelsFingerprint; + const sameSelection = selectedPlanetId === currentLabelsSelectedId; + if (sameContent && sameSelection) { + // Position-only update (a zoom step may have moved planets + // in the data) — keep Pixi.Text instances alive. + currentLabels = labels.slice(); + updateLabelTransforms(); + return; + } + if (sameContent) { + // Text + planet identity unchanged; only the selection frame + // flips. Repaint the affected entries instead of rebuilding. + currentLabels = labels.slice(); + for (const data of labels) { + const entry = planetLabelInstances.get(data.planetNumber); + if (entry === undefined) continue; + paintLabelEntry(entry, data.planetNumber === selectedPlanetId); + } + currentLabelsSelectedId = selectedPlanetId; + updateLabelTransforms(); + requestRender(); + return; + } clearAllLabels(); currentLabels = labels.slice(); + currentLabelsFingerprint = fp; + currentLabelsSelectedId = selectedPlanetId; for (const data of labels) { - const list: LabelGfx[] = []; - for (const layer of labelLayers) { - const container = new Container(); - const frame = new Graphics(); - frame.visible = false; - container.addChild(frame); - const nameText = - data.name === null - ? null - : buildLabelText(data.name, theme.labelText); - if (nameText !== null) container.addChild(nameText); - const numberText = buildLabelText(data.numberLabel, theme.labelMuted); - container.addChild(numberText); - layer.addChild(container); - const entry: LabelGfx = { - container, - frame, - nameText, - numberText, - }; - paintLabelEntry(entry, data.planetNumber === selectedPlanetId); - list.push(entry); - } - planetLabelInstances.set(data.planetNumber, list); + const container = new Container(); + const frame = new Graphics(); + frame.visible = false; + container.addChild(frame); + const nameText = + data.name === null + ? null + : buildLabelText(data.name, theme.labelText); + if (nameText !== null) container.addChild(nameText); + const numberText = buildLabelText(data.numberLabel, theme.labelMuted); + container.addChild(numberText); + labelLayer.addChild(container); + const entry: LabelGfx = { + container, + frame, + nameText, + numberText, + }; + paintLabelEntry(entry, data.planetNumber === selectedPlanetId); + planetLabelInstances.set(data.planetNumber, entry); } updateLabelTransforms(); requestRender(); diff --git a/ui/frontend/src/map/state-binding.ts b/ui/frontend/src/map/state-binding.ts index 4b27ea2..a858895 100644 --- a/ui/frontend/src/map/state-binding.ts +++ b/ui/frontend/src/map/state-binding.ts @@ -39,20 +39,21 @@ import { // extra lookup. /** - * KNOWN_PLANET_BASE_RADIUS_WORLD calibrates the cube-root size - * mapping so that an "average" planet (`size === SIZE_NORMALIZER`) - * renders at roughly this radius in world units when the camera is - * at the reference scale. Larger / smaller planets scale by + * KNOWN_PLANET_MIN_RADIUS_PX / KNOWN_PLANET_GROWTH_PX calibrate the + * cube-root size mapping in screen-pixel space. At the "whole world + * fits" reference zoom (`scaleRef`) a Size-`SIZE_NORMALIZER` planet + * reads at `MIN + GROWTH` pixels; smaller / larger planets scale by * `cbrt(size / SIZE_NORMALIZER)`, which keeps disc area proportional - * to volume — a Size-800 planet reads twice as big as a Size-100 one, - * eight times its volume but only 2× the radius. + * to volume — Size-800 reads twice as big as Size-100. The pixel + * frame is the right one to calibrate in, because it stays sane no + * matter how large the world rectangle is. * - * `SIZE_NORMALIZER` follows the engine's typical mid-range. Without - * it, the raw cube-root grows huge for legacy fixtures that record - * Size in hundreds; with it, the disc stays in a sane world-unit - * band so neighbouring planets never overlap on the default zoom. + * The renderer combines these with `PLANET_SIZE_ZOOM_ALPHA` so the + * pixel radius grows sub-linearly as the player zooms in: 10× zoom + * scales the radius by ~2.15×, not by 10×. */ -const KNOWN_PLANET_BASE_RADIUS_WORLD = 4; +const KNOWN_PLANET_MIN_RADIUS_PX = 2; +const KNOWN_PLANET_GROWTH_PX = 2; const SIZE_NORMALIZER = 100; /** @@ -68,9 +69,10 @@ function styleFor(planet: ReportPlanet, theme: Theme): Style { if (planet.kind === "unidentified" || size === null || !(size > 0)) { return { ...fill, pointRadiusPx: UNKNOWN_PLANET_PIXEL_RADIUS }; } - const baseRadius = - KNOWN_PLANET_BASE_RADIUS_WORLD * Math.cbrt(size / SIZE_NORMALIZER); - return { ...fill, pointRadiusWorld: baseRadius }; + const basePx = + KNOWN_PLANET_MIN_RADIUS_PX + + KNOWN_PLANET_GROWTH_PX * Math.cbrt(size / SIZE_NORMALIZER); + return { ...fill, pointRadiusBasePx: basePx }; } function fillForKind( diff --git a/ui/frontend/src/map/world.ts b/ui/frontend/src/map/world.ts index 054df0b..2e51235 100644 --- a/ui/frontend/src/map/world.ts +++ b/ui/frontend/src/map/world.ts @@ -26,11 +26,12 @@ export type WrapMode = "torus" | "no-wrap"; // thickening that the old contract promised but never delivered is // gone. // -// `pointRadiusWorld` is the opposite intent: a planet's known -// `size` produces a base radius in world units, and the renderer -// softens its growth with the camera scale through -// `PLANET_SIZE_ZOOM_ALPHA` (F8-12 / #31). When `pointRadiusWorld` -// is set on a `PointPrim`, `pointRadiusPx` is ignored. +// `pointRadiusBasePx` is the opposite intent: a planet's known +// `size` produces a base on-screen pixel radius at the "whole world +// fits" reference zoom, and the renderer grows it sub-linearly with +// the camera scale through `PLANET_SIZE_ZOOM_ALPHA` (F8-12 / #31). +// When `pointRadiusBasePx` is set on a `PointPrim`, `pointRadiusPx` +// is ignored. export interface Style { fillColor?: number; // 0xRRGGBB fillAlpha?: number; // 0..1 @@ -38,7 +39,7 @@ export interface Style { strokeAlpha?: number; // 0..1 strokeWidthPx?: number; // screen pixels at any zoom pointRadiusPx?: number; // screen pixels at any zoom (for kind === 'point') - pointRadiusWorld?: number; // world units, softened by PLANET_SIZE_ZOOM_ALPHA + pointRadiusBasePx?: number; // screen pixels at scaleRef, softened by PLANET_SIZE_ZOOM_ALPHA // strokeDashPx — when set on a `LinePrim`, the line is rendered as // a dashed pattern whose dash and gap are both this length. When // unset (or zero), the stroke is solid. Interpreted in world-unit @@ -231,12 +232,13 @@ export const PLANET_SIZE_ZOOM_ALPHA = 0.33; /** * displayPointRadiusWorld returns the world-space radius the renderer * should draw a `PointPrim` with at the current camera scale. When - * `style.pointRadiusWorld` is set (known-size planets), the radius is - * the base world radius softened by `PLANET_SIZE_ZOOM_ALPHA` relative - * to `scaleRef` — at `scale = scaleRef` it equals the base radius; - * zooming in grows it sub-linearly. Otherwise the radius collapses to - * `pointRadiusPx / cameraScale` so the on-screen disc stays the same - * pixel size regardless of zoom. + * `style.pointRadiusBasePx` is set (known-size planets), the radius + * is the base pixel size at `scaleRef`, grown by + * `(scale / scaleRef)^α` and converted back into world units — + * `α = PLANET_SIZE_ZOOM_ALPHA`. At `scale = scaleRef` the visible + * pixel size equals the base; a 10× zoom-in only grows it ~2.15×. + * Otherwise the radius collapses to `pointRadiusPx / cameraScale` so + * the on-screen disc stays the same pixel size regardless of zoom. * * Used by both the renderer (`render.ts:drawPoint`) and the hit-test * (`hit-test.ts:matchPoint`) so the visible disc and the click zone @@ -247,12 +249,17 @@ export function displayPointRadiusWorld( cameraScale: number, scaleRef: number, ): number { - if (style.pointRadiusWorld !== undefined) { - const softening = Math.pow(cameraScale / scaleRef, PLANET_SIZE_ZOOM_ALPHA - 1); - return style.pointRadiusWorld * softening; + if (cameraScale <= 0) { + return style.pointRadiusBasePx ?? style.pointRadiusPx ?? DEFAULT_POINT_RADIUS_PX; + } + if (style.pointRadiusBasePx !== undefined) { + const refScale = scaleRef > 0 ? scaleRef : cameraScale; + const screenPx = + style.pointRadiusBasePx * + Math.pow(cameraScale / refScale, PLANET_SIZE_ZOOM_ALPHA); + return screenPx / cameraScale; } const px = style.pointRadiusPx ?? DEFAULT_POINT_RADIUS_PX; - if (cameraScale <= 0) return px; return px / cameraScale; } diff --git a/ui/frontend/tests/map-display-sizing.test.ts b/ui/frontend/tests/map-display-sizing.test.ts index 0c09206..d0ddc96 100644 --- a/ui/frontend/tests/map-display-sizing.test.ts +++ b/ui/frontend/tests/map-display-sizing.test.ts @@ -32,21 +32,24 @@ describe("displayPointRadiusWorld — pixel-space (pointRadiusPx)", () => { }); }); -describe("displayPointRadiusWorld — softened by zoom (pointRadiusWorld)", () => { - test("at scale=scaleRef the visible radius equals the base radius", () => { +describe("displayPointRadiusWorld — softened by zoom (pointRadiusBasePx)", () => { + test("at scale=scaleRef the on-screen pixel size equals the base", () => { const radius = displayPointRadiusWorld( - { pointRadiusWorld: 6 }, + { pointRadiusBasePx: 6 }, 0.2, 0.2, ); - expect(radius).toBeCloseTo(6); + // world units → 6 (base px) / 0.2 (scale) = 30 + expect(radius).toBeCloseTo(30); + // confirm pixel-space: world * scale ≈ 6. + expect(radius * 0.2).toBeCloseTo(6); }); - test("zooming in grows the radius sub-linearly", () => { - const r1 = displayPointRadiusWorld({ pointRadiusWorld: 6 }, 0.2, 0.2); - const r10 = displayPointRadiusWorld({ pointRadiusWorld: 6 }, 2.0, 0.2); - // On-screen pixel size grows by scale^α (α = 0.33) instead of - // linearly: 10x zoom → ~10^0.33 ≈ 2.15x growth. + test("zooming in grows the on-screen pixel size sub-linearly", () => { + const r1 = displayPointRadiusWorld({ pointRadiusBasePx: 6 }, 0.2, 0.2); + const r10 = displayPointRadiusWorld({ pointRadiusBasePx: 6 }, 2.0, 0.2); + // On-screen pixel size grows by scale^α (α = 0.33): 10x zoom + // → 10^0.33 ≈ 2.15x growth. const onScreenAt1 = r1 * 0.2; const onScreenAt10 = r10 * 2.0; expect(onScreenAt10 / onScreenAt1).toBeCloseTo( @@ -55,14 +58,16 @@ describe("displayPointRadiusWorld — softened by zoom (pointRadiusWorld)", () = ); }); - test("ignores pointRadiusPx when pointRadiusWorld is set", () => { + test("ignores pointRadiusPx when pointRadiusBasePx is set", () => { const r = displayPointRadiusWorld( - { pointRadiusPx: 99, pointRadiusWorld: 4 }, + { pointRadiusPx: 99, pointRadiusBasePx: 4 }, 0.4, 0.2, ); - // World radius is the base softened by (0.4/0.2)^(α-1). - expect(r).toBeCloseTo(4 * Math.pow(2, PLANET_SIZE_ZOOM_ALPHA - 1), 4); + // On-screen pixel size: 4 * (0.4 / 0.2)^α = 4 * 2^0.33 + // In world units: (4 * 2^0.33) / 0.4. + const expected = (4 * Math.pow(2, PLANET_SIZE_ZOOM_ALPHA)) / 0.4; + expect(r).toBeCloseTo(expected, 4); }); }); diff --git a/ui/frontend/tests/map-hit-test.test.ts b/ui/frontend/tests/map-hit-test.test.ts index 1fd03ea..3458549 100644 --- a/ui/frontend/tests/map-hit-test.test.ts +++ b/ui/frontend/tests/map-hit-test.test.ts @@ -280,20 +280,19 @@ describe("hitTest — empty results and scale", () => { expect(ids(w, "torus", cam05, cursorOver(516, 500, cam05))).toBe(null); }); - test("pointRadiusWorld scales softly with zoom (F8-12 / #31)", () => { - // world 1000×1000, viewport 200×200 → scaleRef = 0.2 (every - // world unit becomes 0.2 px on screen at the "whole world fits" - // zoom). PLANET_SIZE_ZOOM_ALPHA is 0.33: r_display = - // r_base * (scale / scaleRef)^(α - 1). + test("pointRadiusBasePx scales softly with zoom (F8-12 / #31)", () => { + // world 1000×1000, viewport 200×200 → scaleRef = 0.2. At + // scale=0.5 the on-screen pixel size is + // basePx * (scale/scaleRef)^α + // → 6 * (0.5/0.2)^0.33 ≈ 6 * 1.354 ≈ 8.13 px. In world units + // that becomes ≈ 16.27, plus slop 4/0.5 = 8 → threshold ≈ 24.27. const cam05 = camAt(500, 500, 0.5); const wBase = new World(1000, 1000, [ - point(1, 500, 500, { style: { pointRadiusWorld: 6 } }), + point(1, 500, 500, { style: { pointRadiusBasePx: 6 } }), ]); - // At scale=0.5 the softening factor is (0.5/0.2)^(0.33-1) ≈ 0.554. - // Visible radius ≈ 3.32 world units, slop 8, threshold ≈ 11.32. - expect(ids(wBase, "torus", cam05, cursorOver(510, 500, cam05))).toBe(1); - // Cursor 12 world units away exceeds the threshold. - expect(ids(wBase, "torus", cam05, cursorOver(512, 500, cam05))).toBe(null); + expect(ids(wBase, "torus", cam05, cursorOver(520, 500, cam05))).toBe(1); + // Cursor 26 world units away exceeds the threshold (~24.27). + expect(ids(wBase, "torus", cam05, cursorOver(526, 500, cam05))).toBe(null); }); }); -- 2.52.0 From 6c3cd2547607fc9b1556de29096bfd18fd6b8f4b Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 08:53:27 +0200 Subject: [PATCH 4/9] add converted legacy report --- tools/local-dev/reports/dg/Tancordia039.json | 32449 +++++++++++++++++ 1 file changed, 32449 insertions(+) create mode 100644 tools/local-dev/reports/dg/Tancordia039.json diff --git a/tools/local-dev/reports/dg/Tancordia039.json b/tools/local-dev/reports/dg/Tancordia039.json new file mode 100644 index 0000000..8afc338 --- /dev/null +++ b/tools/local-dev/reports/dg/Tancordia039.json @@ -0,0 +1,32449 @@ +{ + "version": 1, + "report": { + "version": 0, + "turn": 39, + "mapWidth": 210, + "mapHeight": 210, + "mapPlanets": 140, + "race": "Tancordia", + "votes": 16.39, + "voteFor": "Pahanchiks", + "player": [ + { + "name": "6AHgA", + "drive": 6.79, + "weapons": 2.52, + "shields": 2.54, + "cargo": 1, + "population": 958.1, + "industry": 51.61, + "planets": 7, + "relation": "War", + "votes": 0.96, + "extinct": false + }, + { + "name": "Acrosi", + "drive": 5.02, + "weapons": 3.71, + "shields": 3.39, + "cargo": 1.4, + "population": 874.56, + "industry": 282.29, + "planets": 17, + "relation": "War", + "votes": 0.87, + "extinct": false + }, + { + "name": "ALM", + "drive": 9.09, + "weapons": 2.5, + "shields": 2.4, + "cargo": 4.2, + "population": 605.75, + "industry": 500, + "planets": 2, + "relation": "War", + "votes": 0.61, + "extinct": false + }, + { + "name": "Bullet", + "drive": 5.48, + "weapons": 3.83, + "shields": 3.45, + "cargo": 1, + "population": 62.48, + "industry": 9.85, + "planets": 10, + "relation": "War", + "votes": 0.06, + "extinct": false + }, + { + "name": "Eraser", + "drive": 3.99, + "weapons": 2.31, + "shields": 1.6, + "cargo": 1.4, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": false + }, + { + "name": "Mad", + "drive": 5.04, + "weapons": 2.93, + "shields": 1.5, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": false + }, + { + "name": "NHL", + "drive": 4.88, + "weapons": 2.22, + "shields": 5.23, + "cargo": 1, + "population": 1812.04, + "industry": 1484.01, + "planets": 17, + "relation": "Peace", + "votes": 1.81, + "extinct": false + }, + { + "name": "Pahanchiks", + "drive": 5.27, + "weapons": 4.88, + "shields": 5.38, + "cargo": 1, + "population": 11738.95, + "industry": 7338.55, + "planets": 23, + "relation": "Peace", + "votes": 16.39, + "extinct": false + }, + { + "name": "Tancordia", + "drive": 5.4, + "weapons": 3.29, + "shields": 4.68, + "cargo": 1, + "population": 16386.11, + "industry": 10789.88, + "planets": 24, + "relation": "-", + "votes": 15.21, + "extinct": false + }, + { + "name": "Varlon", + "drive": 2.68, + "weapons": 1.22, + "shields": 1.26, + "cargo": 1, + "population": 3474.31, + "industry": 2494.53, + "planets": 6, + "relation": "Peace", + "votes": 0, + "extinct": false + }, + { + "name": "CRYPT", + "drive": 5.27, + "weapons": 1.8, + "shields": 1.93, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": true + }, + { + "name": "Devisers", + "drive": 7.2, + "weapons": 1.2, + "shields": 3, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": true + }, + { + "name": "Greenday", + "drive": 5.13, + "weapons": 2, + "shields": 1.4, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": true + }, + { + "name": "Imperial", + "drive": 3.5, + "weapons": 1.1, + "shields": 1, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "War", + "votes": 0, + "extinct": true + }, + { + "name": "Loratis", + "drive": 3, + "weapons": 1.6, + "shields": 1.1, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": true + }, + { + "name": "skif", + "drive": 3.02, + "weapons": 1, + "shields": 2.48, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": true + }, + { + "name": "WITCHHUNTERS", + "drive": 4.01, + "weapons": 1.52, + "shields": 4.83, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "War", + "votes": 0, + "extinct": true + }, + { + "name": "Yoshe", + "drive": 5.2, + "weapons": 1, + "shields": 1, + "cargo": 1, + "population": 0, + "industry": 0, + "planets": 0, + "relation": "Peace", + "votes": 0, + "extinct": true + } + ], + "localScience": [ + { + "name": "_TerraForming", + "drive": 1, + "weapons": 0, + "shields": 0, + "cargo": 0 + } + ], + "localShipClass": [ + { + "name": "HolyPilgrim", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "name": "HolyShout", + "drive": 26.22, + "armament": 1, + "weapons": 1.5, + "shields": 4.26, + "cargo": 1.01, + "mass": 32.99 + }, + { + "name": "HolyLight", + "drive": 63.65, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 35.35, + "mass": 99 + }, + { + "name": "HolySpirit", + "drive": 14.18, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 10.57, + "mass": 24.75 + }, + { + "name": "HolyRevenge", + "drive": 8.3, + "armament": 22, + "weapons": 1, + "shields": 4.95, + "cargo": 0, + "mass": 24.75 + }, + { + "name": "HolyWrath", + "drive": 44.79, + "armament": 8, + "weapons": 10.71, + "shields": 6.02, + "cargo": 0, + "mass": 99.01 + }, + { + "name": "HolyDestroyer", + "drive": 20.27, + "armament": 1, + "weapons": 24.47, + "shields": 4.76, + "cargo": 0, + "mass": 49.5 + }, + { + "name": "HolyWord", + "drive": 20.03, + "armament": 48, + "weapons": 1, + "shields": 4.97, + "cargo": 0, + "mass": 49.5 + }, + { + "name": "HolyWarrior", + "drive": 40, + "armament": 8, + "weapons": 8, + "shields": 23, + "cargo": 0, + "mass": 99 + }, + { + "name": "VarlonEyes", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "name": "HolyFear", + "drive": 23.56, + "armament": 50, + "weapons": 1, + "shields": 9.81, + "cargo": 0, + "mass": 58.87 + }, + { + "name": "HolyPeace", + "drive": 1, + "armament": 10, + "weapons": 11, + "shields": 37.5, + "cargo": 0, + "mass": 99 + }, + { + "name": "HolyFather", + "drive": 1, + "armament": 59, + "weapons": 2, + "shields": 38, + "cargo": 0, + "mass": 99 + }, + { + "name": "HolyMother", + "drive": 1, + "armament": 121, + "weapons": 1, + "shields": 37, + "cargo": 0, + "mass": 99 + }, + { + "name": "Angel", + "drive": 1, + "armament": 2, + "weapons": 11, + "shields": 42.81, + "cargo": 24, + "mass": 84.31 + }, + { + "name": "HolySign", + "drive": 1, + "armament": 15, + "weapons": 15, + "shields": 47.7, + "cargo": 0, + "mass": 168.7 + }, + { + "name": "ArchAngel", + "drive": 1, + "armament": 1, + "weapons": 1, + "shields": 15.3, + "cargo": 53.42, + "mass": 70.72 + }, + { + "name": "HolyMan", + "drive": 1, + "armament": 1, + "weapons": 2, + "shields": 26.5, + "cargo": 20, + "mass": 49.5 + }, + { + "name": "HolyHorror", + "drive": 1, + "armament": 160, + "weapons": 2, + "shields": 36, + "cargo": 0, + "mass": 198 + }, + { + "name": "HolyTrinity", + "drive": 1, + "armament": 3, + "weapons": 34.5, + "shields": 29, + "cargo": 0, + "mass": 99 + }, + { + "name": "HolyStone", + "drive": 0, + "armament": 0, + "weapons": 0, + "shields": 2, + "cargo": 0, + "mass": 2 + }, + { + "name": "HolySting", + "drive": 1, + "armament": 1, + "weapons": 1, + "shields": 0, + "cargo": 0, + "mass": 2 + }, + { + "name": "HolyGrail", + "drive": 1, + "armament": 150, + "weapons": 1, + "shields": 22.5, + "cargo": 0, + "mass": 99 + }, + { + "name": "HolySpear", + "drive": 1, + "armament": 1, + "weapons": 30, + "shields": 18.5, + "cargo": 0, + "mass": 49.5 + }, + { + "name": "HolySword", + "drive": 1, + "armament": 10, + "weapons": 11.2, + "shields": 21.82, + "cargo": 0, + "mass": 84.42 + }, + { + "name": "HolyDefender", + "drive": 1, + "armament": 1, + "weapons": 1, + "shields": 1, + "cargo": 0, + "mass": 3 + }, + { + "name": "HolyRavings", + "drive": 0, + "armament": 1, + "weapons": 1, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "name": "HolyGrail2", + "drive": 1, + "armament": 75, + "weapons": 2, + "shields": 22, + "cargo": 0, + "mass": 99 + }, + { + "name": "HolyMartyr", + "drive": 1, + "armament": 60, + "weapons": 1, + "shields": 18, + "cargo": 0, + "mass": 49.5 + }, + { + "name": "Saviour", + "drive": 43.9, + "armament": 8, + "weapons": 9, + "shields": 20.76, + "cargo": 0, + "mass": 105.16 + }, + { + "name": "Paladin", + "drive": 1, + "armament": 160, + "weapons": 1, + "shields": 24.05, + "cargo": 0, + "mass": 105.55 + }, + { + "name": "6ECnPu3OPHuK", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "name": "Crusader", + "drive": 1, + "armament": 50, + "weapons": 3, + "shields": 28.05, + "cargo": 0, + "mass": 105.55 + }, + { + "name": "HolyFanatic", + "drive": 1, + "armament": 11, + "weapons": 12, + "shields": 24.98, + "cargo": 0, + "mass": 97.98 + }, + { + "name": "HolyWhip", + "drive": 1, + "armament": 60, + "weapons": 2, + "shields": 22.42, + "cargo": 0, + "mass": 84.42 + }, + { + "name": "HolyGrail3", + "drive": 1, + "armament": 50, + "weapons": 3, + "shields": 21.5, + "cargo": 0, + "mass": 99 + }, + { + "name": "HolyPower", + "drive": 1, + "armament": 150, + "weapons": 1, + "shields": 21.48, + "cargo": 0, + "mass": 97.98 + }, + { + "name": "HolyHope", + "drive": 1, + "armament": 125, + "weapons": 1, + "shields": 20.42, + "cargo": 0, + "mass": 84.42 + }, + { + "name": "Transport-1", + "drive": 63.18, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 35.83, + "mass": 99.01 + }, + { + "name": "HolySymbol", + "drive": 3, + "armament": 1, + "weapons": 2, + "shields": 2.07, + "cargo": 0, + "mass": 7.07 + }, + { + "name": "HolyBlade", + "drive": 3, + "armament": 1, + "weapons": 8, + "shields": 6, + "cargo": 0, + "mass": 17 + } + ], + "otherShipClass": [ + { + "race": "ALM", + "name": "ALMDrone", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "NHL", + "name": "La_Fontaine", + "drive": 14.5, + "armament": 1, + "weapons": 1, + "shields": 0, + "cargo": 1, + "mass": 16.5 + }, + { + "race": "NHL", + "name": "Peca", + "drive": 7, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 1.25, + "mass": 8.25 + }, + { + "race": "NHL", + "name": "Lemieux", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "NHL", + "name": "Zubov", + "drive": 19.53, + "armament": 5, + "weapons": 10, + "shields": 14, + "cargo": 0, + "mass": 63.53 + }, + { + "race": "NHL", + "name": "Krivokrasov", + "drive": 21.52, + "armament": 66, + "weapons": 1, + "shields": 5, + "cargo": 0, + "mass": 60.02 + }, + { + "race": "NHL", + "name": "Ulanov", + "drive": 36.93, + "armament": 2, + "weapons": 26, + "shields": 44.2, + "cargo": 0, + "mass": 120.13 + }, + { + "race": "NHL", + "name": "Haverchuk", + "drive": 74.39, + "armament": 145, + "weapons": 2, + "shields": 21.6, + "cargo": 0, + "mass": 241.99 + }, + { + "race": "NHL", + "name": "Tkachuk", + "drive": 38.52, + "armament": 50, + "weapons": 3, + "shields": 10.3, + "cargo": 0, + "mass": 125.32 + }, + { + "race": "NHL", + "name": "Lemieux_2", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 2, + "cargo": 0, + "mass": 3 + }, + { + "race": "NHL", + "name": "Koivu", + "drive": 6.3, + "armament": 1, + "weapons": 3, + "shields": 3, + "cargo": 0, + "mass": 12.3 + }, + { + "race": "NHL", + "name": "Jagr", + "drive": 15.29, + "armament": 30, + "weapons": 2, + "shields": 13.4, + "cargo": 0, + "mass": 59.69 + }, + { + "race": "NHL", + "name": "Holzinger", + "drive": 9.54, + "armament": 2, + "weapons": 7, + "shields": 11, + "cargo": 0, + "mass": 31.04 + }, + { + "race": "NHL", + "name": "Smehlik", + "drive": 10.25, + "armament": 2, + "weapons": 4, + "shields": 3.76, + "cargo": 0, + "mass": 20.01 + }, + { + "race": "NHL", + "name": "Burke", + "drive": 0, + "armament": 1, + "weapons": 25, + "shields": 37, + "cargo": 0, + "mass": 62 + }, + { + "race": "NHL", + "name": "Vanbisbruk", + "drive": 0, + "armament": 10, + "weapons": 8, + "shields": 16, + "cargo": 0, + "mass": 60 + }, + { + "race": "NHL", + "name": "Barasso", + "drive": 0, + "armament": 100, + "weapons": 1, + "shields": 9.6, + "cargo": 0, + "mass": 60.1 + }, + { + "race": "NHL", + "name": "Fuhr_3", + "drive": 0, + "armament": 0, + "weapons": 0, + "shields": 3, + "cargo": 0, + "mass": 3 + }, + { + "race": "NHL", + "name": "Trefilov", + "drive": 0, + "armament": 1, + "weapons": 31, + "shields": 29.1, + "cargo": 0, + "mass": 60.1 + }, + { + "race": "NHL", + "name": "Fuhr_2", + "drive": 0, + "armament": 0, + "weapons": 0, + "shields": 2, + "cargo": 0, + "mass": 2 + }, + { + "race": "NHL", + "name": "Dawe", + "drive": 8, + "armament": 1, + "weapons": 1, + "shields": 2.02, + "cargo": 1, + "mass": 12.02 + }, + { + "race": "NHL", + "name": "Shilds", + "drive": 0, + "armament": 100, + "weapons": 2, + "shields": 19, + "cargo": 0, + "mass": 120 + }, + { + "race": "NHL", + "name": "Grosek", + "drive": 37.64, + "armament": 1, + "weapons": 1, + "shields": 3, + "cargo": 18, + "mass": 59.64 + }, + { + "race": "NHL", + "name": "Boughner", + "drive": 0, + "armament": 123, + "weapons": 1, + "shields": 0, + "cargo": 0, + "mass": 62 + }, + { + "race": "NHL", + "name": "Ciccarelli", + "drive": 0, + "armament": 119, + "weapons": 1, + "shields": 0, + "cargo": 0, + "mass": 60 + }, + { + "race": "Eraser", + "name": "Engine", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Acrosi", + "name": "for_peace_from_Acrosi", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Acrosi", + "name": "Drone", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Acrosi", + "name": "Col-20", + "drive": 14.5, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 9.64, + "mass": 24.14 + }, + { + "race": "Acrosi", + "name": "BackHit", + "drive": 2.08, + "armament": 1, + "weapons": 1, + "shields": 1.08, + "cargo": 0, + "mass": 4.16 + }, + { + "race": "Acrosi", + "name": "Gunner", + "drive": 10, + "armament": 2, + "weapons": 12, + "shields": 9.62, + "cargo": 0, + "mass": 37.62 + }, + { + "race": "Acrosi", + "name": "Gunner-1", + "drive": 17.5, + "armament": 1, + "weapons": 9, + "shields": 8, + "cargo": 0, + "mass": 34.5 + }, + { + "race": "Acrosi", + "name": "Quick-Imp", + "drive": 2.37, + "armament": 1, + "weapons": 1, + "shields": 1, + "cargo": 1, + "mass": 5.37 + }, + { + "race": "Acrosi", + "name": "Tarmanguny", + "drive": 0, + "armament": 1, + "weapons": 5, + "shields": 27, + "cargo": 0, + "mass": 32 + }, + { + "race": "Acrosi", + "name": "No", + "drive": 7, + "armament": 1, + "weapons": 2, + "shields": 5.82, + "cargo": 0, + "mass": 14.82 + }, + { + "race": "Acrosi", + "name": "Broad-Sword", + "drive": 12.18, + "armament": 25, + "weapons": 1, + "shields": 5, + "cargo": 0, + "mass": 30.18 + }, + { + "race": "Acrosi", + "name": "Mindesoubal", + "drive": 0, + "armament": 15, + "weapons": 4, + "shields": 5.62, + "cargo": 0, + "mass": 37.62 + }, + { + "race": "Bullet", + "name": "Bullet", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Bullet", + "name": "Jlob", + "drive": 53, + "armament": 7, + "weapons": 8, + "shields": 20, + "cargo": 1, + "mass": 106 + }, + { + "race": "Bullet", + "name": "HeavyDuty", + "drive": 163.2, + "armament": 175, + "weapons": 1.5, + "shields": 31, + "cargo": 0, + "mass": 326.2 + }, + { + "race": "Bullet", + "name": "Stylus", + "drive": 82, + "armament": 1, + "weapons": 50, + "shields": 31, + "cargo": 0, + "mass": 163 + }, + { + "race": "Bullet", + "name": "Bomb", + "drive": 1.5, + "armament": 0, + "weapons": 0, + "shields": 1.5, + "cargo": 0, + "mass": 3 + }, + { + "race": "Bullet", + "name": "antiDOG", + "drive": 27, + "armament": 1, + "weapons": 15, + "shields": 12, + "cargo": 0, + "mass": 54 + }, + { + "race": "Bullet", + "name": "Perf87", + "drive": 30, + "armament": 87, + "weapons": 1, + "shields": 10, + "cargo": 0, + "mass": 84 + }, + { + "race": "Bullet", + "name": "Fighter", + "drive": 20, + "armament": 5, + "weapons": 12.5, + "shields": 10, + "cargo": 0, + "mass": 67.5 + }, + { + "race": "Bullet", + "name": "Perf83", + "drive": 34, + "armament": 83, + "weapons": 1, + "shields": 10, + "cargo": 0, + "mass": 86 + }, + { + "race": "Bullet", + "name": "SuperDrone", + "drive": 1.5, + "armament": 0, + "weapons": 0, + "shields": 1.5, + "cargo": 0, + "mass": 3 + }, + { + "race": "Bullet", + "name": "Engine", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Bullet", + "name": "ABOCb", + "drive": 10, + "armament": 1, + "weapons": 1, + "shields": 4, + "cargo": 1.5, + "mass": 16.5 + }, + { + "race": "6AHgA", + "name": "Sp-16", + "drive": 30, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 3, + "mass": 33 + }, + { + "race": "6AHgA", + "name": "Sp-10", + "drive": 17.75, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 7, + "mass": 24.75 + }, + { + "race": "6AHgA", + "name": "6ECnPu3OPHuK", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "6AHgA", + "name": "Eraser", + "drive": 22, + "armament": 3, + "weapons": 7.6, + "shields": 12.3, + "cargo": 0, + "mass": 49.5 + }, + { + "race": "6AHgA", + "name": "DRon", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "6AHgA", + "name": "Cpty_40", + "drive": 29.5, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 20, + "mass": 49.5 + }, + { + "race": "6AHgA", + "name": "Gun_99", + "drive": 49.5, + "armament": 1, + "weapons": 32.5, + "shields": 17, + "cargo": 0, + "mass": 99 + }, + { + "race": "6AHgA", + "name": "Tur_129", + "drive": 64.66, + "armament": 4, + "weapons": 19.5, + "shields": 15.91, + "cargo": 0, + "mass": 129.32 + }, + { + "race": "6AHgA", + "name": "rAg", + "drive": 1, + "armament": 1, + "weapons": 1, + "shields": 0, + "cargo": 0, + "mass": 2 + }, + { + "race": "6AHgA", + "name": "Perf_3_129", + "drive": 64.66, + "armament": 31, + "weapons": 3, + "shields": 16.66, + "cargo": 0, + "mass": 129.32 + }, + { + "race": "6AHgA", + "name": "SuperColonizer", + "drive": 1.41, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 1, + "mass": 2.41 + }, + { + "race": "6AHgA", + "name": "Perf_1_129", + "drive": 51.72, + "armament": 120, + "weapons": 1, + "shields": 17.1, + "cargo": 0, + "mass": 129.32 + }, + { + "race": "6AHgA", + "name": "Tur_24_129", + "drive": 51.72, + "armament": 4, + "weapons": 24, + "shields": 17.6, + "cargo": 0, + "mass": 129.32 + }, + { + "race": "6AHgA", + "name": "LittleGunWMD", + "drive": 46, + "armament": 1, + "weapons": 10, + "shields": 73.32, + "cargo": 0, + "mass": 129.32 + }, + { + "race": "6AHgA", + "name": "dron", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "6AHgA", + "name": "Orb_Tur_129", + "drive": 0, + "armament": 6, + "weapons": 29.2, + "shields": 27.12, + "cargo": 0, + "mass": 129.32 + }, + { + "race": "6AHgA", + "name": "83_HPerf_125", + "drive": 1, + "armament": 83, + "weapons": 2.5, + "shields": 19, + "cargo": 0, + "mass": 125 + }, + { + "race": "6AHgA", + "name": "OTBAJIu_TOPMO3", + "drive": 2.66, + "armament": 1, + "weapons": 2.5, + "shields": 5.45, + "cargo": 0, + "mass": 10.61 + }, + { + "race": "6AHgA", + "name": "10_Tur_125", + "drive": 1, + "armament": 10, + "weapons": 19, + "shields": 19.5, + "cargo": 0, + "mass": 125 + }, + { + "race": "6AHgA", + "name": "3ATPAXAJI_ypog", + "drive": 1, + "armament": 1, + "weapons": 1, + "shields": 4, + "cargo": 0, + "mass": 6 + }, + { + "race": "Mad", + "name": "Shpionchik", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Varlon", + "name": "VarlonEyes", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Varlon", + "name": "Bomb", + "drive": 0, + "armament": 0, + "weapons": 0, + "shields": 1, + "cargo": 0, + "mass": 1 + }, + { + "race": "Varlon", + "name": "Remember", + "drive": 1.12, + "armament": 1, + "weapons": 1, + "shields": 0, + "cargo": 0, + "mass": 2.12 + }, + { + "race": "Varlon", + "name": "G", + "drive": 15, + "armament": 2, + "weapons": 20, + "shields": 11, + "cargo": 0, + "mass": 56 + }, + { + "race": "Varlon", + "name": "U", + "drive": 25, + "armament": 100, + "weapons": 1, + "shields": 10, + "cargo": 0, + "mass": 85.5 + }, + { + "race": "Varlon", + "name": "VarlonHome", + "drive": 65.69, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 20, + "mass": 85.69 + }, + { + "race": "Varlon", + "name": "Capitality", + "drive": 49.69, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 36, + "mass": 85.69 + }, + { + "race": "Pahanchiks", + "name": "Fto9", + "drive": 6, + "armament": 1, + "weapons": 1, + "shields": 3, + "cargo": 1, + "mass": 11 + }, + { + "race": "Pahanchiks", + "name": "Cagovoz", + "drive": 49, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 50, + "mass": 99 + }, + { + "race": "Pahanchiks", + "name": "Cvoz", + "drive": 30, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 19.5, + "mass": 49.5 + }, + { + "race": "Pahanchiks", + "name": "Scout", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 0, + "mass": 1 + }, + { + "race": "Pahanchiks", + "name": "tCs", + "drive": 17.63, + "armament": 0, + "weapons": 0, + "shields": 0, + "cargo": 7.08, + "mass": 24.71 + }, + { + "race": "Pahanchiks", + "name": "Nash", + "drive": 49.36, + "armament": 8, + "weapons": 8, + "shields": 13.56, + "cargo": 0, + "mass": 98.92 + }, + { + "race": "Pahanchiks", + "name": "Otvet", + "drive": 43.63, + "armament": 60, + "weapons": 1.5, + "shields": 9.6, + "cargo": 0, + "mass": 98.98 + }, + { + "race": "Pahanchiks", + "name": "Vragam", + "drive": 40.8, + "armament": 1, + "weapons": 25, + "shields": 33.2, + "cargo": 0, + "mass": 99 + }, + { + "race": "Pahanchiks", + "name": "stra", + "drive": 3.9, + "armament": 2, + "weapons": 3, + "shields": 2.6, + "cargo": 0, + "mass": 11 + }, + { + "race": "Pahanchiks", + "name": "Ss", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 1.47, + "cargo": 0, + "mass": 2.47 + }, + { + "race": "Pahanchiks", + "name": "Vpered", + "drive": 10, + "armament": 17, + "weapons": 8, + "shields": 17, + "cargo": 0, + "mass": 99 + }, + { + "race": "Pahanchiks", + "name": "Privet", + "drive": 22.7, + "armament": 269, + "weapons": 1, + "shields": 20, + "cargo": 0, + "mass": 177.7 + }, + { + "race": "Pahanchiks", + "name": "Mimo", + "drive": 5, + "armament": 3, + "weapons": 15, + "shields": 14.5, + "cargo": 0, + "mass": 49.5 + }, + { + "race": "Pahanchiks", + "name": "S", + "drive": 0, + "armament": 0, + "weapons": 0, + "shields": 1, + "cargo": 0, + "mass": 1 + }, + { + "race": "Pahanchiks", + "name": "Mim", + "drive": 1, + "armament": 6, + "weapons": 12, + "shields": 15, + "cargo": 0, + "mass": 58 + }, + { + "race": "Pahanchiks", + "name": "Mi", + "drive": 1, + "armament": 2, + "weapons": 26, + "shields": 18, + "cargo": 0, + "mass": 58 + }, + { + "race": "Pahanchiks", + "name": "Priveta", + "drive": 1, + "armament": 386, + "weapons": 2, + "shields": 31, + "cargo": 0, + "mass": 419 + }, + { + "race": "Pahanchiks", + "name": "Vper", + "drive": 1, + "armament": 47, + "weapons": 8, + "shields": 23.5, + "cargo": 0, + "mass": 216.5 + }, + { + "race": "Pahanchiks", + "name": "Dron", + "drive": 1, + "armament": 470, + "weapons": 1, + "shields": 34, + "cargo": 0, + "mass": 270.5 + }, + { + "race": "Pahanchiks", + "name": "Ogogo", + "drive": 1, + "armament": 4, + "weapons": 60, + "shields": 58.5, + "cargo": 0, + "mass": 209.5 + }, + { + "race": "Pahanchiks", + "name": "Lovi", + "drive": 1, + "armament": 251, + "weapons": 3, + "shields": 40, + "cargo": 0, + "mass": 419 + }, + { + "race": "Pahanchiks", + "name": "ter", + "drive": 9.5, + "armament": 2, + "weapons": 3, + "shields": 5, + "cargo": 0, + "mass": 19 + }, + { + "race": "Pahanchiks", + "name": "aa", + "drive": 1, + "armament": 141, + "weapons": 1, + "shields": 20, + "cargo": 0, + "mass": 92 + }, + { + "race": "Pahanchiks", + "name": "Ant", + "drive": 1, + "armament": 47, + "weapons": 7, + "shields": 40, + "cargo": 0, + "mass": 209 + }, + { + "race": "Pahanchiks", + "name": "Lubi_menia", + "drive": 1, + "armament": 118, + "weapons": 1.1, + "shields": 17, + "cargo": 0, + "mass": 83.45 + }, + { + "race": "Pahanchiks", + "name": "So", + "drive": 1, + "armament": 0, + "weapons": 0, + "shields": 1, + "cargo": 0, + "mass": 2 + }, + { + "race": "Pahanchiks", + "name": "Kak_ia_tebia", + "drive": 1, + "armament": 18, + "weapons": 7, + "shields": 16, + "cargo": 0, + "mass": 83.5 + }, + { + "race": "Pahanchiks", + "name": "vot_tebe", + "drive": 1, + "armament": 70, + "weapons": 1, + "shields": 12.8, + "cargo": 0, + "mass": 49.3 + }, + { + "race": "Pahanchiks", + "name": "go_home", + "drive": 1, + "armament": 4, + "weapons": 17, + "shields": 69, + "cargo": 0, + "mass": 112.5 + } + ], + "battle": [ + { + "id": "867cdc3e-8bdf-57d2-8401-0b92af7151fa", + "planet": 0, + "shots": 1 + }, + { + "id": "97dae5d0-00f1-5ad6-b2ac-6094b605d5ad", + "planet": 1, + "shots": 1 + }, + { + "id": "3bae45ff-10c5-5297-9c5a-d1039c944e76", + "planet": 4, + "shots": 1 + }, + { + "id": "5b487499-547f-5ea5-8ec8-c228bdfec129", + "planet": 5, + "shots": 1 + }, + { + "id": "748784c5-911f-509b-a6d8-25d984c7e2f3", + "planet": 6, + "shots": 1 + }, + { + "id": "60112197-fe47-5056-950a-1bec90737b6b", + "planet": 8, + "shots": 1 + }, + { + "id": "42e9f113-d436-553f-b8fa-60746eed7f3c", + "planet": 9, + "shots": 1 + }, + { + "id": "40d81f10-88b6-521a-9700-c2b6b1522b6b", + "planet": 10, + "shots": 1 + }, + { + "id": "e67d0a22-8096-55ec-8654-d0026ae7d7fb", + "planet": 11, + "shots": 1 + }, + { + "id": "1951c81b-6d0d-597c-8eb1-877a5dbb7317", + "planet": 17, + "shots": 1 + }, + { + "id": "efeacace-34e0-5551-8fe3-d7f62484a04c", + "planet": 18, + "shots": 1 + }, + { + "id": "1c8f40a1-4469-5aed-b6b1-c7557c864f07", + "planet": 21, + "shots": 1 + }, + { + "id": "a9968f83-5b80-5799-9ef1-fe87ce0a49db", + "planet": 22, + "shots": 1 + }, + { + "id": "f4ee8fc1-4e3b-5dc1-b0a0-cdb4fcbcc0ea", + "planet": 24, + "shots": 1 + }, + { + "id": "e0b9fe57-2772-5060-bdb1-0c18238745a0", + "planet": 26, + "shots": 1 + }, + { + "id": "a588d0e8-05c9-5484-a8bb-82dba7c32b47", + "planet": 27, + "shots": 1 + }, + { + "id": "e4a8b24e-6187-58b6-b256-1e727842563d", + "planet": 32, + "shots": 1 + }, + { + "id": "ac708e4f-1202-5f53-8a2f-09622a43025a", + "planet": 33, + "shots": 1 + }, + { + "id": "51f99594-35c0-5070-acaa-20cb079d695b", + "planet": 36, + "shots": 1 + }, + { + "id": "284aa96c-dad3-5a79-8627-cd779042b3de", + "planet": 38, + "shots": 1 + }, + { + "id": "8ae64d21-927c-5e14-aefb-6a133cd04329", + "planet": 39, + "shots": 1 + }, + { + "id": "8bc65ffe-c016-57d6-8cb0-5c5592530b6b", + "planet": 40, + "shots": 1 + }, + { + "id": "dad43ae8-d33a-5275-bdc2-3a09de0dc72a", + "planet": 43, + "shots": 1 + }, + { + "id": "831a3e55-7c55-52f9-8bdc-32680bac0d78", + "planet": 44, + "shots": 1 + }, + { + "id": "dd9d1fe8-a624-51e4-a11c-23564feadfd7", + "planet": 46, + "shots": 1 + }, + { + "id": "8a5eb73c-f3e1-5d18-ab58-80cb0d3fe78c", + "planet": 50, + "shots": 2 + }, + { + "id": "f319c219-9b3d-5e83-b4d5-8da594176a10", + "planet": 51, + "shots": 1 + }, + { + "id": "228d740f-64b0-5d27-a557-2d32d625ac53", + "planet": 55, + "shots": 1 + }, + { + "id": "6389ea2c-b89f-549e-ab54-883fe742272b", + "planet": 56, + "shots": 1 + }, + { + "id": "88d51235-2ade-5ce5-8866-c1a473a9993e", + "planet": 57, + "shots": 1 + }, + { + "id": "26cda435-8216-58e4-b5d6-9f932d4a0f73", + "planet": 60, + "shots": 1 + }, + { + "id": "c94720e4-3073-5e99-be9c-df285ed7274b", + "planet": 61, + "shots": 1 + }, + { + "id": "0ede2f8d-598f-56d7-93f1-6bca6de97ed4", + "planet": 63, + "shots": 1 + }, + { + "id": "1e8a4d00-5d0d-5054-8e78-c522799c244f", + "planet": 66, + "shots": 1 + }, + { + "id": "2700dc80-907f-5b5e-80d4-286fa3b73f0f", + "planet": 67, + "shots": 1 + }, + { + "id": "37d42ae6-06d9-5baf-8a74-deeb7a8a8964", + "planet": 70, + "shots": 1 + }, + { + "id": "10aadb7c-1b8b-57ba-bfdf-fd89ba64dfa8", + "planet": 71, + "shots": 1 + }, + { + "id": "211866d5-057b-5c82-a6ca-35e44baea45b", + "planet": 75, + "shots": 1 + }, + { + "id": "f995a51d-f45e-57fb-b146-c538a45c1d88", + "planet": 76, + "shots": 1 + }, + { + "id": "bcfaa090-86da-50d8-aa2f-4112ee9cc166", + "planet": 77, + "shots": 1 + }, + { + "id": "5a95f6c4-1ea2-5178-b071-ce3a1b0e3b62", + "planet": 78, + "shots": 1 + }, + { + "id": "7a51822b-6d57-5949-8a55-958b54d528a1", + "planet": 79, + "shots": 1 + }, + { + "id": "e82cff85-de85-597f-a145-c62bfbe36d0f", + "planet": 83, + "shots": 1 + }, + { + "id": "10e7131c-baa0-5c04-af98-f01958fe3a75", + "planet": 84, + "shots": 1 + }, + { + "id": "acc4f395-d4fa-54ba-9324-ddf0736aaf2d", + "planet": 85, + "shots": 1 + }, + { + "id": "624a9976-53df-5567-ae74-50429cce0b4d", + "planet": 88, + "shots": 1 + }, + { + "id": "ca900c7d-3ed8-555f-b75b-b4cd42c09b7e", + "planet": 93, + "shots": 2 + }, + { + "id": "85f0c551-0739-5ba8-b09b-4150c5e6c963", + "planet": 95, + "shots": 1 + }, + { + "id": "3916d343-b7ce-5fd1-8f68-b5f821b4e399", + "planet": 98, + "shots": 1 + }, + { + "id": "7a458c02-02dc-5652-942e-3d5ca35c2ad7", + "planet": 99, + "shots": 1 + }, + { + "id": "2ef60ab0-a4f4-516e-8024-d22a9e144540", + "planet": 100, + "shots": 1 + }, + { + "id": "591a65e9-2ba2-5883-a142-fc6e928f4e7e", + "planet": 102, + "shots": 1 + }, + { + "id": "ce30ac26-e1ce-50ab-a7d7-821727079a0e", + "planet": 105, + "shots": 1 + }, + { + "id": "8f923650-d6a7-5d55-964e-9deebfa31b8b", + "planet": 108, + "shots": 1 + }, + { + "id": "26633687-f60b-5211-94fc-a1d72919434f", + "planet": 110, + "shots": 1 + }, + { + "id": "140d0086-a74a-55f1-80da-30b9dddb832a", + "planet": 112, + "shots": 1 + }, + { + "id": "02407911-7a40-5493-8e8b-0d7fbd96ad2f", + "planet": 113, + "shots": 1 + }, + { + "id": "9a4ad17f-b1b3-55de-98bf-5e20a1343720", + "planet": 114, + "shots": 1 + }, + { + "id": "243dc9ce-65a3-5a66-8655-4293a1728bce", + "planet": 117, + "shots": 1 + }, + { + "id": "f033ca4f-34f8-5047-818f-d525ed4a0aa3", + "planet": 121, + "shots": 1 + }, + { + "id": "9a792ed3-2032-5c79-9b1a-f159b45bb10a", + "planet": 122, + "shots": 1 + }, + { + "id": "8a779bc2-a1ee-5ffd-8802-54761673252b", + "planet": 123, + "shots": 1 + }, + { + "id": "7bae71eb-ad8e-5bff-b0a6-dc9ace6cb7cc", + "planet": 129, + "shots": 1 + }, + { + "id": "180eecd0-d7d1-5154-9fdc-789d314fc133", + "planet": 130, + "shots": 4 + }, + { + "id": "ae5336a6-2973-5736-ac73-793f2d27abe9", + "planet": 131, + "shots": 1 + }, + { + "id": "7f602a85-98c7-579d-a9d4-20935f5e7308", + "planet": 132, + "shots": 1 + }, + { + "id": "9fc4ab7e-9df3-5bdf-80cd-708ed0d02177", + "planet": 0, + "shots": 4 + }, + { + "id": "4d1b4ed0-2368-5121-93cd-dda39a14da0b", + "planet": 1, + "shots": 42 + }, + { + "id": "626cb74d-d421-5344-ae42-564a89cddffa", + "planet": 9, + "shots": 7 + }, + { + "id": "7d2f104d-2985-5919-8df5-09df58ef1b8f", + "planet": 11, + "shots": 3 + }, + { + "id": "9e0021a6-820b-5450-bf69-ef3b5c5dd9fd", + "planet": 13, + "shots": 2 + }, + { + "id": "07ad3a6e-fe01-52cc-8d87-d4e5d3eaf5bc", + "planet": 25, + "shots": 2 + }, + { + "id": "4e4e3ff4-a5bc-559a-bdbf-b27382bd49cd", + "planet": 29, + "shots": 6 + }, + { + "id": "be9f0a04-45ec-5d70-a7c5-01fa9b93a912", + "planet": 33, + "shots": 1 + }, + { + "id": "406bcea8-d084-53be-8f11-5a64d79054be", + "planet": 39, + "shots": 5 + }, + { + "id": "3d0cb5b7-9acb-51a1-b7ad-c336fa839135", + "planet": 41, + "shots": 5 + }, + { + "id": "440fdb91-847c-5e48-8b70-b852fa43e20b", + "planet": 45, + "shots": 3 + }, + { + "id": "f841acbc-7dbc-582f-878a-43ef32f8b128", + "planet": 54, + "shots": 1 + }, + { + "id": "fc34fa9d-aead-5849-ab7c-1e59476a612f", + "planet": 55, + "shots": 2 + }, + { + "id": "32285ba6-9b6f-5320-bf6c-37a4f1042527", + "planet": 59, + "shots": 3 + }, + { + "id": "65c3cff8-d7ed-55e1-9865-b2110ab38313", + "planet": 62, + "shots": 6 + }, + { + "id": "764d1007-ef58-5089-a653-e7365305e97c", + "planet": 67, + "shots": 2 + }, + { + "id": "01608753-b992-5ccb-8baa-637717eebafd", + "planet": 75, + "shots": 363 + }, + { + "id": "cde311e1-2636-573e-bd48-52a2c6f0a1cd", + "planet": 78, + "shots": 5 + }, + { + "id": "6196f83e-e10e-5e4b-9c94-6d548d852a14", + "planet": 82, + "shots": 68 + }, + { + "id": "7b7425c7-8332-52db-9110-77244445b8f3", + "planet": 85, + "shots": 2 + }, + { + "id": "be513cb5-b82a-5651-9015-393126d2d8b9", + "planet": 91, + "shots": 8 + }, + { + "id": "e2c632ea-7ab8-5fe0-ae44-140e431b8d5c", + "planet": 99, + "shots": 1 + }, + { + "id": "0f7c016f-8a7a-5671-9889-ccb70b919053", + "planet": 103, + "shots": 3 + }, + { + "id": "fef14d32-35b7-5200-9be9-c0d0e10cba05", + "planet": 122, + "shots": 151 + }, + { + "id": "fc3dae3d-c883-5e95-af1d-7c91c52ab9ce", + "planet": 124, + "shots": 17 + }, + { + "id": "7b39ebfe-da13-5c1a-8cce-7198a569cb94", + "planet": 131, + "shots": 3 + }, + { + "id": "42ee65fb-90da-50a7-b4b8-90e09b6be309", + "planet": 135, + "shots": 1 + } + ], + "bombing": [ + { + "planet": 3, + "planetName": "Calgary_Flames", + "owner": "NHL", + "attacker": "Pahanchiks", + "production": "Capital", + "industry": 1.63, + "population": 285.38, + "colonists": 0, + "capital": 0, + "material": 358.01, + "attack": 5434.29, + "wiped": true + }, + { + "planet": 5, + "planetName": "Bak", + "owner": "Pahanchiks", + "attacker": "NHL", + "production": "Scout", + "industry": 494.22, + "population": 514.88, + "colonists": 0, + "capital": 0, + "material": 0, + "attack": 843.11, + "wiped": true + }, + { + "planet": 11, + "planetName": "AnnoSatanae", + "owner": "Varlon", + "attacker": "Bullet", + "production": "Shields", + "industry": 495.15, + "population": 499.24, + "colonists": 0, + "capital": 0, + "material": 0, + "attack": 179.48, + "wiped": false + }, + { + "planet": 29, + "planetName": "Capital_Of_ALM", + "owner": "ALM", + "attacker": "Pahanchiks", + "production": "Shields", + "industry": 1000, + "population": 1000, + "colonists": 380, + "capital": 0, + "material": 0.01, + "attack": 105.16, + "wiped": false + }, + { + "planet": 29, + "planetName": "Capital_Of_ALM", + "owner": "ALM", + "attacker": "Tancordia", + "production": "Shields", + "industry": 894.84, + "population": 1000, + "colonists": 261.69, + "capital": 0, + "material": 105.17, + "attack": 902.08, + "wiped": false + }, + { + "planet": 30, + "planetName": "1936.58", + "owner": "6AHgA", + "attacker": "Acrosi", + "production": "6ECnPu3OPHuK", + "industry": 0, + "population": 759.04, + "colonists": 0, + "capital": 0, + "material": 731.94, + "attack": 176.02, + "wiped": false + }, + { + "planet": 36, + "planetName": "Acr_Last_Base", + "owner": "Bullet", + "attacker": "Tancordia", + "production": "Capital", + "industry": 0.18, + "population": 3.95, + "colonists": 0, + "capital": 0, + "material": 446.16, + "attack": 1.48, + "wiped": false + }, + { + "planet": 39, + "planetName": "Ultra_Rich_Mine", + "owner": "Acrosi", + "attacker": "Bullet", + "production": "Capital", + "industry": 1.17, + "population": 9.94, + "colonists": 0, + "capital": 0, + "material": 158.95, + "attack": 1.03, + "wiped": false + }, + { + "planet": 45, + "planetName": "Native2", + "owner": "ALM", + "attacker": "Tancordia", + "production": "Weapons", + "industry": 500, + "population": 500, + "colonists": 190, + "capital": 0, + "material": 0.5, + "attack": 532.2, + "wiped": true + }, + { + "planet": 53, + "planetName": "1031.83", + "owner": "Bullet", + "attacker": "NHL", + "production": "Capital", + "industry": 0.17, + "population": 3.76, + "colonists": 0, + "capital": 0, + "material": 898.77, + "attack": 4.58, + "wiped": true + }, + { + "planet": 54, + "planetName": "Apollo-1085", + "owner": "Bullet", + "attacker": "Tancordia", + "production": "Capital", + "industry": 6.48, + "population": 6.48, + "colonists": 0, + "capital": 109.8, + "material": 1196.4, + "attack": 4.86, + "wiped": false + }, + { + "planet": 55, + "planetName": "Washington_Capitals", + "owner": "NHL", + "attacker": "Bullet", + "production": "Capital", + "industry": 0.3, + "population": 2.02, + "colonists": 0, + "capital": 0, + "material": 0.02, + "attack": 2.04, + "wiped": true + }, + { + "planet": 74, + "planetName": "48.34", + "owner": "6AHgA", + "attacker": "NHL", + "production": "Shields", + "industry": 45.15, + "population": 48.34, + "colonists": 0.05, + "capital": 0, + "material": 2757.92, + "attack": 3.19, + "wiped": false + }, + { + "planet": 75, + "planetName": "Detroit_Red_Wings", + "owner": "NHL", + "attacker": "Pahanchiks", + "production": "Ciccarelli", + "industry": 601.05, + "population": 601.25, + "colonists": 133.67, + "capital": 0, + "material": 2311.36, + "attack": 401.13, + "wiped": false + }, + { + "planet": 78, + "planetName": "Oplest", + "owner": "Acrosi", + "attacker": "Bullet", + "production": "Capital", + "industry": 28.37, + "population": 64.22, + "colonists": 0, + "capital": 0, + "material": 220.4, + "attack": 1.33, + "wiped": false + }, + { + "planet": 85, + "planetName": "NewHome", + "owner": "Acrosi", + "attacker": "Tancordia", + "production": "Broad-Sword", + "industry": 52.12, + "population": 1226.12, + "colonists": 0, + "capital": 0, + "material": 214.13, + "attack": 1203.55, + "wiped": false + }, + { + "planet": 93, + "planetName": "1000.00", + "owner": "6AHgA", + "attacker": "Varlon", + "production": "6ECnPu3OPHuK", + "industry": 0, + "population": 49.89, + "colonists": 0, + "capital": 0, + "material": 72.79, + "attack": 3.12, + "wiped": false + }, + { + "planet": 93, + "planetName": "1000.00", + "owner": "6AHgA", + "attacker": "Tancordia", + "production": "6ECnPu3OPHuK", + "industry": 0, + "population": 46.78, + "colonists": 0, + "capital": 0, + "material": 72.79, + "attack": 14.53, + "wiped": false + }, + { + "planet": 96, + "planetName": "1158.87", + "owner": "6AHgA", + "attacker": "Acrosi", + "production": "Capital", + "industry": 5.98, + "population": 129.17, + "colonists": 0, + "capital": 0, + "material": 880.41, + "attack": 8.99, + "wiped": false + }, + { + "planet": 119, + "planetName": "Sun", + "owner": "6AHgA", + "attacker": "Bullet", + "production": "Capital", + "industry": 0.01, + "population": 0.17, + "colonists": 0, + "capital": 0, + "material": 1297.24, + "attack": 4.14, + "wiped": true + }, + { + "planet": 124, + "planetName": "Diareng", + "owner": "Acrosi", + "attacker": "Pahanchiks", + "production": "Drone", + "industry": 16.01, + "population": 505.31, + "colonists": 0, + "capital": 0, + "material": 2461.33, + "attack": 1852.82, + "wiped": true + }, + { + "planet": 130, + "planetName": "Florida_Panthers", + "owner": "Acrosi", + "attacker": "Pahanchiks", + "production": "Drone", + "industry": 0, + "population": 158.56, + "colonists": 0, + "capital": 0, + "material": 1598.85, + "attack": 6.13, + "wiped": false + }, + { + "planet": 130, + "planetName": "Florida_Panthers", + "owner": "Acrosi", + "attacker": "Tancordia", + "production": "Drone", + "industry": 0, + "population": 152.42, + "colonists": 0, + "capital": 0, + "material": 1598.85, + "attack": 2.57, + "wiped": false + }, + { + "planet": 131, + "planetName": "Tampa_Bay_Lightning", + "owner": "NHL", + "attacker": "Pahanchiks", + "production": "Dawe", + "industry": 26.13, + "population": 26.13, + "colonists": 5.52, + "capital": 2.29, + "material": 3546.51, + "attack": 2.86, + "wiped": false + } + ], + "localPlanet": [ + { + "x": 97.27, + "y": 35.9, + "number": 4, + "size": 1000, + "name": "Tancord", + "resources": 10, + "capital": 0, + "material": 0, + "industry": 1000, + "population": 1000, + "colonists": 37.69, + "production": "HolyPilgrim", + "freeIndustry": 1000 + }, + { + "x": 94.13, + "y": 37.17, + "number": 17, + "size": 500, + "name": "Ranunculus", + "resources": 10, + "capital": 0, + "material": 0, + "industry": 500, + "population": 500, + "colonists": 68.84, + "production": "HolyPilgrim", + "freeIndustry": 500 + }, + { + "x": 90, + "y": 38.5, + "number": 110, + "size": 500, + "name": "Narcisus", + "resources": 10, + "capital": 0, + "material": 0, + "industry": 500, + "population": 500, + "colonists": 59.22, + "production": "HolyPilgrim", + "freeIndustry": 500 + }, + { + "x": 126.34, + "y": 45.79, + "number": 56, + "size": 553.51, + "name": "Rose", + "resources": 0.34, + "capital": 0, + "material": 0, + "industry": 0, + "population": 553.51, + "colonists": 48.37, + "production": "Drive_Research", + "freeIndustry": 138.38 + }, + { + "x": 95.61, + "y": 41.88, + "number": 76, + "size": 724.94, + "name": "Geranium", + "resources": 9.81, + "capital": 0, + "material": 0, + "industry": 711.18, + "population": 724.94, + "colonists": 36.25, + "production": "HolyPilgrim", + "freeIndustry": 714.62 + }, + { + "x": 88.65, + "y": 34.86, + "number": 8, + "size": 615.82, + "name": "Jasmin", + "resources": 2.18, + "capital": 26.98, + "material": 0, + "industry": 615.82, + "population": 615.82, + "colonists": 56.89, + "production": "HolyPilgrim", + "freeIndustry": 615.82 + }, + { + "x": 88.75, + "y": 33.52, + "number": 79, + "size": 664.85, + "name": "Violet", + "resources": 2.49, + "capital": 0, + "material": 0, + "industry": 657.12, + "population": 664.85, + "colonists": 71.21, + "production": "HolyPilgrim", + "freeIndustry": 659.05 + }, + { + "x": 100.04, + "y": 26.72, + "number": 87, + "size": 853.48, + "name": "ForPost", + "resources": 9.15, + "capital": 0, + "material": 0, + "industry": 853.48, + "population": 853.48, + "colonists": 72.85, + "production": "HolyBlade", + "freeIndustry": 853.48 + }, + { + "x": 61.28, + "y": 28.57, + "number": 24, + "size": 1000, + "name": "im.Killer", + "resources": 10, + "capital": 0, + "material": 0, + "industry": 986.16, + "population": 1000, + "colonists": 50, + "production": "HolyPilgrim", + "freeIndustry": 989.62 + }, + { + "x": 194.93, + "y": 38.64, + "number": 63, + "size": 500, + "name": "im.Yoshe", + "resources": 10, + "capital": 0, + "material": 0, + "industry": 0, + "population": 452.16, + "colonists": 0, + "production": "HolyPilgrim", + "freeIndustry": 113.04 + }, + { + "x": 57.74, + "y": 30.91, + "number": 66, + "size": 500, + "name": "im.Imperial", + "resources": 10, + "capital": 0, + "material": 20.28, + "industry": 248.6, + "population": 500, + "colonists": 10, + "production": "HolyPilgrim", + "freeIndustry": 311.45 + }, + { + "x": 60.7, + "y": 32.04, + "number": 113, + "size": 205.44, + "name": "Sever5_remember", + "resources": 16.73, + "capital": 0, + "material": 0, + "industry": 200.02, + "population": 205.44, + "colonists": 8.22, + "production": "HolyPilgrim", + "freeIndustry": 201.38 + }, + { + "x": 66.55, + "y": 22.51, + "number": 98, + "size": 500, + "name": "im.Zemptukhans", + "resources": 10, + "capital": 17.57, + "material": 0, + "industry": 500, + "population": 500, + "colonists": 20, + "production": "HolyPilgrim", + "freeIndustry": 500 + }, + { + "x": 97.56, + "y": 208.94, + "number": 129, + "size": 1096.22, + "name": "im.WITCHHUNTERS", + "resources": 7.11, + "capital": 0, + "material": 0, + "industry": 1042.05, + "population": 1096.22, + "colonists": 38.65, + "production": "HolyPilgrim", + "freeIndustry": 1055.6 + }, + { + "x": 97.88, + "y": 4.02, + "number": 114, + "size": 601.25, + "name": "LaserJet", + "resources": 5.04, + "capital": 0, + "material": 0, + "industry": 549.19, + "population": 601.25, + "colonists": 42.09, + "production": "HolyPilgrim", + "freeIndustry": 562.2 + }, + { + "x": 103.53, + "y": 0.17, + "number": 84, + "size": 836.13, + "name": "Dicky-Tricky", + "resources": 0.38, + "capital": 0, + "material": 213.75, + "industry": 822.8, + "population": 836.13, + "colonists": 38.49, + "production": "Shields_Research", + "freeIndustry": 826.13 + }, + { + "x": 105.26, + "y": 0.69, + "number": 50, + "size": 975.92, + "name": "Demolution", + "resources": 8.58, + "capital": 0, + "material": 161.57, + "industry": 804.93, + "population": 975.92, + "colonists": 23.11, + "production": "HolyPilgrim", + "freeIndustry": 847.68 + }, + { + "x": 105.77, + "y": 205.15, + "number": 122, + "size": 775.06, + "name": "Drugs", + "resources": 8.14, + "capital": 0, + "material": 93.04, + "industry": 734.35, + "population": 775.06, + "colonists": 17.76, + "production": "HolyBlade", + "freeIndustry": 744.53 + }, + { + "x": 108.46, + "y": 188.12, + "number": 82, + "size": 1219.55, + "name": "im.Acrosi", + "resources": 2.85, + "capital": 0, + "material": 1294.12, + "industry": 0, + "population": 364.83, + "colonists": 0, + "production": "HolyBlade", + "freeIndustry": 91.21 + }, + { + "x": 134.63, + "y": 49.75, + "number": 71, + "size": 697.29, + "name": "Apollo-697", + "resources": 3.78, + "capital": 0, + "material": 630.46, + "industry": 0, + "population": 697.29, + "colonists": 11, + "production": "HolyBlade", + "freeIndustry": 174.32 + }, + { + "x": 115.17, + "y": 173.66, + "number": 32, + "size": 605, + "name": "im.Mad", + "resources": 4.9, + "capital": 0, + "material": 531.1, + "industry": 0, + "population": 605, + "colonists": 14.33, + "production": "HolySymbol", + "freeIndustry": 151.25 + }, + { + "x": 190.7, + "y": 9.18, + "number": 1, + "size": 1685.02, + "name": "1685.02", + "resources": 2.76, + "capital": 0, + "material": 1636.26, + "industry": 18.53, + "population": 379.82, + "colonists": 0, + "production": "HolySymbol", + "freeIndustry": 108.85 + }, + { + "x": 10.45, + "y": 37.76, + "number": 51, + "size": 1705.21, + "name": "1705.21", + "resources": 2.24, + "capital": 0, + "material": 1096.97, + "industry": 32.72, + "population": 1705.21, + "colonists": 34.44, + "production": "HolyPilgrim", + "freeIndustry": 450.84 + }, + { + "x": 131.66, + "y": 5.23, + "number": 103, + "size": 500, + "name": "im.Bullet", + "resources": 10, + "capital": 0, + "material": 487.08, + "industry": 12.92, + "population": 279.18, + "colonists": 0, + "production": "Capital", + "freeIndustry": 79.49 + } + ], + "shipProduction": [ + { + "planet": 4, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 3.03, + "percent": 0.3, + "free": 1000 + }, + { + "planet": 17, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 38.481, + "percent": 3.81, + "free": 500 + }, + { + "planet": 110, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 54.035, + "percent": 5.35, + "free": 500 + }, + { + "planet": 76, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 75.664, + "percent": 7.49, + "free": 714.62 + }, + { + "planet": 8, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 75.512, + "percent": 7.22, + "free": 615.82 + }, + { + "planet": 79, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 13.314, + "percent": 1.28, + "free": 659.05 + }, + { + "planet": 87, + "class": "HolyBlade", + "cost": 170, + "prodUsed": 27547.107, + "percent": 160.29, + "free": 853.48 + }, + { + "planet": 24, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 96.556, + "percent": 9.56, + "free": 989.62 + }, + { + "planet": 63, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 0.101, + "percent": 0.01, + "free": 113.04 + }, + { + "planet": 66, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 1.6, + "percent": 0.16, + "free": 311.45 + }, + { + "planet": 113, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 16.498, + "percent": 1.64, + "free": 201.38 + }, + { + "planet": 98, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 67.165, + "percent": 6.65, + "free": 500 + }, + { + "planet": 129, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 41.779, + "percent": 4.12, + "free": 1055.6 + }, + { + "planet": 114, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 58.947, + "percent": 5.78, + "free": 562.2 + }, + { + "planet": 50, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 33.3, + "percent": 3.33, + "free": 847.68 + }, + { + "planet": 122, + "class": "HolyBlade", + "cost": 170, + "prodUsed": 22208.8, + "percent": 130.64, + "free": 744.53 + }, + { + "planet": 82, + "class": "HolyBlade", + "cost": 170, + "prodUsed": 1.7, + "percent": 0.01, + "free": 91.21 + }, + { + "planet": 71, + "class": "HolyBlade", + "cost": 170, + "prodUsed": 754.8, + "percent": 4.44, + "free": 174.32 + }, + { + "planet": 32, + "class": "HolySymbol", + "cost": 70.7, + "prodUsed": 1621.858, + "percent": 22.94, + "free": 151.25 + }, + { + "planet": 1, + "class": "HolySymbol", + "cost": 70.7, + "prodUsed": 4082.218, + "percent": 57.74, + "free": 108.85 + }, + { + "planet": 51, + "class": "HolyPilgrim", + "cost": 10, + "prodUsed": 43.1, + "percent": 4.31, + "free": 450.84 + } + ], + "otherPlanet": [ + { + "owner": "ALM", + "x": 86.09, + "y": 114.68, + "number": 29, + "size": 1000, + "name": "Capital_Of_ALM", + "resources": 10, + "capital": 0, + "material": 1000.01, + "industry": 0, + "population": 105.75, + "colonists": 0, + "production": "Shields_Research", + "freeIndustry": 26.44 + }, + { + "owner": "ALM", + "x": 86.45, + "y": 110.51, + "number": 139, + "size": 500, + "name": "Native1", + "resources": 10, + "capital": 0, + "material": 0.51, + "industry": 500, + "population": 500, + "colonists": 195, + "production": "Weapons_Research", + "freeIndustry": 500 + }, + { + "owner": "NHL", + "x": 0.23, + "y": 151.04, + "number": 7, + "size": 1583.83, + "name": "Colorado_Avalanche", + "resources": 2.91, + "capital": 0, + "material": 6, + "industry": 0.44, + "population": 2.18, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.88 + }, + { + "owner": "NHL", + "x": 185.31, + "y": 165.88, + "number": 12, + "size": 1000, + "name": "San_Jose_Sharks", + "resources": 10, + "capital": 0, + "material": 1.72, + "industry": 0.44, + "population": 2.18, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.88 + }, + { + "owner": "NHL", + "x": 106.31, + "y": 99.96, + "number": 14, + "size": 96.77, + "name": "Toronto_Maple_Leafs", + "resources": 21.28, + "capital": 9.34, + "material": 0, + "industry": 8.69, + "population": 8.69, + "colonists": 0, + "production": "Capital", + "freeIndustry": 8.69 + }, + { + "owner": "NHL", + "x": 69.87, + "y": 192.68, + "number": 21, + "size": 639.53, + "name": "Ottawa_Senators", + "resources": 3.56, + "capital": 0, + "material": 0, + "industry": 639.53, + "population": 639.53, + "colonists": 208.37, + "production": "Boughner", + "freeIndustry": 639.53 + }, + { + "owner": "NHL", + "x": 170.79, + "y": 180.22, + "number": 23, + "size": 757.73, + "name": "Hartford_Whalers", + "resources": 6.14, + "capital": 0, + "material": 2.08, + "industry": 0.09, + "population": 0.93, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.3 + }, + { + "owner": "NHL", + "x": 88.56, + "y": 0.05, + "number": 33, + "size": 601.25, + "name": "Carolina_Hurricanes", + "resources": 5.04, + "capital": 0, + "material": 815.28, + "industry": 0, + "population": 273.6, + "colonists": 0, + "production": "Capital", + "freeIndustry": 68.4 + }, + { + "owner": "NHL", + "x": 190.28, + "y": 166.94, + "number": 46, + "size": 500, + "name": "Anachaim_Mayti_Ducks", + "resources": 10, + "capital": 0, + "material": 2.47, + "industry": 0.18, + "population": 1.87, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.6 + }, + { + "owner": "NHL", + "x": 58.13, + "y": 191.93, + "number": 75, + "size": 601.25, + "name": "Detroit_Red_Wings", + "resources": 5.04, + "capital": 0, + "material": 2692.5, + "industry": 199.93, + "population": 216.13, + "colonists": 0, + "production": "Ciccarelli", + "freeIndustry": 203.98 + }, + { + "owner": "NHL", + "x": 18.94, + "y": 137.91, + "number": 92, + "size": 634.69, + "name": "Chicago_Black_Hawks", + "resources": 7.07, + "capital": 0, + "material": 18.9, + "industry": 1.57, + "population": 10.58, + "colonists": 0, + "production": "Capital", + "freeIndustry": 3.82 + }, + { + "owner": "NHL", + "x": 191.14, + "y": 163.19, + "number": 104, + "size": 500, + "name": "NY_Islanders", + "resources": 10, + "capital": 0, + "material": 1.83, + "industry": 0.82, + "population": 5.54, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2 + }, + { + "owner": "NHL", + "x": 60.89, + "y": 194.33, + "number": 105, + "size": 601.25, + "name": "Vancouver_Canucks", + "resources": 5.04, + "capital": 0, + "material": 2131.4, + "industry": 601.05, + "population": 601.25, + "colonists": 66.24, + "production": "Ciccarelli", + "freeIndustry": 601.1 + }, + { + "owner": "NHL", + "x": 188.99, + "y": 168.09, + "number": 108, + "size": 394.78, + "name": "Quebec_Nordiques", + "resources": 22.01, + "capital": 0, + "material": 0, + "industry": 0.3, + "population": 2.02, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.73 + }, + { + "owner": "NHL", + "x": 5.03, + "y": 180.11, + "number": 111, + "size": 500, + "name": "Edmonton_Oilers", + "resources": 10, + "capital": 0, + "material": 429.35, + "industry": 1.7, + "population": 6.47, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.89 + }, + { + "owner": "NHL", + "x": 178.3, + "y": 163.72, + "number": 112, + "size": 643.31, + "name": "NY_Rangers", + "resources": 2.87, + "capital": 0, + "material": 1.34, + "industry": 0.3, + "population": 2.02, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.73 + }, + { + "owner": "NHL", + "x": 16.23, + "y": 174.29, + "number": 115, + "size": 594.74, + "name": "Phoenix_Coyotes", + "resources": 2.82, + "capital": 0, + "material": 109.02, + "industry": 1.7, + "population": 6.47, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.89 + }, + { + "owner": "NHL", + "x": 13.65, + "y": 172.38, + "number": 120, + "size": 605, + "name": "Boston_Bruins", + "resources": 4.9, + "capital": 0, + "material": 536.34, + "industry": 1.7, + "population": 6.47, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.89 + }, + { + "owner": "NHL", + "x": 72.35, + "y": 198.46, + "number": 131, + "size": 26.13, + "name": "Tampa_Bay_Lightning", + "resources": 13.6, + "capital": 0, + "material": 3546.8, + "industry": 25.56, + "population": 26.13, + "colonists": 2.56, + "production": "Dawe", + "freeIndustry": 25.7 + }, + { + "owner": "Acrosi", + "x": 41.07, + "y": 138.99, + "number": 28, + "size": 1000, + "name": "DownTown", + "resources": 10, + "capital": 0, + "material": 989.03, + "industry": 107.06, + "population": 199.33, + "colonists": 0, + "production": "Capital", + "freeIndustry": 130.13 + }, + { + "owner": "Acrosi", + "x": 76.51, + "y": 163.4, + "number": 39, + "size": 170.22, + "name": "Ultra_Rich_Mine", + "resources": 24.95, + "capital": 0, + "material": 159.51, + "industry": 0.62, + "population": 9.63, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.87 + }, + { + "owner": "Acrosi", + "x": 19.98, + "y": 133.11, + "number": 48, + "size": 845.38, + "name": "845.38", + "resources": 4.63, + "capital": 0, + "material": 468.21, + "industry": 14.52, + "population": 44.43, + "colonists": 0, + "production": "Capital", + "freeIndustry": 22 + }, + { + "owner": "Acrosi", + "x": 86.05, + "y": 122.62, + "number": 52, + "size": 674.11, + "name": "Reia", + "resources": 8.52, + "capital": 0, + "material": 279.87, + "industry": 0, + "population": 69.76, + "colonists": 0, + "production": "Mindesoubal", + "freeIndustry": 17.44 + }, + { + "owner": "Acrosi", + "x": 36.89, + "y": 135.79, + "number": 69, + "size": 716.79, + "name": "DieStar", + "resources": 2.64, + "capital": 42.39, + "material": 720.22, + "industry": 5.12, + "population": 5.12, + "colonists": 0, + "production": "Capital", + "freeIndustry": 5.12 + }, + { + "owner": "Acrosi", + "x": 41.99, + "y": 130.72, + "number": 72, + "size": 992.03, + "name": "992.03", + "resources": 1.43, + "capital": 0, + "material": 971.86, + "industry": 1.04, + "population": 5.12, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.06 + }, + { + "owner": "Acrosi", + "x": 23.48, + "y": 141.6, + "number": 73, + "size": 2133.81, + "name": "2133.81", + "resources": 3.73, + "capital": 0, + "material": 2052.65, + "industry": 1.04, + "population": 5.12, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.06 + }, + { + "owner": "Acrosi", + "x": 78.69, + "y": 165.53, + "number": 78, + "size": 287.19, + "name": "Oplest", + "resources": 15.1, + "capital": 0, + "material": 214.53, + "industry": 34.23, + "population": 67.92, + "colonists": 0, + "production": "Capital", + "freeIndustry": 42.65 + }, + { + "owner": "Acrosi", + "x": 27.08, + "y": 152.15, + "number": 80, + "size": 0.47, + "name": "Asteroid-1", + "resources": 0.26, + "capital": 0, + "material": 0.45, + "industry": 0.12, + "population": 0.47, + "colonists": 0.02, + "production": "Capital", + "freeIndustry": 0.2 + }, + { + "owner": "Acrosi", + "x": 107.41, + "y": 108.56, + "number": 85, + "size": 2080.95, + "name": "NewHome", + "resources": 0.72, + "capital": 0, + "material": 265.69, + "industry": 0, + "population": 24.37, + "colonists": 0, + "production": "Broad-Sword", + "freeIndustry": 6.09 + }, + { + "owner": "Acrosi", + "x": 89.4, + "y": 108.5, + "number": 86, + "size": 851.19, + "name": "Best_Resourse", + "resources": 0.29, + "capital": 0, + "material": 4.89, + "industry": 7.21, + "population": 48.67, + "colonists": 0, + "production": "Capital", + "freeIndustry": 17.57 + }, + { + "owner": "Acrosi", + "x": 74.39, + "y": 134.77, + "number": 94, + "size": 383.14, + "name": "Rich_Mine", + "resources": 21.34, + "capital": 0, + "material": 329.78, + "industry": 14.94, + "population": 100.88, + "colonists": 0, + "production": "Capital", + "freeIndustry": 36.42 + }, + { + "owner": "Acrosi", + "x": 80.6, + "y": 114.86, + "number": 106, + "size": 509.29, + "name": "DW_Similar", + "resources": 9.46, + "capital": 0, + "material": 310.9, + "industry": 0, + "population": 20.24, + "colonists": 0, + "production": "Tarmanguny", + "freeIndustry": 5.06 + }, + { + "owner": "Acrosi", + "x": 44.78, + "y": 140.87, + "number": 116, + "size": 725.93, + "name": "OutPost", + "resources": 2.5, + "capital": 0, + "material": 652.09, + "industry": 94.01, + "population": 98.11, + "colonists": 0, + "production": "BackHit", + "freeIndustry": 95.03 + }, + { + "owner": "Acrosi", + "x": 45.05, + "y": 142.56, + "number": 118, + "size": 845.95, + "name": "CyberTown", + "resources": 4.35, + "capital": 0, + "material": 998.81, + "industry": 1.04, + "population": 5.12, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.06 + }, + { + "owner": "Acrosi", + "x": 204.35, + "y": 144.77, + "number": 125, + "size": 8.45, + "name": "8.45", + "resources": 0.89, + "capital": 0, + "material": 0, + "industry": 1.33, + "population": 8.45, + "colonists": 0.19, + "production": "Capital", + "freeIndustry": 3.11 + }, + { + "owner": "Acrosi", + "x": 123.98, + "y": 100.12, + "number": 130, + "size": 1484.85, + "name": "Florida_Panthers", + "resources": 1.8, + "capital": 0, + "material": 1595.11, + "industry": 0, + "population": 161.84, + "colonists": 0, + "production": "Drone", + "freeIndustry": 40.46 + }, + { + "owner": "Bullet", + "x": 136.09, + "y": 132.62, + "number": 15, + "size": 500, + "name": "PoluHW", + "resources": 10, + "capital": 0, + "material": 439.85, + "industry": 0.32, + "population": 7, + "colonists": 0, + "production": "Capital", + "freeIndustry": 1.99 + }, + { + "owner": "Bullet", + "x": 100.21, + "y": 160.54, + "number": 20, + "size": 2.36, + "name": "St.Louis_Blues", + "resources": 0.48, + "capital": 2.84, + "material": 1.89, + "industry": 2.36, + "population": 2.36, + "colonists": 0.03, + "production": "Capital", + "freeIndustry": 2.36 + }, + { + "owner": "Bullet", + "x": 82.36, + "y": 167.26, + "number": 36, + "size": 500, + "name": "Acr_Last_Base", + "resources": 10, + "capital": 0, + "material": 446.22, + "industry": 0.12, + "population": 2.66, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.76 + }, + { + "owner": "Bullet", + "x": 80.6, + "y": 166.66, + "number": 37, + "size": 500, + "name": "Acr_Second_Base", + "resources": 10, + "capital": 0, + "material": 499.69, + "industry": 0.33, + "population": 7, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2 + }, + { + "owner": "Bullet", + "x": 81.89, + "y": 161.64, + "number": 49, + "size": 1000, + "name": "ACROTIS", + "resources": 10, + "capital": 0, + "material": 998.74, + "industry": 0, + "population": 10.5, + "colonists": 0, + "production": "Capital", + "freeIndustry": 2.63 + }, + { + "owner": "Bullet", + "x": 148.35, + "y": 24.76, + "number": 54, + "size": 1194.53, + "name": "Apollo-1085", + "resources": 3.22, + "capital": 110, + "material": 1200.94, + "industry": 1.75, + "population": 1.75, + "colonists": 0, + "production": "Capital", + "freeIndustry": 1.75 + }, + { + "owner": "Bullet", + "x": 110.13, + "y": 132.32, + "number": 119, + "size": 2067.95, + "name": "Sun", + "resources": 2.4, + "capital": 0, + "material": 1297.25, + "industry": 0, + "population": 12.9, + "colonists": 0, + "production": "Capital", + "freeIndustry": 3.23 + }, + { + "owner": "Bullet", + "x": 190.16, + "y": 28.74, + "number": 134, + "size": 987.06, + "name": "987.06", + "resources": 1.23, + "capital": 0, + "material": 238.81, + "industry": 0.32, + "population": 7, + "colonists": 0, + "production": "Capital", + "freeIndustry": 1.99 + }, + { + "owner": "Bullet", + "x": 4.03, + "y": 5.69, + "number": 136, + "size": 902.49, + "name": "902.49", + "resources": 4.26, + "capital": 2.92, + "material": 901.78, + "industry": 4.32, + "population": 4.32, + "colonists": 0, + "production": "Capital", + "freeIndustry": 4.32 + }, + { + "owner": "Bullet", + "x": 103.57, + "y": 159.27, + "number": 138, + "size": 1130.01, + "name": "Crazy_Eyes", + "resources": 3.84, + "capital": 0, + "material": 1139.6, + "industry": 0.32, + "population": 7, + "colonists": 0, + "production": "Capital", + "freeIndustry": 1.99 + }, + { + "owner": "6AHgA", + "x": 206.73, + "y": 174.35, + "number": 30, + "size": 1936.58, + "name": "1936.58", + "resources": 8.62, + "capital": 0, + "material": 717.36, + "industry": 0, + "population": 629.67, + "colonists": 0, + "production": "6ECnPu3OPHuK", + "freeIndustry": 157.42 + }, + { + "owner": "6AHgA", + "x": 10.07, + "y": 171.84, + "number": 42, + "size": 1000, + "name": "Dallas_Stars", + "resources": 10, + "capital": 0, + "material": 559.73, + "industry": 0.12, + "population": 2.51, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.71 + }, + { + "owner": "6AHgA", + "x": 9.81, + "y": 208.26, + "number": 47, + "size": 1331, + "name": "1331", + "resources": 3.43, + "capital": 0, + "material": 1241.01, + "industry": 3.51, + "population": 112.79, + "colonists": 0, + "production": "6ECnPu3OPHuK", + "freeIndustry": 30.83 + }, + { + "owner": "6AHgA", + "x": 86.32, + "y": 159.51, + "number": 58, + "size": 229.1, + "name": "Smallet", + "resources": 20.98, + "capital": 0, + "material": 170.52, + "industry": 0.01, + "population": 0.17, + "colonists": 0, + "production": "Capital", + "freeIndustry": 0.05 + }, + { + "owner": "6AHgA", + "x": 11.37, + "y": 205.69, + "number": 74, + "size": 48.34, + "name": "48.34", + "resources": 19.13, + "capital": 0, + "material": 2761.11, + "industry": 41.96, + "population": 48.34, + "colonists": 0.05, + "production": "Shields_Research", + "freeIndustry": 43.56 + }, + { + "owner": "6AHgA", + "x": 188.23, + "y": 37.24, + "number": 93, + "size": 1000, + "name": "1000.00", + "resources": 10, + "capital": 0, + "material": 71.99, + "industry": 0, + "population": 34.83, + "colonists": 0, + "production": "6ECnPu3OPHuK", + "freeIndustry": 8.71 + }, + { + "owner": "6AHgA", + "x": 13.2, + "y": 177.53, + "number": 96, + "size": 1158.87, + "name": "1158.87", + "resources": 5.34, + "capital": 0, + "material": 880.38, + "industry": 6.01, + "population": 129.8, + "colonists": 0, + "production": "Capital", + "freeIndustry": 36.96 + }, + { + "owner": "Varlon", + "x": 121.02, + "y": 68.79, + "number": 11, + "size": 500, + "name": "AnnoSatanae", + "resources": 10, + "capital": 0, + "material": 179.48, + "industry": 315.66, + "population": 345.33, + "colonists": 0, + "production": "Shields_Research", + "freeIndustry": 323.08 + }, + { + "owner": "Varlon", + "x": 122.87, + "y": 70.86, + "number": 13, + "size": 877.97, + "name": "LakeOfTears", + "resources": 5.42, + "capital": 0, + "material": 405.16, + "industry": 499.67, + "population": 785.41, + "colonists": 0, + "production": "Capital", + "freeIndustry": 571.1 + }, + { + "owner": "Varlon", + "x": 119.8, + "y": 66.88, + "number": 60, + "size": 906.19, + "name": "Sorry_too!", + "resources": 1.74, + "capital": 16.99, + "material": 0, + "industry": 906.19, + "population": 906.19, + "colonists": 33.13, + "production": "Capitality", + "freeIndustry": 906.19 + }, + { + "owner": "Varlon", + "x": 121.62, + "y": 73.99, + "number": 68, + "size": 578.83, + "name": "CryingWolf", + "resources": 5.26, + "capital": 0, + "material": 276.53, + "industry": 267.63, + "population": 305.86, + "colonists": 0, + "production": "Shields_Research", + "freeIndustry": 277.19 + }, + { + "owner": "Varlon", + "x": 129.21, + "y": 76.22, + "number": 121, + "size": 605, + "name": "Anathema", + "resources": 4.9, + "capital": 0, + "material": 567.99, + "industry": 10.3, + "population": 31.52, + "colonists": 0, + "production": "Capital", + "freeIndustry": 15.61 + }, + { + "owner": "Varlon", + "x": 126.7, + "y": 67.28, + "number": 123, + "size": 1100, + "name": "Gehenna", + "resources": 7, + "capital": 0, + "material": 521.92, + "industry": 495.08, + "population": 1100, + "colonists": 47.47, + "production": "Capital", + "freeIndustry": 646.31 + }, + { + "owner": "Pahanchiks", + "x": 169.38, + "y": 93.72, + "number": 2, + "size": 500, + "name": "KDW8", + "resources": 10, + "capital": 0, + "material": 413.27, + "industry": 87.23, + "population": 318.93, + "colonists": 0, + "production": "Capital", + "freeIndustry": 145.16 + }, + { + "owner": "Pahanchiks", + "x": 29.47, + "y": 57.15, + "number": 10, + "size": 1210, + "name": "Pisk", + "resources": 4.9, + "capital": 0, + "material": 0, + "industry": 1138.39, + "population": 1210, + "colonists": 77.55, + "production": "go_home", + "freeIndustry": 1156.3 + }, + { + "owner": "Pahanchiks", + "x": 147.17, + "y": 99.63, + "number": 18, + "size": 1689.54, + "name": "Gigant", + "resources": 2.17, + "capital": 0, + "material": 1615.74, + "industry": 16.84, + "population": 82.57, + "colonists": 0, + "production": "Capital", + "freeIndustry": 33.27 + }, + { + "owner": "Pahanchiks", + "x": 173.96, + "y": 96.15, + "number": 19, + "size": 1077.19, + "name": "KHW2", + "resources": 7.86, + "capital": 0, + "material": 0, + "industry": 253.05, + "population": 1077.19, + "colonists": 10.77, + "production": "Capital", + "freeIndustry": 459.08 + }, + { + "owner": "Pahanchiks", + "x": 42, + "y": 42.41, + "number": 22, + "size": 881.33, + "name": "Nok", + "resources": 1.84, + "capital": 0.03, + "material": 0, + "industry": 881.33, + "population": 881.33, + "colonists": 124.35, + "production": "Kak_ia_tebia", + "freeIndustry": 881.33 + }, + { + "owner": "Pahanchiks", + "x": 43.37, + "y": 35.87, + "number": 27, + "size": 5.85, + "name": "Tak", + "resources": 0.41, + "capital": 0, + "material": 0, + "industry": 5.51, + "population": 5.85, + "colonists": 9.69, + "production": "Shields_Research", + "freeIndustry": 5.59 + }, + { + "owner": "Pahanchiks", + "x": 5.53, + "y": 105.07, + "number": 35, + "size": 646.27, + "name": "KDW1", + "resources": 5.46, + "capital": 0, + "material": 0, + "industry": 542.74, + "population": 646.27, + "colonists": 12.36, + "production": "Capital", + "freeIndustry": 568.62 + }, + { + "owner": "Pahanchiks", + "x": 52.64, + "y": 30.03, + "number": 44, + "size": 500.11, + "name": "Nuo", + "resources": 7.13, + "capital": 8.55, + "material": 0, + "industry": 500.11, + "population": 500.11, + "colonists": 60.01, + "production": "vot_tebe", + "freeIndustry": 500.11 + }, + { + "owner": "Pahanchiks", + "x": 20.97, + "y": 60.61, + "number": 61, + "size": 794.51, + "name": "Nik", + "resources": 6.54, + "capital": 0, + "material": 624.19, + "industry": 134.31, + "population": 163.62, + "colonists": 0, + "production": "Scout", + "freeIndustry": 141.64 + }, + { + "owner": "Pahanchiks", + "x": 4.94, + "y": 104.73, + "number": 64, + "size": 794.38, + "name": "KDW4", + "resources": 1.91, + "capital": 25.4, + "material": 0, + "industry": 794.38, + "population": 794.38, + "colonists": 37.06, + "production": "Capital", + "freeIndustry": 794.38 + }, + { + "owner": "Pahanchiks", + "x": 37.42, + "y": 52.5, + "number": 70, + "size": 516.51, + "name": "Rik", + "resources": 7.25, + "capital": 0, + "material": 0, + "industry": 516.51, + "population": 516.51, + "colonists": 50.67, + "production": "Scout", + "freeIndustry": 516.51 + }, + { + "owner": "Pahanchiks", + "x": 43.75, + "y": 41.38, + "number": 77, + "size": 2198.97, + "name": "Bik", + "resources": 2.24, + "capital": 0, + "material": 2100.04, + "industry": 60.26, + "population": 363.79, + "colonists": 0, + "production": "Ant", + "freeIndustry": 136.14 + }, + { + "owner": "Pahanchiks", + "x": 28.25, + "y": 60.36, + "number": 88, + "size": 550, + "name": "Pok", + "resources": 7, + "capital": 0, + "material": 499.24, + "industry": 0, + "population": 17.04, + "colonists": 0, + "production": "Scout", + "freeIndustry": 4.26 + }, + { + "owner": "Pahanchiks", + "x": 0.44, + "y": 100.63, + "number": 89, + "size": 500, + "name": "KDW3", + "resources": 10, + "capital": 0, + "material": 139.43, + "industry": 340.17, + "population": 500, + "colonists": 20, + "production": "Capital", + "freeIndustry": 380.13 + }, + { + "owner": "Pahanchiks", + "x": 56.08, + "y": 23.7, + "number": 95, + "size": 617.94, + "name": "Philadelphia_Flyers", + "resources": 0.03, + "capital": 0, + "material": 424.9, + "industry": 103.84, + "population": 617.94, + "colonists": 53.23, + "production": "Capital", + "freeIndustry": 232.37 + }, + { + "owner": "Pahanchiks", + "x": 176.92, + "y": 98.07, + "number": 101, + "size": 110, + "name": "Greenday_Tpyn!", + "resources": 23.27, + "capital": 0, + "material": 115.58, + "industry": 34.69, + "population": 110, + "colonists": 3.05, + "production": "Capital", + "freeIndustry": 53.52 + }, + { + "owner": "Pahanchiks", + "x": 2.86, + "y": 65.52, + "number": 102, + "size": 599.69, + "name": "Nak", + "resources": 4, + "capital": 0, + "material": 0.16, + "industry": 593.84, + "population": 599.69, + "colonists": 29.98, + "production": "Shields_Research", + "freeIndustry": 595.3 + }, + { + "owner": "Pahanchiks", + "x": 171.78, + "y": 104.98, + "number": 109, + "size": 847.25, + "name": "Pittsburg_Penguins", + "resources": 4.11, + "capital": 0, + "material": 770.66, + "industry": 67.32, + "population": 579.23, + "colonists": 0, + "production": "Capital", + "freeIndustry": 195.3 + }, + { + "owner": "Pahanchiks", + "x": 17.11, + "y": 96.36, + "number": 117, + "size": 3.66, + "name": "KTrash1", + "resources": 0.97, + "capital": 0.75, + "material": 0.55, + "industry": 3.66, + "population": 3.66, + "colonists": 1.25, + "production": "Drive_Research", + "freeIndustry": 3.66 + }, + { + "owner": "Pahanchiks", + "x": 177.24, + "y": 100.74, + "number": 126, + "size": 500, + "name": "KDW6", + "resources": 10, + "capital": 0, + "material": 347.22, + "industry": 50.9, + "population": 341.46, + "colonists": 0, + "production": "Capital", + "freeIndustry": 123.54 + }, + { + "owner": "Pahanchiks", + "x": 177.5, + "y": 102.76, + "number": 128, + "size": 663.61, + "name": "KDW7", + "resources": 8.68, + "capital": 0, + "material": 408.76, + "industry": 197.71, + "population": 578.37, + "colonists": 0, + "production": "Capital", + "freeIndustry": 292.87 + }, + { + "owner": "Pahanchiks", + "x": 208.92, + "y": 93.86, + "number": 133, + "size": 500, + "name": "KDW2", + "resources": 10, + "capital": 0, + "material": 140.79, + "industry": 228.53, + "population": 500, + "colonists": 19.71, + "production": "Scout", + "freeIndustry": 296.39 + }, + { + "owner": "Pahanchiks", + "x": 4.22, + "y": 97.17, + "number": 135, + "size": 1331, + "name": "KHW1", + "resources": 3.43, + "capital": 0, + "material": 353.1, + "industry": 787.23, + "population": 1331, + "colonists": 55.78, + "production": "aa", + "freeIndustry": 923.17 + } + ], + "uninhabitedPlanet": [ + { + "x": 13.05, + "y": 32.71, + "number": 0, + "size": 6.14, + "name": "6.14", + "resources": 0.18, + "capital": 0, + "material": 3.39 + }, + { + "x": 29.73, + "y": 153.7, + "number": 3, + "size": 1042.91, + "name": "Calgary_Flames", + "resources": 8.59, + "capital": 0, + "material": 359.64 + }, + { + "x": 207.84, + "y": 57.14, + "number": 5, + "size": 1453.25, + "name": "Bak", + "resources": 7.12, + "capital": 0, + "material": 494.22 + }, + { + "x": 106.26, + "y": 152.38, + "number": 6, + "size": 9.08, + "name": "Dermo", + "resources": 0.99, + "capital": 0.55, + "material": 9.08 + }, + { + "x": 51.1, + "y": 169.61, + "number": 9, + "size": 1701.13, + "name": "Los_Angeles_Kings", + "resources": 2.46, + "capital": 0, + "material": 1865.45 + }, + { + "x": 140.86, + "y": 6.66, + "number": 16, + "size": 1770.49, + "name": "HW", + "resources": 1.18, + "capital": 0, + "material": 1798.24 + }, + { + "x": 12.27, + "y": 2.83, + "number": 25, + "size": 500, + "name": "500-2", + "resources": 10, + "capital": 0, + "material": 496.24 + }, + { + "x": 125.99, + "y": 168.36, + "number": 26, + "size": 805.26, + "name": "Bardel", + "resources": 1.68, + "capital": 0, + "material": 912.79 + }, + { + "x": 136.71, + "y": 15.56, + "number": 31, + "size": 688.71, + "name": "Apollo-688", + "resources": 3.78, + "capital": 0, + "material": 630.38 + }, + { + "x": 133.22, + "y": 118.89, + "number": 34, + "size": 85.36, + "name": "Mycop", + "resources": 16.76, + "capital": 42.97, + "material": 84.5 + }, + { + "x": 141.39, + "y": 31.9, + "number": 38, + "size": 7.93, + "name": "MAPC", + "resources": 0.51, + "capital": 10.8, + "material": 7.93 + }, + { + "x": 186, + "y": 44.55, + "number": 40, + "size": 708.67, + "name": "708.67", + "resources": 7.36, + "capital": 0, + "material": 21.51 + }, + { + "x": 136.05, + "y": 122.83, + "number": 41, + "size": 500, + "name": "PolHW", + "resources": 10, + "capital": 0, + "material": 480.33 + }, + { + "x": 119.22, + "y": 160.83, + "number": 43, + "size": 1140.86, + "name": "Debil", + "resources": 3.19, + "capital": 0, + "material": 1143.58 + }, + { + "x": 78.64, + "y": 115.6, + "number": 45, + "size": 500, + "name": "Native2", + "resources": 10, + "capital": 0, + "material": 500.5 + }, + { + "x": 192.84, + "y": 204.69, + "number": 53, + "size": 1031.83, + "name": "1031.83", + "resources": 1.05, + "capital": 0, + "material": 898.95 + }, + { + "x": 193.61, + "y": 164.04, + "number": 55, + "size": 1038.72, + "name": "Washington_Capitals", + "resources": 0.28, + "capital": 0, + "material": 0.32 + }, + { + "x": 33.66, + "y": 61.91, + "number": 57, + "size": 550, + "name": "Pik", + "resources": 7, + "capital": 0, + "material": 500 + }, + { + "x": 12.64, + "y": 0.49, + "number": 59, + "size": 500, + "name": "500-1", + "resources": 10, + "capital": 0.08, + "material": 500 + }, + { + "x": 129.31, + "y": 124.1, + "number": 62, + "size": 492.05, + "name": "Planet", + "resources": 15.12, + "capital": 193.52, + "material": 456.2 + }, + { + "x": 141.62, + "y": 101.82, + "number": 65, + "size": 257.26, + "name": "Montreal_Canadiens", + "resources": 23.04, + "capital": 0, + "material": 149.09 + }, + { + "x": 131.8, + "y": 3.28, + "number": 67, + "size": 716.64, + "name": "Apollo-716", + "resources": 1.06, + "capital": 6.99, + "material": 716.64 + }, + { + "x": 128.25, + "y": 119.32, + "number": 81, + "size": 873.1, + "name": "SunMoonStar", + "resources": 8.23, + "capital": 0, + "material": 859.27 + }, + { + "x": 122.29, + "y": 166.98, + "number": 83, + "size": 1771.56, + "name": "ye6ok", + "resources": 1.18, + "capital": 0, + "material": 1950.67 + }, + { + "x": 185.14, + "y": 41.75, + "number": 90, + "size": 500, + "name": "500-3", + "resources": 10, + "capital": 1.09, + "material": 4.36 + }, + { + "x": 68.27, + "y": 141.82, + "number": 91, + "size": 1748.97, + "name": "Nabysko", + "resources": 1.94, + "capital": 0, + "material": 1559.01 + }, + { + "x": 133.85, + "y": 125.47, + "number": 97, + "size": 1000, + "name": "Home", + "resources": 10, + "capital": 0, + "material": 965.36 + }, + { + "x": 64.7, + "y": 194.76, + "number": 99, + "size": 1210, + "name": "Buffalo_Sabres", + "resources": 4.9, + "capital": 230.4, + "material": 5208.17 + }, + { + "x": 188.26, + "y": 43.15, + "number": 100, + "size": 685.48, + "name": "685.48", + "resources": 2.08, + "capital": 24.61, + "material": 20.12 + }, + { + "x": 3.9, + "y": 18.77, + "number": 107, + "size": 1705.22, + "name": "1705.22", + "resources": 2.03, + "capital": 0, + "material": 1710.54 + }, + { + "x": 76.14, + "y": 130.78, + "number": 124, + "size": 2437.87, + "name": "Diareng", + "resources": 2.44, + "capital": 0, + "material": 2477.34 + }, + { + "x": 141.92, + "y": 3.31, + "number": 127, + "size": 500, + "name": "DW-1", + "resources": 10, + "capital": 0, + "material": 379.12 + }, + { + "x": 119.22, + "y": 164.81, + "number": 132, + "size": 485.37, + "name": "Katorga", + "resources": 7.18, + "capital": 0, + "material": 477.94 + }, + { + "x": 136.88, + "y": 12.78, + "number": 137, + "size": 658.47, + "name": "Apollo-658", + "resources": 4.65, + "capital": 0, + "material": 658.47 + } + ], + "localFleet": [ + { + "name": "cargo1", + "groups": 4, + "destination": 51, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "cargo8", + "groups": 3, + "destination": 63, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Acrosi", + "groups": 1, + "destination": 129, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def2", + "groups": 5, + "destination": 84, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Acr", + "groups": 1, + "destination": 129, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def6", + "groups": 1, + "destination": 4, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def7", + "groups": 1, + "destination": 4, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def11", + "groups": 1, + "destination": 4, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Pahan1", + "groups": 6, + "destination": 10, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def12", + "groups": 1, + "destination": 4, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def13", + "groups": 1, + "destination": 24, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def16", + "groups": 4, + "destination": 10, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def18", + "groups": 1, + "destination": 129, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Banda", + "groups": 5, + "destination": 10, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def19", + "groups": 3, + "destination": 84, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Banda2", + "groups": 2, + "destination": 51, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Bull2", + "groups": 9, + "destination": 85, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Bull4", + "groups": 5, + "destination": 82, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Bull5", + "groups": 7, + "destination": 32, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Bull6", + "groups": 2, + "destination": 50, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def21", + "groups": 3, + "destination": 114, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def22", + "groups": 1, + "destination": 4, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def23", + "groups": 1, + "destination": 4, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def25", + "groups": 1, + "destination": 122, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def26", + "groups": 2, + "destination": 129, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def27", + "groups": 1, + "destination": 129, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Acrosi3", + "groups": 4, + "destination": 10, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Acrosi4", + "groups": 8, + "destination": 29, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "ALM1", + "groups": 11, + "destination": 45, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "ALM2", + "groups": 2, + "destination": 29, + "speed": 0, + "state": "In_Orbit" + }, + { + "name": "Def28", + "groups": 2, + "destination": 50, + "speed": 0, + "state": "In_Orbit" + } + ], + "localGroup": [ + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 76, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "c1b96767-472f-5a96-8d83-369b5800b1c1", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 8, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "d3c4e0e7-de33-5145-b28b-293b2e02c445", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "fe8805a6-d03c-5b66-a062-c9eaa2266d20", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ce729a18-d695-5bed-857e-2806e576a1f1", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 56, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0d0263b4-ff6b-5d55-b7cd-ac73d873812c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "fde80508-8829-5e8f-afa4-e16d2ce3e24f", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "78449cc4-c2ec-53de-a0a3-87512990f742", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 121, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0f48d7f3-8e0d-539d-afbe-8a59f6ef2fcf", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 131, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ee402052-9f78-5244-a57f-0c36e497ebef", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 38, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "25de95f9-580a-5135-9ad7-f6ee91e74c9f", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 67, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "74c19316-4e30-574d-b7a6-3c98c13342d7", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySpirit", + "tech": { + "cargo": 1, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 24.75, + "race": "Tancordia", + "id": "6875713d-719e-5740-ae2b-1dae8925a18d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ae51be3a-e3f7-59c1-83bd-ee193e3a0b6a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "e9addad6-60b0-5401-8b2d-e77c7dcea116", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 18, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0ecedad6-87f3-5371-b0a5-1d8e44e934cd", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2a64b7aa-d58b-5a04-81c5-600d4743dd1a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 40, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ee77f33d-5bf5-5935-81b1-ae0b4c80bd06", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 65, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "407c3512-cff7-57fe-8c61-1492eedf2f38", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 99, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "8aa2ce73-3bfe-5f70-8993-da801d34f6ab", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyRevenge", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 24.75, + "race": "Tancordia", + "id": "0885e23e-96a9-53a4-87bf-7ffdc8d25a63", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "HolyWarrior", + "tech": { + "cargo": 0, + "drive": 2.1, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "db5a16d7-ea0b-5576-bbbf-2cf7086b74f6", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 2.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 33, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "93151891-83e7-57ab-b22f-3ab7af738478", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyWarrior", + "tech": { + "cargo": 0, + "drive": 2.1, + "shields": 3.53, + "weapons": 1.88 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "5f9fdb83-8163-56e2-a538-9cb04f860936", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 123, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "4de87a01-538f-575b-aa07-5788768a44f7", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 60, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "17d48fe8-b2cd-58b7-ada4-b16994cf0f91", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyFear", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 58.87, + "race": "Tancordia", + "id": "503d36af-4488-5ef0-b5de-9cd23cd41084", + "state": "In_Orbit", + "fleet": "ALM2" + }, + { + "number": 20, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "64596118-d163-5699-ab59-c47355ed2cf1", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 32, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 6.09, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0e551f01-bea8-5499-9295-4edd11ce9275", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 95, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "998ee779-660a-5105-b749-dcceeb29b700", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 44, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "cdd558d3-b4b7-52e3-959a-01c9bfc653d6", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 113, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "49870a7d-956f-5aa0-a0c9-66a0b661056e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 27, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "6873b5e0-2a1b-567e-b4b6-ba48ea48e802", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 77, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "06925742-c92a-5d80-8754-f6352ccdfc6e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 22, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "74bf52d3-1051-5785-b08e-d31561d7b2e8", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 70, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "7e2aa02b-5dc4-5574-a33e-d4c216737347", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 64, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "66380351-e3b3-54b1-9bb7-6615b9be62ca", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 35, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "aa23b889-0780-5c75-be58-513f49d4a87e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 89, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "87194948-6d67-5234-894d-25dbdea031db", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.61, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "550e32b9-4068-5c7f-8237-a0dd1f26ece0", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 21, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.81, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "d52f6245-4857-5703-8125-0ae3c3876baf", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 1, + "class": "HolyPeace", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 2.11, + "weapons": 1.5 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "9a818b63-4fc9-59d6-bfe3-03f683715a0e", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 102, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "d2cd96c7-fb2f-5ea2-a0b0-23aadc221cb9", + "state": "In_Orbit", + "fleet": "cargo1" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "5a0ef736-42d3-5394-b385-6aa62527b0fc", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 86, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0561b727-bdca-5c26-865c-4845795e7edb", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "58caa413-f1d5-5e5a-812c-e4c3977cd534", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 124, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f0890948-3c59-54b4-bdc6-092d383d5e62", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "45955281-0c7c-5e4c-9e11-c2c40efb3e58", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 106, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "86968f2e-fc10-5366-9336-af8ceec34f9d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "8f0956d0-f58e-52b3-97b3-5b77616680c7", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 130, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ab3be9b6-f441-5687-8538-06be6837dd23", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 81, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ce28e59d-1643-5c26-b3d1-74aaa3e796d6", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 26, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2b76689e-2be9-5103-88b4-e929ac180b33", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2a13adc9-41f1-5f1e-b1f4-f9f7709fcaa9", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyFather", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 2.09, + "weapons": 1.85 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "42f76fd5-39ef-5881-9e96-3090979df3e2", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 100, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "04c131cb-f3f1-53c3-9162-2865caae0119", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyMother", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 2.14, + "weapons": 2.21 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "7bc54e58-b931-55df-8864-e4b58748f559", + "state": "In_Orbit", + "fleet": "Def19" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "4ef24cc5-69b3-51c8-a8be-e54c2f047fa5", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 93, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "de8001eb-3bbd-5c4c-9b43-f57727b13d36", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 135, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "43143f40-e0ed-5651-be78-4a59aea98398", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 46, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "654d6549-470b-594f-bbf4-5f4b01b44597", + "state": "In_Orbit", + "fleet": "cargo1" + }, + { + "number": 1, + "class": "HolySpirit", + "tech": { + "cargo": 1, + "drive": 3.81, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 24.75, + "race": "Tancordia", + "id": "6b748afc-108b-5933-b605-dbfd1283c605", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 9, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 83, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2018e46b-c2cf-56ee-99b6-4198525138bf", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 2, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "855d3f4f-5a4e-5678-b438-5ad9a51c2723", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 21, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0cb8bb36-2707-55b8-9d29-1d880530a1d0", + "state": "In_Orbit", + "fleet": "cargo8" + }, + { + "number": 17, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "33c78d02-ffc9-5df5-9017-918e005b5818", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "Angel", + "tech": { + "cargo": 1, + "drive": 4.63, + "shields": 1.34, + "weapons": 2.59 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 84.31, + "race": "Tancordia", + "id": "5e0450e1-acec-5f13-bb51-ef5c727f5206", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 33, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0299ab68-b1d6-5c0d-98ec-a4dd0535c8e7", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 97, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f0a94be5-3af6-534b-a8cd-7e9c2d31ad0f", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.21, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 94, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "353840c6-3720-5d10-86c7-d6667de4f529", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.41, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0ea4bdec-0e97-56e3-8bf9-9e5e2e303e91", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "5515386b-054e-501e-84de-4e44adcab2ef", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "19d4a93c-ae3e-59f3-9b84-3102cfe19579", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "ArchAngel", + "tech": { + "cargo": 1, + "drive": 4.57, + "shields": 4.52, + "weapons": 2.56 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 70.72, + "race": "Tancordia", + "id": "298455f2-a7c3-5019-b838-48dff1f77e90", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 83, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "35f632d6-2f85-5862-8cbc-8be2efce421c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 5, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f081f7e2-4f20-5fab-afc8-7ee9e51e7eee", + "state": "In_Orbit", + "fleet": "Def2" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 47, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "e4e83504-fc42-5e69-ae10-4f416a679c3d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 59, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "cff70000-645c-5f51-b811-39cb6caff8ff", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 25, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "9fc146f9-586a-577e-b54c-761c9bde3fb2", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 101, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "7a5bd189-caf0-5a9c-80f2-adc125936433", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 126, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "1d92183d-f227-5431-950f-7aa289537315", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySign", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 1.76, + "weapons": 2.56 + }, + "cargo": "-", + "load": 0, + "destination": 122, + "origin": 129, + "range": 7.94, + "speed": 0, + "mass": 168.7, + "race": "Tancordia", + "id": "ea8a1391-c7b3-5d4b-b8bd-b18cd6eefb5d", + "state": "In_Space", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 132, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "637e0bbb-7382-5fba-8ee6-cbd019498aa1", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 5, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "00c3384d-233d-5df4-9900-a2acad0846f7", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 29, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "80134b6e-30aa-58e6-a5c7-a5e1c82f06b4", + "state": "In_Orbit", + "fleet": "Bull5" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 117, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "c5caab15-aaee-5db6-89c9-9e2d234002a5", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f3b90726-fffe-5d20-b43d-8d3204a03887", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f45acd56-3151-5882-a2dc-91d3cf3872f5", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 88, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2af0f802-d675-5687-803e-378b14e9ff58", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 57, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0343ea81-cc37-5562-bdc3-e00ecb42c577", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0a865579-da92-598a-8e05-03a7c891fc7d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 43, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "93873466-3dbb-5f00-ac9f-0beedc7afe33", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 34, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "3ec33cc1-1e9c-5e0d-9c80-e584b286a82c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.47, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "c3e70e95-3844-59d2-982e-415525119c5f", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.68, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 111, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "39cb4177-4aa4-58f4-99b1-70936f21a725", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 2.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "7f5b8b02-78ef-5ca3-8884-15fc461d1a4c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 149, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.09, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "9681f47a-b083-5aef-aeab-6ead2bbeea80", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 1, + "class": "HolyHorror", + "tech": { + "cargo": 0, + "drive": 5.1, + "shields": 2.73, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 83, + "speed": 0, + "mass": 198, + "race": "Tancordia", + "id": "3179ae8e-1dae-53f0-9245-1cf1370a9287", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 160, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f6aaf22a-a5aa-50af-a535-9c90a757bb01", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 1, + "class": "HolyTrinity", + "tech": { + "cargo": 0, + "drive": 5.1, + "shields": 2.73, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "dd58d543-af7b-5e84-bfad-d164e99ec695", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "HolyLight", + "tech": { + "cargo": 1, + "drive": 1.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "dba04345-ee08-54b5-abac-2c689810060a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 10, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 3.81, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ffe92756-0d71-563f-8a65-579dbc46d30d", + "state": "In_Orbit", + "fleet": "cargo8" + }, + { + "number": 21, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 6.09, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "d41a5222-66c4-5837-bb17-b95ad029bcf8", + "state": "In_Orbit", + "fleet": "cargo8" + }, + { + "number": 90, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.11, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ff88b8a3-d203-509e-ac66-aac4d5d4a319", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 74, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 2.73, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "2d864b2e-2417-5e55-be45-ba66075dfb51", + "state": "In_Orbit", + "fleet": "Acr" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.11, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 115, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "8c435432-7389-55e1-af96-5b8887f36c93", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 13, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "93b7cd69-4f68-52cc-983e-cf825d5848ca", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 38, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.12, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f68781ae-6827-53aa-806d-e922a6544e7e", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.12, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 120, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ad76f2da-a48a-5e80-8c17-1dede7bf6dad", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyGrail", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "29b1c5a5-0093-5785-bc61-ef3f3d869826", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 8, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "b6de7be5-54a0-5c2b-8e91-94e7fe2dd9dd", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySpear", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "7d8c85ae-6a1d-5500-b2fc-cd354713117c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyRavings", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "730a79a1-9432-5ab4-a5f9-f250892a5f87", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 70, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "52db3931-bb37-5372-a13a-23b875a669f6", + "state": "In_Orbit", + "fleet": "cargo1" + }, + { + "number": 3, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "31233623-71a9-5b29-858d-77dcb14a6c02", + "state": "In_Orbit", + "fleet": "Banda" + }, + { + "number": 1, + "class": "HolySword", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "7053a306-faa3-50ca-934b-bbdb82db0da0", + "state": "In_Orbit", + "fleet": "Pahan1" + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "0fe2d695-eb19-5286-aa75-88562126a37d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 49, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "1d9bd461-a532-5752-bc9f-77a6d4e76d95", + "state": "In_Orbit", + "fleet": "Bull5" + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "d1531732-0e91-5043-ba68-ecf6655aa6ed", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "b818a8cb-9e24-54a1-bbed-d69dafb2b7af", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 99, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "be2849c1-45a7-5cf3-995a-fc2d8057ce65", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "5f89851c-6aac-5389-88e0-4bd965eebdb7", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 33, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "962e84a3-7147-5754-8ee4-dacc5fc0a033", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 95, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "983fb832-b457-5c86-896e-65d0ba5c288e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "91f25671-93af-5bfb-af6c-6af2e25b93cf", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 66, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "1210f8ec-7ca1-5c90-8ab2-8ed6555643f7", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 44, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "e98e75de-5217-5d02-8c68-8bcf4cbba97d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 27, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "b6dbc0b9-d524-59e8-a4ea-0bbde0d7956e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 77, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "bc283cda-1d59-5a33-9518-53a2550b92ec", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 22, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "bc7a17d7-938e-5032-bbdf-4777116f0abc", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 70, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "3c4f0aca-5af9-55ed-88ef-022cd4d2c27a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 57, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "958eadda-28f4-5966-9dc4-8ba2a99162e6", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 113, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "57fc1395-9108-533d-a25a-13a001337d09", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 112, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "ac28588d-07e3-5b90-8fb6-6401cf38c7db", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 88, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "75cf0597-eb5d-5441-b83e-b75c41ba0aff", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "c9757095-f5c1-502c-b842-1fcd1b93c226", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "f4109d1a-9026-588f-b95e-d21b8b256130", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "2a6941d9-e0c1-5c32-ab7d-a1f26fa74a59", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "17f51955-c4f5-5fc6-9339-82e024fa835a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "532aee0b-6fb8-5c5c-ae3c-4f753e8aef20", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 76, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "9ca8a80e-624f-54fa-91ab-44d2badb4bfa", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "465703ad-7f21-520d-a3f6-4e49a72bb269", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "3abc074b-4046-580b-8c72-197e6fa42e23", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyGrail2", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "49e9480a-6cfe-5ff5-99e4-8876bbec6882", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 200, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 82, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "70381094-4273-5ec5-9d97-3a2daead4864", + "state": "In_Orbit", + "fleet": "Bull4" + }, + { + "number": 1, + "class": "HolyMartyr", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "6ee5da70-4255-5d2c-8ee2-f488a0118b96", + "state": "In_Orbit", + "fleet": "Bull5" + }, + { + "number": 37, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "ac5cc7e9-4680-5078-80fd-edd56af41a11", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 15, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "3fb60e08-66f1-5e2f-91e1-7a387f0f0c1d", + "state": "In_Orbit", + "fleet": "Pahan1" + }, + { + "number": 1, + "class": "Saviour", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 105.16, + "race": "Tancordia", + "id": "1258fd4e-661b-5c85-a2e7-f922a1aba59e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "84775467-eac9-58b8-8466-88eb48cbba8c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "cbcb1b66-59a9-59ca-b2b8-7abf154dc6a6", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "ccd6f110-97a5-5081-a007-38f8e1387de7", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 131, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "10f8b324-13a3-5912-a887-64d0e503c591", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 67, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "6e6a5177-71de-5f7d-834d-4fe153bd0d73", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyGrail", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "7d90339f-488f-58d8-a118-737dfe82eb0f", + "state": "In_Orbit", + "fleet": "Pahan1" + }, + { + "number": 60, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.53, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "7d56f165-c2aa-51fa-84d3-239dfa277f79", + "state": "In_Orbit", + "fleet": "Def6" + }, + { + "number": 1, + "class": "HolySpear", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "b66af58a-7039-57dd-96e6-f268d81dc80a", + "state": "In_Orbit", + "fleet": "Def2" + }, + { + "number": 41, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2aec44f4-b3fc-53f7-af01-06565eda6fa7", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "e204b22e-3112-59d6-8571-2aecf3a0be4e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 35, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.53, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "4c565d59-f50a-5509-8765-bcaf42f056ec", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySword", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "51288ce4-b69d-561a-a4a0-a4b408831118", + "state": "In_Orbit", + "fleet": "Bull5" + }, + { + "number": 69, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f3aed80b-f85f-5cd1-b6c5-e5e99c03918d", + "state": "In_Orbit", + "fleet": "Banda2" + }, + { + "number": 24, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.53, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "e59329f5-4a55-59af-b48e-688d7dbb94b1", + "state": "In_Orbit", + "fleet": "Def7" + }, + { + "number": 76, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2e57764e-c658-562c-92da-299af97960d7", + "state": "In_Orbit", + "fleet": "ALM2" + }, + { + "number": 1, + "class": "Paladin", + "tech": { + "cargo": 0, + "drive": 5.18, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 105.55, + "race": "Tancordia", + "id": "8a4edf71-a9c0-5c2d-ab80-d7f7842e3fd2", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 3.53, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 83, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "d0f02b60-afe1-5ad0-95f7-416c28486d19", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 79, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 2.73, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "61dd202c-344a-595a-afcb-44a33ed76787", + "state": "In_Orbit", + "fleet": "Acrosi" + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 93, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "291c8956-14ab-5283-936c-08f84bf97a80", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 100, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "d72f12bc-7a7f-5dd0-bcab-0881081c1806", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "13a322b6-93d4-53c8-ab6b-02b6bafc575b", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.14, + "shields": 0, + "weapons": 3.12 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "d39b1831-22e6-5131-bd25-4690f4277a23", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyGrail2", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 82, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "f96cd083-0e78-56e2-a2fd-79ca77ea635f", + "state": "In_Orbit", + "fleet": "Bull4" + }, + { + "number": 61, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.53, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "3f4fbdbb-63e1-5055-977e-2921093fddc3", + "state": "In_Orbit", + "fleet": "Def16" + }, + { + "number": 1, + "class": "HolySpear", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "33c431fa-5878-5fc0-9e3d-0ba3cd7c1b09", + "state": "In_Orbit", + "fleet": "Def11" + }, + { + "number": 1, + "class": "HolyFanatic", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 97.98, + "race": "Tancordia", + "id": "5c133747-4900-5436-94a8-64cd06190a8c", + "state": "In_Orbit", + "fleet": "Banda" + }, + { + "number": 44, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "3a70f27e-4c13-5643-ba15-57cc89684d2a", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "50361e29-9d6c-5d28-be0b-00c4d82b966f", + "state": "In_Orbit", + "fleet": "Def2" + }, + { + "number": 35, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.53, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "bc9e5a72-4f34-5c4f-910a-9b1e52393dd4", + "state": "In_Orbit", + "fleet": "Def12" + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 43, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "35014c45-88d1-57f9-b40c-8f79519f8dff", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySword", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 82, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "c61ba59f-e2ba-5c1b-bfe4-92ea3cdd00cd", + "state": "In_Orbit", + "fleet": "Bull4" + }, + { + "number": 1, + "class": "HolySpear", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "2328307c-3792-53cf-a84d-f1294cab0189", + "state": "In_Orbit", + "fleet": "Banda" + }, + { + "number": 25, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.53, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "cc45c6bc-b2ef-5ec1-be90-c3e0586ca304", + "state": "In_Orbit", + "fleet": "Def13" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "91090a79-7fbc-5fd9-ae7c-3550391f2aa5", + "state": "In_Orbit", + "fleet": "Pahan1" + }, + { + "number": 85, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "9ae98c52-5324-56d3-ac98-65995c1c2e0f", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "Crusader", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 105.55, + "race": "Tancordia", + "id": "58db4d5f-ad25-5098-99bf-466bc4dec96c", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 123, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "a1cecd6f-27a1-51b0-9d7f-28803ac6ae2d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 60, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "d4d24c73-a2d9-53bc-a6bf-1c89261084e6", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 121, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "9a726455-7d55-5a64-a229-38c8c957b513", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 12, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "c3865190-4716-5e3b-8704-c828d90f43b3", + "state": "In_Orbit", + "fleet": "Bull5" + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "6ee84555-12e2-578a-abd9-54c4d0276589", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 26, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "350d3d10-78b4-5e79-a1d8-ac9838e56251", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 3.53, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 132, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "cd9a9406-459f-5bc2-a895-0483c5917c27", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyGrail3", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 3.69, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "5d5f54c1-993b-52fe-9187-104198ef50a9", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 22, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "79e1f511-7254-5072-a4bd-2256e8f6eff7", + "state": "In_Orbit", + "fleet": "Banda" + }, + { + "number": 1, + "class": "HolyMartyr", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 3.69, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "adfd2df2-fe26-5811-8a48-0b7b0cf4760a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPower", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 3.69, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 97.98, + "race": "Tancordia", + "id": "6b736c27-0a5e-5cf4-94ee-c81a9e43c434", + "state": "In_Orbit", + "fleet": "Banda" + }, + { + "number": 1, + "class": "HolyWhip", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 3.69, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "df096589-4b23-5156-82c5-27d5bfd50ce5", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 3, + "class": "HolyRavings", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "38778841-5b4d-51a4-9765-2a42f2a6c61a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 126, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "169e12ff-a2b1-5010-bd05-a70049b5d284", + "state": "In_Orbit", + "fleet": "Bull5" + }, + { + "number": 24, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "509fcd47-3d3a-5bc3-901d-ac3869d056da", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "HolyWhip", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 3.69, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "769d8820-2baa-5cc1-a2d1-decaac6e6e39", + "state": "In_Orbit", + "fleet": "Def21" + }, + { + "number": 14, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.69, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "aff5ca15-82a3-5424-88bd-030dcb6d1130", + "state": "In_Orbit", + "fleet": "Def16" + }, + { + "number": 36, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.69, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "7026f391-018a-5991-8e99-70bfcb261ac9", + "state": "In_Orbit", + "fleet": "Def18" + }, + { + "number": 50, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.69, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "cf41bf43-c875-5cba-8fba-f1fa3067870e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 38, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "fc8b445f-939b-5961-9869-89a010c9b9fa", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 56, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "49233dcb-32e6-5e8e-b986-373658c35306", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 18, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "8a3eef0f-26b6-5ce9-9c8b-a8b89325700d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 130, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "4d28e2de-c5b2-589c-be0d-b6e7ca70f231", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.23, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 40, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "b8b47be5-4b11-51aa-baa2-5483c8f9975a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyGrail", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 3.86, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "374545f0-4bcf-5620-9889-c74a29458daf", + "state": "In_Orbit", + "fleet": "Acrosi3" + }, + { + "number": 27, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "46cabe0d-cb7d-560b-840f-005445357416", + "state": "In_Orbit", + "fleet": "Acrosi3" + }, + { + "number": 1, + "class": "HolyMartyr", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 3.89, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "7d677af7-fb32-5fbd-ac9c-94348b1027e5", + "state": "In_Orbit", + "fleet": "Def28" + }, + { + "number": 1, + "class": "HolyPower", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 3.86, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 97.98, + "race": "Tancordia", + "id": "ebae3df4-1e9b-5de6-9db8-a412c82dfaa4", + "state": "In_Orbit", + "fleet": "Banda2" + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 3.86, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 36, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "28f206c8-9ea1-57d9-9492-7076d9970d7c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyHope", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 3.86, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "2e50b560-1497-599e-8360-c165e9867fd2", + "state": "In_Orbit", + "fleet": "Acrosi4" + }, + { + "number": 2, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "52d1646e-a78b-52e3-8e7e-9c452545ee99", + "state": "In_Orbit", + "fleet": "Pahan1" + }, + { + "number": 5, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 93, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "6d9628be-7884-5da6-ae10-064423bc9005", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyHope", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 3.86, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 82, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "65e88f1f-caf2-57ba-b412-da5def6e0b45", + "state": "In_Orbit", + "fleet": "Bull4" + }, + { + "number": 25, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.86, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "9960a580-efc5-5ee5-a2f7-18f94c2281ee", + "state": "In_Orbit", + "fleet": "Def16" + }, + { + "number": 56, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.26, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2e0cd1ed-2579-54f4-9564-581528b5c474", + "state": "In_Orbit", + "fleet": "Bull6" + }, + { + "number": 37, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.86, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "53550698-fc7e-55b3-a36b-77a912116143", + "state": "In_Orbit", + "fleet": "Def19" + }, + { + "number": 52, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.86, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "48343ed7-3ff2-5680-a59d-e5f5bb7a1eeb", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 40, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.15, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "aa9fa0a4-25da-557d-8c58-0f37de7a67c4", + "state": "In_Orbit", + "fleet": "cargo1" + }, + { + "number": 1, + "class": "HolyGrail3", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 4.02, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 122, + "speed": 0, + "mass": 99, + "race": "Tancordia", + "id": "01a3fae0-6e6e-5d24-a2c6-d7b5f34fefde", + "state": "In_Orbit", + "fleet": "Def25" + }, + { + "number": 29, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.02, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "67e328f5-f066-51b1-9bf1-d941b9f8d170", + "state": "In_Orbit", + "fleet": "Def23" + }, + { + "number": 1, + "class": "HolySpear", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 4.02, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 49.5, + "race": "Tancordia", + "id": "78077809-c920-5502-b23c-e3e75e6e4735", + "state": "In_Orbit", + "fleet": "Def27" + }, + { + "number": 1, + "class": "HolyFanatic", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 4.02, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 97.98, + "race": "Tancordia", + "id": "a6ad6c1c-da81-52d3-aeb2-b6be314867b1", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 4.02, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 6, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "aaac542c-ccca-5ed1-b6c4-d4a86462b9be", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyHope", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "62ad9d00-ccde-5c0a-8e00-28d77f4f1382", + "state": "In_Orbit", + "fleet": "Def26" + }, + { + "number": 15, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "4d8191b7-6ddc-5e23-9224-9c1ac15e7443", + "state": "In_Orbit", + "fleet": "Pahan1" + }, + { + "number": 8, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "49b975eb-908c-59ef-90ba-d889adf1b758", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 35, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.02, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "f47cb79d-a1c7-5283-b96a-35e33475879a", + "state": "In_Orbit", + "fleet": "Def21" + }, + { + "number": 27, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.02, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "9827abd5-0454-5632-b366-1c7c22e55601", + "state": "In_Orbit", + "fleet": "Acrosi3" + }, + { + "number": 75, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "b04c507a-e2b4-5887-879c-305fe8e91e3b", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "HolySword", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 4.02, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 84.42, + "race": "Tancordia", + "id": "e0e00db1-29e4-515f-821a-89e1fe1b70b0", + "state": "In_Orbit", + "fleet": "Bull6" + }, + { + "number": 24, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.02, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "0fad5faf-9c6d-5265-84e2-d5d649f2eced", + "state": "In_Orbit", + "fleet": "Def22" + }, + { + "number": 39, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.02, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "016c0596-ebd8-57be-9b6a-fa72595a2010", + "state": "In_Orbit", + "fleet": "Bull5" + }, + { + "number": 53, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.02, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "07919134-41a3-5a58-a1f9-98e40424ba7a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "Transport-1", + "tech": { + "cargo": 1, + "drive": 2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 99.01, + "race": "Tancordia", + "id": "164e3a90-74ef-5cbd-b5bb-f78c79b2e9ae", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 24, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.11, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "13f3eede-a2a6-5924-b21a-0a22733ba83e", + "state": "In_Orbit", + "fleet": "Bull2" + }, + { + "number": 10, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 4.57, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 82, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "a5a90c23-0feb-5895-8ce3-e87176312a04", + "state": "In_Orbit", + "fleet": "Bull4" + }, + { + "number": 1, + "class": "HolyDefender", + "tech": { + "cargo": 0, + "drive": 5.29, + "shields": 4.02, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 43, + "speed": 0, + "mass": 3, + "race": "Tancordia", + "id": "b4208d2a-8959-588a-80f2-de007751164d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 15, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "dd4e8b6f-d2a7-5ba5-a348-2b8ece7a78dd", + "state": "In_Orbit", + "fleet": "Acrosi3" + }, + { + "number": 61, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "acb18d01-8671-5456-9e2b-4b7f67a9b20f", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 49, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2e1bb879-b5c2-5bc5-ae75-f5dc8371840e", + "state": "In_Orbit", + "fleet": "Def19" + }, + { + "number": 97, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "d7e9985e-3983-5a86-abf6-7657721f9750", + "state": "In_Orbit", + "fleet": "Def16" + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "c000a716-3604-52ea-ac35-139e6e21c04b", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 82, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "25daa7d2-1782-5fe6-a90f-ef0b2a04a33a", + "state": "In_Orbit", + "fleet": "Def26" + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 74, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "708ff4b5-27f4-5737-9362-6546c4959498", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 71, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "47486a43-b0c1-5f70-8386-ff21e55540d9", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 76, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "e3e4d91d-ce2b-5ff3-8be3-21a1b5b9defd", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 104, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "1db9842b-4b0c-5d31-bcd6-32445a88e738", + "state": "In_Orbit", + "fleet": "ALM1" + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 56, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "e737e25b-773c-5423-8fec-906f61690042", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "72ee480b-c932-59df-9ec8-cbb4ad2f6a65", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 8, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "e798af87-055f-5745-81e3-2788d6ac499c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "bcbafa36-3fdb-54e0-96c6-1e59d42938dd", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "10209860-d32f-56f7-833b-20391a0299ee", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "411af855-85bb-59ae-ae91-682bac107273", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 2, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 113, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "77da9a3b-afa2-5f13-81bb-2698b653e577", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "7f8045a1-1a35-5eb1-b2ff-58d7cb749ad1", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "8745bcb9-5738-51ed-9392-bb2fbf41afb3", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 4.19, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "514c69ff-50c6-599f-9992-18ebd055cd8c", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 10, + "class": "HolyStone", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 3.69, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "62289ba3-3ed7-5038-9445-4bcb48cdc74b", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 108, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "af00a2ad-a24b-5401-a91a-b9c6a84c22a2", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySting", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 46, + "speed": 0, + "mass": 2, + "race": "Tancordia", + "id": "5ddf5b06-d550-5df7-a0ba-3a5d9f44b9a9", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 20, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.31, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "a8adb08d-5cb8-53a1-b44e-d98ddc8d5e82", + "state": "In_Orbit", + "fleet": "Def2" + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 1, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "0f998df9-a71d-58fe-a417-4fc5ae5bdda1", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 20, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "24d0b57c-eef0-54f8-804c-f6cf2158159e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 109, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "c543c1e7-bf75-5166-936d-85e205f40e08", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 49, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "30266a09-a9a6-52a4-a74d-5ae9d025cf37", + "state": "In_Orbit", + "fleet": "Def28" + }, + { + "number": 149, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "c52da430-b8d5-58ca-a46a-45e5229db11b", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 2, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "bfd105c5-999c-5726-bf24-34e392780b82", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 85, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "f92f17a9-42cc-5197-9c55-74a0791389a5", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 2, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "deafac4a-ce58-5420-a78f-5a172fbd0cee", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "5deafca8-eb6b-5931-be45-05ded30e8f98", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 13, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "d4d73402-bd32-5d01-bfa5-9f41ede0ba3a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 10, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "c889d72f-ad40-56d8-9907-a789a95d0e4a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 118, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "5353f355-7b04-5b0c-b788-e3a95b616dc5", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 4, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "97c4d8da-fba5-5a50-a824-dc266c95d09b", + "state": "In_Orbit", + "fleet": "Def2" + }, + { + "number": 1, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "5f57860f-c7bb-5814-8c72-1b50d7d29aa8", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 122, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "de535a00-ff5c-50ce-ac08-2b59b616ae79", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 104, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "205440a2-16bc-5bea-8b11-87aac240a7be", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "63f96192-6da0-5893-9990-1f489505b3ed", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 2, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "f656f713-f27d-5dee-b4a8-5410045e105a", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 54, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "3993de6e-18b2-503a-a52d-3338c79e5026", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 69, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "796fa3f5-b229-5fa8-8389-757e90c7c437", + "state": "In_Orbit", + "fleet": "Def21" + }, + { + "number": 1, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.34, + "shields": 4.35, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 66, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "8edb7786-b835-561e-959b-12e0c47f0846", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 4.52, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 1, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "f272245a-5a0e-5444-9a55-ffbc30cea10e", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 99, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "e54102bc-d799-5e12-9a16-a59a0d40ce88", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 59, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 8, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "6f1cfa09-bf9d-5813-be5b-a4e7477203f9", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 50, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "2bfe4893-cc3a-5e04-8173-51a65f3a67a4", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 98, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "45f019ad-9077-57b6-af77-bee6f50450ca", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 2, + "class": "HolySymbol", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 4.52, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 7.07, + "race": "Tancordia", + "id": "8632cf05-b64d-56ba-b639-42a356489861", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 85, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "666a39ea-4640-5381-9e2a-fd98121b33b7", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 29, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "970a49b1-db60-5d17-aab2-c2c7306ce5ca", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "fc01854e-a31b-5f7a-8244-4ef57328acdc", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 32, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 66, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "739306ea-200a-5e12-a017-9222d3d15e22", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 4.52, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 71, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "207ebf56-85f2-548e-ab33-2688ee2c72f6", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 70, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 76, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "0d0bec2c-6023-50f7-ba59-e03b9f61a2e1", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 64, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "85045325-7a37-5834-8e68-6d53c4b8d11f", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 1, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 4.52, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 82, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "bef74c7e-f90b-564e-aeff-e0765f29c8b2", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 5, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 4.52, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "a93cf301-dad7-517b-9729-028053a1b127", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 49, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "d08a4844-b6fb-502d-977d-c83b6b4ae21d", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 49, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "384c05ce-151e-5449-bc31-62a2ac9c1eff", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 20, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 113, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "1d48e907-2a4c-5b91-866c-6e66745440c5", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 55, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "b86ef667-0ca8-5354-a7bf-c0fc6f39b624", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 4, + "class": "HolyBlade", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 4.52, + "weapons": 3.29 + }, + "cargo": "-", + "load": 0, + "destination": 122, + "speed": 0, + "mass": 17, + "race": "Tancordia", + "id": "ecabdd39-cd0c-5b2e-ac79-14094c3f0d49", + "state": "In_Orbit", + "fleet": null + }, + { + "number": 104, + "class": "HolyPilgrim", + "tech": { + "cargo": 0, + "drive": 5.37, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 1, + "race": "Tancordia", + "id": "52754e26-0f9a-58cc-8fdf-906e4532666d", + "state": "In_Orbit", + "fleet": null + } + ], + "otherGroup": [ + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 106, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 86, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 52, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 94, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 119, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 91, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 81, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 34, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 62, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 138, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 20, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 58, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 49, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 72, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 118, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 116, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 28, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 69, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 41, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 97, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 15, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 65, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 37, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 68, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 89, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 35, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 64, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 48, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 92, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 73, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 80, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 2, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 101, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 126, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 125, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 7, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 42, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 120, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 115, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 96, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 6, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 3.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 16, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 23, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 12, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 104, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 30, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 111, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 90, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 134, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 107, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 53, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 136, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 74, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 25, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 47, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 59, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 127, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 137, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "ALMDrone", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 31, + "speed": 0, + "mass": 1, + "race": "ALM" + }, + { + "number": 1, + "class": "La_Fontaine", + "tech": { + "cargo": 1, + "drive": 1, + "shields": 0, + "weapons": 1 + }, + "cargo": "COL", + "load": 1.05, + "destination": 87, + "speed": 0, + "mass": 17.55, + "race": "NHL" + }, + { + "number": 1, + "class": "La_Fontaine", + "tech": { + "cargo": 1, + "drive": 1, + "shields": 0, + "weapons": 1 + }, + "cargo": "COL", + "load": 1.05, + "destination": 66, + "speed": 0, + "mass": 17.55, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 96, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 120, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 25, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 48, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 116, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 69, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 3.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 3.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 2, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 72, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 93, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 40, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 89, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 111, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Zubov", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 3.55, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 63.53, + "race": "NHL" + }, + { + "number": 1, + "class": "Krivokrasov", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 3.55, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 60.02, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 59, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 25, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 12, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 66, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 8, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 76, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 1.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 88, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Tkachuk", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 125.32, + "race": "NHL" + }, + { + "number": 2, + "class": "Ulanov", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 120.13, + "race": "NHL" + }, + { + "number": 1, + "class": "Haverchuk", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 241.99, + "race": "NHL" + }, + { + "number": 100, + "class": "Lemieux_2", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 3, + "race": "NHL" + }, + { + "number": 1, + "class": "Holzinger", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 99, + "speed": 0, + "mass": 31.04, + "race": "NHL" + }, + { + "number": 1, + "class": "Smehlik", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 74, + "speed": 0, + "mass": 20.01, + "race": "NHL" + }, + { + "number": 1, + "class": "Jagr", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 115, + "speed": 0, + "mass": 59.69, + "race": "NHL" + }, + { + "number": 1, + "class": "Smehlik", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 48, + "speed": 0, + "mass": 20.01, + "race": "NHL" + }, + { + "number": 1, + "class": "Smehlik", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 59, + "speed": 0, + "mass": 20.01, + "race": "NHL" + }, + { + "number": 1, + "class": "Burke", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 62, + "race": "NHL" + }, + { + "number": 1, + "class": "Koivu", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 53, + "speed": 0, + "mass": 12.3, + "race": "NHL" + }, + { + "number": 1, + "class": "Vanbisbruk", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 60, + "race": "NHL" + }, + { + "number": 31, + "class": "Fuhr_2", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.16, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 2, + "race": "NHL" + }, + { + "number": 30, + "class": "Fuhr_2", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 4.16, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 2, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 125, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 92, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 73, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 80, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 28, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 2.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 118, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Dawe", + "tech": { + "cargo": 1, + "drive": 4.88, + "shields": 4.16, + "weapons": 2.22 + }, + "cargo": "COL", + "load": 0.3, + "destination": 25, + "speed": 0, + "mass": 12.32, + "race": "NHL" + }, + { + "number": 20, + "class": "Fuhr_3", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 5.12, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 3, + "race": "NHL" + }, + { + "number": 1, + "class": "Grosek", + "tech": { + "cargo": 1, + "drive": 4.88, + "shields": 5.23, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 33, + "speed": 0, + "mass": 59.64, + "race": "NHL" + }, + { + "number": 1, + "class": "Shilds", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 5.23, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 120, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 36, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 132, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 83, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 6, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 47, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 107, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 137, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 38, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 94, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 97, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 81, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 34, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 30, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 5, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 86, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 65, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 18, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 1, + "class": "Lemieux", + "tech": { + "cargo": 0, + "drive": 4.88, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 121, + "speed": 0, + "mass": 1, + "race": "NHL" + }, + { + "number": 20, + "class": "Fuhr_3", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 5.23, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 3, + "race": "NHL" + }, + { + "number": 20, + "class": "Fuhr_3", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 5.23, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 3, + "race": "NHL" + }, + { + "number": 2, + "class": "Boughner", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 0, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 62, + "race": "NHL" + }, + { + "number": 2, + "class": "Ciccarelli", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 0, + "weapons": 2.22 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 60, + "race": "NHL" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 23, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 104, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 106, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 108, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 111, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 112, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 116, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 118, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 12, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 120, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 122, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 125, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 134, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 137, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 138, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 20, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 0, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 107, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 136, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 25, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 30, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 36, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 37, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 40, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 46, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 47, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 48, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 50, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 53, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 55, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 59, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 3.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 3.5, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 86, + "speed": 0, + "mass": 1, + "race": "Eraser" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 1.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 101, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 1.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 28, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 1.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 74, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 1.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 97, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 3.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 2, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 3.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 34, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 3.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 47, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 3.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 3.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 126, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 3.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "for_peace_from_Acrosi", + "tech": { + "cargo": 0, + "drive": 3.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Col-20", + "tech": { + "cargo": 1.4, + "drive": 4.67, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 28, + "speed": 0, + "mass": 24.14, + "race": "Acrosi" + }, + { + "number": 1, + "class": "BackHit", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 23, + "speed": 0, + "mass": 4.16, + "race": "Acrosi" + }, + { + "number": 3, + "class": "BackHit", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 96, + "speed": 0, + "mass": 4.16, + "race": "Acrosi" + }, + { + "number": 2, + "class": "BackHit", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 73, + "speed": 0, + "mass": 4.16, + "race": "Acrosi" + }, + { + "number": 1, + "class": "BackHit", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 12, + "speed": 0, + "mass": 4.16, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Gunner", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 30, + "speed": 0, + "mass": 37.62, + "race": "Acrosi" + }, + { + "number": 83, + "class": "Drone", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 30, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Gunner-1", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 107, + "speed": 0, + "mass": 34.5, + "race": "Acrosi" + }, + { + "number": 2, + "class": "Quick-Imp", + "tech": { + "cargo": 1.4, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 28, + "speed": 0, + "mass": 5.37, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Gunner-1", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 30, + "speed": 0, + "mass": 34.5, + "race": "Acrosi" + }, + { + "number": 2, + "class": "Quick-Imp", + "tech": { + "cargo": 1.4, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 94, + "speed": 0, + "mass": 5.37, + "race": "Acrosi" + }, + { + "number": 2, + "class": "Quick-Imp", + "tech": { + "cargo": 1.4, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "COL", + "load": 1, + "destination": 80, + "speed": 0, + "mass": 6.08, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Quick-Imp", + "tech": { + "cargo": 1.4, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 52, + "speed": 0, + "mass": 5.37, + "race": "Acrosi" + }, + { + "number": 7, + "class": "BackHit", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 116, + "speed": 0, + "mass": 4.16, + "race": "Acrosi" + }, + { + "number": 1, + "class": "No", + "tech": { + "cargo": 0, + "drive": 5.04, + "shields": 1.5, + "weapons": 2.83 + }, + "cargo": "-", + "load": 0, + "destination": 90, + "speed": 0, + "mass": 14.82, + "race": "Acrosi" + }, + { + "number": 1, + "class": "BackHit", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 106, + "speed": 0, + "mass": 4.16, + "race": "Acrosi" + }, + { + "number": 20, + "class": "Drone", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 73, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Drone", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 89, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Drone", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "BackHit", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 3.39, + "weapons": 3.71 + }, + "cargo": "-", + "load": 0, + "destination": 80, + "speed": 0, + "mass": 4.16, + "race": "Acrosi" + }, + { + "number": 4, + "class": "Drone", + "tech": { + "cargo": 0, + "drive": 5.02, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 130, + "speed": 0, + "mass": 1, + "race": "Acrosi" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 101, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 126, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 15, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 2, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 62, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 2.7, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 64, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 5.48, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 136, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Perf87", + "tech": { + "cargo": 0, + "drive": 3.5, + "shields": 1.3, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 11, + "speed": 0, + "mass": 84, + "race": "Bullet" + }, + { + "number": 1, + "class": "Fighter", + "tech": { + "cargo": 0, + "drive": 3.5, + "shields": 1.3, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 11, + "speed": 0, + "mass": 67.5, + "race": "Bullet" + }, + { + "number": 1, + "class": "Perf83", + "tech": { + "cargo": 0, + "drive": 3.5, + "shields": 1.3, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 11, + "speed": 0, + "mass": 86, + "race": "Bullet" + }, + { + "number": 32, + "class": "SuperDrone", + "tech": { + "cargo": 0, + "drive": 3.7, + "shields": 1.5, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 11, + "speed": 0, + "mass": 3, + "race": "Bullet" + }, + { + "number": 1, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 3.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 11, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 24, + "class": "SuperDrone", + "tech": { + "cargo": 0, + "drive": 3.9, + "shields": 1.5, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 11, + "speed": 0, + "mass": 3, + "race": "Bullet" + }, + { + "number": 27, + "class": "Engine", + "tech": { + "cargo": 0, + "drive": 3.99, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 11, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 0.8, + "destination": 41, + "speed": 0, + "mass": 17.3, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "-", + "load": 0, + "destination": 49, + "speed": 0, + "mass": 16.5, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 0.5, + "destination": 0, + "speed": 0, + "mass": 17, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 0.8, + "destination": 62, + "speed": 0, + "mass": 17.3, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 5.48, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 119, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 5.48, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 7, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 5.48, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 49, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "Bullet", + "tech": { + "cargo": 0, + "drive": 5.48, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 134, + "speed": 0, + "mass": 1, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 1.61, + "destination": 91, + "speed": 0, + "mass": 18.11, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 0.8, + "destination": 39, + "speed": 0, + "mass": 17.3, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 1.61, + "destination": 78, + "speed": 0, + "mass": 18.11, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 1.61, + "destination": 15, + "speed": 0, + "mass": 18.11, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 0.8, + "destination": 31, + "speed": 0, + "mass": 17.3, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "-", + "load": 0, + "destination": 119, + "speed": 0, + "mass": 16.5, + "race": "Bullet" + }, + { + "number": 1, + "class": "ABOCb", + "tech": { + "cargo": 1, + "drive": 5.48, + "shields": 3.45, + "weapons": 3.83 + }, + "cargo": "COL", + "load": 1.61, + "destination": 55, + "speed": 0, + "mass": 18.11, + "race": "Bullet" + }, + { + "number": 1, + "class": "Eraser", + "tech": { + "cargo": 0, + "drive": 2.5, + "shields": 1, + "weapons": 1.27 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 49.5, + "race": "6AHgA" + }, + { + "number": 1, + "class": "Cpty_40", + "tech": { + "cargo": 1, + "drive": 6.79, + "shields": 0, + "weapons": 0 + }, + "cargo": "COL", + "load": 38.5, + "destination": 9, + "speed": 0, + "mass": 88, + "race": "6AHgA" + }, + { + "number": 1, + "class": "Cpty_40", + "tech": { + "cargo": 1, + "drive": 3.98, + "shields": 0, + "weapons": 0 + }, + "cargo": "COL", + "load": 40, + "destination": 9, + "speed": 0, + "mass": 89.5, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 101, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 109, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 117, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 126, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 135, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 2, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 35, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 64, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 89, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 3.98, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 3.98, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 3.98, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 27, + "class": "dron", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "DRon", + "tech": { + "cargo": 0, + "drive": 3.4, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "dron", + "tech": { + "cargo": 0, + "drive": 2.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "Orb_Tur_129", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 2.46, + "weapons": 2.52 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 129.32, + "race": "6AHgA" + }, + { + "number": 271, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "OTBAJIu_TOPMO3", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 2.46, + "weapons": 2.52 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 10.61, + "race": "6AHgA" + }, + { + "number": 1, + "class": "10_Tur_125", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 2.48, + "weapons": 2.52 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 125, + "race": "6AHgA" + }, + { + "number": 1, + "class": "Sp-16", + "tech": { + "cargo": 1, + "drive": 1, + "shields": 0, + "weapons": 0 + }, + "cargo": "COL", + "load": 3.4, + "destination": 136, + "speed": 0, + "mass": 36.4, + "race": "6AHgA" + }, + { + "number": 1, + "class": "83_HPerf_125", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 2.49, + "weapons": 2.52 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 125, + "race": "6AHgA" + }, + { + "number": 1, + "class": "dron", + "tech": { + "cargo": 0, + "drive": 5.13, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 134, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "3ATPAXAJI_ypog", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 2.5, + "weapons": 2.52 + }, + "cargo": "-", + "load": 0, + "destination": 134, + "speed": 0, + "mass": 6, + "race": "6AHgA" + }, + { + "number": 19, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 15, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 30, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 3, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 47, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "6ECnPu3OPHuK", + "tech": { + "cargo": 0, + "drive": 6.79, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 93, + "speed": 0, + "mass": 1, + "race": "6AHgA" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 21, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 105, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 97, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 85, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 34, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 87, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 12, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 3.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 3.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "Shpionchik", + "tech": { + "cargo": 0, + "drive": 3.1, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "Mad" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 76, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 126, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 17, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 1.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 8, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 4, + "class": "Remember", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 1.12 + }, + "cargo": "-", + "load": 0, + "destination": 93, + "speed": 0, + "mass": 2.12, + "race": "Varlon" + }, + { + "number": 1, + "class": "Remember", + "tech": { + "cargo": 0, + "drive": 2.4, + "shields": 0, + "weapons": 1.12 + }, + "cargo": "-", + "load": 0, + "destination": 121, + "speed": 0, + "mass": 2.12, + "race": "Varlon" + }, + { + "number": 95, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 2.68, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 60, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 2, + "class": "G", + "tech": { + "cargo": 0, + "drive": 2.68, + "shields": 1, + "weapons": 1.22 + }, + "cargo": "-", + "load": 0, + "destination": 60, + "speed": 0, + "mass": 56, + "race": "Varlon" + }, + { + "number": 80, + "class": "Bomb", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 1, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 60, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "U", + "tech": { + "cargo": 0, + "drive": 2.68, + "shields": 1, + "weapons": 1.22 + }, + "cargo": "-", + "load": 0, + "destination": 60, + "speed": 0, + "mass": 85.5, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 2.68, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 56, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 2.68, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 18, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 1, + "class": "VarlonHome", + "tech": { + "cargo": 1, + "drive": 2.68, + "shields": 0, + "weapons": 0 + }, + "cargo": "COL", + "load": 40, + "destination": 71, + "speed": 0, + "mass": 125.69, + "race": "Varlon" + }, + { + "number": 1, + "class": "G", + "tech": { + "cargo": 0, + "drive": 2.68, + "shields": 1, + "weapons": 1.22 + }, + "cargo": "-", + "load": 0, + "destination": 71, + "speed": 0, + "mass": 56, + "race": "Varlon" + }, + { + "number": 60, + "class": "VarlonEyes", + "tech": { + "cargo": 0, + "drive": 2.68, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 71, + "speed": 0, + "mass": 1, + "race": "Varlon" + }, + { + "number": 2, + "class": "Capitality", + "tech": { + "cargo": 1, + "drive": 2.68, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 60, + "speed": 0, + "mass": 85.69, + "race": "Varlon" + }, + { + "number": 1, + "class": "Fto9", + "tech": { + "cargo": 1, + "drive": 1.06, + "shields": 1, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 70, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Fto9", + "tech": { + "cargo": 1, + "drive": 3.3, + "shields": 1.38, + "weapons": 1.35 + }, + "cargo": "-", + "load": 0, + "destination": 117, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 2, + "class": "Fto9", + "tech": { + "cargo": 1, + "drive": 1, + "shields": 1, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 77, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Fto9", + "tech": { + "cargo": 1, + "drive": 1, + "shields": 1, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 109, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Cagovoz", + "tech": { + "cargo": 1, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 44, + "speed": 0, + "mass": 99, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Cvoz", + "tech": { + "cargo": 1, + "drive": 1.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 49.5, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 44, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 24, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 109, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 51, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 126, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Otvet", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 2.05, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 98.98, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "stra", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 3.5, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "tCs", + "tech": { + "cargo": 1, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 109, + "speed": 0, + "mass": 24.71, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "stra", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 1.32, + "weapons": 1.29 + }, + "cargo": "-", + "load": 0, + "destination": 100, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "stra", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 1.32, + "weapons": 1.29 + }, + "cargo": "-", + "load": 0, + "destination": 135, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "tCs", + "tech": { + "cargo": 1, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 24.71, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "stra", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 1.32, + "weapons": 1.29 + }, + "cargo": "-", + "load": 0, + "destination": 44, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Nash", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 1.38, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 98.92, + "race": "Pahanchiks" + }, + { + "number": 20, + "class": "Ss", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 1.38, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 2.47, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "stra", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 1.32, + "weapons": 1.29 + }, + "cargo": "-", + "load": 0, + "destination": 95, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 128, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 128, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 76, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 4, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 110, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 2, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 79, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 8, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 62, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Vragam", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 2.05, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 99, + "race": "Pahanchiks" + }, + { + "number": 131, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 98, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 129, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 114, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 84, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 38, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 72, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 81, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 16, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 139, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 45, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 69, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 52, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 4.87, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Vpered", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.05, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 99, + "race": "Pahanchiks" + }, + { + "number": 135, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 73, + "class": "S", + "tech": { + "cargo": 0, + "drive": 0, + "shields": 2.05, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Privet", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.05, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 13, + "speed": 0, + "mass": 177.7, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Mimo", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.05, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 49.5, + "race": "Pahanchiks" + }, + { + "number": 386, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 124, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Vpered", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.05, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 99, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Mimo", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.05, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 103, + "speed": 0, + "mass": 49.5, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Vpered", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.06, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 124, + "speed": 0, + "mass": 99, + "race": "Pahanchiks" + }, + { + "number": 290, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Mim", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.06, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 58, + "race": "Pahanchiks" + }, + { + "number": 3, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 135, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Fto9", + "tech": { + "cargo": 1, + "drive": 1.1, + "shields": 4.63, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 57, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Vpered", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.06, + "weapons": 1.85 + }, + "cargo": "-", + "load": 0, + "destination": 67, + "speed": 0, + "mass": 99, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Mi", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 2.06, + "weapons": 1.85 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 58, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Nash", + "tech": { + "cargo": 0, + "drive": 3.3, + "shields": 1.38, + "weapons": 1.75 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 98.92, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 130, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "stra", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.63, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "stra", + "tech": { + "cargo": 0, + "drive": 2.8, + "shields": 1.32, + "weapons": 1.29 + }, + "cargo": "-", + "load": 0, + "destination": 130, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 4, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.2, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 4, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 130, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 112, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 118, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 111, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 104, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 26, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 32, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 83, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 14, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 89, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 101, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 35, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 2.9, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 410, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 3, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 34, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 56, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Vper", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 3, + "weapons": 3.34 + }, + "cargo": "-", + "load": 0, + "destination": 3, + "speed": 0, + "mass": 216.5, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Priveta", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 3, + "weapons": 3.34 + }, + "cargo": "-", + "load": 0, + "destination": 3, + "speed": 0, + "mass": 419, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 4.87, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 65, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 4.87, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 36, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "tCs", + "tech": { + "cargo": 1, + "drive": 2.6, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 19, + "speed": 0, + "mass": 24.71, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 4.87, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 97, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Dron", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 3, + "weapons": 3.34 + }, + "cargo": "-", + "load": 0, + "destination": 124, + "speed": 0, + "mass": 270.5, + "race": "Pahanchiks" + }, + { + "number": 112, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 75, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 241, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 134, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 3, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Ogogo", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 3, + "weapons": 3.34 + }, + "cargo": "-", + "load": 0, + "destination": 3, + "speed": 0, + "mass": 209.5, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 2, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 132, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Lovi", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 3.5, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 3, + "speed": 0, + "mass": 419, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Fto9", + "tech": { + "cargo": 1, + "drive": 1, + "shields": 1, + "weapons": 1 + }, + "cargo": "COL", + "load": 1.05, + "destination": 95, + "speed": 0, + "mass": 12.05, + "race": "Pahanchiks" + }, + { + "number": 5, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 100, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 67, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 123, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 121, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "ter", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.25, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 131, + "speed": 0, + "mass": 19, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "ter", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.25, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 63, + "speed": 0, + "mass": 19, + "race": "Pahanchiks" + }, + { + "number": 45, + "class": "So", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.63, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 2, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Lubi_menia", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.63, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 83.45, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "aa", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.63, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 92, + "race": "Pahanchiks" + }, + { + "number": 47, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 29, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 47, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 13, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 57, + "class": "So", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.94, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 2, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Kak_ia_tebia", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 4.94, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 83.5, + "race": "Pahanchiks" + }, + { + "number": 13, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 88, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 29, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 89, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 102, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Fto9", + "tech": { + "cargo": 1, + "drive": 1, + "shields": 1, + "weapons": 1 + }, + "cargo": "-", + "load": 0, + "destination": 22, + "speed": 0, + "mass": 11, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.05, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 9, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "go_home", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 5.26, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 10, + "speed": 0, + "mass": 112.5, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Kak_ia_tebia", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 5.26, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 22, + "speed": 0, + "mass": 83.5, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "vot_tebe", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 5.26, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 44, + "speed": 0, + "mass": 49.3, + "race": "Pahanchiks" + }, + { + "number": 14, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 61, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 50, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 70, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 88, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 30, + "class": "Scout", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 0, + "weapons": 0 + }, + "cargo": "-", + "load": 0, + "destination": 133, + "speed": 0, + "mass": 1, + "race": "Pahanchiks" + }, + { + "number": 1, + "class": "aa", + "tech": { + "cargo": 0, + "drive": 5.27, + "shields": 5.26, + "weapons": 4.88 + }, + "cargo": "-", + "load": 0, + "destination": 135, + "speed": 0, + "mass": 92, + "race": "Pahanchiks" + } + ], + "unidentifiedGroup": [ + { + "x": 50.92, + "y": 182.23 + }, + { + "x": 50.92, + "y": 182.23 + }, + { + "x": 23.99, + "y": 73.49 + } + ] + }, + "battles": { + "01608753-b992-5ccb-8baa-637717eebafd": { + "id": "01608753-b992-5ccb-8baa-637717eebafd", + "planet": 75, + "planetName": "Detroit_Red_Wings", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Barasso", + "tech": { + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Trefilov", + "tech": { + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "10": { + "race": "Pahanchiks", + "className": "Mimo", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 2.05, + "WEAPONS": 1.75 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "11": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.41 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "12": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "NHL", + "className": "Fuhr_3", + "tech": { + "SHIELDS": 4.16 + }, + "num": 60, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "NHL", + "className": "Ciccarelli", + "tech": { + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Pahanchiks", + "className": "Otvet", + "tech": { + "DRIVE": 3.3, + "SHIELDS": 2.05, + "WEAPONS": 1.75 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Pahanchiks", + "className": "Nash", + "tech": { + "DRIVE": 3.3, + "SHIELDS": 1.38, + "WEAPONS": 1.75 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.8 + }, + "num": 663, + "numLeft": 558, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Pahanchiks", + "className": "Vragam", + "tech": { + "DRIVE": 3.3, + "SHIELDS": 2.05, + "WEAPONS": 1.75 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Pahanchiks", + "className": "Vpered", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 2.05, + "WEAPONS": 1.75 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 5, + "d": 1, + "sd": 4, + "x": true + }, + { + "a": 2, + "sa": 5, + "d": 0, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 0, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 0, + "sa": 1, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 0, + "sa": 1, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 0, + "sa": 1, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 0, + "sa": 1, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 0, + "sa": 1, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 6, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 0, + "sa": 1, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 1, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 9, + "d": 0, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 0, + "sd": 1, + "x": false + }, + { + "a": 0, + "sa": 1, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 1, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 1, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 0, + "sd": 1, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 0, + "sd": 1, + "x": true + } + ] + }, + "02407911-7a40-5493-8e8b-0d7fbd96ad2f": { + "id": "02407911-7a40-5493-8e8b-0d7fbd96ad2f", + "planet": 113, + "planetName": "Sever5_remember", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "07ad3a6e-fe01-52cc-8d87-d4e5d3eaf5bc": { + "id": "07ad3a6e-fe01-52cc-8d87-d4e5d3eaf5bc", + "planet": 25, + "planetName": "500-2", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "4": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "5": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 2.2 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "NHL", + "className": "Dawe", + "tech": { + "CARGO": 1, + "DRIVE": 4.88, + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 0.3, + "inBattle": true + }, + "3": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "6AHgA", + "className": "dron", + "tech": { + "DRIVE": 5.13 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.57 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 1, + "sa": 2, + "d": 3, + "sd": 4, + "x": true + } + ] + }, + "0ede2f8d-598f-56d7-93f1-6bca6de97ed4": { + "id": "0ede2f8d-598f-56d7-93f1-6bca6de97ed4", + "planet": 63, + "planetName": "im.Yoshe", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "ter", + "tech": { + "DRIVE": 5.27, + "SHIELDS": 4.25, + "WEAPONS": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "Angel", + "tech": { + "CARGO": 1, + "DRIVE": 4.63, + "SHIELDS": 1.34, + "WEAPONS": 2.59 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.57 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyRavings", + "tech": { + "WEAPONS": 3.12 + }, + "num": 4, + "numLeft": 4, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "0f7c016f-8a7a-5671-9889-ccb70b919053": { + "id": "0f7c016f-8a7a-5671-9889-ccb70b919053", + "planet": 103, + "planetName": "im.Bullet", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "Mimo", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 2.05, + "WEAPONS": 1.75 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 3, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 2, + "sd": 2, + "x": true + } + ] + }, + "10aadb7c-1b8b-57ba-bfdf-fd89ba64dfa8": { + "id": "10aadb7c-1b8b-57ba-bfdf-fd89ba64dfa8", + "planet": 71, + "planetName": "Apollo-697", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Varlon", + "className": "VarlonHome", + "tech": { + "CARGO": 1, + "DRIVE": 2.68 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 40, + "inBattle": false + }, + "2": { + "race": "Varlon", + "className": "G", + "tech": { + "DRIVE": 2.68, + "SHIELDS": 1, + "WEAPONS": 1.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 2.68 + }, + "num": 60, + "numLeft": 60, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "10e7131c-baa0-5c04-af98-f01958fe3a75": { + "id": "10e7131c-baa0-5c04-af98-f01958fe3a75", + "planet": 84, + "planetName": "Dicky-Tricky", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 2.2 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "140d0086-a74a-55f1-80da-30b9dddb832a": { + "id": "140d0086-a74a-55f1-80da-30b9dddb832a", + "planet": 112, + "planetName": "NY_Rangers", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "180eecd0-d7d1-5154-9fdc-789d314fc133": { + "id": "180eecd0-d7d1-5154-9fdc-789d314fc133", + "planet": 130, + "planetName": "Florida_Panthers", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "985f42da-7228-5388-8e2f-005d88b2d6a3", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Acrosi", + "className": "Drone", + "tech": { + "DRIVE": 5.02 + }, + "num": 3, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 5, + "numLeft": 5, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "stra", + "tech": { + "DRIVE": 2.8, + "SHIELDS": 1.32, + "WEAPONS": 1.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.23, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 3, + "sa": 5, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 2, + "sa": 3, + "d": 1, + "sd": 1, + "x": true + } + ] + }, + "1951c81b-6d0d-597c-8eb1-877a5dbb7317": { + "id": "1951c81b-6d0d-597c-8eb1-877a5dbb7317", + "planet": 17, + "planetName": "Ranunculus", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "1c8f40a1-4469-5aed-b6b1-c7557c864f07": { + "id": "1c8f40a1-4469-5aed-b6b1-c7557c864f07", + "planet": 21, + "planetName": "Ottawa_Senators", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Zubov", + "tech": { + "DRIVE": 4.88, + "SHIELDS": 3.55, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "10": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "NHL", + "className": "Krivokrasov", + "tech": { + "DRIVE": 4.88, + "SHIELDS": 3.55, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "NHL", + "className": "Burke", + "tech": { + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "NHL", + "className": "Fuhr_2", + "tech": { + "SHIELDS": 4.16 + }, + "num": 31, + "numLeft": 31, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "NHL", + "className": "Fuhr_3", + "tech": { + "SHIELDS": 5.12 + }, + "num": 40, + "numLeft": 40, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "6": { + "race": "NHL", + "className": "Boughner", + "tech": { + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "7": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "8": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "9": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 10, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "1e8a4d00-5d0d-5054-8e78-c522799c244f": { + "id": "1e8a4d00-5d0d-5054-8e78-c522799c244f", + "planet": 66, + "planetName": "im.Imperial", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "La_Fontaine", + "tech": { + "CARGO": 1, + "DRIVE": 1, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 1.05, + "inBattle": false + }, + "2": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "211866d5-057b-5c82-a6ca-35e44baea45b": { + "id": "211866d5-057b-5c82-a6ca-35e44baea45b", + "planet": 75, + "planetName": "Detroit_Red_Wings", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Barasso", + "tech": { + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "NHL", + "className": "Trefilov", + "tech": { + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "NHL", + "className": "Fuhr_3", + "tech": { + "SHIELDS": 4.16 + }, + "num": 60, + "numLeft": 60, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "NHL", + "className": "Grosek", + "tech": { + "CARGO": 1, + "DRIVE": 4.88, + "SHIELDS": 5.23, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 34.2, + "inBattle": false + }, + "5": { + "race": "NHL", + "className": "Ciccarelli", + "tech": { + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "6": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "7": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.41 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 8, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "228d740f-64b0-5d27-a557-2d32d625ac53": { + "id": "228d740f-64b0-5d27-a557-2d32d625ac53", + "planet": 55, + "planetName": "Washington_Capitals", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.29, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "243dc9ce-65a3-5a66-8655-4293a1728bce": { + "id": "243dc9ce-65a3-5a66-8655-4293a1728bce", + "planet": 117, + "planetName": "KTrash1", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "6AHgA", + "className": "6ECnPu3OPHuK", + "tech": { + "DRIVE": 5.13 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Fto9", + "tech": { + "CARGO": 1, + "DRIVE": 3.3, + "SHIELDS": 1.38, + "WEAPONS": 1.35 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.67 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "26633687-f60b-5211-94fc-a1d72919434f": { + "id": "26633687-f60b-5211-94fc-a1d72919434f", + "planet": 110, + "planetName": "Narcisus", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "4": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "5": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.8 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 5, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "26cda435-8216-58e4-b5d6-9f932d4a0f73": { + "id": "26cda435-8216-58e4-b5d6-9f932d4a0f73", + "planet": 60, + "planetName": "Sorry_too!", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 2.68 + }, + "num": 95, + "numLeft": 95, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Varlon", + "className": "G", + "tech": { + "DRIVE": 2.68, + "SHIELDS": 1, + "WEAPONS": 1.22 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Varlon", + "className": "Bomb", + "tech": { + "SHIELDS": 1 + }, + "num": 80, + "numLeft": 80, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Varlon", + "className": "U", + "tech": { + "DRIVE": 2.68, + "SHIELDS": 1, + "WEAPONS": 1.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Varlon", + "className": "Capitality", + "tech": { + "CARGO": 1, + "DRIVE": 2.68 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "6": { + "race": "Tancordia", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.2, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 7, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "2700dc80-907f-5b5e-80d4-286fa3b73f0f": { + "id": "2700dc80-907f-5b5e-80d4-286fa3b73f0f", + "planet": 67, + "planetName": "Apollo-716", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "284aa96c-dad3-5a79-8627-cd779042b3de": { + "id": "284aa96c-dad3-5a79-8627-cd779042b3de", + "planet": 38, + "planetName": "MAPC", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.23, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "2ef60ab0-a4f4-516e-8024-d22a9e144540": { + "id": "2ef60ab0-a4f4-516e-8024-d22a9e144540", + "planet": 100, + "planetName": "685.48", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "stra", + "tech": { + "DRIVE": 2.8, + "SHIELDS": 1.32, + "WEAPONS": 1.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 5, + "numLeft": 5, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "32285ba6-9b6f-5320-bf6c-37a4f1042527": { + "id": "32285ba6-9b6f-5320-bf6c-37a4f1042527", + "planet": 59, + "planetName": "500-1", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "4": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "5": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "NHL", + "className": "Smehlik", + "tech": { + "DRIVE": 4.88, + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "6AHgA", + "className": "Sp-16", + "tech": { + "CARGO": 1, + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "COL", + "loadQuantity": 3.4, + "inBattle": true + }, + "5": { + "race": "6AHgA", + "className": "dron", + "tech": { + "DRIVE": 5.13 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.57 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 3, + "sd": 5, + "x": true + }, + { + "a": 1, + "sa": 2, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 1, + "sa": 2, + "d": 4, + "sd": 6, + "x": true + } + ] + }, + "37d42ae6-06d9-5baf-8a74-deeb7a8a8964": { + "id": "37d42ae6-06d9-5baf-8a74-deeb7a8a8964", + "planet": 70, + "planetName": "Rik", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Fto9", + "tech": { + "CARGO": 1, + "DRIVE": 1.06, + "SHIELDS": 1, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "3916d343-b7ce-5fd1-8f68-b5f821b4e399": { + "id": "3916d343-b7ce-5fd1-8f68-b5f821b4e399", + "planet": 98, + "planetName": "im.Zemptukhans", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 2.2 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolyBlade", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "3bae45ff-10c5-5297-9c5a-d1039c944e76": { + "id": "3bae45ff-10c5-5297-9c5a-d1039c944e76", + "planet": 4, + "planetName": "Tancord", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "4": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "5": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "6": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "10": { + "race": "Tancordia", + "className": "HolySpear", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.8 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "6": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.47 + }, + "num": 21, + "numLeft": 21, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolyGrail", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Tancordia", + "className": "HolyStone", + "tech": { + "SHIELDS": 3.53 + }, + "num": 172, + "numLeft": 172, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 6, + "sa": 10, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "3d0cb5b7-9acb-51a1-b7ad-c336fa839135": { + "id": "3d0cb5b7-9acb-51a1-b7ad-c336fa839135", + "planet": 41, + "planetName": "PolHW", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "985f42da-7228-5388-8e2f-005d88b2d6a3", + "3": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "4": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "5": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "6": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Acrosi", + "className": "for_peace_from_Acrosi", + "tech": { + "DRIVE": 3.2 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 0.8, + "inBattle": true + }, + "4": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 4.87 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 3, + "d": 5, + "sd": 5, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 6, + "sd": 6, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 4, + "sd": 4, + "x": true + } + ] + }, + "406bcea8-d084-53be-8f11-5a64d79054be": { + "id": "406bcea8-d084-53be-8f11-5a64d79054be", + "planet": 39, + "planetName": "Ultra_Rich_Mine", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 0.8, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 4, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 3, + "x": true + } + ] + }, + "40d81f10-88b6-521a-9700-c2b6b1522b6b": { + "id": "40d81f10-88b6-521a-9700-c2b6b1522b6b", + "planet": 10, + "planetName": "Pisk", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "stra", + "tech": { + "DRIVE": 5.27, + "SHIELDS": 3.5, + "WEAPONS": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "So", + "tech": { + "DRIVE": 5.27, + "SHIELDS": 4.63 + }, + "num": 102, + "numLeft": 102, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.57 + }, + "num": 178, + "numLeft": 178, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySword", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyGrail", + "tech": { + "DRIVE": 5.18, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyFanatic", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolySpear", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyPower", + "tech": { + "DRIVE": 5.23, + "SHIELDS": 3.69, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Tancordia", + "className": "HolyStone", + "tech": { + "SHIELDS": 4.02 + }, + "num": 27, + "numLeft": 27, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "42e9f113-d436-553f-b8fa-60746eed7f3c": { + "id": "42e9f113-d436-553f-b8fa-60746eed7f3c", + "planet": 9, + "planetName": "Los_Angeles_Kings", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 2.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "42ee65fb-90da-50a7-b4b8-90e09b6be309": { + "id": "42ee65fb-90da-50a7-b4b8-90e09b6be309", + "planet": 135, + "planetName": "KHW1", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "6AHgA", + "className": "6ECnPu3OPHuK", + "tech": { + "DRIVE": 5.13 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "stra", + "tech": { + "DRIVE": 2.8, + "SHIELDS": 1.32, + "WEAPONS": 1.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 3, + "numLeft": 3, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.47 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "440fdb91-847c-5e48-8b70-b852fa43e20b": { + "id": "440fdb91-847c-5e48-8b70-b852fa43e20b", + "planet": 45, + "planetName": "Native2", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "3": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "4": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "5": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "6": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "10": { + "race": "Tancordia", + "className": "HolyFather", + "tech": { + "DRIVE": 4.23, + "SHIELDS": 2.09, + "WEAPONS": 1.85 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "11": { + "race": "Tancordia", + "className": "HolyTrinity", + "tech": { + "DRIVE": 5.1, + "SHIELDS": 2.73, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Bullet", + "className": "Bullet", + "tech": { + "DRIVE": 2.7 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "6AHgA", + "className": "6ECnPu3OPHuK", + "tech": { + "DRIVE": 3.98 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "6AHgA", + "className": "dron", + "tech": { + "DRIVE": 2.1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 3.1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "6": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "7": { + "race": "Tancordia", + "className": "HolyRevenge", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyWarrior", + "tech": { + "DRIVE": 2.1, + "SHIELDS": 3.53, + "WEAPONS": 1.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 417, + "numLeft": 417, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 6, + "sa": 11, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 6, + "sa": 11, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 6, + "sa": 11, + "d": 3, + "sd": 4, + "x": true + } + ] + }, + "4d1b4ed0-2368-5121-93cd-dda39a14da0b": { + "id": "4d1b4ed0-2368-5121-93cd-dda39a14da0b", + "planet": 1, + "planetName": "1685.02", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "2": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 2, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 0, + "loadType": "COL", + "loadQuantity": 0.8, + "inBattle": true + }, + "2": { + "race": "6AHgA", + "className": "3ATPAXAJI_ypog", + "tech": { + "DRIVE": 6.79, + "SHIELDS": 2.51, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyShout", + "tech": { + "CARGO": 1, + "DRIVE": 1, + "SHIELDS": 1, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "MAT", + "loadQuantity": 1.06, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.57 + }, + "num": 11, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 7, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 6, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 7, + "x": false + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 4, + "sd": 7, + "x": false + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 4, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 4, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": false + }, + { + "a": 4, + "sa": 7, + "d": 2, + "sd": 2, + "x": true + } + ] + }, + "4e4e3ff4-a5bc-559a-bdbf-b27382bd49cd": { + "id": "4e4e3ff4-a5bc-559a-bdbf-b27382bd49cd", + "planet": 29, + "planetName": "Capital_Of_ALM", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "3": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "4": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "5": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "6": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "10": { + "race": "Tancordia", + "className": "HolyPeace", + "tech": { + "DRIVE": 4.23, + "SHIELDS": 2.11, + "WEAPONS": 1.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "11": { + "race": "Tancordia", + "className": "HolyWhip", + "tech": { + "DRIVE": 5.23, + "SHIELDS": 3.69, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "12": { + "race": "Tancordia", + "className": "HolyHope", + "tech": { + "DRIVE": 5.26, + "SHIELDS": 3.86, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Bullet", + "className": "Bullet", + "tech": { + "DRIVE": 2.7 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "6AHgA", + "className": "6ECnPu3OPHuK", + "tech": { + "DRIVE": 3.98 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "6AHgA", + "className": "dron", + "tech": { + "DRIVE": 2.1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 3.1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Pahanchiks", + "className": "Mi", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 2.06, + "WEAPONS": 1.85 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 48, + "numLeft": 48, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyFear", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 225, + "numLeft": 225, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 6, + "sa": 11, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 6, + "sa": 11, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 6, + "sa": 11, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 5, + "sa": 6, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 5, + "sa": 6, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 5, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "51f99594-35c0-5070-acaa-20cb079d695b": { + "id": "51f99594-35c0-5070-acaa-20cb079d695b", + "planet": 36, + "planetName": "Acr_Last_Base", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 4.87 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.26, + "SHIELDS": 3.86, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "591a65e9-2ba2-5883-a142-fc6e928f4e7e": { + "id": "591a65e9-2ba2-5883-a142-fc6e928f4e7e", + "planet": 102, + "planetName": "Nak", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 5, + "numLeft": 5, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "stra", + "tech": { + "DRIVE": 5.27, + "SHIELDS": 4.63, + "WEAPONS": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.67 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "5a95f6c4-1ea2-5178-b071-ce3a1b0e3b62": { + "id": "5a95f6c4-1ea2-5178-b071-ce3a1b0e3b62", + "planet": 78, + "planetName": "Oplest", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.21 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "5b487499-547f-5ea5-8ec8-c228bdfec129": { + "id": "5b487499-547f-5ea5-8ec8-c228bdfec129", + "planet": 5, + "planetName": "Bak", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.47 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "60112197-fe47-5056-950a-1bec90737b6b": { + "id": "60112197-fe47-5056-950a-1bec90737b6b", + "planet": 8, + "planetName": "Jasmin", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.8 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "6196f83e-e10e-5e4b-9c94-6d548d852a14": { + "id": "6196f83e-e10e-5e4b-9c94-6d548d852a14", + "planet": 82, + "planetName": "im.Acrosi", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "6AHgA", + "className": "Sp-10", + "tech": { + "CARGO": 1, + "DRIVE": 5.13 + }, + "num": 2, + "numLeft": 0, + "loadType": "COL", + "loadQuantity": 0.07, + "inBattle": true + }, + "10": { + "race": "6AHgA", + "className": "rAg", + "tech": { + "DRIVE": 5.03, + "WEAPONS": 1.9 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "11": { + "race": "6AHgA", + "className": "DRon", + "tech": { + "DRIVE": 3.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "12": { + "race": "6AHgA", + "className": "dron", + "tech": { + "DRIVE": 2.1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "13": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 5.15 + }, + "num": 215, + "numLeft": 210, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "14": { + "race": "Tancordia", + "className": "HolyGrail2", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "15": { + "race": "Tancordia", + "className": "HolySword", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "16": { + "race": "Tancordia", + "className": "HolyHope", + "tech": { + "DRIVE": 5.26, + "SHIELDS": 3.86, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "6AHgA", + "className": "6ECnPu3OPHuK", + "tech": { + "DRIVE": 2 + }, + "num": 32, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "6AHgA", + "className": "Tur_129", + "tech": { + "DRIVE": 3.43, + "SHIELDS": 1, + "WEAPONS": 1.9 + }, + "num": 2, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "6AHgA", + "className": "Gun_99", + "tech": { + "DRIVE": 3.43, + "SHIELDS": 1, + "WEAPONS": 1.9 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "6AHgA", + "className": "Perf_3_129", + "tech": { + "DRIVE": 5.13, + "SHIELDS": 1.34, + "WEAPONS": 1.9 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "6AHgA", + "className": "Perf_1_129", + "tech": { + "DRIVE": 5.13, + "SHIELDS": 1.7, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "6AHgA", + "className": "SuperColonizer", + "tech": { + "CARGO": 1, + "DRIVE": 5.13 + }, + "num": 2, + "numLeft": 0, + "loadType": "COL", + "loadQuantity": 0.085, + "inBattle": true + }, + "8": { + "race": "6AHgA", + "className": "Tur_24_129", + "tech": { + "DRIVE": 5.13, + "SHIELDS": 2.04, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "6AHgA", + "className": "LittleGunWMD", + "tech": { + "DRIVE": 5.13, + "SHIELDS": 2.04, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 13, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 13, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 13, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 13, + "x": true + }, + { + "a": 1, + "sa": 4, + "d": 2, + "sd": 13, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 11, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 3, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 3, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 10, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 12, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 3, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 3, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 16, + "d": 1, + "sd": 4, + "x": true + }, + { + "a": 2, + "sa": 15, + "d": 1, + "sd": 6, + "x": true + }, + { + "a": 2, + "sa": 15, + "d": 1, + "sd": 8, + "x": true + }, + { + "a": 2, + "sa": 15, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 15, + "d": 1, + "sd": 9, + "x": false + }, + { + "a": 2, + "sa": 15, + "d": 1, + "sd": 9, + "x": true + } + ] + }, + "624a9976-53df-5567-ae74-50429cce0b4d": { + "id": "624a9976-53df-5567-ae74-50429cce0b4d", + "planet": 88, + "planetName": "Pok", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.67 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "626cb74d-d421-5344-ae42-564a89cddffa": { + "id": "626cb74d-d421-5344-ae42-564a89cddffa", + "planet": 9, + "planetName": "Los_Angeles_Kings", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Dawe", + "tech": { + "CARGO": 1, + "DRIVE": 4.88, + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 2, + "numLeft": 0, + "loadType": "COL", + "loadQuantity": 0.525, + "inBattle": true + }, + "1": { + "race": "6AHgA", + "className": "Eraser", + "tech": { + "DRIVE": 2.5, + "SHIELDS": 1, + "WEAPONS": 1.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "10": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 2.61 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "11": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "6AHgA", + "className": "Cpty_40", + "tech": { + "CARGO": 1, + "DRIVE": 6.79 + }, + "num": 2, + "numLeft": 2, + "loadType": "COL", + "loadQuantity": 39.25, + "inBattle": true + }, + "3": { + "race": "6AHgA", + "className": "dron", + "tech": { + "DRIVE": 5.13 + }, + "num": 27, + "numLeft": 27, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "6AHgA", + "className": "Orb_Tur_129", + "tech": { + "SHIELDS": 2.46, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "6AHgA", + "className": "6ECnPu3OPHuK", + "tech": { + "DRIVE": 6.79 + }, + "num": 290, + "numLeft": 290, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "6AHgA", + "className": "OTBAJIu_TOPMO3", + "tech": { + "DRIVE": 6.79, + "SHIELDS": 2.46, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "6AHgA", + "className": "10_Tur_125", + "tech": { + "DRIVE": 6.79, + "SHIELDS": 2.48, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "6AHgA", + "className": "83_HPerf_125", + "tech": { + "DRIVE": 6.79, + "SHIELDS": 2.49, + "WEAPONS": 2.52 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 6, + "d": 3, + "sd": 11, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 10, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 1, + "sa": 8, + "d": 0, + "sd": 0, + "x": false + }, + { + "a": 1, + "sa": 8, + "d": 0, + "sd": 0, + "x": false + }, + { + "a": 1, + "sa": 8, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "6389ea2c-b89f-549e-ab54-883fe742272b": { + "id": "6389ea2c-b89f-549e-ab54-883fe742272b", + "planet": 56, + "planetName": "Rose", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 2.68 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.23, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "65c3cff8-d7ed-55e1-9865-b2110ab38313": { + "id": "65c3cff8-d7ed-55e1-9865-b2110ab38313", + "planet": 62, + "planetName": "Planet", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "985f42da-7228-5388-8e2f-005d88b2d6a3", + "3": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "4": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "5": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "6": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "7": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Acrosi", + "className": "for_peace_from_Acrosi", + "tech": { + "DRIVE": 3.2 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Bullet", + "className": "Bullet", + "tech": { + "DRIVE": 2.7 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 0.8, + "inBattle": true + }, + "5": { + "race": "6AHgA", + "className": "DRon", + "tech": { + "DRIVE": 3.5 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.47 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 3, + "sa": 4, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 3, + "sa": 4, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 3, + "sa": 4, + "d": 5, + "sd": 6, + "x": true + }, + { + "a": 3, + "sa": 4, + "d": 7, + "sd": 8, + "x": true + }, + { + "a": 3, + "sa": 4, + "d": 6, + "sd": 7, + "x": true + } + ] + }, + "748784c5-911f-509b-a6d8-25d984c7e2f3": { + "id": "748784c5-911f-509b-a6d8-25d984c7e2f3", + "planet": 6, + "planetName": "Dermo", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.29, + "SHIELDS": 4.02, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "764d1007-ef58-5089-a653-e7365305e97c": { + "id": "764d1007-ef58-5089-a653-e7365305e97c", + "planet": 67, + "planetName": "Apollo-716", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Vpered", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 2.06, + "WEAPONS": 1.85 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "7a458c02-02dc-5652-942e-3d5ca35c2ad7": { + "id": "7a458c02-02dc-5652-942e-3d5ca35c2ad7", + "planet": 99, + "planetName": "Buffalo_Sabres", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "7a51822b-6d57-5949-8a55-958b54d528a1": { + "id": "7a51822b-6d57-5949-8a55-958b54d528a1", + "planet": 79, + "planetName": "Violet", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "3": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "4": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "5": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 3.1 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.8 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 5, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "7b39ebfe-da13-5c1a-8cce-7198a569cb94": { + "id": "7b39ebfe-da13-5c1a-8cce-7198a569cb94", + "planet": 131, + "planetName": "Tampa_Bay_Lightning", + "races": { + "0": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "1": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "2": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 0, + "loadType": "COL", + "loadQuantity": 1.61, + "inBattle": true + }, + "2": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "ter", + "tech": { + "DRIVE": 5.27, + "SHIELDS": 4.25, + "WEAPONS": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 3, + "sa": 3, + "d": 2, + "sd": 2, + "x": true + } + ] + }, + "7b7425c7-8332-52db-9110-77244445b8f3": { + "id": "7b7425c7-8332-52db-9110-77244445b8f3", + "planet": 85, + "planetName": "NewHome", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "985f42da-7228-5388-8e2f-005d88b2d6a3", + "4": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "5": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 3.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Acrosi", + "className": "Broad-Sword", + "tech": { + "DRIVE": 5.02, + "SHIELDS": 3.39, + "WEAPONS": 3.71 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Tancordia", + "className": "HolyWarrior", + "tech": { + "DRIVE": 2.1, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 432, + "numLeft": 432, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "Paladin", + "tech": { + "DRIVE": 5.18, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "Crusader", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 5, + "sa": 5, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 5, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "7bae71eb-ad8e-5bff-b0a6-dc9ace6cb7cc": { + "id": "7bae71eb-ad8e-5bff-b0a6-dc9ace6cb7cc", + "planet": 129, + "planetName": "im.WITCHHUNTERS", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyStone", + "tech": { + "SHIELDS": 2.73 + }, + "num": 344, + "numLeft": 344, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySpear", + "tech": { + "DRIVE": 5.29, + "SHIELDS": 4.02, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolyHope", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 5.31 + }, + "num": 186, + "numLeft": 186, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "7d2f104d-2985-5919-8df5-09df58ef1b8f": { + "id": "7d2f104d-2985-5919-8df5-09df58ef1b8f", + "planet": 11, + "planetName": "AnnoSatanae", + "races": { + "0": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "Bullet", + "className": "Perf87", + "tech": { + "DRIVE": 3.5, + "SHIELDS": 1.3, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Bullet", + "className": "Fighter", + "tech": { + "DRIVE": 3.5, + "SHIELDS": 1.3, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Bullet", + "className": "Perf83", + "tech": { + "DRIVE": 3.5, + "SHIELDS": 1.3, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Bullet", + "className": "SuperDrone", + "tech": { + "DRIVE": 3.7, + "SHIELDS": 1.5 + }, + "num": 56, + "numLeft": 56, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Bullet", + "className": "Engine", + "tech": { + "DRIVE": 3.9 + }, + "num": 28, + "numLeft": 28, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.2, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 0, + "sa": 0, + "d": 2, + "sd": 6, + "x": true + } + ] + }, + "7f602a85-98c7-579d-a9d4-20935f5e7308": { + "id": "7f602a85-98c7-579d-a9d4-20935f5e7308", + "planet": 132, + "planetName": "Katorga", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.67 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "831a3e55-7c55-52f9-8bdc-32680bac0d78": { + "id": "831a3e55-7c55-52f9-8bdc-32680bac0d78", + "planet": 44, + "planetName": "Nuo", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "stra", + "tech": { + "DRIVE": 2.8, + "SHIELDS": 1.32, + "WEAPONS": 1.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "85f0c551-0739-5ba8-b09b-4150c5e6c963": { + "id": "85f0c551-0739-5ba8-b09b-4150c5e6c963", + "planet": 95, + "planetName": "Philadelphia_Flyers", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "stra", + "tech": { + "DRIVE": 2.8, + "SHIELDS": 1.32, + "WEAPONS": 1.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Fto9", + "tech": { + "CARGO": 1, + "DRIVE": 1, + "SHIELDS": 1, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 1.05, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "867cdc3e-8bdf-57d2-8401-0b92af7151fa": { + "id": "867cdc3e-8bdf-57d2-8401-0b92af7151fa", + "planet": 0, + "planetName": "6.14", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "88d51235-2ade-5ce5-8866-c1a473a9993e": { + "id": "88d51235-2ade-5ce5-8866-c1a473a9993e", + "planet": 57, + "planetName": "Pik", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Fto9", + "tech": { + "CARGO": 1, + "DRIVE": 1.1, + "SHIELDS": 4.63, + "WEAPONS": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.67 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "8a5eb73c-f3e1-5d18-ab58-80cb0d3fe78c": { + "id": "8a5eb73c-f3e1-5d18-ab58-80cb0d3fe78c", + "planet": 50, + "planetName": "Demolution", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 2, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 5.34 + }, + "num": 85, + "numLeft": 85, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "8a779bc2-a1ee-5ffd-8802-54761673252b": { + "id": "8a779bc2-a1ee-5ffd-8802-54761673252b", + "planet": 123, + "planetName": "Gehenna", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.2, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "8ae64d21-927c-5e14-aefb-6a133cd04329": { + "id": "8ae64d21-927c-5e14-aefb-6a133cd04329", + "planet": 39, + "planetName": "Ultra_Rich_Mine", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "8bc65ffe-c016-57d6-8cb0-5c5592530b6b": { + "id": "8bc65ffe-c016-57d6-8cb0-5c5592530b6b", + "planet": 40, + "planetName": "708.67", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.23, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "8f923650-d6a7-5d55-964e-9deebfa31b8b": { + "id": "8f923650-d6a7-5d55-964e-9deebfa31b8b", + "planet": 108, + "planetName": "Quebec_Nordiques", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.31, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "97dae5d0-00f1-5ad6-b2ac-6094b605d5ad": { + "id": "97dae5d0-00f1-5ad6-b2ac-6094b605d5ad", + "planet": 1, + "planetName": "1685.02", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyShout", + "tech": { + "CARGO": 1, + "DRIVE": 1, + "SHIELDS": 1, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "MAT", + "loadQuantity": 1.06, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.57 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "9a4ad17f-b1b3-55de-98bf-5e20a1343720": { + "id": "9a4ad17f-b1b3-55de-98bf-5e20a1343720", + "planet": 114, + "planetName": "LaserJet", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "4": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "5": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 2.2 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 56, + "numLeft": 56, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 5, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "9a792ed3-2032-5c79-9b1a-f159b45bb10a": { + "id": "9a792ed3-2032-5c79-9b1a-f159b45bb10a", + "planet": 122, + "planetName": "Drugs", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyBlade", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "9e0021a6-820b-5450-bf69-ef3b5c5dd9fd": { + "id": "9e0021a6-820b-5450-bf69-ef3b5c5dd9fd", + "planet": 13, + "planetName": "LakeOfTears", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Bullet", + "className": "Bullet", + "tech": { + "DRIVE": 5.48 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Privet", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 2.05, + "WEAPONS": 1.75 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 47, + "numLeft": 47, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "9fc4ab7e-9df3-5bdf-80cd-708ed0d02177": { + "id": "9fc4ab7e-9df3-5bdf-80cd-708ed0d02177", + "planet": 0, + "planetName": "6.14", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 0.5, + "inBattle": true + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 4, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 3, + "sd": 3, + "x": true + } + ] + }, + "a588d0e8-05c9-5484-a8bb-82dba7c32b47": { + "id": "a588d0e8-05c9-5484-a8bb-82dba7c32b47", + "planet": 27, + "planetName": "Tak", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Fto9", + "tech": { + "CARGO": 1, + "DRIVE": 1, + "SHIELDS": 1, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "a9968f83-5b80-5799-9ef1-fe87ce0a49db": { + "id": "a9968f83-5b80-5799-9ef1-fe87ce0a49db", + "planet": 22, + "planetName": "Nok", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "ac708e4f-1202-5f53-8a2f-09622a43025a": { + "id": "ac708e4f-1202-5f53-8a2f-09622a43025a", + "planet": 33, + "planetName": "Carolina_Hurricanes", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 2.1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "acc4f395-d4fa-54ba-9324-ddf0736aaf2d": { + "id": "acc4f395-d4fa-54ba-9324-ddf0736aaf2d", + "planet": 85, + "planetName": "NewHome", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "985f42da-7228-5388-8e2f-005d88b2d6a3", + "4": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "5": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "6": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 3.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Acrosi", + "className": "Broad-Sword", + "tech": { + "DRIVE": 5.02, + "SHIELDS": 3.39, + "WEAPONS": 3.71 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 4.87 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 3, + "sa": 3, + "d": 5, + "sd": 5, + "x": true + } + ] + }, + "ae5336a6-2973-5736-ac73-793f2d27abe9": { + "id": "ae5336a6-2973-5736-ac73-793f2d27abe9", + "planet": 131, + "planetName": "Tampa_Bay_Lightning", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "bcfaa090-86da-50d8-aa2f-4112ee9cc166": { + "id": "bcfaa090-86da-50d8-aa2f-4112ee9cc166", + "planet": 77, + "planetName": "Bik", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Fto9", + "tech": { + "CARGO": 1, + "DRIVE": 1, + "SHIELDS": 1, + "WEAPONS": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "be513cb5-b82a-5651-9015-393126d2d8b9": { + "id": "be513cb5-b82a-5651-9015-393126d2d8b9", + "planet": 91, + "planetName": "Nabysko", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "3": "7509fa28-1c40-56e4-b039-985fffa280b2", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 2.2 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 1.61, + "inBattle": true + }, + "3": { + "race": "CRYPT", + "className": "Triger", + "tech": { + "DRIVE": 2.5 + }, + "num": 6, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.47 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 4, + "sd": 4, + "x": true + }, + { + "a": 2, + "sa": 2, + "d": 1, + "sd": 1, + "x": true + } + ] + }, + "be9f0a04-45ec-5d70-a7c5-01fa9b93a912": { + "id": "be9f0a04-45ec-5d70-a7c5-01fa9b93a912", + "planet": 33, + "planetName": "Carolina_Hurricanes", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Grosek", + "tech": { + "CARGO": 1, + "DRIVE": 4.88, + "SHIELDS": 5.23, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 34.2, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 2.1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 0, + "sa": 0, + "d": 1, + "sd": 1, + "x": true + } + ] + }, + "c94720e4-3073-5e99-be9c-df285ed7274b": { + "id": "c94720e4-3073-5e99-be9c-df285ed7274b", + "planet": 61, + "planetName": "Nik", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 13, + "numLeft": 13, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 9, + "numLeft": 9, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "ca900c7d-3ed8-555f-b75b-b4cd42c09b7e": { + "id": "ca900c7d-3ed8-555f-b75b-b4cd42c09b7e", + "planet": 93, + "planetName": "1000.00", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "2fce7075-7b09-51e0-ae29-aade2f019b29", + "3": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "6AHgA", + "className": "6ECnPu3OPHuK", + "tech": { + "DRIVE": 6.79 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Varlon", + "className": "Remember", + "tech": { + "DRIVE": 2.4, + "WEAPONS": 1.12 + }, + "num": 4, + "numLeft": 4, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.47 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 6, + "numLeft": 6, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 3, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "cde311e1-2636-573e-bd48-52a2c6f0a1cd": { + "id": "cde311e1-2636-573e-bd48-52a2c6f0a1cd", + "planet": 78, + "planetName": "Oplest", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 1.61, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.21 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 4, + "x": false + }, + { + "a": 1, + "sa": 1, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 3, + "x": true + } + ] + }, + "ce30ac26-e1ce-50ab-a7d7-821727079a0e": { + "id": "ce30ac26-e1ce-50ab-a7d7-821727079a0e", + "planet": 105, + "planetName": "Vancouver_Canucks", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "cbf8a416-d0da-542e-a76c-2750bf288d83", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Vanbisbruk", + "tech": { + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "NHL", + "className": "Fuhr_2", + "tech": { + "SHIELDS": 4.16 + }, + "num": 30, + "numLeft": 30, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "NHL", + "className": "Shilds", + "tech": { + "SHIELDS": 5.23, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "NHL", + "className": "Fuhr_3", + "tech": { + "SHIELDS": 5.23 + }, + "num": 20, + "numLeft": 20, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "5": { + "race": "NHL", + "className": "Ciccarelli", + "tech": { + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "6": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "7": { + "race": "Mad", + "className": "Shpionchik", + "tech": { + "DRIVE": 2.9 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "8": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 3.61 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 9, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "dad43ae8-d33a-5275-bdc2-3a09de0dc72a": { + "id": "dad43ae8-d33a-5275-bdc2-3a09de0dc72a", + "planet": 43, + "planetName": "Debil", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.67 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "dd9d1fe8-a624-51e4-a11c-23564feadfd7": { + "id": "dd9d1fe8-a624-51e4-a11c-23564feadfd7", + "planet": 46, + "planetName": "Anachaim_Mayti_Ducks", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.31, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 2, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "e0b9fe57-2772-5060-bdb1-0c18238745a0": { + "id": "e0b9fe57-2772-5060-bdb1-0c18238745a0", + "planet": 26, + "planetName": "Bardel", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "e2c632ea-7ab8-5fe0-ae44-140e431b8d5c": { + "id": "e2c632ea-7ab8-5fe0-ae44-140e431b8d5c", + "planet": 99, + "planetName": "Buffalo_Sabres", + "races": { + "0": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "NHL", + "className": "Holzinger", + "tech": { + "DRIVE": 4.88, + "SHIELDS": 4.16, + "WEAPONS": 2.22 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 3.3 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 0, + "sa": 0, + "d": 1, + "sd": 1, + "x": true + } + ] + }, + "e4a8b24e-6187-58b6-b256-1e727842563d": { + "id": "e4a8b24e-6187-58b6-b256-1e727842563d", + "planet": 32, + "planetName": "im.Mad", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 2.1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.2, + "SHIELDS": 3.53, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 3, + "numLeft": 3, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "e67d0a22-8096-55ec-8654-d0026ae7d7fb": { + "id": "e67d0a22-8096-55ec-8654-d0026ae7d7fb", + "planet": 11, + "planetName": "AnnoSatanae", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.2, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 2, + "sa": 3, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "e82cff85-de85-597f-a145-c62bfbe36d0f": { + "id": "e82cff85-de85-597f-a145-c62bfbe36d0f", + "planet": 83, + "planetName": "ye6ok", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.47 + }, + "num": 10, + "numLeft": 10, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolyHorror", + "tech": { + "DRIVE": 5.1, + "SHIELDS": 2.73, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "efeacace-34e0-5551-8fe3-d7f62484a04c": { + "id": "efeacace-34e0-5551-8fe3-d7f62484a04c", + "planet": 18, + "planetName": "Gigant", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 2.68 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.23, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 4, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "f033ca4f-34f8-5047-818f-d525ed4a0aa3": { + "id": "f033ca4f-34f8-5047-818f-d525ed4a0aa3", + "planet": 121, + "planetName": "Anathema", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Varlon", + "className": "Remember", + "tech": { + "DRIVE": 2.4, + "WEAPONS": 1.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.27 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.2, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 5, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "f319c219-9b3d-5e83-b4d5-8da594176a10": { + "id": "f319c219-9b3d-5e83-b4d5-8da594176a10", + "planet": 51, + "planetName": "1705.21", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 4.88 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 328, + "numLeft": 328, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Tancordia", + "className": "ArchAngel", + "tech": { + "CARGO": 1, + "DRIVE": 4.57, + "SHIELDS": 4.52, + "WEAPONS": 2.56 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 45, + "inBattle": false + }, + "5": { + "race": "Tancordia", + "className": "HolyLight", + "tech": { + "CARGO": 1, + "DRIVE": 1.6 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "Saviour", + "tech": { + "DRIVE": 5.15, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolyPower", + "tech": { + "DRIVE": 5.26, + "SHIELDS": 3.86, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 2, + "numLeft": 2, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 3, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "f4ee8fc1-4e3b-5dc1-b0a0-cdb4fcbcc0ea": { + "id": "f4ee8fc1-4e3b-5dc1-b0a0-cdb4fcbcc0ea", + "planet": 24, + "planetName": "im.Killer", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 2.2 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "10": { + "race": "Tancordia", + "className": "HolyMartyr", + "tech": { + "DRIVE": 5.23, + "SHIELDS": 3.69, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "11": { + "race": "Tancordia", + "className": "HolyFanatic", + "tech": { + "DRIVE": 5.29, + "SHIELDS": 4.02, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "12": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 5.34 + }, + "num": 98, + "numLeft": 98, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.6 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolySpear", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.14, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolyGrail2", + "tech": { + "DRIVE": 5.15, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyStone", + "tech": { + "SHIELDS": 3.53 + }, + "num": 70, + "numLeft": 70, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Tancordia", + "className": "HolyGrail3", + "tech": { + "DRIVE": 5.23, + "SHIELDS": 3.69, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 7, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "f841acbc-7dbc-582f-878a-43ef32f8b128": { + "id": "f841acbc-7dbc-582f-878a-43ef32f8b128", + "planet": 54, + "planetName": "Apollo-1085", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 2.4 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "f995a51d-f45e-57fb-b146-c538a45c1d88": { + "id": "f995a51d-f45e-57fb-b146-c538a45c1d88", + "planet": 76, + "planetName": "Geranium", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "a2592e33-27c4-595c-bd02-398916cc7cc5", + "3": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "4": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Lemieux", + "tech": { + "DRIVE": 1.4 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "2": { + "race": "Varlon", + "className": "VarlonEyes", + "tech": { + "DRIVE": 1.3 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "3": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 2.8 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "4": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Tancordia", + "className": "HolyDefender", + "tech": { + "DRIVE": 5.14, + "SHIELDS": 3.53, + "WEAPONS": 3.12 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 4, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + } + ] + }, + "fc34fa9d-aead-5849-ab7c-1e59476a612f": { + "id": "fc34fa9d-aead-5849-ab7c-1e59476a612f", + "planet": 55, + "planetName": "Washington_Capitals", + "races": { + "0": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "1": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "2": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "3": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "Bullet", + "className": "ABOCb", + "tech": { + "CARGO": 1, + "DRIVE": 5.48, + "SHIELDS": 3.45, + "WEAPONS": 3.83 + }, + "num": 1, + "numLeft": 1, + "loadType": "COL", + "loadQuantity": 1.61, + "inBattle": true + }, + "2": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Tancordia", + "className": "HolySting", + "tech": { + "DRIVE": 5.29, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 1, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 1, + "sa": 1, + "d": 3, + "sd": 3, + "x": true + } + ] + }, + "fc3dae3d-c883-5e95-af1d-7c91c52ab9ce": { + "id": "fc3dae3d-c883-5e95-af1d-7c91c52ab9ce", + "planet": 124, + "planetName": "Diareng", + "races": { + "0": "f7a8b000-789c-5767-b61a-2938b25c4629", + "1": "e5e91bc3-fea8-5dc3-b740-68e17561c722", + "2": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "3": "985f42da-7228-5388-8e2f-005d88b2d6a3", + "4": "957ebde3-c583-585b-bebf-ea8a5e45c49e", + "5": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "ALM", + "className": "ALMDrone", + "tech": { + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "1": { + "race": "NHL", + "className": "Peca", + "tech": { + "CARGO": 1, + "DRIVE": 1 + }, + "num": 1, + "numLeft": 0, + "loadType": "COL", + "loadQuantity": 1.33, + "inBattle": true + }, + "2": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Acrosi", + "className": "BackHit", + "tech": { + "DRIVE": 5.02, + "SHIELDS": 3.39, + "WEAPONS": 3.71 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Acrosi", + "className": "Drone", + "tech": { + "DRIVE": 5.02 + }, + "num": 13, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Pahanchiks", + "className": "Scout", + "tech": { + "DRIVE": 5.05 + }, + "num": 386, + "numLeft": 386, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Pahanchiks", + "className": "Vpered", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 2.06, + "WEAPONS": 1.75 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Pahanchiks", + "className": "Dron", + "tech": { + "DRIVE": 5.05, + "SHIELDS": 3, + "WEAPONS": 3.34 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 4.23 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + } + }, + "protocol": [ + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 2, + "sd": 2, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 3, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 0, + "sd": 0, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + }, + { + "a": 4, + "sa": 6, + "d": 3, + "sd": 4, + "x": true + } + ] + }, + "fef14d32-35b7-5200-9be9-c0d0e10cba05": { + "id": "fef14d32-35b7-5200-9be9-c0d0e10cba05", + "planet": 122, + "planetName": "Drugs", + "races": { + "0": "f3014d8b-a269-5812-aea1-f6fd26c539eb", + "1": "590e8786-b839-5dca-8c9d-59f4ae4044e4", + "2": "72763c0b-c0a0-5594-85bc-1cefe7769a9c" + }, + "ships": { + "0": { + "race": "Eraser", + "className": "Engine", + "tech": { + "DRIVE": 2.5 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": false + }, + "1": { + "race": "Bullet", + "className": "Jlob", + "tech": { + "CARGO": 1, + "DRIVE": 4.14, + "SHIELDS": 1.72, + "WEAPONS": 1.52 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "10": { + "race": "Tancordia", + "className": "HolyBlade", + "tech": { + "DRIVE": 5.34, + "SHIELDS": 4.35, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "2": { + "race": "Bullet", + "className": "Bullet", + "tech": { + "DRIVE": 4.34 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "3": { + "race": "Bullet", + "className": "HeavyDuty", + "tech": { + "DRIVE": 4.34, + "SHIELDS": 1.82, + "WEAPONS": 1.82 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "4": { + "race": "Bullet", + "className": "Stylus", + "tech": { + "DRIVE": 4.34, + "SHIELDS": 1.92, + "WEAPONS": 1.92 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "5": { + "race": "Bullet", + "className": "Bomb", + "tech": { + "DRIVE": 4.34, + "SHIELDS": 2.02 + }, + "num": 9, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "6": { + "race": "Bullet", + "className": "antiDOG", + "tech": { + "DRIVE": 5.38, + "SHIELDS": 3.4, + "WEAPONS": 3.63 + }, + "num": 2, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "7": { + "race": "Tancordia", + "className": "HolyPilgrim", + "tech": { + "DRIVE": 5.26 + }, + "num": 37, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "8": { + "race": "Tancordia", + "className": "HolyGrail3", + "tech": { + "DRIVE": 5.29, + "SHIELDS": 4.02, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 1, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + }, + "9": { + "race": "Tancordia", + "className": "HolySymbol", + "tech": { + "DRIVE": 5.31, + "SHIELDS": 4.19, + "WEAPONS": 3.29 + }, + "num": 1, + "numLeft": 0, + "loadType": "", + "loadQuantity": 0, + "inBattle": true + } + }, + "protocol": [ + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 1, + "sa": 3, + "d": 2, + "sd": 7, + "x": true + }, + { + "a": 2, + "sa": 10, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 1, + "sa": 4, + "d": 2, + "sd": 9, + "x": true + }, + { + "a": 1, + "sa": 6, + "d": 2, + "sd": 8, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 3, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 3, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 2, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 4, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 1, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 4, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 1, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 5, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 1, + "sa": 6, + "d": 2, + "sd": 8, + "x": false + }, + { + "a": 1, + "sa": 6, + "d": 2, + "sd": 10, + "x": false + }, + { + "a": 1, + "sa": 6, + "d": 2, + "sd": 8, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": true + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 10, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": false + }, + { + "a": 2, + "sa": 8, + "d": 1, + "sd": 6, + "x": true + } + ] + } + } +} -- 2.52.0 From eb5018342ebc17b43d314e1c58ed8376b883205d Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 09:40:20 +0200 Subject: [PATCH 5/9] =?UTF-8?q?feat(ui):=20F8-12=20=E2=80=94=20owner=20fee?= =?UTF-8?q?dback=20round=202=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bug fix: theme flip no longer leaves planets oversized. The camera-preserving remount now calls a new `RendererHandle.refreshCameraDerivedDraws` explicitly after the manual moveCenter/setZoom pair so the post-mount geometry tracks `viewport.scaled` even if pixi-viewport's `'zoomed'` listener races the next Ticker tick. * Doc #3: clicks on a planet label route through the same hit-test path as a click on the disc. The label `Container` now has a pointer hit area sized to the text + frame padding; pointertap simulates a click at the planet centre, so selection and pick-mode resolution behave identically. * Doc #4: battle X-crosses + cargo arrowhead wings grow sub-linearly with zoom (PLANET_SIZE_ZOOM_ALPHA). New `Style.softLengthAnchor` ('center' / 'start') makes the renderer treat the recorded endpoints as the geometry "at the reference scale" and rescale around the midpoint (X-cross) or the start endpoint (arrow wings). Arrowhead base length is halved from 6 to 3 world units to match the owner's "in half" request. * Doc #5: picker overlay loses the anchor ring at the source, the cursor line drops to a cargo-route-thin 0.6 px stroke, and the hover ring around the destination is replaced by a planet-style outline (visible disc + 1 px padding) in the `pickHighlight` accent — so candidate destinations read like selection in warm yellow. * Doc #6: regression test pins the in-disc hit zone. * Perf #1: camera-driven redraws are throttled onto the next Ticker tick. A rapid wheel / pinch burst now coalesces into at most one `clear() + redraw` pass per painted frame, which keeps the 500-planet map responsive on zoom and toggle flips. Co-Authored-By: Claude Opus 4.7 --- ui/frontend/src/lib/active-view/map.svelte | 8 ++ ui/frontend/src/map/battle-markers.ts | 5 + ui/frontend/src/map/cargo-routes.ts | 79 +++++++++++--- ui/frontend/src/map/hit-test.ts | 36 ++++++- ui/frontend/src/map/pick-mode.ts | 27 +++-- ui/frontend/src/map/render.ts | 120 +++++++++++++++++---- ui/frontend/src/map/world.ts | 65 +++++++++++ ui/frontend/tests/map-cargo-routes.test.ts | 30 ++++-- ui/frontend/tests/map-hit-test.test.ts | 15 +++ ui/frontend/tests/map-pick-mode.test.ts | 10 +- 10 files changed, 334 insertions(+), 61 deletions(-) diff --git a/ui/frontend/src/lib/active-view/map.svelte b/ui/frontend/src/lib/active-view/map.svelte index 8a321b4..8b60519 100644 --- a/ui/frontend/src/lib/active-view/map.svelte +++ b/ui/frontend/src/lib/active-view/map.svelte @@ -599,6 +599,14 @@ preference the store already manages. handle.viewport.moveCenter(world.width / 2, world.height / 2); handle.viewport.setZoom(minScale * 1.05, true); } + // `viewport.setZoom` emits `zoomed` through the next Ticker + // tick, but the handler can race the synchronous setExtras / + // label / outline calls that follow — and a theme-flip + // remount has been observed to leave primitives drawn at the + // boot scale until the user nudges the wheel. Force the + // camera-derived redraw explicitly here so the post-mount + // state always matches `viewport.scaled`. + handle.refreshCameraDerivedDraws(); if (mode === "no-wrap") handle.setMode("no-wrap"); detachClick = handle.onClick(handleMapClick); pickService?.bindResolver(({ sourcePlanetNumber, reachableIds, onResolve }) => { diff --git a/ui/frontend/src/map/battle-markers.ts b/ui/frontend/src/map/battle-markers.ts index 3d5eed3..b5dc107 100644 --- a/ui/frontend/src/map/battle-markers.ts +++ b/ui/frontend/src/map/battle-markers.ts @@ -117,6 +117,11 @@ export function buildBattleAndBombingMarkers( strokeColor: theme.battleMarker, strokeAlpha: 0.95, strokeWidthPx, + // F8-12 / #4 follow-up: grow the X-cross length sub-linearly + // with zoom (the planet disc does the same, so the marker + // stays proportional). Endpoints listed below are the "at + // reference scale" geometry. + softLengthAnchor: "center", }; const baseId = BATTLE_MARKER_ID_PREFIX | (i << 4); const lineA: LinePrim = { diff --git a/ui/frontend/src/map/cargo-routes.ts b/ui/frontend/src/map/cargo-routes.ts index 8c943b9..0ad45c0 100644 --- a/ui/frontend/src/map/cargo-routes.ts +++ b/ui/frontend/src/map/cargo-routes.ts @@ -20,13 +20,64 @@ import { DARK_THEME, type LinePrim, type PrimitiveID, type Style, type Theme } f * active theme. A single `Style` object is shared by every line of a * given load type within one call so the renderer can dedupe them. */ -function routeStylesByLoadType(theme: Theme): Record { - return { - COL: { strokeColor: theme.routeCol, strokeAlpha: 0.95, strokeWidthPx: 0.6 }, - CAP: { strokeColor: theme.routeCap, strokeAlpha: 0.95, strokeWidthPx: 0.6 }, - MAT: { strokeColor: theme.routeMat, strokeAlpha: 0.95, strokeWidthPx: 0.6 }, - EMP: { strokeColor: theme.routeEmp, strokeAlpha: 0.85, strokeWidthPx: 0.4 }, +function routeStylesByLoadType( + theme: Theme, +): Record { + const styles: Record = { + COL: { + shaft: { + strokeColor: theme.routeCol, + strokeAlpha: 0.95, + strokeWidthPx: 0.6, + }, + wing: { + strokeColor: theme.routeCol, + strokeAlpha: 0.95, + strokeWidthPx: 0.6, + softLengthAnchor: "start", + }, + }, + CAP: { + shaft: { + strokeColor: theme.routeCap, + strokeAlpha: 0.95, + strokeWidthPx: 0.6, + }, + wing: { + strokeColor: theme.routeCap, + strokeAlpha: 0.95, + strokeWidthPx: 0.6, + softLengthAnchor: "start", + }, + }, + MAT: { + shaft: { + strokeColor: theme.routeMat, + strokeAlpha: 0.95, + strokeWidthPx: 0.6, + }, + wing: { + strokeColor: theme.routeMat, + strokeAlpha: 0.95, + strokeWidthPx: 0.6, + softLengthAnchor: "start", + }, + }, + EMP: { + shaft: { + strokeColor: theme.routeEmp, + strokeAlpha: 0.85, + strokeWidthPx: 0.4, + }, + wing: { + strokeColor: theme.routeEmp, + strokeAlpha: 0.85, + strokeWidthPx: 0.4, + softLengthAnchor: "start", + }, + }, }; + return styles; } /** Per-load-type priority. Higher wins hit-test ties; planets sit @@ -59,9 +110,11 @@ const SHAFT_OFFSET = 0; const WING_LEFT_OFFSET = 1; const WING_RIGHT_OFFSET = 2; -/** Arrowhead size in world units. Picked so the head is visible - * at default zoom but does not eat the destination planet glyph. */ -const HEAD_LENGTH_WORLD = 6; +/** Arrowhead size in world units **at the reference zoom**. F8-12 / + * #4 follow-up halved the head from 6 → 3 world units and added + * `softLengthAnchor: "start"` so the wings grow sub-linearly with + * zoom instead of stretching across the whole approach. */ +const HEAD_LENGTH_WORLD = 3; /** Half-angle of the arrowhead opening, in radians (~25°). */ const HEAD_HALF_ANGLE = (25 * Math.PI) / 180; @@ -122,13 +175,13 @@ export function buildCargoRouteLines( route.sourcePlanetNumber, entry.loadType, ); - const style = styleByLoadType[entry.loadType]; + const styles = styleByLoadType[entry.loadType]; const priority = PRIORITY_BY_LOAD_TYPE[entry.loadType]; lines.push({ kind: "line", id: baseId + SHAFT_OFFSET, priority, - style, + style: styles.shaft, hitSlopPx: 0, x1: source.x, y1: source.y, @@ -139,7 +192,7 @@ export function buildCargoRouteLines( kind: "line", id: baseId + WING_LEFT_OFFSET, priority, - style, + style: styles.wing, hitSlopPx: 0, x1: headX, y1: headY, @@ -150,7 +203,7 @@ export function buildCargoRouteLines( kind: "line", id: baseId + WING_RIGHT_OFFSET, priority, - style, + style: styles.wing, hitSlopPx: 0, x1: headX, y1: headY, diff --git a/ui/frontend/src/map/hit-test.ts b/ui/frontend/src/map/hit-test.ts index 6d9b2f0..d51caed 100644 --- a/ui/frontend/src/map/hit-test.ts +++ b/ui/frontend/src/map/hit-test.ts @@ -15,6 +15,7 @@ import { distSqPointToSegment, screenToWorld, torusShortestDelta } from "./math" import { minScaleNoWrap } from "./no-wrap"; import { DEFAULT_HIT_SLOP_PX, + displayLineEndpoints, displayPointRadiusWorld, KIND_ORDER, type Camera, @@ -77,7 +78,14 @@ export function hitTest( } else if (p.kind === "circle") { result = matchCircle(p, cursor, slopWorld, mode === "torus" ? world : null); } else { - result = matchLine(p, cursor, slopWorld, mode === "torus" ? world : null); + result = matchLine( + p, + cursor, + slopWorld, + camera.scale, + scaleRef, + mode === "torus" ? world : null, + ); } if (result !== null) { candidates.push({ primitive: p, distSq: result }); @@ -163,6 +171,8 @@ function matchLine( p: LinePrim, cursor: { x: number; y: number }, slopWorld: number, + cameraScale: number, + scaleRef: number, world: World | null, ): number | null { // In torus mode the canonical line representation goes from @@ -170,14 +180,30 @@ function matchLine( // shortest delta from end1 to end2. The cursor's distance is // then the perpendicular distance to this canonical segment, // using the torus-shortest cursor-to-end1 delta as the basis. + const ends = displayLineEndpoints( + p.style, + p.x1, + p.y1, + p.x2, + p.y2, + cameraScale, + scaleRef, + ); if (world === null) { - const distSq = distSqPointToSegment(cursor.x, cursor.y, p.x1, p.y1, p.x2, p.y2); + const distSq = distSqPointToSegment( + cursor.x, + cursor.y, + ends.x1, + ends.y1, + ends.x2, + ends.y2, + ); if (distSq <= slopWorld * slopWorld) return distSq; return null; } - const segDx = torusShortestDelta(p.x1, p.x2, world.width); - const segDy = torusShortestDelta(p.y1, p.y2, world.height); - const cur = torusDelta(p.x1, p.y1, cursor.x, cursor.y, world); + const segDx = torusShortestDelta(ends.x1, ends.x2, world.width); + const segDy = torusShortestDelta(ends.y1, ends.y2, world.height); + const cur = torusDelta(ends.x1, ends.y1, cursor.x, cursor.y, world); const distSq = distSqPointToSegment(cur.dx, cur.dy, 0, 0, segDx, segDy); if (distSq <= slopWorld * slopWorld) return distSq; return null; diff --git a/ui/frontend/src/map/pick-mode.ts b/ui/frontend/src/map/pick-mode.ts index 6f22c7b..3a5ebb8 100644 --- a/ui/frontend/src/map/pick-mode.ts +++ b/ui/frontend/src/map/pick-mode.ts @@ -83,10 +83,17 @@ export interface PickOverlaySpec { readonly dimmedIds: ReadonlySet; } -/** Anchor / hover outline padding in world units (the rings sit - * outside the visible disc so the planet stays clearly visible). */ +/** Anchor / hover outline padding. F8-12 / #5 retired the anchor + * ring from the picker overlay, so `ANCHOR_PADDING_WORLD` is now + * dead — kept exported for legacy test coverage that asserts the + * spec stays shaped the same way. `HOVER_PADDING_PX` is the + * screen-pixel gap the picker hover-ring leaves between the + * destination disc edge and the stroke; it matches the regular + * planet outline (`OUTLINE_RADIUS_PADDING_PX` in `render.ts`) so + * "selection" and "pick hover" outlines feel identical at every + * zoom. */ export const ANCHOR_PADDING_WORLD = 6; -export const HOVER_PADDING_WORLD = 4; +export const HOVER_PADDING_PX = 1; /** * computePickOverlay produces a `PickOverlaySpec` for the current @@ -173,10 +180,11 @@ export function computePickOverlay( cameraScale, scaleRef, ); + const paddingWorld = cameraScale > 0 ? HOVER_PADDING_PX / cameraScale : 0; hoverOutline = { x: target.x, y: target.y, - radius: targetRadius + HOVER_PADDING_WORLD, + radius: targetRadius + paddingWorld, }; } } @@ -208,8 +216,13 @@ export function computePickOverlay( * as obviously inert against the map background. */ export const PICK_OVERLAY_STYLE = { - anchor: { alpha: 0.9, width: 2 }, - line: { alpha: 0.5, width: 1 }, - hover: { alpha: 1, width: 2 }, + anchor: { alpha: 0.9, widthPx: 2 }, + // F8-12 / #5: cursor line uses the same screen-pixel thickness as + // a regular cargo-route shaft (0.6 px), and the hover ring around + // the destination matches the planet-outline stroke (1.5 px). The + // renderer divides by `cameraScale` before drawing so the values + // stay constant on screen at any zoom. + line: { alpha: 0.95, widthPx: 0.6 }, + hover: { alpha: 0.95, widthPx: 1.5 }, dimAlpha: 0.35, } as const; diff --git a/ui/frontend/src/map/render.ts b/ui/frontend/src/map/render.ts index 4b6a201..468f95a 100644 --- a/ui/frontend/src/map/render.ts +++ b/ui/frontend/src/map/render.ts @@ -21,6 +21,7 @@ import { Application, Container, Graphics, + Rectangle, Text, Ticker, UPDATE_PRIORITY, @@ -42,6 +43,7 @@ import { import { wrapCameraTorus } from "./torus"; import { DARK_THEME, + displayLineEndpoints, displayPointRadiusWorld, displayStrokeWidthWorld, World, @@ -219,6 +221,16 @@ export interface RendererHandle { setVisibilityFog( circles: ReadonlyArray<{ x: number; y: number; radius: number }>, ): void; + /** + * refreshCameraDerivedDraws repaints every primitive / outline / + * label whose geometry depends on the current camera scale. The + * map view calls this right after a manual `viewport.moveCenter` / + * `viewport.setZoom` pair (e.g. on a theme-flip remount), where + * `pixi-viewport`'s `'zoomed'` listener can race the next Ticker + * tick and leave the scene drawn at the boot scale until the + * player nudges the wheel. + */ + refreshCameraDerivedDraws(): void; /** * setPlanetLabels replaces the on-map planet label dataset * (F8-12 / #29). Each entry is anchored to its planet's @@ -510,7 +522,7 @@ export async function createRenderer(opts: RendererOptions): Promise { @@ -635,17 +647,28 @@ export async function createRenderer(opts: RendererOptions): Promise simulatePlanetClick(targetPlanet)); } updateLabelTransforms(); requestRender(); }; + const simulatePlanetClick = (planetNumber: number): void => { + const prim = pointPrimitivesById.get(planetNumber); + if (prim === undefined) return; + const cameraScale = viewport.scaled; + if (cameraScale <= 0) return; + const screen = { + x: + viewport.screenWidth / 2 + + (prim.x - viewport.center.x) * cameraScale, + y: + viewport.screenHeight / 2 + + (prim.y - viewport.center.y) * cameraScale, + }; + handleViewportClicked({ screen }); + }; + let mode: WrapMode = opts.mode; const enforceCentreWhenLarger = (): void => { @@ -1045,24 +1091,28 @@ export async function createRenderer(opts: RendererOptions): Promise 0 ? viewport.scaled : 1; + const lineWidthWorld = PICK_OVERLAY_STYLE.line.widthPx / cameraScale; + const hoverWidthWorld = PICK_OVERLAY_STYLE.hover.widthPx / cameraScale; for (const g of pickOverlays) { g.clear(); - g.circle(spec.anchor.x, spec.anchor.y, spec.anchor.radius); - g.stroke({ - color: theme.pickHighlight, - alpha: PICK_OVERLAY_STYLE.anchor.alpha, - width: PICK_OVERLAY_STYLE.anchor.width, - }); + // F8-12 / #5: anchor ring around the source is retired — + // the source planet's own outline already signals selection. if (spec.line !== null) { g.moveTo(spec.line.x1, spec.line.y1); g.lineTo(spec.line.x2, spec.line.y2); g.stroke({ color: theme.pickHighlight, alpha: PICK_OVERLAY_STYLE.line.alpha, - width: PICK_OVERLAY_STYLE.line.width, + width: lineWidthWorld, }); } if (spec.hoverOutline !== null) { + // F8-12 / #5: hover ring matches the regular planet + // outline geometry (visible disc + ~1 px padding) but + // paints in `pickHighlight` so the player sees the + // destination candidate just like a selection — only + // in the warm picker accent. g.circle( spec.hoverOutline.x, spec.hoverOutline.y, @@ -1071,7 +1121,7 @@ export async function createRenderer(opts: RendererOptions): Promise { + // safe even on a synchronous zoomed event. A rapid wheel / pinch + // burst fires many `zoomed` events per frame; we coalesce them + // onto the next Ticker tick so the expensive `clear() + redraw` + // pass runs at most once per painted frame even on a 500-planet + // map. + let zoomedRedrawPending = false; + const runCameraDerivedRedraws = (): void => { redrawAllPrimitives(); updateOutlineTransforms(); updateLabelTransforms(); redrawPickOverlay(); requestRender(); }; + const handleZoomed = (): void => { + if (zoomedRedrawPending) return; + zoomedRedrawPending = true; + Ticker.shared.addOnce(() => { + zoomedRedrawPending = false; + runCameraDerivedRedraws(); + }); + }; viewport.on("zoomed", handleZoomed); const handle: RendererHandle = { @@ -1348,6 +1411,7 @@ export async function createRenderer(opts: RendererOptions): Promise { app.renderer.resize(w, h); viewport.resize(w, h, opts.world.width, opts.world.height); @@ -1466,21 +1530,31 @@ function drawLine( p: LinePrim, theme: Theme, cameraScale: number, + scaleRef: number, ): void { const color = p.style.strokeColor ?? theme.lineStroke; const alpha = p.style.strokeAlpha ?? 1; const width = displayStrokeWidthWorld(p.style, cameraScale); + const ends = displayLineEndpoints( + p.style, + p.x1, + p.y1, + p.x2, + p.y2, + cameraScale, + scaleRef, + ); const dash = p.style.strokeDashPx; if (dash === undefined || dash <= 0) { - g.moveTo(p.x1, p.y1); - g.lineTo(p.x2, p.y2); + g.moveTo(ends.x1, ends.y1); + g.lineTo(ends.x2, ends.y2); g.stroke({ color, alpha, width }); return; } // PixiJS v8 has no native dashed-line API; segment the path into // equal-length dashes (dash and gap both `dash` units). - const dx = p.x2 - p.x1; - const dy = p.y2 - p.y1; + const dx = ends.x2 - ends.x1; + const dy = ends.y2 - ends.y1; const length = Math.hypot(dx, dy); if (length === 0) return; const ux = dx / length; @@ -1488,8 +1562,8 @@ function drawLine( const step = dash * 2; for (let t = 0; t < length; t += step) { const segEnd = Math.min(t + dash, length); - g.moveTo(p.x1 + ux * t, p.y1 + uy * t); - g.lineTo(p.x1 + ux * segEnd, p.y1 + uy * segEnd); + g.moveTo(ends.x1 + ux * t, ends.y1 + uy * t); + g.lineTo(ends.x1 + ux * segEnd, ends.y1 + uy * segEnd); } g.stroke({ color, alpha, width }); } diff --git a/ui/frontend/src/map/world.ts b/ui/frontend/src/map/world.ts index 2e51235..4f22cf2 100644 --- a/ui/frontend/src/map/world.ts +++ b/ui/frontend/src/map/world.ts @@ -47,6 +47,15 @@ export interface Style { // this for the IncomingGroup trajectory line; ignored on point // and circle primitives. strokeDashPx?: number; + // softLengthAnchor — when set on a `LinePrim`, the renderer treats + // the world-coord endpoints as the line length "at the reference + // scale" and grows / shrinks them with `PLANET_SIZE_ZOOM_ALPHA` + // the same way planet discs do. `'center'` scales both endpoints + // around the segment midpoint (used by battle X-crosses anchored + // on the planet centre); `'start'` keeps `(x1, y1)` fixed and + // only scales `(x2, y2)` along the original direction (used by + // cargo-route arrowhead wings anchored at the destination). + softLengthAnchor?: "center" | "start"; } // PrimitiveBase carries the fields shared by every primitive kind. @@ -278,6 +287,62 @@ export function displayStrokeWidthWorld( return px / cameraScale; } +/** + * softLengthFactor returns the multiplier that scales a line's + * length when `style.softLengthAnchor` is set. The factor matches + * the planet-radius softening rule: at `scale = scaleRef` it equals + * `1` (the recorded geometry is the reference length); zooming in + * shrinks the world-space length so the on-screen length grows by + * `(scale / scaleRef)^α`. `displayLineEndpoints` is the convenience + * wrapper that applies it to a line's `(x1, y1)–(x2, y2)` pair + * given the configured anchor. + */ +export function softLengthFactor( + cameraScale: number, + scaleRef: number, +): number { + if (cameraScale <= 0 || scaleRef <= 0) return 1; + return Math.pow(cameraScale / scaleRef, PLANET_SIZE_ZOOM_ALPHA - 1); +} + +/** + * displayLineEndpoints returns the world-space endpoints the + * renderer should draw a `LinePrim` between, honouring + * `style.softLengthAnchor` if set. Used by both the renderer and + * the hit-test so the click zone always matches the visible stroke. + */ +export function displayLineEndpoints( + style: Style, + x1: number, + y1: number, + x2: number, + y2: number, + cameraScale: number, + scaleRef: number, +): { x1: number; y1: number; x2: number; y2: number } { + if (style.softLengthAnchor === undefined) { + return { x1, y1, x2, y2 }; + } + const factor = softLengthFactor(cameraScale, scaleRef); + if (factor === 1) return { x1, y1, x2, y2 }; + if (style.softLengthAnchor === "start") { + return { + x1, + y1, + x2: x1 + (x2 - x1) * factor, + y2: y1 + (y2 - y1) * factor, + }; + } + const cx = (x1 + x2) / 2; + const cy = (y1 + y2) / 2; + return { + x1: cx + (x1 - cx) * factor, + y1: cy + (y1 - cy) * factor, + x2: cx + (x2 - cx) * factor, + y2: cy + (y2 - cy) * factor, + }; +} + export const DARK_THEME: Theme = { background: 0x0a0e1a, fog: 0x12162a, diff --git a/ui/frontend/tests/map-cargo-routes.test.ts b/ui/frontend/tests/map-cargo-routes.test.ts index 740a4a0..963f5c8 100644 --- a/ui/frontend/tests/map-cargo-routes.test.ts +++ b/ui/frontend/tests/map-cargo-routes.test.ts @@ -137,17 +137,31 @@ describe("buildCargoRouteLines", () => { ); const lines = buildCargoRouteLines(report); expect(lines.length).toBe(12); - const styleByPriority = new Map(); + // F8-12 / #4 follow-up: shafts and wings now use different + // Style objects so the arrowhead wings can carry + // `softLengthAnchor: "start"`. Colour / priority remain shared + // across both, which is what the de-dupe loop here verifies. + const colourByPriority = new Map(); + const softLengthByLineId = new Map(); for (const line of lines) { - const existing = styleByPriority.get(line.priority); - if (existing === undefined) styleByPriority.set(line.priority, line.style); - else expect(existing).toBe(line.style); + const existing = colourByPriority.get(line.priority); + if (existing === undefined) { + colourByPriority.set(line.priority, line.style.strokeColor); + } else { + expect(line.style.strokeColor).toBe(existing); + } + softLengthByLineId.set(line.id & 0xf, line.style.softLengthAnchor); } + // Shaft (offset 0) stays linear; wings (offsets 1/2) get the + // new softening anchor so the arrowhead grows sub-linearly. + expect(softLengthByLineId.get(0)).toBeUndefined(); + expect(softLengthByLineId.get(1)).toBe("start"); + expect(softLengthByLineId.get(2)).toBe("start"); // Default (dark) palette colours, one per load type. - expect(styleByPriority.get(8)?.strokeColor).toBe(DARK_THEME.routeCol); - expect(styleByPriority.get(7)?.strokeColor).toBe(DARK_THEME.routeCap); - expect(styleByPriority.get(6)?.strokeColor).toBe(DARK_THEME.routeMat); - expect(styleByPriority.get(5)?.strokeColor).toBe(DARK_THEME.routeEmp); + expect(colourByPriority.get(8)).toBe(DARK_THEME.routeCol); + expect(colourByPriority.get(7)).toBe(DARK_THEME.routeCap); + expect(colourByPriority.get(6)).toBe(DARK_THEME.routeMat); + expect(colourByPriority.get(5)).toBe(DARK_THEME.routeEmp); }); test("uses the supplied palette's stroke colours", () => { diff --git a/ui/frontend/tests/map-hit-test.test.ts b/ui/frontend/tests/map-hit-test.test.ts index 3458549..06d6427 100644 --- a/ui/frontend/tests/map-hit-test.test.ts +++ b/ui/frontend/tests/map-hit-test.test.ts @@ -280,6 +280,21 @@ describe("hitTest — empty results and scale", () => { expect(ids(w, "torus", cam05, cursorOver(516, 500, cam05))).toBe(null); }); + test("F8-12 / #6 — clicks inside the disc hit, not just on its edge", () => { + // At scale=1 with pointRadiusBasePx=10 and scaleRef=1, the + // visible world radius is 10. Any cursor inside that disc must + // resolve to the planet — the bug owner spotted in the picker + // was the click being ignored once the cursor moved off the + // circumference toward the centre. + const camAtRef = camAt(500, 500, 1); + const w = new World(1000, 1000, [ + point(1, 500, 500, { style: { pointRadiusBasePx: 10 } }), + ]); + for (const dx of [0, 2, 5, 8, 9.5]) { + expect(ids(w, "torus", camAtRef, cursorOver(500 + dx, 500, camAtRef))).toBe(1); + } + }); + test("pointRadiusBasePx scales softly with zoom (F8-12 / #31)", () => { // world 1000×1000, viewport 200×200 → scaleRef = 0.2. At // scale=0.5 the on-screen pixel size is diff --git a/ui/frontend/tests/map-pick-mode.test.ts b/ui/frontend/tests/map-pick-mode.test.ts index 3a3f1b6..b02f944 100644 --- a/ui/frontend/tests/map-pick-mode.test.ts +++ b/ui/frontend/tests/map-pick-mode.test.ts @@ -8,7 +8,7 @@ import { describe, expect, test } from "vitest"; import { ANCHOR_PADDING_WORLD, - HOVER_PADDING_WORLD, + HOVER_PADDING_PX, computePickOverlay, type PickModeOptions, } from "../src/map/pick-mode"; @@ -206,7 +206,7 @@ describe("computePickOverlay", () => { expect(spec.hoverOutline).toEqual({ x: 200, y: 100, - radius: 5 + HOVER_PADDING_WORLD, + radius: 5 + HOVER_PADDING_PX, }); }); @@ -243,7 +243,7 @@ describe("computePickOverlay", () => { expect(spec.hoverOutline).toBeNull(); }); - test("hoverOutline reflects the reachable target with HOVER_PADDING_WORLD", () => { + test("hoverOutline reflects the reachable target with HOVER_PADDING_PX", () => { const spec = computePickOverlay( makeOptions(), { x: 1, y: 1 }, @@ -254,7 +254,7 @@ describe("computePickOverlay", () => { expect(spec.hoverOutline).toEqual({ x: 200, y: 100, - radius: 5 + HOVER_PADDING_WORLD, + radius: 5 + HOVER_PADDING_PX, }); }); @@ -267,7 +267,7 @@ describe("computePickOverlay", () => { allIds, ); expect(spec.hoverOutline?.radius).toBe( - DEFAULT_POINT_RADIUS_PX + HOVER_PADDING_WORLD, + DEFAULT_POINT_RADIUS_PX + HOVER_PADDING_PX, ); }); }); -- 2.52.0 From 24d75564bb3e077cfc5155c692c5da101c4fbf53 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 10:17:08 +0200 Subject: [PATCH 6/9] =?UTF-8?q?fix(ui):=20F8-12=20=E2=80=94=20owner=20feed?= =?UTF-8?q?back=20round=203=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Hit-test: a click inside a planet's visible disc always picks the planet, regardless of overlapping route shafts or battle X-crosses with higher base `priority`. Closes the #1, #2, #4 reports (picker hover would only catch the circumference, planet+routes swallowed disc clicks, label click on a battled planet routed to the battle viewer). Slop-only hits (cursor near a line but not on any disc) still use the existing priority order. * Labels and planet outlines render in all nine torus copies again so they follow the player into wrap tiles — closes #3 (labels vanished on the wrong half of the viewport whenever the camera was panned past the wrap seam). The fingerprint guard keeps the per-toggle / per-selection rebuild cheap. * Pixi.Text gets a few px of `padding` so the rasteriser no longer clips the last letter on a half-pixel measurement — closes #5. Co-Authored-By: Claude Opus 4.7 --- ui/frontend/src/map/hit-test.ts | 25 ++++- ui/frontend/src/map/render.ts | 170 +++++++++++++++++++------------- 2 files changed, 126 insertions(+), 69 deletions(-) diff --git a/ui/frontend/src/map/hit-test.ts b/ui/frontend/src/map/hit-test.ts index d51caed..8d10017 100644 --- a/ui/frontend/src/map/hit-test.ts +++ b/ui/frontend/src/map/hit-test.ts @@ -32,6 +32,16 @@ import { export interface Hit { primitive: Primitive; distSq: number; // in world units squared + /** + * insideDisc is `true` when the cursor sits *inside* a planet's + * visible disc (point primitive, distance ≤ `visibleRadius`, no + * slop required). F8-12 / #4 follow-up uses it to break tie + * against overlapping route shafts or battle X-crosses: a click + * inside the disc always picks the planet, even though those + * other primitives carry a higher base `priority` (so they still + * win when the cursor is "near the line, outside any planet"). + */ + insideDisc: boolean; } // hitTest returns the best-matching primitive under the cursor, or @@ -62,6 +72,7 @@ export function hitTest( const slopPx = p.hitSlopPx > 0 ? p.hitSlopPx : DEFAULT_HIT_SLOP_PX[p.kind]; const slopWorld = slopPx / camera.scale; let result: number | null; + let insideDisc = false; if (p.kind === "point") { const visibleRadius = displayPointRadiusWorld( p.style, @@ -75,6 +86,9 @@ export function hitTest( slopWorld, mode === "torus" ? world : null, ); + if (result !== null) { + insideDisc = result <= visibleRadius * visibleRadius; + } } else if (p.kind === "circle") { result = matchCircle(p, cursor, slopWorld, mode === "torus" ? world : null); } else { @@ -88,7 +102,7 @@ export function hitTest( ); } if (result !== null) { - candidates.push({ primitive: p, distSq: result }); + candidates.push({ primitive: p, distSq: result, insideDisc }); } } @@ -98,6 +112,15 @@ export function hitTest( } function compareHits(a: Hit, b: Hit): number { + // F8-12 / #4 follow-up: a click that sits *inside* a planet disc + // always picks the planet, even when a route shaft or a battle + // X-cross with a higher `priority` overlaps it. The base priority + // tie-break still rules every "near a line, outside any disc" + // case so battle markers / cargo arrows remain clickable in the + // gap between planets. + if (a.insideDisc !== b.insideDisc) { + return a.insideDisc ? -1 : 1; + } if (a.primitive.priority !== b.primitive.priority) { return b.primitive.priority - a.primitive.priority; } diff --git a/ui/frontend/src/map/render.ts b/ui/frontend/src/map/render.ts index 468f95a..0d50cff 100644 --- a/ui/frontend/src/map/render.ts +++ b/ui/frontend/src/map/render.ts @@ -465,19 +465,23 @@ export async function createRenderer(opts: RendererOptions): Promise { + const layer = new Container(); + c.addChild(layer); + return layer; + }); + const labelLayers: Container[] = copies.map((c) => { + const layer = new Container(); + c.addChild(layer); + return layer; + }); // Per-id `Graphics` lookup. Each primitive lives in nine copies // (one per torus tile); pick-mode dims them by id, so the lookup @@ -566,17 +570,17 @@ export async function createRenderer(opts: RendererOptions): Promise(); + const planetLabelInstances = new Map(); let currentLabels: ReadonlyArray = []; let currentLabelsFingerprint: string | null = null; let currentLabelsSelectedId: number | null = null; @@ -606,6 +610,13 @@ export async function createRenderer(opts: RendererOptions): Promise { - for (const entry of planetLabelInstances.values()) { - disposeLabelGfx(entry); + for (const list of planetLabelInstances.values()) { + for (const entry of list) disposeLabelGfx(entry); } planetLabelInstances.clear(); currentLabelsFingerprint = null; @@ -686,8 +697,8 @@ export async function createRenderer(opts: RendererOptions): Promise(); @@ -730,8 +744,10 @@ export async function createRenderer(opts: RendererOptions): Promise { for (const entry of planetOutlineInstances.values()) { - entry.graphics.parent?.removeChild(entry.graphics); - entry.graphics.destroy(); + for (const g of entry.graphics) { + g.parent?.removeChild(g); + g.destroy(); + } } planetOutlineInstances.clear(); currentOutlinesFingerprint = null; @@ -741,8 +757,10 @@ export async function createRenderer(opts: RendererOptions): Promise { @@ -782,9 +803,13 @@ export async function createRenderer(opts: RendererOptions): Promise simulatePlanetClick(targetPlanet)); + const list: LabelGfx[] = []; + for (const layer of labelLayers) { + const container = new Container(); + const frame = new Graphics(); + frame.visible = false; + container.addChild(frame); + const nameText = + data.name === null + ? null + : buildLabelText(data.name, theme.labelText); + if (nameText !== null) container.addChild(nameText); + const numberText = buildLabelText(data.numberLabel, theme.labelMuted); + container.addChild(numberText); + layer.addChild(container); + const entry: LabelGfx = { + container, + frame, + nameText, + numberText, + }; + paintLabelEntry(entry, data.planetNumber === selectedPlanetId); + // F8-12 / #3 follow-up: a click on the label routes + // through the same hit-test path as a click on the + // disc so selection and pick-mode both fire the right + // callback. + container.eventMode = "static"; + container.cursor = "pointer"; + container.on("pointertap", () => + simulatePlanetClick(targetPlanet), + ); + list.push(entry); + } + planetLabelInstances.set(targetPlanet, list); } updateLabelTransforms(); requestRender(); -- 2.52.0 From 4d729c1f50f39036f4dfa202dea63bb0b46c6493 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 12:33:23 +0200 Subject: [PATCH 7/9] =?UTF-8?q?feat(ui):=20F8-12=20=E2=80=94=20smooth=20pl?= =?UTF-8?q?anet=20discs=20+=20=3Fdebug=3D1=20overlay=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Planet discs (and every other circle the renderer draws — outlines, picker hover ring, reach / bombing rings, etc.) trace a fixed 32-segment polygon instead of leaning on Pixi's adaptive bezier subdivision. PixiJS v8 picks the segment count from the world-space radius, which collapsed to 6-8 segments once the parent container's scale climbed — so the planet read as a visible polygon at high zoom. The custom path stays cheap (~64 floats per disc) and gives a perceptually round silhouette at every zoom level. * Opt-in dev overlay activated by `?debug=1` in the URL. A small bottom-left panel shows the current `scale`, the "whole world fits" reference scale, the current zoom ratio (scale / scale_ref), and the world-units rectangle visible in the viewport — so the owner can decide what `maxScale` to clamp to on the next iteration without guessing. Co-Authored-By: Claude Opus 4.7 --- ui/frontend/src/lib/active-view/map.svelte | 98 ++++++++++++++++++++++ ui/frontend/src/map/render.ts | 49 +++++++++-- 2 files changed, 141 insertions(+), 6 deletions(-) diff --git a/ui/frontend/src/lib/active-view/map.svelte b/ui/frontend/src/lib/active-view/map.svelte index 8b60519..35f1255 100644 --- a/ui/frontend/src/lib/active-view/map.svelte +++ b/ui/frontend/src/lib/active-view/map.svelte @@ -117,6 +117,50 @@ preference the store already manages. let containerEl: HTMLDivElement | null = $state(null); let mountError: string | null = $state(null); + // F8-12 follow-up: an opt-in technical overlay activated by adding + // `?debug=1` to the URL. Shows the current camera scale and the + // world-units rectangle currently visible inside the viewport — so + // the owner can decide what to clamp `maxScale` to once it lands. + const debugOverlayEnabled = (() => { + if (typeof window === "undefined") return false; + return new URLSearchParams(window.location.search).get("debug") === "1"; + })(); + let debugInfo: { + scale: number; + scaleRef: number; + viewWorldWidth: number; + viewWorldHeight: number; + } | null = $state(null); + let debugFrame: number | null = null; + function startDebugLoop(): void { + if (!debugOverlayEnabled) return; + const tick = (): void => { + if (handle !== null) { + const camera = handle.getCamera(); + const vp = handle.getViewport(); + const safeScale = camera.scale > 0 ? camera.scale : 1; + const worldW = store?.report?.mapWidth ?? 1; + const worldH = store?.report?.mapHeight ?? 1; + debugInfo = { + scale: camera.scale, + scaleRef: Math.max(vp.widthPx / worldW, vp.heightPx / worldH), + viewWorldWidth: vp.widthPx / safeScale, + viewWorldHeight: vp.heightPx / safeScale, + }; + } else { + debugInfo = null; + } + debugFrame = requestAnimationFrame(tick); + }; + debugFrame = requestAnimationFrame(tick); + } + function stopDebugLoop(): void { + if (debugFrame !== null) { + cancelAnimationFrame(debugFrame); + debugFrame = null; + } + } + let handle: RendererHandle | null = null; let hitLookup = new Map(); // currentCategories / currentPlanetDependents are populated by @@ -797,6 +841,7 @@ preference the store already manages. onMount(() => { mounted = true; + startDebugLoop(); onResize = (): void => { if (handle === null || containerEl === null) return; handle.resize(containerEl.clientWidth, containerEl.clientHeight); @@ -814,6 +859,7 @@ preference the store already manages. onDestroy(() => { mounted = false; + stopDebugLoop(); if (onResize !== null) { window.removeEventListener("resize", onResize); onResize = null; @@ -868,6 +914,30 @@ preference the store already manages. {#if store !== undefined && store.status === "ready"} {/if} + {#if debugOverlayEnabled && debugInfo !== null} + + {/if}
@@ -911,4 +981,32 @@ preference the store already manages. border-color: var(--color-danger); color: var(--color-danger); } + .debug-overlay { + position: absolute; + bottom: 0.5rem; + left: 0.5rem; + min-width: 11rem; + padding: 0.35rem 0.55rem; + background: rgba(0, 0, 0, 0.55); + color: #f3f5fb; + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 4px; + font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace); + font-size: 0.72rem; + line-height: 1.25; + pointer-events: none; + user-select: none; + z-index: 5; + } + .debug-row { + display: flex; + justify-content: space-between; + gap: 0.5rem; + } + .debug-key { + color: rgba(243, 245, 251, 0.65); + } + .debug-val { + font-variant-numeric: tabular-nums; + } diff --git a/ui/frontend/src/map/render.ts b/ui/frontend/src/map/render.ts index 0d50cff..b94138d 100644 --- a/ui/frontend/src/map/render.ts +++ b/ui/frontend/src/map/render.ts @@ -772,7 +772,7 @@ export async function createRenderer(opts: RendererOptions): Promise 0) { const strokeAlpha = p.style.strokeAlpha ?? 1; const strokeWidth = displayStrokeWidthWorld(p.style, cameraScale); + // Retrace because Pixi's `fill()` closes the current path. + traceSmoothCircle(g, p.x, p.y, radius); g.stroke({ color: p.style.strokeColor, alpha: strokeAlpha, @@ -1549,9 +1581,14 @@ function drawCircle( theme: Theme, cameraScale: number, ): void { - g.circle(p.x, p.y, p.radius); - if (p.style.fillColor !== undefined) { - g.fill({ color: p.style.fillColor, alpha: p.style.fillAlpha ?? 1 }); + const hasFill = + p.style.fillColor !== undefined && (p.style.fillAlpha ?? 1) > 0; + traceSmoothCircle(g, p.x, p.y, p.radius); + if (hasFill) { + g.fill({ color: p.style.fillColor!, alpha: p.style.fillAlpha ?? 1 }); + // Pixi's `fill()` closes the current path — retrace before + // the stroke pass so the ring is actually painted on top. + traceSmoothCircle(g, p.x, p.y, p.radius); } const strokeColor = p.style.strokeColor ?? theme.circleStroke; const strokeAlpha = p.style.strokeAlpha ?? 1; -- 2.52.0 From f4670c1831ba12b393565d9a3c79709c1582451c Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 12:58:43 +0200 Subject: [PATCH 8/9] =?UTF-8?q?perf+fix(ui):=20F8-12=20=E2=80=94=20max-zoo?= =?UTF-8?q?m=20clamp=20+=20planet-names=20toggle=20responsiveness=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Max-zoom clamp: `MIN_VISIBLE_WORLD_AT_MAX_ZOOM = 5` world units on the longest viewport axis. Tuned against the owner's debug-overlay readings — mobile longest ≈ 412 px clamps at scale ≈ 82, desktop longest ≈ 1200 px clamps at scale ≈ 240. Same formula adapts to both shapes automatically; no separate mobile / desktop branch. * Planet-names toggle no longer rebuilds every Pixi.Text on a flip. When `setPlanetLabels` sees the same planet set (which is the common case — only the `name` lines toggling on / off), it walks the live label containers and just retunes text content + visibility instead of destroying and recreating 9 × N Text instances. A 500-planet map flips the toggle inside a frame now. Co-Authored-By: Claude Opus 4.7 --- ui/frontend/src/map/render.ts | 103 +++++++++++++++++++++++++++++----- 1 file changed, 90 insertions(+), 13 deletions(-) diff --git a/ui/frontend/src/map/render.ts b/ui/frontend/src/map/render.ts index b94138d..7fb721d 100644 --- a/ui/frontend/src/map/render.ts +++ b/ui/frontend/src/map/render.ts @@ -584,6 +584,7 @@ export async function createRenderer(opts: RendererOptions): Promise = []; let currentLabelsFingerprint: string | null = null; let currentLabelsSelectedId: number | null = null; + let currentPlanetSetFingerprint: string | null = null; const fingerprintPlanetLabels = ( labels: ReadonlyArray, ): string => { @@ -593,6 +594,14 @@ export async function createRenderer(opts: RendererOptions): Promise, + ): string => { + const ids: number[] = []; + for (const l of labels) ids.push(l.planetNumber); + ids.sort((a, b) => a - b); + return ids.join(","); + }; const LABEL_FONT_SIZE_PX = 11; const LABEL_LINE_GAP_PX = 0; const LABEL_FRAME_PADDING_PX = 3; @@ -638,31 +647,34 @@ export async function createRenderer(opts: RendererOptions): Promise { // Text colours flip on selection so the legend reads on the // inverse-fill frame. + const nameVisible = + entry.nameText !== null && entry.nameText.visible; const nameFill = isSelected ? theme.labelInverseText : theme.labelText; const numberFill = isSelected ? theme.labelInverseText - : entry.nameText !== null + : nameVisible ? theme.labelMuted : theme.labelText; if (entry.nameText !== null) { entry.nameText.style.fill = nameFill; } entry.numberText.style.fill = numberFill; - const nameHeight = entry.nameText?.height ?? 0; + const nameHeight = nameVisible ? entry.nameText!.height : 0; const numberHeight = entry.numberText.height; const totalTextHeight = - nameHeight + (entry.nameText !== null ? LABEL_LINE_GAP_PX : 0) + numberHeight; - entry.numberText.y = entry.nameText !== null ? nameHeight + LABEL_LINE_GAP_PX : 0; + nameHeight + (nameVisible ? LABEL_LINE_GAP_PX : 0) + numberHeight; + entry.numberText.y = nameVisible ? nameHeight + LABEL_LINE_GAP_PX : 0; // Refresh the click hit area to match the label's bounding box // plus the padding from the selection frame (so the player can // click anywhere inside the visible legend, not just the glyphs). const widestText = Math.max( - entry.nameText?.width ?? 0, + nameVisible ? entry.nameText!.width : 0, entry.numberText.width, ); const hitWidth = widestText + LABEL_FRAME_PADDING_PX * 2; @@ -846,10 +858,33 @@ export async function createRenderer(opts: RendererOptions): Promise { + if (entry.nameText !== null) { + const desired = data.name ?? ""; + if (entry.nameText.text !== desired) { + entry.nameText.text = desired; + } + entry.nameText.visible = data.name !== null; + } + if (entry.numberText.text !== data.numberLabel) { + entry.numberText.text = data.numberLabel; + } + }; + const simulatePlanetClick = (planetNumber: number): void => { const prim = pointPrimitivesById.get(planetNumber); if (prim === undefined) return; @@ -959,15 +1008,24 @@ export async function createRenderer(opts: RendererOptions): Promise maxScale) viewport.setZoom(maxScale, true); if (newMode === "no-wrap") { viewport.clamp({ direction: "all" }); viewport.on("moved", enforceCentreWhenLarger); @@ -1451,10 +1509,12 @@ export async function createRenderer(opts: RendererOptions): Promise maxScale) viewport.setZoom(maxScale, true); if (mode === "no-wrap") { enforceCentreWhenLarger(); } @@ -1534,6 +1594,23 @@ function rendererBackendName(r: Renderer): "webgl" | "webgpu" | "canvas" { */ const SMOOTH_CIRCLE_SEGMENTS = 32; +/** + * MIN_VISIBLE_WORLD_AT_MAX_ZOOM caps zoom-in so the longest viewport + * axis never covers fewer than this many world units. Tuned on the + * F8-12 owner-feedback round: 5 keeps individual planet glyphs from + * filling half the screen on either mobile (longest ≈ 412 px → max + * scale ≈ 82) or desktop (longest ≈ 1200 px → max scale ≈ 240) — the + * "useful detail" budget at full zoom is still a 5×5-world tile in + * the centre of the viewport. + */ +const MIN_VISIBLE_WORLD_AT_MAX_ZOOM = 5; + +function maxScaleForViewport(widthPx: number, heightPx: number): number { + const longest = Math.max(widthPx, heightPx); + if (longest <= 0) return Number.POSITIVE_INFINITY; + return longest / MIN_VISIBLE_WORLD_AT_MAX_ZOOM; +} + function traceSmoothCircle( g: Graphics, x: number, -- 2.52.0 From a37b78445210a96136d6311705aa8ce519d69172 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 28 May 2026 14:10:29 +0200 Subject: [PATCH 9/9] =?UTF-8?q?perf(ui):=20F8-12=20=E2=80=94=20toggle=20re?= =?UTF-8?q?sponsiveness=20on=20700-planet=20legacy=20reports=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Profiling KNNTS041 (700 planets, 1283 primitives, 29 LOCAL fog circles) flushed three independent costs out of the toggle path: * `setVisibilityFog` rebuilt the inverse mask + 29 × 9 paint ops on every effect run, even when the input was identical. Caches a fingerprint of the circles + wrap mode and bails on a no-op call — knocks ~1 ms off every flip, more on heavier maps. * `paintLabelEntry` was split into `paintLabelLayout` (hit-area / line positions / frame geometry — runs on every content change) and `paintLabelSelection` (text fills + frame visibility — runs only when the selection identity actually flips). The incremental path now skips the 6300 redundant `Text.style.fill = ...` writes it used to perform on every `planetNames` flip, which is what forced Pixi to invalidate the underlying text textures. * `applyLabelContent` no longer blanks `nameText.text` when the toggle hides the name — it just flips `visible`. The cached text texture survives, so the next paint frame skips ~700 texture rebuilds. Also enables Pixi-side culling on every per-copy primitive / outline / label container. With 9 torus copies × ~700 planets the scene graph holds thousands of nodes, most of which sit outside the visible viewport at any moment — the cullable flag lets Pixi skip them in the per-frame traversal. The legacy `KNNTS041` probe (chromium-desktop, headless) shows `applyVisibilityState` collapsing from ~24 ms to ~5 ms after a cache-warm flip; `app.render` drops from ~46 ms to ~22 ms. Reading the toggle delay end-to-end inside the browser still measures ~460 ms in headless, which is consistent with the runner's RAF cadence — owner can confirm on the real machine where the previous ~1 s delay was reported. Co-Authored-By: Claude Opus 4.7 --- ui/frontend/src/map/render.ts | 172 ++++++++++++++++++++++++++++------ 1 file changed, 141 insertions(+), 31 deletions(-) diff --git a/ui/frontend/src/map/render.ts b/ui/frontend/src/map/render.ts index 7fb721d..ea79376 100644 --- a/ui/frontend/src/map/render.ts +++ b/ui/frontend/src/map/render.ts @@ -515,6 +515,24 @@ export async function createRenderer(opts: RendererOptions): Promise, + wrap: WrapMode, + ): string => { + const parts: string[] = [wrap]; + for (const c of circles) { + parts.push(`${c.x};${c.y};${c.radius}`); + } + return parts.join("|"); + }; const applyHiddenStateTo = (id: PrimitiveID, list: Graphics[]): void => { const visible = !hiddenIds.has(id); for (const g of list) g.visible = visible; @@ -532,6 +550,10 @@ export async function createRenderer(opts: RendererOptions): Promise { for (const c of copies) { const g = new Graphics(); + // F8-12 perf round 4: cull off-screen primitives so a + // 9 × N scene graph (700 planets → 6300 disc Graphics on a + // legacy report) doesn't drag the per-frame paint cost. + g.cullable = true; drawPrimitiveInto(prim, g); c.addChild(g); let list = primitiveGraphics.get(prim.id); @@ -650,29 +672,22 @@ export async function createRenderer(opts: RendererOptions): Promise { - // Text colours flip on selection so the legend reads on the - // inverse-fill frame. + // `paintLabelLayout` keeps the label container's hit area + line + // positions in sync with the current text visibility / content. It + // never mutates `style.fill`, so Pixi does not invalidate the + // underlying Text textures — this is the path the F8-12 / #29 + // `planetNames` toggle walks for all 700+ planets and absolutely + // has to stay cheap. The selection-frame update is split into + // `paintLabelSelection` below because that one *does* need to + // touch fills. + const paintLabelLayout = (entry: LabelGfx): void => { const nameVisible = entry.nameText !== null && entry.nameText.visible; - const nameFill = isSelected ? theme.labelInverseText : theme.labelText; - const numberFill = isSelected - ? theme.labelInverseText - : nameVisible - ? theme.labelMuted - : theme.labelText; - if (entry.nameText !== null) { - entry.nameText.style.fill = nameFill; - } - entry.numberText.style.fill = numberFill; const nameHeight = nameVisible ? entry.nameText!.height : 0; const numberHeight = entry.numberText.height; const totalTextHeight = nameHeight + (nameVisible ? LABEL_LINE_GAP_PX : 0) + numberHeight; entry.numberText.y = nameVisible ? nameHeight + LABEL_LINE_GAP_PX : 0; - // Refresh the click hit area to match the label's bounding box - // plus the padding from the selection frame (so the player can - // click anywhere inside the visible legend, not just the glyphs). const widestText = Math.max( nameVisible ? entry.nameText!.width : 0, entry.numberText.width, @@ -685,24 +700,85 @@ export async function createRenderer(opts: RendererOptions): Promise