Feat: Passage Map 🚢 (#3304)

## Description:
Introduces Passage, an island filled thin map (like Amazon River but
inverted) which is a long, thin stretch of islands that makes for some
really fun gameplay. I playtested with 3 friends a number of times and
it's great in pretty much all the modes. Naval gameplay on this map is
particularly fun since some islands in the center basically hold the
choke points on trade ships passing from one side to another, making
them hotly contested territory.

<img width="6000" height="400" alt="long map"
src="https://github.com/user-attachments/assets/7904d6f8-e7b8-437d-852e-68a2f006d200"
/>


Describe the PR.

## 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:

bijx
This commit is contained in:
bijx
2026-03-02 18:35:19 -05:00
committed by GitHub
parent 17f32a590c
commit c238af389a
11 changed files with 162 additions and 1 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

@@ -0,0 +1,69 @@
{
"name": "Passage",
"nations": [
{
"coordinates": [256, 80],
"name": "Weston"
},
{
"coordinates": [1028, 286],
"name": "Ellach"
},
{
"coordinates": [1437, 149],
"name": "Prina"
},
{
"coordinates": [1652, 141],
"name": "Aros"
},
{
"coordinates": [1867, 270],
"name": "Elos"
},
{
"coordinates": [2138, 127],
"name": "Eban"
},
{
"coordinates": [2383, 182],
"name": "Kene"
},
{
"coordinates": [640, 136],
"name": "Sore"
},
{
"coordinates": [2789, 152],
"name": "Deno"
},
{
"coordinates": [3267, 275],
"name": "Calphe"
},
{
"coordinates": [3653, 147],
"name": "Modwyn"
},
{
"coordinates": [3888, 270],
"name": "Echur"
},
{
"coordinates": [4579, 142],
"name": "Eris"
},
{
"coordinates": [5408, 228],
"name": "Tuage"
},
{
"coordinates": [5475, 115],
"name": "Vola"
},
{
"coordinates": [5906, 364],
"name": "Eastos"
}
]
}
+1
View File
@@ -57,6 +57,7 @@ var maps = []struct {
{Name: "northamerica"},
{Name: "oceania"},
{Name: "pangaea"},
{Name: "passage"},
{Name: "pluto"},
{Name: "sierpinski"},
{Name: "southamerica"},
+1
View File
@@ -320,6 +320,7 @@
"svalmel": "Svalmel",
"manicouagan": "Manicouagan",
"lemnos": "Lemnos",
"passage": "Passage",
"sierpinski": "Sierpinski",
"thebox": "The Box",
"twolakes": "Two Lakes",
+84
View File
@@ -0,0 +1,84 @@
{
"map": {
"height": 400,
"num_land_tiles": 803994,
"width": 6000
},
"map16x": {
"height": 100,
"num_land_tiles": 46347,
"width": 1500
},
"map4x": {
"height": 200,
"num_land_tiles": 195775,
"width": 3000
},
"name": "Passage",
"nations": [
{
"coordinates": [256, 80],
"name": "Weston"
},
{
"coordinates": [1028, 286],
"name": "Ellach"
},
{
"coordinates": [1437, 149],
"name": "Prina"
},
{
"coordinates": [1652, 141],
"name": "Aros"
},
{
"coordinates": [1867, 270],
"name": "Elos"
},
{
"coordinates": [2138, 127],
"name": "Eban"
},
{
"coordinates": [2383, 182],
"name": "Kene"
},
{
"coordinates": [640, 136],
"name": "Sore"
},
{
"coordinates": [2789, 152],
"name": "Deno"
},
{
"coordinates": [3267, 275],
"name": "Calphe"
},
{
"coordinates": [3653, 147],
"name": "Modwyn"
},
{
"coordinates": [3888, 270],
"name": "Echur"
},
{
"coordinates": [4579, 142],
"name": "Eris"
},
{
"coordinates": [5408, 228],
"name": "Tuage"
},
{
"coordinates": [5475, 115],
"name": "Vola"
},
{
"coordinates": [5906, 364],
"name": "Eastos"
}
]
}
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: 12 KiB

+3 -1
View File
@@ -120,6 +120,7 @@ export enum GameMapType {
Lisbon = "Lisbon",
Manicouagan = "Manicouagan",
Lemnos = "Lemnos",
Passage = "Passage",
Sierpinski = "Sierpinski",
TheBox = "The Box",
TwoLakes = "Two Lakes",
@@ -141,7 +142,7 @@ export type GameMapName = keyof typeof GameMapType;
/** Maps that have unusual thumbnail dimensions requiring object-fit: cover */
export function hasUnusualThumbnailSize(map: GameMapType): boolean {
return map === GameMapType.AmazonRiver;
return map === GameMapType.AmazonRiver || map === GameMapType.Passage;
}
export const mapCategories: Record<string, GameMapType[]> = {
@@ -200,6 +201,7 @@ export const mapCategories: Record<string, GameMapType[]> = {
GameMapType.Svalmel,
GameMapType.Surrounded,
GameMapType.TradersDream,
GameMapType.Passage,
],
arcade: [
GameMapType.TheBox,
+1
View File
@@ -60,6 +60,7 @@ const frequency: Partial<Record<GameMapName, number>> = {
Svalmel: 8,
World: 8,
Lemnos: 3,
Passage: 4,
TwoLakes: 6,
StraitOfHormuz: 4,
Surrounded: 4,