Adds map of the Middle East (#3829)

## Description:

Starting v32 maps right now!

Adds map of the Middle East. Probably one of the most highly requested
maps.

Very large map (3.4M land pixels, similar to Two Lakes, would become the
2nd or 3rd largest map by land area) of the arabian peninsula and
surrounding regions.
This map has both huge areas of land without water access full of desert
terrain, and massive trade chokepoints, which combined will result in
crazy endgames.

The theme of this map are historical, based on the end of WW1.
Historical flags have been added for the nation NPCs to use.

(High map rotation of 8 since this is probably going to become one of
the most popular maps given the relevancy of the region in real life.)

Terrain source from NASA DEM, already credited.


https://github.com/user-attachments/assets/6a1b345f-fd92-42c2-8f92-154fac4c9733

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

DISCORD_USERNAME

tri.star1011
This commit is contained in:
RickD004
2026-05-05 22:12:42 -06:00
committed by GitHub
parent 27e7a56f94
commit 3744027e94
19 changed files with 2743 additions and 6 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

@@ -0,0 +1,140 @@
{
"name": "Middle East",
"nations": [
{
"coordinates": [300, 65],
"name": "Ottoman Empire",
"flag": "tr"
},
{
"coordinates": [1639, 558],
"name": "Qajar Dynasty",
"flag": "Persia"
},
{
"coordinates": [1141, 797],
"name": "Emirate of Kuwait",
"flag": "Socialist_flag"
},
{
"coordinates": [1880, 1353],
"name": "Sultanate of Muscat",
"flag": "Socialist_flag"
},
{
"coordinates": [1703, 1402],
"name": "Imamate of Oman",
"flag": "White Flag"
},
{
"coordinates": [1592, 1239],
"name": "Trucial States",
"flag": "Socialist_flag"
},
{
"coordinates": [1129, 1875],
"name": "Aden Protectorate",
"flag": "gb"
},
{
"coordinates": [964, 1744],
"name": "Kingdom of Yemen",
"flag": "Kingdom of Yemen"
},
{
"coordinates": [844, 1655],
"name": "Emirate of Asir",
"flag": "Emirate of Asir"
},
{
"coordinates": [579, 1173],
"name": "Kingdom of Hejaz",
"flag": "Arabia"
},
{
"coordinates": [800, 1052],
"name": "Rashidi Emirate",
"flag": "Rashidi Emirate"
},
{
"coordinates": [1092, 1336],
"name": "Sultanate of Nejd",
"flag": "Sultanate of Nejd"
},
{
"coordinates": [1397, 1128],
"name": "Qatar",
"flag": "qa"
},
{
"coordinates": [973, 296],
"name": "Kingdom of Iraq",
"flag": "Kingdom of Iraq"
},
{
"coordinates": [554, 364],
"name": "Kingdom of Syria",
"flag": "Kingdom of Syria"
},
{
"coordinates": [423, 647],
"name": "Palestine Mandate",
"flag": "gb"
},
{
"coordinates": [100, 781],
"name": "Kingdom of Egypt",
"flag": "Kingdom of Egypt"
},
{
"coordinates": [159, 1530],
"name": "Anglo-Egyptian Sudan",
"flag": "gb"
},
{
"coordinates": [578, 1766],
"name": "Italian Eritrea",
"flag": "italy"
},
{
"coordinates": [401, 2005],
"name": "Ethiopian Empire",
"flag": "Ethiopian Empire"
},
{
"coordinates": [826, 2044],
"name": "French Somaliland",
"flag": "fr"
},
{
"coordinates": [1455, 902],
"name": "British Bushehr",
"flag": "gb"
},
{
"coordinates": [185, 375],
"name": "British Cyprus",
"flag": "gb"
},
{
"coordinates": [2127, 373],
"name": "Emirate of Afghanistan",
"flag": "Emirate of Afghanistan"
},
{
"coordinates": [2087, 925],
"name": "Baluchistan Agency",
"flag": "gb"
},
{
"coordinates": [932, 15],
"name": "Republic of Armenia",
"flag": "am"
},
{
"coordinates": [1671, 71],
"name": "Russian State",
"flag": "ru"
}
]
}
+1
View File
@@ -53,6 +53,7 @@ var maps = []struct {
{Name: "straitofmalacca"},
{Name: "mars"},
{Name: "mena"},
{Name: "middleeast"},
{Name: "montreal"},
{Name: "newyorkcity"},
{Name: "northamerica"},
+40 -6
View File
@@ -665,6 +665,16 @@
"continent": "North America",
"name": "El Salvador"
},
{
"code": "Emirate of Afghanistan",
"continent": "Asia",
"name": "Emirate of Afghanistan"
},
{
"code": "Emirate of Asir",
"continent": "Asia",
"name": "Emirate of Asir"
},
{
"code": "granada",
"continent": "Europe",
@@ -721,6 +731,11 @@
"continent": "Africa",
"name": "Ethiopia"
},
{
"code": "Ethiopian Empire",
"continent": "Africa",
"name": "Ethiopian Empire"
},
{
"code": "eu",
"continent": "Europe",
@@ -1050,11 +1065,6 @@
"continent": "Europe",
"name": "Italy"
},
{
"code": "italy",
"continent": "Europe",
"name": "Kingdom of Italy"
},
{
"code": "jm",
"continent": "North America",
@@ -1130,6 +1140,11 @@
"continent": "Asia",
"name": "Kingdom of Iraq"
},
{
"code": "italy",
"continent": "Europe",
"name": "Kingdom of Italy"
},
{
"code": "Kingdom of Jerusalem",
"continent": "Asia",
@@ -1140,6 +1155,16 @@
"continent": "Asia",
"name": "Kingdom of Judah"
},
{
"code": "Kingdom of Syria",
"continent": "Asia",
"name": "Kingdom of Syria"
},
{
"code": "Kingdom of Yemen",
"continent": "Asia",
"name": "Kingdom of Yemen"
},
{
"code": "Kirghiz SSR",
"continent": "Asia",
@@ -1808,6 +1833,11 @@
"continent": "North America",
"name": "Quebec"
},
{
"code": "Rashidi Emirate",
"continent": "Asia",
"name": "Rashidi Emirate"
},
{
"code": "Republic of China",
"continent": "Asia",
@@ -2057,7 +2087,7 @@
},
{
"code": "Socialist_flag",
"name": "Socialist Flag"
"name": "Red Flag"
},
{
"code": "sb",
@@ -2463,6 +2493,10 @@
"continent": "Africa",
"name": "Western Sahara"
},
{
"code": "White Flag",
"name": "White Flag"
},
{
"code": "Wisconsin",
"continent": "North America",
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="150" height="150" viewBox="0 0 150 150">
<image href="data:image/png;base64,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" x="7.500" y="32.813" width="135.000" height="84.375" />
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

+1
View File
@@ -409,6 +409,7 @@
"giantworldmap": "Giant World Map",
"europe": "Europe",
"mena": "MENA",
"middleeast": "Middle East",
"northamerica": "North America",
"oceania": "Oceania",
"blacksea": "Black Sea",
+155
View File
@@ -0,0 +1,155 @@
{
"map": {
"height": 2060,
"num_land_tiles": 3449078,
"width": 2200
},
"map16x": {
"height": 515,
"num_land_tiles": 211600,
"width": 550
},
"map4x": {
"height": 1030,
"num_land_tiles": 856603,
"width": 1100
},
"name": "Middle East",
"nations": [
{
"coordinates": [300, 65],
"flag": "tr",
"name": "Ottoman Empire"
},
{
"coordinates": [1639, 558],
"flag": "Persia",
"name": "Qajar Dynasty"
},
{
"coordinates": [1141, 797],
"flag": "Socialist_flag",
"name": "Emirate of Kuwait"
},
{
"coordinates": [1880, 1353],
"flag": "Socialist_flag",
"name": "Sultanate of Muscat"
},
{
"coordinates": [1703, 1402],
"flag": "White Flag",
"name": "Imamate of Oman"
},
{
"coordinates": [1592, 1239],
"flag": "Socialist_flag",
"name": "Trucial States"
},
{
"coordinates": [1129, 1875],
"flag": "gb",
"name": "Aden Protectorate"
},
{
"coordinates": [964, 1744],
"flag": "Kingdom of Yemen",
"name": "Kingdom of Yemen"
},
{
"coordinates": [844, 1655],
"flag": "Emirate of Asir",
"name": "Emirate of Asir"
},
{
"coordinates": [579, 1173],
"flag": "Arabia",
"name": "Kingdom of Hejaz"
},
{
"coordinates": [800, 1052],
"flag": "Rashidi Emirate",
"name": "Rashidi Emirate"
},
{
"coordinates": [1092, 1336],
"flag": "Sultanate of Nejd",
"name": "Sultanate of Nejd"
},
{
"coordinates": [1397, 1128],
"flag": "qa",
"name": "Qatar"
},
{
"coordinates": [973, 296],
"flag": "Kingdom of Iraq",
"name": "Kingdom of Iraq"
},
{
"coordinates": [554, 364],
"flag": "Kingdom of Syria",
"name": "Kingdom of Syria"
},
{
"coordinates": [423, 647],
"flag": "gb",
"name": "Palestine Mandate"
},
{
"coordinates": [100, 781],
"flag": "Kingdom of Egypt",
"name": "Kingdom of Egypt"
},
{
"coordinates": [159, 1530],
"flag": "gb",
"name": "Anglo-Egyptian Sudan"
},
{
"coordinates": [578, 1766],
"flag": "italy",
"name": "Italian Eritrea"
},
{
"coordinates": [401, 2005],
"flag": "Ethiopian Empire",
"name": "Ethiopian Empire"
},
{
"coordinates": [826, 2044],
"flag": "fr",
"name": "French Somaliland"
},
{
"coordinates": [1455, 902],
"flag": "gb",
"name": "British Bushehr"
},
{
"coordinates": [185, 375],
"flag": "gb",
"name": "British Cyprus"
},
{
"coordinates": [2127, 373],
"flag": "Emirate of Afghanistan",
"name": "Emirate of Afghanistan"
},
{
"coordinates": [2087, 925],
"flag": "gb",
"name": "Baluchistan Agency"
},
{
"coordinates": [932, 15],
"flag": "am",
"name": "Republic of Armenia"
},
{
"coordinates": [1671, 71],
"flag": "ru",
"name": "Russian State"
}
]
}
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: 10 KiB

+2
View File
@@ -169,6 +169,7 @@ export enum GameMapType {
Antarctica = "Antarctica",
ArchipelagoSea = "ArchipelagoSea",
BajaCalifornia = "Baja California",
MiddleEast = "Middle East",
}
export type GameMapName = keyof typeof GameMapType;
@@ -230,6 +231,7 @@ export const mapCategories: Record<string, GameMapType[]> = {
GameMapType.BeringSea,
GameMapType.ArchipelagoSea,
GameMapType.BajaCalifornia,
GameMapType.MiddleEast,
],
fantasy: [
GameMapType.Pangaea,
+1
View File
@@ -96,6 +96,7 @@ const frequency: Partial<Record<GameMapName, number>> = {
Antarctica: 1,
ArchipelagoSea: 3,
BajaCalifornia: 4,
MiddleEast: 8,
};
const TEAM_WEIGHTS: { config: TeamCountConfig; weight: number }[] = [