Page MenuHomeWildfire Games

Generalise Attack effects - any attack can do damage, capture, inflict status effects, including splash. Also damage bonuses.
Needs ReviewPublic

Authored by wraitii on Jul 17 2019, 9:38 PM.

Details

Reviewers
None
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Summary

(From ideas in D368 and D2081).

This makes it so that any attack can, at the same time, deal damage, capture, inflict status effects. This also includes splash. It also include bonus multipliers.

I think restricted classes and such would be on a similar level, but those are Attack.js only (unless we want to consider them for missile hit?

Test Plan

Notice that capture still works, and damaging also, and that attacks can now do both at once.

Diff Detail

Repository
rP 0 A.D. Public Repository
Branch
D2092
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 8916
Build 14631: Vulcan BuildJenkins
Build 14630: arc lint + arc unit

Event Timeline

wraitii created this revision.Jul 17 2019, 9:38 PM

Build failure - The Moirai have given mortals hearts that can endure.

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

This merge-conflicts a bunch with D1938

Not sure where it conflicts with D1938, yes some rebasing is needed when either is committed but no major changes needed as far as I can see.

Damage.js => AttackEffects.js?
Armour.js => Resistances.js? Or handle that in Damage.js/AttackEffects.js as well. AttackEffects.js would be the distributor then: Attack.js/DeathDamage/etc. calls AttackEffects.js calls Health.js/Capturable.js/etc.

wraitii updated this revision to Diff 9007.Jul 20 2019, 2:36 PM
wraitii edited the summary of this revision. (Show Details)
  • Correct for splash and such.
  • Standardise argument orders
  • Fix tests

This uses Armour for all attack effects, as D368 did, but keeps the templates separate.
Further diffs needed:

  • Implement armour for Capture, status effects (probably a % change to get it?), rename "Armour" into "Resistance"
  • Rename "Damage" to "AttackManager" or something like that

Build failure - The Moirai have given mortals hearts that can endure.

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

wraitii updated this revision to Diff 9008.Jul 20 2019, 2:49 PM

Unbreak tests following a last-minute change.

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (key-spacing):
|    | Extra space after key 'Capture'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Armour.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Armour.js
|  68|  68| 
|  69|  69| 	bonusMultiplier *= cmpHealth.GetMaxHitpoints() / (0.1 * cmpHealth.GetMaxHitpoints() + 0.9 * cmpHealth.GetHitpoints());
|  70|  70| 
|  71|    |-	let total = this.GetTotalEffect({ "Capture" : effectData }, "Capture", bonusMultiplier);
|    |  71|+	let total = this.GetTotalEffect({ "Capture": effectData }, "Capture", bonusMultiplier);
|  72|  72| 
|  73|  73| 	let change = cmpCapturable.Reduce(total, attackerOwner);
|  74|  74| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 392| 392| function getRepairTimeTooltip(entState)
| 393| 393| {
| 394| 394| 	return sprintf(translate("%(label)s %(details)s"), {
| 395|    |-			"label": headerFont(translate("Number of repairers:")),
|    | 395|+		"label": headerFont(translate("Number of repairers:")),
| 396| 396| 			"details": entState.repairable.numBuilders
| 397| 397| 		}) + "\n" + (entState.repairable.numBuilders ?
| 398| 398| 		sprintf(translatePlural(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 393| 393| {
| 394| 394| 	return sprintf(translate("%(label)s %(details)s"), {
| 395| 395| 			"label": headerFont(translate("Number of repairers:")),
| 396|    |-			"details": entState.repairable.numBuilders
|    | 396|+		"details": entState.repairable.numBuilders
| 397| 397| 		}) + "\n" + (entState.repairable.numBuilders ?
| 398| 398| 		sprintf(translatePlural(
| 399| 399| 			"Add another worker to speed up the repairs by %(second)s second.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 394| 394| 	return sprintf(translate("%(label)s %(details)s"), {
| 395| 395| 			"label": headerFont(translate("Number of repairers:")),
| 396| 396| 			"details": entState.repairable.numBuilders
| 397|    |-		}) + "\n" + (entState.repairable.numBuilders ?
|    | 397|+	}) + "\n" + (entState.repairable.numBuilders ?
| 398| 398| 		sprintf(translatePlural(
| 399| 399| 			"Add another worker to speed up the repairs by %(second)s second.",
| 400| 400| 			"Add another worker to speed up the repairs by %(second)s seconds.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 414| 414| function getBuildTimeTooltip(entState)
| 415| 415| {
| 416| 416| 	return sprintf(translate("%(label)s %(details)s"), {
| 417|    |-			"label": headerFont(translate("Number of builders:")),
|    | 417|+		"label": headerFont(translate("Number of builders:")),
| 418| 418| 			"details": entState.foundation.numBuilders
| 419| 419| 		}) + "\n" + (entState.foundation.numBuilders ?
| 420| 420| 		sprintf(translatePlural(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 415| 415| {
| 416| 416| 	return sprintf(translate("%(label)s %(details)s"), {
| 417| 417| 			"label": headerFont(translate("Number of builders:")),
| 418|    |-			"details": entState.foundation.numBuilders
|    | 418|+		"details": entState.foundation.numBuilders
| 419| 419| 		}) + "\n" + (entState.foundation.numBuilders ?
| 420| 420| 		sprintf(translatePlural(
| 421| 421| 			"Add another worker to speed up the construction by %(second)s second.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 416| 416| 	return sprintf(translate("%(label)s %(details)s"), {
| 417| 417| 			"label": headerFont(translate("Number of builders:")),
| 418| 418| 			"details": entState.foundation.numBuilders
| 419|    |-		}) + "\n" + (entState.foundation.numBuilders ?
|    | 419|+	}) + "\n" + (entState.foundation.numBuilders ?
| 420| 420| 		sprintf(translatePlural(
| 421| 421| 			"Add another worker to speed up the construction by %(second)s second.",
| 422| 422| 			"Add another worker to speed up the construction by %(second)s seconds.",
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|  66|  66| 		let phase = "";
|  67|  67| 		let cmpTechnologyManager = QueryPlayerIDInterface(i, IID_TechnologyManager);
|  68|  68| 		if (cmpTechnologyManager)
|  69|    |-		{
|    |  69|+		
|  70|  70| 			if (cmpTechnologyManager.IsTechnologyResearched("phase_city"))
|  71|  71| 				phase = "city";
|  72|  72| 			else if (cmpTechnologyManager.IsTechnologyResearched("phase_town"))
|  73|  73| 				phase = "town";
|  74|  74| 			else if (cmpTechnologyManager.IsTechnologyResearched("phase_village"))
|  75|  75| 				phase = "village";
|  76|    |-		}
|    |  76|+		
|  77|  77| 
|  78|  78| 		// store player ally/neutral/enemy data as arrays
|  79|  79| 		let allies = [];
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 417| 417| 			ret.attack[type].elevationBonus = range.elevationBonus;
| 418| 418| 
| 419| 419| 			if (cmpUnitAI && cmpPosition && cmpPosition.IsInWorld())
| 420|    |-			{
|    | 420|+			
| 421| 421| 				// For units, take the range in front of it, no spread. So angle = 0
| 422| 422| 				ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.elevationBonus, 0);
| 423|    |-			}
|    | 423|+			
| 424| 424| 			else if(cmpPosition && cmpPosition.IsInWorld())
| 425| 425| 			{
| 426| 426| 				// For buildings, take the average elevation around it. So angle = 2*pi
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 422| 422| 				ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.elevationBonus, 0);
| 423| 423| 			}
| 424| 424| 			else if(cmpPosition && cmpPosition.IsInWorld())
| 425|    |-			{
|    | 425|+			
| 426| 426| 				// For buildings, take the average elevation around it. So angle = 2*pi
| 427| 427| 				ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.elevationBonus, 2*Math.PI);
| 428|    |-			}
|    | 428|+			
| 429| 429| 			else
| 430| 430| 			{
| 431| 431| 				// not in world, set a default?
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'else'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 427| 427| 				ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.elevationBonus, 2*Math.PI);
| 428| 428| 			}
| 429| 429| 			else
| 430|    |-			{
|    | 430|+			
| 431| 431| 				// not in world, set a default?
| 432| 432| 				ret.attack[type].elevationAdaptedRange = ret.attack.maxRange;
| 433|    |-			}
|    | 433|+			
| 434| 434| 		}
| 435| 435| 	}
| 436| 436| 
|    | [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
| 798| 798| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 799| 799| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 800| 800| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 801|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 801|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 802| 802| 	}
| 803| 803| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 804| 804| 	Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).UpdateColors();
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'else'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1317|1317| 		}
|1318|1318| 	}
|1319|1319| 	else
|1320|    |-	{
|    |1320|+	
|1321|1321| 		// Didn't snap to an existing entity, add the starting tower manually. To prevent odd-looking rotation jumps
|1322|1322| 		// when shift-clicking to build a wall, reuse the placement angle that was last seen on a validly positioned
|1323|1323| 		// wall piece.
|1338|1338| 			"pos": start.pos,
|1339|1339| 			"angle": previewEntities.length > 0 ? previewEntities[0].angle : this.placementWallLastAngle
|1340|1340| 		});
|1341|    |-	}
|    |1341|+	
|1342|1342| 
|1343|1343| 	if (end.pos)
|1344|1344| 	{
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1341|1341| 	}
|1342|1342| 
|1343|1343| 	if (end.pos)
|1344|    |-	{
|    |1344|+	
|1345|1345| 		// Analogous to the starting side case above
|1346|1346| 		if (end.snappedEnt && end.snappedEnt != INVALID_ENTITY)
|1347|1347| 		{
|1379|1379| 				"pos": end.pos,
|1380|1380| 				"angle": previewEntities.length > 0 ? previewEntities[previewEntities.length-1].angle : this.placementWallLastAngle
|1381|1381| 			});
|1382|    |-	}
|    |1382|+	
|1383|1383| 
|1384|1384| 	let cmpTerrain = Engine.QueryInterface(SYSTEM_ENTITY, IID_Terrain);
|1385|1385| 	if (!cmpTerrain)
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1557|1557| 
|1558|1558| 		let cmpVisual = Engine.QueryInterface(ent, IID_Visual);
|1559|1559| 		if (cmpVisual)
|1560|    |-		{
|    |1560|+		
|1561|1561| 			if (!allPiecesValid || !canAfford)
|1562|1562| 				cmpVisual.SetShadingColor(1.4, 0.4, 0.4, 1);
|1563|1563| 			else
|1564|1564| 				cmpVisual.SetShadingColor(1, 1, 1, 1);
|1565|    |-		}
|    |1565|+		
|1566|1566| 
|1567|1567| 		++entPool.numUsed;
|1568|1568| 	}
|    | [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
|1631|1631| 			{
|1632|1632| 				minDist2 = dist2;
|1633|1633| 				minDistEntitySnapData = {
|1634|    |-						"x": pos.x,
|    |1634|+					"x": pos.x,
|1635|1635| 						"z": pos.z,
|1636|1636| 						"angle": cmpPosition.GetRotation().y,
|1637|1637| 						"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
|1632|1632| 				minDist2 = dist2;
|1633|1633| 				minDistEntitySnapData = {
|1634|1634| 						"x": pos.x,
|1635|    |-						"z": pos.z,
|    |1635|+					"z": pos.z,
|1636|1636| 						"angle": cmpPosition.GetRotation().y,
|1637|1637| 						"ent": ent
|1638|1638| 				};
|    | [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
|1633|1633| 				minDistEntitySnapData = {
|1634|1634| 						"x": pos.x,
|1635|1635| 						"z": pos.z,
|1636|    |-						"angle": cmpPosition.GetRotation().y,
|    |1636|+					"angle": cmpPosition.GetRotation().y,
|1637|1637| 						"ent": ent
|1638|1638| 				};
|1639|1639| 			}
|    | [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
|1634|1634| 						"x": pos.x,
|1635|1635| 						"z": pos.z,
|1636|1636| 						"angle": cmpPosition.GetRotation().y,
|1637|    |-						"ent": ent
|    |1637|+					"ent": ent
|1638|1638| 				};
|1639|1639| 			}
|1640|1640| 		}
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1779|1779| 			result.gain = cmpEntityTrader.GetGoods().amount;
|1780|1780| 	}
|1781|1781| 	else if (data.target === secondMarket)
|1782|    |-	{
|    |1782|+	
|1783|1783| 		result = {
|1784|1784| 			"type": "is second",
|1785|1785| 			"gain": cmpEntityTrader.GetGoods().amount,
|1786|1786| 		};
|1787|    |-	}
|    |1787|+	
|1788|1788| 	else if (!firstMarket)
|1789|1789| 	{
|1790|1790| 		result = { "type": "set first" };
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1786|1786| 		};
|1787|1787| 	}
|1788|1788| 	else if (!firstMarket)
|1789|    |-	{
|    |1789|+	
|1790|1790| 		result = { "type": "set first" };
|1791|    |-	}
|    |1791|+	
|1792|1792| 	else if (!secondMarket)
|1793|1793| 	{
|1794|1794| 		result = {
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1790|1790| 		result = { "type": "set first" };
|1791|1791| 	}
|1792|1792| 	else if (!secondMarket)
|1793|    |-	{
|    |1793|+	
|1794|1794| 		result = {
|1795|1795| 			"type": "set second",
|1796|1796| 			"gain": cmpEntityTrader.CalculateGain(firstMarket, data.target),
|1797|1797| 		};
|1798|    |-	}
|    |1798|+	
|1799|1799| 	else
|1800|1800| 	{
|1801|1801| 		// Else both markets are not null and target is different from them
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'else'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1797|1797| 		};
|1798|1798| 	}
|1799|1799| 	else
|1800|    |-	{
|    |1800|+	
|1801|1801| 		// Else both markets are not null and target is different from them
|1802|1802| 		result = { "type": "set first" };
|1803|    |-	}
|    |1803|+	
|1804|1804| 	return result;
|1805|1805| };
|1806|1806| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|  30|  30| 	let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
|  31|  31| 	let turnLength = cmpTimer.GetLatestTurnLength();
|  32|  32| 	return new Vector3D(
|  33|    |-			(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|    |  33|+		(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|  34|  34| 			0,
|  35|  35| 			(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|  36|  36| };
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|  31|  31| 	let turnLength = cmpTimer.GetLatestTurnLength();
|  32|  32| 	return new Vector3D(
|  33|  33| 			(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|  34|    |-			0,
|    |  34|+		0,
|  35|  35| 			(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|  36|  36| };
|  37|  37| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|  32|  32| 	return new Vector3D(
|  33|  33| 			(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|  34|  34| 			0,
|  35|    |-			(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|    |  35|+		(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|  36|  36| };
|  37|  37| 
|  38|  38| /**
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'if' condition.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
| 115| 115| 
| 116| 116| 	// Do this first in case the direct hit kills the target
| 117| 117| 	if (data.splash)
| 118|    |-	{
|    | 118|+	
| 119| 119| 		this.CauseDamageOverArea({
| 120| 120| 			"type": data.type,
| 121| 121| 			"attackData": data.splash.attackData,
| 127| 127| 			"direction": data.direction,
| 128| 128| 			"playersToDamage": this.GetPlayersToDamage(data.attackerOwner, data.splash.friendlyFire)
| 129| 129| 		});
| 130|    |-	}
|    | 130|+	
| 131| 131| 
| 132| 132| 	let cmpProjectileManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ProjectileManager);
| 133| 133| 
|    | [NORMAL] ESLintBear (curly):
|    | Unnecessary { after 'else'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
| 207| 207| 				damageMultiplier = 0;
| 208| 208| 		}
| 209| 209| 		else // In case someone calls this function with an invalid shape.
| 210|    |-		{
|    | 210|+		
| 211| 211| 			warn("The " + data.shape + " splash damage shape is not implemented!");
| 212|    |-		}
|    | 212|+		
| 213| 213| 
| 214| 214| 		this.HandleAttackEffects(data.type + ".Splash", data.attackData, ent, data.attacker, data.attackerOwner, damageMultiplier);
| 215| 215| 	}
Executing section cli...

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

I haven't tested it yet, this is what I noticed on first glance. But I do plan to test it today.

binaries/data/mods/public/simulation/components/Armour.js
60

invulnerable != uncapturable (e.g. relics)

65

Should probably be a resistance.

71

Not sure, wouldn't it be the idea that if you kill/tear down a unit/building you get loot, but if you capture it you can't loot it?

binaries/data/mods/public/simulation/components/Attack.js
33

Should each effect have the possibility to have its own bonuses? Or would that be weird?

99

Perhaps in its own Effects node? Would make generalising easier again ;)

537–543

You could also switch places:
+this.template[type].Delay + timeToTarget * 1000

binaries/data/mods/public/simulation/components/Damage.js
0

I think GetAttackBonus already returns 1 if there is no bonus?

0

effectType in attackData? Then we probably don't need this.effectTypes as well, since it is only called here.

2

Not needed? See below.

binaries/data/mods/public/simulation/components/StatusEffectsReceiver.js
62

Why does it have no owner? If I was poisoned by someone and I die, that person should have it on his/hers record right?

wraitii added inline comments.Jul 22 2019, 1:37 PM
binaries/data/mods/public/simulation/components/Armour.js
60

Indeed.

65

later diff

71

XP loot.

binaries/data/mods/public/simulation/components/Attack.js
33

I pondered that, but I don't see the point (at least right now). Since most attacks only deal either damage or capture it's kind of irrelevant.

99

Pondered that again - I don't think it's necessary per se because we hardcode 3 effects (status, damage, capture) anyways. I don't think it's worth making it more general and it doesn't change templates that way.

537–543

better indeed

binaries/data/mods/public/simulation/components/Damage.js
0

There's "Bonuses" in attackData

0

perhaps, didn't check

binaries/data/mods/public/simulation/components/StatusEffectsReceiver.js
62

The implementation doesn't keep track of the poisoning entity, so no owner. We could, but it's for another diff imo.

You need to change the Globalscript Templates.js. Besides that, it works, I've added capture value to a ranged one and both effects are dealt properly.
Only a proper way of showing has also to be coded in tooltips.js. You'll have to use the GetEffectTypes there.
Even PetraAI does not complain (out loud) when giving an attack multiple effects :O Though it might be beneficial to update it before committing this.

binaries/data/mods/public/simulation/components/Armour.js
71

Point taken.

binaries/data/mods/public/simulation/components/Attack.js
99

Can always be done later if deemed a necessity.

420

-value

536–537
data.splash = {
	"friendlyFire": this.template[type].Splash.FriendlyFire != "false",
	"radius": +this.template[type].Splash.Range,
	"shape": this.template[type].Splash.Shape,
	"attackData": this.GetAttackData(type, true)
};

Nicer?

binaries/data/mods/public/simulation/components/Damage.js
0

Yeah, I was already using the extra node in my mind I guess.

0

Yes it does.

wraitii updated this revision to Diff 9071.EditedMon, Jul 22, 9:30 PM

Rebased. Incorporate death damage changes, and thus pull the idea to put all of this in a helper from D2109.

This makes Armour have its own schema again, since it's just a coincidence that it can use the same schema as attack effects, and it won't be able to do that for status effects probably, when it gets renamed to resistance and upgraded for that (cc future me).

This opens the structure tree and in-games correctly at least, needs some more testing.

Edit: - I'm not really updating tooltips or AI right now, since it's not like we're actually going to use this very soon and status effects also need GUI support, so there's some cleanup to do there first.

Owners added a subscriber: Restricted Owners Package.Mon, Jul 22, 9:30 PM

Build failure - The Moirai have given mortals hearts that can endure.

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

Still needed:

  • testing and reviewing
  • fixing tests
  • probably updating some techs, I've gripped *.js files but not *.json files.

Recapping the 2+1 different ways of generalising attack effects, and why I prefer this patch's approach over D368 (though admittedly not by a huge margin after looking at it critically).


D368 way

Template structure:

<AttackType>
   <Effects>
      <Hack>5</Hack>
      <Capture>4</Capture>
      <StatusEffects>
         <Burn>...</Burn>
      </StatusEffects>
   </Effects>
</AttackType>

Pros:

  • all effects are actually in the same node so they can be iterated over and it's obvious they all deal some kind of effect. This makes it slightly easier to extend attack effects.

Cons:

  • Needs something specifying how Hack/Capture/Stun map to some component to actually deal their own effect.
  • this makes it annoying to have a scheme like the above where an effect is not numeric, as that'd need either letting any damage type implement that, or hardcoding it in the schema - in which case one loses the ability to super-easily extend attack effects which made this approach nice.
  • Thus annoying to merge status effects with other effect types, which is annoying since 'effect' no longer contains all effects. Note that a boolean effect (stun > yes/no for example) would be similar.
  • Less obvious from the template that the effects do potentially completely different effects.

D2092 way

Template Structure:

<AttackType>
   <Damage>
      <Hack>5</Hack>
   </Damage>
   <Capture>4</Capture>
   <StatusEffects>
      <Burn>...</Burn>
   </StatusEffects>
</AttackType>

Pros:

  • No need for a global script helper file by itself
  • imo more obvious that templates deal different effects, and if you see an attack with only 'Damage' or 'Capture' it's obvious that it only deals that type of effect.
  • Drops an indentation level for capture-only and status-effects only attacks.
  • Easy to merge status effects with the other effects, and any other future effect that might do something completely different.

Cons:

  • Effect types need to be hardcoded in the schema, but moddability effort is about the same regardless as both methods require JS changes.
  • Cannot be iterated over unless wrapped in a <Effects> Node, forcing a list of effects to exist somewhere (possibly same helper as schema specifier). However since again adding a new attack effect always involves adding JS code so I see that hardcoding as a more minor concern.

Hybrid

Template Structure:

<AttackType>
   <Effects>
      <Hack comp="Health">5</Hack>
      <Capture comp="Capturable">4</Capture>
      <StatusEffects comp="StatusEffects">
         <Burn>...</Burn>
      </StatusEffects>
   </Effects>
</AttackType>

This drops the need for a helper, but it's quite verbose.


In both cases a function needs to be changed implementing the effects of the attack.
D368 handles this with a generic 'Reduce' function in the affected component, whereas D2092 deals with this entirely in DamageReceiver.
I think the latter approach is slightly better as:

  • whatever name we pick for the 'reduce' function, effects such as status effects or stun wouldn't really work with it, so it'd have to be _so_ generic to be meaningless.
  • it keeps the code together, likely allowing for more deduplication.
  • attack effects usually end up affecting components other than the receiving one, and I feel like dealing with this in the damage receiver makes most sense.`
Therefore

I like D2092's approach better as I find it cleaner overall, its main con being that it hardcodes attack effects more. But since adding new attack effects means adding JS code anyway, I see this as a rather limited concern (compared to generic attack types, generic damage types).

Cannot be iterated over unless wrapped in a <Effects>-node (...)

You could propose that as another hybrid option? That looks more like a hybrid than the current hybrid.

bb added a subscriber: bb.Thu, Jul 25, 1:28 PM

D368 way

Template structure:

<AttackType>
   <Effects>
      <Hack>5</Hack>
      <Capture>4</Capture>
      <StatusEffects>
         <Burn>...</Burn>
      </StatusEffects>
   </Effects>
</AttackType>

Not exactly what is proposed:

<AttackType>
   <Effects>
      <Damage>
         <Hack>5</Hack>
         <Capture>4</Capture>
      </Damage>
      <StatusEffects>
         <Burn>...</Burn>
      </StatusEffects>
   </Effects>
</AttackType>

(Even more precise would be without the Effects indentation, but fine with adding that)
Pros:
Effects can be iterated over
Nodes reflect the component it maps to (Damage to DamageReciever, StatusEffect to statuseffectReceiver), thus no hardcoding of these
Damagetypes can be iterated over within all effects, thus statusEffects can capture immediately

Cons:
Health dependence in capture damagetype needs to be hardcoded
Damage sounds weird for capture
Extra level of indentation on one-effect things

Right, I did misunderstand what you meant.

To me adding a status effect is similar to damage/capture, in fact to me a status effect could add another status effect (would be a way to queue them over time or something).

Freagarach added a comment.EditedThu, Jul 25, 5:20 PM

If I read these comments correctly, the only thing where @wraitii and @bb disagree over is whether capture should be within the damage node (possible renamed) or in a seperate node?
If we would let capture out of damage (i.e. create its own node) and let StatusEffects accept the Effects-schema we would:

  • No need for "Health dependence in capture damagetype needs to be hardcoded".
  • Still be able to iterate over effects.
  • Keep "Nodes reflect the component it maps to (Damage to DamageReciever, StatusEffect to statuseffectReceiver), thus no hardcoding of these" (capture to capturable).
  • Let status effects be able to deal status effects (weird but supportable).

I.e.

<AttackType>
   <Effects>
      <Damage>
         <Hack>5</Hack>
      </Damage>
      <Capture>4</Capture>
      <StatusEffects>
         <Burn>...</Burn>
      </StatusEffects>
   </Effects>
</AttackType>

Cons:

  • Extra indentation.
  • Breaks mod support yet again (though that is bound to happen with some of the open patches).

Please correct me if I'm wrong.

wraitii updated this revision to Diff 9179.Wed, Jul 31, 8:52 PM

Compromise solution, without the Effects Node for now as that would change templates.

I also choose not to introduce intermediary receiver components, so Health.HandleAttackEffects, Capturable.HandleAttackEffects ... get directly called.

This means Armour (aka DamageReceiver) is now just a Resistance component, and is entirely facultative - if you have health, you can take health damage.

I need a new helper to map damage types. This could be circumvented by an "Effects" node, but to be honest I don't see much the point.

I think I'll end up moving the Damage "HandleAttackEffects" function in the helper, and Damage.JS can be "DelayedAttack" system component or something like that.

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [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
| 796| 796| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 797| 797| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 798| 798| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 799|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 799|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 800| 800| 	}
| 801| 801| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 802| 802| 	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
|1629|1629| 			{
|1630|1630| 				minDist2 = dist2;
|1631|1631| 				minDistEntitySnapData = {
|1632|    |-						"x": pos.x,
|    |1632|+					"x": pos.x,
|1633|1633| 						"z": pos.z,
|1634|1634| 						"angle": cmpPosition.GetRotation().y,
|1635|1635| 						"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
|1630|1630| 				minDist2 = dist2;
|1631|1631| 				minDistEntitySnapData = {
|1632|1632| 						"x": pos.x,
|1633|    |-						"z": pos.z,
|    |1633|+					"z": pos.z,
|1634|1634| 						"angle": cmpPosition.GetRotation().y,
|1635|1635| 						"ent": ent
|1636|1636| 				};
|    | [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
|1631|1631| 				minDistEntitySnapData = {
|1632|1632| 						"x": pos.x,
|1633|1633| 						"z": pos.z,
|1634|    |-						"angle": cmpPosition.GetRotation().y,
|    |1634|+					"angle": cmpPosition.GetRotation().y,
|1635|1635| 						"ent": ent
|1636|1636| 				};
|1637|1637| 			}
|    | [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
|1632|1632| 						"x": pos.x,
|1633|1633| 						"z": pos.z,
|1634|1634| 						"angle": cmpPosition.GetRotation().y,
|1635|    |-						"ent": ent
|    |1635|+					"ent": ent
|1636|1636| 				};
|1637|1637| 			}
|1638|1638| 		}

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 801| »   »   if·(this.position()·!==·undefined)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 818| »   »   if·(this.position()·!==·undefined·&&·unitToFleeFrom.position()·!==·undefined)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 948| }(API3);
|    | [MAJOR] ESLintBear (no-use-before-define):
|    | 'API3' was used before it was defined.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|  23|  23| 	let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
|  24|  24| 	let turnLength = cmpTimer.GetLatestTurnLength();
|  25|  25| 	return new Vector3D(
|  26|    |-			(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|    |  26|+		(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|  27|  27| 			0,
|  28|  28| 			(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|  29|  29| };
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|  24|  24| 	let turnLength = cmpTimer.GetLatestTurnLength();
|  25|  25| 	return new Vector3D(
|  26|  26| 			(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|  27|    |-			0,
|    |  27|+		0,
|  28|  28| 			(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|  29|  29| };
|  30|  30| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Damage.js
|  25|  25| 	return new Vector3D(
|  26|  26| 			(curPos.x * (turnLength - lateness) + prevPos.x * lateness) / turnLength,
|  27|  27| 			0,
|  28|    |-			(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|    |  28|+		(curPos.z * (turnLength - lateness) + prevPos.z * lateness) / turnLength);
|  29|  29| };
|  30|  30| 
|  31|  31| /**
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '||' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|  87|  87| 		// If the elements are still strings, split them by space or by '+'
|  88|  88| 		if (typeof sublist == "string")
|  89|  89| 			sublist = sublist.split(/[+\s]+/);
|  90|    |-		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1)
|  91|    |-		                    || (c[0] != "!" && classes.indexOf(c) != -1)))
|    |  90|+		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) ||
|    |  91|+		                    (c[0] != "!" && classes.indexOf(c) != -1)))
|  92|  92| 			return true;
|  93|  93| 	}
|  94|  94| 

binaries/data/mods/public/globalscripts/Templates.js
|  91| »   »   ····················||·(c[0]·!=·"!"·&&·classes.indexOf(c)·!=·-1)))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '||'; readers may interpret this as an expression boundary.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 389| 389| function getRepairTimeTooltip(entState)
| 390| 390| {
| 391| 391| 	return sprintf(translate("%(label)s %(details)s"), {
| 392|    |-			"label": headerFont(translate("Number of repairers:")),
|    | 392|+		"label": headerFont(translate("Number of repairers:")),
| 393| 393| 			"details": entState.repairable.numBuilders
| 394| 394| 		}) + "\n" + (entState.repairable.numBuilders ?
| 395| 395| 		sprintf(translatePlural(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 390| 390| {
| 391| 391| 	return sprintf(translate("%(label)s %(details)s"), {
| 392| 392| 			"label": headerFont(translate("Number of repairers:")),
| 393|    |-			"details": entState.repairable.numBuilders
|    | 393|+		"details": entState.repairable.numBuilders
| 394| 394| 		}) + "\n" + (entState.repairable.numBuilders ?
| 395| 395| 		sprintf(translatePlural(
| 396| 396| 			"Add another worker to speed up the repairs by %(second)s second.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 391| 391| 	return sprintf(translate("%(label)s %(details)s"), {
| 392| 392| 			"label": headerFont(translate("Number of repairers:")),
| 393| 393| 			"details": entState.repairable.numBuilders
| 394|    |-		}) + "\n" + (entState.repairable.numBuilders ?
|    | 394|+	}) + "\n" + (entState.repairable.numBuilders ?
| 395| 395| 		sprintf(translatePlural(
| 396| 396| 			"Add another worker to speed up the repairs by %(second)s second.",
| 397| 397| 			"Add another worker to speed up the repairs by %(second)s seconds.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 411| 411| function getBuildTimeTooltip(entState)
| 412| 412| {
| 413| 413| 	return sprintf(translate("%(label)s %(details)s"), {
| 414|    |-			"label": headerFont(translate("Number of builders:")),
|    | 414|+		"label": headerFont(translate("Number of builders:")),
| 415| 415| 			"details": entState.foundation.numBuilders
| 416| 416| 		}) + "\n" + (entState.foundation.numBuilders ?
| 417| 417| 		sprintf(translatePlural(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 412| 412| {
| 413| 413| 	return sprintf(translate("%(label)s %(details)s"), {
| 414| 414| 			"label": headerFont(translate("Number of builders:")),
| 415|    |-			"details": entState.foundation.numBuilders
|    | 415|+		"details": entState.foundation.numBuilders
| 416| 416| 		}) + "\n" + (entState.foundation.numBuilders ?
| 417| 417| 		sprintf(translatePlural(
| 418| 418| 			"Add another worker to speed up the construction by %(second)s second.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 413| 413| 	return sprintf(translate("%(label)s %(details)s"), {
| 414| 414| 			"label": headerFont(translate("Number of builders:")),
| 415| 415| 			"details": entState.foundation.numBuilders
| 416|    |-		}) + "\n" + (entState.foundation.numBuilders ?
|    | 416|+	}) + "\n" + (entState.foundation.numBuilders ?
| 417| 417| 		sprintf(translatePlural(
| 418| 418| 			"Add another worker to speed up the construction by %(second)s second.",
| 419| 419| 			"Add another worker to speed up the construction by %(second)s seconds.",
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|  18|  18| 	this.cp = [];
|  19|  19| };
|  20|  20| 
|  21|    |-//// Interface functions ////
|    |  21|+// // Interface functions ////
|  22|  22| 
|  23|  23| /**
|  24|  24|  * Returns the current capture points array
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
| 145| 145| 	return sourceEnemyCp > 0;
| 146| 146| };
| 147| 147| 
| 148|    |-//// Private functions ////
|    | 148|+// // Private functions ////
| 149| 149| 
| 150| 150| /**
| 151| 151|  * This has to be called whenever the capture points are changed.
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
| 260| 260| 	Engine.PostMessage(this.entity, MT_CaptureRegenStateChanged, { "regenerating": true, "regenRate": regenRate, "territoryDecay": decay });
| 261| 261| };
| 262| 262| 
| 263|    |-//// Message Listeners ////
|    | 263|+// // Message Listeners ////
| 264| 264| 
| 265| 265| Capturable.prototype.OnValueModification = function(msg)
| 266| 266| {

binaries/data/mods/public/simulation/components/Capturable.js
| 192| »   »   var·garrisonRegenRate·=·0;
|    | [NORMAL] JSHintBear:
|    | 'garrisonRegenRate' is already defined.

binaries/data/mods/public/simulation/components/Capturable.js
| 194| »   return·regenRate·+·garrisonRegenRate;
|    | [NORMAL] JSHintBear:
|    | 'garrisonRegenRate' used out of scope.
Executing section cli...

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

Works pretty neat already :)

binaries/data/mods/public/simulation/components/Capturable.js
55

!this.CanCapture(attackerOwner)

wraitii updated this revision to Diff 9392.Mon, Aug 19, 8:47 AM
wraitii edited the summary of this revision. (Show Details)

Fixed remark above.

Fell down the renaming rabbit hole.
Changes:

  • DamageReceiver -> Resistance
  • Damage -> DelayedDamage
  • AttackEffects -> Attacking
  • Most "Damage" functions become free functions in the "Attacking" helper.

Plausible next steps after this patch:

  • DelayedDamage could be removed by putting MissileHit on ProjectileManager.
  • DamageBonus could be merged (or Attacking could be split, alternatively).
  • There's probably an opportunity to not copy so much data by relying on template values more or less directly in Attacking.

This passes tests and doesn't seem to crash on a simple 1v1 AI-AI game.
I'll merge this soon because it enables / blocks several other related changes.

Owners added a subscriber: Restricted Owners Package.Mon, Aug 19, 8:47 AM

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

Linter detected issues:
Executing section Source...
Executing section JS...

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 801| »   »   if·(this.position()·!==·undefined)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 818| »   »   if·(this.position()·!==·undefined·&&·unitToFleeFrom.position()·!==·undefined)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 948| }(API3);
|    | [MAJOR] ESLintBear (no-use-before-define):
|    | 'API3' was used before it was defined.
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '||' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/Templates.js
|  87|  87| 		// If the elements are still strings, split them by space or by '+'
|  88|  88| 		if (typeof sublist == "string")
|  89|  89| 			sublist = sublist.split(/[+\s]+/);
|  90|    |-		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1)
|  91|    |-		                    || (c[0] != "!" && classes.indexOf(c) != -1)))
|    |  90|+		if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) ||
|    |  91|+		                    (c[0] != "!" && classes.indexOf(c) != -1)))
|  92|  92| 			return true;
|  93|  93| 	}
|  94|  94| 

binaries/data/mods/public/globalscripts/Templates.js
|  91| »   »   ····················||·(c[0]·!=·"!"·&&·classes.indexOf(c)·!=·-1)))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '||'; readers may interpret this as an expression boundary.
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetInterval' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  35|  35| 
|  36|  36| 
|  37|  37| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
|  38|    |-		SetInterval: function() { },
|    |  38|+		"SetInterval": function() { },
|  39|  39| 		SetTimeout: function() { },
|  40|  40| 	});
|  41|  41| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetTimeout' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  36|  36| 
|  37|  37| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
|  38|  38| 		SetInterval: function() { },
|  39|    |-		SetTimeout: function() { },
|    |  39|+		"SetTimeout": function() { },
|  40|  40| 	});
|  41|  41| 
|  42|  42| 	AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CreateActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  40|  40| 	});
|  41|  41| 
|  42|  42| 	AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|  43|    |-		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
|    |  43|+		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
|  44|  44| 			return 1;
|  45|  45| 		},
|  46|  46| 		EnableActiveQuery: function(id) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'EnableActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  43|  43| 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
|  44|  44| 			return 1;
|  45|  45| 		},
|  46|    |-		EnableActiveQuery: function(id) { },
|    |  46|+		"EnableActiveQuery": function(id) { },
|  47|  47| 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|  48|  48| 		DisableActiveQuery: function(id) { },
|  49|  49| 		GetEntityFlagMask: function(identifier) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'ResetActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  44|  44| 			return 1;
|  45|  45| 		},
|  46|  46| 		EnableActiveQuery: function(id) { },
|  47|    |-		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|    |  47|+		"ResetActiveQuery": function(id) { if (mode == 0) return []; else return [enemy]; },
|  48|  48| 		DisableActiveQuery: function(id) { },
|  49|  49| 		GetEntityFlagMask: function(identifier) { },
|  50|  50| 	});
|    | [NORMAL] ESLintBear (no-else-return):
|    | Unnecessary 'else' after 'return'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  44|  44| 			return 1;
|  45|  45| 		},
|  46|  46| 		EnableActiveQuery: function(id) { },
|  47|    |-		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|    |  47|+		ResetActiveQuery: function(id) { if (mode == 0) return []; return [enemy]; },
|  48|  48| 		DisableActiveQuery: function(id) { },
|  49|  49| 		GetEntityFlagMask: function(identifier) { },
|  50|  50| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'DisableActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  45|  45| 		},
|  46|  46| 		EnableActiveQuery: function(id) { },
|  47|  47| 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|  48|    |-		DisableActiveQuery: function(id) { },
|    |  48|+		"DisableActiveQuery": function(id) { },
|  49|  49| 		GetEntityFlagMask: function(identifier) { },
|  50|  50| 	});
|  51|  51| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEntityFlagMask' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  46|  46| 		EnableActiveQuery: function(id) { },
|  47|  47| 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
|  48|  48| 		DisableActiveQuery: function(id) { },
|  49|    |-		GetEntityFlagMask: function(identifier) { },
|    |  49|+		"GetEntityFlagMask": function(identifier) { },
|  50|  50| 	});
|  51|  51| 
|  52|  52| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCurrentTemplateName' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  50|  50| 	});
|  51|  51| 
|  52|  52| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|  53|    |-		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
|    |  53|+		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
|  54|  54| 	});
|  55|  55| 
|  56|  56| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPlayerByID' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  54|  54| 	});
|  55|  55| 
|  56|  56| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  57|    |-		GetPlayerByID: function(id) { return playerEntity; },
|    |  57|+		"GetPlayerByID": function(id) { return playerEntity; },
|  58|  58| 		GetNumPlayers: function() { return 2; },
|  59|  59| 	});
|  60|  60| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetNumPlayers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  55|  55| 
|  56|  56| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  57|  57| 		GetPlayerByID: function(id) { return playerEntity; },
|  58|    |-		GetNumPlayers: function() { return 2; },
|    |  58|+		"GetNumPlayers": function() { return 2; },
|  59|  59| 	});
|  60|  60| 
|  61|  61| 	AddMock(playerEntity, IID_Player, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  59|  59| 	});
|  60|  60| 
|  61|  61| 	AddMock(playerEntity, IID_Player, {
|  62|    |-		IsAlly: function() { return false; },
|    |  62|+		"IsAlly": function() { return false; },
|  63|  63| 		IsEnemy: function() { return true; },
|  64|  64| 		GetEnemies: function() { return []; },
|  65|  65| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsEnemy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  60|  60| 
|  61|  61| 	AddMock(playerEntity, IID_Player, {
|  62|  62| 		IsAlly: function() { return false; },
|  63|    |-		IsEnemy: function() { return true; },
|    |  63|+		"IsEnemy": function() { return true; },
|  64|  64| 		GetEnemies: function() { return []; },
|  65|  65| 	});
|  66|  66| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEnemies' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  61|  61| 	AddMock(playerEntity, IID_Player, {
|  62|  62| 		IsAlly: function() { return false; },
|  63|  63| 		IsEnemy: function() { return true; },
|  64|    |-		GetEnemies: function() { return []; },
|    |  64|+		"GetEnemies": function() { return []; },
|  65|  65| 	});
|  66|  66| 
|  67|  67| 	AddMock(SYSTEM_ENTITY, IID_ObstructionManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetClassesList' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  71|  71| 	var unitAI = ConstructComponent(unit, "UnitAI", { "FormationController": "false", "DefaultStance": "aggressive" });
|  72|  72| 
|  73|  73| 	AddMock(unit, IID_Identity, {
|  74|    |-		GetClassesList: function() { return []; },
|    |  74|+		"GetClassesList": function() { return []; },
|  75|  75| 	});
|  76|  76| 
|  77|  77| 	AddMock(unit, IID_Ownership, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetOwner' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  75|  75| 	});
|  76|  76| 
|  77|  77| 	AddMock(unit, IID_Ownership, {
|  78|    |-		GetOwner: function() { return 1; },
|    |  78|+		"GetOwner": function() { return 1; },
|  79|  79| 	});
|  80|  80| 
|  81|  81| 	AddMock(unit, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  79|  79| 	});
|  80|  80| 
|  81|  81| 	AddMock(unit, IID_Position, {
|  82|    |-		GetTurretParent: function() { return INVALID_ENTITY; },
|    |  82|+		"GetTurretParent": function() { return INVALID_ENTITY; },
|  83|  83| 		GetPosition: function() { return new Vector3D(); },
|  84|  84| 		GetPosition2D: function() { return new Vector2D(); },
|  85|  85| 		GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  80|  80| 
|  81|  81| 	AddMock(unit, IID_Position, {
|  82|  82| 		GetTurretParent: function() { return INVALID_ENTITY; },
|  83|    |-		GetPosition: function() { return new Vector3D(); },
|    |  83|+		"GetPosition": function() { return new Vector3D(); },
|  84|  84| 		GetPosition2D: function() { return new Vector2D(); },
|  85|  85| 		GetRotation: function() { return { "y": 0 }; },
|  86|  86| 		IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  81|  81| 	AddMock(unit, IID_Position, {
|  82|  82| 		GetTurretParent: function() { return INVALID_ENTITY; },
|  83|  83| 		GetPosition: function() { return new Vector3D(); },
|  84|    |-		GetPosition2D: function() { return new Vector2D(); },
|    |  84|+		"GetPosition2D": function() { return new Vector2D(); },
|  85|  85| 		GetRotation: function() { return { "y": 0 }; },
|  86|  86| 		IsInWorld: function() { return true; },
|  87|  87| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  82|  82| 		GetTurretParent: function() { return INVALID_ENTITY; },
|  83|  83| 		GetPosition: function() { return new Vector3D(); },
|  84|  84| 		GetPosition2D: function() { return new Vector2D(); },
|  85|    |-		GetRotation: function() { return { "y": 0 }; },
|    |  85|+		"GetRotation": function() { return { "y": 0 }; },
|  86|  86| 		IsInWorld: function() { return true; },
|  87|  87| 	});
|  88|  88| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  83|  83| 		GetPosition: function() { return new Vector3D(); },
|  84|  84| 		GetPosition2D: function() { return new Vector2D(); },
|  85|  85| 		GetRotation: function() { return { "y": 0 }; },
|  86|    |-		IsInWorld: function() { return true; },
|    |  86|+		"IsInWorld": function() { return true; },
|  87|  87| 	});
|  88|  88| 
|  89|  89| 	AddMock(unit, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  95|  95| 	});
|  96|  96| 
|  97|  97| 	AddMock(unit, IID_Vision, {
|  98|    |-		GetRange: function() { return 10; },
|    |  98|+		"GetRange": function() { return 10; },
|  99|  99| 	});
| 100| 100| 
| 101| 101| 	AddMock(unit, IID_Attack, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  99|  99| 	});
| 100| 100| 
| 101| 101| 	AddMock(unit, IID_Attack, {
| 102|    |-		GetRange: function() { return { "max": 10, "min": 0}; },
|    | 102|+		"GetRange": function() { return { "max": 10, "min": 0}; },
| 103| 103| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 104| 104| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 105| 105| 		GetPreference: function(t) { return 0; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  99|  99| 	});
| 100| 100| 
| 101| 101| 	AddMock(unit, IID_Attack, {
| 102|    |-		GetRange: function() { return { "max": 10, "min": 0}; },
|    | 102|+		GetRange: function() { return { "max": 10, "min": 0 }; },
| 103| 103| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 104| 104| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 105| 105| 		GetPreference: function(t) { return 0; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetFullAttackRange' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 100| 100| 
| 101| 101| 	AddMock(unit, IID_Attack, {
| 102| 102| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 103|    |-		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 103|+		"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
| 104| 104| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 105| 105| 		GetPreference: function(t) { return 0; },
| 106| 106| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 100| 100| 
| 101| 101| 	AddMock(unit, IID_Attack, {
| 102| 102| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 103|    |-		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 103|+		GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
| 104| 104| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 105| 105| 		GetPreference: function(t) { return 0; },
| 106| 106| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetBestAttackAgainst' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 101| 101| 	AddMock(unit, IID_Attack, {
| 102| 102| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 103| 103| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 104|    |-		GetBestAttackAgainst: function(t) { return "melee"; },
|    | 104|+		"GetBestAttackAgainst": function(t) { return "melee"; },
| 105| 105| 		GetPreference: function(t) { return 0; },
| 106| 106| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 107| 107| 		CanAttack: function(v) { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPreference' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 102| 102| 		GetRange: function() { return { "max": 10, "min": 0}; },
| 103| 103| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 104| 104| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 105|    |-		GetPreference: function(t) { return 0; },
|    | 105|+		"GetPreference": function(t) { return 0; },
| 106| 106| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 107| 107| 		CanAttack: function(v) { return true; },
| 108| 108| 		CompareEntitiesByPreference: function(a, b) { return 0; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTimers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 103| 103| 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 104| 104| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 105| 105| 		GetPreference: function(t) { return 0; },
| 106|    |-		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | 106|+		"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
| 107| 107| 		CanAttack: function(v) { return true; },
| 108| 108| 		CompareEntitiesByPreference: function(a, b) { return 0; },
| 109| 109| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanAttack' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 104| 104| 		GetBestAttackAgainst: function(t) { return "melee"; },
| 105| 105| 		GetPreference: function(t) { return 0; },
| 106| 106| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 107|    |-		CanAttack: function(v) { return true; },
|    | 107|+		"CanAttack": function(v) { return true; },
| 108| 108| 		CompareEntitiesByPreference: function(a, b) { return 0; },
| 109| 109| 	});
| 110| 110| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CompareEntitiesByPreference' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 105| 105| 		GetPreference: function(t) { return 0; },
| 106| 106| 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 107| 107| 		CanAttack: function(v) { return true; },
| 108|    |-		CompareEntitiesByPreference: function(a, b) { return 0; },
|    | 108|+		"CompareEntitiesByPreference": function(a, b) { return 0; },
| 109| 109| 	});
| 110| 110| 
| 111| 111| 	unitAI.OnCreate();
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetHitpoints' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 116| 116| 	if (mode == 1)
| 117| 117| 	{
| 118| 118| 		AddMock(enemy, IID_Health, {
| 119|    |-			GetHitpoints: function() { return 10; },
|    | 119|+			"GetHitpoints": function() { return 10; },
| 120| 120| 		});
| 121| 121| 		AddMock(enemy, IID_UnitAI, {
| 122| 122| 			IsAnimal: function() { return false; }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAnimal' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 119| 119| 			GetHitpoints: function() { return 10; },
| 120| 120| 		});
| 121| 121| 		AddMock(enemy, IID_UnitAI, {
| 122|    |-			IsAnimal: function() { return false; }
|    | 122|+			"IsAnimal": function() { return false; }
| 123| 123| 		});
| 124| 124| 	}
| 125| 125| 	else if (mode == 2)
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetHitpoints' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 124| 124| 	}
| 125| 125| 	else if (mode == 2)
| 126| 126| 		AddMock(enemy, IID_Health, {
| 127|    |-			GetHitpoints: function() { return 0; },
|    | 127|+			"GetHitpoints": function() { return 0; },
| 128| 128| 		});
| 129| 129| 
| 130| 130| 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 127| 127| 			GetHitpoints: function() { return 0; },
| 128| 128| 		});
| 129| 129| 
| 130|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 130|+	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
| 131| 131| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 132| 132| 
| 133| 133| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 127| 127| 			GetHitpoints: function() { return 0; },
| 128| 128| 		});
| 129| 129| 
| 130|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 130|+	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
| 131| 131| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 132| 132| 
| 133| 133| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'JumpTo' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 131| 131| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 132| 132| 
| 133| 133| 	AddMock(controller, IID_Position, {
| 134|    |-		JumpTo: function(x, z) { this.x = x; this.z = z; },
|    | 134|+		"JumpTo": function(x, z) { this.x = x; this.z = z; },
| 135| 135| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 136| 136| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 137| 137| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 132| 132| 
| 133| 133| 	AddMock(controller, IID_Position, {
| 134| 134| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 135|    |-		GetTurretParent: function() { return INVALID_ENTITY; },
|    | 135|+		"GetTurretParent": function() { return INVALID_ENTITY; },
| 136| 136| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 137| 137| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 138| 138| 		GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 133| 133| 	AddMock(controller, IID_Position, {
| 134| 134| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 135| 135| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 136|    |-		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
|    | 136|+		"GetPosition": function() { return new Vector3D(this.x, 0, this.z); },
| 137| 137| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 138| 138| 		GetRotation: function() { return { "y": 0 }; },
| 139| 139| 		IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 134| 134| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 135| 135| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 136| 136| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 137|    |-		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | 137|+		"GetPosition2D": function() { return new Vector2D(this.x, this.z); },
| 138| 138| 		GetRotation: function() { return { "y": 0 }; },
| 139| 139| 		IsInWorld: function() { return true; },
| 140| 140| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 135| 135| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 136| 136| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 137| 137| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 138|    |-		GetRotation: function() { return { "y": 0 }; },
|    | 138|+		"GetRotation": function() { return { "y": 0 }; },
| 139| 139| 		IsInWorld: function() { return true; },
| 140| 140| 	});
| 141| 141| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 136| 136| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 137| 137| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 138| 138| 		GetRotation: function() { return { "y": 0 }; },
| 139|    |-		IsInWorld: function() { return true; },
|    | 139|+		"IsInWorld": function() { return true; },
| 140| 140| 	});
| 141| 141| 
| 142| 142| 	AddMock(controller, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetInterval' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 186| 186| 	var unitAIs = [];
| 187| 187| 
| 188| 188| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
| 189|    |-		SetInterval: function() { },
|    | 189|+		"SetInterval": function() { },
| 190| 190| 		SetTimeout: function() { },
| 191| 191| 	});
| 192| 192| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetTimeout' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 187| 187| 
| 188| 188| 	AddMock(SYSTEM_ENTITY, IID_Timer, {
| 189| 189| 		SetInterval: function() { },
| 190|    |-		SetTimeout: function() { },
|    | 190|+		"SetTimeout": function() { },
| 191| 191| 	});
| 192| 192| 
| 193| 193| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CreateActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 192| 192| 
| 193| 193| 
| 194| 194| 	AddMock(SYSTEM_ENTITY, IID_RangeManager, {
| 195|    |-		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
|    | 195|+		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
| 196| 196| 			return 1;
| 197| 197| 		},
| 198| 198| 		EnableActiveQuery: function(id) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'EnableActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 195| 195| 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
| 196| 196| 			return 1;
| 197| 197| 		},
| 198|    |-		EnableActiveQuery: function(id) { },
|    | 198|+		"EnableActiveQuery": function(id) { },
| 199| 199| 		ResetActiveQuery: function(id) { return [enemy]; },
| 200| 200| 		DisableActiveQuery: function(id) { },
| 201| 201| 		GetEntityFlagMask: function(identifier) { },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'ResetActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 196| 196| 			return 1;
| 197| 197| 		},
| 198| 198| 		EnableActiveQuery: function(id) { },
| 199|    |-		ResetActiveQuery: function(id) { return [enemy]; },
|    | 199|+		"ResetActiveQuery": function(id) { return [enemy]; },
| 200| 200| 		DisableActiveQuery: function(id) { },
| 201| 201| 		GetEntityFlagMask: function(identifier) { },
| 202| 202| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'DisableActiveQuery' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 197| 197| 		},
| 198| 198| 		EnableActiveQuery: function(id) { },
| 199| 199| 		ResetActiveQuery: function(id) { return [enemy]; },
| 200|    |-		DisableActiveQuery: function(id) { },
|    | 200|+		"DisableActiveQuery": function(id) { },
| 201| 201| 		GetEntityFlagMask: function(identifier) { },
| 202| 202| 	});
| 203| 203| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEntityFlagMask' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 198| 198| 		EnableActiveQuery: function(id) { },
| 199| 199| 		ResetActiveQuery: function(id) { return [enemy]; },
| 200| 200| 		DisableActiveQuery: function(id) { },
| 201|    |-		GetEntityFlagMask: function(identifier) { },
|    | 201|+		"GetEntityFlagMask": function(identifier) { },
| 202| 202| 	});
| 203| 203| 
| 204| 204| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCurrentTemplateName' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 202| 202| 	});
| 203| 203| 
| 204| 204| 	AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
| 205|    |-		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
|    | 205|+		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
| 206| 206| 	});
| 207| 207| 
| 208| 208| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPlayerByID' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 206| 206| 	});
| 207| 207| 
| 208| 208| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
| 209|    |-		GetPlayerByID: function(id) { return playerEntity; },
|    | 209|+		"GetPlayerByID": function(id) { return playerEntity; },
| 210| 210| 		GetNumPlayers: function() { return 2; },
| 211| 211| 	});
| 212| 212| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetNumPlayers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 207| 207| 
| 208| 208| 	AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
| 209| 209| 		GetPlayerByID: function(id) { return playerEntity; },
| 210|    |-		GetNumPlayers: function() { return 2; },
|    | 210|+		"GetNumPlayers": function() { return 2; },
| 211| 211| 	});
| 212| 212| 
| 213| 213| 	AddMock(SYSTEM_ENTITY, IID_ObstructionManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 215| 215| 	});
| 216| 216| 
| 217| 217| 	AddMock(playerEntity, IID_Player, {
| 218|    |-		IsAlly: function() { return false; },
|    | 218|+		"IsAlly": function() { return false; },
| 219| 219| 		IsEnemy: function() { return true; },
| 220| 220| 		GetEnemies: function() { return []; },
| 221| 221| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsEnemy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 216| 216| 
| 217| 217| 	AddMock(playerEntity, IID_Player, {
| 218| 218| 		IsAlly: function() { return false; },
| 219|    |-		IsEnemy: function() { return true; },
|    | 219|+		"IsEnemy": function() { return true; },
| 220| 220| 		GetEnemies: function() { return []; },
| 221| 221| 	});
| 222| 222| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEnemies' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 217| 217| 	AddMock(playerEntity, IID_Player, {
| 218| 218| 		IsAlly: function() { return false; },
| 219| 219| 		IsEnemy: function() { return true; },
| 220|    |-		GetEnemies: function() { return []; },
|    | 220|+		"GetEnemies": function() { return []; },
| 221| 221| 	});
| 222| 222| 
| 223| 223| 	// create units
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetClassesList' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 228| 228| 		var unitAI = ConstructComponent(unit + i, "UnitAI", { "FormationController": "false", "DefaultStance": "aggressive" });
| 229| 229| 
| 230| 230| 		AddMock(unit + i, IID_Identity, {
| 231|    |-			GetClassesList: function() { return []; },
|    | 231|+			"GetClassesList": function() { return []; },
| 232| 232| 		});
| 233| 233| 
| 234| 234| 		AddMock(unit + i, IID_Ownership, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetOwner' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 232| 232| 		});
| 233| 233| 
| 234| 234| 		AddMock(unit + i, IID_Ownership, {
| 235|    |-			GetOwner: function() { return 1; },
|    | 235|+			"GetOwner": function() { return 1; },
| 236| 236| 		});
| 237| 237| 
| 238| 238| 		AddMock(unit + i, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 236| 236| 		});
| 237| 237| 
| 238| 238| 		AddMock(unit + i, IID_Position, {
| 239|    |-			GetTurretParent: function() { return INVALID_ENTITY; },
|    | 239|+			"GetTurretParent": function() { return INVALID_ENTITY; },
| 240| 240| 			GetPosition: function() { return new Vector3D(); },
| 241| 241| 			GetPosition2D: function() { return new Vector2D(); },
| 242| 242| 			GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 237| 237| 
| 238| 238| 		AddMock(unit + i, IID_Position, {
| 239| 239| 			GetTurretParent: function() { return INVALID_ENTITY; },
| 240|    |-			GetPosition: function() { return new Vector3D(); },
|    | 240|+			"GetPosition": function() { return new Vector3D(); },
| 241| 241| 			GetPosition2D: function() { return new Vector2D(); },
| 242| 242| 			GetRotation: function() { return { "y": 0 }; },
| 243| 243| 			IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 238| 238| 		AddMock(unit + i, IID_Position, {
| 239| 239| 			GetTurretParent: function() { return INVALID_ENTITY; },
| 240| 240| 			GetPosition: function() { return new Vector3D(); },
| 241|    |-			GetPosition2D: function() { return new Vector2D(); },
|    | 241|+			"GetPosition2D": function() { return new Vector2D(); },
| 242| 242| 			GetRotation: function() { return { "y": 0 }; },
| 243| 243| 			IsInWorld: function() { return true; },
| 244| 244| 		});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 239| 239| 			GetTurretParent: function() { return INVALID_ENTITY; },
| 240| 240| 			GetPosition: function() { return new Vector3D(); },
| 241| 241| 			GetPosition2D: function() { return new Vector2D(); },
| 242|    |-			GetRotation: function() { return { "y": 0 }; },
|    | 242|+			"GetRotation": function() { return { "y": 0 }; },
| 243| 243| 			IsInWorld: function() { return true; },
| 244| 244| 		});
| 245| 245| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 240| 240| 			GetPosition: function() { return new Vector3D(); },
| 241| 241| 			GetPosition2D: function() { return new Vector2D(); },
| 242| 242| 			GetRotation: function() { return { "y": 0 }; },
| 243|    |-			IsInWorld: function() { return true; },
|    | 243|+			"IsInWorld": function() { return true; },
| 244| 244| 		});
| 245| 245| 
| 246| 246| 		AddMock(unit + i, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 252| 252| 		});
| 253| 253| 
| 254| 254| 		AddMock(unit + i, IID_Vision, {
| 255|    |-			GetRange: function() { return 10; },
|    | 255|+			"GetRange": function() { return 10; },
| 256| 256| 		});
| 257| 257| 
| 258| 258| 		AddMock(unit + i, IID_Attack, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 256| 256| 		});
| 257| 257| 
| 258| 258| 		AddMock(unit + i, IID_Attack, {
| 259|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 259|+			"GetRange": function() { return {"max":10, "min": 0}; },
| 260| 260| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 256| 256| 		});
| 257| 257| 
| 258| 258| 		AddMock(unit + i, IID_Attack, {
| 259|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 259|+			GetRange: function() { return { "max":10, "min": 0}; },
| 260| 260| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'max'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 256| 256| 		});
| 257| 257| 
| 258| 258| 		AddMock(unit + i, IID_Attack, {
| 259|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 259|+			GetRange: function() { return {"max": 10, "min": 0}; },
| 260| 260| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 256| 256| 		});
| 257| 257| 
| 258| 258| 		AddMock(unit + i, IID_Attack, {
| 259|    |-			GetRange: function() { return {"max":10, "min": 0}; },
|    | 259|+			GetRange: function() { return {"max":10, "min": 0 }; },
| 260| 260| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetFullAttackRange' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 257| 257| 
| 258| 258| 		AddMock(unit + i, IID_Attack, {
| 259| 259| 			GetRange: function() { return {"max":10, "min": 0}; },
| 260|    |-			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 260|+			"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 263| 263| 			CanAttack: function(v) { return true; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 257| 257| 
| 258| 258| 		AddMock(unit + i, IID_Attack, {
| 259| 259| 			GetRange: function() { return {"max":10, "min": 0}; },
| 260|    |-			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
|    | 260|+			GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 263| 263| 			CanAttack: function(v) { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetBestAttackAgainst' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 258| 258| 		AddMock(unit + i, IID_Attack, {
| 259| 259| 			GetRange: function() { return {"max":10, "min": 0}; },
| 260| 260| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 261|    |-			GetBestAttackAgainst: function(t) { return "melee"; },
|    | 261|+			"GetBestAttackAgainst": function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 263| 263| 			CanAttack: function(v) { return true; },
| 264| 264| 			CompareEntitiesByPreference: function(a, b) { return 0; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTimers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 259| 259| 			GetRange: function() { return {"max":10, "min": 0}; },
| 260| 260| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262|    |-			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
|    | 262|+			"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
| 263| 263| 			CanAttack: function(v) { return true; },
| 264| 264| 			CompareEntitiesByPreference: function(a, b) { return 0; },
| 265| 265| 		});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanAttack' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 260| 260| 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 263|    |-			CanAttack: function(v) { return true; },
|    | 263|+			"CanAttack": function(v) { return true; },
| 264| 264| 			CompareEntitiesByPreference: function(a, b) { return 0; },
| 265| 265| 		});
| 266| 266| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CompareEntitiesByPreference' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 261| 261| 			GetBestAttackAgainst: function(t) { return "melee"; },
| 262| 262| 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
| 263| 263| 			CanAttack: function(v) { return true; },
| 264|    |-			CompareEntitiesByPreference: function(a, b) { return 0; },
|    | 264|+			"CompareEntitiesByPreference": function(a, b) { return 0; },
| 265| 265| 		});
| 266| 266| 
| 267| 267| 		unitAI.OnCreate();
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetHitpoints' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 273| 273| 
| 274| 274| 	// create enemy
| 275| 275| 	AddMock(enemy, IID_Health, {
| 276|    |-		GetHitpoints: function() { return 40; },
|    | 276|+		"GetHitpoints": function() { return 40; },
| 277| 277| 	});
| 278| 278| 
| 279| 279| 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 276| 276| 		GetHitpoints: function() { return 40; },
| 277| 277| 	});
| 278| 278| 
| 279|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 279|+	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
| 280| 280| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 281| 281| 
| 282| 282| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 276| 276| 		GetHitpoints: function() { return 40; },
| 277| 277| 	});
| 278| 278| 
| 279|    |-	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
|    | 279|+	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
| 280| 280| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 281| 281| 
| 282| 282| 	AddMock(controller, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 280| 280| 	var controllerAI = ConstructComponent(controller, "UnitAI", { "FormationController": "true", "DefaultStance": "aggressive" });
| 281| 281| 
| 282| 282| 	AddMock(controller, IID_Position, {
| 283|    |-		GetTurretParent: function() { return INVALID_ENTITY; },
|    | 283|+		"GetTurretParent": function() { return INVALID_ENTITY; },
| 284| 284| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 285| 285| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 286| 286| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'JumpTo' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 281| 281| 
| 282| 282| 	AddMock(controller, IID_Position, {
| 283| 283| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 284|    |-		JumpTo: function(x, z) { this.x = x; this.z = z; },
|    | 284|+		"JumpTo": function(x, z) { this.x = x; this.z = z; },
| 285| 285| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 286| 286| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 287| 287| 		GetRotation: function() { return { "y": 0 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 282| 282| 	AddMock(controller, IID_Position, {
| 283| 283| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 284| 284| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 285|    |-		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
|    | 285|+		"GetPosition": function() { return new Vector3D(this.x, 0, this.z); },
| 286| 286| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 287| 287| 		GetRotation: function() { return { "y": 0 }; },
| 288| 288| 		IsInWorld: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition2D' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 283| 283| 		GetTurretParent: function() { return INVALID_ENTITY; },
| 284| 284| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 285| 285| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 286|    |-		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
|    | 286|+		"GetPosition2D": function() { return new Vector2D(this.x, this.z); },
| 287| 287| 		GetRotation: function() { return { "y": 0 }; },
| 288| 288| 		IsInWorld: function() { return true; },
| 289| 289| 	});
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRotation' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 284| 284| 		JumpTo: function(x, z) { this.x = x; this.z = z; },
| 285| 285| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 286| 286| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 287|    |-		GetRotation: function() { return { "y": 0 }; },
|    | 287|+		"GetRotation": function() { return { "y": 0 }; },
| 288| 288| 		IsInWorld: function() { return true; },
| 289| 289| 	});
| 290| 290| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 285| 285| 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
| 286| 286| 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
| 287| 287| 		GetRotation: function() { return { "y": 0 }; },
| 288|    |-		IsInWorld: function() { return true; },
|    | 288|+		"IsInWorld": function() { return true; },
| 289| 289| 	});
| 290| 290| 
| 291| 291| 	AddMock(controller, IID_UnitMotion, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRange' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 297| 297| 	});
| 298| 298| 
| 299| 299| 	AddMock(controller, IID_Attack, {
| 300|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 300|+		"GetRange": function() { return {"max":10, "min": 0}; },
| 301| 301| 		CanAttackAsFormation: function() { return false; },
| 302| 302| 	});
| 303| 303| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 297| 297| 	});
| 298| 298| 
| 299| 299| 	AddMock(controller, IID_Attack, {
| 300|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 300|+		GetRange: function() { return { "max":10, "min": 0}; },
| 301| 301| 		CanAttackAsFormation: function() { return false; },
| 302| 302| 	});
| 303| 303| 
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'max'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 297| 297| 	});
| 298| 298| 
| 299| 299| 	AddMock(controller, IID_Attack, {
| 300|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 300|+		GetRange: function() { return {"max": 10, "min": 0}; },
| 301| 301| 		CanAttackAsFormation: function() { return false; },
| 302| 302| 	});
| 303| 303| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 297| 297| 	});
| 298| 298| 
| 299| 299| 	AddMock(controller, IID_Attack, {
| 300|    |-		GetRange: function() { return {"max":10, "min": 0}; },
|    | 300|+		GetRange: function() { return {"max":10, "min": 0 }; },
| 301| 301| 		CanAttackAsFormation: function() { return false; },
| 302| 302| 	});
| 303| 303| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanAttackAsFormation' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 298| 298| 
| 299| 299| 	AddMock(controller, IID_Attack, {
| 300| 300| 		GetRange: function() { return {"max":10, "min": 0}; },
| 301|    |-		CanAttackAsFormation: function() { return false; },
|    | 301|+		"CanAttackAsFormation": function() { return false; },
| 302| 302| 	});
| 303| 303| 
| 304| 304| 	controllerAI.OnCreate();
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 310| 310| 	for (var ent of unitAIs)
| 311| 311| 		TS_ASSERT_EQUALS(unitAI.fsmStateName, "INDIVIDUAL.COMBAT.ATTACKING");
| 312| 312| 
| 313|    |-	controllerAI.MoveIntoFormation({"name": "Circle"});
|    | 313|+	controllerAI.MoveIntoFormation({ "name": "Circle"});
| 314| 314| 
| 315| 315| 	// let all units be in position
| 316| 316| 	for (var ent of unitAIs)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 310| 310| 	for (var ent of unitAIs)
| 311| 311| 		TS_ASSERT_EQUALS(unitAI.fsmStateName, "INDIVIDUAL.COMBAT.ATTACKING");
| 312| 312| 
| 313|    |-	controllerAI.MoveIntoFormation({"name": "Circle"});
|    | 313|+	controllerAI.MoveIntoFormation({"name": "Circle" });
| 314| 314| 
| 315| 315| 	// let all units be in position
| 316| 316| 	for (var ent of unitAIs)

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
|  47| »   »   ResetActiveQuery:·function(id)·{·if·(mode·==·0)·return·[];·else·return·[enemy];·},
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Closing curly brace appears on the same line as the subsequent block.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 224| »   for·(var·i·=·0;·i·<·unitCount;·i++)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 316| »   for·(var·ent·of·unitAIs)
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 319| »   for·(var·ent·of·unitAIs)
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 311| »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
|    | [NORMAL] JSHintBear:
|    | 'unitAI' used out of scope.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
| 320| »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
|    | [NORMAL] JSHintBear:
|    | 'unitAI' used out of scope.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  47|  47| 	"GetResource": resource => ({
|  48|  48| 		"aiAnalysisInfluenceGroup":
|  49|  49| 			resource == "food" ? "ignore" :
|  50|    |-			resource == "wood" ? "abundant" : "sparse"
|    |  50|+				resource == "wood" ? "abundant" : "sparse"
|  51|  51| 	})
|  52|  52| };
|  53|  53| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPrices' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  55|  55| 
|  56|  56| 
|  57|  57| AddMock(SYSTEM_ENTITY, IID_Barter, {
|  58|    |-	GetPrices: function() {
|    |  58|+	"GetPrices": function() {
|  59|  59| 		return {
|  60|  60| 			"buy": { "food": 150 },
|  61|  61| 			"sell": { "food": 25 }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'PlayerHasMarket' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  61|  61| 			"sell": { "food": 25 }
|  62|  62| 		};
|  63|  63| 	},
|  64|    |-	PlayerHasMarket: function () { return false; }
|    |  64|+	"PlayerHasMarket": function () { return false; }
|  65|  65| });
|  66|  66| 
|  67|  67| AddMock(SYSTEM_ENTITY, IID_EndGameManager, {
|    | [NORMAL] ESLintBear (space-before-function-paren):
|    | Unexpected space before function parentheses.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  61|  61| 			"sell": { "food": 25 }
|  62|  62| 		};
|  63|  63| 	},
|  64|    |-	PlayerHasMarket: function () { return false; }
|    |  64|+	PlayerHasMarket: function() { return false; }
|  65|  65| });
|  66|  66| 
|  67|  67| AddMock(SYSTEM_ENTITY, IID_EndGameManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetVictoryConditions' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  65|  65| });
|  66|  66| 
|  67|  67| AddMock(SYSTEM_ENTITY, IID_EndGameManager, {
|  68|    |-	GetVictoryConditions: () => ["conquest", "wonder"],
|    |  68|+	"GetVictoryConditions": () => ["conquest", "wonder"],
|  69|  69| 	GetAlliedVictory: function() { return false; }
|  70|  70| });
|  71|  71| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetAlliedVictory' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  66|  66| 
|  67|  67| AddMock(SYSTEM_ENTITY, IID_EndGameManager, {
|  68|  68| 	GetVictoryConditions: () => ["conquest", "wonder"],
|  69|    |-	GetAlliedVictory: function() { return false; }
|    |  69|+	"GetAlliedVictory": function() { return false; }
|  70|  70| });
|  71|  71| 
|  72|  72| AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetNumPlayers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  70|  70| });
|  71|  71| 
|  72|  72| AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  73|    |-	GetNumPlayers: function() { return 2; },
|    |  73|+	"GetNumPlayers": function() { return 2; },
|  74|  74| 	GetPlayerByID: function(id) { TS_ASSERT(id === 0 || id === 1); return 100+id; }
|  75|  75| });
|  76|  76| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPlayerByID' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  71|  71| 
|  72|  72| AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  73|  73| 	GetNumPlayers: function() { return 2; },
|  74|    |-	GetPlayerByID: function(id) { TS_ASSERT(id === 0 || id === 1); return 100+id; }
|    |  74|+	"GetPlayerByID": function(id) { TS_ASSERT(id === 0 || id === 1); return 100+id; }
|  75|  75| });
|  76|  76| 
|  77|  77| AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLosVisibility' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  75|  75| });
|  76|  76| 
|  77|  77| AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|  78|    |-	GetLosVisibility: function(ent, player) { return "visible"; },
|    |  78|+	"GetLosVisibility": function(ent, player) { return "visible"; },
|  79|  79| 	GetLosCircular: function() { return false; }
|  80|  80| });
|  81|  81| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLosCircular' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  76|  76| 
|  77|  77| AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|  78|  78| 	GetLosVisibility: function(ent, player) { return "visible"; },
|  79|    |-	GetLosCircular: function() { return false; }
|    |  79|+	"GetLosCircular": function() { return false; }
|  80|  80| });
|  81|  81| 
|  82|  82| AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCurrentTemplateName' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  80|  80| });
|  81|  81| 
|  82|  82| AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|  83|    |-	GetCurrentTemplateName: function(ent) { return "example"; },
|    |  83|+	"GetCurrentTemplateName": function(ent) { return "example"; },
|  84|  84| 	GetTemplate: function(name) { return ""; }
|  85|  85| });
|  86|  86| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTemplate' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  81|  81| 
|  82|  82| AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|  83|  83| 	GetCurrentTemplateName: function(ent) { return "example"; },
|  84|    |-	GetTemplate: function(name) { return ""; }
|    |  84|+	"GetTemplate": function(name) { return ""; }
|  85|  85| });
|  86|  86| 
|  87|  87| AddMock(SYSTEM_ENTITY, IID_Timer, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTime' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  85|  85| });
|  86|  86| 
|  87|  87| AddMock(SYSTEM_ENTITY, IID_Timer, {
|  88|    |-	GetTime: function() { return 0; },
|    |  88|+	"GetTime": function() { return 0; },
|  89|  89| 	SetTimeout: function(ent, iid, funcname, time, data) { return 0; }
|  90|  90| });
|  91|  91| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'SetTimeout' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  86|  86| 
|  87|  87| AddMock(SYSTEM_ENTITY, IID_Timer, {
|  88|  88| 	GetTime: function() { return 0; },
|  89|    |-	SetTimeout: function(ent, iid, funcname, time, data) { return 0; }
|    |  89|+	"SetTimeout": function(ent, iid, funcname, time, data) { return 0; }
|  90|  90| });
|  91|  91| 
|  92|  92| AddMock(100, IID_Player, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetName' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  90|  90| });
|  91|  91| 
|  92|  92| AddMock(100, IID_Player, {
|  93|    |-	GetName: function() { return "Player 1"; },
|    |  93|+	"GetName": function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|  95| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCiv' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  91|  91| 
|  92|  92| AddMock(100, IID_Player, {
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|    |-	GetCiv: function() { return "gaia"; },
|    |  94|+	"GetCiv": function() { return "gaia"; },
|  95|  95| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetColor' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  92|  92| AddMock(100, IID_Player, {
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  95|+	"GetColor": function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'r' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  92|  92| AddMock(100, IID_Player, {
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  95|+	GetColor: function() { return { "r": 1, g: 1, b: 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'g' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  92|  92| AddMock(100, IID_Player, {
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  95|+	GetColor: function() { return { r: 1, "g": 1, b: 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'b' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  92|  92| AddMock(100, IID_Player, {
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  95|+	GetColor: function() { return { r: 1, g: 1, "b": 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'a' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  92|  92| AddMock(100, IID_Player, {
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  95|+	GetColor: function() { return { r: 1, g: 1, b: 1, "a": 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  92|  92| AddMock(100, IID_Player, {
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  95|+	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1 }; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanControlAllUnits' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  93|  93| 	GetName: function() { return "Player 1"; },
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|  95| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  96|    |-	CanControlAllUnits: function() { return false; },
|    |  96|+	"CanControlAllUnits": function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|  99|  99| 	GetMaxPopulation: function() { return 200; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPopulationCount' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  94|  94| 	GetCiv: function() { return "gaia"; },
|  95|  95| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|    |-	GetPopulationCount: function() { return 10; },
|    |  97|+	"GetPopulationCount": function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|  99|  99| 	GetMaxPopulation: function() { return 200; },
| 100| 100| 	GetResourceCounts: function() { return { food: 100 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPopulationLimit' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  95|  95| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|    |-	GetPopulationLimit: function() { return 20; },
|    |  98|+	"GetPopulationLimit": function() { return 20; },
|  99|  99| 	GetMaxPopulation: function() { return 200; },
| 100| 100| 	GetResourceCounts: function() { return { food: 100 }; },
| 101| 101| 	GetPanelEntities: function() { return []; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetMaxPopulation' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  96|  96| 	CanControlAllUnits: function() { return false; },
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|  99|    |-	GetMaxPopulation: function() { return 200; },
|    |  99|+	"GetMaxPopulation": function() { return 200; },
| 100| 100| 	GetResourceCounts: function() { return { food: 100 }; },
| 101| 101| 	GetPanelEntities: function() { return []; },
| 102| 102| 	IsTrainingBlocked: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetResourceCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|  99|  99| 	GetMaxPopulation: function() { return 200; },
| 100|    |-	GetResourceCounts: function() { return { food: 100 }; },
|    | 100|+	"GetResourceCounts": function() { return { food: 100 }; },
| 101| 101| 	GetPanelEntities: function() { return []; },
| 102| 102| 	IsTrainingBlocked: function() { return false; },
| 103| 103| 	GetState: function() { return "active"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'food' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  97|  97| 	GetPopulationCount: function() { return 10; },
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|  99|  99| 	GetMaxPopulation: function() { return 200; },
| 100|    |-	GetResourceCounts: function() { return { food: 100 }; },
|    | 100|+	GetResourceCounts: function() { return { "food": 100 }; },
| 101| 101| 	GetPanelEntities: function() { return []; },
| 102| 102| 	IsTrainingBlocked: function() { return false; },
| 103| 103| 	GetState: function() { return "active"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPanelEntities' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  98|  98| 	GetPopulationLimit: function() { return 20; },
|  99|  99| 	GetMaxPopulation: function() { return 200; },
| 100| 100| 	GetResourceCounts: function() { return { food: 100 }; },
| 101|    |-	GetPanelEntities: function() { return []; },
|    | 101|+	"GetPanelEntities": function() { return []; },
| 102| 102| 	IsTrainingBlocked: function() { return false; },
| 103| 103| 	GetState: function() { return "active"; },
| 104| 104| 	GetTeam: function() { return -1; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsTrainingBlocked' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|  99|  99| 	GetMaxPopulation: function() { return 200; },
| 100| 100| 	GetResourceCounts: function() { return { food: 100 }; },
| 101| 101| 	GetPanelEntities: function() { return []; },
| 102|    |-	IsTrainingBlocked: function() { return false; },
|    | 102|+	"IsTrainingBlocked": function() { return false; },
| 103| 103| 	GetState: function() { return "active"; },
| 104| 104| 	GetTeam: function() { return -1; },
| 105| 105| 	GetLockTeams: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetState' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 100| 100| 	GetResourceCounts: function() { return { food: 100 }; },
| 101| 101| 	GetPanelEntities: function() { return []; },
| 102| 102| 	IsTrainingBlocked: function() { return false; },
| 103|    |-	GetState: function() { return "active"; },
|    | 103|+	"GetState": function() { return "active"; },
| 104| 104| 	GetTeam: function() { return -1; },
| 105| 105| 	GetLockTeams: function() { return false; },
| 106| 106| 	GetCheatsEnabled: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTeam' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 101| 101| 	GetPanelEntities: function() { return []; },
| 102| 102| 	IsTrainingBlocked: function() { return false; },
| 103| 103| 	GetState: function() { return "active"; },
| 104|    |-	GetTeam: function() { return -1; },
|    | 104|+	"GetTeam": function() { return -1; },
| 105| 105| 	GetLockTeams: function() { return false; },
| 106| 106| 	GetCheatsEnabled: function() { return false; },
| 107| 107| 	GetDiplomacy: function() { return [-1, 1]; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLockTeams' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 102| 102| 	IsTrainingBlocked: function() { return false; },
| 103| 103| 	GetState: function() { return "active"; },
| 104| 104| 	GetTeam: function() { return -1; },
| 105|    |-	GetLockTeams: function() { return false; },
|    | 105|+	"GetLockTeams": function() { return false; },
| 106| 106| 	GetCheatsEnabled: function() { return false; },
| 107| 107| 	GetDiplomacy: function() { return [-1, 1]; },
| 108| 108| 	IsAlly: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCheatsEnabled' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 103| 103| 	GetState: function() { return "active"; },
| 104| 104| 	GetTeam: function() { return -1; },
| 105| 105| 	GetLockTeams: function() { return false; },
| 106|    |-	GetCheatsEnabled: function() { return false; },
|    | 106|+	"GetCheatsEnabled": function() { return false; },
| 107| 107| 	GetDiplomacy: function() { return [-1, 1]; },
| 108| 108| 	IsAlly: function() { return false; },
| 109| 109| 	IsMutualAlly: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetDiplomacy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 104| 104| 	GetTeam: function() { return -1; },
| 105| 105| 	GetLockTeams: function() { return false; },
| 106| 106| 	GetCheatsEnabled: function() { return false; },
| 107|    |-	GetDiplomacy: function() { return [-1, 1]; },
|    | 107|+	"GetDiplomacy": function() { return [-1, 1]; },
| 108| 108| 	IsAlly: function() { return false; },
| 109| 109| 	IsMutualAlly: function() { return false; },
| 110| 110| 	IsNeutral: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 105| 105| 	GetLockTeams: function() { return false; },
| 106| 106| 	GetCheatsEnabled: function() { return false; },
| 107| 107| 	GetDiplomacy: function() { return [-1, 1]; },
| 108|    |-	IsAlly: function() { return false; },
|    | 108|+	"IsAlly": function() { return false; },
| 109| 109| 	IsMutualAlly: function() { return false; },
| 110| 110| 	IsNeutral: function() { return false; },
| 111| 111| 	IsEnemy: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsMutualAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 106| 106| 	GetCheatsEnabled: function() { return false; },
| 107| 107| 	GetDiplomacy: function() { return [-1, 1]; },
| 108| 108| 	IsAlly: function() { return false; },
| 109|    |-	IsMutualAlly: function() { return false; },
|    | 109|+	"IsMutualAlly": function() { return false; },
| 110| 110| 	IsNeutral: function() { return false; },
| 111| 111| 	IsEnemy: function() { return true; },
| 112| 112| 	GetDisabledTemplates: function() { return {}; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsNeutral' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 107| 107| 	GetDiplomacy: function() { return [-1, 1]; },
| 108| 108| 	IsAlly: function() { return false; },
| 109| 109| 	IsMutualAlly: function() { return false; },
| 110|    |-	IsNeutral: function() { return false; },
|    | 110|+	"IsNeutral": function() { return false; },
| 111| 111| 	IsEnemy: function() { return true; },
| 112| 112| 	GetDisabledTemplates: function() { return {}; },
| 113| 113| 	GetDisabledTechnologies: function() { return {}; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsEnemy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 108| 108| 	IsAlly: function() { return false; },
| 109| 109| 	IsMutualAlly: function() { return false; },
| 110| 110| 	IsNeutral: function() { return false; },
| 111|    |-	IsEnemy: function() { return true; },
|    | 111|+	"IsEnemy": function() { return true; },
| 112| 112| 	GetDisabledTemplates: function() { return {}; },
| 113| 113| 	GetDisabledTechnologies: function() { return {}; },
| 114| 114| 	GetSpyCostMultiplier: function() { return 1; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetDisabledTemplates' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 109| 109| 	IsMutualAlly: function() { return false; },
| 110| 110| 	IsNeutral: function() { return false; },
| 111| 111| 	IsEnemy: function() { return true; },
| 112|    |-	GetDisabledTemplates: function() { return {}; },
|    | 112|+	"GetDisabledTemplates": function() { return {}; },
| 113| 113| 	GetDisabledTechnologies: function() { return {}; },
| 114| 114| 	GetSpyCostMultiplier: function() { return 1; },
| 115| 115| 	HasSharedDropsites: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetDisabledTechnologies' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 110| 110| 	IsNeutral: function() { return false; },
| 111| 111| 	IsEnemy: function() { return true; },
| 112| 112| 	GetDisabledTemplates: function() { return {}; },
| 113|    |-	GetDisabledTechnologies: function() { return {}; },
|    | 113|+	"GetDisabledTechnologies": function() { return {}; },
| 114| 114| 	GetSpyCostMultiplier: function() { return 1; },
| 115| 115| 	HasSharedDropsites: function() { return false; },
| 116| 116| 	HasSharedLos: function() { return false; }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetSpyCostMultiplier' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 111| 111| 	IsEnemy: function() { return true; },
| 112| 112| 	GetDisabledTemplates: function() { return {}; },
| 113| 113| 	GetDisabledTechnologies: function() { return {}; },
| 114|    |-	GetSpyCostMultiplier: function() { return 1; },
|    | 114|+	"GetSpyCostMultiplier": function() { return 1; },
| 115| 115| 	HasSharedDropsites: function() { return false; },
| 116| 116| 	HasSharedLos: function() { return false; }
| 117| 117| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'HasSharedDropsites' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 112| 112| 	GetDisabledTemplates: function() { return {}; },
| 113| 113| 	GetDisabledTechnologies: function() { return {}; },
| 114| 114| 	GetSpyCostMultiplier: function() { return 1; },
| 115|    |-	HasSharedDropsites: function() { return false; },
|    | 115|+	"HasSharedDropsites": function() { return false; },
| 116| 116| 	HasSharedLos: function() { return false; }
| 117| 117| });
| 118| 118| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'HasSharedLos' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 113| 113| 	GetDisabledTechnologies: function() { return {}; },
| 114| 114| 	GetSpyCostMultiplier: function() { return 1; },
| 115| 115| 	HasSharedDropsites: function() { return false; },
| 116|    |-	HasSharedLos: function() { return false; }
|    | 116|+	"HasSharedLos": function() { return false; }
| 117| 117| });
| 118| 118| 
| 119| 119| AddMock(100, IID_EntityLimits, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLimits' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 117| 117| });
| 118| 118| 
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120|    |-	GetLimits: function() { return {"Foo": 10}; },
|    | 120|+	"GetLimits": function() { return {"Foo": 10}; },
| 121| 121| 	GetCounts: function() { return {"Foo": 5}; },
| 122| 122| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 123| 123| });
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 117| 117| });
| 118| 118| 
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120|    |-	GetLimits: function() { return {"Foo": 10}; },
|    | 120|+	GetLimits: function() { return { "Foo": 10}; },
| 121| 121| 	GetCounts: function() { return {"Foo": 5}; },
| 122| 122| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 123| 123| });
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 117| 117| });
| 118| 118| 
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120|    |-	GetLimits: function() { return {"Foo": 10}; },
|    | 120|+	GetLimits: function() { return {"Foo": 10 }; },
| 121| 121| 	GetCounts: function() { return {"Foo": 5}; },
| 122| 122| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 123| 123| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 118| 118| 
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120| 120| 	GetLimits: function() { return {"Foo": 10}; },
| 121|    |-	GetCounts: function() { return {"Foo": 5}; },
|    | 121|+	"GetCounts": function() { return {"Foo": 5}; },
| 122| 122| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 123| 123| });
| 124| 124| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 118| 118| 
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120| 120| 	GetLimits: function() { return {"Foo": 10}; },
| 121|    |-	GetCounts: function() { return {"Foo": 5}; },
|    | 121|+	GetCounts: function() { return { "Foo": 5}; },
| 122| 122| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 123| 123| });
| 124| 124| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 118| 118| 
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120| 120| 	GetLimits: function() { return {"Foo": 10}; },
| 121|    |-	GetCounts: function() { return {"Foo": 5}; },
|    | 121|+	GetCounts: function() { return {"Foo": 5 }; },
| 122| 122| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 123| 123| });
| 124| 124| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLimitChangers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120| 120| 	GetLimits: function() { return {"Foo": 10}; },
| 121| 121| 	GetCounts: function() { return {"Foo": 5}; },
| 122|    |-	GetLimitChangers: function() {return {"Foo": {}}; }
|    | 122|+	"GetLimitChangers": function() {return {"Foo": {}}; }
| 123| 123| });
| 124| 124| 
| 125| 125| AddMock(100, IID_TechnologyManager, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120| 120| 	GetLimits: function() { return {"Foo": 10}; },
| 121| 121| 	GetCounts: function() { return {"Foo": 5}; },
| 122|    |-	GetLimitChangers: function() {return {"Foo": {}}; }
|    | 122|+	GetLimitChangers: function() {return { "Foo": {}}; }
| 123| 123| });
| 124| 124| 
| 125| 125| AddMock(100, IID_TechnologyManager, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 119| 119| AddMock(100, IID_EntityLimits, {
| 120| 120| 	GetLimits: function() { return {"Foo": 10}; },
| 121| 121| 	GetCounts: function() { return {"Foo": 5}; },
| 122|    |-	GetLimitChangers: function() {return {"Foo": {}}; }
|    | 122|+	GetLimitChangers: function() {return {"Foo": {} }; }
| 123| 123| });
| 124| 124| 
| 125| 125| AddMock(100, IID_TechnologyManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetBasicStatistics' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 132| 132| });
| 133| 133| 
| 134| 134| AddMock(100, IID_StatisticsTracker, {
| 135|    |-	GetBasicStatistics: function() {
|    | 135|+	"GetBasicStatistics": function() {
| 136| 136| 		return {
| 137| 137| 			"resourcesGathered": {
| 138| 138| 				"food": 100,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetSequences' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 144| 144| 			"percentMapExplored": 10
| 145| 145| 		};
| 146| 146| 	},
| 147|    |-	GetSequences: function() {
|    | 147|+	"GetSequences": function() {
| 148| 148| 		return {
| 149| 149| 			"unitsTrained": [0, 10],
| 150| 150| 			"unitsLost": [0, 42],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IncreaseTrainedUnitsCounter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 169| 169| 			"teamPeakPercentOfMapControlled": [0, 10]
| 170| 170| 		};
| 171| 171| 	},
| 172|    |-	IncreaseTrainedUnitsCounter: function() { return 1; },
|    | 172|+	"IncreaseTrainedUnitsCounter": function() { return 1; },
| 173| 173| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 174| 174| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 175| 175| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IncreaseConstructedBuildingsCounter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 170| 170| 		};
| 171| 171| 	},
| 172| 172| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 173|    |-	IncreaseConstructedBuildingsCounter: function() { return 1; },
|    | 173|+	"IncreaseConstructedBuildingsCounter": function() { return 1; },
| 174| 174| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 175| 175| });
| 176| 176| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IncreaseBuiltCivCentresCounter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 171| 171| 	},
| 172| 172| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 173| 173| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 174|    |-	IncreaseBuiltCivCentresCounter: function() { return 1; }
|    | 174|+	"IncreaseBuiltCivCentresCounter": function() { return 1; }
| 175| 175| });
| 176| 176| 
| 177| 177| AddMock(101, IID_Player, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetName' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 175| 175| });
| 176| 176| 
| 177| 177| AddMock(101, IID_Player, {
| 178|    |-	GetName: function() { return "Player 2"; },
|    | 178|+	"GetName": function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180| 180| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCiv' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 176| 176| 
| 177| 177| AddMock(101, IID_Player, {
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179|    |-	GetCiv: function() { return "mace"; },
|    | 179|+	"GetCiv": function() { return "mace"; },
| 180| 180| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetColor' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 177| 177| AddMock(101, IID_Player, {
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 180|+	"GetColor": function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'r' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 177| 177| AddMock(101, IID_Player, {
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 180|+	GetColor: function() { return { "r": 1, g: 0, b: 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'g' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 177| 177| AddMock(101, IID_Player, {
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 180|+	GetColor: function() { return { r: 1, "g": 0, b: 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'b' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 177| 177| AddMock(101, IID_Player, {
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 180|+	GetColor: function() { return { r: 1, g: 0, "b": 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'a' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 177| 177| AddMock(101, IID_Player, {
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 180|+	GetColor: function() { return { r: 1, g: 0, b: 0, "a": 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 177| 177| AddMock(101, IID_Player, {
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 180|+	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1 }; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'CanControlAllUnits' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 178| 178| 	GetName: function() { return "Player 2"; },
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180| 180| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 181|    |-	CanControlAllUnits: function() { return true; },
|    | 181|+	"CanControlAllUnits": function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
| 184| 184| 	GetMaxPopulation: function() { return 300; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPopulationCount' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 179| 179| 	GetCiv: function() { return "mace"; },
| 180| 180| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182|    |-	GetPopulationCount: function() { return 40; },
|    | 182|+	"GetPopulationCount": function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
| 184| 184| 	GetMaxPopulation: function() { return 300; },
| 185| 185| 	GetResourceCounts: function() { return { food: 200 }; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPopulationLimit' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 180| 180| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183|    |-	GetPopulationLimit: function() { return 30; },
|    | 183|+	"GetPopulationLimit": function() { return 30; },
| 184| 184| 	GetMaxPopulation: function() { return 300; },
| 185| 185| 	GetResourceCounts: function() { return { food: 200 }; },
| 186| 186| 	GetPanelEntities: function() { return []; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetMaxPopulation' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 181| 181| 	CanControlAllUnits: function() { return true; },
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
| 184|    |-	GetMaxPopulation: function() { return 300; },
|    | 184|+	"GetMaxPopulation": function() { return 300; },
| 185| 185| 	GetResourceCounts: function() { return { food: 200 }; },
| 186| 186| 	GetPanelEntities: function() { return []; },
| 187| 187| 	IsTrainingBlocked: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetResourceCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
| 184| 184| 	GetMaxPopulation: function() { return 300; },
| 185|    |-	GetResourceCounts: function() { return { food: 200 }; },
|    | 185|+	"GetResourceCounts": function() { return { food: 200 }; },
| 186| 186| 	GetPanelEntities: function() { return []; },
| 187| 187| 	IsTrainingBlocked: function() { return false; },
| 188| 188| 	GetState: function() { return "active"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'food' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 182| 182| 	GetPopulationCount: function() { return 40; },
| 183| 183| 	GetPopulationLimit: function() { return 30; },
| 184| 184| 	GetMaxPopulation: function() { return 300; },
| 185|    |-	GetResourceCounts: function() { return { food: 200 }; },
|    | 185|+	GetResourceCounts: function() { return { "food": 200 }; },
| 186| 186| 	GetPanelEntities: function() { return []; },
| 187| 187| 	IsTrainingBlocked: function() { return false; },
| 188| 188| 	GetState: function() { return "active"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPanelEntities' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 183| 183| 	GetPopulationLimit: function() { return 30; },
| 184| 184| 	GetMaxPopulation: function() { return 300; },
| 185| 185| 	GetResourceCounts: function() { return { food: 200 }; },
| 186|    |-	GetPanelEntities: function() { return []; },
|    | 186|+	"GetPanelEntities": function() { return []; },
| 187| 187| 	IsTrainingBlocked: function() { return false; },
| 188| 188| 	GetState: function() { return "active"; },
| 189| 189| 	GetTeam: function() { return -1; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsTrainingBlocked' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 184| 184| 	GetMaxPopulation: function() { return 300; },
| 185| 185| 	GetResourceCounts: function() { return { food: 200 }; },
| 186| 186| 	GetPanelEntities: function() { return []; },
| 187|    |-	IsTrainingBlocked: function() { return false; },
|    | 187|+	"IsTrainingBlocked": function() { return false; },
| 188| 188| 	GetState: function() { return "active"; },
| 189| 189| 	GetTeam: function() { return -1; },
| 190| 190| 	GetLockTeams: function() {return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetState' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 185| 185| 	GetResourceCounts: function() { return { food: 200 }; },
| 186| 186| 	GetPanelEntities: function() { return []; },
| 187| 187| 	IsTrainingBlocked: function() { return false; },
| 188|    |-	GetState: function() { return "active"; },
|    | 188|+	"GetState": function() { return "active"; },
| 189| 189| 	GetTeam: function() { return -1; },
| 190| 190| 	GetLockTeams: function() {return false; },
| 191| 191| 	GetCheatsEnabled: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTeam' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 186| 186| 	GetPanelEntities: function() { return []; },
| 187| 187| 	IsTrainingBlocked: function() { return false; },
| 188| 188| 	GetState: function() { return "active"; },
| 189|    |-	GetTeam: function() { return -1; },
|    | 189|+	"GetTeam": function() { return -1; },
| 190| 190| 	GetLockTeams: function() {return false; },
| 191| 191| 	GetCheatsEnabled: function() { return false; },
| 192| 192| 	GetDiplomacy: function() { return [-1, 1]; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLockTeams' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 187| 187| 	IsTrainingBlocked: function() { return false; },
| 188| 188| 	GetState: function() { return "active"; },
| 189| 189| 	GetTeam: function() { return -1; },
| 190|    |-	GetLockTeams: function() {return false; },
|    | 190|+	"GetLockTeams": function() {return false; },
| 191| 191| 	GetCheatsEnabled: function() { return false; },
| 192| 192| 	GetDiplomacy: function() { return [-1, 1]; },
| 193| 193| 	IsAlly: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCheatsEnabled' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 188| 188| 	GetState: function() { return "active"; },
| 189| 189| 	GetTeam: function() { return -1; },
| 190| 190| 	GetLockTeams: function() {return false; },
| 191|    |-	GetCheatsEnabled: function() { return false; },
|    | 191|+	"GetCheatsEnabled": function() { return false; },
| 192| 192| 	GetDiplomacy: function() { return [-1, 1]; },
| 193| 193| 	IsAlly: function() { return true; },
| 194| 194| 	IsMutualAlly: function() {return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetDiplomacy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 189| 189| 	GetTeam: function() { return -1; },
| 190| 190| 	GetLockTeams: function() {return false; },
| 191| 191| 	GetCheatsEnabled: function() { return false; },
| 192|    |-	GetDiplomacy: function() { return [-1, 1]; },
|    | 192|+	"GetDiplomacy": function() { return [-1, 1]; },
| 193| 193| 	IsAlly: function() { return true; },
| 194| 194| 	IsMutualAlly: function() {return false; },
| 195| 195| 	IsNeutral: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 190| 190| 	GetLockTeams: function() {return false; },
| 191| 191| 	GetCheatsEnabled: function() { return false; },
| 192| 192| 	GetDiplomacy: function() { return [-1, 1]; },
| 193|    |-	IsAlly: function() { return true; },
|    | 193|+	"IsAlly": function() { return true; },
| 194| 194| 	IsMutualAlly: function() {return false; },
| 195| 195| 	IsNeutral: function() { return false; },
| 196| 196| 	IsEnemy: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsMutualAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 191| 191| 	GetCheatsEnabled: function() { return false; },
| 192| 192| 	GetDiplomacy: function() { return [-1, 1]; },
| 193| 193| 	IsAlly: function() { return true; },
| 194|    |-	IsMutualAlly: function() {return false; },
|    | 194|+	"IsMutualAlly": function() {return false; },
| 195| 195| 	IsNeutral: function() { return false; },
| 196| 196| 	IsEnemy: function() { return false; },
| 197| 197| 	GetDisabledTemplates: function() { return {}; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsNeutral' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 192| 192| 	GetDiplomacy: function() { return [-1, 1]; },
| 193| 193| 	IsAlly: function() { return true; },
| 194| 194| 	IsMutualAlly: function() {return false; },
| 195|    |-	IsNeutral: function() { return false; },
|    | 195|+	"IsNeutral": function() { return false; },
| 196| 196| 	IsEnemy: function() { return false; },
| 197| 197| 	GetDisabledTemplates: function() { return {}; },
| 198| 198| 	GetDisabledTechnologies: function() { return {}; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsEnemy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 193| 193| 	IsAlly: function() { return true; },
| 194| 194| 	IsMutualAlly: function() {return false; },
| 195| 195| 	IsNeutral: function() { return false; },
| 196|    |-	IsEnemy: function() { return false; },
|    | 196|+	"IsEnemy": function() { return false; },
| 197| 197| 	GetDisabledTemplates: function() { return {}; },
| 198| 198| 	GetDisabledTechnologies: function() { return {}; },
| 199| 199| 	GetSpyCostMultiplier: function() { return 1; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetDisabledTemplates' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 194| 194| 	IsMutualAlly: function() {return false; },
| 195| 195| 	IsNeutral: function() { return false; },
| 196| 196| 	IsEnemy: function() { return false; },
| 197|    |-	GetDisabledTemplates: function() { return {}; },
|    | 197|+	"GetDisabledTemplates": function() { return {}; },
| 198| 198| 	GetDisabledTechnologies: function() { return {}; },
| 199| 199| 	GetSpyCostMultiplier: function() { return 1; },
| 200| 200| 	HasSharedDropsites: function() { return false; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetDisabledTechnologies' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 195| 195| 	IsNeutral: function() { return false; },
| 196| 196| 	IsEnemy: function() { return false; },
| 197| 197| 	GetDisabledTemplates: function() { return {}; },
| 198|    |-	GetDisabledTechnologies: function() { return {}; },
|    | 198|+	"GetDisabledTechnologies": function() { return {}; },
| 199| 199| 	GetSpyCostMultiplier: function() { return 1; },
| 200| 200| 	HasSharedDropsites: function() { return false; },
| 201| 201| 	HasSharedLos: function() { return false; }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetSpyCostMultiplier' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 196| 196| 	IsEnemy: function() { return false; },
| 197| 197| 	GetDisabledTemplates: function() { return {}; },
| 198| 198| 	GetDisabledTechnologies: function() { return {}; },
| 199|    |-	GetSpyCostMultiplier: function() { return 1; },
|    | 199|+	"GetSpyCostMultiplier": function() { return 1; },
| 200| 200| 	HasSharedDropsites: function() { return false; },
| 201| 201| 	HasSharedLos: function() { return false; }
| 202| 202| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'HasSharedDropsites' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 197| 197| 	GetDisabledTemplates: function() { return {}; },
| 198| 198| 	GetDisabledTechnologies: function() { return {}; },
| 199| 199| 	GetSpyCostMultiplier: function() { return 1; },
| 200|    |-	HasSharedDropsites: function() { return false; },
|    | 200|+	"HasSharedDropsites": function() { return false; },
| 201| 201| 	HasSharedLos: function() { return false; }
| 202| 202| });
| 203| 203| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'HasSharedLos' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 198| 198| 	GetDisabledTechnologies: function() { return {}; },
| 199| 199| 	GetSpyCostMultiplier: function() { return 1; },
| 200| 200| 	HasSharedDropsites: function() { return false; },
| 201|    |-	HasSharedLos: function() { return false; }
|    | 201|+	"HasSharedLos": function() { return false; }
| 202| 202| });
| 203| 203| 
| 204| 204| AddMock(101, IID_EntityLimits, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLimits' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 202| 202| });
| 203| 203| 
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205|    |-	GetLimits: function() { return {"Bar": 20}; },
|    | 205|+	"GetLimits": function() { return {"Bar": 20}; },
| 206| 206| 	GetCounts: function() { return {"Bar": 0}; },
| 207| 207| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 208| 208| });
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 202| 202| });
| 203| 203| 
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205|    |-	GetLimits: function() { return {"Bar": 20}; },
|    | 205|+	GetLimits: function() { return { "Bar": 20}; },
| 206| 206| 	GetCounts: function() { return {"Bar": 0}; },
| 207| 207| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 208| 208| });
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 202| 202| });
| 203| 203| 
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205|    |-	GetLimits: function() { return {"Bar": 20}; },
|    | 205|+	GetLimits: function() { return {"Bar": 20 }; },
| 206| 206| 	GetCounts: function() { return {"Bar": 0}; },
| 207| 207| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 208| 208| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 203| 203| 
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205| 205| 	GetLimits: function() { return {"Bar": 20}; },
| 206|    |-	GetCounts: function() { return {"Bar": 0}; },
|    | 206|+	"GetCounts": function() { return {"Bar": 0}; },
| 207| 207| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 208| 208| });
| 209| 209| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 203| 203| 
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205| 205| 	GetLimits: function() { return {"Bar": 20}; },
| 206|    |-	GetCounts: function() { return {"Bar": 0}; },
|    | 206|+	GetCounts: function() { return { "Bar": 0}; },
| 207| 207| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 208| 208| });
| 209| 209| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 203| 203| 
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205| 205| 	GetLimits: function() { return {"Bar": 20}; },
| 206|    |-	GetCounts: function() { return {"Bar": 0}; },
|    | 206|+	GetCounts: function() { return {"Bar": 0 }; },
| 207| 207| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 208| 208| });
| 209| 209| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetLimitChangers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205| 205| 	GetLimits: function() { return {"Bar": 20}; },
| 206| 206| 	GetCounts: function() { return {"Bar": 0}; },
| 207|    |-	GetLimitChangers: function() {return {"Bar": {}}; }
|    | 207|+	"GetLimitChangers": function() {return {"Bar": {}}; }
| 208| 208| });
| 209| 209| 
| 210| 210| AddMock(101, IID_TechnologyManager, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205| 205| 	GetLimits: function() { return {"Bar": 20}; },
| 206| 206| 	GetCounts: function() { return {"Bar": 0}; },
| 207|    |-	GetLimitChangers: function() {return {"Bar": {}}; }
|    | 207|+	GetLimitChangers: function() {return { "Bar": {}}; }
| 208| 208| });
| 209| 209| 
| 210| 210| AddMock(101, IID_TechnologyManager, {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 204| 204| AddMock(101, IID_EntityLimits, {
| 205| 205| 	GetLimits: function() { return {"Bar": 20}; },
| 206| 206| 	GetCounts: function() { return {"Bar": 0}; },
| 207|    |-	GetLimitChangers: function() {return {"Bar": {}}; }
|    | 207|+	GetLimitChangers: function() {return {"Bar": {} }; }
| 208| 208| });
| 209| 209| 
| 210| 210| AddMock(101, IID_TechnologyManager, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetBasicStatistics' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 217| 217| });
| 218| 218| 
| 219| 219| AddMock(101, IID_StatisticsTracker, {
| 220|    |-	GetBasicStatistics: function() {
|    | 220|+	"GetBasicStatistics": function() {
| 221| 221| 		return {
| 222| 222| 			"resourcesGathered": {
| 223| 223| 				"food": 100,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetSequences' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 229| 229| 			"percentMapExplored": 10
| 230| 230| 		};
| 231| 231| 	},
| 232|    |-	GetSequences: function() {
|    | 232|+	"GetSequences": function() {
| 233| 233| 		return {
| 234| 234| 			"unitsTrained": [0, 10],
| 235| 235| 			"unitsLost": [0, 9],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IncreaseTrainedUnitsCounter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 254| 254| 			"teamPeakPercentOfMapControlled": [0, 10]
| 255| 255| 		};
| 256| 256| 	},
| 257|    |-	IncreaseTrainedUnitsCounter: function() { return 1; },
|    | 257|+	"IncreaseTrainedUnitsCounter": function() { return 1; },
| 258| 258| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 259| 259| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 260| 260| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IncreaseConstructedBuildingsCounter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 255| 255| 		};
| 256| 256| 	},
| 257| 257| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 258|    |-	IncreaseConstructedBuildingsCounter: function() { return 1; },
|    | 258|+	"IncreaseConstructedBuildingsCounter": function() { return 1; },
| 259| 259| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 260| 260| });
| 261| 261| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IncreaseBuiltCivCentresCounter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 256| 256| 	},
| 257| 257| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 258| 258| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 259|    |-	IncreaseBuiltCivCentresCounter: function() { return 1; }
|    | 259|+	"IncreaseBuiltCivCentresCounter": function() { return 1; }
| 260| 260| });
| 261| 261| 
| 262| 262| // Note: property order matters when using TS_ASSERT_UNEVAL_EQUALS,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'players' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 263| 263| //	because uneval preserves property order. So make sure this object
| 264| 264| //	matches the ordering in GuiInterface.
| 265| 265| TS_ASSERT_UNEVAL_EQUALS(cmp.GetSimulationState(), {
| 266|    |-	players: [
|    | 266|+	"players": [
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'name' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 265| 265| TS_ASSERT_UNEVAL_EQUALS(cmp.GetSimulationState(), {
| 266| 266| 	players: [
| 267| 267| 		{
| 268|    |-			name: "Player 1",
|    | 268|+			"name": "Player 1",
| 269| 269| 			civ: "gaia",
| 270| 270| 			color: { r:1, g:1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'civ' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 266| 266| 	players: [
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269|    |-			civ: "gaia",
|    | 269|+			"civ": "gaia",
| 270| 270| 			color: { r:1, g:1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'color' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			"color": { r:1, g:1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'r' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { "r":1, g:1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'r'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { r: 1, g:1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'g' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { r:1, "g":1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'g'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { r:1, g: 1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'b' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { r:1, g:1, "b":1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'b'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { r:1, g:1, b: 1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'a' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { r:1, g:1, b:1, "a":1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'a'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 267| 267| 		{
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 270|+			color: { r:1, g:1, b:1, a: 1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'controlsAll' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 268| 268| 			name: "Player 1",
| 269| 269| 			civ: "gaia",
| 270| 270| 			color: { r:1, g:1, b:1, a:1 },
| 271|    |-			controlsAll: false,
|    | 271|+			"controlsAll": false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
| 274| 274| 			popMax: 200,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'popCount' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 269| 269| 			civ: "gaia",
| 270| 270| 			color: { r:1, g:1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272|    |-			popCount: 10,
|    | 272|+			"popCount": 10,
| 273| 273| 			popLimit: 20,
| 274| 274| 			popMax: 200,
| 275| 275| 			panelEntities: [],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'popLimit' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 270| 270| 			color: { r:1, g:1, b:1, a:1 },
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273|    |-			popLimit: 20,
|    | 273|+			"popLimit": 20,
| 274| 274| 			popMax: 200,
| 275| 275| 			panelEntities: [],
| 276| 276| 			resourceCounts: { food: 100 },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'popMax' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 271| 271| 			controlsAll: false,
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
| 274|    |-			popMax: 200,
|    | 274|+			"popMax": 200,
| 275| 275| 			panelEntities: [],
| 276| 276| 			resourceCounts: { food: 100 },
| 277| 277| 			trainingBlocked: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'panelEntities' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 272| 272| 			popCount: 10,
| 273| 273| 			popLimit: 20,
| 274| 274| 			popMax: 200,
| 275|    |-			panelEntities: [],
|    | 275|+			"panelEntities": [],
| 276| 276| 			resourceCounts: { food: 100 },
| 277| 277| 			trainingBlocked: false,
| 278| 278| 			state: "active",
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'resourceCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 273| 273| 			popLimit: 20,
| 274| 274| 			popMax: 200,
| 275| 275| 			panelEntities: [],
| 276|    |-			resourceCounts: { food: 100 },
|    | 276|+			"resourceCounts": { food: 100 },
| 277| 277| 			trainingBlocked: false,
| 278| 278| 			state: "active",
| 279| 279| 			team: -1,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'food' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 273| 273| 			popLimit: 20,
| 274| 274| 			popMax: 200,
| 275| 275| 			panelEntities: [],
| 276|    |-			resourceCounts: { food: 100 },
|    | 276|+			resourceCounts: { "food": 100 },
| 277| 277| 			trainingBlocked: false,
| 278| 278| 			state: "active",
| 279| 279| 			team: -1,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'trainingBlocked' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 274| 274| 			popMax: 200,
| 275| 275| 			panelEntities: [],
| 276| 276| 			resourceCounts: { food: 100 },
| 277|    |-			trainingBlocked: false,
|    | 277|+			"trainingBlocked": false,
| 278| 278| 			state: "active",
| 279| 279| 			team: -1,
| 280| 280| 			teamsLocked: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'state' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 275| 275| 			panelEntities: [],
| 276| 276| 			resourceCounts: { food: 100 },
| 277| 277| 			trainingBlocked: false,
| 278|    |-			state: "active",
|    | 278|+			"state": "active",
| 279| 279| 			team: -1,
| 280| 280| 			teamsLocked: false,
| 281| 281| 			cheatsEnabled: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'team' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 276| 276| 			resourceCounts: { food: 100 },
| 277| 277| 			trainingBlocked: false,
| 278| 278| 			state: "active",
| 279|    |-			team: -1,
|    | 279|+			"team": -1,
| 280| 280| 			teamsLocked: false,
| 281| 281| 			cheatsEnabled: false,
| 282| 282| 			disabledTemplates: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'teamsLocked' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 277| 277| 			trainingBlocked: false,
| 278| 278| 			state: "active",
| 279| 279| 			team: -1,
| 280|    |-			teamsLocked: false,
|    | 280|+			"teamsLocked": false,
| 281| 281| 			cheatsEnabled: false,
| 282| 282| 			disabledTemplates: {},
| 283| 283| 			disabledTechnologies: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'cheatsEnabled' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 278| 278| 			state: "active",
| 279| 279| 			team: -1,
| 280| 280| 			teamsLocked: false,
| 281|    |-			cheatsEnabled: false,
|    | 281|+			"cheatsEnabled": false,
| 282| 282| 			disabledTemplates: {},
| 283| 283| 			disabledTechnologies: {},
| 284| 284| 			hasSharedDropsites: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'disabledTemplates' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 279| 279| 			team: -1,
| 280| 280| 			teamsLocked: false,
| 281| 281| 			cheatsEnabled: false,
| 282|    |-			disabledTemplates: {},
|    | 282|+			"disabledTemplates": {},
| 283| 283| 			disabledTechnologies: {},
| 284| 284| 			hasSharedDropsites: false,
| 285| 285| 			hasSharedLos: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'disabledTechnologies' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 280| 280| 			teamsLocked: false,
| 281| 281| 			cheatsEnabled: false,
| 282| 282| 			disabledTemplates: {},
| 283|    |-			disabledTechnologies: {},
|    | 283|+			"disabledTechnologies": {},
| 284| 284| 			hasSharedDropsites: false,
| 285| 285| 			hasSharedLos: false,
| 286| 286| 			spyCostMultiplier: 1,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'hasSharedDropsites' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 281| 281| 			cheatsEnabled: false,
| 282| 282| 			disabledTemplates: {},
| 283| 283| 			disabledTechnologies: {},
| 284|    |-			hasSharedDropsites: false,
|    | 284|+			"hasSharedDropsites": false,
| 285| 285| 			hasSharedLos: false,
| 286| 286| 			spyCostMultiplier: 1,
| 287| 287| 			phase: "village",
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'hasSharedLos' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 282| 282| 			disabledTemplates: {},
| 283| 283| 			disabledTechnologies: {},
| 284| 284| 			hasSharedDropsites: false,
| 285|    |-			hasSharedLos: false,
|    | 285|+			"hasSharedLos": false,
| 286| 286| 			spyCostMultiplier: 1,
| 287| 287| 			phase: "village",
| 288| 288| 			isAlly: [false, false],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'spyCostMultiplier' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 283| 283| 			disabledTechnologies: {},
| 284| 284| 			hasSharedDropsites: false,
| 285| 285| 			hasSharedLos: false,
| 286|    |-			spyCostMultiplier: 1,
|    | 286|+			"spyCostMultiplier": 1,
| 287| 287| 			phase: "village",
| 288| 288| 			isAlly: [false, false],
| 289| 289| 			isMutualAlly: [false, false],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'phase' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 284| 284| 			hasSharedDropsites: false,
| 285| 285| 			hasSharedLos: false,
| 286| 286| 			spyCostMultiplier: 1,
| 287|    |-			phase: "village",
|    | 287|+			"phase": "village",
| 288| 288| 			isAlly: [false, false],
| 289| 289| 			isMutualAlly: [false, false],
| 290| 290| 			isNeutral: [false, false],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 285| 285| 			hasSharedLos: false,
| 286| 286| 			spyCostMultiplier: 1,
| 287| 287| 			phase: "village",
| 288|    |-			isAlly: [false, false],
|    | 288|+			"isAlly": [false, false],
| 289| 289| 			isMutualAlly: [false, false],
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isMutualAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 286| 286| 			spyCostMultiplier: 1,
| 287| 287| 			phase: "village",
| 288| 288| 			isAlly: [false, false],
| 289|    |-			isMutualAlly: [false, false],
|    | 289|+			"isMutualAlly": [false, false],
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isNeutral' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 287| 287| 			phase: "village",
| 288| 288| 			isAlly: [false, false],
| 289| 289| 			isMutualAlly: [false, false],
| 290|    |-			isNeutral: [false, false],
|    | 290|+			"isNeutral": [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isEnemy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 288| 288| 			isAlly: [false, false],
| 289| 289| 			isMutualAlly: [false, false],
| 290| 290| 			isNeutral: [false, false],
| 291|    |-			isEnemy: [true, true],
|    | 291|+			"isEnemy": [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'entityLimits' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 289| 289| 			isMutualAlly: [false, false],
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292|    |-			entityLimits: {"Foo": 10},
|    | 292|+			"entityLimits": {"Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 289| 289| 			isMutualAlly: [false, false],
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292|    |-			entityLimits: {"Foo": 10},
|    | 292|+			entityLimits: { "Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 289| 289| 			isMutualAlly: [false, false],
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292|    |-			entityLimits: {"Foo": 10},
|    | 292|+			entityLimits: {"Foo": 10 },
| 293| 293| 			entityCounts: {"Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'entityCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293|    |-			entityCounts: {"Foo": 5},
|    | 293|+			"entityCounts": {"Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293|    |-			entityCounts: {"Foo": 5},
|    | 293|+			entityCounts: { "Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 290| 290| 			isNeutral: [false, false],
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293|    |-			entityCounts: {"Foo": 5},
|    | 293|+			entityCounts: {"Foo": 5 },
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'entityLimitChangers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
| 294|    |-			entityLimitChangers: {"Foo": {}},
|    | 294|+			"entityLimitChangers": {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
| 297| 297| 			researchedTechs: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
| 294|    |-			entityLimitChangers: {"Foo": {}},
|    | 294|+			entityLimitChangers: { "Foo": {}},
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
| 297| 297| 			researchedTechs: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 291| 291| 			isEnemy: [true, true],
| 292| 292| 			entityLimits: {"Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
| 294|    |-			entityLimitChangers: {"Foo": {}},
|    | 294|+			entityLimitChangers: {"Foo": {} },
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
| 297| 297| 			researchedTechs: new Set(),
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'researchQueued' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 292| 292| 			entityLimits: {"Foo": 10},
| 293| 293| 			entityCounts: {"Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295|    |-			researchQueued: new Map(),
|    | 295|+			"researchQueued": new Map(),
| 296| 296| 			researchStarted: new Set(),
| 297| 297| 			researchedTechs: new Set(),
| 298| 298| 			classCounts: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'researchStarted' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 293| 293| 			entityCounts: {"Foo": 5},
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
| 296|    |-			researchStarted: new Set(),
|    | 296|+			"researchStarted": new Set(),
| 297| 297| 			researchedTechs: new Set(),
| 298| 298| 			classCounts: {},
| 299| 299| 			typeCountsByClass: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'researchedTechs' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 294| 294| 			entityLimitChangers: {"Foo": {}},
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
| 297|    |-			researchedTechs: new Set(),
|    | 297|+			"researchedTechs": new Set(),
| 298| 298| 			classCounts: {},
| 299| 299| 			typeCountsByClass: {},
| 300| 300| 			canBarter: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'classCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 295| 295| 			researchQueued: new Map(),
| 296| 296| 			researchStarted: new Set(),
| 297| 297| 			researchedTechs: new Set(),
| 298|    |-			classCounts: {},
|    | 298|+			"classCounts": {},
| 299| 299| 			typeCountsByClass: {},
| 300| 300| 			canBarter: false,
| 301| 301| 			barterPrices: {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'typeCountsByClass' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 296| 296| 			researchStarted: new Set(),
| 297| 297| 			researchedTechs: new Set(),
| 298| 298| 			classCounts: {},
| 299|    |-			typeCountsByClass: {},
|    | 299|+			"typeCountsByClass": {},
| 300| 300| 			canBarter: false,
| 301| 301| 			barterPrices: {
| 302| 302| 				"buy": { "food": 150 },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'canBarter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 297| 297| 			researchedTechs: new Set(),
| 298| 298| 			classCounts: {},
| 299| 299| 			typeCountsByClass: {},
| 300|    |-			canBarter: false,
|    | 300|+			"canBarter": false,
| 301| 301| 			barterPrices: {
| 302| 302| 				"buy": { "food": 150 },
| 303| 303| 				"sell": { "food": 25 }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'barterPrices' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 298| 298| 			classCounts: {},
| 299| 299| 			typeCountsByClass: {},
| 300| 300| 			canBarter: false,
| 301|    |-			barterPrices: {
|    | 301|+			"barterPrices": {
| 302| 302| 				"buy": { "food": 150 },
| 303| 303| 				"sell": { "food": 25 }
| 304| 304| 			},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'statistics' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 302| 302| 				"buy": { "food": 150 },
| 303| 303| 				"sell": { "food": 25 }
| 304| 304| 			},
| 305|    |-			statistics: {
|    | 305|+			"statistics": {
| 306| 306| 				resourcesGathered: {
| 307| 307| 					food: 100,
| 308| 308| 					wood: 0,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'resourcesGathered' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 303| 303| 				"sell": { "food": 25 }
| 304| 304| 			},
| 305| 305| 			statistics: {
| 306|    |-				resourcesGathered: {
|    | 306|+				"resourcesGathered": {
| 307| 307| 					food: 100,
| 308| 308| 					wood: 0,
| 309| 309| 					metal: 0,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'food' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 304| 304| 			},
| 305| 305| 			statistics: {
| 306| 306| 				resourcesGathered: {
| 307|    |-					food: 100,
|    | 307|+					"food": 100,
| 308| 308| 					wood: 0,
| 309| 309| 					metal: 0,
| 310| 310| 					stone: 0,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'wood' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 305| 305| 			statistics: {
| 306| 306| 				resourcesGathered: {
| 307| 307| 					food: 100,
| 308|    |-					wood: 0,
|    | 308|+					"wood": 0,
| 309| 309| 					metal: 0,
| 310| 310| 					stone: 0,
| 311| 311| 					vegetarianFood: 0
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'metal' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 306| 306| 				resourcesGathered: {
| 307| 307| 					food: 100,
| 308| 308| 					wood: 0,
| 309|    |-					metal: 0,
|    | 309|+					"metal": 0,
| 310| 310| 					stone: 0,
| 311| 311| 					vegetarianFood: 0
| 312| 312| 				},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'stone' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 307| 307| 					food: 100,
| 308| 308| 					wood: 0,
| 309| 309| 					metal: 0,
| 310|    |-					stone: 0,
|    | 310|+					"stone": 0,
| 311| 311| 					vegetarianFood: 0
| 312| 312| 				},
| 313| 313| 				percentMapExplored: 10
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'vegetarianFood' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 308| 308| 					wood: 0,
| 309| 309| 					metal: 0,
| 310| 310| 					stone: 0,
| 311|    |-					vegetarianFood: 0
|    | 311|+					"vegetarianFood": 0
| 312| 312| 				},
| 313| 313| 				percentMapExplored: 10
| 314| 314| 			}
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'percentMapExplored' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 310| 310| 					stone: 0,
| 311| 311| 					vegetarianFood: 0
| 312| 312| 				},
| 313|    |-				percentMapExplored: 10
|    | 313|+				"percentMapExplored": 10
| 314| 314| 			}
| 315| 315| 		},
| 316| 316| 		{
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'name' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 314| 314| 			}
| 315| 315| 		},
| 316| 316| 		{
| 317|    |-			name: "Player 2",
|    | 317|+			"name": "Player 2",
| 318| 318| 			civ: "mace",
| 319| 319| 			color: { r:1, g:0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'civ' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 315| 315| 		},
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318|    |-			civ: "mace",
|    | 318|+			"civ": "mace",
| 319| 319| 			color: { r:1, g:0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'color' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			"color": { r:1, g:0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'r' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { "r":1, g:0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'r'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { r: 1, g:0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'g' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { r:1, "g":0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'g'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { r:1, g: 0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'b' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { r:1, g:0, "b":0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'b'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { r:1, g:0, b: 0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'a' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { r:1, g:0, b:0, "a":1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'a'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 316| 316| 		{
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 319|+			color: { r:1, g:0, b:0, a: 1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'controlsAll' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 317| 317| 			name: "Player 2",
| 318| 318| 			civ: "mace",
| 319| 319| 			color: { r:1, g:0, b:0, a:1 },
| 320|    |-			controlsAll: true,
|    | 320|+			"controlsAll": true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
| 323| 323| 			popMax: 300,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'popCount' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 318| 318| 			civ: "mace",
| 319| 319| 			color: { r:1, g:0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321|    |-			popCount: 40,
|    | 321|+			"popCount": 40,
| 322| 322| 			popLimit: 30,
| 323| 323| 			popMax: 300,
| 324| 324| 			panelEntities: [],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'popLimit' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 319| 319| 			color: { r:1, g:0, b:0, a:1 },
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322|    |-			popLimit: 30,
|    | 322|+			"popLimit": 30,
| 323| 323| 			popMax: 300,
| 324| 324| 			panelEntities: [],
| 325| 325| 			resourceCounts: { food: 200 },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'popMax' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 320| 320| 			controlsAll: true,
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
| 323|    |-			popMax: 300,
|    | 323|+			"popMax": 300,
| 324| 324| 			panelEntities: [],
| 325| 325| 			resourceCounts: { food: 200 },
| 326| 326| 			trainingBlocked: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'panelEntities' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 321| 321| 			popCount: 40,
| 322| 322| 			popLimit: 30,
| 323| 323| 			popMax: 300,
| 324|    |-			panelEntities: [],
|    | 324|+			"panelEntities": [],
| 325| 325| 			resourceCounts: { food: 200 },
| 326| 326| 			trainingBlocked: false,
| 327| 327| 			state: "active",
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'resourceCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 322| 322| 			popLimit: 30,
| 323| 323| 			popMax: 300,
| 324| 324| 			panelEntities: [],
| 325|    |-			resourceCounts: { food: 200 },
|    | 325|+			"resourceCounts": { food: 200 },
| 326| 326| 			trainingBlocked: false,
| 327| 327| 			state: "active",
| 328| 328| 			team: -1,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'food' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 322| 322| 			popLimit: 30,
| 323| 323| 			popMax: 300,
| 324| 324| 			panelEntities: [],
| 325|    |-			resourceCounts: { food: 200 },
|    | 325|+			resourceCounts: { "food": 200 },
| 326| 326| 			trainingBlocked: false,
| 327| 327| 			state: "active",
| 328| 328| 			team: -1,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'trainingBlocked' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 323| 323| 			popMax: 300,
| 324| 324| 			panelEntities: [],
| 325| 325| 			resourceCounts: { food: 200 },
| 326|    |-			trainingBlocked: false,
|    | 326|+			"trainingBlocked": false,
| 327| 327| 			state: "active",
| 328| 328| 			team: -1,
| 329| 329| 			teamsLocked: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'state' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 324| 324| 			panelEntities: [],
| 325| 325| 			resourceCounts: { food: 200 },
| 326| 326| 			trainingBlocked: false,
| 327|    |-			state: "active",
|    | 327|+			"state": "active",
| 328| 328| 			team: -1,
| 329| 329| 			teamsLocked: false,
| 330| 330| 			cheatsEnabled: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'team' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 325| 325| 			resourceCounts: { food: 200 },
| 326| 326| 			trainingBlocked: false,
| 327| 327| 			state: "active",
| 328|    |-			team: -1,
|    | 328|+			"team": -1,
| 329| 329| 			teamsLocked: false,
| 330| 330| 			cheatsEnabled: false,
| 331| 331| 			disabledTemplates: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'teamsLocked' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 326| 326| 			trainingBlocked: false,
| 327| 327| 			state: "active",
| 328| 328| 			team: -1,
| 329|    |-			teamsLocked: false,
|    | 329|+			"teamsLocked": false,
| 330| 330| 			cheatsEnabled: false,
| 331| 331| 			disabledTemplates: {},
| 332| 332| 			disabledTechnologies: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'cheatsEnabled' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 327| 327| 			state: "active",
| 328| 328| 			team: -1,
| 329| 329| 			teamsLocked: false,
| 330|    |-			cheatsEnabled: false,
|    | 330|+			"cheatsEnabled": false,
| 331| 331| 			disabledTemplates: {},
| 332| 332| 			disabledTechnologies: {},
| 333| 333| 			hasSharedDropsites: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'disabledTemplates' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 328| 328| 			team: -1,
| 329| 329| 			teamsLocked: false,
| 330| 330| 			cheatsEnabled: false,
| 331|    |-			disabledTemplates: {},
|    | 331|+			"disabledTemplates": {},
| 332| 332| 			disabledTechnologies: {},
| 333| 333| 			hasSharedDropsites: false,
| 334| 334| 			hasSharedLos: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'disabledTechnologies' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 329| 329| 			teamsLocked: false,
| 330| 330| 			cheatsEnabled: false,
| 331| 331| 			disabledTemplates: {},
| 332|    |-			disabledTechnologies: {},
|    | 332|+			"disabledTechnologies": {},
| 333| 333| 			hasSharedDropsites: false,
| 334| 334| 			hasSharedLos: false,
| 335| 335| 			spyCostMultiplier: 1,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'hasSharedDropsites' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 330| 330| 			cheatsEnabled: false,
| 331| 331| 			disabledTemplates: {},
| 332| 332| 			disabledTechnologies: {},
| 333|    |-			hasSharedDropsites: false,
|    | 333|+			"hasSharedDropsites": false,
| 334| 334| 			hasSharedLos: false,
| 335| 335| 			spyCostMultiplier: 1,
| 336| 336| 			phase: "village",
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'hasSharedLos' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 331| 331| 			disabledTemplates: {},
| 332| 332| 			disabledTechnologies: {},
| 333| 333| 			hasSharedDropsites: false,
| 334|    |-			hasSharedLos: false,
|    | 334|+			"hasSharedLos": false,
| 335| 335| 			spyCostMultiplier: 1,
| 336| 336| 			phase: "village",
| 337| 337| 			isAlly: [true, true],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'spyCostMultiplier' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 332| 332| 			disabledTechnologies: {},
| 333| 333| 			hasSharedDropsites: false,
| 334| 334| 			hasSharedLos: false,
| 335|    |-			spyCostMultiplier: 1,
|    | 335|+			"spyCostMultiplier": 1,
| 336| 336| 			phase: "village",
| 337| 337| 			isAlly: [true, true],
| 338| 338| 			isMutualAlly: [false, false],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'phase' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 333| 333| 			hasSharedDropsites: false,
| 334| 334| 			hasSharedLos: false,
| 335| 335| 			spyCostMultiplier: 1,
| 336|    |-			phase: "village",
|    | 336|+			"phase": "village",
| 337| 337| 			isAlly: [true, true],
| 338| 338| 			isMutualAlly: [false, false],
| 339| 339| 			isNeutral: [false, false],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 334| 334| 			hasSharedLos: false,
| 335| 335| 			spyCostMultiplier: 1,
| 336| 336| 			phase: "village",
| 337|    |-			isAlly: [true, true],
|    | 337|+			"isAlly": [true, true],
| 338| 338| 			isMutualAlly: [false, false],
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isMutualAlly' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 335| 335| 			spyCostMultiplier: 1,
| 336| 336| 			phase: "village",
| 337| 337| 			isAlly: [true, true],
| 338|    |-			isMutualAlly: [false, false],
|    | 338|+			"isMutualAlly": [false, false],
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isNeutral' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 336| 336| 			phase: "village",
| 337| 337| 			isAlly: [true, true],
| 338| 338| 			isMutualAlly: [false, false],
| 339|    |-			isNeutral: [false, false],
|    | 339|+			"isNeutral": [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'isEnemy' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 337| 337| 			isAlly: [true, true],
| 338| 338| 			isMutualAlly: [false, false],
| 339| 339| 			isNeutral: [false, false],
| 340|    |-			isEnemy: [false, false],
|    | 340|+			"isEnemy": [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'entityLimits' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 338| 338| 			isMutualAlly: [false, false],
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341|    |-			entityLimits: {"Bar": 20},
|    | 341|+			"entityLimits": {"Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 338| 338| 			isMutualAlly: [false, false],
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341|    |-			entityLimits: {"Bar": 20},
|    | 341|+			entityLimits: { "Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 338| 338| 			isMutualAlly: [false, false],
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341|    |-			entityLimits: {"Bar": 20},
|    | 341|+			entityLimits: {"Bar": 20 },
| 342| 342| 			entityCounts: {"Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'entityCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342|    |-			entityCounts: {"Bar": 0},
|    | 342|+			"entityCounts": {"Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342|    |-			entityCounts: {"Bar": 0},
|    | 342|+			entityCounts: { "Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 339| 339| 			isNeutral: [false, false],
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342|    |-			entityCounts: {"Bar": 0},
|    | 342|+			entityCounts: {"Bar": 0 },
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'entityLimitChangers' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
| 343|    |-			entityLimitChangers: {"Bar": {}},
|    | 343|+			"entityLimitChangers": {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
| 346| 346| 			researchedTechs: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
| 343|    |-			entityLimitChangers: {"Bar": {}},
|    | 343|+			entityLimitChangers: { "Bar": {}},
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
| 346| 346| 			researchedTechs: new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 340| 340| 			isEnemy: [false, false],
| 341| 341| 			entityLimits: {"Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
| 343|    |-			entityLimitChangers: {"Bar": {}},
|    | 343|+			entityLimitChangers: {"Bar": {} },
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
| 346| 346| 			researchedTechs: new Set(),
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'researchQueued' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 341| 341| 			entityLimits: {"Bar": 20},
| 342| 342| 			entityCounts: {"Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344|    |-			researchQueued: new Map(),
|    | 344|+			"researchQueued": new Map(),
| 345| 345| 			researchStarted: new Set(),
| 346| 346| 			researchedTechs: new Set(),
| 347| 347| 			classCounts: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'researchStarted' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 342| 342| 			entityCounts: {"Bar": 0},
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
| 345|    |-			researchStarted: new Set(),
|    | 345|+			"researchStarted": new Set(),
| 346| 346| 			researchedTechs: new Set(),
| 347| 347| 			classCounts: {},
| 348| 348| 			typeCountsByClass: {},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'researchedTechs' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 343| 343| 			entityLimitChangers: {"Bar": {}},
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
| 346|    |-			researchedTechs: new Set(),
|    | 346|+			"researchedTechs": new Set(),
| 347| 347| 			classCounts: {},
| 348| 348| 			typeCountsByClass: {},
| 349| 349| 			canBarter: false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'classCounts' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 344| 344| 			researchQueued: new Map(),
| 345| 345| 			researchStarted: new Set(),
| 346| 346| 			researchedTechs: new Set(),
| 347|    |-			classCounts: {},
|    | 347|+			"classCounts": {},
| 348| 348| 			typeCountsByClass: {},
| 349| 349| 			canBarter: false,
| 350| 350| 			barterPrices: {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'typeCountsByClass' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 345| 345| 			researchStarted: new Set(),
| 346| 346| 			researchedTechs: new Set(),
| 347| 347| 			classCounts: {},
| 348|    |-			typeCountsByClass: {},
|    | 348|+			"typeCountsByClass": {},
| 349| 349| 			canBarter: false,
| 350| 350| 			barterPrices: {
| 351| 351| 				"buy": { "food": 150 },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'canBarter' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 346| 346| 			researchedTechs: new Set(),
| 347| 347| 			classCounts: {},
| 348| 348| 			typeCountsByClass: {},
| 349|    |-			canBarter: false,
|    | 349|+			"canBarter": false,
| 350| 350| 			barterPrices: {
| 351| 351| 				"buy": { "food": 150 },
| 352| 352| 				"sell": { "food": 25 }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'barterPrices' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 347| 347| 			classCounts: {},
| 348| 348| 			typeCountsByClass: {},
| 349| 349| 			canBarter: false,
| 350|    |-			barterPrices: {
|    | 350|+			"barterPrices": {
| 351| 351| 				"buy": { "food": 150 },
| 352| 352| 				"sell": { "food": 25 }
| 353| 353| 			},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'statistics' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 351| 351| 				"buy": { "food": 150 },
| 352| 352| 				"sell": { "food": 25 }
| 353| 353| 			},
| 354|    |-			statistics: {
|    | 354|+			"statistics": {
| 355| 355| 				resourcesGathered: {
| 356| 356| 					food: 100,
| 357| 357| 					wood: 0,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'resourcesGathered' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 352| 352| 				"sell": { "food": 25 }
| 353| 353| 			},
| 354| 354| 			statistics: {
| 355|    |-				resourcesGathered: {
|    | 355|+				"resourcesGathered": {
| 356| 356| 					food: 100,
| 357| 357| 					wood: 0,
| 358| 358| 					metal: 0,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'food' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 353| 353| 			},
| 354| 354| 			statistics: {
| 355| 355| 				resourcesGathered: {
| 356|    |-					food: 100,
|    | 356|+					"food": 100,
| 357| 357| 					wood: 0,
| 358| 358| 					metal: 0,
| 359| 359| 					stone: 0,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'wood' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 354| 354| 			statistics: {
| 355| 355| 				resourcesGathered: {
| 356| 356| 					food: 100,
| 357|    |-					wood: 0,
|    | 357|+					"wood": 0,
| 358| 358| 					metal: 0,
| 359| 359| 					stone: 0,
| 360| 360| 					vegetarianFood: 0
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'metal' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 355| 355| 				resourcesGathered: {
| 356| 356| 					food: 100,
| 357| 357| 					wood: 0,
| 358|    |-					metal: 0,
|    | 358|+					"metal": 0,
| 359| 359| 					stone: 0,
| 360| 360| 					vegetarianFood: 0
| 361| 361| 				},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'stone' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 356| 356| 					food: 100,
| 357| 357| 					wood: 0,
| 358| 358| 					metal: 0,
| 359|    |-					stone: 0,
|    | 359|+					"stone": 0,
| 360| 360| 					vegetarianFood: 0
| 361| 361| 				},
| 362| 362| 				percentMapExplored: 10
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'vegetarianFood' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 357| 357| 					wood: 0,
| 358| 358| 					metal: 0,
| 359| 359| 					stone: 0,
| 360|    |-					vegetarianFood: 0
|    | 360|+					"vegetarianFood": 0
| 361| 361| 				},
| 362| 362| 				percentMapExplored: 10
| 363| 363| 			}
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'percentMapExplored' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 359| 359| 					stone: 0,
| 360| 360| 					vegetarianFood: 0
| 361| 361| 				},
| 362|    |-				percentMapExplored: 10
|    | 362|+				"percentMapExplored": 10
| 363| 363| 			}
| 364| 364| 		}
| 365| 365| 	],
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'circularMap' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 363| 363| 			}
| 364| 364| 		}
| 365| 365| 	],
| 366|    |-	circularMap: false,
|    | 366|+	"circularMap": false,
| 367| 367| 	timeElapsed: 0,
| 368| 368| 	"victoryConditions": ["conquest", "wonder"],
| 369| 369| 	alliedVictory: false
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'timeElapsed' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 364| 364| 		}
| 365| 365| 	],
| 366| 366| 	circularMap: false,
| 367|    |-	timeElapsed: 0,
|    | 367|+	"timeElapsed": 0,
| 368| 368| 	"victoryConditions": ["conquest", "wonder"],
| 369| 369| 	alliedVictory: false
| 370| 370| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'alliedVictory' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 366| 366| 	circularMap: false,
| 367| 367| 	timeElapsed: 0,
| 368| 368| 	"victoryConditions": ["conquest", "wonder"],
| 369|    |-	alliedVictory: false
|    | 369|+	"alliedVictory": false
| 370| 370| });
| 371| 371| 
| 372| 372| TS_ASSERT_UNEVAL_EQUALS(cmp.GetExtendedSimulationState(), {
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'r'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 374| 374| 		{
| 375| 375| 			"name": "Player 1",
| 376| 376| 			"civ": "gaia",
| 377|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 377|+			"color": { "r": 1, "g":1, "b":1, "a":1 },
| 378| 378| 			"controlsAll": false,
| 379| 379| 			"popCount": 10,
| 380| 380| 			"popLimit": 20,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'g'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 374| 374| 		{
| 375| 375| 			"name": "Player 1",
| 376| 376| 			"civ": "gaia",
| 377|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 377|+			"color": { "r":1, "g": 1, "b":1, "a":1 },
| 378| 378| 			"controlsAll": false,
| 379| 379| 			"popCount": 10,
| 380| 380| 			"popLimit": 20,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'b'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 374| 374| 		{
| 375| 375| 			"name": "Player 1",
| 376| 376| 			"civ": "gaia",
| 377|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 377|+			"color": { "r":1, "g":1, "b": 1, "a":1 },
| 378| 378| 			"controlsAll": false,
| 379| 379| 			"popCount": 10,
| 380| 380| 			"popLimit": 20,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'a'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 374| 374| 		{
| 375| 375| 			"name": "Player 1",
| 376| 376| 			"civ": "gaia",
| 377|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 377|+			"color": { "r":1, "g":1, "b":1, "a": 1 },
| 378| 378| 			"controlsAll": false,
| 379| 379| 			"popCount": 10,
| 380| 380| 			"popLimit": 20,
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 396| 396| 			"isMutualAlly": [false, false],
| 397| 397| 			"isNeutral": [false, false],
| 398| 398| 			"isEnemy": [true, true],
| 399|    |-			"entityLimits": {"Foo": 10},
|    | 399|+			"entityLimits": { "Foo": 10},
| 400| 400| 			"entityCounts": {"Foo": 5},
| 401| 401| 			"entityLimitChangers": {"Foo": {}},
| 402| 402| 			"researchQueued": new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 396| 396| 			"isMutualAlly": [false, false],
| 397| 397| 			"isNeutral": [false, false],
| 398| 398| 			"isEnemy": [true, true],
| 399|    |-			"entityLimits": {"Foo": 10},
|    | 399|+			"entityLimits": {"Foo": 10 },
| 400| 400| 			"entityCounts": {"Foo": 5},
| 401| 401| 			"entityLimitChangers": {"Foo": {}},
| 402| 402| 			"researchQueued": new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 397| 397| 			"isNeutral": [false, false],
| 398| 398| 			"isEnemy": [true, true],
| 399| 399| 			"entityLimits": {"Foo": 10},
| 400|    |-			"entityCounts": {"Foo": 5},
|    | 400|+			"entityCounts": { "Foo": 5},
| 401| 401| 			"entityLimitChangers": {"Foo": {}},
| 402| 402| 			"researchQueued": new Map(),
| 403| 403| 			"researchStarted": new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 397| 397| 			"isNeutral": [false, false],
| 398| 398| 			"isEnemy": [true, true],
| 399| 399| 			"entityLimits": {"Foo": 10},
| 400|    |-			"entityCounts": {"Foo": 5},
|    | 400|+			"entityCounts": {"Foo": 5 },
| 401| 401| 			"entityLimitChangers": {"Foo": {}},
| 402| 402| 			"researchQueued": new Map(),
| 403| 403| 			"researchStarted": new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 398| 398| 			"isEnemy": [true, true],
| 399| 399| 			"entityLimits": {"Foo": 10},
| 400| 400| 			"entityCounts": {"Foo": 5},
| 401|    |-			"entityLimitChangers": {"Foo": {}},
|    | 401|+			"entityLimitChangers": { "Foo": {}},
| 402| 402| 			"researchQueued": new Map(),
| 403| 403| 			"researchStarted": new Set(),
| 404| 404| 			"researchedTechs": new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 398| 398| 			"isEnemy": [true, true],
| 399| 399| 			"entityLimits": {"Foo": 10},
| 400| 400| 			"entityCounts": {"Foo": 5},
| 401|    |-			"entityLimitChangers": {"Foo": {}},
|    | 401|+			"entityLimitChangers": {"Foo": {} },
| 402| 402| 			"researchQueued": new Map(),
| 403| 403| 			"researchStarted": new Set(),
| 404| 404| 			"researchedTechs": new Set(),
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'r'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 446| 446| 		{
| 447| 447| 			"name": "Player 2",
| 448| 448| 			"civ": "mace",
| 449|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 449|+			"color": { "r": 1, "g":0, "b":0, "a":1 },
| 450| 450| 			"controlsAll": true,
| 451| 451| 			"popCount": 40,
| 452| 452| 			"popLimit": 30,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'g'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 446| 446| 		{
| 447| 447| 			"name": "Player 2",
| 448| 448| 			"civ": "mace",
| 449|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 449|+			"color": { "r":1, "g": 0, "b":0, "a":1 },
| 450| 450| 			"controlsAll": true,
| 451| 451| 			"popCount": 40,
| 452| 452| 			"popLimit": 30,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'b'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 446| 446| 		{
| 447| 447| 			"name": "Player 2",
| 448| 448| 			"civ": "mace",
| 449|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 449|+			"color": { "r":1, "g":0, "b": 0, "a":1 },
| 450| 450| 			"controlsAll": true,
| 451| 451| 			"popCount": 40,
| 452| 452| 			"popLimit": 30,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'a'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 446| 446| 		{
| 447| 447| 			"name": "Player 2",
| 448| 448| 			"civ": "mace",
| 449|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 449|+			"color": { "r":1, "g":0, "b":0, "a": 1 },
| 450| 450| 			"controlsAll": true,
| 451| 451| 			"popCount": 40,
| 452| 452| 			"popLimit": 30,
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 468| 468| 			"isMutualAlly": [false, false],
| 469| 469| 			"isNeutral": [false, false],
| 470| 470| 			"isEnemy": [false, false],
| 471|    |-			"entityLimits": {"Bar": 20},
|    | 471|+			"entityLimits": { "Bar": 20},
| 472| 472| 			"entityCounts": {"Bar": 0},
| 473| 473| 			"entityLimitChangers": {"Bar": {}},
| 474| 474| 			"researchQueued": new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 468| 468| 			"isMutualAlly": [false, false],
| 469| 469| 			"isNeutral": [false, false],
| 470| 470| 			"isEnemy": [false, false],
| 471|    |-			"entityLimits": {"Bar": 20},
|    | 471|+			"entityLimits": {"Bar": 20 },
| 472| 472| 			"entityCounts": {"Bar": 0},
| 473| 473| 			"entityLimitChangers": {"Bar": {}},
| 474| 474| 			"researchQueued": new Map(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 469| 469| 			"isNeutral": [false, false],
| 470| 470| 			"isEnemy": [false, false],
| 471| 471| 			"entityLimits": {"Bar": 20},
| 472|    |-			"entityCounts": {"Bar": 0},
|    | 472|+			"entityCounts": { "Bar": 0},
| 473| 473| 			"entityLimitChangers": {"Bar": {}},
| 474| 474| 			"researchQueued": new Map(),
| 475| 475| 			"researchStarted": new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 469| 469| 			"isNeutral": [false, false],
| 470| 470| 			"isEnemy": [false, false],
| 471| 471| 			"entityLimits": {"Bar": 20},
| 472|    |-			"entityCounts": {"Bar": 0},
|    | 472|+			"entityCounts": {"Bar": 0 },
| 473| 473| 			"entityLimitChangers": {"Bar": {}},
| 474| 474| 			"researchQueued": new Map(),
| 475| 475| 			"researchStarted": new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 470| 470| 			"isEnemy": [false, false],
| 471| 471| 			"entityLimits": {"Bar": 20},
| 472| 472| 			"entityCounts": {"Bar": 0},
| 473|    |-			"entityLimitChangers": {"Bar": {}},
|    | 473|+			"entityLimitChangers": { "Bar": {}},
| 474| 474| 			"researchQueued": new Map(),
| 475| 475| 			"researchStarted": new Set(),
| 476| 476| 			"researchedTechs": new Set(),
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 470| 470| 			"isEnemy": [false, false],
| 471| 471| 			"entityLimits": {"Bar": 20},
| 472| 472| 			"entityCounts": {"Bar": 0},
| 473|    |-			"entityLimitChangers": {"Bar": {}},
|    | 473|+			"entityLimitChangers": {"Bar": {} },
| 474| 474| 			"researchQueued": new Map(),
| 475| 475| 			"researchStarted": new Set(),
| 476| 476| 			"researchedTechs": new Set(),
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetEntitiesList' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 524| 524| 
| 525| 525| 
| 526| 526| AddMock(10, IID_Builder, {
| 527|    |-	GetEntitiesList: function() {
|    | 527|+	"GetEntitiesList": function() {
| 528| 528| 		return ["test1", "test2"];
| 529| 529| 	},
| 530| 530| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetHitpoints' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 530| 530| });
| 531| 531| 
| 532| 532| AddMock(10, IID_Health, {
| 533|    |-	GetHitpoints: function() { return 50; },
|    | 533|+	"GetHitpoints": function() { return 50; },
| 534| 534| 	GetMaxHitpoints: function() { return 60; },
| 535| 535| 	IsRepairable: function() { return false; },
| 536| 536| 	IsUnhealable: function() { return false; }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetMaxHitpoints' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 531| 531| 
| 532| 532| AddMock(10, IID_Health, {
| 533| 533| 	GetHitpoints: function() { return 50; },
| 534|    |-	GetMaxHitpoints: function() { return 60; },
|    | 534|+	"GetMaxHitpoints": function() { return 60; },
| 535| 535| 	IsRepairable: function() { return false; },
| 536| 536| 	IsUnhealable: function() { return false; }
| 537| 537| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsRepairable' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 532| 532| AddMock(10, IID_Health, {
| 533| 533| 	GetHitpoints: function() { return 50; },
| 534| 534| 	GetMaxHitpoints: function() { return 60; },
| 535|    |-	IsRepairable: function() { return false; },
|    | 535|+	"IsRepairable": function() { return false; },
| 536| 536| 	IsUnhealable: function() { return false; }
| 537| 537| });
| 538| 538| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsUnhealable' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 533| 533| 	GetHitpoints: function() { return 50; },
| 534| 534| 	GetMaxHitpoints: function() { return 60; },
| 535| 535| 	IsRepairable: function() { return false; },
| 536|    |-	IsUnhealable: function() { return false; }
|    | 536|+	"IsUnhealable": function() { return false; }
| 537| 537| });
| 538| 538| 
| 539| 539| AddMock(10, IID_Identity, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetClassesList' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 537| 537| });
| 538| 538| 
| 539| 539| AddMock(10, IID_Identity, {
| 540|    |-	GetClassesList: function() { return ["class1", "class2"]; },
|    | 540|+	"GetClassesList": function() { return ["class1", "class2"]; },
| 541| 541| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 542| 542| 	GetRank: function() { return "foo"; },
| 543| 543| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetVisibleClassesList' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 538| 538| 
| 539| 539| AddMock(10, IID_Identity, {
| 540| 540| 	GetClassesList: function() { return ["class1", "class2"]; },
| 541|    |-	GetVisibleClassesList: function() { return ["class3", "class4"]; },
|    | 541|+	"GetVisibleClassesList": function() { return ["class3", "class4"]; },
| 542| 542| 	GetRank: function() { return "foo"; },
| 543| 543| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 544| 544| 	HasClass: function() { return true; },
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetRank' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 539| 539| AddMock(10, IID_Identity, {
| 540| 540| 	GetClassesList: function() { return ["class1", "class2"]; },
| 541| 541| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 542|    |-	GetRank: function() { return "foo"; },
|    | 542|+	"GetRank": function() { return "foo"; },
| 543| 543| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 544| 544| 	HasClass: function() { return true; },
| 545| 545| 	IsUndeletable: function() { return false; }
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetSelectionGroupName' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 540| 540| 	GetClassesList: function() { return ["class1", "class2"]; },
| 541| 541| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 542| 542| 	GetRank: function() { return "foo"; },
| 543|    |-	GetSelectionGroupName: function() { return "Selection Group Name"; },
|    | 543|+	"GetSelectionGroupName": function() { return "Selection Group Name"; },
| 544| 544| 	HasClass: function() { return true; },
| 545| 545| 	IsUndeletable: function() { return false; }
| 546| 546| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'HasClass' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 541| 541| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 542| 542| 	GetRank: function() { return "foo"; },
| 543| 543| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 544|    |-	HasClass: function() { return true; },
|    | 544|+	"HasClass": function() { return true; },
| 545| 545| 	IsUndeletable: function() { return false; }
| 546| 546| });
| 547| 547| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsUndeletable' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 542| 542| 	GetRank: function() { return "foo"; },
| 543| 543| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 544| 544| 	HasClass: function() { return true; },
| 545|    |-	IsUndeletable: function() { return false; }
|    | 545|+	"IsUndeletable": function() { return false; }
| 546| 546| });
| 547| 547| 
| 548| 548| AddMock(10, IID_Position, {
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetTurretParent' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 546| 546| });
| 547| 547| 
| 548| 548| AddMock(10, IID_Position, {
| 549|    |-	GetTurretParent: function() {return INVALID_ENTITY;},
|    | 549|+	"GetTurretParent": function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551| 551| 		return {x:1, y:2, z:3};
| 552| 552| 	},
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetPosition' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 547| 547| 
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550|    |-	GetPosition: function() {
|    | 550|+	"GetPosition": function() {
| 551| 551| 		return {x:1, y:2, z:3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return { x:1, y:2, z:3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'x' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return {"x":1, y:2, z:3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'x'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return {x: 1, y:2, z:3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'y' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return {x:1, "y":2, z:3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'y'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return {x:1, y: 2, z:3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'z' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return {x:1, y:2, "z":3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'z'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return {x:1, y:2, z: 3};
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 548| 548| AddMock(10, IID_Position, {
| 549| 549| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 550| 550| 	GetPosition: function() {
| 551|    |-		return {x:1, y:2, z:3};
|    | 551|+		return {x:1, y:2, z:3 };
| 552| 552| 	},
| 553| 553| 	IsInWorld: function() {
| 554| 554| 		return true;
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'IsInWorld' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 550| 550| 	GetPosition: function() {
| 551| 551| 		return {x:1, y:2, z:3};
| 552| 552| 	},
| 553|    |-	IsInWorld: function() {
|    | 553|+	"IsInWorld": function() {
| 554| 554| 		return true;
| 555| 555| 	}
| 556| 556| });
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": { x:1, y:2, z:3},
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'x' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": {"x":1, y:2, z:3},
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'x'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": {x: 1, y:2, z:3},
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'y' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": {x:1, "y":2, z:3},
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'y'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": {x:1, y: 2, z:3},
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'z' found.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": {x:1, y:2, "z":3},
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'z'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": {x:1, y:2, z: 3},
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 574| 574| 		"selectionGroupName": "Selection Group Name",
| 575| 575| 		"canDelete": true
| 576| 576| 	},
| 577|    |-	"position": {x:1, y:2, z:3},
|    | 577|+	"position": {x:1, y:2, z:3 },
| 578| 578| 	"hitpoints": 50,
| 579| 579| 	"maxHitpoints": 60,
| 580| 580| 	"needsRepair": false,
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'isBarterMarket'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
| 582| 582| 	"builder": true,
| 583| 583| 	"canGarrison": false,
| 584| 584| 	"visibility": "visible",
| 585|    |-	"isBarterMarket":true,
|    | 585|+	"isBarterMarket": true,
| 586| 586| 	"resourceTrickle": {
| 587| 587| 		"interval": 1250,
| 588| 588| 		"rates": { "food": 2, "wood": 3, "stone": 5, "metal": 9 }
|    | [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
| 796| 796| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 797| 797| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 798| 798| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 799|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 799|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 800| 800| 	}
| 801| 801| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 802| 802| 	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
|1629|1629| 			{
|1630|1630| 				minDist2 = dist2;
|1631|1631| 				minDistEntitySnapData = {
|1632|    |-						"x": pos.x,
|    |1632|+					"x": pos.x,
|1633|1633| 						"z": pos.z,
|1634|1634| 						"angle": cmpPosition.GetRotation().y,
|1635|1635| 						"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
|1630|1630| 				minDist2 = dist2;
|1631|1631| 				minDistEntitySnapData = {
|1632|1632| 						"x": pos.x,
|1633|    |-						"z": pos.z,
|    |1633|+					"z": pos.z,
|1634|1634| 						"angle": cmpPosition.GetRotation().y,
|1635|1635| 						"ent": ent
|1636|1636| 				};
|    | [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
|1631|1631| 				minDistEntitySnapData = {
|1632|1632| 						"x": pos.x,
|1633|1633| 						"z": pos.z,
|1634|    |-						"angle": cmpPosition.GetRotation().y,
|    |1634|+					"angle": cmpPosition.GetRotation().y,
|1635|1635| 						"ent": ent
|1636|1636| 				};
|1637|1637| 			}
|    | [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
|1632|1632| 						"x": pos.x,
|1633|1633| 						"z": pos.z,
|1634|1634| 						"angle": cmpPosition.GetRotation().y,
|1635|    |-						"ent": ent
|    |1635|+					"ent": ent
|1636|1636| 				};
|1637|1637| 			}
|1638|1638| 		}
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
|   1|    |-//Number of rounds of firing per 2 seconds
|    |   1|+// Number of rounds of firing per 2 seconds
|   2|   2| const roundCount = 10;
|   3|   3| const attackType = "Ranged";
|   4|   4| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
| 130| 130| 
| 131| 131| 	var range = cmpAttack.GetRange(attackType);
| 132| 132| 	this.enemyUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery(
| 133|    |-			this.entity, range.min, range.max, range.elevationBonus,
|    | 133|+		this.entity, range.min, range.max, range.elevationBonus,
| 134| 134| 			enemies, IID_Resistance, cmpRangeManager.GetEntityFlagMask("normal"));
| 135| 135| 
| 136| 136| 	cmpRangeManager.EnableActiveQuery(this.enemyUnitsQuery);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
| 131| 131| 	var range = cmpAttack.GetRange(attackType);
| 132| 132| 	this.enemyUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery(
| 133| 133| 			this.entity, range.min, range.max, range.elevationBonus,
| 134|    |-			enemies, IID_Resistance, cmpRangeManager.GetEntityFlagMask("normal"));
|    | 134|+		enemies, IID_Resistance, cmpRangeManager.GetEntityFlagMask("normal"));
| 135| 135| 
| 136| 136| 	cmpRangeManager.EnableActiveQuery(this.enemyUnitsQuery);
| 137| 137| };
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
| 159| 159| 
| 160| 160| 	// This query is only interested in Gaia entities that can attack.
| 161| 161| 	this.gaiaUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery(
| 162|    |-			this.entity, range.min, range.max, range.elevationBonus,
|    | 162|+		this.entity, range.min, range.max, range.elevationBonus,
| 163| 163| 			[0], IID_Attack, cmpRangeManager.GetEntityFlagMask("normal"));
| 164| 164| 
| 165| 165| 	cmpRangeManager.EnableActiveQuery(this.gaiaUnitsQuery);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildingAI.js
| 160| 160| 	// This query is only interested in Gaia entities that can attack.
| 161| 161| 	this.gaiaUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery(
| 162| 162| 			this.entity, range.min, range.max, range.elevationBonus,
| 163|    |-			[0], IID_Attack, cmpRangeManager.GetEntityFlagMask("normal"));
|    | 163|+		[0], IID_Attack, cmpRangeManager.GetEntityFlagMask("normal"));
| 164| 164| 
| 165| 165| 	cmpRangeManager.EnableActiveQuery(this.gaiaUnitsQuery);
| 166| 166| };
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|  18|  18| 	this.cp = [];
|  19|  19| };
|  20|  20| 
|  21|    |-//// Interface functions ////
|    |  21|+// // Interface functions ////
|  22|  22| 
|  23|  23| /**
|  24|  24|  * Returns the current capture points array
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
| 145| 145| 	return sourceEnemyCp > 0;
| 146| 146| };
| 147| 147| 
| 148|    |-//// Private functions ////
|    | 148|+// // Private functions ////
| 149| 149| 
| 150| 150| /**
| 151| 151|  * This has to be called whenever the capture points are changed.
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
| 260| 260| 	Engine.PostMessage(this.entity, MT_CaptureRegenStateChanged, { "regenerating": true, "regenRate": regenRate, "territoryDecay": decay });
| 261| 261| };
| 262| 262| 
| 263|    |-//// Message Listeners ////
|    | 263|+// // Message Listeners ////
| 264| 264| 
| 265| 265| Capturable.prototype.OnValueModification = function(msg)
| 266| 266| {

binaries/data/mods/public/simulation/components/Capturable.js
| 192| »   »   var·garrisonRegenRate·=·0;
|    | [NORMAL] JSHintBear:
|    | 'garrisonRegenRate' is already defined.

binaries/data/mods/public/simulation/components/Capturable.js
| 194| »   return·regenRate·+·garrisonRegenRate;
|    | [NORMAL] JSHintBear:
|    | 'garrisonRegenRate' used out of scope.

binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js
| 275| »   for·(let·point·of·triggerPoints)
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'point' 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/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 389| 389| function getRepairTimeTooltip(entState)
| 390| 390| {
| 391| 391| 	return sprintf(translate("%(label)s %(details)s"), {
| 392|    |-			"label": headerFont(translate("Number of repairers:")),
|    | 392|+		"label": headerFont(translate("Number of repairers:")),
| 393| 393| 			"details": entState.repairable.numBuilders
| 394| 394| 		}) + "\n" + (entState.repairable.numBuilders ?
| 395| 395| 		sprintf(translatePlural(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 390| 390| {
| 391| 391| 	return sprintf(translate("%(label)s %(details)s"), {
| 392| 392| 			"label": headerFont(translate("Number of repairers:")),
| 393|    |-			"details": entState.repairable.numBuilders
|    | 393|+		"details": entState.repairable.numBuilders
| 394| 394| 		}) + "\n" + (entState.repairable.numBuilders ?
| 395| 395| 		sprintf(translatePlural(
| 396| 396| 			"Add another worker to speed up the repairs by %(second)s second.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 391| 391| 	return sprintf(translate("%(label)s %(details)s"), {
| 392| 392| 			"label": headerFont(translate("Number of repairers:")),
| 393| 393| 			"details": entState.repairable.numBuilders
| 394|    |-		}) + "\n" + (entState.repairable.numBuilders ?
|    | 394|+	}) + "\n" + (entState.repairable.numBuilders ?
| 395| 395| 		sprintf(translatePlural(
| 396| 396| 			"Add another worker to speed up the repairs by %(second)s second.",
| 397| 397| 			"Add another worker to speed up the repairs by %(second)s seconds.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 411| 411| function getBuildTimeTooltip(entState)
| 412| 412| {
| 413| 413| 	return sprintf(translate("%(label)s %(details)s"), {
| 414|    |-			"label": headerFont(translate("Number of builders:")),
|    | 414|+		"label": headerFont(translate("Number of builders:")),
| 415| 415| 			"details": entState.foundation.numBuilders
| 416| 416| 		}) + "\n" + (entState.foundation.numBuilders ?
| 417| 417| 		sprintf(translatePlural(
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 412| 412| {
| 413| 413| 	return sprintf(translate("%(label)s %(details)s"), {
| 414| 414| 			"label": headerFont(translate("Number of builders:")),
| 415|    |-			"details": entState.foundation.numBuilders
|    | 415|+		"details": entState.foundation.numBuilders
| 416| 416| 		}) + "\n" + (entState.foundation.numBuilders ?
| 417| 417| 		sprintf(translatePlural(
| 418| 418| 			"Add another worker to speed up the construction by %(second)s second.",
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 1 tab but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/common/tooltips.js
| 413| 413| 	return sprintf(translate("%(label)s %(details)s"), {
| 414| 414| 			"label": headerFont(translate("Number of builders:")),
| 415| 415| 			"details": entState.foundation.numBuilders
| 416|    |-		}) + "\n" + (entState.foundation.numBuilders ?
|    | 416|+	}) + "\n" + (entState.foundation.numBuilders ?
| 417| 417| 		sprintf(translatePlural(
| 418| 418| 			"Add another worker to speed up the construction by %(second)s second.",
| 419| 419| 			"Add another worker to speed up the construction by %(second)s seconds.",
|    | [NORMAL] ESLintBear (no-else-return):
|    | Unnecessary 'else' after 'return'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
| 762| 762| 					this.FinishOrder();
| 763| 763| 					return;
| 764| 764| 				}
| 765|    |-				else
| 766|    |-				{
|    | 765|+				
| 767| 766| 					this.SetNextState("GARRISON.APPROACHING");
| 768| 767| 					return;
| 769|    |-				}
|    | 768|+				
| 770| 769| 			}
| 771| 770| 
| 772| 771| 			this.SetNextState("GARRISON.GARRISONING");
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'GARRISON'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|1030|1030| 			},
|1031|1031| 		},
|1032|1032| 
|1033|    |-		"GARRISON":{
|    |1033|+		"GARRISON": {
|1034|1034| 			"enter": function() {
|1035|1035| 				// If the garrisonholder should pickup, warn it so it can take needed action
|1036|1036| 				var cmpGarrisonHolder = Engine.QueryInterface(this.order.data.target, IID_GarrisonHolder);
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|1979|1979| 
|1980|1980| 				"Attacked": function(msg) {
|1981|1981| 					// If we are capturing and are attacked by something that we would not capture, attack that entity instead
|1982|    |-					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force)
|1983|    |-						&& this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|    |1982|+					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force) &&
|    |1983|+						this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|1984|1984| 						this.RespondToTargetedEntities([msg.data.attacker]);
|1985|1985| 				},
|1986|1986| 			},
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|2674|2674| 					{
|2675|2675| 						// The building was already finished/fully repaired before we arrived;
|2676|2676| 						// let the ConstructionFinished handler handle this.
|2677|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2677|+						this.OnGlobalConstructionFinished({ "entity": this.repairTarget, "newentity": this.repairTarget});
|2678|2678| 						return true;
|2679|2679| 					}
|2680|2680| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|2674|2674| 					{
|2675|2675| 						// The building was already finished/fully repaired before we arrived;
|2676|2676| 						// let the ConstructionFinished handler handle this.
|2677|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2677|+						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget });
|2678|2678| 						return true;
|2679|2679| 					}
|2680|2680| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3187|3187| 		"COMBAT": "INDIVIDUAL.COMBAT", // reuse the same combat behaviour for animals
|3188|3188| 
|3189|3189| 		"WALKING": "INDIVIDUAL.WALKING",	// reuse the same walking behaviour for animals
|3190|    |-							// only used for domestic animals
|    |3190|+		// only used for domestic animals
|3191|3191| 	},
|3192|3192| };
|3193|3193| 
|    | [NORMAL] ESLintBear (no-unneeded-ternary):
|    | Unnecessary use of boolean literals in conditional expression.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3244|3244| 
|3245|3245| UnitAI.prototype.IsAnimal = function()
|3246|3246| {
|3247|    |-	return (this.template.NaturalBehaviour ? true : false);
|    |3247|+	return (!!this.template.NaturalBehaviour);
|3248|3248| };
|3249|3249| 
|3250|3250| UnitAI.prototype.IsDangerousAnimal = function()
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3360|3360| 		{
|3361|3361| 			let index = this.GetCurrentState().indexOf(".");
|3362|3362| 			if (index != -1)
|3363|    |-				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0,index));
|    |3363|+				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0, index));
|3364|3364| 			this.Stop(false);
|3365|3365| 		}
|3366|3366| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3416|3416| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3417|3417| 			continue;
|3418|3418| 		if (i == 0)
|3419|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3419|+			this.UnitFsm.ProcessMessage(this, { "type": "PickupCanceled", "data": msg});
|3420|3420| 		else
|3421|3421| 			this.orderQueue.splice(i, 1);
|3422|3422| 		Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3416|3416| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3417|3417| 			continue;
|3418|3418| 		if (i == 0)
|3419|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3419|+			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg });
|3420|3420| 		else
|3421|3421| 			this.orderQueue.splice(i, 1);
|3422|3422| 		Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3500|3500| };
|3501|3501| 
|3502|3502| 
|3503|    |-//// FSM linkage functions ////
|    |3503|+// // FSM linkage functions ////
|3504|3504| 
|3505|3505| // Setting the next state to the current state will leave/re-enter the top-most substate.
|3506|3506| UnitAI.prototype.SetNextState = function(state)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3670|3670| 				continue;
|3671|3671| 			if (this.orderQueue[i].type == type)
|3672|3672| 				continue;
|3673|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3673|+			this.orderQueue.splice(i, 0, { "type": type, "data": data});
|3674|3674| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3675|3675| 			return;
|3676|3676| 		}
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3670|3670| 				continue;
|3671|3671| 			if (this.orderQueue[i].type == type)
|3672|3672| 				continue;
|3673|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3673|+			this.orderQueue.splice(i, 0, {"type": type, "data": data });
|3674|3674| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3675|3675| 			return;
|3676|3676| 		}
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3841|3841| 	if (data.timerRepeat === undefined)
|3842|3842| 		this.timer = undefined;
|3843|3843| 
|3844|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |3844|+	this.UnitFsm.ProcessMessage(this, { "type": "Timer", "data": data, "lateness": lateness});
|3845|3845| };
|3846|3846| 
|3847|3847| /**
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3841|3841| 	if (data.timerRepeat === undefined)
|3842|3842| 		this.timer = undefined;
|3843|3843| 
|3844|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |3844|+	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness });
|3845|3845| };
|3846|3846| 
|3847|3847| /**
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3886|3886| 	// TODO: This is a bit inefficient since every unit listens to every
|3887|3887| 	// construction message - ideally we could scope it to only the one we're building
|3888|3888| 
|3889|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |3889|+	this.UnitFsm.ProcessMessage(this, { "type": "ConstructionFinished", "data": msg});
|3890|3890| };
|3891|3891| 
|3892|3892| UnitAI.prototype.OnGlobalEntityRenamed = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3886|3886| 	// TODO: This is a bit inefficient since every unit listens to every
|3887|3887| 	// construction message - ideally we could scope it to only the one we're building
|3888|3888| 
|3889|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |3889|+	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg });
|3890|3890| };
|3891|3891| 
|3892|3892| UnitAI.prototype.OnGlobalEntityRenamed = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3911|3911| 
|3912|3912| UnitAI.prototype.OnAttacked = function(msg)
|3913|3913| {
|3914|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |3914|+	this.UnitFsm.ProcessMessage(this, { "type": "Attacked", "data": msg});
|3915|3915| };
|3916|3916| 
|3917|3917| UnitAI.prototype.OnGuardedAttacked = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3911|3911| 
|3912|3912| UnitAI.prototype.OnAttacked = function(msg)
|3913|3913| {
|3914|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |3914|+	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg });
|3915|3915| };
|3916|3916| 
|3917|3917| UnitAI.prototype.OnGuardedAttacked = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3916|3916| 
|3917|3917| UnitAI.prototype.OnGuardedAttacked = function(msg)
|3918|3918| {
|3919|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |3919|+	this.UnitFsm.ProcessMessage(this, { "type": "GuardedAttacked", "data": msg.data});
|3920|3920| };
|3921|3921| 
|3922|3922| UnitAI.prototype.OnHealthChanged = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3916|3916| 
|3917|3917| UnitAI.prototype.OnGuardedAttacked = function(msg)
|3918|3918| {
|3919|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |3919|+	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data });
|3920|3920| };
|3921|3921| 
|3922|3922| UnitAI.prototype.OnHealthChanged = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3921|3921| 
|3922|3922| UnitAI.prototype.OnHealthChanged = function(msg)
|3923|3923| {
|3924|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |3924|+	this.UnitFsm.ProcessMessage(this, { "type": "HealthChanged", "from": msg.from, "to": msg.to});
|3925|3925| };
|3926|3926| 
|3927|3927| UnitAI.prototype.OnRangeUpdate = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3921|3921| 
|3922|3922| UnitAI.prototype.OnHealthChanged = function(msg)
|3923|3923| {
|3924|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |3924|+	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to });
|3925|3925| };
|3926|3926| 
|3927|3927| UnitAI.prototype.OnRangeUpdate = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3927|3927| UnitAI.prototype.OnRangeUpdate = function(msg)
|3928|3928| {
|3929|3929| 	if (msg.tag == this.losRangeQuery)
|3930|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |3930|+		this.UnitFsm.ProcessMessage(this, { "type": "LosRangeUpdate", "data": msg});
|3931|3931| 	else if (msg.tag == this.losHealRangeQuery)
|3932|3932| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|3933|3933| };
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3927|3927| UnitAI.prototype.OnRangeUpdate = function(msg)
|3928|3928| {
|3929|3929| 	if (msg.tag == this.losRangeQuery)
|3930|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |3930|+		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg });
|3931|3931| 	else if (msg.tag == this.losHealRangeQuery)
|3932|3932| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|3933|3933| };
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3929|3929| 	if (msg.tag == this.losRangeQuery)
|3930|3930| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|3931|3931| 	else if (msg.tag == this.losHealRangeQuery)
|3932|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |3932|+		this.UnitFsm.ProcessMessage(this, { "type": "LosHealRangeUpdate", "data": msg});
|3933|3933| };
|3934|3934| 
|3935|3935| UnitAI.prototype.OnPackFinished = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3929|3929| 	if (msg.tag == this.losRangeQuery)
|3930|3930| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|3931|3931| 	else if (msg.tag == this.losHealRangeQuery)
|3932|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |3932|+		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg });
|3933|3933| };
|3934|3934| 
|3935|3935| UnitAI.prototype.OnPackFinished = function(msg)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3934|3934| 
|3935|3935| UnitAI.prototype.OnPackFinished = function(msg)
|3936|3936| {
|3937|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |3937|+	this.UnitFsm.ProcessMessage(this, { "type": "PackFinished", "packed": msg.packed});
|3938|3938| };
|3939|3939| 
|3940|3940| //// Helper functions to be called by the FSM ////
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3934|3934| 
|3935|3935| UnitAI.prototype.OnPackFinished = function(msg)
|3936|3936| {
|3937|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |3937|+	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed });
|3938|3938| };
|3939|3939| 
|3940|3940| //// Helper functions to be called by the FSM ////
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3937|3937| 	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|3938|3938| };
|3939|3939| 
|3940|    |-//// Helper functions to be called by the FSM ////
|    |3940|+// // Helper functions to be called by the FSM ////
|3941|3941| 
|3942|3942| UnitAI.prototype.GetWalkSpeed = function()
|3943|3943| {
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|4590|4590| UnitAI.prototype.AttackEntityInZone = function(ents)
|4591|4591| {
|4592|4592| 	var target = ents.find(target =>
|4593|    |-		this.CanAttack(target)
|4594|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|    |4593|+		this.CanAttack(target) &&
|    |4594|+		this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4595|4595| 		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4596|4596| 	);
|4597|4597| 	if (!target)
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|4591|4591| {
|4592|4592| 	var target = ents.find(target =>
|4593|4593| 		this.CanAttack(target)
|4594|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4595|    |-		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|    |4594|+		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true)) &&
|    |4595|+		(this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4596|4596| 	);
|4597|4597| 	if (!target)
|4598|4598| 		return false;
|    | [NORMAL] ESLintBear (no-multi-spaces):
|    | Multiple spaces found before 'Engine'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|4655|4655| 	// If we are guarding/escorting, don't abandon as long as the guarded unit is in target range of the attacker
|4656|4656| 	if (this.isGuardOf)
|4657|4657| 	{
|4658|    |-		var cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |4658|+		var cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|4659|4659| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|4660|4660| 		if (cmpUnitAI && cmpAttack &&
|4661|4661| 		    cmpAttack.GetAttackTypes().some(type => cmpUnitAI.CheckTargetAttackRange(this.isGuardOf, type)))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|4659|4659| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|4660|4660| 		if (cmpUnitAI && cmpAttack &&
|4661|4661| 		    cmpAttack.GetAttackTypes().some(type => cmpUnitAI.CheckTargetAttackRange(this.isGuardOf, type)))
|4662|    |-				return false;
|    |4662|+			return false;
|4663|4663| 	}
|4664|4664| 
|4665|4665| 	// Stop if we're in hold-ground mode and it's too far from the holding point
|    | [NORMAL] ESLintBear (no-multi-spaces):
|    | Multiple spaces found before 'Engine'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|4697|4697| 	// If we are guarding/escorting, chase at least as long as the guarded unit is in target range of the attacker
|4698|4698| 	if (this.isGuardOf)
|4699|4699| 	{
|4700|    |-		let cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |4700|+		let cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|4701|4701| 		let cmpAttack = Engine.QueryInterface(target, IID_Attack);
|4702|4702| 		if (cmpUnitAI && cmpAttack &&
|4703|4703| 		    cmpAttack.GetAttackTypes().some(type => cmpUnitAI.CheckTargetAttackRange(this.isGuardOf, type)))
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|4710|4710| 	return false;
|4711|4711| };
|4712|4712| 
|4713|    |-//// External interface functions ////
|    |4713|+// // External interface functions ////
|4714|4714| 
|4715|4715| UnitAI.prototype.SetFormationController = function(ent)
|4716|4716| {
|    | [NORMAL] ESLintBear (no-else-return):
|    | Unnecessary 'else' after 'return'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|4866|4866| 	{
|4867|4867| 		if (this.isGuardOf == target && this.order && this.order.type == "Guard")
|4868|4868| 			return;
|4869|    |-		else
|4870|    |-			this.RemoveGuard();
|    |4869|+		this.RemoveGuard();
|4871|4870| 	}
|4872|4871| 
|4873|4872| 	this.AddOrder("Guard", { "target": target, "force": false }, queued);
|    | [NORMAL] ESLintBear (no-trailing-spaces):
|    | Trailing spaces not allowed.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5198|5198| 	    this.workOrders.length && this.workOrders[0].type == "Trade")
|5199|5199| 	{
|5200|5200| 		let cmpTrader = Engine.QueryInterface(this.entity, IID_Trader);
|5201|    |-		if (cmpTrader.HasBothMarkets() && 
|    |5201|+		if (cmpTrader.HasBothMarkets() &&
|5202|5202| 		   (cmpTrader.GetFirstMarket() == target && cmpTrader.GetSecondMarket() == source ||
|5203|5203| 		    cmpTrader.GetFirstMarket() == source && cmpTrader.GetSecondMarket() == target))
|5204|5204| 		{
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5479|5479| 				{
|5480|5480| 					var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5481|5481| 					var targetClasses = this.order.data.targetClasses;
|5482|    |-					if (targetClasses.attack && cmpIdentity
|5483|    |-						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5482|+					if (targetClasses.attack && cmpIdentity &&
|    |5483|+						!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5484|5484| 						continue;
|5485|5485| 					if (targetClasses.avoid && cmpIdentity
|5486|5486| 						&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5482|5482| 					if (targetClasses.attack && cmpIdentity
|5483|5483| 						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5484|5484| 						continue;
|5485|    |-					if (targetClasses.avoid && cmpIdentity
|5486|    |-						&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5485|+					if (targetClasses.avoid && cmpIdentity &&
|    |5486|+						MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5487|5487| 						continue;
|5488|5488| 					// Only used by the AIs to prevent some choices of targets
|5489|5489| 					if (targetClasses.vetoEntities && targetClasses.vetoEntities[targ])
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5505|5505| 		{
|5506|5506| 			var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5507|5507| 			var targetClasses = this.order.data.targetClasses;
|5508|    |-			if (cmpIdentity && targetClasses.attack
|5509|    |-				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5508|+			if (cmpIdentity && targetClasses.attack &&
|    |5509|+				!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5510|5510| 				continue;
|5511|5511| 			if (cmpIdentity && targetClasses.avoid
|5512|5512| 				&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5508|5508| 			if (cmpIdentity && targetClasses.attack
|5509|5509| 				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5510|5510| 				continue;
|5511|    |-			if (cmpIdentity && targetClasses.avoid
|5512|    |-				&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5511|+			if (cmpIdentity && targetClasses.avoid &&
|    |5512|+				MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5513|5513| 				continue;
|5514|5514| 			// Only used by the AIs to prevent some choices of targets
|5515|5515| 			if (targetClasses.vetoEntities && targetClasses.vetoEntities[targ])
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5665|5665| 
|5666|5666| UnitAI.prototype.SetHeldPosition = function(x, z)
|5667|5667| {
|5668|    |-	this.heldPosition = {"x": x, "z": z};
|    |5668|+	this.heldPosition = { "x": x, "z": z};
|5669|5669| };
|5670|5670| 
|5671|5671| UnitAI.prototype.SetHeldPositionOnEntity = function(entity)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5665|5665| 
|5666|5666| UnitAI.prototype.SetHeldPosition = function(x, z)
|5667|5667| {
|5668|    |-	this.heldPosition = {"x": x, "z": z};
|    |5668|+	this.heldPosition = {"x": x, "z": z };
|5669|5669| };
|5670|5670| 
|5671|5671| UnitAI.prototype.SetHeldPositionOnEntity = function(entity)
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5692|5692| 	return false;
|5693|5693| };
|5694|5694| 
|5695|    |-//// Helper functions ////
|    |5695|+// // Helper functions ////
|5696|5696| 
|5697|5697| UnitAI.prototype.CanAttack = function(target)
|5698|5698| {
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5896|5896| 	return cmpPack && cmpPack.IsPacking();
|5897|5897| };
|5898|5898| 
|5899|    |-//// Formation specific functions ////
|    |5899|+// // Formation specific functions ////
|5900|5900| 
|5901|5901| UnitAI.prototype.IsAttackingAsFormation = function()
|5902|5902| {
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5901|5901| UnitAI.prototype.IsAttackingAsFormation = function()
|5902|5902| {
|5903|5903| 	var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|5904|    |-	return cmpAttack && cmpAttack.CanAttackAsFormation()
|5905|    |-		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|    |5904|+	return cmpAttack && cmpAttack.CanAttackAsFormation() &&
|    |5905|+		this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|5906|5906| };
|5907|5907| 
|5908|5908| //// Animal specific functions ////
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5905|5905| 		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|5906|5906| };
|5907|5907| 
|5908|    |-//// Animal specific functions ////
|    |5908|+// // Animal specific functions ////
|5909|5909| 
|5910|5910| UnitAI.prototype.MoveRandomly = function(distance)
|5911|5911| {

binaries/data/mods/public/simulation/components/UnitAI.js
| 331| »   »   »   return·true;
|    | [NORMAL] ESLintBear (consistent-return):
|    | Method 'Order.WalkToTarget' expected no return value.

binaries/data/mods/public/simulation/components/UnitAI.js
| 917| »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
| 942| »   »   »   "enter":·function(msg)·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
| 992| »   »   »   »   »   return·true;
|    | [NORMAL] ESLintBear (consistent-return):
|    | Method 'enter' expected no return value.

binaries/data/mods/public/simulation/components/UnitAI.js
|1055| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1091| »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1123| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1283| »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1340| »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1515| »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1537| »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1569| »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1723| »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1773| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|1851| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2028| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2131| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2386| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2419| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2525| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2591| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2630| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|2841| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|3022| »   »   »   »   "enter":·function()·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Expected to return a value at the end of method 'enter'.

binaries/data/mods/public/simulation/components/UnitAI.js
|3746| »   var·isWorkType·=·type·=>·type·==·"Gather"·||·type·==·"Trade"·||·type·==·"Repair"·||·type·==·"ReturnResource";
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'type' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/UnitAI.js
|4577| »   var·target·=·ents.find(target·=>·this.CanAttack(target));
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'target' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/UnitAI.js
|4592| »   var·target·=·ents.find(target·=>
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'target' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/UnitAI.js
|4638| »   var·ent·=·ents.find(ent·=>·this.CanHeal(ent));
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'ent' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/UnitAI.js
|4661| »   »   ····cmpAttack.GetAttackTypes().some(type·=>·cmpUnitAI.CheckTargetAttackRange(this.isGuardOf,·type)))
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'type' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/UnitAI.js
|1983| »   »   »   »   »   »   &&·this.order.data.target·!=·msg.data.attacker·&&·this.GetBestAttackAgainst(msg.data.attacker,·true)·!=·"Capture")
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|3708| »   »   var·order·=·{·"type":·type,·"data":·data·};
|    | [NORMAL] JSHintBear:
|    | 'order' is already defined.

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4594| »   »   &&·this.CheckTargetDistanceFromHeldPosition(target,·IID_Attack,·this.GetBestAttackAgainst(target,·true))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|4595| »   »   &&·(this.GetStance().respondChaseBeyondVision·||·this.CheckTargetIsInVisionRange(target))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|5483| »   »   »   »   »   »   &&·!MatchesClassList(cmpIdentity.GetClassesList(),·targetClasses.attack))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|5486| »   »   »   »   »   »   &&·MatchesClassList(cmpIdentity.GetClassesList(),·targetClasses.avoid))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|5499| »   var·targets·=·this.GetTargetsFromUnit();
|    | [NORMAL] JSHintBear:
|    | 'targets' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5500| »   for·(var·targ·of·targets)
|    | [NORMAL] JSHintBear:
|    | 'targ' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5506| »   »   »   var·cmpIdentity·=·Engine.QueryInterface(targ,·IID_Identity);
|    | [NORMAL] JSHintBear:
|    | 'cmpIdentity' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5507| »   »   »   var·targetClasses·=·this.order.data.targetClasses;
|    | [NORMAL] JSHintBear:
|    | 'targetClasses' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5509| »   »   »   »   &&·!MatchesClassList(cmpIdentity.GetClassesList(),·targetClasses.attack))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|5512| »   »   »   »   &&·MatchesClassList(cmpIdentity.GetClassesList(),·targetClasses.avoid))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|5587| »   »   var·cmpVision·=·Engine.QueryInterface(this.entity,·IID_Vision);
|    | [NORMAL] JSHintBear:
|    | 'cmpVision' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5590| »   »   var·range·=·cmpVision.GetRange();
|    | [NORMAL] JSHintBear:
|    | 'range' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5595| »   »   var·cmpRanged·=·Engine.QueryInterface(this.entity,·iid);
|    | [NORMAL] JSHintBear:
|    | 'cmpRanged' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5598| »   »   var·range·=·iid·!==·IID_Attack·?·cmpRanged.GetRange()·:·cmpRanged.GetFullAttackRange();
|    | [NORMAL] JSHintBear:
|    | 'range' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5599| »   »   var·cmpVision·=·Engine.QueryInterface(this.entity,·IID_Vision);
|    | [NORMAL] JSHintBear:
|    | 'cmpVision' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5609| »   »   var·cmpVision·=·Engine.QueryInterface(this.entity,·IID_Vision);
|    | [NORMAL] JSHintBear:
|    | 'cmpVision' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5612| »   »   var·range·=·cmpVision.GetRange();
|    | [NORMAL] JSHintBear:
|    | 'range' is already defined.

binaries/data/mods/public/simulation/components/UnitAI.js
|5905| »   »   &&·this.GetCurrentState()·==·"FORMATIONCONTROLLER.COMBAT.ATTACKING";
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.
Executing section cli...

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

Stan added a subscriber: Stan.Mon, Aug 19, 9:48 AM
Stan added inline comments.
binaries/data/mods/public/globalscripts/AttackEffects.js
1

Why not now ?

binaries/data/mods/public/gui/common/tooltips.js
273

Seems a bit redundant but I guess this is not better

template.attack[type].Capture :

Any reason you chose capture over value and damage ?

binaries/data/mods/public/maps/scripts/CaptureTheRelic.js
23

Shouldn't you check for that not being null ?

binaries/data/mods/public/simulation/components/Attack.js
344

I believe we use 'template' everywhere else.

binaries/data/mods/public/simulation/components/DelayedDamage.js
35

Do we need to check for a system entity ? I guess the sound can be null ?

binaries/data/mods/public/simulation/components/Health.js
190

check for it ?

243

hpChange ?

binaries/data/mods/public/simulation/components/UnitAI.js
2961

Missing check ? I guess you can't use let here.

2971

Missing check ?

binaries/data/mods/public/simulation/components/tests/test_Attack.js
161

null or undefined ?

binaries/data/mods/public/simulation/helpers/Attacking.js
80

Missing / ?

85

I guess that explains the null, but why not let it undefined ?

110

What's missing for proper handling ?

141

extra line ?

155

wouldn't hurt to print the shape :)