Page MenuHomeWildfire Games

Turrets and/or sub-units.
Changes PlannedPublic

Authored by Freagarach on Jun 7 2019, 11:40 AM.

Details

Reviewers
wraitii
Stan
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Trac Tickets
#2577
Summary

This patch allows subunits to be specified in the template. Subunits can be ordinary entities with UnitAI (so can be individually ordered), which occupy a turret point on the parent.
If the parent has UnitAI and an order (to attack) is given to it, the order is automatically delegated once in range. This means the subunit will attack anything in range until it gets in range of the intended target, after which it will start attacking that target.
There is also a fixed-option in the template, to disallow leaving the turret point by the subunit (and allow entities which are normally not allowed to visibly garrison, which might be useful for scripted maps (e.g. spearmen holding guard on a wall)).

Something for the future perhaps:


Possible extensions:

  • Increased spread (when moving)?
  • Riding stances.

GUI

There might be a problem with how turrets are changed here and how the current GUI should handle them. I, for one, have the opinion that we need buttons for turret positions, to be able to easily work with them and prepare for extending scenarios. However, I'm obiously biased towards my own idea and may not see things clearly. In conversation with @elexis, we decided that it good to do some analysis about what we want and what that asks from a GUI.
Hence I will list some use cases here where I think we want to deal with and, when possible, add some extra information.
Anyone willing to correct/expand the list is welcome to do so, or just post stuff and I will change it.

The main objective is to allow units to attack whilst moving.

Turrets/Subunits use cases:
  • Units as subunits on cavalry:
    • No need of seperate selection of turret and turret holder (only one unit per horse).
    • Ungarrison == dismount.
    • Dead? Mount a new one. (Either a new rider if that died or a new steed if that passed away.)
    • Current GUI would fit perfectly fine, IMHO.
    • E.g. Total War series
      • We would differ by that the turret holder (i.e. the horse) could still be alive and remountable even if the turret (i.e. the rider) dies.
  • Units as subunits on chariots:
    • Perhaps be able to select seperately (possibility for multiple units per chariot).
      • E.g. a healer and an archer on a chariot: you want the healer to heal your hero, but the archer to keep attacking a specific target.
    • Ungarrison == dismount
      • Should be possible on a per-unit basis
        • E.g. you want a badly damaged archer to dismount behind your lines and add a newly recruited one.
    • Dead? Mount a new one.
    • This can be achieved with the current GUI (unit action button).
    • E.g. Total War series
      • We would differ by that the turret holder (i.e. the chariot) could still be alive and remountable even if the turret(s) (i.e. the rider(s)) die.
  • Units as turrets on structures:
    • Able to select seperately.
    • Turn in on a per unit basis.
      • This can be achieved with the current GUI.
    • Turn out on a per turret position basis.
      • This can not be achieved with the current GUI, units that can go on turret positions will go on turret positions.
      • E.g. imagine a fortress with four turret positions, but plenty of space inside. The four positions are occupied with archers and there is a bunch of other archers inside. The enemy arrives :O they shoot your archers from the citadel (poor fellows). And now? Ungarrison your archers and regarrison them to occupy the positions again? Not really nice. Let them occupy the positions automatically? Not really nice also: you didn't notice that you were shot by long-range archers who pick your entire garrison one-by-one since they keep taking the turret positions automatically. We could click a unit icon of the units that are already garrisoned to move them to a free turret position. (Which one? Random probably.) Cf. #3488.
    • E.g. ? (Usually games don't have an inside and an outside?)
  • Turrets on a machine
    • Not allowed to select seperately.
    • Ungarrison not possible.
    • Dead? Construct a new one from the turret holder. Or use a villie to construct a new one?
    • This could be handled with the current GUI I think with the turret positions as upgrades. (Although it would clutter that part a tad.)
    • E.g. C&C Generals (Overlord tanks).
      • We would differ by that the turret can be destroyed seperately.
Test Plan

Test that ordinary movements are still as usual.
Test that using subunits like archers, swordsmen or healers on chariots work fine. (Test all seperately.)
Test that using multiple subunits on the same garrison holder works.
Test that visibly garrisoned units on walls still work fine.
Test that (de)serialising works.

Diff Detail

Repository
rP 0 A.D. Public Repository
Branch
/ps/trunk
Lint
Lint OK
SeverityLocationCodeMessage
Warningbinaries/data/mods/public/gui/session/unit_actions.js:544ESLintBear (key-spacing)ESLintBear (key-spacing)
Warningbinaries/data/mods/public/gui/session/unit_actions.js:589ESLintBear (semi)ESLintBear (semi)
Warningbinaries/data/mods/public/gui/session/unit_actions.js:589JSHintBearJSHintBear
Warningbinaries/data/mods/public/gui/session/unit_actions.js:631ESLintBear (default-case)ESLintBear (default-case)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:349ESLintBear (consistent-return)ESLintBear (consistent-return)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:829ESLintBear (no-else-return)ESLintBear (no-else-return)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:1092ESLintBear (key-spacing)ESLintBear (key-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:2139ESLintBear (operator-linebreak)ESLintBear (operator-linebreak)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:2297ESLintBear (no-trailing-spaces)ESLintBear (no-trailing-spaces)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:2599ESLintBear (indent)ESLintBear (indent)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3216ESLintBear (semi)ESLintBear (semi)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3430ESLintBear (indent)ESLintBear (indent)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3480ESLintBear (no-unneeded-ternary)ESLintBear (no-unneeded-ternary)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3620ESLintBear (comma-spacing)ESLintBear (comma-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3677ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3677ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3806ESLintBear (spaced-comment)ESLintBear (spaced-comment)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3979ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:3979ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:4122ESLintBear (no-shadow)ESLintBear (no-shadow)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:4220ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:4220ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:4306ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:4306ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Warningbinaries/data/mods/public/simulation/components/UnitAI.js:4311ESLintBear (object-curly-spacing)ESLintBear (object-curly-spacing)
Unit
No Unit Test Coverage
Build Status
Buildable 12951
Build 25478: Vulcan BuildJenkins
Build 25477: Vulcan Build (macOS)Jenkins
Build 25476: Vulcan Build (Windows)Jenkins
Build 25475: arc lint + arc unit

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
Stan added inline comments.Mar 17 2020, 11:58 AM
binaries/data/mods/public/simulation/components/UnitAI.js
6314

Maybe CanSubUnitPerform(action, target, types)

6621

@param ?

6638

Can it be undefined?

Nescio removed a subscriber: Nescio.Mar 17 2020, 6:51 PM
Freagarach updated this revision to Diff 11538.Mar 24 2020, 4:14 PM
Freagarach marked 4 inline comments as done.
  • CanAnySubUnitPerform.
  • Added @param.
  • Check for order length.
  • Reset speed when have been chasing.
binaries/data/mods/public/simulation/components/UnitAI.js
6638

It can't be empty as long as the entity is garrisoned ^^

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/components/Attack.js
| 423| »   return·{
|    | [NORMAL] ESLintBear (consistent-return):
|    | Function expected no return value.
|    | [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
|  49|  49| 	"GetResource": resource => ({
|  50|  50| 		"aiAnalysisInfluenceGroup":
|  51|  51| 			resource == "food" ? "ignore" :
|  52|    |-			resource == "wood" ? "abundant" : "sparse"
|    |  52|+				resource == "wood" ? "abundant" : "sparse"
|  53|  53| 	})
|  54|  54| };
|  55|  55| 
|    | [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
|  57|  57| 
|  58|  58| 
|  59|  59| AddMock(SYSTEM_ENTITY, IID_Barter, {
|  60|    |-	GetPrices: function() {
|    |  60|+	"GetPrices": function() {
|  61|  61| 		return {
|  62|  62| 			"buy": { "food": 150 },
|  63|  63| 			"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
|  63|  63| 			"sell": { "food": 25 }
|  64|  64| 		};
|  65|  65| 	},
|  66|    |-	PlayerHasMarket: function () { return false; }
|    |  66|+	"PlayerHasMarket": function () { return false; }
|  67|  67| });
|  68|  68| 
|  69|  69| 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
|  63|  63| 			"sell": { "food": 25 }
|  64|  64| 		};
|  65|  65| 	},
|  66|    |-	PlayerHasMarket: function () { return false; }
|    |  66|+	PlayerHasMarket: function() { return false; }
|  67|  67| });
|  68|  68| 
|  69|  69| 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
|  67|  67| });
|  68|  68| 
|  69|  69| AddMock(SYSTEM_ENTITY, IID_EndGameManager, {
|  70|    |-	GetVictoryConditions: () => ["conquest", "wonder"],
|    |  70|+	"GetVictoryConditions": () => ["conquest", "wonder"],
|  71|  71| 	GetAlliedVictory: function() { return false; }
|  72|  72| });
|  73|  73| 
|    | [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
|  68|  68| 
|  69|  69| AddMock(SYSTEM_ENTITY, IID_EndGameManager, {
|  70|  70| 	GetVictoryConditions: () => ["conquest", "wonder"],
|  71|    |-	GetAlliedVictory: function() { return false; }
|    |  71|+	"GetAlliedVictory": function() { return false; }
|  72|  72| });
|  73|  73| 
|  74|  74| 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
|  72|  72| });
|  73|  73| 
|  74|  74| AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  75|    |-	GetNumPlayers: function() { return 2; },
|    |  75|+	"GetNumPlayers": function() { return 2; },
|  76|  76| 	GetPlayerByID: function(id) { TS_ASSERT(id === 0 || id === 1); return 100+id; }
|  77|  77| });
|  78|  78| 
|    | [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
|  73|  73| 
|  74|  74| AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|  75|  75| 	GetNumPlayers: function() { return 2; },
|  76|    |-	GetPlayerByID: function(id) { TS_ASSERT(id === 0 || id === 1); return 100+id; }
|    |  76|+	"GetPlayerByID": function(id) { TS_ASSERT(id === 0 || id === 1); return 100+id; }
|  77|  77| });
|  78|  78| 
|  79|  79| 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
|  77|  77| });
|  78|  78| 
|  79|  79| AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|  80|    |-	GetLosVisibility: function(ent, player) { return "visible"; },
|    |  80|+	"GetLosVisibility": function(ent, player) { return "visible"; },
|  81|  81| 	GetLosCircular: function() { return false; }
|  82|  82| });
|  83|  83| 
|    | [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
|  78|  78| 
|  79|  79| AddMock(SYSTEM_ENTITY, IID_RangeManager, {
|  80|  80| 	GetLosVisibility: function(ent, player) { return "visible"; },
|  81|    |-	GetLosCircular: function() { return false; }
|    |  81|+	"GetLosCircular": function() { return false; }
|  82|  82| });
|  83|  83| 
|  84|  84| 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
|  82|  82| });
|  83|  83| 
|  84|  84| AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|  85|    |-	GetCurrentTemplateName: function(ent) { return "example"; },
|    |  85|+	"GetCurrentTemplateName": function(ent) { return "example"; },
|  86|  86| 	GetTemplate: function(name) { return ""; }
|  87|  87| });
|  88|  88| 
|    | [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
|  83|  83| 
|  84|  84| AddMock(SYSTEM_ENTITY, IID_TemplateManager, {
|  85|  85| 	GetCurrentTemplateName: function(ent) { return "example"; },
|  86|    |-	GetTemplate: function(name) { return ""; }
|    |  86|+	"GetTemplate": function(name) { return ""; }
|  87|  87| });
|  88|  88| 
|  89|  89| 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
|  87|  87| });
|  88|  88| 
|  89|  89| AddMock(SYSTEM_ENTITY, IID_Timer, {
|  90|    |-	GetTime: function() { return 0; },
|    |  90|+	"GetTime": function() { return 0; },
|  91|  91| 	SetTimeout: function(ent, iid, funcname, time, data) { return 0; }
|  92|  92| });
|  93|  93| 
|    | [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
|  88|  88| 
|  89|  89| AddMock(SYSTEM_ENTITY, IID_Timer, {
|  90|  90| 	GetTime: function() { return 0; },
|  91|    |-	SetTimeout: function(ent, iid, funcname, time, data) { return 0; }
|    |  91|+	"SetTimeout": function(ent, iid, funcname, time, data) { return 0; }
|  92|  92| });
|  93|  93| 
|  94|  94| 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
|  92|  92| });
|  93|  93| 
|  94|  94| AddMock(100, IID_Player, {
|  95|    |-	GetName: function() { return "Player 1"; },
|    |  95|+	"GetName": function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|  97| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  98|  98| 	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
|  93|  93| 
|  94|  94| AddMock(100, IID_Player, {
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|    |-	GetCiv: function() { return "gaia"; },
|    |  96|+	"GetCiv": function() { return "gaia"; },
|  97|  97| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	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
|  94|  94| AddMock(100, IID_Player, {
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  97|+	"GetColor": function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	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
|  94|  94| AddMock(100, IID_Player, {
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  97|+	GetColor: function() { return { "r": 1, g: 1, b: 1, a: 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	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
|  94|  94| AddMock(100, IID_Player, {
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  97|+	GetColor: function() { return { r: 1, "g": 1, b: 1, a: 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	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
|  94|  94| AddMock(100, IID_Player, {
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  97|+	GetColor: function() { return { r: 1, g: 1, "b": 1, a: 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	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
|  94|  94| AddMock(100, IID_Player, {
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  97|+	GetColor: function() { return { r: 1, g: 1, b: 1, "a": 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	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
|  94|  94| AddMock(100, IID_Player, {
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|    |-	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|    |  97|+	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1 }; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	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
|  95|  95| 	GetName: function() { return "Player 1"; },
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|  97| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  98|    |-	CanControlAllUnits: function() { return false; },
|    |  98|+	"CanControlAllUnits": function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	GetPopulationLimit: function() { return 20; },
| 101| 101| 	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
|  96|  96| 	GetCiv: function() { return "gaia"; },
|  97|  97| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|    |-	GetPopulationCount: function() { return 10; },
|    |  99|+	"GetPopulationCount": function() { return 10; },
| 100| 100| 	GetPopulationLimit: function() { return 20; },
| 101| 101| 	GetMaxPopulation: function() { return 200; },
| 102| 102| 	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
|  97|  97| 	GetColor: function() { return { r: 1, g: 1, b: 1, a: 1}; },
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100|    |-	GetPopulationLimit: function() { return 20; },
|    | 100|+	"GetPopulationLimit": function() { return 20; },
| 101| 101| 	GetMaxPopulation: function() { return 200; },
| 102| 102| 	GetResourceCounts: function() { return { food: 100 }; },
| 103| 103| 	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
|  98|  98| 	CanControlAllUnits: function() { return false; },
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	GetPopulationLimit: function() { return 20; },
| 101|    |-	GetMaxPopulation: function() { return 200; },
|    | 101|+	"GetMaxPopulation": function() { return 200; },
| 102| 102| 	GetResourceCounts: function() { return { food: 100 }; },
| 103| 103| 	GetPanelEntities: function() { return []; },
| 104| 104| 	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
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	GetPopulationLimit: function() { return 20; },
| 101| 101| 	GetMaxPopulation: function() { return 200; },
| 102|    |-	GetResourceCounts: function() { return { food: 100 }; },
|    | 102|+	"GetResourceCounts": function() { return { food: 100 }; },
| 103| 103| 	GetPanelEntities: function() { return []; },
| 104| 104| 	IsTrainingBlocked: function() { return false; },
| 105| 105| 	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
|  99|  99| 	GetPopulationCount: function() { return 10; },
| 100| 100| 	GetPopulationLimit: function() { return 20; },
| 101| 101| 	GetMaxPopulation: function() { return 200; },
| 102|    |-	GetResourceCounts: function() { return { food: 100 }; },
|    | 102|+	GetResourceCounts: function() { return { "food": 100 }; },
| 103| 103| 	GetPanelEntities: function() { return []; },
| 104| 104| 	IsTrainingBlocked: function() { return false; },
| 105| 105| 	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
| 100| 100| 	GetPopulationLimit: function() { return 20; },
| 101| 101| 	GetMaxPopulation: function() { return 200; },
| 102| 102| 	GetResourceCounts: function() { return { food: 100 }; },
| 103|    |-	GetPanelEntities: function() { return []; },
|    | 103|+	"GetPanelEntities": function() { return []; },
| 104| 104| 	IsTrainingBlocked: function() { return false; },
| 105| 105| 	GetState: function() { return "active"; },
| 106| 106| 	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
| 101| 101| 	GetMaxPopulation: function() { return 200; },
| 102| 102| 	GetResourceCounts: function() { return { food: 100 }; },
| 103| 103| 	GetPanelEntities: function() { return []; },
| 104|    |-	IsTrainingBlocked: function() { return false; },
|    | 104|+	"IsTrainingBlocked": function() { return false; },
| 105| 105| 	GetState: function() { return "active"; },
| 106| 106| 	GetTeam: function() { return -1; },
| 107| 107| 	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
| 102| 102| 	GetResourceCounts: function() { return { food: 100 }; },
| 103| 103| 	GetPanelEntities: function() { return []; },
| 104| 104| 	IsTrainingBlocked: function() { return false; },
| 105|    |-	GetState: function() { return "active"; },
|    | 105|+	"GetState": function() { return "active"; },
| 106| 106| 	GetTeam: function() { return -1; },
| 107| 107| 	GetLockTeams: function() { return false; },
| 108| 108| 	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
| 103| 103| 	GetPanelEntities: function() { return []; },
| 104| 104| 	IsTrainingBlocked: function() { return false; },
| 105| 105| 	GetState: function() { return "active"; },
| 106|    |-	GetTeam: function() { return -1; },
|    | 106|+	"GetTeam": function() { return -1; },
| 107| 107| 	GetLockTeams: function() { return false; },
| 108| 108| 	GetCheatsEnabled: function() { return false; },
| 109| 109| 	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
| 104| 104| 	IsTrainingBlocked: function() { return false; },
| 105| 105| 	GetState: function() { return "active"; },
| 106| 106| 	GetTeam: function() { return -1; },
| 107|    |-	GetLockTeams: function() { return false; },
|    | 107|+	"GetLockTeams": function() { return false; },
| 108| 108| 	GetCheatsEnabled: function() { return false; },
| 109| 109| 	GetDiplomacy: function() { return [-1, 1]; },
| 110| 110| 	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
| 105| 105| 	GetState: function() { return "active"; },
| 106| 106| 	GetTeam: function() { return -1; },
| 107| 107| 	GetLockTeams: function() { return false; },
| 108|    |-	GetCheatsEnabled: function() { return false; },
|    | 108|+	"GetCheatsEnabled": function() { return false; },
| 109| 109| 	GetDiplomacy: function() { return [-1, 1]; },
| 110| 110| 	IsAlly: function() { return false; },
| 111| 111| 	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
| 106| 106| 	GetTeam: function() { return -1; },
| 107| 107| 	GetLockTeams: function() { return false; },
| 108| 108| 	GetCheatsEnabled: function() { return false; },
| 109|    |-	GetDiplomacy: function() { return [-1, 1]; },
|    | 109|+	"GetDiplomacy": function() { return [-1, 1]; },
| 110| 110| 	IsAlly: function() { return false; },
| 111| 111| 	IsMutualAlly: function() { return false; },
| 112| 112| 	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
| 107| 107| 	GetLockTeams: function() { return false; },
| 108| 108| 	GetCheatsEnabled: function() { return false; },
| 109| 109| 	GetDiplomacy: function() { return [-1, 1]; },
| 110|    |-	IsAlly: function() { return false; },
|    | 110|+	"IsAlly": function() { return false; },
| 111| 111| 	IsMutualAlly: function() { return false; },
| 112| 112| 	IsNeutral: function() { return false; },
| 113| 113| 	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
| 108| 108| 	GetCheatsEnabled: function() { return false; },
| 109| 109| 	GetDiplomacy: function() { return [-1, 1]; },
| 110| 110| 	IsAlly: function() { return false; },
| 111|    |-	IsMutualAlly: function() { return false; },
|    | 111|+	"IsMutualAlly": function() { return false; },
| 112| 112| 	IsNeutral: function() { return false; },
| 113| 113| 	IsEnemy: function() { return true; },
| 114| 114| 	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
| 109| 109| 	GetDiplomacy: function() { return [-1, 1]; },
| 110| 110| 	IsAlly: function() { return false; },
| 111| 111| 	IsMutualAlly: function() { return false; },
| 112|    |-	IsNeutral: function() { return false; },
|    | 112|+	"IsNeutral": function() { return false; },
| 113| 113| 	IsEnemy: function() { return true; },
| 114| 114| 	GetDisabledTemplates: function() { return {}; },
| 115| 115| 	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
| 110| 110| 	IsAlly: function() { return false; },
| 111| 111| 	IsMutualAlly: function() { return false; },
| 112| 112| 	IsNeutral: function() { return false; },
| 113|    |-	IsEnemy: function() { return true; },
|    | 113|+	"IsEnemy": function() { return true; },
| 114| 114| 	GetDisabledTemplates: function() { return {}; },
| 115| 115| 	GetDisabledTechnologies: function() { return {}; },
| 116| 116| 	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
| 111| 111| 	IsMutualAlly: function() { return false; },
| 112| 112| 	IsNeutral: function() { return false; },
| 113| 113| 	IsEnemy: function() { return true; },
| 114|    |-	GetDisabledTemplates: function() { return {}; },
|    | 114|+	"GetDisabledTemplates": function() { return {}; },
| 115| 115| 	GetDisabledTechnologies: function() { return {}; },
| 116| 116| 	GetSpyCostMultiplier: function() { return 1; },
| 117| 117| 	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
| 112| 112| 	IsNeutral: function() { return false; },
| 113| 113| 	IsEnemy: function() { return true; },
| 114| 114| 	GetDisabledTemplates: function() { return {}; },
| 115|    |-	GetDisabledTechnologies: function() { return {}; },
|    | 115|+	"GetDisabledTechnologies": function() { return {}; },
| 116| 116| 	GetSpyCostMultiplier: function() { return 1; },
| 117| 117| 	HasSharedDropsites: function() { return false; },
| 118| 118| 	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
| 113| 113| 	IsEnemy: function() { return true; },
| 114| 114| 	GetDisabledTemplates: function() { return {}; },
| 115| 115| 	GetDisabledTechnologies: function() { return {}; },
| 116|    |-	GetSpyCostMultiplier: function() { return 1; },
|    | 116|+	"GetSpyCostMultiplier": function() { return 1; },
| 117| 117| 	HasSharedDropsites: function() { return false; },
| 118| 118| 	HasSharedLos: function() { return false; }
| 119| 119| });
|    | [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
| 114| 114| 	GetDisabledTemplates: function() { return {}; },
| 115| 115| 	GetDisabledTechnologies: function() { return {}; },
| 116| 116| 	GetSpyCostMultiplier: function() { return 1; },
| 117|    |-	HasSharedDropsites: function() { return false; },
|    | 117|+	"HasSharedDropsites": function() { return false; },
| 118| 118| 	HasSharedLos: function() { return false; }
| 119| 119| });
| 120| 120| 
|    | [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
| 115| 115| 	GetDisabledTechnologies: function() { return {}; },
| 116| 116| 	GetSpyCostMultiplier: function() { return 1; },
| 117| 117| 	HasSharedDropsites: function() { return false; },
| 118|    |-	HasSharedLos: function() { return false; }
|    | 118|+	"HasSharedLos": function() { return false; }
| 119| 119| });
| 120| 120| 
| 121| 121| 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
| 119| 119| });
| 120| 120| 
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122|    |-	GetLimits: function() { return {"Foo": 10}; },
|    | 122|+	"GetLimits": function() { return {"Foo": 10}; },
| 123| 123| 	GetCounts: function() { return {"Foo": 5}; },
| 124| 124| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 125| 125| });
|    | [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| });
| 120| 120| 
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122|    |-	GetLimits: function() { return {"Foo": 10}; },
|    | 122|+	GetLimits: function() { return { "Foo": 10}; },
| 123| 123| 	GetCounts: function() { return {"Foo": 5}; },
| 124| 124| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 125| 125| });
|    | [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| });
| 120| 120| 
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122|    |-	GetLimits: function() { return {"Foo": 10}; },
|    | 122|+	GetLimits: function() { return {"Foo": 10 }; },
| 123| 123| 	GetCounts: function() { return {"Foo": 5}; },
| 124| 124| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 125| 125| });
|    | [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
| 120| 120| 
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122| 122| 	GetLimits: function() { return {"Foo": 10}; },
| 123|    |-	GetCounts: function() { return {"Foo": 5}; },
|    | 123|+	"GetCounts": function() { return {"Foo": 5}; },
| 124| 124| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 125| 125| });
| 126| 126| 
|    | [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
| 120| 120| 
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122| 122| 	GetLimits: function() { return {"Foo": 10}; },
| 123|    |-	GetCounts: function() { return {"Foo": 5}; },
|    | 123|+	GetCounts: function() { return { "Foo": 5}; },
| 124| 124| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 125| 125| });
| 126| 126| 
|    | [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
| 120| 120| 
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122| 122| 	GetLimits: function() { return {"Foo": 10}; },
| 123|    |-	GetCounts: function() { return {"Foo": 5}; },
|    | 123|+	GetCounts: function() { return {"Foo": 5 }; },
| 124| 124| 	GetLimitChangers: function() {return {"Foo": {}}; }
| 125| 125| });
| 126| 126| 
|    | [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
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122| 122| 	GetLimits: function() { return {"Foo": 10}; },
| 123| 123| 	GetCounts: function() { return {"Foo": 5}; },
| 124|    |-	GetLimitChangers: function() {return {"Foo": {}}; }
|    | 124|+	"GetLimitChangers": function() {return {"Foo": {}}; }
| 125| 125| });
| 126| 126| 
| 127| 127| 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
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122| 122| 	GetLimits: function() { return {"Foo": 10}; },
| 123| 123| 	GetCounts: function() { return {"Foo": 5}; },
| 124|    |-	GetLimitChangers: function() {return {"Foo": {}}; }
|    | 124|+	GetLimitChangers: function() {return { "Foo": {}}; }
| 125| 125| });
| 126| 126| 
| 127| 127| 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
| 121| 121| AddMock(100, IID_EntityLimits, {
| 122| 122| 	GetLimits: function() { return {"Foo": 10}; },
| 123| 123| 	GetCounts: function() { return {"Foo": 5}; },
| 124|    |-	GetLimitChangers: function() {return {"Foo": {}}; }
|    | 124|+	GetLimitChangers: function() {return {"Foo": {} }; }
| 125| 125| });
| 126| 126| 
| 127| 127| 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
| 134| 134| });
| 135| 135| 
| 136| 136| AddMock(100, IID_StatisticsTracker, {
| 137|    |-	GetBasicStatistics: function() {
|    | 137|+	"GetBasicStatistics": function() {
| 138| 138| 		return {
| 139| 139| 			"resourcesGathered": {
| 140| 140| 				"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
| 146| 146| 			"percentMapExplored": 10
| 147| 147| 		};
| 148| 148| 	},
| 149|    |-	GetSequences: function() {
|    | 149|+	"GetSequences": function() {
| 150| 150| 		return {
| 151| 151| 			"unitsTrained": [0, 10],
| 152| 152| 			"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
| 171| 171| 			"teamPeakPercentOfMapControlled": [0, 10]
| 172| 172| 		};
| 173| 173| 	},
| 174|    |-	IncreaseTrainedUnitsCounter: function() { return 1; },
|    | 174|+	"IncreaseTrainedUnitsCounter": function() { return 1; },
| 175| 175| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 176| 176| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 177| 177| });
|    | [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
| 172| 172| 		};
| 173| 173| 	},
| 174| 174| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 175|    |-	IncreaseConstructedBuildingsCounter: function() { return 1; },
|    | 175|+	"IncreaseConstructedBuildingsCounter": function() { return 1; },
| 176| 176| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 177| 177| });
| 178| 178| 
|    | [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
| 173| 173| 	},
| 174| 174| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 175| 175| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 176|    |-	IncreaseBuiltCivCentresCounter: function() { return 1; }
|    | 176|+	"IncreaseBuiltCivCentresCounter": function() { return 1; }
| 177| 177| });
| 178| 178| 
| 179| 179| 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
| 177| 177| });
| 178| 178| 
| 179| 179| AddMock(101, IID_Player, {
| 180|    |-	GetName: function() { return "Player 2"; },
|    | 180|+	"GetName": function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182| 182| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 183| 183| 	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
| 178| 178| 
| 179| 179| AddMock(101, IID_Player, {
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181|    |-	GetCiv: function() { return "mace"; },
|    | 181|+	"GetCiv": function() { return "mace"; },
| 182| 182| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	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
| 179| 179| AddMock(101, IID_Player, {
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 182|+	"GetColor": function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	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
| 179| 179| AddMock(101, IID_Player, {
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 182|+	GetColor: function() { return { "r": 1, g: 0, b: 0, a: 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	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
| 179| 179| AddMock(101, IID_Player, {
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 182|+	GetColor: function() { return { r: 1, "g": 0, b: 0, a: 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	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
| 179| 179| AddMock(101, IID_Player, {
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 182|+	GetColor: function() { return { r: 1, g: 0, "b": 0, a: 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	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
| 179| 179| AddMock(101, IID_Player, {
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 182|+	GetColor: function() { return { r: 1, g: 0, b: 0, "a": 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	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
| 179| 179| AddMock(101, IID_Player, {
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182|    |-	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
|    | 182|+	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1 }; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	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
| 180| 180| 	GetName: function() { return "Player 2"; },
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182| 182| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 183|    |-	CanControlAllUnits: function() { return true; },
|    | 183|+	"CanControlAllUnits": function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	GetPopulationLimit: function() { return 30; },
| 186| 186| 	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
| 181| 181| 	GetCiv: function() { return "mace"; },
| 182| 182| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184|    |-	GetPopulationCount: function() { return 40; },
|    | 184|+	"GetPopulationCount": function() { return 40; },
| 185| 185| 	GetPopulationLimit: function() { return 30; },
| 186| 186| 	GetMaxPopulation: function() { return 300; },
| 187| 187| 	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
| 182| 182| 	GetColor: function() { return { r: 1, g: 0, b: 0, a: 1}; },
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185|    |-	GetPopulationLimit: function() { return 30; },
|    | 185|+	"GetPopulationLimit": function() { return 30; },
| 186| 186| 	GetMaxPopulation: function() { return 300; },
| 187| 187| 	GetResourceCounts: function() { return { food: 200 }; },
| 188| 188| 	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
| 183| 183| 	CanControlAllUnits: function() { return true; },
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	GetPopulationLimit: function() { return 30; },
| 186|    |-	GetMaxPopulation: function() { return 300; },
|    | 186|+	"GetMaxPopulation": function() { return 300; },
| 187| 187| 	GetResourceCounts: function() { return { food: 200 }; },
| 188| 188| 	GetPanelEntities: function() { return []; },
| 189| 189| 	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
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	GetPopulationLimit: function() { return 30; },
| 186| 186| 	GetMaxPopulation: function() { return 300; },
| 187|    |-	GetResourceCounts: function() { return { food: 200 }; },
|    | 187|+	"GetResourceCounts": function() { return { food: 200 }; },
| 188| 188| 	GetPanelEntities: function() { return []; },
| 189| 189| 	IsTrainingBlocked: function() { return false; },
| 190| 190| 	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
| 184| 184| 	GetPopulationCount: function() { return 40; },
| 185| 185| 	GetPopulationLimit: function() { return 30; },
| 186| 186| 	GetMaxPopulation: function() { return 300; },
| 187|    |-	GetResourceCounts: function() { return { food: 200 }; },
|    | 187|+	GetResourceCounts: function() { return { "food": 200 }; },
| 188| 188| 	GetPanelEntities: function() { return []; },
| 189| 189| 	IsTrainingBlocked: function() { return false; },
| 190| 190| 	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
| 185| 185| 	GetPopulationLimit: function() { return 30; },
| 186| 186| 	GetMaxPopulation: function() { return 300; },
| 187| 187| 	GetResourceCounts: function() { return { food: 200 }; },
| 188|    |-	GetPanelEntities: function() { return []; },
|    | 188|+	"GetPanelEntities": function() { return []; },
| 189| 189| 	IsTrainingBlocked: function() { return false; },
| 190| 190| 	GetState: function() { return "active"; },
| 191| 191| 	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
| 186| 186| 	GetMaxPopulation: function() { return 300; },
| 187| 187| 	GetResourceCounts: function() { return { food: 200 }; },
| 188| 188| 	GetPanelEntities: function() { return []; },
| 189|    |-	IsTrainingBlocked: function() { return false; },
|    | 189|+	"IsTrainingBlocked": function() { return false; },
| 190| 190| 	GetState: function() { return "active"; },
| 191| 191| 	GetTeam: function() { return -1; },
| 192| 192| 	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
| 187| 187| 	GetResourceCounts: function() { return { food: 200 }; },
| 188| 188| 	GetPanelEntities: function() { return []; },
| 189| 189| 	IsTrainingBlocked: function() { return false; },
| 190|    |-	GetState: function() { return "active"; },
|    | 190|+	"GetState": function() { return "active"; },
| 191| 191| 	GetTeam: function() { return -1; },
| 192| 192| 	GetLockTeams: function() {return false; },
| 193| 193| 	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
| 188| 188| 	GetPanelEntities: function() { return []; },
| 189| 189| 	IsTrainingBlocked: function() { return false; },
| 190| 190| 	GetState: function() { return "active"; },
| 191|    |-	GetTeam: function() { return -1; },
|    | 191|+	"GetTeam": function() { return -1; },
| 192| 192| 	GetLockTeams: function() {return false; },
| 193| 193| 	GetCheatsEnabled: function() { return false; },
| 194| 194| 	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
| 189| 189| 	IsTrainingBlocked: function() { return false; },
| 190| 190| 	GetState: function() { return "active"; },
| 191| 191| 	GetTeam: function() { return -1; },
| 192|    |-	GetLockTeams: function() {return false; },
|    | 192|+	"GetLockTeams": function() {return false; },
| 193| 193| 	GetCheatsEnabled: function() { return false; },
| 194| 194| 	GetDiplomacy: function() { return [-1, 1]; },
| 195| 195| 	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
| 190| 190| 	GetState: function() { return "active"; },
| 191| 191| 	GetTeam: function() { return -1; },
| 192| 192| 	GetLockTeams: function() {return false; },
| 193|    |-	GetCheatsEnabled: function() { return false; },
|    | 193|+	"GetCheatsEnabled": function() { return false; },
| 194| 194| 	GetDiplomacy: function() { return [-1, 1]; },
| 195| 195| 	IsAlly: function() { return true; },
| 196| 196| 	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
| 191| 191| 	GetTeam: function() { return -1; },
| 192| 192| 	GetLockTeams: function() {return false; },
| 193| 193| 	GetCheatsEnabled: function() { return false; },
| 194|    |-	GetDiplomacy: function() { return [-1, 1]; },
|    | 194|+	"GetDiplomacy": function() { return [-1, 1]; },
| 195| 195| 	IsAlly: function() { return true; },
| 196| 196| 	IsMutualAlly: function() {return false; },
| 197| 197| 	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
| 192| 192| 	GetLockTeams: function() {return false; },
| 193| 193| 	GetCheatsEnabled: function() { return false; },
| 194| 194| 	GetDiplomacy: function() { return [-1, 1]; },
| 195|    |-	IsAlly: function() { return true; },
|    | 195|+	"IsAlly": function() { return true; },
| 196| 196| 	IsMutualAlly: function() {return false; },
| 197| 197| 	IsNeutral: function() { return false; },
| 198| 198| 	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
| 193| 193| 	GetCheatsEnabled: function() { return false; },
| 194| 194| 	GetDiplomacy: function() { return [-1, 1]; },
| 195| 195| 	IsAlly: function() { return true; },
| 196|    |-	IsMutualAlly: function() {return false; },
|    | 196|+	"IsMutualAlly": function() {return false; },
| 197| 197| 	IsNeutral: function() { return false; },
| 198| 198| 	IsEnemy: function() { return false; },
| 199| 199| 	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
| 194| 194| 	GetDiplomacy: function() { return [-1, 1]; },
| 195| 195| 	IsAlly: function() { return true; },
| 196| 196| 	IsMutualAlly: function() {return false; },
| 197|    |-	IsNeutral: function() { return false; },
|    | 197|+	"IsNeutral": function() { return false; },
| 198| 198| 	IsEnemy: function() { return false; },
| 199| 199| 	GetDisabledTemplates: function() { return {}; },
| 200| 200| 	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
| 195| 195| 	IsAlly: function() { return true; },
| 196| 196| 	IsMutualAlly: function() {return false; },
| 197| 197| 	IsNeutral: function() { return false; },
| 198|    |-	IsEnemy: function() { return false; },
|    | 198|+	"IsEnemy": function() { return false; },
| 199| 199| 	GetDisabledTemplates: function() { return {}; },
| 200| 200| 	GetDisabledTechnologies: function() { return {}; },
| 201| 201| 	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
| 196| 196| 	IsMutualAlly: function() {return false; },
| 197| 197| 	IsNeutral: function() { return false; },
| 198| 198| 	IsEnemy: function() { return false; },
| 199|    |-	GetDisabledTemplates: function() { return {}; },
|    | 199|+	"GetDisabledTemplates": function() { return {}; },
| 200| 200| 	GetDisabledTechnologies: function() { return {}; },
| 201| 201| 	GetSpyCostMultiplier: function() { return 1; },
| 202| 202| 	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
| 197| 197| 	IsNeutral: function() { return false; },
| 198| 198| 	IsEnemy: function() { return false; },
| 199| 199| 	GetDisabledTemplates: function() { return {}; },
| 200|    |-	GetDisabledTechnologies: function() { return {}; },
|    | 200|+	"GetDisabledTechnologies": function() { return {}; },
| 201| 201| 	GetSpyCostMultiplier: function() { return 1; },
| 202| 202| 	HasSharedDropsites: function() { return false; },
| 203| 203| 	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
| 198| 198| 	IsEnemy: function() { return false; },
| 199| 199| 	GetDisabledTemplates: function() { return {}; },
| 200| 200| 	GetDisabledTechnologies: function() { return {}; },
| 201|    |-	GetSpyCostMultiplier: function() { return 1; },
|    | 201|+	"GetSpyCostMultiplier": function() { return 1; },
| 202| 202| 	HasSharedDropsites: function() { return false; },
| 203| 203| 	HasSharedLos: function() { return false; }
| 204| 204| });
|    | [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
| 199| 199| 	GetDisabledTemplates: function() { return {}; },
| 200| 200| 	GetDisabledTechnologies: function() { return {}; },
| 201| 201| 	GetSpyCostMultiplier: function() { return 1; },
| 202|    |-	HasSharedDropsites: function() { return false; },
|    | 202|+	"HasSharedDropsites": function() { return false; },
| 203| 203| 	HasSharedLos: function() { return false; }
| 204| 204| });
| 205| 205| 
|    | [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
| 200| 200| 	GetDisabledTechnologies: function() { return {}; },
| 201| 201| 	GetSpyCostMultiplier: function() { return 1; },
| 202| 202| 	HasSharedDropsites: function() { return false; },
| 203|    |-	HasSharedLos: function() { return false; }
|    | 203|+	"HasSharedLos": function() { return false; }
| 204| 204| });
| 205| 205| 
| 206| 206| 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
| 204| 204| });
| 205| 205| 
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207|    |-	GetLimits: function() { return {"Bar": 20}; },
|    | 207|+	"GetLimits": function() { return {"Bar": 20}; },
| 208| 208| 	GetCounts: function() { return {"Bar": 0}; },
| 209| 209| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 210| 210| });
|    | [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| });
| 205| 205| 
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207|    |-	GetLimits: function() { return {"Bar": 20}; },
|    | 207|+	GetLimits: function() { return { "Bar": 20}; },
| 208| 208| 	GetCounts: function() { return {"Bar": 0}; },
| 209| 209| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 210| 210| });
|    | [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| });
| 205| 205| 
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207|    |-	GetLimits: function() { return {"Bar": 20}; },
|    | 207|+	GetLimits: function() { return {"Bar": 20 }; },
| 208| 208| 	GetCounts: function() { return {"Bar": 0}; },
| 209| 209| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 210| 210| });
|    | [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
| 205| 205| 
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207| 207| 	GetLimits: function() { return {"Bar": 20}; },
| 208|    |-	GetCounts: function() { return {"Bar": 0}; },
|    | 208|+	"GetCounts": function() { return {"Bar": 0}; },
| 209| 209| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 210| 210| });
| 211| 211| 
|    | [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
| 205| 205| 
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207| 207| 	GetLimits: function() { return {"Bar": 20}; },
| 208|    |-	GetCounts: function() { return {"Bar": 0}; },
|    | 208|+	GetCounts: function() { return { "Bar": 0}; },
| 209| 209| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 210| 210| });
| 211| 211| 
|    | [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
| 205| 205| 
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207| 207| 	GetLimits: function() { return {"Bar": 20}; },
| 208|    |-	GetCounts: function() { return {"Bar": 0}; },
|    | 208|+	GetCounts: function() { return {"Bar": 0 }; },
| 209| 209| 	GetLimitChangers: function() {return {"Bar": {}}; }
| 210| 210| });
| 211| 211| 
|    | [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
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207| 207| 	GetLimits: function() { return {"Bar": 20}; },
| 208| 208| 	GetCounts: function() { return {"Bar": 0}; },
| 209|    |-	GetLimitChangers: function() {return {"Bar": {}}; }
|    | 209|+	"GetLimitChangers": function() {return {"Bar": {}}; }
| 210| 210| });
| 211| 211| 
| 212| 212| 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
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207| 207| 	GetLimits: function() { return {"Bar": 20}; },
| 208| 208| 	GetCounts: function() { return {"Bar": 0}; },
| 209|    |-	GetLimitChangers: function() {return {"Bar": {}}; }
|    | 209|+	GetLimitChangers: function() {return { "Bar": {}}; }
| 210| 210| });
| 211| 211| 
| 212| 212| 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
| 206| 206| AddMock(101, IID_EntityLimits, {
| 207| 207| 	GetLimits: function() { return {"Bar": 20}; },
| 208| 208| 	GetCounts: function() { return {"Bar": 0}; },
| 209|    |-	GetLimitChangers: function() {return {"Bar": {}}; }
|    | 209|+	GetLimitChangers: function() {return {"Bar": {} }; }
| 210| 210| });
| 211| 211| 
| 212| 212| 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
| 219| 219| });
| 220| 220| 
| 221| 221| AddMock(101, IID_StatisticsTracker, {
| 222|    |-	GetBasicStatistics: function() {
|    | 222|+	"GetBasicStatistics": function() {
| 223| 223| 		return {
| 224| 224| 			"resourcesGathered": {
| 225| 225| 				"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
| 231| 231| 			"percentMapExplored": 10
| 232| 232| 		};
| 233| 233| 	},
| 234|    |-	GetSequences: function() {
|    | 234|+	"GetSequences": function() {
| 235| 235| 		return {
| 236| 236| 			"unitsTrained": [0, 10],
| 237| 237| 			"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
| 256| 256| 			"teamPeakPercentOfMapControlled": [0, 10]
| 257| 257| 		};
| 258| 258| 	},
| 259|    |-	IncreaseTrainedUnitsCounter: function() { return 1; },
|    | 259|+	"IncreaseTrainedUnitsCounter": function() { return 1; },
| 260| 260| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 261| 261| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 262| 262| });
|    | [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
| 257| 257| 		};
| 258| 258| 	},
| 259| 259| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 260|    |-	IncreaseConstructedBuildingsCounter: function() { return 1; },
|    | 260|+	"IncreaseConstructedBuildingsCounter": function() { return 1; },
| 261| 261| 	IncreaseBuiltCivCentresCounter: function() { return 1; }
| 262| 262| });
| 263| 263| 
|    | [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
| 258| 258| 	},
| 259| 259| 	IncreaseTrainedUnitsCounter: function() { return 1; },
| 260| 260| 	IncreaseConstructedBuildingsCounter: function() { return 1; },
| 261|    |-	IncreaseBuiltCivCentresCounter: function() { return 1; }
|    | 261|+	"IncreaseBuiltCivCentresCounter": function() { return 1; }
| 262| 262| });
| 263| 263| 
| 264| 264| // 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
| 265| 265| //	because uneval preserves property order. So make sure this object
| 266| 266| //	matches the ordering in GuiInterface.
| 267| 267| TS_ASSERT_UNEVAL_EQUALS(cmp.GetSimulationState(), {
| 268|    |-	players: [
|    | 268|+	"players": [
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			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
| 267| 267| TS_ASSERT_UNEVAL_EQUALS(cmp.GetSimulationState(), {
| 268| 268| 	players: [
| 269| 269| 		{
| 270|    |-			name: "Player 1",
|    | 270|+			"name": "Player 1",
| 271| 271| 			civ: "gaia",
| 272| 272| 			color: { r:1, g:1, b:1, a:1 },
| 273| 273| 			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
| 268| 268| 	players: [
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271|    |-			civ: "gaia",
|    | 271|+			"civ": "gaia",
| 272| 272| 			color: { r:1, g:1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			"color": { r:1, g:1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { "r":1, g:1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { r: 1, g:1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { r:1, "g":1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { r:1, g: 1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { r:1, g:1, "b":1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { r:1, g:1, b: 1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { r:1, g:1, b:1, "a":1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 269| 269| 		{
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272|    |-			color: { r:1, g:1, b:1, a:1 },
|    | 272|+			color: { r:1, g:1, b:1, a: 1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			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
| 270| 270| 			name: "Player 1",
| 271| 271| 			civ: "gaia",
| 272| 272| 			color: { r:1, g:1, b:1, a:1 },
| 273|    |-			controlsAll: false,
|    | 273|+			"controlsAll": false,
| 274| 274| 			popCount: 10,
| 275| 275| 			popLimit: 20,
| 276| 276| 			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
| 271| 271| 			civ: "gaia",
| 272| 272| 			color: { r:1, g:1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274|    |-			popCount: 10,
|    | 274|+			"popCount": 10,
| 275| 275| 			popLimit: 20,
| 276| 276| 			popMax: 200,
| 277| 277| 			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
| 272| 272| 			color: { r:1, g:1, b:1, a:1 },
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275|    |-			popLimit: 20,
|    | 275|+			"popLimit": 20,
| 276| 276| 			popMax: 200,
| 277| 277| 			panelEntities: [],
| 278| 278| 			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
| 273| 273| 			controlsAll: false,
| 274| 274| 			popCount: 10,
| 275| 275| 			popLimit: 20,
| 276|    |-			popMax: 200,
|    | 276|+			"popMax": 200,
| 277| 277| 			panelEntities: [],
| 278| 278| 			resourceCounts: { food: 100 },
| 279| 279| 			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
| 274| 274| 			popCount: 10,
| 275| 275| 			popLimit: 20,
| 276| 276| 			popMax: 200,
| 277|    |-			panelEntities: [],
|    | 277|+			"panelEntities": [],
| 278| 278| 			resourceCounts: { food: 100 },
| 279| 279| 			trainingBlocked: false,
| 280| 280| 			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
| 275| 275| 			popLimit: 20,
| 276| 276| 			popMax: 200,
| 277| 277| 			panelEntities: [],
| 278|    |-			resourceCounts: { food: 100 },
|    | 278|+			"resourceCounts": { food: 100 },
| 279| 279| 			trainingBlocked: false,
| 280| 280| 			state: "active",
| 281| 281| 			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
| 275| 275| 			popLimit: 20,
| 276| 276| 			popMax: 200,
| 277| 277| 			panelEntities: [],
| 278|    |-			resourceCounts: { food: 100 },
|    | 278|+			resourceCounts: { "food": 100 },
| 279| 279| 			trainingBlocked: false,
| 280| 280| 			state: "active",
| 281| 281| 			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
| 276| 276| 			popMax: 200,
| 277| 277| 			panelEntities: [],
| 278| 278| 			resourceCounts: { food: 100 },
| 279|    |-			trainingBlocked: false,
|    | 279|+			"trainingBlocked": false,
| 280| 280| 			state: "active",
| 281| 281| 			team: -1,
| 282| 282| 			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
| 277| 277| 			panelEntities: [],
| 278| 278| 			resourceCounts: { food: 100 },
| 279| 279| 			trainingBlocked: false,
| 280|    |-			state: "active",
|    | 280|+			"state": "active",
| 281| 281| 			team: -1,
| 282| 282| 			teamsLocked: false,
| 283| 283| 			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
| 278| 278| 			resourceCounts: { food: 100 },
| 279| 279| 			trainingBlocked: false,
| 280| 280| 			state: "active",
| 281|    |-			team: -1,
|    | 281|+			"team": -1,
| 282| 282| 			teamsLocked: false,
| 283| 283| 			cheatsEnabled: false,
| 284| 284| 			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
| 279| 279| 			trainingBlocked: false,
| 280| 280| 			state: "active",
| 281| 281| 			team: -1,
| 282|    |-			teamsLocked: false,
|    | 282|+			"teamsLocked": false,
| 283| 283| 			cheatsEnabled: false,
| 284| 284| 			disabledTemplates: {},
| 285| 285| 			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
| 280| 280| 			state: "active",
| 281| 281| 			team: -1,
| 282| 282| 			teamsLocked: false,
| 283|    |-			cheatsEnabled: false,
|    | 283|+			"cheatsEnabled": false,
| 284| 284| 			disabledTemplates: {},
| 285| 285| 			disabledTechnologies: {},
| 286| 286| 			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
| 281| 281| 			team: -1,
| 282| 282| 			teamsLocked: false,
| 283| 283| 			cheatsEnabled: false,
| 284|    |-			disabledTemplates: {},
|    | 284|+			"disabledTemplates": {},
| 285| 285| 			disabledTechnologies: {},
| 286| 286| 			hasSharedDropsites: false,
| 287| 287| 			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
| 282| 282| 			teamsLocked: false,
| 283| 283| 			cheatsEnabled: false,
| 284| 284| 			disabledTemplates: {},
| 285|    |-			disabledTechnologies: {},
|    | 285|+			"disabledTechnologies": {},
| 286| 286| 			hasSharedDropsites: false,
| 287| 287| 			hasSharedLos: false,
| 288| 288| 			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
| 283| 283| 			cheatsEnabled: false,
| 284| 284| 			disabledTemplates: {},
| 285| 285| 			disabledTechnologies: {},
| 286|    |-			hasSharedDropsites: false,
|    | 286|+			"hasSharedDropsites": false,
| 287| 287| 			hasSharedLos: false,
| 288| 288| 			spyCostMultiplier: 1,
| 289| 289| 			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
| 284| 284| 			disabledTemplates: {},
| 285| 285| 			disabledTechnologies: {},
| 286| 286| 			hasSharedDropsites: false,
| 287|    |-			hasSharedLos: false,
|    | 287|+			"hasSharedLos": false,
| 288| 288| 			spyCostMultiplier: 1,
| 289| 289| 			phase: "village",
| 290| 290| 			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
| 285| 285| 			disabledTechnologies: {},
| 286| 286| 			hasSharedDropsites: false,
| 287| 287| 			hasSharedLos: false,
| 288|    |-			spyCostMultiplier: 1,
|    | 288|+			"spyCostMultiplier": 1,
| 289| 289| 			phase: "village",
| 290| 290| 			isAlly: [false, false],
| 291| 291| 			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
| 286| 286| 			hasSharedDropsites: false,
| 287| 287| 			hasSharedLos: false,
| 288| 288| 			spyCostMultiplier: 1,
| 289|    |-			phase: "village",
|    | 289|+			"phase": "village",
| 290| 290| 			isAlly: [false, false],
| 291| 291| 			isMutualAlly: [false, false],
| 292| 292| 			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
| 287| 287| 			hasSharedLos: false,
| 288| 288| 			spyCostMultiplier: 1,
| 289| 289| 			phase: "village",
| 290|    |-			isAlly: [false, false],
|    | 290|+			"isAlly": [false, false],
| 291| 291| 			isMutualAlly: [false, false],
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			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
| 288| 288| 			spyCostMultiplier: 1,
| 289| 289| 			phase: "village",
| 290| 290| 			isAlly: [false, false],
| 291|    |-			isMutualAlly: [false, false],
|    | 291|+			"isMutualAlly": [false, false],
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			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
| 289| 289| 			phase: "village",
| 290| 290| 			isAlly: [false, false],
| 291| 291| 			isMutualAlly: [false, false],
| 292|    |-			isNeutral: [false, false],
|    | 292|+			"isNeutral": [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295| 295| 			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
| 290| 290| 			isAlly: [false, false],
| 291| 291| 			isMutualAlly: [false, false],
| 292| 292| 			isNeutral: [false, false],
| 293|    |-			isEnemy: [true, true],
|    | 293|+			"isEnemy": [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295| 295| 			entityCounts: {"Foo": 5},
| 296| 296| 			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
| 291| 291| 			isMutualAlly: [false, false],
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294|    |-			entityLimits: {"Foo": 10},
|    | 294|+			"entityLimits": {"Foo": 10},
| 295| 295| 			entityCounts: {"Foo": 5},
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			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
| 291| 291| 			isMutualAlly: [false, false],
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294|    |-			entityLimits: {"Foo": 10},
|    | 294|+			entityLimits: { "Foo": 10},
| 295| 295| 			entityCounts: {"Foo": 5},
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			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
| 291| 291| 			isMutualAlly: [false, false],
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294|    |-			entityLimits: {"Foo": 10},
|    | 294|+			entityLimits: {"Foo": 10 },
| 295| 295| 			entityCounts: {"Foo": 5},
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			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
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295|    |-			entityCounts: {"Foo": 5},
|    | 295|+			"entityCounts": {"Foo": 5},
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			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
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295|    |-			entityCounts: {"Foo": 5},
|    | 295|+			entityCounts: { "Foo": 5},
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			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
| 292| 292| 			isNeutral: [false, false],
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295|    |-			entityCounts: {"Foo": 5},
|    | 295|+			entityCounts: {"Foo": 5 },
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			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
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295| 295| 			entityCounts: {"Foo": 5},
| 296|    |-			entityLimitChangers: {"Foo": {}},
|    | 296|+			"entityLimitChangers": {"Foo": {}},
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			researchStarted: new Set(),
| 299| 299| 			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
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295| 295| 			entityCounts: {"Foo": 5},
| 296|    |-			entityLimitChangers: {"Foo": {}},
|    | 296|+			entityLimitChangers: { "Foo": {}},
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			researchStarted: new Set(),
| 299| 299| 			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
| 293| 293| 			isEnemy: [true, true],
| 294| 294| 			entityLimits: {"Foo": 10},
| 295| 295| 			entityCounts: {"Foo": 5},
| 296|    |-			entityLimitChangers: {"Foo": {}},
|    | 296|+			entityLimitChangers: {"Foo": {} },
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			researchStarted: new Set(),
| 299| 299| 			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
| 294| 294| 			entityLimits: {"Foo": 10},
| 295| 295| 			entityCounts: {"Foo": 5},
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297|    |-			researchQueued: new Map(),
|    | 297|+			"researchQueued": new Map(),
| 298| 298| 			researchStarted: new Set(),
| 299| 299| 			researchedTechs: new Set(),
| 300| 300| 			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
| 295| 295| 			entityCounts: {"Foo": 5},
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			researchQueued: new Map(),
| 298|    |-			researchStarted: new Set(),
|    | 298|+			"researchStarted": new Set(),
| 299| 299| 			researchedTechs: new Set(),
| 300| 300| 			classCounts: {},
| 301| 301| 			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
| 296| 296| 			entityLimitChangers: {"Foo": {}},
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			researchStarted: new Set(),
| 299|    |-			researchedTechs: new Set(),
|    | 299|+			"researchedTechs": new Set(),
| 300| 300| 			classCounts: {},
| 301| 301| 			typeCountsByClass: {},
| 302| 302| 			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
| 297| 297| 			researchQueued: new Map(),
| 298| 298| 			researchStarted: new Set(),
| 299| 299| 			researchedTechs: new Set(),
| 300|    |-			classCounts: {},
|    | 300|+			"classCounts": {},
| 301| 301| 			typeCountsByClass: {},
| 302| 302| 			canBarter: false,
| 303| 303| 			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
| 298| 298| 			researchStarted: new Set(),
| 299| 299| 			researchedTechs: new Set(),
| 300| 300| 			classCounts: {},
| 301|    |-			typeCountsByClass: {},
|    | 301|+			"typeCountsByClass": {},
| 302| 302| 			canBarter: false,
| 303| 303| 			barterPrices: {
| 304| 304| 				"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
| 299| 299| 			researchedTechs: new Set(),
| 300| 300| 			classCounts: {},
| 301| 301| 			typeCountsByClass: {},
| 302|    |-			canBarter: false,
|    | 302|+			"canBarter": false,
| 303| 303| 			barterPrices: {
| 304| 304| 				"buy": { "food": 150 },
| 305| 305| 				"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
| 300| 300| 			classCounts: {},
| 301| 301| 			typeCountsByClass: {},
| 302| 302| 			canBarter: false,
| 303|    |-			barterPrices: {
|    | 303|+			"barterPrices": {
| 304| 304| 				"buy": { "food": 150 },
| 305| 305| 				"sell": { "food": 25 }
| 306| 306| 			},
|    | [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
| 304| 304| 				"buy": { "food": 150 },
| 305| 305| 				"sell": { "food": 25 }
| 306| 306| 			},
| 307|    |-			statistics: {
|    | 307|+			"statistics": {
| 308| 308| 				resourcesGathered: {
| 309| 309| 					food: 100,
| 310| 310| 					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
| 305| 305| 				"sell": { "food": 25 }
| 306| 306| 			},
| 307| 307| 			statistics: {
| 308|    |-				resourcesGathered: {
|    | 308|+				"resourcesGathered": {
| 309| 309| 					food: 100,
| 310| 310| 					wood: 0,
| 311| 311| 					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
| 306| 306| 			},
| 307| 307| 			statistics: {
| 308| 308| 				resourcesGathered: {
| 309|    |-					food: 100,
|    | 309|+					"food": 100,
| 310| 310| 					wood: 0,
| 311| 311| 					metal: 0,
| 312| 312| 					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
| 307| 307| 			statistics: {
| 308| 308| 				resourcesGathered: {
| 309| 309| 					food: 100,
| 310|    |-					wood: 0,
|    | 310|+					"wood": 0,
| 311| 311| 					metal: 0,
| 312| 312| 					stone: 0,
| 313| 313| 					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
| 308| 308| 				resourcesGathered: {
| 309| 309| 					food: 100,
| 310| 310| 					wood: 0,
| 311|    |-					metal: 0,
|    | 311|+					"metal": 0,
| 312| 312| 					stone: 0,
| 313| 313| 					vegetarianFood: 0
| 314| 314| 				},
|    | [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
| 309| 309| 					food: 100,
| 310| 310| 					wood: 0,
| 311| 311| 					metal: 0,
| 312|    |-					stone: 0,
|    | 312|+					"stone": 0,
| 313| 313| 					vegetarianFood: 0
| 314| 314| 				},
| 315| 315| 				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
| 310| 310| 					wood: 0,
| 311| 311| 					metal: 0,
| 312| 312| 					stone: 0,
| 313|    |-					vegetarianFood: 0
|    | 313|+					"vegetarianFood": 0
| 314| 314| 				},
| 315| 315| 				percentMapExplored: 10
| 316| 316| 			}
|    | [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
| 312| 312| 					stone: 0,
| 313| 313| 					vegetarianFood: 0
| 314| 314| 				},
| 315|    |-				percentMapExplored: 10
|    | 315|+				"percentMapExplored": 10
| 316| 316| 			}
| 317| 317| 		},
| 318| 318| 		{
|    | [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
| 316| 316| 			}
| 317| 317| 		},
| 318| 318| 		{
| 319|    |-			name: "Player 2",
|    | 319|+			"name": "Player 2",
| 320| 320| 			civ: "mace",
| 321| 321| 			color: { r:1, g:0, b:0, a:1 },
| 322| 322| 			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
| 317| 317| 		},
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320|    |-			civ: "mace",
|    | 320|+			"civ": "mace",
| 321| 321| 			color: { r:1, g:0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			"color": { r:1, g:0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { "r":1, g:0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { r: 1, g:0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { r:1, "g":0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { r:1, g: 0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { r:1, g:0, "b":0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { r:1, g:0, b: 0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { r:1, g:0, b:0, "a":1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 318| 318| 		{
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321|    |-			color: { r:1, g:0, b:0, a:1 },
|    | 321|+			color: { r:1, g:0, b:0, a: 1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			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
| 319| 319| 			name: "Player 2",
| 320| 320| 			civ: "mace",
| 321| 321| 			color: { r:1, g:0, b:0, a:1 },
| 322|    |-			controlsAll: true,
|    | 322|+			"controlsAll": true,
| 323| 323| 			popCount: 40,
| 324| 324| 			popLimit: 30,
| 325| 325| 			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
| 320| 320| 			civ: "mace",
| 321| 321| 			color: { r:1, g:0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323|    |-			popCount: 40,
|    | 323|+			"popCount": 40,
| 324| 324| 			popLimit: 30,
| 325| 325| 			popMax: 300,
| 326| 326| 			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
| 321| 321| 			color: { r:1, g:0, b:0, a:1 },
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324|    |-			popLimit: 30,
|    | 324|+			"popLimit": 30,
| 325| 325| 			popMax: 300,
| 326| 326| 			panelEntities: [],
| 327| 327| 			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
| 322| 322| 			controlsAll: true,
| 323| 323| 			popCount: 40,
| 324| 324| 			popLimit: 30,
| 325|    |-			popMax: 300,
|    | 325|+			"popMax": 300,
| 326| 326| 			panelEntities: [],
| 327| 327| 			resourceCounts: { food: 200 },
| 328| 328| 			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
| 323| 323| 			popCount: 40,
| 324| 324| 			popLimit: 30,
| 325| 325| 			popMax: 300,
| 326|    |-			panelEntities: [],
|    | 326|+			"panelEntities": [],
| 327| 327| 			resourceCounts: { food: 200 },
| 328| 328| 			trainingBlocked: false,
| 329| 329| 			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
| 324| 324| 			popLimit: 30,
| 325| 325| 			popMax: 300,
| 326| 326| 			panelEntities: [],
| 327|    |-			resourceCounts: { food: 200 },
|    | 327|+			"resourceCounts": { food: 200 },
| 328| 328| 			trainingBlocked: false,
| 329| 329| 			state: "active",
| 330| 330| 			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
| 324| 324| 			popLimit: 30,
| 325| 325| 			popMax: 300,
| 326| 326| 			panelEntities: [],
| 327|    |-			resourceCounts: { food: 200 },
|    | 327|+			resourceCounts: { "food": 200 },
| 328| 328| 			trainingBlocked: false,
| 329| 329| 			state: "active",
| 330| 330| 			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
| 325| 325| 			popMax: 300,
| 326| 326| 			panelEntities: [],
| 327| 327| 			resourceCounts: { food: 200 },
| 328|    |-			trainingBlocked: false,
|    | 328|+			"trainingBlocked": false,
| 329| 329| 			state: "active",
| 330| 330| 			team: -1,
| 331| 331| 			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
| 326| 326| 			panelEntities: [],
| 327| 327| 			resourceCounts: { food: 200 },
| 328| 328| 			trainingBlocked: false,
| 329|    |-			state: "active",
|    | 329|+			"state": "active",
| 330| 330| 			team: -1,
| 331| 331| 			teamsLocked: false,
| 332| 332| 			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
| 327| 327| 			resourceCounts: { food: 200 },
| 328| 328| 			trainingBlocked: false,
| 329| 329| 			state: "active",
| 330|    |-			team: -1,
|    | 330|+			"team": -1,
| 331| 331| 			teamsLocked: false,
| 332| 332| 			cheatsEnabled: false,
| 333| 333| 			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
| 328| 328| 			trainingBlocked: false,
| 329| 329| 			state: "active",
| 330| 330| 			team: -1,
| 331|    |-			teamsLocked: false,
|    | 331|+			"teamsLocked": false,
| 332| 332| 			cheatsEnabled: false,
| 333| 333| 			disabledTemplates: {},
| 334| 334| 			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
| 329| 329| 			state: "active",
| 330| 330| 			team: -1,
| 331| 331| 			teamsLocked: false,
| 332|    |-			cheatsEnabled: false,
|    | 332|+			"cheatsEnabled": false,
| 333| 333| 			disabledTemplates: {},
| 334| 334| 			disabledTechnologies: {},
| 335| 335| 			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
| 330| 330| 			team: -1,
| 331| 331| 			teamsLocked: false,
| 332| 332| 			cheatsEnabled: false,
| 333|    |-			disabledTemplates: {},
|    | 333|+			"disabledTemplates": {},
| 334| 334| 			disabledTechnologies: {},
| 335| 335| 			hasSharedDropsites: false,
| 336| 336| 			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
| 331| 331| 			teamsLocked: false,
| 332| 332| 			cheatsEnabled: false,
| 333| 333| 			disabledTemplates: {},
| 334|    |-			disabledTechnologies: {},
|    | 334|+			"disabledTechnologies": {},
| 335| 335| 			hasSharedDropsites: false,
| 336| 336| 			hasSharedLos: false,
| 337| 337| 			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
| 332| 332| 			cheatsEnabled: false,
| 333| 333| 			disabledTemplates: {},
| 334| 334| 			disabledTechnologies: {},
| 335|    |-			hasSharedDropsites: false,
|    | 335|+			"hasSharedDropsites": false,
| 336| 336| 			hasSharedLos: false,
| 337| 337| 			spyCostMultiplier: 1,
| 338| 338| 			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
| 333| 333| 			disabledTemplates: {},
| 334| 334| 			disabledTechnologies: {},
| 335| 335| 			hasSharedDropsites: false,
| 336|    |-			hasSharedLos: false,
|    | 336|+			"hasSharedLos": false,
| 337| 337| 			spyCostMultiplier: 1,
| 338| 338| 			phase: "village",
| 339| 339| 			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
| 334| 334| 			disabledTechnologies: {},
| 335| 335| 			hasSharedDropsites: false,
| 336| 336| 			hasSharedLos: false,
| 337|    |-			spyCostMultiplier: 1,
|    | 337|+			"spyCostMultiplier": 1,
| 338| 338| 			phase: "village",
| 339| 339| 			isAlly: [true, true],
| 340| 340| 			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
| 335| 335| 			hasSharedDropsites: false,
| 336| 336| 			hasSharedLos: false,
| 337| 337| 			spyCostMultiplier: 1,
| 338|    |-			phase: "village",
|    | 338|+			"phase": "village",
| 339| 339| 			isAlly: [true, true],
| 340| 340| 			isMutualAlly: [false, false],
| 341| 341| 			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
| 336| 336| 			hasSharedLos: false,
| 337| 337| 			spyCostMultiplier: 1,
| 338| 338| 			phase: "village",
| 339|    |-			isAlly: [true, true],
|    | 339|+			"isAlly": [true, true],
| 340| 340| 			isMutualAlly: [false, false],
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			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
| 337| 337| 			spyCostMultiplier: 1,
| 338| 338| 			phase: "village",
| 339| 339| 			isAlly: [true, true],
| 340|    |-			isMutualAlly: [false, false],
|    | 340|+			"isMutualAlly": [false, false],
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			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
| 338| 338| 			phase: "village",
| 339| 339| 			isAlly: [true, true],
| 340| 340| 			isMutualAlly: [false, false],
| 341|    |-			isNeutral: [false, false],
|    | 341|+			"isNeutral": [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344| 344| 			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
| 339| 339| 			isAlly: [true, true],
| 340| 340| 			isMutualAlly: [false, false],
| 341| 341| 			isNeutral: [false, false],
| 342|    |-			isEnemy: [false, false],
|    | 342|+			"isEnemy": [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344| 344| 			entityCounts: {"Bar": 0},
| 345| 345| 			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
| 340| 340| 			isMutualAlly: [false, false],
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343|    |-			entityLimits: {"Bar": 20},
|    | 343|+			"entityLimits": {"Bar": 20},
| 344| 344| 			entityCounts: {"Bar": 0},
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			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
| 340| 340| 			isMutualAlly: [false, false],
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343|    |-			entityLimits: {"Bar": 20},
|    | 343|+			entityLimits: { "Bar": 20},
| 344| 344| 			entityCounts: {"Bar": 0},
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			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
| 340| 340| 			isMutualAlly: [false, false],
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343|    |-			entityLimits: {"Bar": 20},
|    | 343|+			entityLimits: {"Bar": 20 },
| 344| 344| 			entityCounts: {"Bar": 0},
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			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
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344|    |-			entityCounts: {"Bar": 0},
|    | 344|+			"entityCounts": {"Bar": 0},
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			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
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344|    |-			entityCounts: {"Bar": 0},
|    | 344|+			entityCounts: { "Bar": 0},
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			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
| 341| 341| 			isNeutral: [false, false],
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344|    |-			entityCounts: {"Bar": 0},
|    | 344|+			entityCounts: {"Bar": 0 },
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			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
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344| 344| 			entityCounts: {"Bar": 0},
| 345|    |-			entityLimitChangers: {"Bar": {}},
|    | 345|+			"entityLimitChangers": {"Bar": {}},
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			researchStarted: new Set(),
| 348| 348| 			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
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344| 344| 			entityCounts: {"Bar": 0},
| 345|    |-			entityLimitChangers: {"Bar": {}},
|    | 345|+			entityLimitChangers: { "Bar": {}},
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			researchStarted: new Set(),
| 348| 348| 			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
| 342| 342| 			isEnemy: [false, false],
| 343| 343| 			entityLimits: {"Bar": 20},
| 344| 344| 			entityCounts: {"Bar": 0},
| 345|    |-			entityLimitChangers: {"Bar": {}},
|    | 345|+			entityLimitChangers: {"Bar": {} },
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			researchStarted: new Set(),
| 348| 348| 			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
| 343| 343| 			entityLimits: {"Bar": 20},
| 344| 344| 			entityCounts: {"Bar": 0},
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346|    |-			researchQueued: new Map(),
|    | 346|+			"researchQueued": new Map(),
| 347| 347| 			researchStarted: new Set(),
| 348| 348| 			researchedTechs: new Set(),
| 349| 349| 			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
| 344| 344| 			entityCounts: {"Bar": 0},
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			researchQueued: new Map(),
| 347|    |-			researchStarted: new Set(),
|    | 347|+			"researchStarted": new Set(),
| 348| 348| 			researchedTechs: new Set(),
| 349| 349| 			classCounts: {},
| 350| 350| 			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
| 345| 345| 			entityLimitChangers: {"Bar": {}},
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			researchStarted: new Set(),
| 348|    |-			researchedTechs: new Set(),
|    | 348|+			"researchedTechs": new Set(),
| 349| 349| 			classCounts: {},
| 350| 350| 			typeCountsByClass: {},
| 351| 351| 			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
| 346| 346| 			researchQueued: new Map(),
| 347| 347| 			researchStarted: new Set(),
| 348| 348| 			researchedTechs: new Set(),
| 349|    |-			classCounts: {},
|    | 349|+			"classCounts": {},
| 350| 350| 			typeCountsByClass: {},
| 351| 351| 			canBarter: false,
| 352| 352| 			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
| 347| 347| 			researchStarted: new Set(),
| 348| 348| 			researchedTechs: new Set(),
| 349| 349| 			classCounts: {},
| 350|    |-			typeCountsByClass: {},
|    | 350|+			"typeCountsByClass": {},
| 351| 351| 			canBarter: false,
| 352| 352| 			barterPrices: {
| 353| 353| 				"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
| 348| 348| 			researchedTechs: new Set(),
| 349| 349| 			classCounts: {},
| 350| 350| 			typeCountsByClass: {},
| 351|    |-			canBarter: false,
|    | 351|+			"canBarter": false,
| 352| 352| 			barterPrices: {
| 353| 353| 				"buy": { "food": 150 },
| 354| 354| 				"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
| 349| 349| 			classCounts: {},
| 350| 350| 			typeCountsByClass: {},
| 351| 351| 			canBarter: false,
| 352|    |-			barterPrices: {
|    | 352|+			"barterPrices": {
| 353| 353| 				"buy": { "food": 150 },
| 354| 354| 				"sell": { "food": 25 }
| 355| 355| 			},
|    | [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
| 353| 353| 				"buy": { "food": 150 },
| 354| 354| 				"sell": { "food": 25 }
| 355| 355| 			},
| 356|    |-			statistics: {
|    | 356|+			"statistics": {
| 357| 357| 				resourcesGathered: {
| 358| 358| 					food: 100,
| 359| 359| 					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
| 354| 354| 				"sell": { "food": 25 }
| 355| 355| 			},
| 356| 356| 			statistics: {
| 357|    |-				resourcesGathered: {
|    | 357|+				"resourcesGathered": {
| 358| 358| 					food: 100,
| 359| 359| 					wood: 0,
| 360| 360| 					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
| 355| 355| 			},
| 356| 356| 			statistics: {
| 357| 357| 				resourcesGathered: {
| 358|    |-					food: 100,
|    | 358|+					"food": 100,
| 359| 359| 					wood: 0,
| 360| 360| 					metal: 0,
| 361| 361| 					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
| 356| 356| 			statistics: {
| 357| 357| 				resourcesGathered: {
| 358| 358| 					food: 100,
| 359|    |-					wood: 0,
|    | 359|+					"wood": 0,
| 360| 360| 					metal: 0,
| 361| 361| 					stone: 0,
| 362| 362| 					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
| 357| 357| 				resourcesGathered: {
| 358| 358| 					food: 100,
| 359| 359| 					wood: 0,
| 360|    |-					metal: 0,
|    | 360|+					"metal": 0,
| 361| 361| 					stone: 0,
| 362| 362| 					vegetarianFood: 0
| 363| 363| 				},
|    | [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
| 358| 358| 					food: 100,
| 359| 359| 					wood: 0,
| 360| 360| 					metal: 0,
| 361|    |-					stone: 0,
|    | 361|+					"stone": 0,
| 362| 362| 					vegetarianFood: 0
| 363| 363| 				},
| 364| 364| 				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
| 359| 359| 					wood: 0,
| 360| 360| 					metal: 0,
| 361| 361| 					stone: 0,
| 362|    |-					vegetarianFood: 0
|    | 362|+					"vegetarianFood": 0
| 363| 363| 				},
| 364| 364| 				percentMapExplored: 10
| 365| 365| 			}
|    | [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
| 361| 361| 					stone: 0,
| 362| 362| 					vegetarianFood: 0
| 363| 363| 				},
| 364|    |-				percentMapExplored: 10
|    | 364|+				"percentMapExplored": 10
| 365| 365| 			}
| 366| 366| 		}
| 367| 367| 	],
|    | [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
| 365| 365| 			}
| 366| 366| 		}
| 367| 367| 	],
| 368|    |-	circularMap: false,
|    | 368|+	"circularMap": false,
| 369| 369| 	timeElapsed: 0,
| 370| 370| 	"victoryConditions": ["conquest", "wonder"],
| 371| 371| 	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
| 366| 366| 		}
| 367| 367| 	],
| 368| 368| 	circularMap: false,
| 369|    |-	timeElapsed: 0,
|    | 369|+	"timeElapsed": 0,
| 370| 370| 	"victoryConditions": ["conquest", "wonder"],
| 371| 371| 	alliedVictory: false
| 372| 372| });
|    | [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
| 368| 368| 	circularMap: false,
| 369| 369| 	timeElapsed: 0,
| 370| 370| 	"victoryConditions": ["conquest", "wonder"],
| 371|    |-	alliedVictory: false
|    | 371|+	"alliedVictory": false
| 372| 372| });
| 373| 373| 
| 374| 374| 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
| 376| 376| 		{
| 377| 377| 			"name": "Player 1",
| 378| 378| 			"civ": "gaia",
| 379|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 379|+			"color": { "r": 1, "g":1, "b":1, "a":1 },
| 380| 380| 			"controlsAll": false,
| 381| 381| 			"popCount": 10,
| 382| 382| 			"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
| 376| 376| 		{
| 377| 377| 			"name": "Player 1",
| 378| 378| 			"civ": "gaia",
| 379|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 379|+			"color": { "r":1, "g": 1, "b":1, "a":1 },
| 380| 380| 			"controlsAll": false,
| 381| 381| 			"popCount": 10,
| 382| 382| 			"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
| 376| 376| 		{
| 377| 377| 			"name": "Player 1",
| 378| 378| 			"civ": "gaia",
| 379|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 379|+			"color": { "r":1, "g":1, "b": 1, "a":1 },
| 380| 380| 			"controlsAll": false,
| 381| 381| 			"popCount": 10,
| 382| 382| 			"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
| 376| 376| 		{
| 377| 377| 			"name": "Player 1",
| 378| 378| 			"civ": "gaia",
| 379|    |-			"color": { "r":1, "g":1, "b":1, "a":1 },
|    | 379|+			"color": { "r":1, "g":1, "b":1, "a": 1 },
| 380| 380| 			"controlsAll": false,
| 381| 381| 			"popCount": 10,
| 382| 382| 			"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
| 398| 398| 			"isMutualAlly": [false, false],
| 399| 399| 			"isNeutral": [false, false],
| 400| 400| 			"isEnemy": [true, true],
| 401|    |-			"entityLimits": {"Foo": 10},
|    | 401|+			"entityLimits": { "Foo": 10},
| 402| 402| 			"entityCounts": {"Foo": 5},
| 403| 403| 			"entityLimitChangers": {"Foo": {}},
| 404| 404| 			"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
| 398| 398| 			"isMutualAlly": [false, false],
| 399| 399| 			"isNeutral": [false, false],
| 400| 400| 			"isEnemy": [true, true],
| 401|    |-			"entityLimits": {"Foo": 10},
|    | 401|+			"entityLimits": {"Foo": 10 },
| 402| 402| 			"entityCounts": {"Foo": 5},
| 403| 403| 			"entityLimitChangers": {"Foo": {}},
| 404| 404| 			"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
| 399| 399| 			"isNeutral": [false, false],
| 400| 400| 			"isEnemy": [true, true],
| 401| 401| 			"entityLimits": {"Foo": 10},
| 402|    |-			"entityCounts": {"Foo": 5},
|    | 402|+			"entityCounts": { "Foo": 5},
| 403| 403| 			"entityLimitChangers": {"Foo": {}},
| 404| 404| 			"researchQueued": new Map(),
| 405| 405| 			"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
| 399| 399| 			"isNeutral": [false, false],
| 400| 400| 			"isEnemy": [true, true],
| 401| 401| 			"entityLimits": {"Foo": 10},
| 402|    |-			"entityCounts": {"Foo": 5},
|    | 402|+			"entityCounts": {"Foo": 5 },
| 403| 403| 			"entityLimitChangers": {"Foo": {}},
| 404| 404| 			"researchQueued": new Map(),
| 405| 405| 			"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
| 400| 400| 			"isEnemy": [true, true],
| 401| 401| 			"entityLimits": {"Foo": 10},
| 402| 402| 			"entityCounts": {"Foo": 5},
| 403|    |-			"entityLimitChangers": {"Foo": {}},
|    | 403|+			"entityLimitChangers": { "Foo": {}},
| 404| 404| 			"researchQueued": new Map(),
| 405| 405| 			"researchStarted": new Set(),
| 406| 406| 			"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
| 400| 400| 			"isEnemy": [true, true],
| 401| 401| 			"entityLimits": {"Foo": 10},
| 402| 402| 			"entityCounts": {"Foo": 5},
| 403|    |-			"entityLimitChangers": {"Foo": {}},
|    | 403|+			"entityLimitChangers": {"Foo": {} },
| 404| 404| 			"researchQueued": new Map(),
| 405| 405| 			"researchStarted": new Set(),
| 406| 406| 			"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
| 448| 448| 		{
| 449| 449| 			"name": "Player 2",
| 450| 450| 			"civ": "mace",
| 451|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 451|+			"color": { "r": 1, "g":0, "b":0, "a":1 },
| 452| 452| 			"controlsAll": true,
| 453| 453| 			"popCount": 40,
| 454| 454| 			"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
| 448| 448| 		{
| 449| 449| 			"name": "Player 2",
| 450| 450| 			"civ": "mace",
| 451|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 451|+			"color": { "r":1, "g": 0, "b":0, "a":1 },
| 452| 452| 			"controlsAll": true,
| 453| 453| 			"popCount": 40,
| 454| 454| 			"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
| 448| 448| 		{
| 449| 449| 			"name": "Player 2",
| 450| 450| 			"civ": "mace",
| 451|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 451|+			"color": { "r":1, "g":0, "b": 0, "a":1 },
| 452| 452| 			"controlsAll": true,
| 453| 453| 			"popCount": 40,
| 454| 454| 			"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
| 448| 448| 		{
| 449| 449| 			"name": "Player 2",
| 450| 450| 			"civ": "mace",
| 451|    |-			"color": { "r":1, "g":0, "b":0, "a":1 },
|    | 451|+			"color": { "r":1, "g":0, "b":0, "a": 1 },
| 452| 452| 			"controlsAll": true,
| 453| 453| 			"popCount": 40,
| 454| 454| 			"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
| 470| 470| 			"isMutualAlly": [false, false],
| 471| 471| 			"isNeutral": [false, false],
| 472| 472| 			"isEnemy": [false, false],
| 473|    |-			"entityLimits": {"Bar": 20},
|    | 473|+			"entityLimits": { "Bar": 20},
| 474| 474| 			"entityCounts": {"Bar": 0},
| 475| 475| 			"entityLimitChangers": {"Bar": {}},
| 476| 476| 			"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
| 470| 470| 			"isMutualAlly": [false, false],
| 471| 471| 			"isNeutral": [false, false],
| 472| 472| 			"isEnemy": [false, false],
| 473|    |-			"entityLimits": {"Bar": 20},
|    | 473|+			"entityLimits": {"Bar": 20 },
| 474| 474| 			"entityCounts": {"Bar": 0},
| 475| 475| 			"entityLimitChangers": {"Bar": {}},
| 476| 476| 			"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
| 471| 471| 			"isNeutral": [false, false],
| 472| 472| 			"isEnemy": [false, false],
| 473| 473| 			"entityLimits": {"Bar": 20},
| 474|    |-			"entityCounts": {"Bar": 0},
|    | 474|+			"entityCounts": { "Bar": 0},
| 475| 475| 			"entityLimitChangers": {"Bar": {}},
| 476| 476| 			"researchQueued": new Map(),
| 477| 477| 			"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
| 471| 471| 			"isNeutral": [false, false],
| 472| 472| 			"isEnemy": [false, false],
| 473| 473| 			"entityLimits": {"Bar": 20},
| 474|    |-			"entityCounts": {"Bar": 0},
|    | 474|+			"entityCounts": {"Bar": 0 },
| 475| 475| 			"entityLimitChangers": {"Bar": {}},
| 476| 476| 			"researchQueued": new Map(),
| 477| 477| 			"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
| 472| 472| 			"isEnemy": [false, false],
| 473| 473| 			"entityLimits": {"Bar": 20},
| 474| 474| 			"entityCounts": {"Bar": 0},
| 475|    |-			"entityLimitChangers": {"Bar": {}},
|    | 475|+			"entityLimitChangers": { "Bar": {}},
| 476| 476| 			"researchQueued": new Map(),
| 477| 477| 			"researchStarted": new Set(),
| 478| 478| 			"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
| 472| 472| 			"isEnemy": [false, false],
| 473| 473| 			"entityLimits": {"Bar": 20},
| 474| 474| 			"entityCounts": {"Bar": 0},
| 475|    |-			"entityLimitChangers": {"Bar": {}},
|    | 475|+			"entityLimitChangers": {"Bar": {} },
| 476| 476| 			"researchQueued": new Map(),
| 477| 477| 			"researchStarted": new Set(),
| 478| 478| 			"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
| 526| 526| 
| 527| 527| 
| 528| 528| AddMock(10, IID_Builder, {
| 529|    |-	GetEntitiesList: function() {
|    | 529|+	"GetEntitiesList": function() {
| 530| 530| 		return ["test1", "test2"];
| 531| 531| 	},
| 532| 532| });
|    | [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
| 532| 532| });
| 533| 533| 
| 534| 534| AddMock(10, IID_Health, {
| 535|    |-	GetHitpoints: function() { return 50; },
|    | 535|+	"GetHitpoints": function() { return 50; },
| 536| 536| 	GetMaxHitpoints: function() { return 60; },
| 537| 537| 	IsRepairable: function() { return false; },
| 538| 538| 	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
| 533| 533| 
| 534| 534| AddMock(10, IID_Health, {
| 535| 535| 	GetHitpoints: function() { return 50; },
| 536|    |-	GetMaxHitpoints: function() { return 60; },
|    | 536|+	"GetMaxHitpoints": function() { return 60; },
| 537| 537| 	IsRepairable: function() { return false; },
| 538| 538| 	IsUnhealable: function() { return false; }
| 539| 539| });
|    | [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
| 534| 534| AddMock(10, IID_Health, {
| 535| 535| 	GetHitpoints: function() { return 50; },
| 536| 536| 	GetMaxHitpoints: function() { return 60; },
| 537|    |-	IsRepairable: function() { return false; },
|    | 537|+	"IsRepairable": function() { return false; },
| 538| 538| 	IsUnhealable: function() { return false; }
| 539| 539| });
| 540| 540| 
|    | [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
| 535| 535| 	GetHitpoints: function() { return 50; },
| 536| 536| 	GetMaxHitpoints: function() { return 60; },
| 537| 537| 	IsRepairable: function() { return false; },
| 538|    |-	IsUnhealable: function() { return false; }
|    | 538|+	"IsUnhealable": function() { return false; }
| 539| 539| });
| 540| 540| 
| 541| 541| 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
| 539| 539| });
| 540| 540| 
| 541| 541| AddMock(10, IID_Identity, {
| 542|    |-	GetClassesList: function() { return ["class1", "class2"]; },
|    | 542|+	"GetClassesList": function() { return ["class1", "class2"]; },
| 543| 543| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 544| 544| 	GetRank: function() { return "foo"; },
| 545| 545| 	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
| 540| 540| 
| 541| 541| AddMock(10, IID_Identity, {
| 542| 542| 	GetClassesList: function() { return ["class1", "class2"]; },
| 543|    |-	GetVisibleClassesList: function() { return ["class3", "class4"]; },
|    | 543|+	"GetVisibleClassesList": function() { return ["class3", "class4"]; },
| 544| 544| 	GetRank: function() { return "foo"; },
| 545| 545| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 546| 546| 	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
| 541| 541| AddMock(10, IID_Identity, {
| 542| 542| 	GetClassesList: function() { return ["class1", "class2"]; },
| 543| 543| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 544|    |-	GetRank: function() { return "foo"; },
|    | 544|+	"GetRank": function() { return "foo"; },
| 545| 545| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 546| 546| 	HasClass: function() { return true; },
| 547| 547| 	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
| 542| 542| 	GetClassesList: function() { return ["class1", "class2"]; },
| 543| 543| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 544| 544| 	GetRank: function() { return "foo"; },
| 545|    |-	GetSelectionGroupName: function() { return "Selection Group Name"; },
|    | 545|+	"GetSelectionGroupName": function() { return "Selection Group Name"; },
| 546| 546| 	HasClass: function() { return true; },
| 547| 547| 	IsUndeletable: function() { return false; },
| 548| 548| 	HasSomeFormation: function() { return false; },
|    | [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
| 543| 543| 	GetVisibleClassesList: function() { return ["class3", "class4"]; },
| 544| 544| 	GetRank: function() { return "foo"; },
| 545| 545| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 546|    |-	HasClass: function() { return true; },
|    | 546|+	"HasClass": function() { return true; },
| 547| 547| 	IsUndeletable: function() { return false; },
| 548| 548| 	HasSomeFormation: function() { return false; },
| 549| 549| 	GetFormationsList: function() { return []; },
|    | [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
| 544| 544| 	GetRank: function() { return "foo"; },
| 545| 545| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 546| 546| 	HasClass: function() { return true; },
| 547|    |-	IsUndeletable: function() { return false; },
|    | 547|+	"IsUndeletable": function() { return false; },
| 548| 548| 	HasSomeFormation: function() { return false; },
| 549| 549| 	GetFormationsList: function() { return []; },
| 550| 550| });
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'HasSomeFormation' 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
| 545| 545| 	GetSelectionGroupName: function() { return "Selection Group Name"; },
| 546| 546| 	HasClass: function() { return true; },
| 547| 547| 	IsUndeletable: function() { return false; },
| 548|    |-	HasSomeFormation: function() { return false; },
|    | 548|+	"HasSomeFormation": function() { return false; },
| 549| 549| 	GetFormationsList: function() { return []; },
| 550| 550| });
| 551| 551| 
|    | [NORMAL] ESLintBear (quote-props):
|    | Unquoted property 'GetFormationsList' 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| 	HasClass: function() { return true; },
| 547| 547| 	IsUndeletable: function() { return false; },
| 548| 548| 	HasSomeFormation: function() { return false; },
| 549|    |-	GetFormationsList: function() { return []; },
|    | 549|+	"GetFormationsList": function() { return []; },
| 550| 550| });
| 551| 551| 
| 552| 552| 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
| 550| 550| });
| 551| 551| 
| 552| 552| AddMock(10, IID_Position, {
| 553|    |-	GetTurretParent: function() {return INVALID_ENTITY;},
|    | 553|+	"GetTurretParent": function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555| 555| 		return {x:1, y:2, z:3};
| 556| 556| 	},
|    | [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
| 551| 551| 
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554|    |-	GetPosition: function() {
|    | 554|+	"GetPosition": function() {
| 555| 555| 		return {x:1, y:2, z:3};
| 556| 556| 	},
| 557| 557| 	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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return { x:1, y:2, z:3};
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return {"x":1, y:2, z:3};
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return {x: 1, y:2, z:3};
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return {x:1, "y":2, z:3};
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return {x:1, y: 2, z:3};
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return {x:1, y:2, "z":3};
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return {x:1, y:2, z: 3};
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 552| 552| AddMock(10, IID_Position, {
| 553| 553| 	GetTurretParent: function() {return INVALID_ENTITY;},
| 554| 554| 	GetPosition: function() {
| 555|    |-		return {x:1, y:2, z:3};
|    | 555|+		return {x:1, y:2, z:3 };
| 556| 556| 	},
| 557| 557| 	IsInWorld: function() {
| 558| 558| 		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
| 554| 554| 	GetPosition: function() {
| 555| 555| 		return {x:1, y:2, z:3};
| 556| 556| 	},
| 557|    |-	IsInWorld: function() {
|    | 557|+	"IsInWorld": function() {
| 558| 558| 		return true;
| 559| 559| 	}
| 560| 560| });
|    | [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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": { x:1, y:2, z:3},
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": {"x":1, y:2, z:3},
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": {x: 1, y:2, z:3},
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": {x:1, "y":2, z:3},
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": {x:1, y: 2, z:3},
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": {x:1, y:2, "z":3},
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": {x:1, y:2, z: 3},
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 580| 580| 		"hasSomeFormation": false,
| 581| 581| 		"formations": [],
| 582| 582| 	},
| 583|    |-	"position": {x:1, y:2, z:3},
|    | 583|+	"position": {x:1, y:2, z:3 },
| 584| 584| 	"hitpoints": 50,
| 585| 585| 	"maxHitpoints": 60,
| 586| 586| 	"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
| 587| 587| 	"needsHeal": true,
| 588| 588| 	"builder": true,
| 589| 589| 	"visibility": "visible",
| 590|    |-	"isBarterMarket":true,
|    | 590|+	"isBarterMarket": true,
| 591| 591| 	"resourceTrickle": {
| 592| 592| 		"interval": 1250,
| 593| 593| 		"rates": { "food": 2, "wood": 3, "stone": 5, "metal": 9 }
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'execute'.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
| 526| 526| 
| 527| 527| 	"cancel-setup-trade-route":
| 528| 528| 	{
| 529|    |-		"execute":function(target, action, selection, queued)
|    | 529|+		"execute": function(target, action, selection, queued)
| 530| 530| 		{
| 531| 531| 			Engine.PostNetworkCommand({
| 532| 532| 				"type": "cancel-setup-trade-route",
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
| 571| 571| 				"cursor": "action-cancel-setup-trade-route",
| 572| 572| 				"tooltip": actionInfo.tooltip,
| 573| 573| 				"target": target
| 574|    |-			}
|    | 574|+			};
| 575| 575| 		},
| 576| 576| 		"specificness": 2,
| 577| 577| 	},

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

binaries/data/mods/public/gui/session/unit_actions.js
| 574| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [NORMAL] ESLintBear (no-multi-spaces):
|    | Multiple spaces found before 'state'.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
| 298| 298| 		if (!g_AvailableFormations.has(unitEntStates[0].player))
| 299| 299| 			g_AvailableFormations.set(unitEntStates[0].player, Engine.GuiInterfaceCall("GetAvailableFormations", unitEntStates[0].player));
| 300| 300| 
| 301|    |-		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity &&  state.identity.formations.indexOf(formation) != -1));
|    | 301|+		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity && state.identity.formations.indexOf(formation) != -1));
| 302| 302| 	},
| 303| 303| 	"setupButton": function(data)
| 304| 304| 	{
|    | [NORMAL] ESLintBear (space-before-function-paren):
|    | Unexpected space before function parentheses.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
| 761| 761| 				addResearchToQueue(data.item.researchFacilityId, t);
| 762| 762| 			})(tech);
| 763| 763| 
| 764|    |-			button.onPressRight = (t => function () {
|    | 764|+			button.onPressRight = (t => function() {
| 765| 765| 				showTemplateDetails(
| 766| 766| 					t,
| 767| 767| 					GetTemplateData(data.unitEntStates.find(state => state.id == data.item.researchFacilityId).template).nativeCiv);

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

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

binaries/data/mods/public/gui/session/selection_panels.js
| 729| »   »   »   »   »   »   switch·(entity.check)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GarrisonHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GarrisonHolder.js
| 686| 686| 					let entIndex = this.entities.indexOf(point.entity);
| 687| 687| 					if (entIndex == -1)
| 688| 688| 						continue;
| 689|    |-					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
|    | 689|+					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership);
| 690| 690| 					if (cmpEntOwnership)
| 691| 691| 						cmpEntOwnership.SetOwner(msg.to);
| 692| 692| 					entities.splice(entIndex, 1);

binaries/data/mods/public/simulation/components/GarrisonHolder.js
| 689| »   »   »   »   »   let·cmpEntOwnership·=·Engine.QueryInterface(point.entity,·IID_Ownership)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 371| 371| 	if (cmpGarrisonable)
| 372| 372| 		ret.canGarrison = {
| 373| 373| 			"unloadable": cmpGarrisonable.IsUnloadable()
| 374|    |-		}
|    | 374|+		};
| 375| 375| 
| 376| 376| 	let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
| 377| 377| 	if (cmpUnitAI)
|    | [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
| 831| 831| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 832| 832| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 833| 833| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 834|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 834|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 835| 835| 	}
| 836| 836| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 837| 837| 	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
|1664|1664| 			{
|1665|1665| 				minDist2 = dist2;
|1666|1666| 				minDistEntitySnapData = {
|1667|    |-						"x": pos.x,
|    |1667|+					"x": pos.x,
|1668|1668| 						"z": pos.z,
|1669|1669| 						"angle": cmpPosition.GetRotation().y,
|1670|1670| 						"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
|1665|1665| 				minDist2 = dist2;
|1666|1666| 				minDistEntitySnapData = {
|1667|1667| 						"x": pos.x,
|1668|    |-						"z": pos.z,
|    |1668|+					"z": pos.z,
|1669|1669| 						"angle": cmpPosition.GetRotation().y,
|1670|1670| 						"ent": ent
|1671|1671| 				};
|    | [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
|1666|1666| 				minDistEntitySnapData = {
|1667|1667| 						"x": pos.x,
|1668|1668| 						"z": pos.z,
|1669|    |-						"angle": cmpPosition.GetRotation().y,
|    |1669|+					"angle": cmpPosition.GetRotation().y,
|1670|1670| 						"ent": ent
|1671|1671| 				};
|1672|1672| 			}
|    | [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
|1667|1667| 						"x": pos.x,
|1668|1668| 						"z": pos.z,
|1669|1669| 						"angle": cmpPosition.GetRotation().y,
|1670|    |-						"ent": ent
|    |1670|+					"ent": ent
|1671|1671| 				};
|1672|1672| 			}
|1673|1673| 		}

binaries/data/mods/public/simulation/components/GuiInterface.js
| 374| »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [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
| 814| 814| 					this.FinishOrder();
| 815| 815| 					return;
| 816| 816| 				}
| 817|    |-				else
| 818|    |-				{
|    | 817|+				
| 819| 818| 					this.SetNextState("GARRISON.APPROACHING");
| 820| 819| 					return;
| 821|    |-				}
|    | 820|+				
| 822| 821| 			}
| 823| 822| 
| 824| 823| 			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
|1086|1086| 			},
|1087|1087| 		},
|1088|1088| 
|1089|    |-		"GARRISON":{
|    |1089|+		"GARRISON": {
|1090|1090| 			"APPROACHING": {
|1091|1091| 				"enter": function() {
|1092|1092| 					if (!this.MoveToGarrisonRange(this.order.data.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
|2108|2108| 
|2109|2109| 				"Attacked": function(msg) {
|2110|2110| 					// If we are capturing and are attacked by something that we would not capture, attack that entity instead
|2111|    |-					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force)
|2112|    |-						&& this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|    |2111|+					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force) &&
|    |2112|+						this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|2113|2113| 						this.RespondToTargetedEntities([msg.data.attacker]);
|2114|2114| 				},
|2115|2115| 			},
|    | [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
|2846|2846| 					{
|2847|2847| 						// The building was already finished/fully repaired before we arrived;
|2848|2848| 						// let the ConstructionFinished handler handle this.
|2849|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2849|+						this.OnGlobalConstructionFinished({ "entity": this.repairTarget, "newentity": this.repairTarget});
|2850|2850| 						return true;
|2851|2851| 					}
|2852|2852| 
|    | [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
|2846|2846| 					{
|2847|2847| 						// The building was already finished/fully repaired before we arrived;
|2848|2848| 						// let the ConstructionFinished handler handle this.
|2849|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2849|+						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget });
|2850|2850| 						return true;
|2851|2851| 					}
|2852|2852| 
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3144|3144| 				this.StopTimer();
|3145|3145| 				this.ResetAnimation();
|3146|3146| 				if (this.formationAnimationVariant)
|3147|    |-					this.SetAnimationVariant(this.formationAnimationVariant)
|    |3147|+					this.SetAnimationVariant(this.formationAnimationVariant);
|3148|3148| 				else
|3149|3149| 					this.SetDefaultAnimationVariant();
|3150|3150| 				var cmpResistance = Engine.QueryInterface(this.entity, IID_Resistance);
|    | [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
|3370|3370| 		"COMBAT": "INDIVIDUAL.COMBAT", // reuse the same combat behaviour for animals
|3371|3371| 
|3372|3372| 		"WALKING": "INDIVIDUAL.WALKING",	// reuse the same walking behaviour for animals
|3373|    |-							// only used for domestic animals
|    |3373|+		// only used for domestic animals
|3374|3374| 
|3375|3375| 		// Reuse the same garrison behaviour for animals.
|3376|3376| 		"GARRISON": "INDIVIDUAL.GARRISON",
|    | [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
|3432|3432| 
|3433|3433| UnitAI.prototype.IsAnimal = function()
|3434|3434| {
|3435|    |-	return (this.template.NaturalBehaviour ? true : false);
|    |3435|+	return (!!this.template.NaturalBehaviour);
|3436|3436| };
|3437|3437| 
|3438|3438| 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
|3548|3548| 		{
|3549|3549| 			let index = this.GetCurrentState().indexOf(".");
|3550|3550| 			if (index != -1)
|3551|    |-				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0,index));
|    |3551|+				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0, index));
|3552|3552| 			this.Stop(false);
|3553|3553| 		}
|3554|3554| 
|    | [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
|3604|3604| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3605|3605| 			continue;
|3606|3606| 		if (i == 0)
|3607|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3607|+			this.UnitFsm.ProcessMessage(this, { "type": "PickupCanceled", "data": msg});
|3608|3608| 		else
|3609|3609| 			this.orderQueue.splice(i, 1);
|3610|3610| 		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
|3604|3604| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3605|3605| 			continue;
|3606|3606| 		if (i == 0)
|3607|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3607|+			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg });
|3608|3608| 		else
|3609|3609| 			this.orderQueue.splice(i, 1);
|3610|3610| 		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
|3691|3691| };
|3692|3692| 
|3693|3693| 
|3694|    |-//// FSM linkage functions ////
|    |3694|+// // FSM linkage functions ////
|3695|3695| 
|3696|3696| // Setting the next state to the current state will leave/re-enter the top-most substate.
|3697|3697| 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
|3862|3862| 				continue;
|3863|3863| 			if (this.orderQueue[i].type == type)
|3864|3864| 				continue;
|3865|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3865|+			this.orderQueue.splice(i, 0, { "type": type, "data": data});
|3866|3866| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3867|3867| 			return;
|3868|3868| 		}
|    | [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
|3862|3862| 				continue;
|3863|3863| 			if (this.orderQueue[i].type == type)
|3864|3864| 				continue;
|3865|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3865|+			this.orderQueue.splice(i, 0, {"type": type, "data": data });
|3866|3866| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3867|3867| 			return;
|3868|3868| 		}
|    | [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
|4104|4104| 	if (data.timerRepeat === undefined)
|4105|4105| 		this.timer = undefined;
|4106|4106| 
|4107|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4107|+	this.UnitFsm.ProcessMessage(this, { "type": "Timer", "data": data, "lateness": lateness});
|4108|4108| };
|4109|4109| 
|4110|4110| /**
|    | [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
|4104|4104| 	if (data.timerRepeat === undefined)
|4105|4105| 		this.timer = undefined;
|4106|4106| 
|4107|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4107|+	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness });
|4108|4108| };
|4109|4109| 
|4110|4110| /**
|    | [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
|4149|4149| 	// TODO: This is a bit inefficient since every unit listens to every
|4150|4150| 	// construction message - ideally we could scope it to only the one we're building
|4151|4151| 
|4152|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4152|+	this.UnitFsm.ProcessMessage(this, { "type": "ConstructionFinished", "data": msg});
|4153|4153| };
|4154|4154| 
|4155|4155| 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
|4149|4149| 	// TODO: This is a bit inefficient since every unit listens to every
|4150|4150| 	// construction message - ideally we could scope it to only the one we're building
|4151|4151| 
|4152|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4152|+	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg });
|4153|4153| };
|4154|4154| 
|4155|4155| 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
|4180|4180| 	if (msg.fromStatusEffect)
|4181|4181| 		return;
|4182|4182| 
|4183|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4183|+	this.UnitFsm.ProcessMessage(this, { "type": "Attacked", "data": msg});
|4184|4184| };
|4185|4185| 
|4186|4186| 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
|4180|4180| 	if (msg.fromStatusEffect)
|4181|4181| 		return;
|4182|4182| 
|4183|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4183|+	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg });
|4184|4184| };
|4185|4185| 
|4186|4186| 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
|4185|4185| 
|4186|4186| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4187|4187| {
|4188|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4188|+	this.UnitFsm.ProcessMessage(this, { "type": "GuardedAttacked", "data": msg.data});
|4189|4189| };
|4190|4190| 
|4191|4191| 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
|4185|4185| 
|4186|4186| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4187|4187| {
|4188|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4188|+	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data });
|4189|4189| };
|4190|4190| 
|4191|4191| 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
|4190|4190| 
|4191|4191| UnitAI.prototype.OnHealthChanged = function(msg)
|4192|4192| {
|4193|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4193|+	this.UnitFsm.ProcessMessage(this, { "type": "HealthChanged", "from": msg.from, "to": msg.to});
|4194|4194| };
|4195|4195| 
|4196|4196| 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
|4190|4190| 
|4191|4191| UnitAI.prototype.OnHealthChanged = function(msg)
|4192|4192| {
|4193|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4193|+	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to });
|4194|4194| };
|4195|4195| 
|4196|4196| 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
|4196|4196| UnitAI.prototype.OnRangeUpdate = function(msg)
|4197|4197| {
|4198|4198| 	if (msg.tag == this.losRangeQuery)
|4199|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |4199|+		this.UnitFsm.ProcessMessage(this, { "type": "LosRangeUpdate", "data": msg});
|4200|4200| 	else if (msg.tag == this.losHealRangeQuery)
|4201|4201| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|4202|4202| };
|    | [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
|4196|4196| UnitAI.prototype.OnRangeUpdate = function(msg)
|4197|4197| {
|4198|4198| 	if (msg.tag == this.losRangeQuery)
|4199|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |4199|+		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg });
|4200|4200| 	else if (msg.tag == this.losHealRangeQuery)
|4201|4201| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|4202|4202| };
|    | [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
|4198|4198| 	if (msg.tag == this.losRangeQuery)
|4199|4199| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|4200|4200| 	else if (msg.tag == this.losHealRangeQuery)
|4201|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |4201|+		this.UnitFsm.ProcessMessage(this, { "type": "LosHealRangeUpdate", "data": msg});
|4202|4202| };
|4203|4203| 
|4204|4204| 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
|4198|4198| 	if (msg.tag == this.losRangeQuery)
|4199|4199| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|4200|4200| 	else if (msg.tag == this.losHealRangeQuery)
|4201|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |4201|+		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg });
|4202|4202| };
|4203|4203| 
|4204|4204| 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
|4203|4203| 
|4204|4204| UnitAI.prototype.OnPackFinished = function(msg)
|4205|4205| {
|4206|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4206|+	this.UnitFsm.ProcessMessage(this, { "type": "PackFinished", "packed": msg.packed});
|4207|4207| };
|4208|4208| 
|4209|4209| //// 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
|4203|4203| 
|4204|4204| UnitAI.prototype.OnPackFinished = function(msg)
|4205|4205| {
|4206|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4206|+	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed });
|4207|4207| };
|4208|4208| 
|4209|4209| //// 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
|4206|4206| 	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|4207|4207| };
|4208|4208| 
|4209|    |-//// Helper functions to be called by the FSM ////
|    |4209|+// // Helper functions to be called by the FSM ////
|4210|4210| 
|4211|4211| UnitAI.prototype.GetWalkSpeed = function()
|4212|4212| {
|    | [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
|4873|4873| UnitAI.prototype.AttackEntityInZone = function(ents)
|4874|4874| {
|4875|4875| 	var target = ents.find(target =>
|4876|    |-		this.CanAttack(target)
|4877|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|    |4876|+		this.CanAttack(target) &&
|    |4877|+		this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4878|4878| 		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4879|4879| 	);
|4880|4880| 	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
|4874|4874| {
|4875|4875| 	var target = ents.find(target =>
|4876|4876| 		this.CanAttack(target)
|4877|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4878|    |-		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|    |4877|+		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true)) &&
|    |4878|+		(this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4879|4879| 	);
|4880|4880| 	if (!target)
|4881|4881| 		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
|4938|4938| 	// If we are guarding/escorting, don't abandon as long as the guarded unit is in target range of the attacker
|4939|4939| 	if (this.isGuardOf)
|4940|4940| 	{
|4941|    |-		var cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |4941|+		var cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|4942|4942| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|4943|4943| 		if (cmpUnitAI && cmpAttack &&
|4944|4944| 		    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
|4942|4942| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|4943|4943| 		if (cmpUnitAI && cmpAttack &&
|4944|4944| 		    cmpAttack.GetAttackTypes().some(type => cmpUnitAI.CheckTargetAttackRange(this.isGuardOf, type)))
|4945|    |-				return false;
|    |4945|+			return false;
|4946|4946| 	}
|4947|4947| 
|4948|4948| 	// 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
|4980|4980| 	// If we are guarding/escorting, chase at least as long as the guarded unit is in target range of the attacker
|4981|4981| 	if (this.isGuardOf)
|4982|4982| 	{
|4983|    |-		let cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |4983|+		let cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|4984|4984| 		let cmpAttack = Engine.QueryInterface(target, IID_Attack);
|4985|4985| 		if (cmpUnitAI && cmpAttack &&
|4986|4986| 		    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
|4993|4993| 	return false;
|4994|4994| };
|4995|4995| 
|4996|    |-//// External interface functions ////
|    |4996|+// // External interface functions ////
|4997|4997| 
|4998|4998| UnitAI.prototype.SetFormationController = function(ent)
|4999|4999| {
|    | [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
|5149|5149| 	{
|5150|5150| 		if (this.isGuardOf == target && this.order && this.order.type == "Guard")
|5151|5151| 			return;
|5152|    |-		else
|5153|    |-			this.RemoveGuard();
|    |5152|+		this.RemoveGuard();
|5154|5153| 	}
|5155|5154| 
|5156|5155| 	this.AddOrder("Guard", { "target": target, "force": false }, queued);
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5339|5339| 
|5340|5340| 	// This is the case when an entity that has visibly garrisoned entities that can
|5341|5341| 	// attack, but the entity itself can't attack.
|5342|    |-	let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack)
|    |5342|+	let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|5343|5343| 	if (!cmpAttack)
|5344|5344| 	{
|5345|5345| 		order.type = "Attack";
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5473|5473| 
|5474|5474| 	// This is the case when an entity that has visibly garrisoned entities that can
|5475|5475| 	// heal, but the entity itself can't heal.
|5476|    |-	let cmpHeal = Engine.QueryInterface(this.entity, IID_Heal)
|    |5476|+	let cmpHeal = Engine.QueryInterface(this.entity, IID_Heal);
|5477|5477| 	if (!cmpHeal)
|5478|5478| 	{
|5479|5479| 		order.type = "Heal";
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5509|5509| 
|5510|5510| 	if (this.IsFormationController())
|5511|5511| 		this.CallMemberFunction("CancelSetupTradeRoute", [target]);
|5512|    |-}
|    |5512|+};
|5513|5513| /**
|5514|5514|  * Adds trade order to the queue. Either walk to the first market, or
|5515|5515|  * start a new route. Not forced, so it can be interrupted by attacks.
|    | [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
|5530|5530| 	    this.workOrders.length && this.workOrders[0].type == "Trade")
|5531|5531| 	{
|5532|5532| 		let cmpTrader = Engine.QueryInterface(this.entity, IID_Trader);
|5533|    |-		if (cmpTrader.HasBothMarkets() && 
|    |5533|+		if (cmpTrader.HasBothMarkets() &&
|5534|5534| 		   (cmpTrader.GetFirstMarket() == target && cmpTrader.GetSecondMarket() == source ||
|5535|5535| 		    cmpTrader.GetFirstMarket() == source && cmpTrader.GetSecondMarket() == target))
|5536|5536| 		{
|    | [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
|5811|5811| 				{
|5812|5812| 					var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5813|5813| 					var targetClasses = this.order.data.targetClasses;
|5814|    |-					if (targetClasses.attack && cmpIdentity
|5815|    |-						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5814|+					if (targetClasses.attack && cmpIdentity &&
|    |5815|+						!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5816|5816| 						continue;
|5817|5817| 					if (targetClasses.avoid && cmpIdentity
|5818|5818| 						&& 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
|5814|5814| 					if (targetClasses.attack && cmpIdentity
|5815|5815| 						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5816|5816| 						continue;
|5817|    |-					if (targetClasses.avoid && cmpIdentity
|5818|    |-						&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5817|+					if (targetClasses.avoid && cmpIdentity &&
|    |5818|+						MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5819|5819| 						continue;
|5820|5820| 					// Only used by the AIs to prevent some choices of targets
|5821|5821| 					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
|5837|5837| 		{
|5838|5838| 			var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5839|5839| 			var targetClasses = this.order.data.targetClasses;
|5840|    |-			if (cmpIdentity && targetClasses.attack
|5841|    |-				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5840|+			if (cmpIdentity && targetClasses.attack &&
|    |5841|+				!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5842|5842| 				continue;
|5843|5843| 			if (cmpIdentity && targetClasses.avoid
|5844|5844| 				&& 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
|5840|5840| 			if (cmpIdentity && targetClasses.attack
|5841|5841| 				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5842|5842| 				continue;
|5843|    |-			if (cmpIdentity && targetClasses.avoid
|5844|    |-				&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5843|+			if (cmpIdentity && targetClasses.avoid &&
|    |5844|+				MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5845|5845| 				continue;
|5846|5846| 			// Only used by the AIs to prevent some choices of targets
|5847|5847| 			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
|5983|5983| 
|5984|5984| UnitAI.prototype.SetHeldPosition = function(x, z)
|5985|5985| {
|5986|    |-	this.heldPosition = {"x": x, "z": z};
|    |5986|+	this.heldPosition = { "x": x, "z": z};
|5987|5987| };
|5988|5988| 
|5989|5989| 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
|5983|5983| 
|5984|5984| UnitAI.prototype.SetHeldPosition = function(x, z)
|5985|5985| {
|5986|    |-	this.heldPosition = {"x": x, "z": z};
|    |5986|+	this.heldPosition = {"x": x, "z": z };
|5987|5987| };
|5988|5988| 
|5989|5989| 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
|6010|6010| 	return false;
|6011|6011| };
|6012|6012| 
|6013|    |-//// Helper functions ////
|    |6013|+// // Helper functions ////
|6014|6014| 
|6015|6015| /**
|6016|6016|  * General getter for ranges.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|6058|6058| 	}
|6059|6059| 
|6060|6060| 	return result.max == -1 ? undefined : result;
|6061|    |-}
|    |6061|+};
|6062|6062| 
|6063|6063| /**
|6064|6064|  * Checks whether one of this entities turrets can perform the given action on the given target.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|6086|6086| 		let cmpUnitAI = Engine.QueryInterface(point.entity, IID_UnitAI);
|6087|6087| 		return cmpUnitAI && cmpUnitAI["Can" + action](target, types);
|6088|6088| 	});
|6089|    |-}
|    |6089|+};
|6090|6090| 
|6091|6091| UnitAI.prototype.CanAttack = function(target, types)
|6092|6092| {
|    | [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
|6286|6286| 	return cmpPack && cmpPack.IsPacking();
|6287|6287| };
|6288|6288| 
|6289|    |-//// Formation specific functions ////
|    |6289|+// // Formation specific functions ////
|6290|6290| 
|6291|6291| UnitAI.prototype.IsAttackingAsFormation = function()
|6292|6292| {
|    | [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
|6291|6291| UnitAI.prototype.IsAttackingAsFormation = function()
|6292|6292| {
|6293|6293| 	var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|6294|    |-	return cmpAttack && cmpAttack.CanAttackAsFormation()
|6295|    |-		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|    |6294|+	return cmpAttack && cmpAttack.CanAttackAsFormation() &&
|    |6295|+		this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6296|6296| };
|6297|6297| 
|6298|6298| //// 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
|6295|6295| 		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6296|6296| };
|6297|6297| 
|6298|    |-//// Animal specific functions ////
|    |6298|+// // Animal specific functions ////
|6299|6299| 
|6300|6300| UnitAI.prototype.MoveRandomly = function(distance)
|6301|6301| {

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

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4009| »   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
|4860| »   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
|4875| »   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
|4921| »   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
|4944| »   »   ····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
|2112| »   »   »   »   »   »   &&·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
|3147| »   »   »   »   »   this.SetAnimationVariant(this.formationAnimationVariant)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4877| »   »   &&·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
|4878| »   »   &&·(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
|5342| »   let·cmpAttack·=·Engine.QueryInterface(this.entity,·IID_Attack)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5476| »   let·cmpHeal·=·Engine.QueryInterface(this.entity,·IID_Heal)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5512| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5815| »   »   »   »   »   »   &&·!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
|5818| »   »   »   »   »   »   &&·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
|5831| »   var·targets·=·this.GetTargetsFromUnit();
|    | [NORMAL] JSHintBear:
|    | 'targets' is already defined.

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

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|5841| »   »   »   »   &&·!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
|5844| »   »   »   »   &&·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
|6061| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|6089| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|6295| »   »   &&·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/1900/display/redirect

Freagarach updated this revision to Diff 11948.EditedMay 21 2020, 10:00 AM
Freagarach marked an inline comment as done.
  • Rebased.
  • Use TryMatchTargetSpeed from rP23682.
  • Follow at an explicit range.

(Would be nice to be able to have an entity as a target for UnitMotion.)

Freagarach added inline comments.May 21 2020, 11:10 AM
binaries/data/mods/public/simulation/components/UnitAI.js
1671

Not needed.

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (no-multi-spaces):
|    | Multiple spaces found before 'state'.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
| 298| 298| 		if (!g_AvailableFormations.has(unitEntStates[0].player))
| 299| 299| 			g_AvailableFormations.set(unitEntStates[0].player, Engine.GuiInterfaceCall("GetAvailableFormations", unitEntStates[0].player));
| 300| 300| 
| 301|    |-		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity &&  state.identity.formations.indexOf(formation) != -1));
|    | 301|+		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity && state.identity.formations.indexOf(formation) != -1));
| 302| 302| 	},
| 303| 303| 	"setupButton": function(data)
| 304| 304| 	{
|    | [NORMAL] ESLintBear (space-before-function-paren):
|    | Unexpected space before function parentheses.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
| 761| 761| 				addResearchToQueue(data.item.researchFacilityId, t);
| 762| 762| 			})(tech);
| 763| 763| 
| 764|    |-			button.onPressRight = (t => function () {
|    | 764|+			button.onPressRight = (t => function() {
| 765| 765| 				showTemplateDetails(
| 766| 766| 					t,
| 767| 767| 					GetTemplateData(data.unitEntStates.find(state => state.id == data.item.researchFacilityId).template).nativeCiv);

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

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

binaries/data/mods/public/gui/session/selection_panels.js
| 729| »   »   »   »   »   »   switch·(entity.check)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 363| 363| 	if (cmpGarrisonable)
| 364| 364| 		ret.canGarrison = {
| 365| 365| 			"unloadable": cmpGarrisonable.IsUnloadable()
| 366|    |-		}
|    | 366|+		};
| 367| 367| 
| 368| 368| 	let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
| 369| 369| 	if (cmpUnitAI)

binaries/data/mods/public/simulation/components/GuiInterface.js
| 366| »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'execute'.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
| 526| 526| 
| 527| 527| 	"cancel-setup-trade-route":
| 528| 528| 	{
| 529|    |-		"execute":function(target, action, selection, queued)
|    | 529|+		"execute": function(target, action, selection, queued)
| 530| 530| 		{
| 531| 531| 			Engine.PostNetworkCommand({
| 532| 532| 				"type": "cancel-setup-trade-route",
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
| 571| 571| 				"cursor": "action-cancel-setup-trade-route",
| 572| 572| 				"tooltip": actionInfo.tooltip,
| 573| 573| 				"target": target
| 574|    |-			}
|    | 574|+			};
| 575| 575| 		},
| 576| 576| 		"specificness": 2,
| 577| 577| 	},

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

binaries/data/mods/public/gui/session/unit_actions.js
| 574| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GarrisonHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GarrisonHolder.js
| 727| 727| 					let entIndex = this.entities.indexOf(point.entity);
| 728| 728| 					if (entIndex == -1)
| 729| 729| 						continue;
| 730|    |-					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
|    | 730|+					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership);
| 731| 731| 					if (cmpEntOwnership)
| 732| 732| 						cmpEntOwnership.SetOwner(msg.to);
| 733| 733| 					entities.splice(entIndex, 1);

binaries/data/mods/public/simulation/components/GarrisonHolder.js
| 730| »   »   »   »   »   let·cmpEntOwnership·=·Engine.QueryInterface(point.entity,·IID_Ownership)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [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
| 818| 818| 					this.FinishOrder();
| 819| 819| 					return;
| 820| 820| 				}
| 821|    |-				else
| 822|    |-				{
|    | 821|+				
| 823| 822| 					this.SetNextState("GARRISON.APPROACHING");
| 824| 823| 					return;
| 825|    |-				}
|    | 824|+				
| 826| 825| 			}
| 827| 826| 
| 828| 827| 			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
|1090|1090| 			},
|1091|1091| 		},
|1092|1092| 
|1093|    |-		"GARRISON":{
|    |1093|+		"GARRISON": {
|1094|1094| 			"APPROACHING": {
|1095|1095| 				"enter": function() {
|1096|1096| 					if (!this.MoveToGarrisonRange(this.order.data.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
|2106|2106| 
|2107|2107| 				"Attacked": function(msg) {
|2108|2108| 					// If we are capturing and are attacked by something that we would not capture, attack that entity instead
|2109|    |-					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force)
|2110|    |-						&& this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|    |2109|+					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force) &&
|    |2110|+						this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|2111|2111| 						this.RespondToTargetedEntities([msg.data.attacker]);
|2112|2112| 				},
|2113|2113| 			},
|    | [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
|2265|2265| 					"MovementUpdate": function(msg) {
|2266|2266| 						// If it looks like the path is failing, and we are close enough (3 tiles) from wanted range
|2267|2267| 						// stop anyways. This avoids pathing for an unreachable goal and reduces lag considerably.
|2268|    |-						if (msg.likelyFailure || 
|    |2268|+						if (msg.likelyFailure ||
|2269|2269| 							msg.obstructed && this.RelaxedMaxRangeCheck(this.order.data, this.order.data.max + this.DefaultRelaxedMaxRange) ||
|2270|2270| 							!msg.obstructed && this.CheckRange(this.order.data))
|2271|2271| 							this.FinishOrder();
|    | [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
|2907|2907| 					{
|2908|2908| 						// The building was already finished/fully repaired before we arrived;
|2909|2909| 						// let the ConstructionFinished handler handle this.
|2910|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2910|+						this.OnGlobalConstructionFinished({ "entity": this.repairTarget, "newentity": this.repairTarget});
|2911|2911| 						return true;
|2912|2912| 					}
|2913|2913| 
|    | [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
|2907|2907| 					{
|2908|2908| 						// The building was already finished/fully repaired before we arrived;
|2909|2909| 						// let the ConstructionFinished handler handle this.
|2910|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2910|+						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget });
|2911|2911| 						return true;
|2912|2912| 					}
|2913|2913| 
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3205|3205| 				this.StopTimer();
|3206|3206| 				this.ResetAnimation();
|3207|3207| 				if (this.formationAnimationVariant)
|3208|    |-					this.SetAnimationVariant(this.formationAnimationVariant)
|    |3208|+					this.SetAnimationVariant(this.formationAnimationVariant);
|3209|3209| 				else
|3210|3210| 					this.SetDefaultAnimationVariant();
|3211|3211| 				var cmpResistance = Engine.QueryInterface(this.entity, IID_Resistance);
|    | [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
|3431|3431| 		"COMBAT": "INDIVIDUAL.COMBAT", // reuse the same combat behaviour for animals
|3432|3432| 
|3433|3433| 		"WALKING": "INDIVIDUAL.WALKING",	// reuse the same walking behaviour for animals
|3434|    |-							// only used for domestic animals
|    |3434|+		// only used for domestic animals
|3435|3435| 
|3436|3436| 		// Reuse the same garrison behaviour for animals.
|3437|3437| 		"GARRISON": "INDIVIDUAL.GARRISON",
|    | [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
|3493|3493| 
|3494|3494| UnitAI.prototype.IsAnimal = function()
|3495|3495| {
|3496|    |-	return (this.template.NaturalBehaviour ? true : false);
|    |3496|+	return (!!this.template.NaturalBehaviour);
|3497|3497| };
|3498|3498| 
|3499|3499| 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
|3609|3609| 		{
|3610|3610| 			let index = this.GetCurrentState().indexOf(".");
|3611|3611| 			if (index != -1)
|3612|    |-				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0,index));
|    |3612|+				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0, index));
|3613|3613| 			this.Stop(false);
|3614|3614| 		}
|3615|3615| 
|    | [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
|3665|3665| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3666|3666| 			continue;
|3667|3667| 		if (i == 0)
|3668|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3668|+			this.UnitFsm.ProcessMessage(this, { "type": "PickupCanceled", "data": msg});
|3669|3669| 		else
|3670|3670| 			this.orderQueue.splice(i, 1);
|3671|3671| 		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
|3665|3665| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3666|3666| 			continue;
|3667|3667| 		if (i == 0)
|3668|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3668|+			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg });
|3669|3669| 		else
|3670|3670| 			this.orderQueue.splice(i, 1);
|3671|3671| 		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
|3752|3752| };
|3753|3753| 
|3754|3754| 
|3755|    |-//// FSM linkage functions ////
|    |3755|+// // FSM linkage functions ////
|3756|3756| 
|3757|3757| // Setting the next state to the current state will leave/re-enter the top-most substate.
|3758|3758| 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
|3923|3923| 				continue;
|3924|3924| 			if (this.orderQueue[i].type == type)
|3925|3925| 				continue;
|3926|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3926|+			this.orderQueue.splice(i, 0, { "type": type, "data": data});
|3927|3927| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3928|3928| 			return;
|3929|3929| 		}
|    | [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
|3923|3923| 				continue;
|3924|3924| 			if (this.orderQueue[i].type == type)
|3925|3925| 				continue;
|3926|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3926|+			this.orderQueue.splice(i, 0, {"type": type, "data": data });
|3927|3927| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3928|3928| 			return;
|3929|3929| 		}
|    | [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
|4165|4165| 	if (data.timerRepeat === undefined)
|4166|4166| 		this.timer = undefined;
|4167|4167| 
|4168|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4168|+	this.UnitFsm.ProcessMessage(this, { "type": "Timer", "data": data, "lateness": lateness});
|4169|4169| };
|4170|4170| 
|4171|4171| /**
|    | [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
|4165|4165| 	if (data.timerRepeat === undefined)
|4166|4166| 		this.timer = undefined;
|4167|4167| 
|4168|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4168|+	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness });
|4169|4169| };
|4170|4170| 
|4171|4171| /**
|    | [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
|4210|4210| 	// TODO: This is a bit inefficient since every unit listens to every
|4211|4211| 	// construction message - ideally we could scope it to only the one we're building
|4212|4212| 
|4213|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4213|+	this.UnitFsm.ProcessMessage(this, { "type": "ConstructionFinished", "data": msg});
|4214|4214| };
|4215|4215| 
|4216|4216| 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
|4210|4210| 	// TODO: This is a bit inefficient since every unit listens to every
|4211|4211| 	// construction message - ideally we could scope it to only the one we're building
|4212|4212| 
|4213|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4213|+	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg });
|4214|4214| };
|4215|4215| 
|4216|4216| 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
|4241|4241| 	if (msg.fromStatusEffect)
|4242|4242| 		return;
|4243|4243| 
|4244|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4244|+	this.UnitFsm.ProcessMessage(this, { "type": "Attacked", "data": msg});
|4245|4245| };
|4246|4246| 
|4247|4247| 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
|4241|4241| 	if (msg.fromStatusEffect)
|4242|4242| 		return;
|4243|4243| 
|4244|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4244|+	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg });
|4245|4245| };
|4246|4246| 
|4247|4247| 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
|4246|4246| 
|4247|4247| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4248|4248| {
|4249|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4249|+	this.UnitFsm.ProcessMessage(this, { "type": "GuardedAttacked", "data": msg.data});
|4250|4250| };
|4251|4251| 
|4252|4252| 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
|4246|4246| 
|4247|4247| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4248|4248| {
|4249|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4249|+	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data });
|4250|4250| };
|4251|4251| 
|4252|4252| 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
|4251|4251| 
|4252|4252| UnitAI.prototype.OnHealthChanged = function(msg)
|4253|4253| {
|4254|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4254|+	this.UnitFsm.ProcessMessage(this, { "type": "HealthChanged", "from": msg.from, "to": msg.to});
|4255|4255| };
|4256|4256| 
|4257|4257| 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
|4251|4251| 
|4252|4252| UnitAI.prototype.OnHealthChanged = function(msg)
|4253|4253| {
|4254|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4254|+	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to });
|4255|4255| };
|4256|4256| 
|4257|4257| 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
|4257|4257| UnitAI.prototype.OnRangeUpdate = function(msg)
|4258|4258| {
|4259|4259| 	if (msg.tag == this.losRangeQuery)
|4260|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |4260|+		this.UnitFsm.ProcessMessage(this, { "type": "LosRangeUpdate", "data": msg});
|4261|4261| 	else if (msg.tag == this.losHealRangeQuery)
|4262|4262| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|4263|4263| };
|    | [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
|4257|4257| UnitAI.prototype.OnRangeUpdate = function(msg)
|4258|4258| {
|4259|4259| 	if (msg.tag == this.losRangeQuery)
|4260|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |4260|+		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg });
|4261|4261| 	else if (msg.tag == this.losHealRangeQuery)
|4262|4262| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|4263|4263| };
|    | [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
|4259|4259| 	if (msg.tag == this.losRangeQuery)
|4260|4260| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|4261|4261| 	else if (msg.tag == this.losHealRangeQuery)
|4262|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |4262|+		this.UnitFsm.ProcessMessage(this, { "type": "LosHealRangeUpdate", "data": msg});
|4263|4263| };
|4264|4264| 
|4265|4265| 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
|4259|4259| 	if (msg.tag == this.losRangeQuery)
|4260|4260| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|4261|4261| 	else if (msg.tag == this.losHealRangeQuery)
|4262|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |4262|+		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg });
|4263|4263| };
|4264|4264| 
|4265|4265| 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
|4264|4264| 
|4265|4265| UnitAI.prototype.OnPackFinished = function(msg)
|4266|4266| {
|4267|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4267|+	this.UnitFsm.ProcessMessage(this, { "type": "PackFinished", "packed": msg.packed});
|4268|4268| };
|4269|4269| 
|4270|4270| //// 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
|4264|4264| 
|4265|4265| UnitAI.prototype.OnPackFinished = function(msg)
|4266|4266| {
|4267|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4267|+	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed });
|4268|4268| };
|4269|4269| 
|4270|4270| //// 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
|4267|4267| 	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|4268|4268| };
|4269|4269| 
|4270|    |-//// Helper functions to be called by the FSM ////
|    |4270|+// // Helper functions to be called by the FSM ////
|4271|4271| 
|4272|4272| UnitAI.prototype.GetWalkSpeed = function()
|4273|4273| {
|    | [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
|4979|4979| UnitAI.prototype.AttackEntityInZone = function(ents)
|4980|4980| {
|4981|4981| 	var target = ents.find(target =>
|4982|    |-		this.CanAttack(target)
|4983|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|    |4982|+		this.CanAttack(target) &&
|    |4983|+		this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4984|4984| 		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4985|4985| 	);
|4986|4986| 	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
|4980|4980| {
|4981|4981| 	var target = ents.find(target =>
|4982|4982| 		this.CanAttack(target)
|4983|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4984|    |-		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|    |4983|+		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true)) &&
|    |4984|+		(this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4985|4985| 	);
|4986|4986| 	if (!target)
|4987|4987| 		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
|5046|5046| 	// If we are guarding/escorting, don't abandon as long as the guarded unit is in target range of the attacker
|5047|5047| 	if (this.isGuardOf)
|5048|5048| 	{
|5049|    |-		var cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |5049|+		var cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|5050|5050| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5051|5051| 		if (cmpUnitAI && cmpAttack &&
|5052|5052| 		    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
|5050|5050| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5051|5051| 		if (cmpUnitAI && cmpAttack &&
|5052|5052| 		    cmpAttack.GetAttackTypes().some(type => cmpUnitAI.CheckTargetAttackRange(this.isGuardOf, type)))
|5053|    |-				return false;
|    |5053|+			return false;
|5054|5054| 	}
|5055|5055| 
|5056|5056| 	// 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
|5088|5088| 	// If we are guarding/escorting, chase at least as long as the guarded unit is in target range of the attacker
|5089|5089| 	if (this.isGuardOf)
|5090|5090| 	{
|5091|    |-		let cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |5091|+		let cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|5092|5092| 		let cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5093|5093| 		if (cmpUnitAI && cmpAttack &&
|5094|5094| 		    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
|5101|5101| 	return false;
|5102|5102| };
|5103|5103| 
|5104|    |-//// External interface functions ////
|    |5104|+// // External interface functions ////
|5105|5105| 
|5106|5106| UnitAI.prototype.SetFormationController = function(ent)
|5107|5107| {
|    | [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
|5257|5257| 	{
|5258|5258| 		if (this.isGuardOf == target && this.order && this.order.type == "Guard")
|5259|5259| 			return;
|5260|    |-		else
|5261|    |-			this.RemoveGuard();
|    |5260|+		this.RemoveGuard();
|5262|5261| 	}
|5263|5262| 
|5264|5263| 	this.AddOrder("Guard", { "target": target, "force": false }, queued);
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5447|5447| 
|5448|5448| 	// This is the case when an entity that has visibly garrisoned entities that can
|5449|5449| 	// attack, but the entity itself can't attack.
|5450|    |-	let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack)
|    |5450|+	let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|5451|5451| 	if (!cmpAttack)
|5452|5452| 	{
|5453|5453| 		order.type = "Attack";
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5581|5581| 
|5582|5582| 	// This is the case when an entity that has visibly garrisoned entities that can
|5583|5583| 	// heal, but the entity itself can't heal.
|5584|    |-	let cmpHeal = Engine.QueryInterface(this.entity, IID_Heal)
|    |5584|+	let cmpHeal = Engine.QueryInterface(this.entity, IID_Heal);
|5585|5585| 	if (!cmpHeal)
|5586|5586| 	{
|5587|5587| 		order.type = "Heal";
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5617|5617| 
|5618|5618| 	if (this.IsFormationController())
|5619|5619| 		this.CallMemberFunction("CancelSetupTradeRoute", [target]);
|5620|    |-}
|    |5620|+};
|5621|5621| /**
|5622|5622|  * Adds trade order to the queue. Either walk to the first market, or
|5623|5623|  * start a new route. Not forced, so it can be interrupted by attacks.
|    | [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
|5638|5638| 	    this.workOrders.length && this.workOrders[0].type == "Trade")
|5639|5639| 	{
|5640|5640| 		let cmpTrader = Engine.QueryInterface(this.entity, IID_Trader);
|5641|    |-		if (cmpTrader.HasBothMarkets() && 
|    |5641|+		if (cmpTrader.HasBothMarkets() &&
|5642|5642| 		   (cmpTrader.GetFirstMarket() == target && cmpTrader.GetSecondMarket() == source ||
|5643|5643| 		    cmpTrader.GetFirstMarket() == source && cmpTrader.GetSecondMarket() == target))
|5644|5644| 		{
|    | [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
|5919|5919| 				{
|5920|5920| 					var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5921|5921| 					var targetClasses = this.order.data.targetClasses;
|5922|    |-					if (targetClasses.attack && cmpIdentity
|5923|    |-						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5922|+					if (targetClasses.attack && cmpIdentity &&
|    |5923|+						!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5924|5924| 						continue;
|5925|5925| 					if (targetClasses.avoid && cmpIdentity
|5926|5926| 						&& 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
|5922|5922| 					if (targetClasses.attack && cmpIdentity
|5923|5923| 						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5924|5924| 						continue;
|5925|    |-					if (targetClasses.avoid && cmpIdentity
|5926|    |-						&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5925|+					if (targetClasses.avoid && cmpIdentity &&
|    |5926|+						MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5927|5927| 						continue;
|5928|5928| 					// Only used by the AIs to prevent some choices of targets
|5929|5929| 					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
|5945|5945| 		{
|5946|5946| 			var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5947|5947| 			var targetClasses = this.order.data.targetClasses;
|5948|    |-			if (cmpIdentity && targetClasses.attack
|5949|    |-				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5948|+			if (cmpIdentity && targetClasses.attack &&
|    |5949|+				!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5950|5950| 				continue;
|5951|5951| 			if (cmpIdentity && targetClasses.avoid
|5952|5952| 				&& 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
|5948|5948| 			if (cmpIdentity && targetClasses.attack
|5949|5949| 				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5950|5950| 				continue;
|5951|    |-			if (cmpIdentity && targetClasses.avoid
|5952|    |-				&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5951|+			if (cmpIdentity && targetClasses.avoid &&
|    |5952|+				MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5953|5953| 				continue;
|5954|5954| 			// Only used by the AIs to prevent some choices of targets
|5955|5955| 			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
|6108|6108| 
|6109|6109| UnitAI.prototype.SetHeldPosition = function(x, z)
|6110|6110| {
|6111|    |-	this.heldPosition = {"x": x, "z": z};
|    |6111|+	this.heldPosition = { "x": x, "z": z};
|6112|6112| };
|6113|6113| 
|6114|6114| 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
|6108|6108| 
|6109|6109| UnitAI.prototype.SetHeldPosition = function(x, z)
|6110|6110| {
|6111|    |-	this.heldPosition = {"x": x, "z": z};
|    |6111|+	this.heldPosition = {"x": x, "z": z };
|6112|6112| };
|6113|6113| 
|6114|6114| 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
|6135|6135| 	return false;
|6136|6136| };
|6137|6137| 
|6138|    |-//// Helper functions ////
|    |6138|+// // Helper functions ////
|6139|6139| 
|6140|6140| /**
|6141|6141|  * General getter for ranges.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|6183|6183| 	}
|6184|6184| 
|6185|6185| 	return result.max == -1 ? undefined : result;
|6186|    |-}
|    |6186|+};
|6187|6187| 
|6188|6188| /**
|6189|6189|  * Checks whether one of this entities turrets can perform the given action on the given target.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|6211|6211| 		let cmpUnitAI = Engine.QueryInterface(point.entity, IID_UnitAI);
|6212|6212| 		return cmpUnitAI && cmpUnitAI["Can" + action](target, types);
|6213|6213| 	});
|6214|    |-}
|    |6214|+};
|6215|6215| 
|6216|6216| UnitAI.prototype.CanAttack = function(target, types)
|6217|6217| {
|    | [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
|6380|6380| 	return cmpPack && cmpPack.IsPacking();
|6381|6381| };
|6382|6382| 
|6383|    |-//// Formation specific functions ////
|    |6383|+// // Formation specific functions ////
|6384|6384| 
|6385|6385| UnitAI.prototype.IsAttackingAsFormation = function()
|6386|6386| {
|    | [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
|6385|6385| UnitAI.prototype.IsAttackingAsFormation = function()
|6386|6386| {
|6387|6387| 	var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|6388|    |-	return cmpAttack && cmpAttack.CanAttackAsFormation()
|6389|    |-		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|    |6388|+	return cmpAttack && cmpAttack.CanAttackAsFormation() &&
|    |6389|+		this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6390|6390| };
|6391|6391| 
|6392|6392| //// 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
|6389|6389| 		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6390|6390| };
|6391|6391| 
|6392|    |-//// Animal specific functions ////
|    |6392|+// // Animal specific functions ////
|6393|6393| 
|6394|6394| UnitAI.prototype.MoveRandomly = function(distance)
|6395|6395| {

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

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4070| »   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
|4966| »   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
|4981| »   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
|5029| »   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
|5052| »   »   ····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
|2110| »   »   »   »   »   »   &&·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
|3208| »   »   »   »   »   this.SetAnimationVariant(this.formationAnimationVariant)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4983| »   »   &&·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
|4984| »   »   &&·(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
|5450| »   let·cmpAttack·=·Engine.QueryInterface(this.entity,·IID_Attack)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5584| »   let·cmpHeal·=·Engine.QueryInterface(this.entity,·IID_Heal)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5620| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5923| »   »   »   »   »   »   &&·!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
|5926| »   »   »   »   »   »   &&·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
|5939| »   var·targets·=·this.GetTargetsFromUnit();
|    | [NORMAL] JSHintBear:
|    | 'targets' is already defined.

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

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|5949| »   »   »   »   &&·!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
|5952| »   »   »   »   &&·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
|6186| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|6214| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|6389| »   »   &&·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/2183/display/redirect

Some of these comments might be completely off-base - this diff has a long history now and I don't know all of it, so my apologies in advance if that happens.

It seems there are several unrelated changes in the current diff.


I wonder if this wouldn't be much easier if you added a "TurretHolder" component, with "Turreting points" in place of VisibleGarrisoning points. The two concepts seem largely orthogonal to me (a tank's cannon isn't garrisoned inside the tank). The code in GarrisonHolder strikes me as kind of wonky because of that, and several properties that seem more like properties of the "turreting point" are given to then entity and/or the garrisoning on holder.

binaries/data/mods/public/gui/session/unit_actions.js
1134

That and above also seems unrelated.

binaries/data/mods/public/simulation/components/Attack.js
340 ↗(On Diff #11948)

seems unrelated

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

Which components? Whose?
It is better to state the requirement & not the fact that these requirements are met in ownership-change (or at least, both).

75

Is there a reason why? Is it broken otherwise?

If this is just stating a fact, it seems rather useless.
The gotcha here is that this creates a new Entity, and sets it to the TurretingPoint/VisibleGarrisonPoint/....

98

The hard dependency on Ownership seems un-necessary here.

151–152

Seems like this function should be split in two to me, Garrison and SetTurret or something.

202

Many of those seem like they would no longer apply to a turret, such as the health check.

It seems like you want something more explicit than forced, such as a way to skip health checks, adding to the # of garrisoned units (a turret in a tank takes no room, arguably). Perhaps the whole thing must be refactored more to make sense.

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

These changes seem unrelated?

binaries/data/mods/public/simulation/templates/special/filter/fixedgarrison.xml
9 ↗(On Diff #11948)

tbh these seem more like properties of the turreting point.

Freagarach marked 3 inline comments as done.May 22 2020, 2:14 PM
Freagarach added inline comments.
binaries/data/mods/public/gui/session/unit_actions.js
1134

The above is to allowe healers as turrets.
This is so that one can't think that a turret can be ungarrisoned.

binaries/data/mods/public/simulation/components/GarrisonHolder.js
98

But it should have the component at least?

151–152
202

There are some separate diffs of mine concerning garrisoning.

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

Same as above, we allow to have healers as turrets now.

binaries/data/mods/public/simulation/templates/special/filter/fixedgarrison.xml
9 ↗(On Diff #11948)

Not sure actually. One could argue for both ^^

wraitii added inline comments.May 22 2020, 2:21 PM
binaries/data/mods/public/gui/session/unit_actions.js
1134

Ah, yeah. The above sounds hacky then, this is fine.

binaries/data/mods/public/simulation/components/GarrisonHolder.js
98

I don't really see why. If you don't have an owner but neither does your turret, is that a problem?

wraitii added inline comments.May 22 2020, 2:24 PM
binaries/data/mods/public/simulation/templates/special/filter/fixedgarrison.xml
9 ↗(On Diff #11948)

One can argue for anything :p .

I don't see why you'd force this on a per-entity basis (forcing you, further, to filter the template, and thus Transform the unit if it came from elsewhere) instead of a per-turreting point basis. The effect would be the same, but you'd gain more flexibility.

To go back to the tank example, a turreting point for the main cannon could be swappable on some tanks and not swappable on others. A horse can be left by units, a Mecha maybe not.

That doesn't mean you can't also have entity-related checks, obviously (a tank cannon, on its own, probably can't be "ungarrisoned" in the traditional sense), but I don't see the point of such a hard requirement.

I don't think it really makes the coding easier either.

Freagarach planned changes to this revision.EditedMay 22 2020, 2:41 PM
Freagarach marked 4 inline comments as done.

Needs more splitting and rewriting. Yay \o/
(See IRC)

Freagarach updated this revision to Diff 12817.Jul 20 2020, 4:24 PM
Freagarach marked 3 inline comments as done.
Freagarach retitled this revision from Turrets and/or sub-units. to [WIP] - Turrets and/or sub-units..
Freagarach edited the summary of this revision. (Show Details)

Rebased.

Note that one cannot load a map with Boudicca anymore, since it does not know about InitGarrison and will create another turret.

Freagarach added inline comments.Jul 20 2020, 4:26 PM
binaries/data/mods/public/simulation/templates/units/brit_hero_boudicca.xml
36

Note one can use a fixed template and omit the GarrisonHolder.

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

Linter detected issues:
Executing section Source...

source/simulation2/components/CCmpPosition.cpp
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"
Executing section JS...
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 264| 264| 					else
| 265| 265| 						Engine.DestroyEntity(point.entity);
| 266| 266| 				}
| 267|    |-		else
|    | 267|+				else
| 268| 268| 		{
| 269| 269| 			// If the turret point is forced and the garrisonholder did not die,
| 270| 270| 			// transfer the turrets ownership as well.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 265| 265| 						Engine.DestroyEntity(point.entity);
| 266| 266| 				}
| 267| 267| 		else
| 268|    |-		{
|    | 268|+				{
| 269| 269| 			// If the turret point is forced and the garrisonholder did not die,
| 270| 270| 			// transfer the turrets ownership as well.
| 271| 271| 			for (let point of this.turretPoints)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 266| 266| 				}
| 267| 267| 		else
| 268| 268| 		{
| 269|    |-			// If the turret point is forced and the garrisonholder did not die,
|    | 269|+					// If the turret point is forced and the garrisonholder did not die,
| 270| 270| 			// transfer the turrets ownership as well.
| 271| 271| 			for (let point of this.turretPoints)
| 272| 272| 				if (point.entity != null && point.fixed)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 267| 267| 		else
| 268| 268| 		{
| 269| 269| 			// If the turret point is forced and the garrisonholder did not die,
| 270|    |-			// transfer the turrets ownership as well.
|    | 270|+					// transfer the turrets ownership as well.
| 271| 271| 			for (let point of this.turretPoints)
| 272| 272| 				if (point.entity != null && point.fixed)
| 273| 273| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 268| 268| 		{
| 269| 269| 			// If the turret point is forced and the garrisonholder did not die,
| 270| 270| 			// transfer the turrets ownership as well.
| 271|    |-			for (let point of this.turretPoints)
|    | 271|+					for (let point of this.turretPoints)
| 272| 272| 				if (point.entity != null && point.fixed)
| 273| 273| 				{
| 274| 274| 					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 269| 269| 			// If the turret point is forced and the garrisonholder did not die,
| 270| 270| 			// transfer the turrets ownership as well.
| 271| 271| 			for (let point of this.turretPoints)
| 272|    |-				if (point.entity != null && point.fixed)
|    | 272|+						if (point.entity != null && point.fixed)
| 273| 273| 				{
| 274| 274| 					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
| 275| 275| 					if (cmpEntOwnership)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 270| 270| 			// transfer the turrets ownership as well.
| 271| 271| 			for (let point of this.turretPoints)
| 272| 272| 				if (point.entity != null && point.fixed)
| 273|    |-				{
|    | 273|+						{
| 274| 274| 					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
| 275| 275| 					if (cmpEntOwnership)
| 276| 276| 						cmpEntOwnership.SetOwner(msg.to);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 7 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 271| 271| 			for (let point of this.turretPoints)
| 272| 272| 				if (point.entity != null && point.fixed)
| 273| 273| 				{
| 274|    |-					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
|    | 274|+							let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
| 275| 275| 					if (cmpEntOwnership)
| 276| 276| 						cmpEntOwnership.SetOwner(msg.to);
| 277| 277| 				}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 271| 271| 			for (let point of this.turretPoints)
| 272| 272| 				if (point.entity != null && point.fixed)
| 273| 273| 				{
| 274|    |-					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
|    | 274|+					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership);
| 275| 275| 					if (cmpEntOwnership)
| 276| 276| 						cmpEntOwnership.SetOwner(msg.to);
| 277| 277| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 7 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 272| 272| 				if (point.entity != null && point.fixed)
| 273| 273| 				{
| 274| 274| 					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
| 275|    |-					if (cmpEntOwnership)
|    | 275|+							if (cmpEntOwnership)
| 276| 276| 						cmpEntOwnership.SetOwner(msg.to);
| 277| 277| 				}
| 278| 278| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 8 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 273| 273| 				{
| 274| 274| 					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
| 275| 275| 					if (cmpEntOwnership)
| 276|    |-						cmpEntOwnership.SetOwner(msg.to);
|    | 276|+								cmpEntOwnership.SetOwner(msg.to);
| 277| 277| 				}
| 278| 278| 		}
| 279| 279| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 274| 274| 					let cmpEntOwnership = Engine.QueryInterface(point.entity, IID_Ownership)
| 275| 275| 					if (cmpEntOwnership)
| 276| 276| 						cmpEntOwnership.SetOwner(msg.to);
| 277|    |-				}
|    | 277|+						}
| 278| 278| 		}
| 279| 279| 
| 280| 280| 		if (msg.from == INVALID_PLAYER)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 2.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/TurretHolder.js
| 275| 275| 					if (cmpEntOwnership)
| 276| 276| 						cmpEntOwnership.SetOwner(msg.to);
| 277| 277| 				}
| 278|    |-		}
|    | 278|+				}
| 279| 279| 
| 280| 280| 		if (msg.from == INVALID_PLAYER)
| 281| 281| 			this.AutogarrisonTurrets();

binaries/data/mods/public/simulation/components/TurretHolder.js
| 271| »   »   »   for·(let·point·of·this.turretPoints)
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'point' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/TurretHolder.js
| 274| »   »   »   »   »   let·cmpEntOwnership·=·Engine.QueryInterface(point.entity,·IID_Ownership)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [NORMAL] ESLintBear (key-spacing):
|    | Missing space before value for key 'execute'.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
| 541| 541| 
| 542| 542| 	"cancel-setup-trade-route":
| 543| 543| 	{
| 544|    |-		"execute":function(target, action, selection, queued)
|    | 544|+		"execute": function(target, action, selection, queued)
| 545| 545| 		{
| 546| 546| 			Engine.PostNetworkCommand({
| 547| 547| 				"type": "cancel-setup-trade-route",
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/unit_actions.js
| 586| 586| 				"cursor": "action-cancel-setup-trade-route",
| 587| 587| 				"tooltip": actionInfo.tooltip,
| 588| 588| 				"target": target
| 589|    |-			}
|    | 589|+			};
| 590| 590| 		},
| 591| 591| 		"specificness": 2,
| 592| 592| 	},

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

binaries/data/mods/public/gui/session/unit_actions.js
| 589| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
|    | [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
| 823| 823| 					this.FinishOrder();
| 824| 824| 					return;
| 825| 825| 				}
| 826|    |-				else
| 827|    |-				{
|    | 826|+				
| 828| 827| 					this.SetNextState("GARRISON.APPROACHING");
| 829| 828| 					return;
| 830|    |-				}
|    | 829|+				
| 831| 830| 			}
| 832| 831| 
| 833| 832| 			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
|1087|1087| 			},
|1088|1088| 		},
|1089|1089| 
|1090|    |-		"GARRISON":{
|    |1090|+		"GARRISON": {
|1091|1091| 			"APPROACHING": {
|1092|1092| 				"enter": function() {
|1093|1093| 					if (!this.MoveToGarrisonRange(this.order.data.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
|2131|2131| 
|2132|2132| 				"Attacked": function(msg) {
|2133|2133| 					// If we are capturing and are attacked by something that we would not capture, attack that entity instead
|2134|    |-					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force)
|2135|    |-						&& this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|    |2134|+					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force) &&
|    |2135|+						this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|2136|2136| 						this.RespondToTargetedEntities([msg.data.attacker]);
|2137|2137| 				},
|2138|2138| 			},
|    | [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
|2290|2290| 					"MovementUpdate": function(msg) {
|2291|2291| 						// If it looks like the path is failing, and we are close enough (3 tiles) from wanted range
|2292|2292| 						// stop anyways. This avoids pathing for an unreachable goal and reduces lag considerably.
|2293|    |-						if (msg.likelyFailure || 
|    |2293|+						if (msg.likelyFailure ||
|2294|2294| 							msg.obstructed && this.RelaxedMaxRangeCheck(this.order.data, this.order.data.max + this.DefaultRelaxedMaxRange) ||
|2295|2295| 							!msg.obstructed && this.CheckRange(this.order.data))
|2296|2296| 							this.FinishOrder();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 7 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|2593|2593| 
|2594|2594| 								return type.specific == resourceType.specific &&
|2595|2595| 								    (type.specific != "meat" || resourceTemplate == template);
|2596|    |-						});
|    |2596|+							});
|2597|2597| 
|2598|2598| 						if (nearbyResource)
|2599|2599| 						{
|    | [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
|2925|2925| 					{
|2926|2926| 						// The building was already finished/fully repaired before we arrived;
|2927|2927| 						// let the ConstructionFinished handler handle this.
|2928|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2928|+						this.OnGlobalConstructionFinished({ "entity": this.repairTarget, "newentity": this.repairTarget});
|2929|2929| 						return true;
|2930|2930| 					}
|2931|2931| 
|    | [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
|2925|2925| 					{
|2926|2926| 						// The building was already finished/fully repaired before we arrived;
|2927|2927| 						// let the ConstructionFinished handler handle this.
|2928|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2928|+						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget });
|2929|2929| 						return true;
|2930|2930| 					}
|2931|2931| 
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|3215|3215| 				this.StopTimer();
|3216|3216| 				this.ResetAnimation();
|3217|3217| 				if (this.formationAnimationVariant)
|3218|    |-					this.SetAnimationVariant(this.formationAnimationVariant)
|    |3218|+					this.SetAnimationVariant(this.formationAnimationVariant);
|3219|3219| 				else
|3220|3220| 					this.SetDefaultAnimationVariant();
|3221|3221| 				var cmpResistance = Engine.QueryInterface(this.entity, IID_Resistance);
|    | [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
|3441|3441| 		"COMBAT": "INDIVIDUAL.COMBAT", // reuse the same combat behaviour for animals
|3442|3442| 
|3443|3443| 		"WALKING": "INDIVIDUAL.WALKING",	// reuse the same walking behaviour for animals
|3444|    |-							// only used for domestic animals
|    |3444|+		// only used for domestic animals
|3445|3445| 
|3446|3446| 		// Reuse the same garrison behaviour for animals.
|3447|3447| 		"GARRISON": "INDIVIDUAL.GARRISON",
|    | [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
|3491|3491| 
|3492|3492| UnitAI.prototype.IsAnimal = function()
|3493|3493| {
|3494|    |-	return (this.template.NaturalBehaviour ? true : false);
|    |3494|+	return (!!this.template.NaturalBehaviour);
|3495|3495| };
|3496|3496| 
|3497|3497| 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
|3631|3631| 		{
|3632|3632| 			let index = this.GetCurrentState().indexOf(".");
|3633|3633| 			if (index != -1)
|3634|    |-				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0,index));
|    |3634|+				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0, index));
|3635|3635| 			this.Stop(false);
|3636|3636| 		}
|3637|3637| 
|    | [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
|3687|3687| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3688|3688| 			continue;
|3689|3689| 		if (i == 0)
|3690|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3690|+			this.UnitFsm.ProcessMessage(this, { "type": "PickupCanceled", "data": msg});
|3691|3691| 		else
|3692|3692| 			this.orderQueue.splice(i, 1);
|3693|3693| 		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
|3687|3687| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3688|3688| 			continue;
|3689|3689| 		if (i == 0)
|3690|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3690|+			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg });
|3691|3691| 		else
|3692|3692| 			this.orderQueue.splice(i, 1);
|3693|3693| 		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
|3774|3774| };
|3775|3775| 
|3776|3776| 
|3777|    |-//// FSM linkage functions ////
|    |3777|+// // FSM linkage functions ////
|3778|3778| 
|3779|3779| // Setting the next state to the current state will leave/re-enter the top-most substate.
|3780|3780| 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
|3947|3947| 				continue;
|3948|3948| 			if (this.orderQueue[i].type == type)
|3949|3949| 				continue;
|3950|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3950|+			this.orderQueue.splice(i, 0, { "type": type, "data": data});
|3951|3951| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3952|3952| 			return;
|3953|3953| 		}
|    | [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
|3947|3947| 				continue;
|3948|3948| 			if (this.orderQueue[i].type == type)
|3949|3949| 				continue;
|3950|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3950|+			this.orderQueue.splice(i, 0, {"type": type, "data": data });
|3951|3951| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3952|3952| 			return;
|3953|3953| 		}
|    | [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
|4188|4188| 	if (data.timerRepeat === undefined)
|4189|4189| 		this.timer = undefined;
|4190|4190| 
|4191|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4191|+	this.UnitFsm.ProcessMessage(this, { "type": "Timer", "data": data, "lateness": lateness});
|4192|4192| };
|4193|4193| 
|4194|4194| /**
|    | [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
|4188|4188| 	if (data.timerRepeat === undefined)
|4189|4189| 		this.timer = undefined;
|4190|4190| 
|4191|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4191|+	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness });
|4192|4192| };
|4193|4193| 
|4194|4194| /**
|    | [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
|4233|4233| 	// TODO: This is a bit inefficient since every unit listens to every
|4234|4234| 	// construction message - ideally we could scope it to only the one we're building
|4235|4235| 
|4236|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4236|+	this.UnitFsm.ProcessMessage(this, { "type": "ConstructionFinished", "data": msg});
|4237|4237| };
|4238|4238| 
|4239|4239| 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
|4233|4233| 	// TODO: This is a bit inefficient since every unit listens to every
|4234|4234| 	// construction message - ideally we could scope it to only the one we're building
|4235|4235| 
|4236|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4236|+	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg });
|4237|4237| };
|4238|4238| 
|4239|4239| 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
|4272|4272| 	if (msg.fromStatusEffect)
|4273|4273| 		return;
|4274|4274| 
|4275|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4275|+	this.UnitFsm.ProcessMessage(this, { "type": "Attacked", "data": msg});
|4276|4276| };
|4277|4277| 
|4278|4278| 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
|4272|4272| 	if (msg.fromStatusEffect)
|4273|4273| 		return;
|4274|4274| 
|4275|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4275|+	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg });
|4276|4276| };
|4277|4277| 
|4278|4278| 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
|4277|4277| 
|4278|4278| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4279|4279| {
|4280|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4280|+	this.UnitFsm.ProcessMessage(this, { "type": "GuardedAttacked", "data": msg.data});
|4281|4281| };
|4282|4282| 
|4283|4283| 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
|4277|4277| 
|4278|4278| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4279|4279| {
|4280|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4280|+	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data });
|4281|4281| };
|4282|4282| 
|4283|4283| 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
|4282|4282| 
|4283|4283| UnitAI.prototype.OnHealthChanged = function(msg)
|4284|4284| {
|4285|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4285|+	this.UnitFsm.ProcessMessage(this, { "type": "HealthChanged", "from": msg.from, "to": msg.to});
|4286|4286| };
|4287|4287| 
|4288|4288| 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
|4282|4282| 
|4283|4283| UnitAI.prototype.OnHealthChanged = function(msg)
|4284|4284| {
|4285|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4285|+	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to });
|4286|4286| };
|4287|4287| 
|4288|4288| 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
|4288|4288| UnitAI.prototype.OnRangeUpdate = function(msg)
|4289|4289| {
|4290|4290| 	if (msg.tag == this.losRangeQuery)
|4291|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |4291|+		this.UnitFsm.ProcessMessage(this, { "type": "LosRangeUpdate", "data": msg});
|4292|4292| 	else if (msg.tag == this.losHealRangeQuery)
|4293|4293| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|4294|4294| };
|    | [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
|4288|4288| UnitAI.prototype.OnRangeUpdate = function(msg)
|4289|4289| {
|4290|4290| 	if (msg.tag == this.losRangeQuery)
|4291|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|    |4291|+		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg });
|4292|4292| 	else if (msg.tag == this.losHealRangeQuery)
|4293|4293| 		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|4294|4294| };
|    | [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
|4290|4290| 	if (msg.tag == this.losRangeQuery)
|4291|4291| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|4292|4292| 	else if (msg.tag == this.losHealRangeQuery)
|4293|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |4293|+		this.UnitFsm.ProcessMessage(this, { "type": "LosHealRangeUpdate", "data": msg});
|4294|4294| };
|4295|4295| 
|4296|4296| 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
|4290|4290| 	if (msg.tag == this.losRangeQuery)
|4291|4291| 		this.UnitFsm.ProcessMessage(this, {"type": "LosRangeUpdate", "data": msg});
|4292|4292| 	else if (msg.tag == this.losHealRangeQuery)
|4293|    |-		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg});
|    |4293|+		this.UnitFsm.ProcessMessage(this, {"type": "LosHealRangeUpdate", "data": msg });
|4294|4294| };
|4295|4295| 
|4296|4296| 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
|4295|4295| 
|4296|4296| UnitAI.prototype.OnPackFinished = function(msg)
|4297|4297| {
|4298|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4298|+	this.UnitFsm.ProcessMessage(this, { "type": "PackFinished", "packed": msg.packed});
|4299|4299| };
|4300|4300| 
|4301|4301| //// 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
|4295|4295| 
|4296|4296| UnitAI.prototype.OnPackFinished = function(msg)
|4297|4297| {
|4298|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4298|+	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed });
|4299|4299| };
|4300|4300| 
|4301|4301| //// 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
|4298|4298| 	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|4299|4299| };
|4300|4300| 
|4301|    |-//// Helper functions to be called by the FSM ////
|    |4301|+// // Helper functions to be called by the FSM ////
|4302|4302| 
|4303|4303| UnitAI.prototype.GetWalkSpeed = function()
|4304|4304| {
|    | [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
|5028|5028| UnitAI.prototype.AttackEntityInZone = function(ents)
|5029|5029| {
|5030|5030| 	var target = ents.find(target =>
|5031|    |-		this.CanAttack(target)
|5032|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|    |5031|+		this.CanAttack(target) &&
|    |5032|+		this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|5033|5033| 		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|5034|5034| 	);
|5035|5035| 	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
|5029|5029| {
|5030|5030| 	var target = ents.find(target =>
|5031|5031| 		this.CanAttack(target)
|5032|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|5033|    |-		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|    |5032|+		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true)) &&
|    |5033|+		(this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|5034|5034| 	);
|5035|5035| 	if (!target)
|5036|5036| 		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
|5095|5095| 	// If we are guarding/escorting, don't abandon as long as the guarded unit is in target range of the attacker
|5096|5096| 	if (this.isGuardOf)
|5097|5097| 	{
|5098|    |-		var cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |5098|+		var cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|5099|5099| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5100|5100| 		if (cmpUnitAI && cmpAttack &&
|5101|5101| 		    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
|5099|5099| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5100|5100| 		if (cmpUnitAI && cmpAttack &&
|5101|5101| 		    cmpAttack.GetAttackTypes().some(type => cmpUnitAI.CheckTargetAttackRange(this.isGuardOf, type)))
|5102|    |-				return false;
|    |5102|+			return false;
|5103|5103| 	}
|5104|5104| 
|5105|5105| 	// 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
|5137|5137| 	// If we are guarding/escorting, chase at least as long as the guarded unit is in target range of the attacker
|5138|5138| 	if (this.isGuardOf)
|5139|5139| 	{
|5140|    |-		let cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |5140|+		let cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|5141|5141| 		let cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5142|5142| 		if (cmpUnitAI && cmpAttack &&
|5143|5143| 		    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
|5150|5150| 	return false;
|5151|5151| };
|5152|5152| 
|5153|    |-//// External interface functions ////
|    |5153|+// // External interface functions ////
|5154|5154| 
|5155|5155| UnitAI.prototype.SetFormationController = function(ent)
|5156|5156| {
|    | [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
|5306|5306| 	{
|5307|5307| 		if (this.isGuardOf == target && this.order && this.order.type == "Guard")
|5308|5308| 			return;
|5309|    |-		else
|5310|    |-			this.RemoveGuard();
|    |5309|+		this.RemoveGuard();
|5311|5310| 	}
|5312|5311| 
|5313|5312| 	this.AddOrder("Guard", { "target": target, "force": false }, queued);
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5496|5496| 
|5497|5497| 	// This is the case when an entity that has visibly garrisoned entities that can
|5498|5498| 	// attack, but the entity itself can't attack.
|5499|    |-	let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack)
|    |5499|+	let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|5500|5500| 	if (!cmpAttack)
|5501|5501| 	{
|5502|5502| 		order.type = "Attack";
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5633|5633| 
|5634|5634| 	// This is the case when an entity that has visibly garrisoned entities that can
|5635|5635| 	// heal, but the entity itself can't heal.
|5636|    |-	let cmpHeal = Engine.QueryInterface(this.entity, IID_Heal)
|    |5636|+	let cmpHeal = Engine.QueryInterface(this.entity, IID_Heal);
|5637|5637| 	if (!cmpHeal)
|5638|5638| 	{
|5639|5639| 		order.type = "Heal";
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|5669|5669| 
|5670|5670| 	if (this.IsFormationController())
|5671|5671| 		this.CallMemberFunction("CancelSetupTradeRoute", [target]);
|5672|    |-}
|    |5672|+};
|5673|5673| /**
|5674|5674|  * Adds trade order to the queue. Either walk to the first market, or
|5675|5675|  * start a new route. Not forced, so it can be interrupted by attacks.
|    | [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
|5690|5690| 	    this.workOrders.length && this.workOrders[0].type == "Trade")
|5691|5691| 	{
|5692|5692| 		let cmpTrader = Engine.QueryInterface(this.entity, IID_Trader);
|5693|    |-		if (cmpTrader.HasBothMarkets() && 
|    |5693|+		if (cmpTrader.HasBothMarkets() &&
|5694|5694| 		   (cmpTrader.GetFirstMarket() == target && cmpTrader.GetSecondMarket() == source ||
|5695|5695| 		    cmpTrader.GetFirstMarket() == source && cmpTrader.GetSecondMarket() == target))
|5696|5696| 		{
|    | [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
|5971|5971| 				{
|5972|5972| 					var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5973|5973| 					var targetClasses = this.order.data.targetClasses;
|5974|    |-					if (targetClasses.attack && cmpIdentity
|5975|    |-						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5974|+					if (targetClasses.attack && cmpIdentity &&
|    |5975|+						!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5976|5976| 						continue;
|5977|5977| 					if (targetClasses.avoid && cmpIdentity
|5978|5978| 						&& 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
|5974|5974| 					if (targetClasses.attack && cmpIdentity
|5975|5975| 						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5976|5976| 						continue;
|5977|    |-					if (targetClasses.avoid && cmpIdentity
|5978|    |-						&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5977|+					if (targetClasses.avoid && cmpIdentity &&
|    |5978|+						MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5979|5979| 						continue;
|5980|5980| 					// Only used by the AIs to prevent some choices of targets
|5981|5981| 					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
|5997|5997| 		{
|5998|5998| 			var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5999|5999| 			var targetClasses = this.order.data.targetClasses;
|6000|    |-			if (cmpIdentity && targetClasses.attack
|6001|    |-				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |6000|+			if (cmpIdentity && targetClasses.attack &&
|    |6001|+				!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|6002|6002| 				continue;
|6003|6003| 			if (cmpIdentity && targetClasses.avoid
|6004|6004| 				&& 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
|6000|6000| 			if (cmpIdentity && targetClasses.attack
|6001|6001| 				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|6002|6002| 				continue;
|6003|    |-			if (cmpIdentity && targetClasses.avoid
|6004|    |-				&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |6003|+			if (cmpIdentity && targetClasses.avoid &&
|    |6004|+				MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|6005|6005| 				continue;
|6006|6006| 			// Only used by the AIs to prevent some choices of targets
|6007|6007| 			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
|6160|6160| 
|6161|6161| UnitAI.prototype.SetHeldPosition = function(x, z)
|6162|6162| {
|6163|    |-	this.heldPosition = {"x": x, "z": z};
|    |6163|+	this.heldPosition = { "x": x, "z": z};
|6164|6164| };
|6165|6165| 
|6166|6166| 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
|6160|6160| 
|6161|6161| UnitAI.prototype.SetHeldPosition = function(x, z)
|6162|6162| {
|6163|    |-	this.heldPosition = {"x": x, "z": z};
|    |6163|+	this.heldPosition = {"x": x, "z": z };
|6164|6164| };
|6165|6165| 
|6166|6166| 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
|6187|6187| 	return false;
|6188|6188| };
|6189|6189| 
|6190|    |-//// Helper functions ////
|    |6190|+// // Helper functions ////
|6191|6191| 
|6192|6192| /**
|6193|6193|  * General getter for ranges.
|    | [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
|6441|6441| 	return cmpPack && cmpPack.IsPacking();
|6442|6442| };
|6443|6443| 
|6444|    |-//// Formation specific functions ////
|    |6444|+// // Formation specific functions ////
|6445|6445| 
|6446|6446| UnitAI.prototype.IsAttackingAsFormation = function()
|6447|6447| {
|    | [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
|6446|6446| UnitAI.prototype.IsAttackingAsFormation = function()
|6447|6447| {
|6448|6448| 	var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|6449|    |-	return cmpAttack && cmpAttack.CanAttackAsFormation()
|6450|    |-		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|    |6449|+	return cmpAttack && cmpAttack.CanAttackAsFormation() &&
|    |6450|+		this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6451|6451| };
|6452|6452| 
|6453|6453| //// 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
|6450|6450| 		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6451|6451| };
|6452|6452| 
|6453|    |-//// Animal specific functions ////
|    |6453|+// // Animal specific functions ////
|6454|6454| 
|6455|6455| UnitAI.prototype.MoveRandomly = function(distance)
|6456|6456| {
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/UnitAI.js
|6501|6501| {
|6502|6502| 	let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|6503|6503| 	return cmpUnitMotion && cmpUnitMotion.GetFacePointAfterMove();
|6504|    |-}
|    |6504|+};
|6505|6505| 
|6506|6506| UnitAI.prototype.AttackEntitiesByPreference = function(ents)
|6507|6507| {

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4093| »   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
|5015| »   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
|5030| »   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
|5078| »   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
|5101| »   »   ····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
|2135| »   »   »   »   »   »   &&·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
|3218| »   »   »   »   »   this.SetAnimationVariant(this.formationAnimationVariant)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|5032| »   »   &&·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
|5033| »   »   &&·(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
|5499| »   let·cmpAttack·=·Engine.QueryInterface(this.entity,·IID_Attack)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5636| »   let·cmpHeal·=·Engine.QueryInterface(this.entity,·IID_Heal)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5672| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/UnitAI.js
|5975| »   »   »   »   »   »   &&·!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
|5978| »   »   »   »   »   »   &&·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
|5991| »   var·targets·=·this.GetTargetsFromUnit();
|    | [NORMAL] JSHintBear:
|    | 'targets' is already defined.

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

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|6001| »   »   »   »   &&·!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
|6004| »   »   »   »   &&·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
|6450| »   »   &&·this.GetCurrentState()·==·"FORMATIONCONTROLLER.COMBAT.ATTACKING";
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/simulation/components/UnitAI.js
|6504| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
Executing section cli...

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

I quite like how this looks.

I have a general high level comment -> I think it'd be good to separate Turret Points from having turrets (aka subunits). Right now they are tied, but as I wrote inline I think they might not necessarily be (or at least not _so_ much in the future). Preparing for this lets us make sure we name things correctly, and I don't think we did in the OG diff -> functions such as OccupyTurret should really be OccupyTurretPoint. On the contrary, GetTurretPoints should return the points, but GetSubUnits is needed for for returning sub-entities.

Other than that, the implementation generally seems OK to me. I'm not sure what the "Order.Follow" thing is doing right now though?

binaries/data/mods/public/simulation/components/GuiInterface.js
1869–1883

I'd reverse those two checks. The natural condition is having a cmpAttack, and then only check for UnitAI.

1894

Same here.

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

Not a great name + I think you should just inline that in OwnershipChanged, since it's called only at template creation.

378–388

I don't think you should put the SpawnTemplate and turret type in the turretPoints.
The reason for that is that it prevents subunits that aren't actually turrets, such as a "flying drone assistant" or something similar.

What I'd suggest instead is something like this (SpawnTurrets isn't a great name though):

<TurretHolder>
  <SpawnTurrets>
    <Bouddica>
      <Template>units/brit_hero_boudicca_sword</Template>
      <Point>Rider</Point>
    </Bouddica>
  </SpawnTurrets>
  <TurretPoints>
    <Rider>
      <Garrisonable/>
      <X>0</X>
      <Y>1.4</Y>
      <Z>-2.5</Z>
      <Angle>0</Angle>
    </Rider>
  </TurretPoints>
</TurretHolder>

(Point might be required at the moment, but it ought to be facultative in the future).

binaries/data/mods/public/simulation/components/UnitAI.js
6273–6275

You want this to be GetTurrets, not GetTurretPoints.

Freagarach planned changes to this revision.Aug 11 2020, 7:11 PM
Freagarach marked 3 inline comments as done.

Also, instead of using UnitAI, we could perhaps query TurretHolder for the abilities of its subunits?

Also, instead of using UnitAI, we could perhaps query TurretHolder for the abilities of its subunits?

IMO the abilities of the subunits depend both on:

  • what the subunits can do.
  • what the turret holder says the subunit can do.

The first is determined via components on the subunit. We need to have unitAI somewhere, though possibly only as a "conductor" of other components. The second is unimplemented for now I think.

myou5e added a subscriber: myou5e.Aug 20 2020, 5:01 PM
Freagarach updated this revision to Diff 13253.Aug 20 2020, 8:25 PM
Freagarach marked 8 inline comments as done.
  • Rebased.
  • Check for actions and range using TurretHolder.
  • Renaming.

Other than that, the implementation generally seems OK to me. I'm not sure what the "Order.Follow" thing is doing right now though?

It enables the chariot to follow a target such that the subentity can keep attacking it, instead of moving in range and stopping.

binaries/data/mods/public/simulation/components/TurretHolder.js
378–388

I'd say that something like a "flying drone assistant" a la C&C Generals, is actually just a unselectable entity guarding us.

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

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/1378/display/redirect

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

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

Freagarach added inline comments.Aug 20 2020, 8:30 PM
binaries/data/mods/public/simulation/components/tests/test_TurretHolder.js
153

UNEVAL_EQUALS

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

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

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

builderr-release-macos.txt
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libsimulation2.a(precompiled.o) has no symbols

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/1379/display/redirect

wraitii added inline comments.Aug 21 2020, 9:22 AM
binaries/data/mods/public/simulation/components/TurretHolder.js
378–388

What if you can select it and order it to attack?

It enables the chariot to follow a target such that the subentity can keep attacking it, instead of moving in range and stopping.

Ah, yes... And herein lies the trouble with this patch I guess.
Two behaviours which don't really work:

  • The turreted boudicca can attack, but it can't actually since it can't order its rider to go anywhere (this is fixable by making it unelectable while turreted, but I'm not sure we can do that atm, perhaps D1960?)
  • The chariot never tries attacking another unit after its first target has been killed, since it's in "follow" mode and not "attacking" mode.

I'm not sure how to fix this well. One could put the Chariot in attacking mode, but it does nothing effectively, or one could try devising a way for the turret to submit orders to the turret holder (but that's kind of backwards).


The linter also highlighted a bunch of things.

Linter issues.

devising a way for the turret to submit orders to the turret holder (but that's kind of backwards).

I actually have that in the child revision of this patch ^^

binaries/data/mods/public/simulation/components/TurretHolder.js
378–388

Then it is a common entity?

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

builderr-release-macos.txt
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libsimulation2.a(precompiled.o) has no symbols

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/1382/display/redirect

Also check subunits actions when the TurretHolder has the component itself.

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

builderr-release-macos.txt
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../../../binaries/system/libsimulation2.a(precompiled.o) has no symbols

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/1383/display/redirect

Freagarach retitled this revision from [WIP] - Turrets and/or sub-units. to Turrets and/or sub-units..Aug 21 2020, 10:41 AM
Freagarach edited the summary of this revision. (Show Details)
Freagarach planned changes to this revision.Aug 24 2020, 12:37 PM

Needs more thinking on the following (i.e. how to handle the parent entity of a subentity).