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
.clinic/
NOTES.md
.claude/
.claude/*
!.claude/skills/
.idea/
# this is autogenerated by script
src/assets/
+7 -1
View File
@@ -13,7 +13,13 @@ const gitignorePath = path.resolve(__dirname, ".gitignore");
/** @type {import('eslint').Linter.Config[]} */
export default [
includeIgnoreFile(gitignorePath),
{ ignores: ["src/server/gatekeeper/**", "tests/pathfinding/playground/**"] },
{
ignores: [
"src/server/gatekeeper/**",
"tests/pathfinding/playground/**",
".claude/**",
],
},
{ files: ["**/*.{js,mjs,cjs,ts}"] },
{ languageOptions: { globals: { ...globals.browser, ...globals.node } } },
pluginJs.configs.recommended,
+31 -12
View File
@@ -17,11 +17,12 @@ the [Official Openfront Wiki](https://openfront.wiki/Map_Making)
## 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>`
2. Create `assets/maps/<map_name>/image.png`
3. Create `assets/maps/<map_name>/info.json` with name and countries
4. Add the map name in `main.go` The `<name>` in `{Name: "<name>"},` should match the `<map-name>` folder at `assets/maps/<map_name>`
5. Run the generator for your map: `go run . --maps=<map_name>`
3. Create `assets/maps/<map_name>/info.json` (see below)
4. Run the generator for your map: `go run . --maps=<map_name>`
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`
6. Find the output folder at `../resources/maps/<map_name>`
7. Go back to the root directory: `cd ..`
8. Run Prettier: `npm run format`
5. Find the output folder at `../resources/maps/<map_name>`
6. Go back to the root directory: `cd ..`
7. Run Prettier: `npm run format`
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, `npm run gen-maps` (from the root directory) runs the generator for all maps and formats the output in one step.
## Output Files
- `../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>/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.
- `../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
@@ -96,7 +100,11 @@ Example:
```json
{
"name": "MySampleMap",
"id": "MySampleMap",
"name": "My Sample Map",
"translation_key": "map.mysamplemap",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [
{
"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
`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
@@ -130,11 +148,12 @@ The country will need to be added to `../src/client/data/countries.json`
## 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 to the map playlist in `../src/server/MapPlaylist.ts`
- Add to the `map` translation object in `../resources/lang/en.json`
- Add the map's display name to the `map` translation object in `../resources/lang/en.json` (using your `translation_key`)
## Notes
@@ -1,5 +1,9 @@
{
"id": "Achiran",
"name": "Achiran",
"translation_key": "map.achiran",
"categories": ["other"],
"multiplayer_frequency": 5,
"nations": [
{
"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": [
{
"coordinates": [786, 1860],
@@ -1,5 +1,10 @@
{
"id": "Africa",
"name": "Africa",
"translation_key": "map.africa",
"categories": ["featured", "africa"],
"multiplayer_frequency": 7,
"featured_rank": 6,
"nations": [
{
"coordinates": [1144, 1894],
+4
View File
@@ -1,5 +1,9 @@
{
"id": "Alps",
"name": "Alps",
"translation_key": "map.alps",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [740, 620],
@@ -1,5 +1,9 @@
{
"id": "AmazonRiver",
"name": "Amazon River",
"translation_key": "map.amazonriver",
"categories": ["south_america"],
"multiplayer_frequency": 3,
"nations": [
{
"coordinates": [524, 60],
@@ -1,5 +1,9 @@
{
"name": "antarctica",
"id": "Antarctica",
"name": "Antarctica",
"translation_key": "map.antarctica",
"categories": ["antarctica"],
"multiplayer_frequency": 1,
"nations": [
{
"coordinates": [1159, 1261],
@@ -1,5 +1,9 @@
{
"name": "Archipelago Sea",
"id": "ArchipelagoSea",
"name": "ArchipelagoSea",
"translation_key": "map.archipelagosea",
"categories": ["europe"],
"multiplayer_frequency": 3,
"nations": [
{
"coordinates": [145, 767],
@@ -1,5 +1,9 @@
{
"id": "Arctic",
"name": "Arctic",
"translation_key": "map.arctic",
"categories": ["europe", "north_america"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [622, 1171],
+5
View File
@@ -1,5 +1,10 @@
{
"id": "Asia",
"name": "Asia",
"translation_key": "map.asia",
"categories": ["featured", "asia"],
"multiplayer_frequency": 6,
"featured_rank": 5,
"nations": [
{
"coordinates": [165, 422],
@@ -1,5 +1,9 @@
{
"id": "Australia",
"name": "Australia",
"translation_key": "map.australia",
"categories": ["oceania"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [460, 720],
@@ -1,5 +1,9 @@
{
"id": "Baikal",
"name": "Baikal",
"translation_key": "map.baikal",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [
{
"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": [],
"teamGameSpawnAreas": {
"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",
"translation_key": "map.bajacalifornia",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [513, 44],
@@ -1,5 +1,9 @@
{
"id": "Balkans",
"name": "Balkans",
"translation_key": "map.balkans",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [122, 281],
@@ -1,5 +1,9 @@
{
"id": "BeringSea",
"name": "Bering Sea",
"translation_key": "map.beringsea",
"categories": ["asia", "north_america"],
"multiplayer_frequency": 5,
"nations": [
{
"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": [
{
"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": [
{
"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": [
{
"coordinates": [122, 647],
@@ -1,5 +1,9 @@
{
"id": "BosphorusStraits",
"name": "Bosphorus Straits",
"translation_key": "map.bosphorusstraits",
"categories": ["europe", "asia"],
"multiplayer_frequency": 3,
"nations": [
{
"coordinates": [564, 245],
@@ -1,5 +1,9 @@
{
"id": "Britannia",
"name": "Britannia",
"translation_key": "map.britannia",
"categories": ["europe"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [1539, 1915],
@@ -1,5 +1,9 @@
{
"id": "BritanniaClassic",
"name": "Britannia Classic",
"translation_key": "map.britanniaclassic",
"categories": ["europe"],
"multiplayer_frequency": 0,
"nations": [
{
"coordinates": [960, 1258],
@@ -1,5 +1,9 @@
{
"id": "Caribbean",
"name": "Caribbean",
"translation_key": "map.caribbean",
"categories": ["north_america"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [538, 200],
@@ -1,5 +1,9 @@
{
"id": "Caucasus",
"name": "Caucasus",
"translation_key": "map.caucasus",
"categories": ["europe", "asia"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [624, 581],
@@ -1,5 +1,9 @@
{
"id": "ChoppingBlock",
"name": "Chopping Block",
"translation_key": "map.choppingblock",
"categories": ["other"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [230, 230],
@@ -307,14 +311,44 @@
],
"teamGameSpawnAreas": {
"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": [
{ "x": 0, "y": 0, "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 }
{
"x": 0,
"y": 0,
"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",
"translation_key": "map.conakry",
"categories": ["africa"],
"multiplayer_frequency": 3,
"nations": [
{
"coordinates": [510, 420],
@@ -1,5 +1,9 @@
{
"id": "DanishStraits",
"name": "Danish Straits",
"translation_key": "map.danishstraits",
"categories": ["europe"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [37, 227],
@@ -94,7 +98,6 @@
{
"coordinates": [219, 1205],
"name": "Hanover",
"flag": "prussia"
},
{
@@ -1,5 +1,9 @@
{
"id": "DeglaciatedAntarctica",
"name": "Deglaciated Antarctica",
"translation_key": "map.deglaciatedantarctica",
"categories": ["antarctica"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [1545, 785],
@@ -1,5 +1,9 @@
{
"id": "Didier",
"name": "Didier",
"translation_key": "map.didier",
"categories": ["other"],
"multiplayer_frequency": 1,
"nations": [
{
"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": [
{
"coordinates": [120, 680],
@@ -1,5 +1,9 @@
{
"id": "Dyslexdria",
"name": "Dyslexdria",
"translation_key": "map.dyslexdria",
"categories": ["world"],
"multiplayer_frequency": 8,
"nations": [
{
"coordinates": [2380, 400],
@@ -1,5 +1,9 @@
{
"id": "EastAsia",
"name": "East Asia",
"translation_key": "map.eastasia",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [1150, 660],
@@ -1,5 +1,10 @@
{
"id": "Europe",
"name": "Europe",
"translation_key": "map.europe",
"categories": ["featured", "europe"],
"multiplayer_frequency": 7,
"featured_rank": 2,
"nations": [
{
"coordinates": [634, 781],
@@ -1,5 +1,9 @@
{
"name": "Europe",
"id": "EuropeClassic",
"name": "Europe Classic",
"translation_key": "map.europeclassic",
"categories": ["europe"],
"multiplayer_frequency": 0,
"nations": [
{
"coordinates": [171, 171],
@@ -1,5 +1,9 @@
{
"id": "FalklandIslands",
"name": "Falkland Islands",
"translation_key": "map.falklandislands",
"categories": ["south_america"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [484, 987],
@@ -1,5 +1,9 @@
{
"id": "FaroeIslands",
"name": "Faroe Islands",
"translation_key": "map.faroeislands",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [920, 1780],
@@ -1,5 +1,9 @@
{
"id": "FourIslands",
"name": "Four Islands",
"translation_key": "map.fourislands",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [403, 1296],
@@ -24,14 +28,44 @@
],
"teamGameSpawnAreas": {
"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": [
{ "x": 0, "y": 0, "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 }
{
"x": 0,
"y": 0,
"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": [
{
"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": [
{
"coordinates": [2309, 535],
@@ -1,5 +1,9 @@
{
"id": "GreatLakes",
"name": "Great Lakes",
"translation_key": "map.greatlakes",
"categories": ["north_america"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [38, 326],
@@ -1,5 +1,9 @@
{
"id": "GulfOfStLawrence",
"name": "Gulf of St. Lawrence",
"translation_key": "map.gulfofstlawrence",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [88, 364],
@@ -1,5 +1,9 @@
{
"id": "Halkidiki",
"name": "Halkidiki",
"translation_key": "map.halkidiki",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [1798, 984],
@@ -1,5 +1,9 @@
{
"id": "Hawaii",
"name": "Hawaii",
"translation_key": "map.hawaii",
"categories": ["north_america", "oceania"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [283, 281],
@@ -1,5 +1,9 @@
{
"id": "HongKong",
"name": "Hong Kong",
"translation_key": "map.hongkong",
"categories": ["asia"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [1592, 1147],
@@ -1,5 +1,9 @@
{
"id": "Iceland",
"name": "Iceland",
"translation_key": "map.iceland",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [455, 1115],
@@ -1,5 +1,9 @@
{
"id": "IndianSubcontinent",
"name": "Indian Subcontinent",
"translation_key": "map.indiansubcontinent",
"categories": ["asia"],
"multiplayer_frequency": 8,
"nations": [
{
"coordinates": [1601, 840],
@@ -69,163 +73,136 @@
{
"coordinates": [1051, 1586],
"name": "Tamil Nadu",
"flag": "in"
},
{
"coordinates": [783, 1322],
"name": "Karnataka",
"flag": "in"
},
{
"coordinates": [1057, 1256],
"name": "Andhra Pradesh",
"flag": "in"
},
{
"coordinates": [1007, 1065],
"name": "Telangana",
"flag": "in"
},
{
"coordinates": [787, 998],
"name": "Maharashtra",
"flag": "in"
},
{
"coordinates": [706, 1141],
"name": "Goa",
"flag": "in"
},
{
"coordinates": [1391, 906],
"name": "Odisha",
"flag": "in"
},
{
"coordinates": [565, 892],
"name": "Gujarat",
"flag": "in"
},
{
"coordinates": [961, 717],
"name": "Madhya Pradesh",
"flag": "in"
},
{
"coordinates": [1120, 895],
"name": "Chhattisgarh",
"flag": "in"
},
{
"coordinates": [1508, 825],
"name": "West Bengal",
"flag": "in"
},
{
"coordinates": [1317, 717],
"name": "Jharkhand",
"flag": "in"
},
{
"coordinates": [1379, 608],
"name": "Bihar",
"flag": "in"
},
{
"coordinates": [1519, 506],
"name": "Sikkim",
"flag": "Sikkim"
},
{
"coordinates": [1738, 668],
"name": "Assam",
"flag": "in"
},
{
"coordinates": [1194, 535],
"name": "Uttar Pradesh",
"flag": "in"
},
{
"coordinates": [735, 611],
"name": "Rajasthan",
"flag": "in"
},
{
"coordinates": [1624, 507],
"name": "Meghalaya",
"flag": "in"
},
{
"coordinates": [1658, 759],
"name": "Tripura",
"flag": "in"
},
{
"coordinates": [1790, 834],
"name": "Mizoram",
"flag": "in"
},
{
"coordinates": [1878, 762],
"name": "Manipur",
"flag": "in"
},
{
"coordinates": [1952, 637],
"name": "Nagaland",
"flag": "in"
},
{
"coordinates": [1957, 480],
"name": "Arunachal Pradesh",
"flag": "in"
},
{
"coordinates": [884, 439],
"name": "Haryana",
"flag": "in"
},
{
"coordinates": [840, 305],
"name": "Punjab",
"flag": "in"
},
{
"coordinates": [1082, 384],
"name": "Uttarakhand",
"flag": "in"
},
{
"coordinates": [948, 236],
"name": "Himachal Pradesh",
"flag": "in"
},
{
@@ -236,67 +213,56 @@
{
"coordinates": [51, 580],
"name": "Iran",
"flag": "ir"
},
{
"coordinates": [81, 24],
"name": "Tajikistan",
"flag": "tj"
},
{
"coordinates": [978, 550],
"name": "New Delhi",
"flag": "in"
},
{
"coordinates": [468, 692],
"name": "Sindh",
"flag": "pk"
},
{
"coordinates": [309, 529],
"name": "Balochistan",
"flag": "pk"
},
{
"coordinates": [637, 464],
"name": "Punjab",
"flag": "pk"
},
{
"coordinates": [514, 366],
"name": "Fata",
"flag": "pk"
},
{
"coordinates": [616, 224],
"name": "Khyber Pakhtunkhwa",
"flag": "pk"
},
{
"coordinates": [740, 161],
"name": "Azad Kashmir",
"flag": "Azad Kashmir"
},
{
"coordinates": [628, 12],
"name": "Gilgit-Baltistan",
"flag": "pk"
},
{
"coordinates": [1065, 1454],
"name": "Puducherry",
"flag": "in"
}
]
@@ -1,5 +1,9 @@
{
"id": "Italia",
"name": "Italia",
"translation_key": "map.italia",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [
{
"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": [
{
"coordinates": [1895, 288],
@@ -1,5 +1,9 @@
{
"id": "JuanDeFucaStrait",
"name": "Juan De Fuca Strait",
"translation_key": "map.juandefucastrait",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [1812, 445],
@@ -1,5 +1,9 @@
{
"id": "Korea",
"name": "Korea",
"translation_key": "map.korea",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [849, 1523],
+166 -27
View File
@@ -1,5 +1,9 @@
{
"id": "Labyrinth",
"name": "Labyrinth",
"translation_key": "map.labyrinth",
"categories": ["other"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [50, 50],
@@ -361,43 +365,178 @@
],
"teamGameSpawnAreas": {
"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": [
{ "x": 1020, "y": 680, "width": 340, "height": 680 },
{ "x": 0, "y": 680, "width": 340, "height": 680 },
{ "x": 340, "y": 0, "width": 680, "height": 680 }
{
"x": 1020,
"y": 680,
"width": 340,
"height": 680
},
{
"x": 0,
"y": 680,
"width": 340,
"height": 680
},
{
"x": 340,
"y": 0,
"width": 680,
"height": 680
}
],
"4": [
{ "x": 0, "y": 0, "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 }
{
"x": 0,
"y": 0,
"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": [
{ "x": 1088, "y": 453, "width": 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 }
{
"x": 1088,
"y": 453,
"width": 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": [
{ "x": 226, "y": 0, "width": 453, "height": 680 },
{ "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 }
{
"x": 226,
"y": 0,
"width": 453,
"height": 680
},
{
"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": [
{ "x": 510, "y": 1088, "width": 340, "height": 272 },
{ "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 }
{
"x": 510,
"y": 1088,
"width": 340,
"height": 272
},
{
"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",
"translation_key": "map.lemnos",
"categories": ["europe"],
"multiplayer_frequency": 3,
"nations": [
{
"coordinates": [550, 317],
@@ -1,5 +1,9 @@
{
"id": "Lisbon",
"name": "Lisbon",
"translation_key": "map.lisbon",
"categories": ["europe"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [750, 630],
@@ -1,5 +1,9 @@
{
"id": "LosAngeles",
"name": "Los Angeles",
"translation_key": "map.losangeles",
"categories": ["north_america"],
"multiplayer_frequency": 8,
"nations": [
{
"coordinates": [546, 16],
+16 -8
View File
@@ -1,5 +1,9 @@
{
"id": "Luna",
"name": "Luna",
"translation_key": "map.luna",
"categories": ["cosmic"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [265, 662],
@@ -46,7 +50,6 @@
"flag": "us",
"name": "Artemis II"
},
{
"coordinates": [515, 170],
"flag": "Russian SSR",
@@ -57,7 +60,6 @@
"flag": "Russian SSR",
"name": "Luna 21"
},
{
"coordinates": [1030, 790],
"flag": "Russian SSR",
@@ -83,7 +85,6 @@
"flag": "Russian SSR",
"name": "Luna 1"
},
{
"coordinates": [672, 2323],
"flag": "cn",
@@ -104,13 +105,11 @@
"flag": "cn",
"name": "Chang'e 6"
},
{
"coordinates": [830, 745],
"flag": "jp",
"name": "S.L.I.M."
},
{
"coordinates": [400, 3360],
"flag": "in",
@@ -121,7 +120,6 @@
"flag": "in",
"name": "Chandrayaan 1"
},
{
"coordinates": [755, 3035],
"flag": "",
@@ -135,8 +133,18 @@
],
"teamGameSpawnAreas": {
"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",
"translation_key": "map.manicouagan",
"categories": ["north_america"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [784, 1034],
@@ -1,5 +1,9 @@
{
"id": "MareNostrum",
"name": "Mare Nostrum",
"translation_key": "map.marenostrum",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [141, 574],
+4
View File
@@ -1,5 +1,9 @@
{
"id": "Mars",
"name": "Mars",
"translation_key": "map.mars",
"categories": ["cosmic"],
"multiplayer_frequency": 3,
"nations": [
{
"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": [
{
"coordinates": [257, 82],
@@ -1,5 +1,9 @@
{
"id": "MiddleEast",
"name": "Middle East",
"translation_key": "map.middleeast",
"categories": ["asia"],
"multiplayer_frequency": 8,
"nations": [
{
"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": [
{
"coordinates": [775, 757],
@@ -1,5 +1,9 @@
{
"id": "MississippiRiver",
"name": "Mississippi River",
"translation_key": "map.mississippiriver",
"categories": ["north_america"],
"multiplayer_frequency": 3,
"nations": [
{
"coordinates": [390, 269],
@@ -1,5 +1,9 @@
{
"id": "Montreal",
"name": "Montreal",
"translation_key": "map.montreal",
"categories": ["north_america"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [800, 430],
@@ -1,5 +1,9 @@
{
"id": "NewYorkCity",
"name": "New York City",
"translation_key": "map.newyorkcity",
"categories": ["north_america"],
"multiplayer_frequency": 3,
"nations": [
{
"coordinates": [127, 1323],
@@ -1,5 +1,9 @@
{
"id": "NileDelta",
"name": "Nile Delta",
"translation_key": "map.niledelta",
"categories": ["africa"],
"multiplayer_frequency": 4,
"nations": [
{
"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": [
{
"coordinates": [1625, 1040],
@@ -1,5 +1,9 @@
{
"id": "NorthwestPassage",
"name": "Northwest Passage",
"translation_key": "map.northwestpassage",
"categories": ["north_america"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [1203, 592],
@@ -1,5 +1,9 @@
{
"id": "Oceania",
"name": "Oceania",
"translation_key": "map.oceania",
"categories": ["oceania"],
"multiplayer_frequency": 0,
"nations": [
{
"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": [
{
"coordinates": [51, 188],
@@ -1,5 +1,9 @@
{
"id": "Pangaea",
"name": "Pangaea",
"translation_key": "map.pangaea",
"categories": ["other"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [389, 800],
@@ -1,5 +1,9 @@
{
"id": "Passage",
"name": "Passage",
"translation_key": "map.passage",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [256, 80],
@@ -1,5 +1,9 @@
{
"id": "Pluto",
"name": "Pluto",
"translation_key": "map.pluto",
"categories": ["cosmic"],
"multiplayer_frequency": 6,
"nations": [
{
"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": [
{
"coordinates": [996, 990],
@@ -1,5 +1,9 @@
{
"id": "Sierpinski",
"name": "Sierpinski",
"translation_key": "map.sierpinski",
"categories": ["other"],
"multiplayer_frequency": 10,
"nations": [
{
"coordinates": [216, 701],
@@ -1,5 +1,10 @@
{
"id": "SouthAmerica",
"name": "South America",
"translation_key": "map.southamerica",
"categories": ["featured", "south_america"],
"multiplayer_frequency": 5,
"featured_rank": 4,
"nations": [
{
"coordinates": [438, 58],
@@ -1,5 +1,9 @@
{
"name": "Southeast Asia",
"id": "SoutheastAsia",
"name": "SoutheastAsia",
"translation_key": "map.southeastasia",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [1319, 76],
@@ -1,5 +1,9 @@
{
"id": "StraitOfGibraltar",
"name": "Strait of Gibraltar",
"translation_key": "map.straitofgibraltar",
"categories": ["europe", "africa"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [1941, 1031],
@@ -1,5 +1,9 @@
{
"id": "StraitOfHormuz",
"name": "Strait of Hormuz",
"translation_key": "map.straitofhormuz",
"categories": ["asia"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [837, 356],
@@ -1,5 +1,9 @@
{
"id": "StraitOfMalacca",
"name": "Strait Of Malacca",
"translation_key": "map.straitofmalacca",
"categories": ["asia"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [1268, 730],
@@ -1,5 +1,9 @@
{
"id": "Surrounded",
"name": "Surrounded",
"translation_key": "map.surrounded",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [1043, 910],
@@ -1,5 +1,9 @@
{
"id": "Svalmel",
"name": "Svalmel",
"translation_key": "map.svalmel",
"categories": ["other"],
"multiplayer_frequency": 8,
"nations": [
{
"coordinates": [900, 850],
@@ -1,5 +1,9 @@
{
"id": "TaiwanStrait",
"name": "Taiwan Strait",
"translation_key": "map.taiwanstrait",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [
{
"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": [
{ "coordinates": [10, 10], "flag": "", "name": "King of the Corner" },
{ "coordinates": [1024, 300], "flag": "", "name": "Suspicious Ally" },
{ "coordinates": [1650, 400], "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" }
{
"coordinates": [10, 10],
"flag": "",
"name": "King of the Corner"
},
{
"coordinates": [1024, 300],
"flag": "",
"name": "Suspicious Ally"
},
{
"coordinates": [1650, 400],
"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",
"translation_key": "map.titan",
"categories": ["cosmic"],
"multiplayer_frequency": 3,
"nations": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"coordinates": [568, 309],
@@ -1,5 +1,9 @@
{
"id": "TradersDream",
"name": "Traders Dream",
"translation_key": "map.tradersdream",
"categories": ["other"],
"multiplayer_frequency": 4,
"nations": [
{
"coordinates": [1010, 120],
@@ -1,5 +1,9 @@
{
"id": "TwoLakes",
"name": "Two Lakes",
"translation_key": "map.twolakes",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [1025, 750],
@@ -1,5 +1,9 @@
{
"id": "Venice",
"name": "Venice",
"translation_key": "map.venice",
"categories": ["europe"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [760, 593],
@@ -1,5 +1,10 @@
{
"id": "World",
"name": "World",
"translation_key": "map.world",
"categories": ["featured", "world"],
"multiplayer_frequency": 20,
"featured_rank": 1,
"nations": [
{
"coordinates": [484, 284],
@@ -1,5 +1,9 @@
{
"id": "WorldInverted",
"name": "World Inverted",
"translation_key": "map.worldinverted",
"categories": ["world"],
"multiplayer_frequency": 8,
"nations": [
{
"name": "Titan Submersible",
@@ -49,7 +53,6 @@
"name": "Atlantis",
"flag": ""
},
{
"coordinates": [2420, 230],
"name": "RMS Lusitania",
@@ -250,7 +253,6 @@
"name": "ARA San Juan",
"flag": "ar"
},
{
"coordinates": [1500, 610],
"name": "Pacific",
@@ -326,7 +328,6 @@
"name": "Weddell",
"flag": ""
},
{
"coordinates": [120, 1050],
"name": "Weddell Plain",
@@ -382,7 +383,6 @@
"name": "Nazca Ridge",
"flag": ""
},
{
"coordinates": [1450, 333],
"name": "Mendocino",
@@ -464,7 +464,6 @@
"flag": ""
}
],
"additionalNations": [
{
"name": "TCG Dumlupınar",
@@ -777,7 +776,6 @@
"name": "SS Monroe",
"flag": "us"
},
{
"name": "Wave Goodbye",
"flag": ""
@@ -898,7 +896,6 @@
"name": "Red November",
"flag": "ussr"
},
{
"coordinates": [2326, 303],
"name": "Ocean Ranger",
@@ -1019,7 +1016,6 @@
"name": "SS Kiche Maru",
"flag": "jp"
},
{
"coordinates": [2030, 480],
"name": "Gulf of Merica",
@@ -1295,7 +1291,6 @@
"name": "South-Sandwich",
"flag": ""
},
{
"coordinates": [1255, 920],
"name": "Challenger Bay",
@@ -1,5 +1,9 @@
{
"id": "YellowSea",
"name": "Yellow Sea",
"translation_key": "map.yellowsea",
"categories": ["asia"],
"multiplayer_frequency": 5,
"nations": [
{
"coordinates": [1350, 575],
@@ -1,5 +1,9 @@
{
"id": "Yenisei",
"name": "Yenisei",
"translation_key": "map.yenisei",
"categories": ["asia"],
"multiplayer_frequency": 6,
"nations": [
{
"coordinates": [1050, 535],

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