Add new map “The Box” (#3054)

<img width="1670" height="200" alt="banner"
src="https://github.com/user-attachments/assets/b6561231-71dc-46dd-a521-453d4e97931f"
/>

## Description:

This proposal adds a new, completely flat map called "The Box," where
players will find themselves on a completely flat landmass and will only
be able to trade by land using trains and factories.

- Map size: 2048×2048 pixels
- Binaries generated with MapGenerator (map.bin, map4x.bin, map16x.bin)
- Integrated into arcade category and multiplayer playlist
- English and Spanish translations added
- 13 nations/bots with unique and thematic names:
 
> - **Middle Defender (located in the center)**
> - **King of the Corner (located in the top-left corner)**
> - Suspicious Ally
> - Punch Merchant
> - Nuke Thrower
> - Fullsender
> - Factory Builder
> - Front Manager
> - Box Fighter
> - Cage Liberator
> - Train Trader
> - Non-peaceful Bot
> - **Evan The Dev** (special mention)

All other bots are distributed to cover the map evenly.

<img width="838" height="835" alt="Screenshot 2026-01-28 at 17 39 45"
src="https://github.com/user-attachments/assets/4665088d-cb94-4db3-8602-8a22b63bfee2"
/>

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [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
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

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

sardidefcon
This commit is contained in:
Sardi
2026-01-30 04:49:10 +01:00
committed by GitHub
parent bec5b5f976
commit 13117251af
11 changed files with 111 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

@@ -0,0 +1,18 @@
{
"name": "TheBox",
"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" }
]
}
+1
View File
@@ -63,6 +63,7 @@ var maps = []struct {
{Name: "world"},
{Name: "lemnos"},
{Name: "twolakes"},
{Name: "thebox"},
{Name: "didier"},
{Name: "didierfrance"},
{Name: "amazonriver"},
+1
View File
@@ -328,6 +328,7 @@
"manicouagan": "Manicouagan",
"lemnos": "Lemnos",
"sierpinski": "Sierpinski",
"thebox": "The Box",
"twolakes": "Two Lakes",
"straitofhormuz": "Strait of Hormuz",
"surrounded": "Surrounded",
+85
View File
@@ -0,0 +1,85 @@
{
"map": {
"height": 2048,
"num_land_tiles": 4194304,
"width": 2048
},
"map16x": {
"height": 512,
"num_land_tiles": 262144,
"width": 512
},
"map4x": {
"height": 1024,
"num_land_tiles": 1048576,
"width": 1024
},
"name": "The Box",
"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"
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

+2
View File
@@ -111,6 +111,7 @@ export enum GameMapType {
Manicouagan = "Manicouagan",
Lemnos = "Lemnos",
Sierpinski = "Sierpinski",
TheBox = "The Box",
TwoLakes = "Two Lakes",
StraitOfHormuz = "Strait of Hormuz",
Surrounded = "Surrounded",
@@ -177,6 +178,7 @@ export const mapCategories: Record<string, GameMapType[]> = {
GameMapType.Surrounded,
],
arcade: [
GameMapType.TheBox,
GameMapType.Didier,
GameMapType.DidierFrance,
GameMapType.Sierpinski,
+1
View File
@@ -65,6 +65,7 @@ const frequency: Partial<Record<GameMapName, number>> = {
Didier: 1,
AmazonRiver: 3,
Sierpinski: 10,
TheBox: 3,
};
interface MapWithMode {