Page MenuHomeWildfire Games

Civ specific AI name numbers, don't hardcode roman numbers in the gamesetup
Needs ReviewPublic

Authored by elexis on Oct 2 2019, 2:06 PM.
This revision needs review, but there are no reviewers specified.

Details

Reviewers
None
Summary

The gamesetup should not hardcode specific gamecontent.
Roman numbers definitely is.
For example it makes no sense for some starcraft like mod, and it doesn't even make sense for most civs.

Test Plan

Confirm that the strings are located in the wrong place currently, should be moved to civ files.
Confirm the strings are extracted correctly and that duplicate strings dont pose any problems.
If there is someone who wants to do the historic accuracy part, they can do so without any additional cost (time cost for developers or translators) in a separate patch, or here.
Consider updating https://trac.wildfiregames.com/wiki/Mod_Layout#civs

Notice that the game now choses unique names in all cases for the current max playercount and civ files.
Notice that if one removes the names of a civ below the chosen AI playercount of that civ, it will deduplicate.
For example remove all names in rome.json but one to see the deduplication in process.

Event Timeline

elexis created this revision.Oct 2 2019, 2:06 PM
elexis edited the test plan for this revision. (Show Details)Oct 2 2019, 2:08 PM
Vulcan added a comment.Oct 2 2019, 2:15 PM

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '||' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|  87|  87| 		// If the elements are still strings, split them by space or by '+'
|  88|  88| 		if (typeof sublist == "string")
|  89|  89| 			sublist = sublist.split(/[+\s]+/);
|  90|    |-		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1)
|  91|    |-		                    || (c[0] != "!" && classes.indexOf(c) != -1)))
|    |  90|+		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) ||
|    |  91|+		                    (c[0] != "!" && classes.indexOf(c) != -1)))
|  92|  92| 			return true;
|  93|  93| 	}
|  94|  94| 

binaries/data/mods/public/globalscripts/Templates.js
|  91| »   »   ····················||·(c[0]·!=·"!"·&&·classes.indexOf(c)·!=·-1)))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '||'; readers may interpret this as an expression boundary.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  57|  57| var g_NumPlayersList = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1);
|  58|  58| 
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|    |-		"label": translateWithContext("team", "None"),
|    |  60|+	"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  58|  58| 
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|    |-		"id": -1
|    |  61|+	"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|    |-	}].concat(
|    |  62|+}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|    |-		Array(g_MaxTeams).fill(0).map((v, i) => ({
|    |  63|+	Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|    |-			"label": i + 1,
|    |  64|+		"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|  67|  67| 	)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|    |-			"id": i
|    |  65|+		"id": i
|  66|  66| 		}))
|  67|  67| 	)
|  68|  68| );
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|    |-		}))
|    |  66|+	}))
|  67|  67| 	)
|  68|  68| );
|  69|  69| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|  67|    |-	)
|    |  67|+)
|  68|  68| );
|  69|  69| 
|  70|  70| /**
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  73|  73| var g_RelicCountList = Object.keys(g_CivData).map((civ, i) => i + 1);
|  74|  74| 
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|    |-		"name": translateWithContext("civilization", "Random"),
|    |  76|+	"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  74|  74| 
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|    |-		"tooltip": translate("Picks one civilization at random when the game starts."),
|    |  77|+	"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|    |-		"color": g_ColorRandom,
|    |  78|+	"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|    |-		"code": "random"
|    |  79|+	"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|    |-	}].concat(
|    |  80|+}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|    |-		Object.keys(g_CivData).filter(
|    |  81|+	Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|    |-			civ => g_CivData[civ].SelectableInGameSetup
|    |  82|+		civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|    |-		).map(civ => ({
|    |  83|+	).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|    |-			"name": g_CivData[civ].Name,
|    |  84|+		"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|    |-			"tooltip": g_CivData[civ].History,
|    |  85|+		"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|    |-			"color": g_ColorRegular,
|    |  86|+		"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|    |-			"code": civ
|    |  87|+		"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|  90|  90| );
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|    |-		})).sort(sortNameIgnoreCase)
|    |  88|+	})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|  90|  90| );
|  91|  91| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|    |-	)
|    |  89|+)
|  90|  90| );
|  91|  91| 
|  92|  92| /**
|    | [NORMAL] ESLintBear (no-trailing-spaces):
|    | Trailing spaces not allowed.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|1323|1323| 			offset = -Math.min(slideSpeed * dt, maxOffset);
|1324|1324| 	}
|1325|1325| 
|1326|    |-	updateSettingsPanelPosition(offset);	
|    |1326|+	updateSettingsPanelPosition(offset);
|1327|1327| }
|1328|1328| 
|1329|1329| /**
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/897/display/redirect

Vulcan added a comment.Oct 2 2019, 2:15 PM

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/382/display/redirect

Stan added a subscriber: Stan.Oct 2 2019, 2:17 PM

It sounds weird to do that considering some of the names in the civ files already contains numbers ?

elexis updated this revision to Diff 10052.Oct 2 2019, 2:27 PM

Actually call translate (for non-networked games).
Add translation context and comment.

Vulcan added a comment.Oct 2 2019, 2:29 PM

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/383/display/redirect

Vulcan added a comment.Oct 2 2019, 2:32 PM

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '||' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|  87|  87| 		// If the elements are still strings, split them by space or by '+'
|  88|  88| 		if (typeof sublist == "string")
|  89|  89| 			sublist = sublist.split(/[+\s]+/);
|  90|    |-		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1)
|  91|    |-		                    || (c[0] != "!" && classes.indexOf(c) != -1)))
|    |  90|+		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) ||
|    |  91|+		                    (c[0] != "!" && classes.indexOf(c) != -1)))
|  92|  92| 			return true;
|  93|  93| 	}
|  94|  94| 

binaries/data/mods/public/globalscripts/Templates.js
|  91| »   »   ····················||·(c[0]·!=·"!"·&&·classes.indexOf(c)·!=·-1)))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '||'; readers may interpret this as an expression boundary.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  57|  57| var g_NumPlayersList = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1);
|  58|  58| 
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|    |-		"label": translateWithContext("team", "None"),
|    |  60|+	"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  58|  58| 
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|    |-		"id": -1
|    |  61|+	"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|    |-	}].concat(
|    |  62|+}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|    |-		Array(g_MaxTeams).fill(0).map((v, i) => ({
|    |  63|+	Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|    |-			"label": i + 1,
|    |  64|+		"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|  67|  67| 	)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|    |-			"id": i
|    |  65|+		"id": i
|  66|  66| 		}))
|  67|  67| 	)
|  68|  68| );
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|    |-		}))
|    |  66|+	}))
|  67|  67| 	)
|  68|  68| );
|  69|  69| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|  67|    |-	)
|    |  67|+)
|  68|  68| );
|  69|  69| 
|  70|  70| /**
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  73|  73| var g_RelicCountList = Object.keys(g_CivData).map((civ, i) => i + 1);
|  74|  74| 
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|    |-		"name": translateWithContext("civilization", "Random"),
|    |  76|+	"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  74|  74| 
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|    |-		"tooltip": translate("Picks one civilization at random when the game starts."),
|    |  77|+	"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|    |-		"color": g_ColorRandom,
|    |  78|+	"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|    |-		"code": "random"
|    |  79|+	"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|    |-	}].concat(
|    |  80|+}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|    |-		Object.keys(g_CivData).filter(
|    |  81|+	Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|    |-			civ => g_CivData[civ].SelectableInGameSetup
|    |  82|+		civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|    |-		).map(civ => ({
|    |  83|+	).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|    |-			"name": g_CivData[civ].Name,
|    |  84|+		"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|    |-			"tooltip": g_CivData[civ].History,
|    |  85|+		"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|    |-			"color": g_ColorRegular,
|    |  86|+		"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|    |-			"code": civ
|    |  87|+		"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|  90|  90| );
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|    |-		})).sort(sortNameIgnoreCase)
|    |  88|+	})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|  90|  90| );
|  91|  91| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|    |-	)
|    |  89|+)
|  90|  90| );
|  91|  91| 
|  92|  92| /**
|    | [NORMAL] ESLintBear (no-trailing-spaces):
|    | Trailing spaces not allowed.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|1323|1323| 			offset = -Math.min(slideSpeed * dt, maxOffset);
|1324|1324| 	}
|1325|1325| 
|1326|    |-	updateSettingsPanelPosition(offset);	
|    |1326|+	updateSettingsPanelPosition(offset);
|1327|1327| }
|1328|1328| 
|1329|1329| /**
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/898/display/redirect

elexis added a comment.Oct 2 2019, 2:41 PM
In D2348#98190, @Stan wrote:

It sounds weird to do that considering some of the names in the civ files already contains numbers ?

The patch doesn't change that. The roman numbers were added all along if the name was chosen more than once.
So with this patch, it becomes more obvious that this might be a problem.

The alternative is that no name should be chosen more than once.

Then this either needs a format to between the two ways of defining names,
or the {civ} numbers are never applied.

In fact the latter seems to be preferable.
One can add "Name I" and "Name II".

athen 15
brit 11
cart 16
gaul 10
iber 8
kush 14
mace 13
maurya 11
pers 12
spart 12
sele 30

So in fact its well possible to drop those numbers altogether with 8 player limit.

But what if we want to support 32?

I guess thats not an engine limitation, as gamedesigners are free to add that many names to their civs if their game is supposed to support that.

It's an easy way to generate 10 times as many names with the given names.
And it also provides a way to give all of these names the chance of being duplicated.
While the alternative of dropping the numbers is to allow civ editors to only specify the II, III, IV'th instance of a AI name only for actually historically existing / documented / reported names.

Dropping the deduplication algorithm completely sounds lossy, so the alternative would be to use "playername (2)", i.e. Darayavahush II (2).

So if we keep the deduplication algorithm, it'd better be civ-specific translated it seems.

And one can independently improve the algorithm to avoid picking redundant names.

elexis updated this revision to Diff 10053.Oct 2 2019, 3:10 PM

Chose unique names first and still use deduplication.

Vulcan added a comment.Oct 2 2019, 3:11 PM

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/384/display/redirect

elexis edited the test plan for this revision. (Show Details)Oct 2 2019, 3:11 PM
Vulcan added a comment.Oct 2 2019, 3:15 PM

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '||' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|  87|  87| 		// If the elements are still strings, split them by space or by '+'
|  88|  88| 		if (typeof sublist == "string")
|  89|  89| 			sublist = sublist.split(/[+\s]+/);
|  90|    |-		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1)
|  91|    |-		                    || (c[0] != "!" && classes.indexOf(c) != -1)))
|    |  90|+		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) ||
|    |  91|+		                    (c[0] != "!" && classes.indexOf(c) != -1)))
|  92|  92| 			return true;
|  93|  93| 	}
|  94|  94| 

binaries/data/mods/public/globalscripts/Templates.js
|  91| »   »   ····················||·(c[0]·!=·"!"·&&·classes.indexOf(c)·!=·-1)))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '||'; readers may interpret this as an expression boundary.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  57|  57| var g_NumPlayersList = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1);
|  58|  58| 
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|    |-		"label": translateWithContext("team", "None"),
|    |  60|+	"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  58|  58| 
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|    |-		"id": -1
|    |  61|+	"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  59|  59| var g_PlayerTeamList = prepareForDropdown([{
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|    |-	}].concat(
|    |  62|+}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  60|  60| 		"label": translateWithContext("team", "None"),
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|    |-		Array(g_MaxTeams).fill(0).map((v, i) => ({
|    |  63|+	Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  61|  61| 		"id": -1
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|    |-			"label": i + 1,
|    |  64|+		"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|  67|  67| 	)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  62|  62| 	}].concat(
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|    |-			"id": i
|    |  65|+		"id": i
|  66|  66| 		}))
|  67|  67| 	)
|  68|  68| );
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  63|  63| 		Array(g_MaxTeams).fill(0).map((v, i) => ({
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|    |-		}))
|    |  66|+	}))
|  67|  67| 	)
|  68|  68| );
|  69|  69| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  64|  64| 			"label": i + 1,
|  65|  65| 			"id": i
|  66|  66| 		}))
|  67|    |-	)
|    |  67|+)
|  68|  68| );
|  69|  69| 
|  70|  70| /**
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  73|  73| var g_RelicCountList = Object.keys(g_CivData).map((civ, i) => i + 1);
|  74|  74| 
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|    |-		"name": translateWithContext("civilization", "Random"),
|    |  76|+	"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  74|  74| 
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|    |-		"tooltip": translate("Picks one civilization at random when the game starts."),
|    |  77|+	"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  75|  75| var g_PlayerCivList = g_CivData && prepareForDropdown([{
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|    |-		"color": g_ColorRandom,
|    |  78|+	"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  76|  76| 		"name": translateWithContext("civilization", "Random"),
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|    |-		"code": "random"
|    |  79|+	"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  77|  77| 		"tooltip": translate("Picks one civilization at random when the game starts."),
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|    |-	}].concat(
|    |  80|+}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  78|  78| 		"color": g_ColorRandom,
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|    |-		Object.keys(g_CivData).filter(
|    |  81|+	Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  79|  79| 		"code": "random"
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|    |-			civ => g_CivData[civ].SelectableInGameSetup
|    |  82|+		civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  80|  80| 	}].concat(
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|    |-		).map(civ => ({
|    |  83|+	).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  81|  81| 		Object.keys(g_CivData).filter(
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|    |-			"name": g_CivData[civ].Name,
|    |  84|+		"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  82|  82| 			civ => g_CivData[civ].SelectableInGameSetup
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|    |-			"tooltip": g_CivData[civ].History,
|    |  85|+		"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  83|  83| 		).map(civ => ({
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|    |-			"color": g_ColorRegular,
|    |  86|+		"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  84|  84| 			"name": g_CivData[civ].Name,
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|    |-			"code": civ
|    |  87|+		"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|  90|  90| );
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  85|  85| 			"tooltip": g_CivData[civ].History,
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|    |-		})).sort(sortNameIgnoreCase)
|    |  88|+	})).sort(sortNameIgnoreCase)
|  89|  89| 	)
|  90|  90| );
|  91|  91| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 0 tabs but found 1.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|  86|  86| 			"color": g_ColorRegular,
|  87|  87| 			"code": civ
|  88|  88| 		})).sort(sortNameIgnoreCase)
|  89|    |-	)
|    |  89|+)
|  90|  90| );
|  91|  91| 
|  92|  92| /**
|    | [NORMAL] ESLintBear (no-trailing-spaces):
|    | Trailing spaces not allowed.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.js
|1323|1323| 			offset = -Math.min(slideSpeed * dt, maxOffset);
|1324|1324| 	}
|1325|1325| 
|1326|    |-	updateSettingsPanelPosition(offset);	
|    |1326|+	updateSettingsPanelPosition(offset);
|1327|1327| }
|1328|1328| 
|1329|1329| /**

binaries/data/mods/public/gui/gamesetup/gamesetup.js
|2389| »   »   »   »   pData·=>·pData.Name·&&·pData.Name.indexOf(chosenName)·!=·-1).length;
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'pData' is already declared in the upper scope.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/899/display/redirect

All civilizations have at least eight different AI names, so why do we need these numerals?

binaries/data/mods/public/simulation/data/civs/athen.json
171–181

This appears to be the same for all civilizations; why not specify it somewhere else once, instead of in every {civ}.json file?

elexis added a comment.Oct 3 2019, 5:45 PM
In D2348#98272, @Nescio wrote:

All civilizations have at least eight different AI names, so why do we need these numerals?

-> https://code.wildfiregames.com/D2348#98197

  1. For 0ad it doesnt seem so unlikely to support more than 8 players.
  2. For mods it doesnt seem so unlikely that they specify less than maxplayer names for every civ.

Its just a deduplication mechanism, two players with the same name is something that should never happen, and the algorithm does that.

binaries/data/mods/public/simulation/data/civs/athen.json
171–181

Its only the same because I didnt do the history research.
I doubt celts were using roman numbers.
That's how you ended up in the subscriber list :S

Nescio added a comment.Oct 3 2019, 7:40 PM

Also, as @Stan pointed out, e.g Arsinoe II II looks weird.

binaries/data/mods/public/simulation/data/civs/athen.json
171–181

Celts didn't, but neither did Romans. Regnal numbers are a later historiographic convention.
Nor did Greeks, Persians, etc. use the Latin alphabet. 0 A.D. does (and rightly so), because it caters to a 21st C audience.

If AINameNumbers are specified in the {civ}.json files, then all mods will have to be updated.
Furthermore, if the number of players per map were to be increased, then all civ files and mods will have to be updated again.
Duplication could be reduced by only specifying an option which numerals should be chosen:

  • Arabic (1, 2, 3, ...)
  • Roman (I, II, III, ...)
  • Greek (A', B', G', ...)