Page MenuHomeWildfire Games

GuiInterface TimeNotifications fixes and cleanup
Needs ReviewPublic

Authored by elexis on Nov 6 2019, 9:26 PM.
This revision needs review, but there are no reviewers specified.

Details

Reviewers
None
Summary

This diff performs fixes and cleanup of defects discovered in the course of rP23137/D2407:

Fix rP14991 rename "aichat" to "chat", since its used by AI, maps and human players.
Fix rP15866 delete unused translateMessage in PETRA chatHelper
Fix rP15866 delete invalid translation of strings that are botnames translated in the gamesetup (rP14954) or should not be translated (rP17382) and colorized in the session (rP16533).
Fix rP17789 delete unused translateMessage in developer open message
Fix rP17796 delete unused translateMessage in promotion cheat
Fix rP18467 missing translateMessage for "upgrade" simulation command
Fix rP23114 translate -> translateWithContext for ReplayOutOfSync.

Changes:

1.a. Delete unused translateMessage property from "aichat" commands.
1.b. Delete translateMessage property from GuiInterface TimeNotification and always translate GuiInterface TimeNotifications.
1.b. Rename "aichat" to "chat", since it is also used by cheating human players and map scripts.

2.a. Do not translate AI names in multiplayer matches for TimeNotifications and simulation chat.
2.b. Do not use startsWith("_player_") to test if a translated parameter should be a colorized playerID.

Achieve these two changes by passing the playerIDs in a separate playerParameters object instead of mixing that in with translatable sprintf arguments.

3.a. Create TimeNotifications exclusively with PushTimeNotification by replacing the AddNotification calls with type == undefined or type == "text" with PushTimeNotification calls.

This allows searching for all TimeNotifications globally without having to read and infer the results of code.

3.b. Rename AddNotification to PushNotification for consistency.
3.c. Construct the GUIInterface notification JS objects inside the PushNotification/PushTimeNotification call.

This allows the reader to determine solely from from the Push statement which properties will be sent.
This makes it more obvious to the reader if there are wrong properties being sent (i.e. avoids repetition of the wrong property mistakes rectified in this diff).
  1. Let BuildRestrictions construct a valid TimeNotification object if and only if it is being read. Don't construct an object otherwise, especially do not construct an invalid TimeNotification object. Achieve this by removing the "success" property which is not a TimeNotification property and only used by BuildRestriction code. Replace it by testing success for the lack of a TimeNotification. If someone wants to return a TimeNotification on success, they may return do so by storing the success boolean outside of the TimeNotification (for instance by creating a new object).
  1. Delete emtpy "translateParameters", "parameters" objects.
  1. Change 12 hour Last-Man-Standing TimeNotification timeout to Infinity.
  1. Support pluralTranslation for TimeNotification. Achieve this and remove duplication by using the new translateNotification. Consider D1613 for the 4 resource string limit.
Test Plan
  • Make sure that all CheckPlacement calls have the return parsing removed.
  • Pay special attention to the translateNotification code.
  • Consider/test the Infinity case. Test serialization of Infinity.
  • Make sure all %(time)s arguments work, that the case is handled correctly where parameters=undefined but string contains %(time)s.
  • Do the mindless work to test every modified notification to verify correctness.

Event Timeline

elexis created this revision.Nov 6 2019, 9:26 PM
elexis retitled this revision from GuiInterface notifications cleanup to GuiInterface TimeNotifications fixes and cleanup.Nov 6 2019, 9:27 PM
Vulcan added a comment.Nov 6 2019, 9:28 PM

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

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

Vulcan added a comment.Nov 6 2019, 9:33 PM

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 121| 121| EntityLimits.prototype.UpdateLimitsFromTech = function(tech)
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124|    |-		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
|    | 124|+		if ("RequiredTechs" in this.removers[category] && this.removers[category].RequiredTechs.indexOf(tech) !== -1)
| 125| 125| 			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category].RequiredTechs.splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category]["RequiredTechs"].splice(this.removers[category].RequiredTechs.indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 133| 133| 	{
| 134| 134| 		var nolimit = true;
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136|    |-			nolimit = !this.removers[category]["RequiredTechs"].length;
|    | 136|+			nolimit = !this.removers[category].RequiredTechs.length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138| 138| 			for (var cls of this.removers[category]["RequiredClasses"])
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136| 136| 			nolimit = !this.removers[category]["RequiredTechs"].length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 138|+			for (var cls of this.removers[category].RequiredClasses)
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
| 140| 140| 
| 141| 141| 		if (nolimit && this.limit[category] !== undefined)
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 268| 268| 
| 269| 269| 	for (var category in this.removers)
| 270| 270| 		if ("RequiredClasses" in this.removers[category])
| 271|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 271|+			for (var cls of this.removers[category].RequiredClasses)
| 272| 272| 				if (classes.indexOf(cls) !== -1)
| 273| 273| 					this.classCount[cls] += modifier;
| 274| 274| 

binaries/data/mods/public/simulation/components/EntityLimits.js
|  89| »   »   »   for·(var·c·in·this.template.LimitRemovers[category])
|    | [NORMAL] JSHintBear:
|    | 'c' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 124| »   »   if·("RequiredTechs"·in·this.removers[category]·&&·this.removers[category]["RequiredTechs"].indexOf(tech)·!==·-1)
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 136| »   »   »   nolimit·=·!this.removers[category]["RequiredTechs"].length;
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 138| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 234| »   »   var·modifier·=·1;
|    | [NORMAL] JSHintBear:
|    | 'modifier' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 259| »   for·(var·category·in·this.changers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 269| »   for·(var·category·in·this.removers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 271| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 247| »   »   this.ChangeCount(category,·modifier);
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 264| »   »   »   »   »   this.limit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 266| »   »   »   »   »   this.removedLimit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 273| »   »   »   »   »   this.classCount[cls]·+=·modifier;
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/helpers/Transform.js
| 209| »   »   »   »   for·(let·ent·of·cmpNewObstruction.GetEntitiesDeletedUponConstruction())
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'ent' is already declared in the upper scope.
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
| 532| 532| 			if (cmpGarrisonHolder)
| 533| 533| 			{
| 534| 534| 				// Only the owner of the garrisonHolder may unload entities from any owners
| 535|    |-				if (!IsOwnedByPlayer(player, garrisonHolder) && !data.controlAllUnits
| 536|    |-				    && player != +cmd.owner)
|    | 535|+				if (!IsOwnedByPlayer(player, garrisonHolder) && !data.controlAllUnits &&
|    | 536|+				    player != +cmd.owner)
| 537| 537| 						continue;
| 538| 538| 
| 539| 539| 				if (!cmpGarrisonHolder.UnloadTemplate(cmd.template, cmd.owner, cmd.all))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
| 534| 534| 				// Only the owner of the garrisonHolder may unload entities from any owners
| 535| 535| 				if (!IsOwnedByPlayer(player, garrisonHolder) && !data.controlAllUnits
| 536| 536| 				    && player != +cmd.owner)
| 537|    |-						continue;
|    | 537|+					continue;
| 538| 538| 
| 539| 539| 				if (!cmpGarrisonHolder.UnloadTemplate(cmd.template, cmd.owner, cmd.all))
| 540| 540| 					notifyUnloadFailure(player, garrisonHolder);
|    | [NORMAL] ESLintBear (key-spacing):
|    | Extra space after key 'metadata'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1128|1128| 
|1129|1129| 	// send Metadata info if any
|1130|1130| 	if (cmd.metadata)
|1131|    |-		Engine.PostMessage(ent, MT_AIMetadata, { "id": ent, "metadata" : cmd.metadata, "owner" : player } );
|    |1131|+		Engine.PostMessage(ent, MT_AIMetadata, { "id": ent, "metadata": cmd.metadata, "owner" : player } );
|1132|1132| 
|1133|1133| 	// Tell the units to start building this new entity
|1134|1134| 	if (cmd.autorepair)
|    | [NORMAL] ESLintBear (key-spacing):
|    | Extra space after key 'owner'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1128|1128| 
|1129|1129| 	// send Metadata info if any
|1130|1130| 	if (cmd.metadata)
|1131|    |-		Engine.PostMessage(ent, MT_AIMetadata, { "id": ent, "metadata" : cmd.metadata, "owner" : player } );
|    |1131|+		Engine.PostMessage(ent, MT_AIMetadata, { "id": ent, "metadata" : cmd.metadata, "owner": player } );
|1132|1132| 
|1133|1133| 	// Tell the units to start building this new entity
|1134|1134| 	if (cmd.autorepair)
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1128|1128| 
|1129|1129| 	// send Metadata info if any
|1130|1130| 	if (cmd.metadata)
|1131|    |-		Engine.PostMessage(ent, MT_AIMetadata, { "id": ent, "metadata" : cmd.metadata, "owner" : player } );
|    |1131|+		Engine.PostMessage(ent, MT_AIMetadata, { "id": ent, "metadata" : cmd.metadata, "owner" : player });
|1132|1132| 
|1133|1133| 	// Tell the units to start building this new entity
|1134|1134| 	if (cmd.autorepair)
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1236|1236| 		}
|1237|1237| 
|1238|1238| 		lastTowerControlGroup = cmpSnappedStartObstruction.GetControlGroup();
|1239|    |-		//warn("setting lastTowerControlGroup to control group of start snapped entity " + cmd.startSnappedEntity + ": " + lastTowerControlGroup);
|    |1239|+		// warn("setting lastTowerControlGroup to control group of start snapped entity " + cmd.startSnappedEntity + ": " + lastTowerControlGroup);
|1240|1240| 	}
|1241|1241| 
|1242|1242| 	var i = 0;
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1300|1300| 
|1301|1301| 				if (i > 0)
|1302|1302| 				{
|1303|    |-					//warn("   updating previous wall piece's secondary control group to " + newTowerControlGroup);
|    |1303|+					// warn("   updating previous wall piece's secondary control group to " + newTowerControlGroup);
|1304|1304| 					var cmpPreviousObstruction = Engine.QueryInterface(pieces[i-1].ent, IID_Obstruction);
|1305|1305| 					// TODO: ensure that cmpPreviousObstruction exists
|1306|1306| 					// TODO: ensure that the previous obstruction does not yet have a secondary control group set
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1463|1463| 		// Check that all its members are selected
|1464|1464| 		var fid = formationIds[0];
|1465|1465| 		var cmpFormation = Engine.QueryInterface(+fid, IID_Formation);
|1466|    |-		if (cmpFormation && cmpFormation.GetMemberCount() == formation.members[fid].length
|1467|    |-			&& cmpFormation.GetMemberCount() == formation.entities.length)
|    |1466|+		if (cmpFormation && cmpFormation.GetMemberCount() == formation.members[fid].length &&
|    |1467|+			cmpFormation.GetMemberCount() == formation.entities.length)
|1468|1468| 		{
|1469|1469| 			cmpFormation.DeleteTwinFormations();
|1470|1470| 			// The whole formation was selected, so reuse its controller for this command
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1571|1571| 		for (var i = matrix.length - 1; i >= 0 && !closeClusters; --i)
|1572|1572| 			for (var j = i - 1; j >= 0 && !closeClusters; --j)
|1573|1573| 				if (matrix[i][j] < distSq)
|1574|    |-					closeClusters = [i,j];
|    |1574|+					closeClusters = [i, j];
|1575|1575| 
|1576|1576| 		// if no more close clusters found, just return all found clusters so far
|1577|1577| 		if (!closeClusters)
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1593|1593| 		}
|1594|1594| 		// remove the rows and columns in the matrix for the merged clusters,
|1595|1595| 		// and the clusters themselves from the cluster list
|1596|    |-		clusters.splice(closeClusters[0],1);
|    |1596|+		clusters.splice(closeClusters[0], 1);
|1597|1597| 		clusters.splice(closeClusters[1],1);
|1598|1598| 		matrix.splice(closeClusters[0],1);
|1599|1599| 		matrix.splice(closeClusters[1],1);
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1594|1594| 		// remove the rows and columns in the matrix for the merged clusters,
|1595|1595| 		// and the clusters themselves from the cluster list
|1596|1596| 		clusters.splice(closeClusters[0],1);
|1597|    |-		clusters.splice(closeClusters[1],1);
|    |1597|+		clusters.splice(closeClusters[1], 1);
|1598|1598| 		matrix.splice(closeClusters[0],1);
|1599|1599| 		matrix.splice(closeClusters[1],1);
|1600|1600| 		for (let i = 0; i < matrix.length; ++i)
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1595|1595| 		// and the clusters themselves from the cluster list
|1596|1596| 		clusters.splice(closeClusters[0],1);
|1597|1597| 		clusters.splice(closeClusters[1],1);
|1598|    |-		matrix.splice(closeClusters[0],1);
|    |1598|+		matrix.splice(closeClusters[0], 1);
|1599|1599| 		matrix.splice(closeClusters[1],1);
|1600|1600| 		for (let i = 0; i < matrix.length; ++i)
|1601|1601| 		{
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1596|1596| 		clusters.splice(closeClusters[0],1);
|1597|1597| 		clusters.splice(closeClusters[1],1);
|1598|1598| 		matrix.splice(closeClusters[0],1);
|1599|    |-		matrix.splice(closeClusters[1],1);
|    |1599|+		matrix.splice(closeClusters[1], 1);
|1600|1600| 		for (let i = 0; i < matrix.length; ++i)
|1601|1601| 		{
|1602|1602| 			if (matrix[i].length > closeClusters[0])
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1600|1600| 		for (let i = 0; i < matrix.length; ++i)
|1601|1601| 		{
|1602|1602| 			if (matrix[i].length > closeClusters[0])
|1603|    |-				matrix[i].splice(closeClusters[0],1);
|    |1603|+				matrix[i].splice(closeClusters[0], 1);
|1604|1604| 			if (matrix[i].length > closeClusters[1])
|1605|1605| 				matrix[i].splice(closeClusters[1],1);
|1606|1606| 		}
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Commands.js
|1602|1602| 			if (matrix[i].length > closeClusters[0])
|1603|1603| 				matrix[i].splice(closeClusters[0],1);
|1604|1604| 			if (matrix[i].length > closeClusters[1])
|1605|    |-				matrix[i].splice(closeClusters[1],1);
|    |1605|+				matrix[i].splice(closeClusters[1], 1);
|1606|1606| 		}
|1607|1607| 		// add a new row of distances to the matrix and the new cluster
|1608|1608| 		clusters.push(newCluster);

binaries/data/mods/public/simulation/helpers/Commands.js
|  44| »   if·(g_Commands[cmd.type])
|    | [MAJOR] ESLintBear (no-use-before-define):
|    | 'g_Commands' was used before it was defined.

binaries/data/mods/public/simulation/helpers/Commands.js
|  48| »   »   g_Commands[cmd.type](player,·cmd,·data);
|    | [MAJOR] ESLintBear (no-use-before-define):
|    | 'g_Commands' was used before it was defined.

binaries/data/mods/public/simulation/helpers/Commands.js
| 782| »   »   let·ent·=·pickRandom(cmpRangeManager.GetEntitiesByPlayer(cmd.player).filter(ent·=>·{
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'ent' is already declared in the upper scope.

binaries/data/mods/public/simulation/helpers/Commands.js
|1259| ····»   »   »   error("[TryConstructWall]·Expected·last·tower·control·group·to·be·available,·none·found·(1st·pass,·iteration·"·+·i·+·")");
|    | [NORMAL] ESLintBear (no-mixed-spaces-and-tabs):
|    | Mixed spaces and tabs.

binaries/data/mods/public/simulation/helpers/Commands.js
|1260| ····»   »   »   break;
|    | [NORMAL] ESLintBear (no-mixed-spaces-and-tabs):
|    | Mixed spaces and tabs.

binaries/data/mods/public/simulation/helpers/Commands.js
|1490| »   »   »   »   var·lastFormationTemplate·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'lastFormationTemplate' to undefined.

binaries/data/mods/public/simulation/helpers/Commands.js
|1569| »   »   var·closeClusters·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'closeClusters' to undefined.

binaries/data/mods/public/simulation/helpers/Commands.js
|1586| »   »   for·(let·i·=·0;·i·<·clusters.length;·++i)
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'i' is already declared in the upper scope.

binaries/data/mods/public/simulation/helpers/Commands.js
|1600| »   »   for·(let·i·=·0;·i·<·matrix.length;·++i)
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'i' is already declared in the upper scope.

binaries/data/mods/public/simulation/helpers/Commands.js
|  54| var·g_Commands·=·{
|    | [NORMAL] JSHintBear:
|    | 'g_Commands' was used before it was defined.

binaries/data/mods/public/simulation/helpers/Commands.js
| 536| »   »   »   »   ····&&·player·!=·+cmd.owner)
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/helpers/Commands.js
| 723| »   »   »   »   var·cmpGUIInterface·=·Engine.QueryInterface(SYSTEM_ENTITY,·IID_GuiInterface);
|    | [NORMAL] JSHintBear:
|    | 'cmpGUIInterface' is already defined.

binaries/data/mods/public/simulation/helpers/Commands.js
| 935| »   »   for·(var·i·=·0;·i·<·length;·++i)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/helpers/Commands.js
| 948| »   »   var·count·=·0;
|    | [NORMAL] JSHintBear:
|    | 'count' is already defined.

binaries/data/mods/public/simulation/helpers/Commands.js
|1095| »   »   var·cmpGuiInterface·=·Engine.QueryInterface(SYSTEM_ENTITY,·IID_GuiInterface);
|    | [NORMAL] JSHintBear:
|    | 'cmpGuiInterface' is already defined.

binaries/data/mods/public/simulation/helpers/Commands.js
|1345| »   »   var·piece·=·pieces[j];
|    | [NORMAL] JSHintBear:
|    | 'piece' is already defined.

binaries/data/mods/public/simulation/helpers/Commands.js
|1428| »   »   var·cmpUnitAI·=·Engine.QueryInterface(ent,·IID_UnitAI);
|    | [NORMAL] JSHintBear:
|    | 'cmpUnitAI' is already defined.

binaries/data/mods/public/simulation/helpers/Commands.js
|1467| »   »   »   &&·cmpFormation.GetMemberCount()·==·formation.entities.length)
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/helpers/Commands.js
|1493| »   »   »   »   »   var·cmpUnitAI·=·Engine.QueryInterface(ent,·IID_UnitAI);
|    | [NORMAL] JSHintBear:
|    | 'cmpUnitAI' is already defined.

binaries/data/mods/public/simulation/helpers/Commands.js
|1526| »   »   »   var·cmpFormation·=·Engine.QueryInterface(formationEnt,·IID_Formation);
|    | [NORMAL] JSHintBear:
|    | 'cmpFormation' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 130| »   »   switch·(ret)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 232| »   »   let·cmpRangeManager·=·Engine.QueryInterface(SYSTEM_ENTITY,·IID_RangeManager);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'cmpRangeManager' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 233| »   »   let·cmpPlayer·=·QueryOwnerInterface(this.entity,·IID_Player);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'cmpPlayer' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 237| »   »   »   let·cmpIdentity·=·Engine.QueryInterface(id,·IID_Identity);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'cmpIdentity' is already declared in the upper scope.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/messages.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/messages.js
| 338| 338| 	let notificationText =
| 339| 339| 		notification.instructions.reduce((instructions, item) =>
| 340| 340| 			instructions + (typeof item == "string" ? translate(item) : colorizeHotkey(translate(item.text), item.hotkey)),
| 341|    |-			"");
|    | 341|+		"");
| 342| 342| 
| 343| 343| 	Engine.GetGUIObjectByName("tutorialText").caption = g_TutorialMessages.concat(setStringTags(notificationText, g_TutorialNewMessageTags)).join("\n");
| 344| 344| 	g_TutorialMessages.push(notificationText);

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 772| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 755| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 769| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/CeasefireManager.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/CeasefireManager.js
|  96|  96| {
|  97|  97| 	let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  98|  98| 	this.ceasefireCountdownMessage = cmpGuiInterface.PushTimeNotification({
|  99|    |-			"message": markForTranslation("You can attack in %(time)s"),
|    |  99|+		"message": markForTranslation("You can attack in %(time)s"),
| 100| 100| 			"timeParameter": true
| 101| 101| 		}, this.countdownMessageDuration);
| 102| 102| };
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/CeasefireManager.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/CeasefireManager.js
|  97|  97| 	let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  98|  98| 	this.ceasefireCountdownMessage = cmpGuiInterface.PushTimeNotification({
|  99|  99| 			"message": markForTranslation("You can attack in %(time)s"),
| 100|    |-			"timeParameter": true
|    | 100|+		"timeParameter": true
| 101| 101| 		}, this.countdownMessageDuration);
| 102| 102| };
| 103| 103| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/CeasefireManager.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/CeasefireManager.js
|  98|  98| 	this.ceasefireCountdownMessage = cmpGuiInterface.PushTimeNotification({
|  99|  99| 			"message": markForTranslation("You can attack in %(time)s"),
| 100| 100| 			"timeParameter": true
| 101|    |-		}, this.countdownMessageDuration);
|    | 101|+	}, this.countdownMessageDuration);
| 102| 102| };
| 103| 103| 
| 104| 104| CeasefireManager.prototype.StopCeasefire = function()
|    | [NORMAL] ESLintBear (no-trailing-spaces):
|    | Trailing spaces not allowed.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/TimeNotificationOverlay.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/TimeNotificationOverlay.js
|   7|   7| 	constructor(playerViewControl)
|   8|   8| 	{
|   9|   9| 		this.notificationText = Engine.GetGUIObjectByName("notificationText");
|  10|    |-		
|    |  10|+
|  11|  11| 		registerSimulationUpdateHandler(this.rebuild.bind(this));
|  12|  12| 		playerViewControl.registerViewedPlayerChangeHandler(this.rebuild.bind(this));
|  13|  13| 	}
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|   1|   1| warn("loading the triggers file");
|   2|   2| 
|   3|    |-///////////////////////
|    |   3|+// /////////////////////
|   4|   4| // Trigger listeners //
|   5|   5| ///////////////////////
|   6|   6| 
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|   2|   2| 
|   3|   3| ///////////////////////
|   4|   4| // Trigger listeners //
|   5|    |-///////////////////////
|    |   5|+// /////////////////////
|   6|   6| 
|   7|   7| // every function just logs when it gets fired, and shows the data
|   8|   8| Trigger.prototype.StructureBuiltAction = function(data)
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|  65|  65| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  66|  66| 	cmpGUIInterface.PushNotification({
|  67|  67| 		"type": "dialog",
|  68|    |-		"players": [1,2,3,4,5,6,7,8],
|    |  68|+		"players": [1, 2,3,4,5,6,7,8],
|  69|  69| 		"dialogName": "yes-no",
|  70|  70| 		"data": {
|  71|  71| 			"text": {
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|  65|  65| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  66|  66| 	cmpGUIInterface.PushNotification({
|  67|  67| 		"type": "dialog",
|  68|    |-		"players": [1,2,3,4,5,6,7,8],
|    |  68|+		"players": [1,2, 3,4,5,6,7,8],
|  69|  69| 		"dialogName": "yes-no",
|  70|  70| 		"data": {
|  71|  71| 			"text": {
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|  65|  65| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  66|  66| 	cmpGUIInterface.PushNotification({
|  67|  67| 		"type": "dialog",
|  68|    |-		"players": [1,2,3,4,5,6,7,8],
|    |  68|+		"players": [1,2,3, 4,5,6,7,8],
|  69|  69| 		"dialogName": "yes-no",
|  70|  70| 		"data": {
|  71|  71| 			"text": {
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|  65|  65| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  66|  66| 	cmpGUIInterface.PushNotification({
|  67|  67| 		"type": "dialog",
|  68|    |-		"players": [1,2,3,4,5,6,7,8],
|    |  68|+		"players": [1,2,3,4, 5,6,7,8],
|  69|  69| 		"dialogName": "yes-no",
|  70|  70| 		"data": {
|  71|  71| 			"text": {
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|  65|  65| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  66|  66| 	cmpGUIInterface.PushNotification({
|  67|  67| 		"type": "dialog",
|  68|    |-		"players": [1,2,3,4,5,6,7,8],
|    |  68|+		"players": [1,2,3,4,5, 6,7,8],
|  69|  69| 		"dialogName": "yes-no",
|  70|  70| 		"data": {
|  71|  71| 			"text": {
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|  65|  65| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  66|  66| 	cmpGUIInterface.PushNotification({
|  67|  67| 		"type": "dialog",
|  68|    |-		"players": [1,2,3,4,5,6,7,8],
|    |  68|+		"players": [1,2,3,4,5,6, 7,8],
|  69|  69| 		"dialogName": "yes-no",
|  70|  70| 		"data": {
|  71|  71| 			"text": {
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Triggers_demo.js
|  65|  65| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  66|  66| 	cmpGUIInterface.PushNotification({
|  67|  67| 		"type": "dialog",
|  68|    |-		"players": [1,2,3,4,5,6,7,8],
|    |  68|+		"players": [1,2,3,4,5,6,7, 8],
|  69|  69| 		"dialogName": "yes-no",
|  70|  70| 		"data": {
|  71|  71| 			"text": {
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 8 spaces.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_ProductionQueue.js
|   1|   1| Resources = {
|   2|    |-        "BuildSchema": (a, b) => {}
|    |   2|+	"BuildSchema": (a, b) => {}
|   3|   3| };
|   4|   4| 
|   5|   5| Engine.LoadHelperScript("Player.js");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 67 spaces.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_ProductionQueue.js
| 120| 120| 	["units/athen_cavalry_javelinist_b", "units/iber_support_female_citizen"]
| 121| 121| );
| 122| 122| TS_ASSERT_UNEVAL_EQUALS(cmpProductionQueue.GetTechnologiesList(), ["phase_town_athen",
| 123|    |-                                                                   "phase_city_athen"]
|    | 123|+	"phase_city_athen"]
| 124| 124| );
| 125| 125| 
| 126| 126| AddMock(playerEntityID, IID_TechnologyManager, {
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|   5|   5| 
|   6|   6| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|   7|   7| 	cmpGUIInterface.PushTimeNotification({
|   8|    |-		"players": [1,2],
|    |   8|+		"players": [1, 2],
|   9|   9| 		"message": markForTranslation("Collect the treasures before your enemy does! May the better win!")
|  10|  10| 	});
|  11|  11| };
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|  19|  19| 	var otherPlayer = (data.player == 1 ? 2 : 1);
|  20|  20| 
|  21|  21| 	// Check if having more treasures than the enemy is still possible
|  22|    |-	if ( (count == this.treasureCount.maximum / 2) &&
|    |  22|+	if ((count == this.treasureCount.maximum / 2) &&
|  23|  23| 		(this.treasureCount.players[otherPlayer] == this.treasureCount.maximum / 2) )
|  24|  24| 	{
|  25|  25| 		cmpGUIInterface.PushTimeNotification({
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|  20|  20| 
|  21|  21| 	// Check if having more treasures than the enemy is still possible
|  22|  22| 	if ( (count == this.treasureCount.maximum / 2) &&
|  23|    |-		(this.treasureCount.players[otherPlayer] == this.treasureCount.maximum / 2) )
|    |  23|+		(this.treasureCount.players[otherPlayer] == this.treasureCount.maximum / 2))
|  24|  24| 	{
|  25|  25| 		cmpGUIInterface.PushTimeNotification({
|  26|  26| 			"players": [1,2],
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|  23|  23| 		(this.treasureCount.players[otherPlayer] == this.treasureCount.maximum / 2) )
|  24|  24| 	{
|  25|  25| 		cmpGUIInterface.PushTimeNotification({
|  26|    |-			"players": [1,2],
|    |  26|+			"players": [1, 2],
|  27|  27| 			"message": markForTranslation("No winner yet, prepare for battle!")
|  28|  28| 		});
|  29|  29| 
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|  59|  59| 
|  60|  60| 		if (count + 3 >= goalCount)
|  61|  61| 		{
|  62|    |-			var remainingTreasures = ( goalCount - count);
|    |  62|+			var remainingTreasures = (goalCount - count);
|  63|  63| 			cmpGUIInterface.PushTimeNotification({
|  64|  64| 				"players": [data.player],
|  65|  65| 				"message": markForTranslation("Treasures remaining to collect for victory:  %(remainingTreasures)s!"),
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|  82|  82| {
|  83|  83| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|  84|  84| 	cmpGUIInterface.PushTimeNotification({
|  85|    |-		"players": [1,2],
|    |  85|+		"players": [1, 2],
|  86|  86| 		"message": markForTranslation("Defeat your enemy to win!")
|  87|  87| 	});
|  88|  88| };
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key '1'.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
| 104| 104| var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
| 105| 105| 
| 106| 106| // TODO: It would be nice to get the total number of treasure on the map automatically somehow
| 107|    |-cmpTrigger.treasureCount = { "players": { "1":0,"2":0 }, "maximum": 36 };
|    | 107|+cmpTrigger.treasureCount = { "players": { "1": 0,"2":0 }, "maximum": 36 };
| 108| 108| cmpTrigger.state = "start";
| 109| 109| cmpTrigger.DoAfterDelay(2000, "IntroductionMessage", {});
| 110| 110| cmpTrigger.RegisterTrigger("OnTreasureCollected", "TreasureCollected", { "enabled": true });
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
| 104| 104| var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
| 105| 105| 
| 106| 106| // TODO: It would be nice to get the total number of treasure on the map automatically somehow
| 107|    |-cmpTrigger.treasureCount = { "players": { "1":0,"2":0 }, "maximum": 36 };
|    | 107|+cmpTrigger.treasureCount = { "players": { "1":0, "2":0 }, "maximum": 36 };
| 108| 108| cmpTrigger.state = "start";
| 109| 109| cmpTrigger.DoAfterDelay(2000, "IntroductionMessage", {});
| 110| 110| cmpTrigger.RegisterTrigger("OnTreasureCollected", "TreasureCollected", { "enabled": true });
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key '2'.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/treasure_islands.js
| 104| 104| var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
| 105| 105| 
| 106| 106| // TODO: It would be nice to get the total number of treasure on the map automatically somehow
| 107|    |-cmpTrigger.treasureCount = { "players": { "1":0,"2":0 }, "maximum": 36 };
|    | 107|+cmpTrigger.treasureCount = { "players": { "1":0,"2": 0 }, "maximum": 36 };
| 108| 108| cmpTrigger.state = "start";
| 109| 109| cmpTrigger.DoAfterDelay(2000, "IntroductionMessage", {});
| 110| 110| cmpTrigger.RegisterTrigger("OnTreasureCollected", "TreasureCollected", { "enabled": true });
|    | [NORMAL] ESLintBear (no-trailing-spaces):
|    | Trailing spaces not allowed.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Cinema_Demo.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scenarios/Cinema_Demo.js
|   2|   2| {
|   3|   3| 	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|   4|   4| 	cmpGUIInterface.PushTimeNotification({
|   5|    |-		"players": [1, 2], 
|    |   5|+		"players": [1, 2],
|   6|   6| 		"message": markForTranslation("Cutscene starts after 5 seconds")
|   7|   7| 	});
|   8|   8| };
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 0.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_EntityLimits.js
|  44|  44| {
|  45|  45| 	AddMock(ent, IID_TrainingRestrictions, {
|  46|  46| 		"GetCategory": () => "Hero"
|  47|    |-});
|    |  47|+	});
|  48|  48| }
|  49|  49| 
|  50|  50| cmpEntityLimits.OnGlobalOwnershipChanged({ "entity": 60, "from": INVALID_PLAYER, "to": 1 });

binaries/data/mods/public/simulation/helpers/Cheat.js
| 108| »   »   var·cmpTechnologyManager·=·Engine.QueryInterface(playerEnt,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.

binaries/data/mods/public/simulation/helpers/Cheat.js
| 115| »   »   »   var·cmpProductionQueue·=·Engine.QueryInterface(input.selected[0],·IID_ProductionQueue);
|    | [NORMAL] JSHintBear:
|    | 'cmpProductionQueue' is already defined.
|    | [NORMAL] ESLintBear (space-unary-ops):
|    | Unary word operator 'typeof' must be followed by whitespace.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 313| 313| 	}
| 314| 314| 
| 315| 315| 	var wallPlacementInfo = updateBuildingPlacementPreview(); // entities making up the wall (wall segments, towers, ...)
| 316|    |-	if (!(wallPlacementInfo === false || typeof(wallPlacementInfo) === "object"))
|    | 316|+	if (!(wallPlacementInfo === false || typeof (wallPlacementInfo) === "object"))
| 317| 317| 	{
| 318| 318| 		error("Invalid updateBuildingPlacementPreview return value: " + uneval(wallPlacementInfo));
| 319| 319| 		return false;
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 463| 463| 	mouseIsOverObject = (hoveredObject != null);
| 464| 464| 
| 465| 465| 	// Close the menu when interacting with the game world
| 466|    |-	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown")
| 467|    |-		&& (ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
|    | 466|+	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown") &&
|    | 467|+		(ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
| 468| 468| 		g_Menu.close();
| 469| 469| 
| 470| 470| 	// State-machine processing:
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 624| 624| 		// user to continue building walls.
| 625| 625| 		switch (ev.type)
| 626| 626| 		{
| 627|    |-			case "mousemotion":
|    | 627|+		case "mousemotion":
| 628| 628| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 629| 629| 
| 630| 630| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 625| 625| 		switch (ev.type)
| 626| 626| 		{
| 627| 627| 			case "mousemotion":
| 628|    |-				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
|    | 628|+			placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 629| 629| 
| 630| 630| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 631| 631| 				// the ending point and the starting point to snap to.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 627| 627| 			case "mousemotion":
| 628| 628| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 629| 629| 
| 630|    |-				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | 630|+			// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 631| 631| 				// the ending point and the starting point to snap to.
| 632| 632| 				//
| 633| 633| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 628| 628| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 629| 629| 
| 630| 630| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 631|    |-				// the ending point and the starting point to snap to.
|    | 631|+			// the ending point and the starting point to snap to.
| 632| 632| 				//
| 633| 633| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 634| 634| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 629| 629| 
| 630| 630| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 631| 631| 				// the ending point and the starting point to snap to.
| 632|    |-				//
|    | 632|+			//
| 633| 633| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 634| 634| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 635| 635| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 630| 630| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 631| 631| 				// the ending point and the starting point to snap to.
| 632| 632| 				//
| 633|    |-				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | 633|+			// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 634| 634| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 635| 635| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 636| 636| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 631| 631| 				// the ending point and the starting point to snap to.
| 632| 632| 				//
| 633| 633| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 634|    |-				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | 634|+			// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 635| 635| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 636| 636| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 637| 637| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 632| 632| 				//
| 633| 633| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 634| 634| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 635|    |-				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | 635|+			// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 636| 636| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 637| 637| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 638| 638| 				// points.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 633| 633| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 634| 634| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 635| 635| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 636|    |-				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | 636|+			// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 637| 637| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 638| 638| 				// points.
| 639| 639| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 634| 634| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 635| 635| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 636| 636| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 637|    |-				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | 637|+			// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 638| 638| 				// points.
| 639| 639| 
| 640| 640| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 635| 635| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 636| 636| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 637| 637| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 638|    |-				// points.
|    | 638|+			// points.
| 639| 639| 
| 640| 640| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 641| 641| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 637| 637| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 638| 638| 				// points.
| 639| 639| 
| 640|    |-				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | 640|+			placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 641| 641| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 642| 642| 
| 643| 643| 				if (result && result.cost)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 638| 638| 				// points.
| 639| 639| 
| 640| 640| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 641|    |-				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | 641|+			var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 642| 642| 
| 643| 643| 				if (result && result.cost)
| 644| 644| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 640| 640| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 641| 641| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 642| 642| 
| 643|    |-				if (result && result.cost)
|    | 643|+			if (result && result.cost)
| 644| 644| 				{
| 645| 645| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 646| 646| 					placementSupport.tooltipMessage = [
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 641| 641| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 642| 642| 
| 643| 643| 				if (result && result.cost)
| 644|    |-				{
|    | 644|+			{
| 645| 645| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 646| 646| 					placementSupport.tooltipMessage = [
| 647| 647| 						getEntityCostTooltip(result),
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 642| 642| 
| 643| 643| 				if (result && result.cost)
| 644| 644| 				{
| 645|    |-					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
|    | 645|+				var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 646| 646| 					placementSupport.tooltipMessage = [
| 647| 647| 						getEntityCostTooltip(result),
| 648| 648| 						getNeededResourcesTooltip(neededResources)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 643| 643| 				if (result && result.cost)
| 644| 644| 				{
| 645| 645| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 646|    |-					placementSupport.tooltipMessage = [
|    | 646|+				placementSupport.tooltipMessage = [
| 647| 647| 						getEntityCostTooltip(result),
| 648| 648| 						getNeededResourcesTooltip(neededResources)
| 649| 649| 					].filter(tip => tip).join("\n");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 644| 644| 				{
| 645| 645| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 646| 646| 					placementSupport.tooltipMessage = [
| 647|    |-						getEntityCostTooltip(result),
|    | 647|+					getEntityCostTooltip(result),
| 648| 648| 						getNeededResourcesTooltip(neededResources)
| 649| 649| 					].filter(tip => tip).join("\n");
| 650| 650| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 645| 645| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 646| 646| 					placementSupport.tooltipMessage = [
| 647| 647| 						getEntityCostTooltip(result),
| 648|    |-						getNeededResourcesTooltip(neededResources)
|    | 648|+					getNeededResourcesTooltip(neededResources)
| 649| 649| 					].filter(tip => tip).join("\n");
| 650| 650| 				}
| 651| 651| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 646| 646| 					placementSupport.tooltipMessage = [
| 647| 647| 						getEntityCostTooltip(result),
| 648| 648| 						getNeededResourcesTooltip(neededResources)
| 649|    |-					].filter(tip => tip).join("\n");
|    | 649|+				].filter(tip => tip).join("\n");
| 650| 650| 				}
| 651| 651| 
| 652| 652| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 647| 647| 						getEntityCostTooltip(result),
| 648| 648| 						getNeededResourcesTooltip(neededResources)
| 649| 649| 					].filter(tip => tip).join("\n");
| 650|    |-				}
|    | 650|+			}
| 651| 651| 
| 652| 652| 				break;
| 653| 653| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 649| 649| 					].filter(tip => tip).join("\n");
| 650| 650| 				}
| 651| 651| 
| 652|    |-				break;
|    | 652|+			break;
| 653| 653| 
| 654| 654| 			case "mousebuttondown":
| 655| 655| 				if (ev.button == SDL_BUTTON_LEFT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 651| 651| 
| 652| 652| 				break;
| 653| 653| 
| 654|    |-			case "mousebuttondown":
|    | 654|+		case "mousebuttondown":
| 655| 655| 				if (ev.button == SDL_BUTTON_LEFT)
| 656| 656| 				{
| 657| 657| 					var queued = Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 652| 652| 				break;
| 653| 653| 
| 654| 654| 			case "mousebuttondown":
| 655|    |-				if (ev.button == SDL_BUTTON_LEFT)
|    | 655|+			if (ev.button == SDL_BUTTON_LEFT)
| 656| 656| 				{
| 657| 657| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 658| 658| 					if (tryPlaceWall(queued))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 653| 653| 
| 654| 654| 			case "mousebuttondown":
| 655| 655| 				if (ev.button == SDL_BUTTON_LEFT)
| 656|    |-				{
|    | 656|+			{
| 657| 657| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 658| 658| 					if (tryPlaceWall(queued))
| 659| 659| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 654| 654| 			case "mousebuttondown":
| 655| 655| 				if (ev.button == SDL_BUTTON_LEFT)
| 656| 656| 				{
| 657|    |-					var queued = Engine.HotkeyIsPressed("session.queue");
|    | 657|+				var queued = Engine.HotkeyIsPressed("session.queue");
| 658| 658| 					if (tryPlaceWall(queued))
| 659| 659| 					{
| 660| 660| 						if (queued)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 655| 655| 				if (ev.button == SDL_BUTTON_LEFT)
| 656| 656| 				{
| 657| 657| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 658|    |-					if (tryPlaceWall(queued))
|    | 658|+				if (tryPlaceWall(queued))
| 659| 659| 					{
| 660| 660| 						if (queued)
| 661| 661| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 656| 656| 				{
| 657| 657| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 658| 658| 					if (tryPlaceWall(queued))
| 659|    |-					{
|    | 659|+				{
| 660| 660| 						if (queued)
| 661| 661| 						{
| 662| 662| 							// continue building, just set a new starting position where we left off
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 657| 657| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 658| 658| 					if (tryPlaceWall(queued))
| 659| 659| 					{
| 660|    |-						if (queued)
|    | 660|+					if (queued)
| 661| 661| 						{
| 662| 662| 							// continue building, just set a new starting position where we left off
| 663| 663| 							placementSupport.position = placementSupport.wallEndPosition;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 658| 658| 					if (tryPlaceWall(queued))
| 659| 659| 					{
| 660| 660| 						if (queued)
| 661|    |-						{
|    | 661|+					{
| 662| 662| 							// continue building, just set a new starting position where we left off
| 663| 663| 							placementSupport.position = placementSupport.wallEndPosition;
| 664| 664| 							placementSupport.wallEndPosition = undefined;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 659| 659| 					{
| 660| 660| 						if (queued)
| 661| 661| 						{
| 662|    |-							// continue building, just set a new starting position where we left off
|    | 662|+						// continue building, just set a new starting position where we left off
| 663| 663| 							placementSupport.position = placementSupport.wallEndPosition;
| 664| 664| 							placementSupport.wallEndPosition = undefined;
| 665| 665| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 660| 660| 						if (queued)
| 661| 661| 						{
| 662| 662| 							// continue building, just set a new starting position where we left off
| 663|    |-							placementSupport.position = placementSupport.wallEndPosition;
|    | 663|+						placementSupport.position = placementSupport.wallEndPosition;
| 664| 664| 							placementSupport.wallEndPosition = undefined;
| 665| 665| 
| 666| 666| 							inputState = INPUT_BUILDING_WALL_CLICK;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 661| 661| 						{
| 662| 662| 							// continue building, just set a new starting position where we left off
| 663| 663| 							placementSupport.position = placementSupport.wallEndPosition;
| 664|    |-							placementSupport.wallEndPosition = undefined;
|    | 664|+						placementSupport.wallEndPosition = undefined;
| 665| 665| 
| 666| 666| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 667| 667| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 663| 663| 							placementSupport.position = placementSupport.wallEndPosition;
| 664| 664| 							placementSupport.wallEndPosition = undefined;
| 665| 665| 
| 666|    |-							inputState = INPUT_BUILDING_WALL_CLICK;
|    | 666|+						inputState = INPUT_BUILDING_WALL_CLICK;
| 667| 667| 						}
| 668| 668| 						else
| 669| 669| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 664| 664| 							placementSupport.wallEndPosition = undefined;
| 665| 665| 
| 666| 666| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 667|    |-						}
|    | 667|+					}
| 668| 668| 						else
| 669| 669| 						{
| 670| 670| 							placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 665| 665| 
| 666| 666| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 667| 667| 						}
| 668|    |-						else
|    | 668|+					else
| 669| 669| 						{
| 670| 670| 							placementSupport.Reset();
| 671| 671| 							inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 666| 666| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 667| 667| 						}
| 668| 668| 						else
| 669|    |-						{
|    | 669|+					{
| 670| 670| 							placementSupport.Reset();
| 671| 671| 							inputState = INPUT_NORMAL;
| 672| 672| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 667| 667| 						}
| 668| 668| 						else
| 669| 669| 						{
| 670|    |-							placementSupport.Reset();
|    | 670|+						placementSupport.Reset();
| 671| 671| 							inputState = INPUT_NORMAL;
| 672| 672| 						}
| 673| 673| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 668| 668| 						else
| 669| 669| 						{
| 670| 670| 							placementSupport.Reset();
| 671|    |-							inputState = INPUT_NORMAL;
|    | 671|+						inputState = INPUT_NORMAL;
| 672| 672| 						}
| 673| 673| 					}
| 674| 674| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 669| 669| 						{
| 670| 670| 							placementSupport.Reset();
| 671| 671| 							inputState = INPUT_NORMAL;
| 672|    |-						}
|    | 672|+					}
| 673| 673| 					}
| 674| 674| 					else
| 675| 675| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 670| 670| 							placementSupport.Reset();
| 671| 671| 							inputState = INPUT_NORMAL;
| 672| 672| 						}
| 673|    |-					}
|    | 673|+				}
| 674| 674| 					else
| 675| 675| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 676| 676| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 671| 671| 							inputState = INPUT_NORMAL;
| 672| 672| 						}
| 673| 673| 					}
| 674|    |-					else
|    | 674|+				else
| 675| 675| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 676| 676| 
| 677| 677| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 672| 672| 						}
| 673| 673| 					}
| 674| 674| 					else
| 675|    |-						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | 675|+					placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 676| 676| 
| 677| 677| 					updateBuildingPlacementPreview();
| 678| 678| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 674| 674| 					else
| 675| 675| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 676| 676| 
| 677|    |-					updateBuildingPlacementPreview();
|    | 677|+				updateBuildingPlacementPreview();
| 678| 678| 					return true;
| 679| 679| 				}
| 680| 680| 				else if (ev.button == SDL_BUTTON_RIGHT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 675| 675| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 676| 676| 
| 677| 677| 					updateBuildingPlacementPreview();
| 678|    |-					return true;
|    | 678|+				return true;
| 679| 679| 				}
| 680| 680| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 681| 681| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 676| 676| 
| 677| 677| 					updateBuildingPlacementPreview();
| 678| 678| 					return true;
| 679|    |-				}
|    | 679|+			}
| 680| 680| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 681| 681| 				{
| 682| 682| 					// reset to normal input mode
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 677| 677| 					updateBuildingPlacementPreview();
| 678| 678| 					return true;
| 679| 679| 				}
| 680|    |-				else if (ev.button == SDL_BUTTON_RIGHT)
|    | 680|+			else if (ev.button == SDL_BUTTON_RIGHT)
| 681| 681| 				{
| 682| 682| 					// reset to normal input mode
| 683| 683| 					placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 678| 678| 					return true;
| 679| 679| 				}
| 680| 680| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 681|    |-				{
|    | 681|+			{
| 682| 682| 					// reset to normal input mode
| 683| 683| 					placementSupport.Reset();
| 684| 684| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 679| 679| 				}
| 680| 680| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 681| 681| 				{
| 682|    |-					// reset to normal input mode
|    | 682|+				// reset to normal input mode
| 683| 683| 					placementSupport.Reset();
| 684| 684| 					updateBuildingPlacementPreview();
| 685| 685| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 680| 680| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 681| 681| 				{
| 682| 682| 					// reset to normal input mode
| 683|    |-					placementSupport.Reset();
|    | 683|+				placementSupport.Reset();
| 684| 684| 					updateBuildingPlacementPreview();
| 685| 685| 
| 686| 686| 					inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 681| 681| 				{
| 682| 682| 					// reset to normal input mode
| 683| 683| 					placementSupport.Reset();
| 684|    |-					updateBuildingPlacementPreview();
|    | 684|+				updateBuildingPlacementPreview();
| 685| 685| 
| 686| 686| 					inputState = INPUT_NORMAL;
| 687| 687| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 683| 683| 					placementSupport.Reset();
| 684| 684| 					updateBuildingPlacementPreview();
| 685| 685| 
| 686|    |-					inputState = INPUT_NORMAL;
|    | 686|+				inputState = INPUT_NORMAL;
| 687| 687| 					return true;
| 688| 688| 				}
| 689| 689| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 684| 684| 					updateBuildingPlacementPreview();
| 685| 685| 
| 686| 686| 					inputState = INPUT_NORMAL;
| 687|    |-					return true;
|    | 687|+				return true;
| 688| 688| 				}
| 689| 689| 				break;
| 690| 690| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 685| 685| 
| 686| 686| 					inputState = INPUT_NORMAL;
| 687| 687| 					return true;
| 688|    |-				}
|    | 688|+			}
| 689| 689| 				break;
| 690| 690| 		}
| 691| 691| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 686| 686| 					inputState = INPUT_NORMAL;
| 687| 687| 					return true;
| 688| 688| 				}
| 689|    |-				break;
|    | 689|+			break;
| 690| 690| 		}
| 691| 691| 		break;
| 692| 692| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 825| 825| 			break;
| 826| 826| 
| 827| 827| 		case "hotkeydown":
| 828|    |-				if (ev.hotkey.indexOf("selection.group.") == 0)
|    | 828|+			if (ev.hotkey.indexOf("selection.group.") == 0)
| 829| 829| 				{
| 830| 830| 					let now = Date.now();
| 831| 831| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 826| 826| 
| 827| 827| 		case "hotkeydown":
| 828| 828| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 829|    |-				{
|    | 829|+			{
| 830| 830| 					let now = Date.now();
| 831| 831| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 832| 832| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 827| 827| 		case "hotkeydown":
| 828| 828| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 829| 829| 				{
| 830|    |-					let now = Date.now();
|    | 830|+				let now = Date.now();
| 831| 831| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 832| 832| 					{
| 833| 833| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 828| 828| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 829| 829| 				{
| 830| 830| 					let now = Date.now();
| 831|    |-					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | 831|+				if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 832| 832| 					{
| 833| 833| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 834| 834| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 829| 829| 				{
| 830| 830| 					let now = Date.now();
| 831| 831| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 832|    |-					{
|    | 832|+				{
| 833| 833| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 834| 834| 						{
| 835| 835| 							var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 830| 830| 					let now = Date.now();
| 831| 831| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 832| 832| 					{
| 833|    |-						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | 833|+					if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 834| 834| 						{
| 835| 835| 							var sptr = ev.hotkey.split(".");
| 836| 836| 							performGroup("snap", sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 831| 831| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 832| 832| 					{
| 833| 833| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 834|    |-						{
|    | 834|+					{
| 835| 835| 							var sptr = ev.hotkey.split(".");
| 836| 836| 							performGroup("snap", sptr[3]);
| 837| 837| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 832| 832| 					{
| 833| 833| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 834| 834| 						{
| 835|    |-							var sptr = ev.hotkey.split(".");
|    | 835|+						var sptr = ev.hotkey.split(".");
| 836| 836| 							performGroup("snap", sptr[3]);
| 837| 837| 						}
| 838| 838| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 833| 833| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 834| 834| 						{
| 835| 835| 							var sptr = ev.hotkey.split(".");
| 836|    |-							performGroup("snap", sptr[3]);
|    | 836|+						performGroup("snap", sptr[3]);
| 837| 837| 						}
| 838| 838| 					}
| 839| 839| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 834| 834| 						{
| 835| 835| 							var sptr = ev.hotkey.split(".");
| 836| 836| 							performGroup("snap", sptr[3]);
| 837|    |-						}
|    | 837|+					}
| 838| 838| 					}
| 839| 839| 					else
| 840| 840| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 835| 835| 							var sptr = ev.hotkey.split(".");
| 836| 836| 							performGroup("snap", sptr[3]);
| 837| 837| 						}
| 838|    |-					}
|    | 838|+				}
| 839| 839| 					else
| 840| 840| 					{
| 841| 841| 						var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 836| 836| 							performGroup("snap", sptr[3]);
| 837| 837| 						}
| 838| 838| 					}
| 839|    |-					else
|    | 839|+				else
| 840| 840| 					{
| 841| 841| 						var sptr = ev.hotkey.split(".");
| 842| 842| 						performGroup(sptr[2], sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 837| 837| 						}
| 838| 838| 					}
| 839| 839| 					else
| 840|    |-					{
|    | 840|+				{
| 841| 841| 						var sptr = ev.hotkey.split(".");
| 842| 842| 						performGroup(sptr[2], sptr[3]);
| 843| 843| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 838| 838| 					}
| 839| 839| 					else
| 840| 840| 					{
| 841|    |-						var sptr = ev.hotkey.split(".");
|    | 841|+					var sptr = ev.hotkey.split(".");
| 842| 842| 						performGroup(sptr[2], sptr[3]);
| 843| 843| 
| 844| 844| 						doublePressTimer = now;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 839| 839| 					else
| 840| 840| 					{
| 841| 841| 						var sptr = ev.hotkey.split(".");
| 842|    |-						performGroup(sptr[2], sptr[3]);
|    | 842|+					performGroup(sptr[2], sptr[3]);
| 843| 843| 
| 844| 844| 						doublePressTimer = now;
| 845| 845| 						prevHotkey = ev.hotkey;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 841| 841| 						var sptr = ev.hotkey.split(".");
| 842| 842| 						performGroup(sptr[2], sptr[3]);
| 843| 843| 
| 844|    |-						doublePressTimer = now;
|    | 844|+					doublePressTimer = now;
| 845| 845| 						prevHotkey = ev.hotkey;
| 846| 846| 					}
| 847| 847| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 842| 842| 						performGroup(sptr[2], sptr[3]);
| 843| 843| 
| 844| 844| 						doublePressTimer = now;
| 845|    |-						prevHotkey = ev.hotkey;
|    | 845|+					prevHotkey = ev.hotkey;
| 846| 846| 					}
| 847| 847| 				}
| 848| 848| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 843| 843| 
| 844| 844| 						doublePressTimer = now;
| 845| 845| 						prevHotkey = ev.hotkey;
| 846|    |-					}
|    | 846|+				}
| 847| 847| 				}
| 848| 848| 				break;
| 849| 849| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 844| 844| 						doublePressTimer = now;
| 845| 845| 						prevHotkey = ev.hotkey;
| 846| 846| 					}
| 847|    |-				}
|    | 847|+			}
| 848| 848| 				break;
| 849| 849| 		}
| 850| 850| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 845| 845| 						prevHotkey = ev.hotkey;
| 846| 846| 					}
| 847| 847| 				}
| 848|    |-				break;
|    | 848|+			break;
| 849| 849| 		}
| 850| 850| 		break;
| 851| 851| 
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1476|1476| 		g_BatchTrainingEntityAllowedCount < batchedSize * appropriateBuildings.length)
|1477|1477| 	{
|1478|1478| 		// Train as many full batches as we can
|1479|    |-		let buildingsCountToTrainFullBatch = Math.floor( g_BatchTrainingEntityAllowedCount / batchedSize);
|    |1479|+		let buildingsCountToTrainFullBatch = Math.floor(g_BatchTrainingEntityAllowedCount / batchedSize);
|1480|1480| 		Engine.PostNetworkCommand({
|1481|1481| 			"type": "train",
|1482|1482| 			"entities": appropriateBuildings.slice(0, buildingsCountToTrainFullBatch),
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1555|1555| 	var selectall = Engine.HotkeyIsPressed("selection.offscreen");
|1556|1556| 
|1557|1557| 	// Reset the last idle unit, etc., if the selection type has changed.
|1558|    |-	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v,i) => v === lastIdleClasses[i]))
|    |1558|+	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v, i) => v === lastIdleClasses[i]))
|1559|1559| 		resetIdleUnit();
|1560|1560| 	lastIdleClasses = classes;
|1561|1561| 

binaries/data/mods/public/gui/session/input.js
| 215| »   var·target·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'target' to undefined.

binaries/data/mods/public/gui/session/input.js
| 229| »   var·actionInfo·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'actionInfo' to undefined.

binaries/data/mods/public/gui/session/input.js
| 452| »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 479| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 483| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 538| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 548| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 596| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 625| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 694| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 792| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 795| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 897| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 986| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1000| »   »   »   »   let·action·=·determineAction(ev.x,·ev.y);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'action' is already declared in the upper scope.

binaries/data/mods/public/gui/session/input.js
|1009| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1078| »   »   »   switch·(ev.hotkey)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1506| »   switch·(action)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 215| »   var·target·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'target' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 229| »   var·actionInfo·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'actionInfo' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 243| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 246| »   »   »   var·r·=·g_UnitActions[action].hotkeyActionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 251| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 254| »   »   »   var·r·=·g_UnitActions[action].actionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 467| »   »   &&·(ev.button·==·SDL_BUTTON_LEFT·||·ev.button·==·SDL_BUTTON_RIGHT))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/gui/session/input.js
| 497| »   »   »   »   var·rect·=·updateBandbox(bandbox,·ev,·true);
|    | [NORMAL] JSHintBear:
|    | 'rect' is already defined.

binaries/data/mods/public/gui/session/input.js
| 500| »   »   »   »   var·ents·=·getPreferredEntities(Engine.PickPlayerEntitiesInRect(rect[0],·rect[1],·rect[2],·rect[3],·g_ViewedPlayer));
|    | [NORMAL] JSHintBear:
|    | 'ents' is already defined.

binaries/data/mods/public/gui/session/input.js
| 657| »   »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 728| »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 841| »   »   »   »   »   »   var·sptr·=·ev.hotkey.split(".");
|    | [NORMAL] JSHintBear:
|    | 'sptr' is already defined.

binaries/data/mods/public/gui/session/input.js
| 857| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
| 883| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Expected a 'break' statement before 'default'.

binaries/data/mods/public/gui/session/input.js
| 907| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 823| 823| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 824| 824| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 825| 825| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 826|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 826|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 827| 827| 	}
| 828| 828| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 829| 829| 	Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).UpdateColors();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1640|1640| 			{
|1641|1641| 				minDist2 = dist2;
|1642|1642| 				minDistEntitySnapData = {
|1643|    |-						"x": pos.x,
|    |1643|+					"x": pos.x,
|1644|1644| 						"z": pos.z,
|1645|1645| 						"angle": cmpPosition.GetRotation().y,
|1646|1646| 						"ent": ent
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1641|1641| 				minDist2 = dist2;
|1642|1642| 				minDistEntitySnapData = {
|1643|1643| 						"x": pos.x,
|1644|    |-						"z": pos.z,
|    |1644|+					"z": pos.z,
|1645|1645| 						"angle": cmpPosition.GetRotation().y,
|1646|1646| 						"ent": ent
|1647|1647| 				};
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1642|1642| 				minDistEntitySnapData = {
|1643|1643| 						"x": pos.x,
|1644|1644| 						"z": pos.z,
|1645|    |-						"angle": cmpPosition.GetRotation().y,
|    |1645|+					"angle": cmpPosition.GetRotation().y,
|1646|1646| 						"ent": ent
|1647|1647| 				};
|1648|1648| 			}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1643|1643| 						"x": pos.x,
|1644|1644| 						"z": pos.z,
|1645|1645| 						"angle": cmpPosition.GetRotation().y,
|1646|    |-						"ent": ent
|    |1646|+					"ent": ent
|1647|1647| 				};
|1648|1648| 			}
|1649|1649| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/scripts/WonderVictory.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/scripts/WonderVictory.js
| 104| 104| 					"players": [player],
| 105| 105| 					"timeParameter": true
| 106| 106| 				},
| 107|    |-			wonderDuration)
|    | 107|+				wonderDuration)
| 108| 108| 		]
| 109| 109| 	};
| 110| 110| };
|    | [NORMAL] ESLintBear (key-spacing):
|    | Extra space after key 'allies'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EndGameManager.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EndGameManager.js
| 107| 107| 	cmpGUIInterface.PushNotification({
| 108| 108| 		"type": "won",
| 109| 109| 		"players": [winningPlayers[0]],
| 110|    |-		"allies" : winningPlayers,
|    | 110|+		"allies": winningPlayers,
| 111| 111| 		"message": victoryString(winningPlayers.length)
| 112| 112| 	});
| 113| 113| 
|    | [NORMAL] ESLintBear (key-spacing):
|    | Extra space after key 'allies'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EndGameManager.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EndGameManager.js
| 115| 115| 		cmpGUIInterface.PushNotification({
| 116| 116| 			"type": "defeat",
| 117| 117| 			"players": [defeatedPlayers[0]],
| 118|    |-			"allies" : defeatedPlayers,
|    | 118|+			"allies": defeatedPlayers,
| 119| 119| 			"message": defeatString(defeatedPlayers.length)
| 120| 120| 		});
| 121| 121| 
|    | [NORMAL] ESLintBear (key-spacing):
|    | Extra space after key 'allies'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EndGameManager.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EndGameManager.js
| 167| 167| 		cmpGuiInterface.PushNotification({
| 168| 168| 			"type": "won",
| 169| 169| 			"players": [allies[0]],
| 170|    |-			"allies" : allies,
|    | 170|+			"allies": allies,
| 171| 171| 			"message": markForPluralTranslation(
| 172| 172| 				"%(lastPlayer)s has won (last player alive).",
| 173| 173| 				"%(players)s and %(lastPlayer)s have won (last players alive).",

binaries/data/mods/public/simulation/components/Player.js
| 325| »   »   »   »   ...Object.keys(amountsNeeded).map((resCode,·i)·=>·({
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'i' is already declared in the upper scope.
|    | [NORMAL] ESLintBear (no-multi-spaces):
|    | Multiple spaces found before '9'.
|----|    | /zpool0/trunk/binaries/data/mods/public/maps/random/jebel_barkal_triggers.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/maps/random/jebel_barkal_triggers.js
| 120| 120| var jebelBarkal_firstAttackTime = (difficulty, isNomad) =>
| 121| 121| 	jebelBarkal_attackInterval(0, difficulty) +
| 122| 122| 	2 * Math.max(0, 3 - difficulty) +
| 123|    |-	(isNomad ?  9 - difficulty : 0);
|    | 123|+	(isNomad ? 9 - difficulty : 0);
| 124| 124| 
| 125| 125| /**
| 126| 126|  * Account for varying mapsizes and number of players when spawning attackers.

binaries/data/mods/public/maps/random/jebel_barkal_triggers.js
| 638| {
|    | [NORMAL] ESLintBear (no-lone-blocks):
|    | Block is redundant.
Executing section cli...

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

Change 12 hour Last-Man-Standing TimeNotification timeout to Infinity.

Because it feels like infinity or is treated code-wise as infinity?

binaries/data/mods/public/gui/session/chat/ChatMessageFormatPlayer.js
39

+.

binaries/data/mods/public/gui/session/messages.js
509

+.

binaries/data/mods/public/simulation/components/GuiInterface.js
685

notifications ;)

Can you document the use of timeParameter somewhere?

elexis added a comment.Nov 7 2019, 3:47 PM

One thing that could be objected to is the removal of translateMessage for TimeNotifications, because mods typically don't have the capability to provide translations, hence tinygettext will complain about not finding translations for these strings.
But those tinygettext messages are not visible onscreen, they're not even in mainlog.html, they also occur for any untranslated string, and at last mods can provide custom po/pot files too, and having that translateMessage argument so far has not shown any benefit (all messages except upgrade have it and upgrade forgot it). I can find many examples actually where mods provide custom game data including strings that are expected to be translatable - for instance mapname and mapdescription.
It seems if that was a design choice to provide custom strings that arent translated, we'd have to rewrite about most of the game. That may or may not be done at some time, but then again it doesn't seem necessary to do that if tinygettext messages about lack of translations are not going to be shown.

Change 12 hour Last-Man-Standing TimeNotification timeout to Infinity.

Because it feels like infinity or is treated code-wise as infinity?

Feelings are outside of scope of code. Code-wise it's treated as 12 hours.
The message should be seen if and only if everyone is allied in an LMS match, so it should not disappear after any set amount of time.
The 12 hour limit had been chosen because only natural numbers were considered.

Can you document the use of timeParameter somewhere?

Indeed it had never been advertized to users that %(time)s is replaced.

Stan added a subscriber: Stan.Nov 7 2019, 3:52 PM
Stan added inline comments.
binaries/data/mods/public/gui/session/TimeNotificationOverlay.js
21

hasTimeParameter ?

binaries/data/mods/public/simulation/components/BuildRestrictions.js
127

let

binaries/data/mods/public/simulation/components/GuiInterface.js
1056

Maybe we should let that error out.

1073

From https://github.com/0ad/0ad/blob/c65a2ca3b4b7bb733b7b78e504f916e8a9384c8e/source/simulation2/components/ICmpVisual.h

	/**
	 * Set the shading color that will be modulated with the model's textures.
	 * Default shading is (1, 1, 1, 1).
	 * Alpha should probably be 1 else it's unlikely to work properly.
	 * @param r red component, expected range [0, 1]
	 * @param g green component, expected range [0, 1]
	 * @param b blue component, expected range [0, 1]
	 * @param a alpha component, expected range [0, 1]
	 */

I guess it should be

cmpVisual.SetShadingColor(1, 0.4, 0.4, 1);
binaries/data/mods/public/simulation/components/Player.js
325

Spread operator bad and slow ? https://code.wildfiregames.com/rP20351

Polakrity added inline comments.Dec 1 2019, 4:06 PM
binaries/data/mods/public/gui/session/chat/ChatMessageFormatPlayer.js
30

Reassign isMe with the same value than above (out of scope of diff).

binaries/data/mods/public/maps/scenarios/Cinema_Demo.js
6

. to the sentence.

binaries/data/mods/public/simulation/components/GuiInterface.js
703

I did not go through all the code but what is the purpose of this sorting?
GetTimeNotifications has received many changes and I think this sorting is no longer useful with the filter() function.

binaries/data/mods/public/simulation/components/ProductionQueue.js
760

. to sentence.

elexis added inline comments.Dec 5 2019, 12:01 PM
binaries/data/mods/public/gui/session/chat/ChatMessageFormatPlayer.js
30

See D2451 for the discussion.

binaries/data/mods/public/maps/scenarios/Cinema_Demo.js
6

I personally haven't been convinced that the period is crucial and that dropping existing translations of hundreds of strings is preferable over keeping them only for a period. When I select a foreign language, I see many untranslated strings that had been translated before, one could see some translation statistics and assess the situation. Until Ive seen that it's not an issue, I error on the side of conserving strings.

binaries/data/mods/public/simulation/components/GuiInterface.js
703

what is the purpose of this sorting?

What could the purpose be of ordering messages by time, i.e. display the "you cant build that here" string below the wonder notifications that countdown for half an hour (and might even stack up to hide some messages). Or when inserting a new victory timer between the first and the last notification according to the order.

GetTimeNotifications has received many changes

(There's only one commit that introduced it and one can read the code to see what it does and try to think of reasons as to why it might have been added and notice it's use)

and I think this sorting is no longer useful with the filter() function.

(One can't say that the code is not useful if one has not identified the use of the code.)

binaries/data/mods/public/simulation/components/Player.js
325

This function is called every 100k turns, the function in that commit is called 100k times per turn?
Object creation is bad and slow too.
The component could return the data in a format that is closer to how its being processed if one wants to sink some time.