Move map metadata into info.json and generate map TypeScript from it (#4227)

**Add approved & assigned issue number here:**

N/A — maintainer refactor.

## Description:

Makes each map's `info.json` the single source of truth for map metadata
— adding a map is now a folder with `image.png` + `info.json`, a
`gen-maps` run, and an en.json display name.

**info.json / manifest.json carry full map metadata.** Every
`map-generator/assets/maps/<map>/info.json` declares `id` (the
`GameMapType` enum key), `name` (the enum value — wire format, unchanged
for all 94 maps), `translation_key`, `categories`, and
`multiplayer_frequency` (the public-playlist weight that used to be the
`FREQUENCY` record in MapPlaylist.ts). The generator validates
everything and mirrors it into `resources/maps/<map>/manifest.json`. 23
stale info.json `name` values were normalized to the canonical enum
value; enum values are byte-identical, so replays and stored game
configs are unaffected.

**The generator emits the TypeScript and discovers maps itself.** New
`map-generator/codegen.go` generates `src/core/game/Maps.gen.ts`
(`GameMapType`, `GameMapName`, `mapCategories`, `mapTranslationKeys`,
`multiplayerFrequency` — now a full `Record<GameMapName, number>`,
killing the old `Partial`) on every run; `Game.ts` re-exports it. The
hardcoded map registry in `main.go` is gone — maps are auto-discovered
from the `assets/maps` / `assets/test_maps` directories. MapConsistency
tests fail with a "run `npm run gen-maps`" message if info.json,
manifest.json, and Maps.gen.ts drift. The tracked
`map-generator/map-generator` binary is rebuilt to match.

**New categories: continents + world/cosmic/tournament/other,
multi-category support.** `continental`/`regional`/`fantasy`/`arcade`
are replaced by `featured`, `world`, `europe`, `asia`, `north_america`,
`africa`, `south_america`, `oceania`, `antarctica`, `cosmic`,
`tournament`, and `other`. Maps can list multiple categories, so
straddlers (Black Sea, Bosphorus, Caucasus, Between Two Seas, Bering
Sea/Strait, Mena, Strait of Gibraltar, Hawaii, Arctic) appear under both
regions. Featured is itself a category (same 7 maps as before).
MapPlaylist keeps its arcade exclusion via an explicit set.

**Map picker UI.** Two tabs: **Featured** (default — featured maps plus
a Favorites section when maps are starred) and **All** (one prominent
collapsible bar per category with a map count, collapsed by default).
The selected map is prepended to the featured grid when it lives
elsewhere. `getMapName()` resolves through the generated
`mapTranslationKeys`, which also fixes tourney maps never resolving a
valid translation key.

## Please complete the following:

- [ ] I have added screenshots for all UI updates (maintainer change —
picker described above)
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory

## Please put your Discord username so you can be contacted if a bug or
regression is found:

evanpelle

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Evan
2026-06-11 19:36:53 -07:00
committed by GitHub
parent 8da2291a49
commit 3de5fb4204
205 changed files with 2404 additions and 825 deletions
+113
View File
@@ -0,0 +1,113 @@
---
name: run-openfront
description: Build, run, and drive OpenFront locally. Use when asked to run the game, start the dev server, take a screenshot of the UI, verify a client change in the real app, or interact with the running game (lobby, modals, map picker).
---
OpenFront is a browser game (Lit + Pixi.js client, Node game server).
Run the dev server with `npm run dev` (serves on **http://localhost:9000**,
not Vite's default 5173), then drive it with headless Chromium via
`.claude/skills/run-openfront/driver.mjs`. All paths are relative to the
repo root.
## Prerequisites (one-time per machine, no sudo)
The host (Ubuntu 26.04, headless) has no browser, and Playwright doesn't
support 26.04 yet. `setup.sh` works around both: it installs Playwright
(`--no-save`), downloads the ubuntu24.04 chromium-headless-shell via
`PLAYWRIGHT_HOST_PLATFORM_OVERRIDE`, extracts the missing system libraries
from `.deb` packages into `~/.cache/openfront-run/` (no root needed), and
builds a local fontconfig (the host has no `/etc/fonts`; Skia FATALs
without one).
```bash
bash .claude/skills/run-openfront/setup.sh
```
Deps were installed with `npm run inst` (`npm ci --ignore-scripts`) — do
not use `npm install`.
## Run the dev server
```bash
(npm run dev > /tmp/dev.log 2>&1 &)
timeout 60 bash -c 'until curl -sf http://localhost:9000 >/dev/null 2>&1; do sleep 1; done'
```
Stop it with `pkill -f "tsx src/server/Server.ts"; pkill -f vite`.
`ECONNREFUSED "Error polling lobby"` lines in `/tmp/dev.log` are normal —
the closed-source API isn't running in dev.
## Drive it (agent path)
Smoke flow — home page, open the single-player modal, dump the map-picker
state, screenshot:
```bash
node .claude/skills/run-openfront/driver.mjs
# screenshots: /tmp/openfront-run/home.png, /tmp/openfront-run/solo-modal.png
```
For ad-hoc flows, write a script **inside the repo** (so `playwright`
resolves) importing the driver's helpers:
```js
import {
launch,
gotoHome,
openSoloModal,
} from "./.claude/skills/run-openfront/driver.mjs";
const { browser, page } = await launch(); // env/libs/fonts handled here
await gotoHome(page);
await openSoloModal(page);
// Lit components use light DOM — query and read properties directly:
const s = await page.evaluate(
() => document.querySelector("map-picker")?.selectedMap,
);
await browser.close();
```
## Run (human path)
`npm run dev`, open http://localhost:9000 in a browser. Useless headless.
## Test
```bash
npm test # full suite (Vitest)
npx vitest tests/MapConsistency.test.ts --run # single file
```
## Gotchas
- **Vite serves on port 9000**, not 5173 (configured in vite.config.ts).
- **Playwright on Ubuntu 26.04**: `npx playwright install chromium` fails
with "does not support chromium on ubuntu26.04-x64". Fix:
`PLAYWRIGHT_HOST_PLATFORM_OVERRIDE=ubuntu24.04-x64` (setup.sh does this).
- **Browser dies at launch / mid-load**: missing host libs
(`libnspr4.so`, `libatk-1.0.so.0`, …) then a Skia FATAL
(`SkFontMgr_FontConfigInterface.cpp: Not implemented`) from the absent
fontconfig. `launch()` in driver.mjs injects `LD_LIBRARY_PATH` and
`FONTCONFIG_FILE` pointing at `~/.cache/openfront-run/`; diagnose new
missing libs with `DEBUG=pw:browser` and
`ldd .../chrome-headless-shell | grep "not found"`.
- **The single-player button is labeled "SOLO!"**, and the DOM has more
than one (responsive layouts) — use `button:visible` with
`hasText: /solo/i`.
- **Lit + Vite HMR**: custom elements can't be re-registered, so an
already-open tab keeps old component code after an edit. Hard-reload
(or re-`goto`) before judging behavior.
- **`PAGEERROR: ... reading 'inSpawnPhase'`** on the home page is
pre-existing background noise, not your breakage.
- Wait ~3s after `load` before interacting — Lit components render
client-side (driver's `gotoHome` does this).
## Troubleshooting
- `Cannot find package 'playwright'` — your script is outside the repo;
module resolution starts at the script's path, not cwd. Move it inside
the repo (anywhere under the root works).
- `Target page, context or browser has been closed` immediately —
re-run `bash .claude/skills/run-openfront/setup.sh` (the
`~/.cache/openfront-run` lib cache is missing or was cleared).
- `EADDRINUSE` on relaunch — a previous dev server is still up:
`pkill -f "tsx src/server/Server.ts"; pkill -f vite`.
+75
View File
@@ -0,0 +1,75 @@
// Headless-Chromium driver for OpenFront. Run from the repo root:
// node .claude/skills/run-openfront/driver.mjs # smoke flow
// or import { launch, gotoHome, openSoloModal } from it in an ad-hoc
// script placed inside the repo (so `playwright` resolves from
// node_modules). Requires setup.sh to have been run once on this machine.
import fs from "fs";
import os from "os";
import path from "path";
import { chromium } from "playwright";
const CACHE =
process.env.OPENFRONT_RUN_CACHE ??
path.join(os.homedir(), ".cache", "openfront-run");
export const BASE_URL = process.env.OPENFRONT_URL ?? "http://localhost:9000";
// Launch chromium with the locally-extracted system libraries and fontconfig
// (see setup.sh). Without them the headless shell dies on libnspr4.so, and
// later Skia FATALs on the missing fontconfig.
export async function launch() {
const env = { ...process.env };
const libs = path.join(CACHE, "extracted", "usr", "lib", "x86_64-linux-gnu");
if (fs.existsSync(libs)) {
env.LD_LIBRARY_PATH = env.LD_LIBRARY_PATH
? `${libs}:${env.LD_LIBRARY_PATH}`
: libs;
env.FONTCONFIG_FILE = path.join(CACHE, "fonts.conf");
}
const browser = await chromium.launch({
args: ["--no-sandbox", "--disable-gpu"],
env,
});
const context = await browser.newContext({
viewport: { width: 1400, height: 1000 },
});
const page = await context.newPage();
page.on("pageerror", (e) =>
console.log("PAGEERROR:", e.message.split("\n")[0]),
);
page.on("crash", () => console.log("PAGE CRASHED"));
return { browser, page };
}
export async function gotoHome(page) {
await page.goto(BASE_URL, { waitUntil: "load", timeout: 60000 });
// Lit components render client-side after load.
await page.waitForTimeout(3000);
}
// The single-player button is labeled "SOLO!". There are multiple SOLO
// buttons in the DOM (responsive layouts) — only one is visible.
export async function openSoloModal(page) {
await page.locator("button:visible", { hasText: /solo/i }).first().click();
await page.waitForTimeout(1500);
}
const isMain =
process.argv[1] && import.meta.url === `file://${process.argv[1]}`;
if (isMain) {
const outDir = "/tmp/openfront-run";
fs.mkdirSync(outDir, { recursive: true });
const { browser, page } = await launch();
await gotoHome(page);
await page.screenshot({ path: `${outDir}/home.png` });
await openSoloModal(page);
await page.screenshot({ path: `${outDir}/solo-modal.png` });
// Reach into a Lit component for ground-truth state (light DOM, no shadow
// root — properties are directly on the element).
const picker = await page.evaluate(() => {
const p = document.querySelector("map-picker");
return { selectedMap: p?.selectedMap, activeTab: p?.activeTab };
});
console.log("map-picker state:", JSON.stringify(picker));
console.log(`screenshots: ${outDir}/home.png ${outDir}/solo-modal.png`);
await browser.close();
}
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env bash
# One-time per-machine setup for headless-Chromium driving of OpenFront.
# No sudo needed: Playwright's chromium is downloaded with a platform
# override, and its missing system libraries are extracted locally from
# .deb packages.
set -euo pipefail
CACHE="${OPENFRONT_RUN_CACHE:-$HOME/.cache/openfront-run}"
mkdir -p "$CACHE/debs" "$CACHE/fonts" "$CACHE/fc-cache"
# 1. Playwright (not a project dependency; --no-save keeps package.json clean)
npm ls playwright > /dev/null 2>&1 || npm install --no-save playwright
# 2. Chromium headless shell. Playwright refuses to download on Ubuntu 26.04
# ("does not support chromium on ubuntu26.04-x64"); the ubuntu24.04 build
# is ABI-compatible, so override the host platform.
PLAYWRIGHT_HOST_PLATFORM_OVERRIDE=ubuntu24.04-x64 npx playwright install chromium
# 3. Shared libraries the headless shell needs that a minimal host lacks
# (found via: ldd chrome-headless-shell | grep "not found").
(
cd "$CACHE/debs"
apt-get download \
libnspr4 libnss3 libasound2t64 libatk1.0-0t64 libatk-bridge2.0-0t64 \
libatspi2.0-0t64 libgbm1 libx11-6 libxcb1 libxcomposite1 libxdamage1 \
libxext6 libxfixes3 libxrandr2 libxau6 libxdmcp6 libxi6 libxrender1 \
libxres1 fonts-dejavu-core
for f in *.deb; do dpkg -x "$f" "$CACHE/extracted"; done
)
# 4. Fonts. This host has no /etc/fonts at all, and Skia FATALs without a
# fontconfig (SkFontMgr_FontConfigInterface.cpp "Not implemented").
cp "$CACHE/extracted/usr/share/fonts/truetype/dejavu/"*.ttf "$CACHE/fonts/"
cat > "$CACHE/fonts.conf" << CONF
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>$CACHE/fonts</dir>
<cachedir>$CACHE/fc-cache</cachedir>
</fontconfig>
CONF
echo "setup complete: $CACHE"
+2 -1
View File
@@ -10,7 +10,8 @@ resources/.DS_Store
.DS_Store .DS_Store
.clinic/ .clinic/
NOTES.md NOTES.md
.claude/ .claude/*
!.claude/skills/
.idea/ .idea/
# this is autogenerated by script # this is autogenerated by script
src/assets/ src/assets/
+7 -1
View File
@@ -13,7 +13,13 @@ const gitignorePath = path.resolve(__dirname, ".gitignore");
/** @type {import('eslint').Linter.Config[]} */ /** @type {import('eslint').Linter.Config[]} */
export default [ export default [
includeIgnoreFile(gitignorePath), includeIgnoreFile(gitignorePath),
{ ignores: ["src/server/gatekeeper/**", "tests/pathfinding/playground/**"] }, {
ignores: [
"src/server/gatekeeper/**",
"tests/pathfinding/playground/**",
".claude/**",
],
},
{ files: ["**/*.{js,mjs,cjs,ts}"] }, { files: ["**/*.{js,mjs,cjs,ts}"] },
{ languageOptions: { globals: { ...globals.browser, ...globals.node } } }, { languageOptions: { globals: { ...globals.browser, ...globals.node } } },
pluginJs.configs.recommended, pluginJs.configs.recommended,
+31 -12
View File
@@ -17,11 +17,12 @@ the [Official Openfront Wiki](https://openfront.wiki/Map_Making)
## Creating a new map ## Creating a new map
Maps are discovered automatically from the `assets/maps/` folders — `info.json` holds everything the game needs to know about a map.
1. Create a new folder in `assets/maps/<map_name>` 1. Create a new folder in `assets/maps/<map_name>`
2. Create `assets/maps/<map_name>/image.png` 2. Create `assets/maps/<map_name>/image.png`
3. Create `assets/maps/<map_name>/info.json` with name and countries 3. Create `assets/maps/<map_name>/info.json` (see below)
4. Add the map name in `main.go` The `<name>` in `{Name: "<name>"},` should match the `<map-name>` folder at `assets/maps/<map_name>` 4. Run the generator for your map: `go run . --maps=<map_name>`
5. Run the generator for your map: `go run . --maps=<map_name>`
By default, `go run .` will process all defined maps. By default, `go run .` will process all defined maps.
@@ -33,12 +34,14 @@ the [Official Openfront Wiki](https://openfront.wiki/Map_Making)
`go run . --maps=northamerica,world` `go run . --maps=northamerica,world`
6. Find the output folder at `../resources/maps/<map_name>` 5. Find the output folder at `../resources/maps/<map_name>`
7. Go back to the root directory: `cd ..` 6. Go back to the root directory: `cd ..`
8. Run Prettier: `npm run format` 7. Run Prettier: `npm run format`
This rewrites ALL files in place. Git figures out which files are actually changed, don't worry. This rewrites ALL files in place. Git figures out which files are actually changed, don't worry.
Alternatively, you can either run Prettier per file: `npx prettier --write resources/maps/<map_name>/<file_name>` or in VSCode install the Prettier extension and per file do Show and run Commands > Format Document. Alternatively, you can either run Prettier per file: `npx prettier --write resources/maps/<map_name>/<file_name>` or in VSCode install the Prettier extension and per file do Show and run Commands > Format Document.
Alternatively, `npm run gen-maps` (from the root directory) runs the generator for all maps and formats the output in one step.
## Output Files ## Output Files
- `../resources/maps/<map_name>/manifest.json` - JSON metadata containing map dimensions and land tile counts for all scales. - `../resources/maps/<map_name>/manifest.json` - JSON metadata containing map dimensions and land tile counts for all scales.
@@ -46,6 +49,7 @@ the [Official Openfront Wiki](https://openfront.wiki/Map_Making)
- `../resources/maps/<map_name>/map4x.bin` - 1/4 scale (half dimensions) binary map data used for mini-maps. - `../resources/maps/<map_name>/map4x.bin` - 1/4 scale (half dimensions) binary map data used for mini-maps.
- `../resources/maps/<map_name>/map16x.bin` - 1/16 scale (quarter dimensions) binary map data used for mini-maps. - `../resources/maps/<map_name>/map16x.bin` - 1/16 scale (quarter dimensions) binary map data used for mini-maps.
- `../resources/maps/<map_name>/thumbnail.webp` - WebP image thumbnail of the map. - `../resources/maps/<map_name>/thumbnail.webp` - WebP image thumbnail of the map.
- `../src/core/game/Maps.gen.ts` - Generated TypeScript (`GameMapType`, `mapCategories`, `mapTranslationKeys`, `multiplayerFrequency`) built from every map's info.json. Regenerated on every run, even with `--maps`.
## Command Line Flags ## Command Line Flags
@@ -96,7 +100,11 @@ Example:
```json ```json
{ {
"name": "MySampleMap", "id": "MySampleMap",
"name": "My Sample Map",
"translation_key": "map.mysamplemap",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [396, 364], "coordinates": [396, 364],
@@ -109,7 +117,17 @@ Example:
`coordinates` is x/y position of the nation spawn on the map. Origin is at top left, with x extending right and y extending down `coordinates` is x/y position of the nation spawn on the map. Origin is at top left, with x extending right and y extending down
`name` is a `CamelCaseName` of your map. It is used to enable the map in-game. `id` is the `CamelCaseName` of your map. It must match the `assets/maps/<map_name>` folder name (lowercased) and becomes the `GameMapType` enum key.
`name` is the map's canonical name — the `GameMapType` enum value. It must never change once the map ships (it is part of the wire format and stored in game records).
`translation_key` is the key of the map's display name in `../resources/lang/en.json` (`map.<map_name>`).
`categories` groups the map in the map picker. Each entry must be one of: `featured`, `world`, `europe`, `asia`, `north_america`, `africa`, `south_america`, `oceania`, `antarctica`, `cosmic`, `tournament`, `other`. Maps that straddle regions (e.g. Black Sea, Bering Strait) can list more than one. Add `featured` to show the map in the featured section of the map picker.
`multiplayer_frequency` is how many times the map appears in the public multiplayer playlist. Use 0 (or omit) to keep the map out of the regular rotation.
`featured_rank` (optional, featured maps only) is the map's position in the featured grid (1 = first). Featured maps without a rank sort after ranked ones, alphabetically.
`flag` is the code for a country `flag` is the code for a country
@@ -130,11 +148,12 @@ The country will need to be added to `../src/client/data/countries.json`
## To Enable In-Game ## To Enable In-Game
Using the `name` from your json: `GameMapType`, `mapCategories`, `mapTranslationKeys`, and
`multiplayerFrequency` are generated from the info.json files into
`../src/core/game/Maps.gen.ts` when the map-generator runs — do not edit that
file by hand. The only step outside info.json is:
- Add to GameMapType and mapCategories in `../src/core/game/Game.ts` - Add the map's display name to the `map` translation object in `../resources/lang/en.json` (using your `translation_key`)
- Add to the map playlist in `../src/server/MapPlaylist.ts`
- Add to the `map` translation object in `../resources/lang/en.json`
## Notes ## Notes
@@ -1,5 +1,9 @@
{ {
"id": "Achiran",
"name": "Achiran", "name": "Achiran",
"translation_key": "map.achiran",
"categories": ["other"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [785, 985], "coordinates": [785, 985],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "aegean", "id": "Aegean",
"name": "Aegean",
"translation_key": "map.aegean",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [786, 1860], "coordinates": [786, 1860],
@@ -1,5 +1,10 @@
{ {
"id": "Africa",
"name": "Africa", "name": "Africa",
"translation_key": "map.africa",
"categories": ["featured", "africa"],
"multiplayer_frequency": 7,
"featured_rank": 6,
"nations": [ "nations": [
{ {
"coordinates": [1144, 1894], "coordinates": [1144, 1894],
+4
View File
@@ -1,5 +1,9 @@
{ {
"id": "Alps",
"name": "Alps", "name": "Alps",
"translation_key": "map.alps",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [740, 620], "coordinates": [740, 620],
@@ -1,5 +1,9 @@
{ {
"id": "AmazonRiver",
"name": "Amazon River", "name": "Amazon River",
"translation_key": "map.amazonriver",
"categories": ["south_america"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [524, 60], "coordinates": [524, 60],
@@ -1,5 +1,9 @@
{ {
"name": "antarctica", "id": "Antarctica",
"name": "Antarctica",
"translation_key": "map.antarctica",
"categories": ["antarctica"],
"multiplayer_frequency": 1,
"nations": [ "nations": [
{ {
"coordinates": [1159, 1261], "coordinates": [1159, 1261],
@@ -1,5 +1,9 @@
{ {
"name": "Archipelago Sea", "id": "ArchipelagoSea",
"name": "ArchipelagoSea",
"translation_key": "map.archipelagosea",
"categories": ["europe"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [145, 767], "coordinates": [145, 767],
@@ -1,5 +1,9 @@
{ {
"id": "Arctic",
"name": "Arctic", "name": "Arctic",
"translation_key": "map.arctic",
"categories": ["europe", "north_america"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [622, 1171], "coordinates": [622, 1171],
+5
View File
@@ -1,5 +1,10 @@
{ {
"id": "Asia",
"name": "Asia", "name": "Asia",
"translation_key": "map.asia",
"categories": ["featured", "asia"],
"multiplayer_frequency": 6,
"featured_rank": 5,
"nations": [ "nations": [
{ {
"coordinates": [165, 422], "coordinates": [165, 422],
@@ -1,5 +1,9 @@
{ {
"id": "Australia",
"name": "Australia", "name": "Australia",
"translation_key": "map.australia",
"categories": ["oceania"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [460, 720], "coordinates": [460, 720],
@@ -1,5 +1,9 @@
{ {
"id": "Baikal",
"name": "Baikal", "name": "Baikal",
"translation_key": "map.baikal",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [695, 665], "coordinates": [695, 665],
@@ -1,10 +1,24 @@
{ {
"name": "Baikal (Nuke Wars)", "id": "BaikalNukeWars",
"name": "Baikal Nuke Wars",
"translation_key": "map.baikalnukewars",
"categories": ["other"],
"multiplayer_frequency": 0,
"nations": [], "nations": [],
"teamGameSpawnAreas": { "teamGameSpawnAreas": {
"2": [ "2": [
{ "x": 0, "y": 0, "width": 1330, "height": 1564 }, {
{ "x": 1430, "y": 0, "width": 1070, "height": 1564 } "x": 0,
"y": 0,
"width": 1330,
"height": 1564
},
{
"x": 1430,
"y": 0,
"width": 1070,
"height": 1564
}
] ]
} }
} }
@@ -1,5 +1,9 @@
{ {
"id": "BajaCalifornia",
"name": "Baja California", "name": "Baja California",
"translation_key": "map.bajacalifornia",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [513, 44], "coordinates": [513, 44],
@@ -1,5 +1,9 @@
{ {
"id": "Balkans",
"name": "Balkans", "name": "Balkans",
"translation_key": "map.balkans",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [122, 281], "coordinates": [122, 281],
@@ -1,5 +1,9 @@
{ {
"id": "BeringSea",
"name": "Bering Sea", "name": "Bering Sea",
"translation_key": "map.beringsea",
"categories": ["asia", "north_america"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [1043, 121], "coordinates": [1043, 121],
@@ -1,5 +1,9 @@
{ {
"name": "BeringStrait", "id": "BeringStrait",
"name": "Bering Strait",
"translation_key": "map.beringstrait",
"categories": ["asia", "north_america"],
"multiplayer_frequency": 2,
"nations": [ "nations": [
{ {
"coordinates": [1297, 287], "coordinates": [1297, 287],
@@ -1,5 +1,9 @@
{ {
"name": "BetweenTwoSeas", "id": "BetweenTwoSeas",
"name": "Between Two Seas",
"translation_key": "map.betweentwoseas",
"categories": ["europe", "asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [40, 674], "coordinates": [40, 674],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "BlackSea", "id": "BlackSea",
"name": "Black Sea",
"translation_key": "map.blacksea",
"categories": ["europe", "asia"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [122, 647], "coordinates": [122, 647],
@@ -1,5 +1,9 @@
{ {
"id": "BosphorusStraits",
"name": "Bosphorus Straits", "name": "Bosphorus Straits",
"translation_key": "map.bosphorusstraits",
"categories": ["europe", "asia"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [564, 245], "coordinates": [564, 245],
@@ -1,5 +1,9 @@
{ {
"id": "Britannia",
"name": "Britannia", "name": "Britannia",
"translation_key": "map.britannia",
"categories": ["europe"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [1539, 1915], "coordinates": [1539, 1915],
@@ -1,5 +1,9 @@
{ {
"id": "BritanniaClassic",
"name": "Britannia Classic", "name": "Britannia Classic",
"translation_key": "map.britanniaclassic",
"categories": ["europe"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [960, 1258], "coordinates": [960, 1258],
@@ -1,5 +1,9 @@
{ {
"id": "Caribbean",
"name": "Caribbean", "name": "Caribbean",
"translation_key": "map.caribbean",
"categories": ["north_america"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [538, 200], "coordinates": [538, 200],
@@ -1,5 +1,9 @@
{ {
"id": "Caucasus",
"name": "Caucasus", "name": "Caucasus",
"translation_key": "map.caucasus",
"categories": ["europe", "asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [624, 581], "coordinates": [624, 581],
@@ -1,5 +1,9 @@
{ {
"id": "ChoppingBlock",
"name": "Chopping Block", "name": "Chopping Block",
"translation_key": "map.choppingblock",
"categories": ["other"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [230, 230], "coordinates": [230, 230],
@@ -307,14 +311,44 @@
], ],
"teamGameSpawnAreas": { "teamGameSpawnAreas": {
"2": [ "2": [
{ "x": 0, "y": 0, "width": 800, "height": 1610 }, {
{ "x": 809, "y": 0, "width": 800, "height": 1610 } "x": 0,
"y": 0,
"width": 800,
"height": 1610
},
{
"x": 809,
"y": 0,
"width": 800,
"height": 1610
}
], ],
"4": [ "4": [
{ "x": 0, "y": 0, "width": 800, "height": 800 }, {
{ "x": 809, "y": 0, "width": 800, "height": 800 }, "x": 0,
{ "x": 0, "y": 809, "width": 800, "height": 800 }, "y": 0,
{ "x": 809, "y": 809, "width": 800, "height": 800 } "width": 800,
"height": 800
},
{
"x": 809,
"y": 0,
"width": 800,
"height": 800
},
{
"x": 0,
"y": 809,
"width": 800,
"height": 800
},
{
"x": 809,
"y": 809,
"width": 800,
"height": 800
}
] ]
} }
} }
@@ -1,5 +1,9 @@
{ {
"id": "Conakry",
"name": "Conakry", "name": "Conakry",
"translation_key": "map.conakry",
"categories": ["africa"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [510, 420], "coordinates": [510, 420],
@@ -1,5 +1,9 @@
{ {
"id": "DanishStraits",
"name": "Danish Straits", "name": "Danish Straits",
"translation_key": "map.danishstraits",
"categories": ["europe"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [37, 227], "coordinates": [37, 227],
@@ -94,7 +98,6 @@
{ {
"coordinates": [219, 1205], "coordinates": [219, 1205],
"name": "Hanover", "name": "Hanover",
"flag": "prussia" "flag": "prussia"
}, },
{ {
@@ -1,5 +1,9 @@
{ {
"id": "DeglaciatedAntarctica",
"name": "Deglaciated Antarctica", "name": "Deglaciated Antarctica",
"translation_key": "map.deglaciatedantarctica",
"categories": ["antarctica"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [1545, 785], "coordinates": [1545, 785],
@@ -1,5 +1,9 @@
{ {
"id": "Didier",
"name": "Didier", "name": "Didier",
"translation_key": "map.didier",
"categories": ["other"],
"multiplayer_frequency": 1,
"nations": [ "nations": [
{ {
"coordinates": [478, 163], "coordinates": [478, 163],
@@ -1,5 +1,9 @@
{ {
"name": "Didier (France)", "id": "DidierFrance",
"name": "Didier France",
"translation_key": "map.didierfrance",
"categories": ["other"],
"multiplayer_frequency": 1,
"nations": [ "nations": [
{ {
"coordinates": [120, 680], "coordinates": [120, 680],
@@ -1,5 +1,9 @@
{ {
"id": "Dyslexdria",
"name": "Dyslexdria", "name": "Dyslexdria",
"translation_key": "map.dyslexdria",
"categories": ["world"],
"multiplayer_frequency": 8,
"nations": [ "nations": [
{ {
"coordinates": [2380, 400], "coordinates": [2380, 400],
@@ -1,5 +1,9 @@
{ {
"id": "EastAsia",
"name": "East Asia", "name": "East Asia",
"translation_key": "map.eastasia",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [1150, 660], "coordinates": [1150, 660],
@@ -1,5 +1,10 @@
{ {
"id": "Europe",
"name": "Europe", "name": "Europe",
"translation_key": "map.europe",
"categories": ["featured", "europe"],
"multiplayer_frequency": 7,
"featured_rank": 2,
"nations": [ "nations": [
{ {
"coordinates": [634, 781], "coordinates": [634, 781],
@@ -1,5 +1,9 @@
{ {
"name": "Europe", "id": "EuropeClassic",
"name": "Europe Classic",
"translation_key": "map.europeclassic",
"categories": ["europe"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [171, 171], "coordinates": [171, 171],
@@ -1,5 +1,9 @@
{ {
"id": "FalklandIslands",
"name": "Falkland Islands", "name": "Falkland Islands",
"translation_key": "map.falklandislands",
"categories": ["south_america"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [484, 987], "coordinates": [484, 987],
@@ -1,5 +1,9 @@
{ {
"id": "FaroeIslands",
"name": "Faroe Islands", "name": "Faroe Islands",
"translation_key": "map.faroeislands",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [920, 1780], "coordinates": [920, 1780],
@@ -1,5 +1,9 @@
{ {
"id": "FourIslands",
"name": "Four Islands", "name": "Four Islands",
"translation_key": "map.fourislands",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [403, 1296], "coordinates": [403, 1296],
@@ -24,14 +28,44 @@
], ],
"teamGameSpawnAreas": { "teamGameSpawnAreas": {
"2": [ "2": [
{ "x": 0, "y": 0, "width": 750, "height": 1500 }, {
{ "x": 750, "y": 0, "width": 750, "height": 1500 } "x": 0,
"y": 0,
"width": 750,
"height": 1500
},
{
"x": 750,
"y": 0,
"width": 750,
"height": 1500
}
], ],
"4": [ "4": [
{ "x": 0, "y": 0, "width": 750, "height": 750 }, {
{ "x": 750, "y": 0, "width": 750, "height": 750 }, "x": 0,
{ "x": 0, "y": 750, "width": 750, "height": 750 }, "y": 0,
{ "x": 750, "y": 750, "width": 750, "height": 750 } "width": 750,
"height": 750
},
{
"x": 750,
"y": 0,
"width": 750,
"height": 750
},
{
"x": 0,
"y": 750,
"width": 750,
"height": 750
},
{
"x": 750,
"y": 750,
"width": 750,
"height": 750
}
] ]
} }
} }
@@ -1,5 +1,9 @@
{ {
"name": "GatewayToTheAtlantic", "id": "GatewayToTheAtlantic",
"name": "Gateway to the Atlantic",
"translation_key": "map.gatewaytotheatlantic",
"categories": ["europe"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [2161, 420], "coordinates": [2161, 420],
@@ -1,5 +1,9 @@
{ {
"name": "Giant_World_Map", "id": "GiantWorldMap",
"name": "Giant World Map",
"translation_key": "map.giantworldmap",
"categories": ["world"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [2309, 535], "coordinates": [2309, 535],
@@ -1,5 +1,9 @@
{ {
"id": "GreatLakes",
"name": "Great Lakes", "name": "Great Lakes",
"translation_key": "map.greatlakes",
"categories": ["north_america"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [38, 326], "coordinates": [38, 326],
@@ -1,5 +1,9 @@
{ {
"id": "GulfOfStLawrence",
"name": "Gulf of St. Lawrence", "name": "Gulf of St. Lawrence",
"translation_key": "map.gulfofstlawrence",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [88, 364], "coordinates": [88, 364],
@@ -1,5 +1,9 @@
{ {
"id": "Halkidiki",
"name": "Halkidiki", "name": "Halkidiki",
"translation_key": "map.halkidiki",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [1798, 984], "coordinates": [1798, 984],
@@ -1,5 +1,9 @@
{ {
"id": "Hawaii",
"name": "Hawaii", "name": "Hawaii",
"translation_key": "map.hawaii",
"categories": ["north_america", "oceania"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [283, 281], "coordinates": [283, 281],
@@ -1,5 +1,9 @@
{ {
"id": "HongKong",
"name": "Hong Kong", "name": "Hong Kong",
"translation_key": "map.hongkong",
"categories": ["asia"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [1592, 1147], "coordinates": [1592, 1147],
@@ -1,5 +1,9 @@
{ {
"id": "Iceland",
"name": "Iceland", "name": "Iceland",
"translation_key": "map.iceland",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [455, 1115], "coordinates": [455, 1115],
@@ -1,5 +1,9 @@
{ {
"id": "IndianSubcontinent",
"name": "Indian Subcontinent", "name": "Indian Subcontinent",
"translation_key": "map.indiansubcontinent",
"categories": ["asia"],
"multiplayer_frequency": 8,
"nations": [ "nations": [
{ {
"coordinates": [1601, 840], "coordinates": [1601, 840],
@@ -69,163 +73,136 @@
{ {
"coordinates": [1051, 1586], "coordinates": [1051, 1586],
"name": "Tamil Nadu", "name": "Tamil Nadu",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [783, 1322], "coordinates": [783, 1322],
"name": "Karnataka", "name": "Karnataka",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1057, 1256], "coordinates": [1057, 1256],
"name": "Andhra Pradesh", "name": "Andhra Pradesh",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1007, 1065], "coordinates": [1007, 1065],
"name": "Telangana", "name": "Telangana",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [787, 998], "coordinates": [787, 998],
"name": "Maharashtra", "name": "Maharashtra",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [706, 1141], "coordinates": [706, 1141],
"name": "Goa", "name": "Goa",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1391, 906], "coordinates": [1391, 906],
"name": "Odisha", "name": "Odisha",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [565, 892], "coordinates": [565, 892],
"name": "Gujarat", "name": "Gujarat",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [961, 717], "coordinates": [961, 717],
"name": "Madhya Pradesh", "name": "Madhya Pradesh",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1120, 895], "coordinates": [1120, 895],
"name": "Chhattisgarh", "name": "Chhattisgarh",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1508, 825], "coordinates": [1508, 825],
"name": "West Bengal", "name": "West Bengal",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1317, 717], "coordinates": [1317, 717],
"name": "Jharkhand", "name": "Jharkhand",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1379, 608], "coordinates": [1379, 608],
"name": "Bihar", "name": "Bihar",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1519, 506], "coordinates": [1519, 506],
"name": "Sikkim", "name": "Sikkim",
"flag": "Sikkim" "flag": "Sikkim"
}, },
{ {
"coordinates": [1738, 668], "coordinates": [1738, 668],
"name": "Assam", "name": "Assam",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1194, 535], "coordinates": [1194, 535],
"name": "Uttar Pradesh", "name": "Uttar Pradesh",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [735, 611], "coordinates": [735, 611],
"name": "Rajasthan", "name": "Rajasthan",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1624, 507], "coordinates": [1624, 507],
"name": "Meghalaya", "name": "Meghalaya",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1658, 759], "coordinates": [1658, 759],
"name": "Tripura", "name": "Tripura",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1790, 834], "coordinates": [1790, 834],
"name": "Mizoram", "name": "Mizoram",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1878, 762], "coordinates": [1878, 762],
"name": "Manipur", "name": "Manipur",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1952, 637], "coordinates": [1952, 637],
"name": "Nagaland", "name": "Nagaland",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1957, 480], "coordinates": [1957, 480],
"name": "Arunachal Pradesh", "name": "Arunachal Pradesh",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [884, 439], "coordinates": [884, 439],
"name": "Haryana", "name": "Haryana",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [840, 305], "coordinates": [840, 305],
"name": "Punjab", "name": "Punjab",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [1082, 384], "coordinates": [1082, 384],
"name": "Uttarakhand", "name": "Uttarakhand",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [948, 236], "coordinates": [948, 236],
"name": "Himachal Pradesh", "name": "Himachal Pradesh",
"flag": "in" "flag": "in"
}, },
{ {
@@ -236,67 +213,56 @@
{ {
"coordinates": [51, 580], "coordinates": [51, 580],
"name": "Iran", "name": "Iran",
"flag": "ir" "flag": "ir"
}, },
{ {
"coordinates": [81, 24], "coordinates": [81, 24],
"name": "Tajikistan", "name": "Tajikistan",
"flag": "tj" "flag": "tj"
}, },
{ {
"coordinates": [978, 550], "coordinates": [978, 550],
"name": "New Delhi", "name": "New Delhi",
"flag": "in" "flag": "in"
}, },
{ {
"coordinates": [468, 692], "coordinates": [468, 692],
"name": "Sindh", "name": "Sindh",
"flag": "pk" "flag": "pk"
}, },
{ {
"coordinates": [309, 529], "coordinates": [309, 529],
"name": "Balochistan", "name": "Balochistan",
"flag": "pk" "flag": "pk"
}, },
{ {
"coordinates": [637, 464], "coordinates": [637, 464],
"name": "Punjab", "name": "Punjab",
"flag": "pk" "flag": "pk"
}, },
{ {
"coordinates": [514, 366], "coordinates": [514, 366],
"name": "Fata", "name": "Fata",
"flag": "pk" "flag": "pk"
}, },
{ {
"coordinates": [616, 224], "coordinates": [616, 224],
"name": "Khyber Pakhtunkhwa", "name": "Khyber Pakhtunkhwa",
"flag": "pk" "flag": "pk"
}, },
{ {
"coordinates": [740, 161], "coordinates": [740, 161],
"name": "Azad Kashmir", "name": "Azad Kashmir",
"flag": "Azad Kashmir" "flag": "Azad Kashmir"
}, },
{ {
"coordinates": [628, 12], "coordinates": [628, 12],
"name": "Gilgit-Baltistan", "name": "Gilgit-Baltistan",
"flag": "pk" "flag": "pk"
}, },
{ {
"coordinates": [1065, 1454], "coordinates": [1065, 1454],
"name": "Puducherry", "name": "Puducherry",
"flag": "in" "flag": "in"
} }
] ]
@@ -1,5 +1,9 @@
{ {
"id": "Italia",
"name": "Italia", "name": "Italia",
"translation_key": "map.italia",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [1038, 993], "coordinates": [1038, 993],
+6 -1
View File
@@ -1,5 +1,10 @@
{ {
"name": "japan", "id": "Japan",
"name": "Japan",
"translation_key": "map.japan",
"categories": ["featured", "asia"],
"multiplayer_frequency": 6,
"featured_rank": 7,
"nations": [ "nations": [
{ {
"coordinates": [1895, 288], "coordinates": [1895, 288],
@@ -1,5 +1,9 @@
{ {
"id": "JuanDeFucaStrait",
"name": "Juan De Fuca Strait", "name": "Juan De Fuca Strait",
"translation_key": "map.juandefucastrait",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [1812, 445], "coordinates": [1812, 445],
@@ -1,5 +1,9 @@
{ {
"id": "Korea",
"name": "Korea", "name": "Korea",
"translation_key": "map.korea",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [849, 1523], "coordinates": [849, 1523],
+166 -27
View File
@@ -1,5 +1,9 @@
{ {
"id": "Labyrinth",
"name": "Labyrinth", "name": "Labyrinth",
"translation_key": "map.labyrinth",
"categories": ["other"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [50, 50], "coordinates": [50, 50],
@@ -361,43 +365,178 @@
], ],
"teamGameSpawnAreas": { "teamGameSpawnAreas": {
"2": [ "2": [
{ "x": 0, "y": 0, "width": 680, "height": 1355 }, {
{ "x": 680, "y": 0, "width": 680, "height": 1355 } "x": 0,
"y": 0,
"width": 680,
"height": 1355
},
{
"x": 680,
"y": 0,
"width": 680,
"height": 1355
}
], ],
"3": [ "3": [
{ "x": 1020, "y": 680, "width": 340, "height": 680 }, {
{ "x": 0, "y": 680, "width": 340, "height": 680 }, "x": 1020,
{ "x": 340, "y": 0, "width": 680, "height": 680 } "y": 680,
"width": 340,
"height": 680
},
{
"x": 0,
"y": 680,
"width": 340,
"height": 680
},
{
"x": 340,
"y": 0,
"width": 680,
"height": 680
}
], ],
"4": [ "4": [
{ "x": 0, "y": 0, "width": 676, "height": 676 }, {
{ "x": 680, "y": 0, "width": 676, "height": 676 }, "x": 0,
{ "x": 0, "y": 680, "width": 676, "height": 676 }, "y": 0,
{ "x": 680, "y": 680, "width": 676, "height": 676 } "width": 676,
"height": 676
},
{
"x": 680,
"y": 0,
"width": 676,
"height": 676
},
{
"x": 0,
"y": 680,
"width": 676,
"height": 676
},
{
"x": 680,
"y": 680,
"width": 676,
"height": 676
}
], ],
"5": [ "5": [
{ "x": 1088, "y": 453, "width": 272, "height": 453 }, {
{ "x": 0, "y": 816, "width": 453, "height": 272 }, "x": 1088,
{ "x": 580, "y": 0, "width": 453, "height": 272 }, "y": 453,
{ "x": 580, "y": 1088, "width": 453, "height": 272 }, "width": 272,
{ "x": 0, "y": 272, "width": 453, "height": 272 } "height": 453
},
{
"x": 0,
"y": 816,
"width": 453,
"height": 272
},
{
"x": 580,
"y": 0,
"width": 453,
"height": 272
},
{
"x": 580,
"y": 1088,
"width": 453,
"height": 272
},
{
"x": 0,
"y": 272,
"width": 453,
"height": 272
}
], ],
"6": [ "6": [
{ "x": 226, "y": 0, "width": 453, "height": 680 }, {
{ "x": 679, "y": 680, "width": 453, "height": 680 }, "x": 226,
{ "x": 226, "y": 680, "width": 453, "height": 680 }, "y": 0,
{ "x": 679, "y": 0, "width": 453, "height": 680 }, "width": 453,
{ "x": 0, "y": 0, "width": 226, "height": 1360 }, "height": 680
{ "x": 1132, "y": 0, "width": 226, "height": 1360 } },
{
"x": 679,
"y": 680,
"width": 453,
"height": 680
},
{
"x": 226,
"y": 680,
"width": 453,
"height": 680
},
{
"x": 679,
"y": 0,
"width": 453,
"height": 680
},
{
"x": 0,
"y": 0,
"width": 226,
"height": 1360
},
{
"x": 1132,
"y": 0,
"width": 226,
"height": 1360
}
], ],
"7": [ "7": [
{ "x": 510, "y": 1088, "width": 340, "height": 272 }, {
{ "x": 272, "y": 0, "width": 272, "height": 340 }, "x": 510,
{ "x": 816, "y": 0, "width": 272, "height": 340 }, "y": 1088,
{ "x": 0, "y": 340, "width": 272, "height": 340 }, "width": 340,
{ "x": 50, "y": 920, "width": 272, "height": 340 }, "height": 272
{ "x": 1088, "y": 340, "width": 272, "height": 340 }, },
{ "x": 1038, "y": 920, "width": 272, "height": 340 } {
"x": 272,
"y": 0,
"width": 272,
"height": 340
},
{
"x": 816,
"y": 0,
"width": 272,
"height": 340
},
{
"x": 0,
"y": 340,
"width": 272,
"height": 340
},
{
"x": 50,
"y": 920,
"width": 272,
"height": 340
},
{
"x": 1088,
"y": 340,
"width": 272,
"height": 340
},
{
"x": 1038,
"y": 920,
"width": 272,
"height": 340
}
] ]
} }
} }
@@ -1,5 +1,9 @@
{ {
"id": "Lemnos",
"name": "Lemnos", "name": "Lemnos",
"translation_key": "map.lemnos",
"categories": ["europe"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [550, 317], "coordinates": [550, 317],
@@ -1,5 +1,9 @@
{ {
"id": "Lisbon",
"name": "Lisbon", "name": "Lisbon",
"translation_key": "map.lisbon",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [750, 630], "coordinates": [750, 630],
@@ -1,5 +1,9 @@
{ {
"id": "LosAngeles",
"name": "Los Angeles", "name": "Los Angeles",
"translation_key": "map.losangeles",
"categories": ["north_america"],
"multiplayer_frequency": 8,
"nations": [ "nations": [
{ {
"coordinates": [546, 16], "coordinates": [546, 16],
+16 -8
View File
@@ -1,5 +1,9 @@
{ {
"id": "Luna",
"name": "Luna", "name": "Luna",
"translation_key": "map.luna",
"categories": ["cosmic"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [265, 662], "coordinates": [265, 662],
@@ -46,7 +50,6 @@
"flag": "us", "flag": "us",
"name": "Artemis II" "name": "Artemis II"
}, },
{ {
"coordinates": [515, 170], "coordinates": [515, 170],
"flag": "Russian SSR", "flag": "Russian SSR",
@@ -57,7 +60,6 @@
"flag": "Russian SSR", "flag": "Russian SSR",
"name": "Luna 21" "name": "Luna 21"
}, },
{ {
"coordinates": [1030, 790], "coordinates": [1030, 790],
"flag": "Russian SSR", "flag": "Russian SSR",
@@ -83,7 +85,6 @@
"flag": "Russian SSR", "flag": "Russian SSR",
"name": "Luna 1" "name": "Luna 1"
}, },
{ {
"coordinates": [672, 2323], "coordinates": [672, 2323],
"flag": "cn", "flag": "cn",
@@ -104,13 +105,11 @@
"flag": "cn", "flag": "cn",
"name": "Chang'e 6" "name": "Chang'e 6"
}, },
{ {
"coordinates": [830, 745], "coordinates": [830, 745],
"flag": "jp", "flag": "jp",
"name": "S.L.I.M." "name": "S.L.I.M."
}, },
{ {
"coordinates": [400, 3360], "coordinates": [400, 3360],
"flag": "in", "flag": "in",
@@ -121,7 +120,6 @@
"flag": "in", "flag": "in",
"name": "Chandrayaan 1" "name": "Chandrayaan 1"
}, },
{ {
"coordinates": [755, 3035], "coordinates": [755, 3035],
"flag": "", "flag": "",
@@ -135,8 +133,18 @@
], ],
"teamGameSpawnAreas": { "teamGameSpawnAreas": {
"2": [ "2": [
{ "x": 0, "y": 0, "width": 1308, "height": 1754 }, {
{ "x": 0, "y": 1754, "width": 1308, "height": 1754 } "x": 0,
"y": 0,
"width": 1308,
"height": 1754
},
{
"x": 0,
"y": 1754,
"width": 1308,
"height": 1754
}
] ]
} }
} }
@@ -1,5 +1,9 @@
{ {
"id": "Manicouagan",
"name": "Manicouagan", "name": "Manicouagan",
"translation_key": "map.manicouagan",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [784, 1034], "coordinates": [784, 1034],
@@ -1,5 +1,9 @@
{ {
"id": "MareNostrum",
"name": "Mare Nostrum", "name": "Mare Nostrum",
"translation_key": "map.marenostrum",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [141, 574], "coordinates": [141, 574],
+4
View File
@@ -1,5 +1,9 @@
{ {
"id": "Mars",
"name": "Mars", "name": "Mars",
"translation_key": "map.mars",
"categories": ["cosmic"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [650, 415], "coordinates": [650, 415],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "MENA", "id": "Mena",
"name": "Mena",
"translation_key": "map.mena",
"categories": ["asia", "africa"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [257, 82], "coordinates": [257, 82],
@@ -1,5 +1,9 @@
{ {
"id": "MiddleEast",
"name": "Middle East", "name": "Middle East",
"translation_key": "map.middleeast",
"categories": ["asia"],
"multiplayer_frequency": 8,
"nations": [ "nations": [
{ {
"coordinates": [300, 65], "coordinates": [300, 65],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "Milky Way", "id": "MilkyWay",
"name": "MilkyWay",
"translation_key": "map.milkyway",
"categories": ["cosmic"],
"multiplayer_frequency": 8,
"nations": [ "nations": [
{ {
"coordinates": [775, 757], "coordinates": [775, 757],
@@ -1,5 +1,9 @@
{ {
"id": "MississippiRiver",
"name": "Mississippi River", "name": "Mississippi River",
"translation_key": "map.mississippiriver",
"categories": ["north_america"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [390, 269], "coordinates": [390, 269],
@@ -1,5 +1,9 @@
{ {
"id": "Montreal",
"name": "Montreal", "name": "Montreal",
"translation_key": "map.montreal",
"categories": ["north_america"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [800, 430], "coordinates": [800, 430],
@@ -1,5 +1,9 @@
{ {
"id": "NewYorkCity",
"name": "New York City", "name": "New York City",
"translation_key": "map.newyorkcity",
"categories": ["north_america"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [127, 1323], "coordinates": [127, 1323],
@@ -1,5 +1,9 @@
{ {
"id": "NileDelta",
"name": "Nile Delta", "name": "Nile Delta",
"translation_key": "map.niledelta",
"categories": ["africa"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [305, 414], "coordinates": [305, 414],
@@ -1,5 +1,10 @@
{ {
"name": "NorthAmerica", "id": "NorthAmerica",
"name": "North America",
"translation_key": "map.northamerica",
"categories": ["featured", "north_america"],
"multiplayer_frequency": 5,
"featured_rank": 3,
"nations": [ "nations": [
{ {
"coordinates": [1625, 1040], "coordinates": [1625, 1040],
@@ -1,5 +1,9 @@
{ {
"id": "NorthwestPassage",
"name": "Northwest Passage", "name": "Northwest Passage",
"translation_key": "map.northwestpassage",
"categories": ["north_america"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [1203, 592], "coordinates": [1203, 592],
@@ -1,5 +1,9 @@
{ {
"id": "Oceania",
"name": "Oceania", "name": "Oceania",
"translation_key": "map.oceania",
"categories": ["oceania"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [515, 690], "coordinates": [515, 690],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "onion", "id": "Onion",
"name": "Onion",
"translation_key": "map.onion",
"categories": ["other"],
"multiplayer_frequency": 2,
"nations": [ "nations": [
{ {
"coordinates": [51, 188], "coordinates": [51, 188],
@@ -1,5 +1,9 @@
{ {
"id": "Pangaea",
"name": "Pangaea", "name": "Pangaea",
"translation_key": "map.pangaea",
"categories": ["other"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [389, 800], "coordinates": [389, 800],
@@ -1,5 +1,9 @@
{ {
"id": "Passage",
"name": "Passage", "name": "Passage",
"translation_key": "map.passage",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [256, 80], "coordinates": [256, 80],
@@ -1,5 +1,9 @@
{ {
"id": "Pluto",
"name": "Pluto", "name": "Pluto",
"translation_key": "map.pluto",
"categories": ["cosmic"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [396, 364], "coordinates": [396, 364],
@@ -1,5 +1,9 @@
{ {
"name": "SanFrancisco", "id": "SanFrancisco",
"name": "San Francisco",
"translation_key": "map.sanfrancisco",
"categories": ["north_america"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"coordinates": [996, 990], "coordinates": [996, 990],
@@ -1,5 +1,9 @@
{ {
"id": "Sierpinski",
"name": "Sierpinski", "name": "Sierpinski",
"translation_key": "map.sierpinski",
"categories": ["other"],
"multiplayer_frequency": 10,
"nations": [ "nations": [
{ {
"coordinates": [216, 701], "coordinates": [216, 701],
@@ -1,5 +1,10 @@
{ {
"id": "SouthAmerica",
"name": "South America", "name": "South America",
"translation_key": "map.southamerica",
"categories": ["featured", "south_america"],
"multiplayer_frequency": 5,
"featured_rank": 4,
"nations": [ "nations": [
{ {
"coordinates": [438, 58], "coordinates": [438, 58],
@@ -1,5 +1,9 @@
{ {
"name": "Southeast Asia", "id": "SoutheastAsia",
"name": "SoutheastAsia",
"translation_key": "map.southeastasia",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [1319, 76], "coordinates": [1319, 76],
@@ -1,5 +1,9 @@
{ {
"id": "StraitOfGibraltar",
"name": "Strait of Gibraltar", "name": "Strait of Gibraltar",
"translation_key": "map.straitofgibraltar",
"categories": ["europe", "africa"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [1941, 1031], "coordinates": [1941, 1031],
@@ -1,5 +1,9 @@
{ {
"id": "StraitOfHormuz",
"name": "Strait of Hormuz", "name": "Strait of Hormuz",
"translation_key": "map.straitofhormuz",
"categories": ["asia"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [837, 356], "coordinates": [837, 356],
@@ -1,5 +1,9 @@
{ {
"id": "StraitOfMalacca",
"name": "Strait Of Malacca", "name": "Strait Of Malacca",
"translation_key": "map.straitofmalacca",
"categories": ["asia"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [1268, 730], "coordinates": [1268, 730],
@@ -1,5 +1,9 @@
{ {
"id": "Surrounded",
"name": "Surrounded", "name": "Surrounded",
"translation_key": "map.surrounded",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [1043, 910], "coordinates": [1043, 910],
@@ -1,5 +1,9 @@
{ {
"id": "Svalmel",
"name": "Svalmel", "name": "Svalmel",
"translation_key": "map.svalmel",
"categories": ["other"],
"multiplayer_frequency": 8,
"nations": [ "nations": [
{ {
"coordinates": [900, 850], "coordinates": [900, 850],
@@ -1,5 +1,9 @@
{ {
"id": "TaiwanStrait",
"name": "Taiwan Strait", "name": "Taiwan Strait",
"translation_key": "map.taiwanstrait",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [694, 26], "coordinates": [694, 26],
+70 -14
View File
@@ -1,18 +1,74 @@
{ {
"name": "TheBox", "id": "TheBox",
"name": "The Box",
"translation_key": "map.thebox",
"categories": ["other"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ "coordinates": [10, 10], "flag": "", "name": "King of the Corner" }, {
{ "coordinates": [1024, 300], "flag": "", "name": "Suspicious Ally" }, "coordinates": [10, 10],
{ "coordinates": [1650, 400], "flag": "", "name": "Evan The Dev" }, "flag": "",
{ "coordinates": [1024, 1024], "flag": "", "name": "Middle Defender" }, "name": "King of the Corner"
{ "coordinates": [350, 1024], "flag": "", "name": "Punch Merchant" }, },
{ "coordinates": [1700, 1024], "flag": "", "name": "Nuke Thrower" }, {
{ "coordinates": [400, 1650], "flag": "", "name": "Fullsender" }, "coordinates": [1024, 300],
{ "coordinates": [1024, 1750], "flag": "", "name": "Factory Builder" }, "flag": "",
{ "coordinates": [1650, 1650], "flag": "", "name": "Front Manager" }, "name": "Suspicious Ally"
{ "coordinates": [700, 700], "flag": "", "name": "Box Fighter" }, },
{ "coordinates": [1350, 700], "flag": "", "name": "Cage Liberator" }, {
{ "coordinates": [700, 1350], "flag": "", "name": "Train Trader" }, "coordinates": [1650, 400],
{ "coordinates": [1350, 1350], "flag": "", "name": "Non-peaceful Bot" } "flag": "",
"name": "Evan The Dev"
},
{
"coordinates": [1024, 1024],
"flag": "",
"name": "Middle Defender"
},
{
"coordinates": [350, 1024],
"flag": "",
"name": "Punch Merchant"
},
{
"coordinates": [1700, 1024],
"flag": "",
"name": "Nuke Thrower"
},
{
"coordinates": [400, 1650],
"flag": "",
"name": "Fullsender"
},
{
"coordinates": [1024, 1750],
"flag": "",
"name": "Factory Builder"
},
{
"coordinates": [1650, 1650],
"flag": "",
"name": "Front Manager"
},
{
"coordinates": [700, 700],
"flag": "",
"name": "Box Fighter"
},
{
"coordinates": [1350, 700],
"flag": "",
"name": "Cage Liberator"
},
{
"coordinates": [700, 1350],
"flag": "",
"name": "Train Trader"
},
{
"coordinates": [1350, 1350],
"flag": "",
"name": "Non-peaceful Bot"
}
] ]
} }
@@ -1,5 +1,9 @@
{ {
"id": "Titan",
"name": "Titan", "name": "Titan",
"translation_key": "map.titan",
"categories": ["cosmic"],
"multiplayer_frequency": 3,
"nations": [ "nations": [
{ {
"name": "Stone-Keeping Purple Aliens", "name": "Stone-Keeping Purple Aliens",
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "Tourney1", "id": "Tourney1",
"name": "Tourney 2 Teams",
"translation_key": "map.tourney1",
"categories": ["tournament"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [177, 510], "coordinates": [177, 510],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "Tourney2", "id": "Tourney2",
"name": "Tourney 3 Teams",
"translation_key": "map.tourney2",
"categories": ["tournament"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [339, 987], "coordinates": [339, 987],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "Tourney3", "id": "Tourney3",
"name": "Tourney 4 Teams",
"translation_key": "map.tourney3",
"categories": ["tournament"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [437, 410], "coordinates": [437, 410],
+5 -1
View File
@@ -1,5 +1,9 @@
{ {
"name": "Tourney4", "id": "Tourney4",
"name": "Tourney 8 Teams",
"translation_key": "map.tourney4",
"categories": ["tournament"],
"multiplayer_frequency": 0,
"nations": [ "nations": [
{ {
"coordinates": [568, 309], "coordinates": [568, 309],
@@ -1,5 +1,9 @@
{ {
"id": "TradersDream",
"name": "Traders Dream", "name": "Traders Dream",
"translation_key": "map.tradersdream",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [ "nations": [
{ {
"coordinates": [1010, 120], "coordinates": [1010, 120],
@@ -1,5 +1,9 @@
{ {
"id": "TwoLakes",
"name": "Two Lakes", "name": "Two Lakes",
"translation_key": "map.twolakes",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [1025, 750], "coordinates": [1025, 750],
@@ -1,5 +1,9 @@
{ {
"id": "Venice",
"name": "Venice", "name": "Venice",
"translation_key": "map.venice",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [760, 593], "coordinates": [760, 593],
@@ -1,5 +1,10 @@
{ {
"id": "World",
"name": "World", "name": "World",
"translation_key": "map.world",
"categories": ["featured", "world"],
"multiplayer_frequency": 20,
"featured_rank": 1,
"nations": [ "nations": [
{ {
"coordinates": [484, 284], "coordinates": [484, 284],
@@ -1,5 +1,9 @@
{ {
"id": "WorldInverted",
"name": "World Inverted", "name": "World Inverted",
"translation_key": "map.worldinverted",
"categories": ["world"],
"multiplayer_frequency": 8,
"nations": [ "nations": [
{ {
"name": "Titan Submersible", "name": "Titan Submersible",
@@ -49,7 +53,6 @@
"name": "Atlantis", "name": "Atlantis",
"flag": "" "flag": ""
}, },
{ {
"coordinates": [2420, 230], "coordinates": [2420, 230],
"name": "RMS Lusitania", "name": "RMS Lusitania",
@@ -250,7 +253,6 @@
"name": "ARA San Juan", "name": "ARA San Juan",
"flag": "ar" "flag": "ar"
}, },
{ {
"coordinates": [1500, 610], "coordinates": [1500, 610],
"name": "Pacific", "name": "Pacific",
@@ -326,7 +328,6 @@
"name": "Weddell", "name": "Weddell",
"flag": "" "flag": ""
}, },
{ {
"coordinates": [120, 1050], "coordinates": [120, 1050],
"name": "Weddell Plain", "name": "Weddell Plain",
@@ -382,7 +383,6 @@
"name": "Nazca Ridge", "name": "Nazca Ridge",
"flag": "" "flag": ""
}, },
{ {
"coordinates": [1450, 333], "coordinates": [1450, 333],
"name": "Mendocino", "name": "Mendocino",
@@ -464,7 +464,6 @@
"flag": "" "flag": ""
} }
], ],
"additionalNations": [ "additionalNations": [
{ {
"name": "TCG Dumlupınar", "name": "TCG Dumlupınar",
@@ -777,7 +776,6 @@
"name": "SS Monroe", "name": "SS Monroe",
"flag": "us" "flag": "us"
}, },
{ {
"name": "Wave Goodbye", "name": "Wave Goodbye",
"flag": "" "flag": ""
@@ -898,7 +896,6 @@
"name": "Red November", "name": "Red November",
"flag": "ussr" "flag": "ussr"
}, },
{ {
"coordinates": [2326, 303], "coordinates": [2326, 303],
"name": "Ocean Ranger", "name": "Ocean Ranger",
@@ -1019,7 +1016,6 @@
"name": "SS Kiche Maru", "name": "SS Kiche Maru",
"flag": "jp" "flag": "jp"
}, },
{ {
"coordinates": [2030, 480], "coordinates": [2030, 480],
"name": "Gulf of Merica", "name": "Gulf of Merica",
@@ -1295,7 +1291,6 @@
"name": "South-Sandwich", "name": "South-Sandwich",
"flag": "" "flag": ""
}, },
{ {
"coordinates": [1255, 920], "coordinates": [1255, 920],
"name": "Challenger Bay", "name": "Challenger Bay",
@@ -1,5 +1,9 @@
{ {
"id": "YellowSea",
"name": "Yellow Sea", "name": "Yellow Sea",
"translation_key": "map.yellowsea",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [ "nations": [
{ {
"coordinates": [1350, 575], "coordinates": [1350, 575],
@@ -1,5 +1,9 @@
{ {
"id": "Yenisei",
"name": "Yenisei", "name": "Yenisei",
"translation_key": "map.yenisei",
"categories": ["asia"],
"multiplayer_frequency": 6,
"nations": [ "nations": [
{ {
"coordinates": [1050, 535], "coordinates": [1050, 535],

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