Page MenuHomeWildfire Games

Imarok
User

Projects

User Details

User Since
Dec 23 2016, 12:04 AM (196 w, 11 h)

Recent Activity

Aug 26 2020

Imarok committed rP23996: Fix gametime overlay and watermark in summary screen.
Fix gametime overlay and watermark in summary screen
Aug 26 2020, 12:34 PM
Imarok closed D148: Fix gametime overlay and watermark in summary screen.
Aug 26 2020, 12:34 PM
Imarok abandoned D2957: us → µs.

See comments above.

Aug 26 2020, 11:48 AM

Aug 17 2020

Imarok added a comment to D2957: us → µs.

I'd prefer to have less non-ASCII characters in the code or in the console output. Since we still support old consoles/compilers that might have problems with non-ASCII characters.

Aug 17 2020, 12:45 PM

Aug 1 2020

Imarok updated the diff for D148: Fix gametime overlay and watermark in summary screen.

Rebase. Add note that this is only a workaround

Aug 1 2020, 7:46 PM
Imarok added inline comments to D148: Fix gametime overlay and watermark in summary screen.
Aug 1 2020, 7:21 PM
Imarok added a comment to D665: Make ship pickup nicer.
In D665#126639, @Vulcan wrote:

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

Linter detected issues:
Executing section Source...

source/simulation2/components/ICmpPathfinder.h
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"

source/simulation2/components/ICmpPathfinder.h
|  34| template<typename·T>·class·Grid;
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'template<...' is invalid C code. Use --std or --language to configure the language.

source/simulation2/components/ICmpUnitMotion.h
|  34| class·ICmpUnitMotion·:·public·IComponent
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classICmpUnitMotion:' is invalid C code. Use --std or --language to configure the language.

source/simulation2/helpers/HierarchicalPathfinder.h
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"

source/simulation2/helpers/HierarchicalPathfinder.h
|  32| ·*·The·navcell-grid·representation·of·the·map·is·split·into·fixed-size·chunks.
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classPathGoal{' is invalid C code. Use --std or --language to configure the language.

source/simulation2/components/CCmpPathfinder_Common.h
|  34| #include·"graphics/Overlay.h"
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'template<...' is invalid C code. Use --std or --language to configure the language.

source/simulation2/helpers/HierarchicalPathfinder.cpp
|   1| /*·Copyright·(C)·2019·Wildfire·Games.
|    | [NORMAL] LicenseYearBear:
|    | License should have "2020" year instead of "2019"
Executing section JS...
|    | [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
| 796| 796| 					this.FinishOrder();
| 797| 797| 					return;
| 798| 798| 				}
| 799|    |-				else
| 800|    |-				{
|    | 799|+				
| 801| 800| 					this.SetNextState("GARRISON.APPROACHING");
| 802| 801| 					return;
| 803|    |-				}
|    | 802|+				
| 804| 803| 			}
| 805| 804| 
| 806| 805| 			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
|1060|1060| 			},
|1061|1061| 		},
|1062|1062| 
|1063|    |-		"GARRISON":{
|    |1063|+		"GARRISON": {
|1064|1064| 			"APPROACHING": {
|1065|1065| 				"enter": function() {
|1066|1066| 					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
|2064|2064| 
|2065|2065| 				"Attacked": function(msg) {
|2066|2066| 					// If we are capturing and are attacked by something that we would not capture, attack that entity instead
|2067|    |-					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force)
|2068|    |-						&& this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|    |2067|+					if (this.order.data.attackType == "Capture" && (this.GetStance().targetAttackersAlways || !this.order.data.force) &&
|    |2068|+						this.order.data.target != msg.data.attacker && this.GetBestAttackAgainst(msg.data.attacker, true) != "Capture")
|2069|2069| 						this.RespondToTargetedEntities([msg.data.attacker]);
|2070|2070| 				},
|2071|2071| 			},
|    | [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
|2223|2223| 					"MovementUpdate": function(msg) {
|2224|2224| 						// If it looks like the path is failing, and we are close enough (3 tiles) from wanted range
|2225|2225| 						// stop anyways. This avoids pathing for an unreachable goal and reduces lag considerably.
|2226|    |-						if (msg.likelyFailure || 
|    |2226|+						if (msg.likelyFailure ||
|2227|2227| 							msg.obstructed && this.RelaxedMaxRangeCheck(this.order.data, this.order.data.max + this.DefaultRelaxedMaxRange) ||
|2228|2228| 							!msg.obstructed && this.CheckRange(this.order.data))
|2229|2229| 							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
|2526|2526| 
|2527|2527| 								return type.specific == resourceType.specific &&
|2528|2528| 								    (type.specific != "meat" || resourceTemplate == template);
|2529|    |-						});
|    |2529|+							});
|2530|2530| 
|2531|2531| 						if (nearbyResource)
|2532|2532| 						{
|    | [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
|2858|2858| 					{
|2859|2859| 						// The building was already finished/fully repaired before we arrived;
|2860|2860| 						// let the ConstructionFinished handler handle this.
|2861|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2861|+						this.OnGlobalConstructionFinished({ "entity": this.repairTarget, "newentity": this.repairTarget});
|2862|2862| 						return true;
|2863|2863| 					}
|2864|2864| 
|    | [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
|2858|2858| 					{
|2859|2859| 						// The building was already finished/fully repaired before we arrived;
|2860|2860| 						// let the ConstructionFinished handler handle this.
|2861|    |-						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget});
|    |2861|+						this.OnGlobalConstructionFinished({"entity": this.repairTarget, "newentity": this.repairTarget });
|2862|2862| 						return true;
|2863|2863| 					}
|2864|2864| 
|    | [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
|3145|3145| 				this.StopTimer();
|3146|3146| 				this.ResetAnimation();
|3147|3147| 				if (this.formationAnimationVariant)
|3148|    |-					this.SetAnimationVariant(this.formationAnimationVariant)
|    |3148|+					this.SetAnimationVariant(this.formationAnimationVariant);
|3149|3149| 				else
|3150|3150| 					this.SetDefaultAnimationVariant();
|3151|3151| 				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
|3359|3359| 		"COMBAT": "INDIVIDUAL.COMBAT", // reuse the same combat behaviour for animals
|3360|3360| 
|3361|3361| 		"WALKING": "INDIVIDUAL.WALKING",	// reuse the same walking behaviour for animals
|3362|    |-							// only used for domestic animals
|    |3362|+		// only used for domestic animals
|3363|3363| 
|3364|3364| 		// Reuse the same garrison behaviour for animals.
|3365|3365| 		"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
|3409|3409| 
|3410|3410| UnitAI.prototype.IsAnimal = function()
|3411|3411| {
|3412|    |-	return (this.template.NaturalBehaviour ? true : false);
|    |3412|+	return (!!this.template.NaturalBehaviour);
|3413|3413| };
|3414|3414| 
|3415|3415| 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
|3549|3549| 		{
|3550|3550| 			let index = this.GetCurrentState().indexOf(".");
|3551|3551| 			if (index != -1)
|3552|    |-				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0,index));
|    |3552|+				this.UnitFsm.SwitchToNextState(this, this.GetCurrentState().slice(0, index));
|3553|3553| 			this.Stop(false);
|3554|3554| 		}
|3555|3555| 
|    | [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
|3606|3606| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3607|3607| 			continue;
|3608|3608| 		if (i == 0)
|3609|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3609|+			this.UnitFsm.ProcessMessage(this, { "type": "PickupCanceled", "data": msg});
|3610|3610| 		else
|3611|3611| 			this.orderQueue.splice(i, 1);
|3612|3612| 		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
|3606|3606| 		if (this.orderQueue[i].type != "PickupUnit" || this.orderQueue[i].data.target != msg.entity)
|3607|3607| 			continue;
|3608|3608| 		if (i == 0)
|3609|    |-			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg});
|    |3609|+			this.UnitFsm.ProcessMessage(this, {"type": "PickupCanceled", "data": msg });
|3610|3610| 		else
|3611|3611| 			this.orderQueue.splice(i, 1);
|3612|3612| 		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
|3735|3735| };
|3736|3736| 
|3737|3737| 
|3738|    |-//// FSM linkage functions ////
|    |3738|+// // FSM linkage functions ////
|3739|3739| 
|3740|3740| // Setting the next state to the current state will leave/re-enter the top-most substate.
|3741|3741| 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
|3908|3908| 				continue;
|3909|3909| 			if (this.orderQueue[i].type == type)
|3910|3910| 				continue;
|3911|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3911|+			this.orderQueue.splice(i, 0, { "type": type, "data": data});
|3912|3912| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3913|3913| 			return;
|3914|3914| 		}
|    | [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
|3908|3908| 				continue;
|3909|3909| 			if (this.orderQueue[i].type == type)
|3910|3910| 				continue;
|3911|    |-			this.orderQueue.splice(i, 0, {"type": type, "data": data});
|    |3911|+			this.orderQueue.splice(i, 0, {"type": type, "data": data });
|3912|3912| 			Engine.PostMessage(this.entity, MT_UnitAIOrderDataChanged, { "to": this.GetOrderData() });
|3913|3913| 			return;
|3914|3914| 		}
|    | [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| 	if (data.timerRepeat === undefined)
|4150|4150| 		this.timer = undefined;
|4151|4151| 
|4152|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4152|+	this.UnitFsm.ProcessMessage(this, { "type": "Timer", "data": data, "lateness": lateness});
|4153|4153| };
|4154|4154| 
|4155|4155| /**
|    | [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| 	if (data.timerRepeat === undefined)
|4150|4150| 		this.timer = undefined;
|4151|4151| 
|4152|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness});
|    |4152|+	this.UnitFsm.ProcessMessage(this, {"type": "Timer", "data": data, "lateness": lateness });
|4153|4153| };
|4154|4154| 
|4155|4155| /**
|    | [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
|4194|4194| 	// TODO: This is a bit inefficient since every unit listens to every
|4195|4195| 	// construction message - ideally we could scope it to only the one we're building
|4196|4196| 
|4197|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4197|+	this.UnitFsm.ProcessMessage(this, { "type": "ConstructionFinished", "data": msg});
|4198|4198| };
|4199|4199| 
|4200|4200| 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
|4194|4194| 	// TODO: This is a bit inefficient since every unit listens to every
|4195|4195| 	// construction message - ideally we could scope it to only the one we're building
|4196|4196| 
|4197|    |-	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
|    |4197|+	this.UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg });
|4198|4198| };
|4199|4199| 
|4200|4200| 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
|4233|4233| 	if (msg.fromStatusEffect)
|4234|4234| 		return;
|4235|4235| 
|4236|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4236|+	this.UnitFsm.ProcessMessage(this, { "type": "Attacked", "data": msg});
|4237|4237| };
|4238|4238| 
|4239|4239| 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
|4233|4233| 	if (msg.fromStatusEffect)
|4234|4234| 		return;
|4235|4235| 
|4236|    |-	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
|    |4236|+	this.UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg });
|4237|4237| };
|4238|4238| 
|4239|4239| 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
|4238|4238| 
|4239|4239| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4240|4240| {
|4241|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4241|+	this.UnitFsm.ProcessMessage(this, { "type": "GuardedAttacked", "data": msg.data});
|4242|4242| };
|4243|4243| 
|4244|4244| 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
|4238|4238| 
|4239|4239| UnitAI.prototype.OnGuardedAttacked = function(msg)
|4240|4240| {
|4241|    |-	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data});
|    |4241|+	this.UnitFsm.ProcessMessage(this, {"type": "GuardedAttacked", "data": msg.data });
|4242|4242| };
|4243|4243| 
|4244|4244| 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
|4243|4243| 
|4244|4244| UnitAI.prototype.OnHealthChanged = function(msg)
|4245|4245| {
|4246|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4246|+	this.UnitFsm.ProcessMessage(this, { "type": "HealthChanged", "from": msg.from, "to": msg.to});
|4247|4247| };
|4248|4248| 
|4249|4249| 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
|4243|4243| 
|4244|4244| UnitAI.prototype.OnHealthChanged = function(msg)
|4245|4245| {
|4246|    |-	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to});
|    |4246|+	this.UnitFsm.ProcessMessage(this, {"type": "HealthChanged", "from": msg.from, "to": msg.to });
|4247|4247| };
|4248|4248| 
|4249|4249| 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
|4258|4258| 
|4259|4259| UnitAI.prototype.OnPackFinished = function(msg)
|4260|4260| {
|4261|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4261|+	this.UnitFsm.ProcessMessage(this, { "type": "PackFinished", "packed": msg.packed});
|4262|4262| };
|4263|4263| 
|4264|4264| //// 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
|4258|4258| 
|4259|4259| UnitAI.prototype.OnPackFinished = function(msg)
|4260|4260| {
|4261|    |-	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|    |4261|+	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed });
|4262|4262| };
|4263|4263| 
|4264|4264| //// 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
|4261|4261| 	this.UnitFsm.ProcessMessage(this, {"type": "PackFinished", "packed": msg.packed});
|4262|4262| };
|4263|4263| 
|4264|    |-//// Helper functions to be called by the FSM ////
|    |4264|+// // Helper functions to be called by the FSM ////
|4265|4265| 
|4266|4266| UnitAI.prototype.GetWalkSpeed = function()
|4267|4267| {
|    | [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
|4986|4986| UnitAI.prototype.AttackEntityInZone = function(ents)
|4987|4987| {
|4988|4988| 	var target = ents.find(target =>
|4989|    |-		this.CanAttack(target)
|4990|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|    |4989|+		this.CanAttack(target) &&
|    |4990|+		this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4991|4991| 		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4992|4992| 	);
|4993|4993| 	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
|4987|4987| {
|4988|4988| 	var target = ents.find(target =>
|4989|4989| 		this.CanAttack(target)
|4990|    |-		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true))
|4991|    |-		&& (this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|    |4990|+		&& this.CheckTargetDistanceFromHeldPosition(target, IID_Attack, this.GetBestAttackAgainst(target, true)) &&
|    |4991|+		(this.GetStance().respondChaseBeyondVision || this.CheckTargetIsInVisionRange(target))
|4992|4992| 	);
|4993|4993| 	if (!target)
|4994|4994| 		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
|5071|5071| 	// If we are guarding/escorting, don't abandon as long as the guarded unit is in target range of the attacker
|5072|5072| 	if (this.isGuardOf)
|5073|5073| 	{
|5074|    |-		var cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |5074|+		var cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|5075|5075| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5076|5076| 		if (cmpUnitAI && cmpAttack &&
|5077|5077| 		    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
|5075|5075| 		var cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5076|5076| 		if (cmpUnitAI && cmpAttack &&
|5077|5077| 		    cmpAttack.GetAttackTypes().some(type => cmpUnitAI.CheckTargetAttackRange(this.isGuardOf, type)))
|5078|    |-				return false;
|    |5078|+			return false;
|5079|5079| 	}
|5080|5080| 
|5081|5081| 	// 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
|5113|5113| 	// If we are guarding/escorting, chase at least as long as the guarded unit is in target range of the attacker
|5114|5114| 	if (this.isGuardOf)
|5115|5115| 	{
|5116|    |-		let cmpUnitAI =  Engine.QueryInterface(target, IID_UnitAI);
|    |5116|+		let cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI);
|5117|5117| 		let cmpAttack = Engine.QueryInterface(target, IID_Attack);
|5118|5118| 		if (cmpUnitAI && cmpAttack &&
|5119|5119| 		    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
|5126|5126| 	return false;
|5127|5127| };
|5128|5128| 
|5129|    |-//// External interface functions ////
|    |5129|+// // External interface functions ////
|5130|5130| 
|5131|5131| UnitAI.prototype.SetFormationController = function(ent)
|5132|5132| {
|    | [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
|5282|5282| 	{
|5283|5283| 		if (this.isGuardOf == target && this.order && this.order.type == "Guard")
|5284|5284| 			return;
|5285|    |-		else
|5286|    |-			this.RemoveGuard();
|    |5285|+		this.RemoveGuard();
|5287|5286| 	}
|5288|5287| 
|5289|5288| 	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
|5616|5616| 
|5617|5617| 	if (this.IsFormationController())
|5618|5618| 		this.CallMemberFunction("CancelSetupTradeRoute", [target]);
|5619|    |-}
|    |5619|+};
|5620|5620| /**
|5621|5621|  * Adds trade order to the queue. Either walk to the first market, or
|5622|5622|  * 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
|5637|5637| 	    this.workOrders.length && this.workOrders[0].type == "Trade")
|5638|5638| 	{
|5639|5639| 		let cmpTrader = Engine.QueryInterface(this.entity, IID_Trader);
|5640|    |-		if (cmpTrader.HasBothMarkets() && 
|    |5640|+		if (cmpTrader.HasBothMarkets() &&
|5641|5641| 		   (cmpTrader.GetFirstMarket() == target && cmpTrader.GetSecondMarket() == source ||
|5642|5642| 		    cmpTrader.GetFirstMarket() == source && cmpTrader.GetSecondMarket() == target))
|5643|5643| 		{
|    | [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
|5944|5944| 				{
|5945|5945| 					var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5946|5946| 					var targetClasses = this.order.data.targetClasses;
|5947|    |-					if (targetClasses.attack && cmpIdentity
|5948|    |-						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5947|+					if (targetClasses.attack && cmpIdentity &&
|    |5948|+						!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5949|5949| 						continue;
|5950|5950| 					if (targetClasses.avoid && cmpIdentity
|5951|5951| 						&& 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
|5947|5947| 					if (targetClasses.attack && cmpIdentity
|5948|5948| 						&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5949|5949| 						continue;
|5950|    |-					if (targetClasses.avoid && cmpIdentity
|5951|    |-						&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5950|+					if (targetClasses.avoid && cmpIdentity &&
|    |5951|+						MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5952|5952| 						continue;
|5953|5953| 					// Only used by the AIs to prevent some choices of targets
|5954|5954| 					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
|5970|5970| 		{
|5971|5971| 			var cmpIdentity = Engine.QueryInterface(targ, IID_Identity);
|5972|5972| 			var targetClasses = this.order.data.targetClasses;
|5973|    |-			if (cmpIdentity && targetClasses.attack
|5974|    |-				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|    |5973|+			if (cmpIdentity && targetClasses.attack &&
|    |5974|+				!MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5975|5975| 				continue;
|5976|5976| 			if (cmpIdentity && targetClasses.avoid
|5977|5977| 				&& 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
|5973|5973| 			if (cmpIdentity && targetClasses.attack
|5974|5974| 				&& !MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.attack))
|5975|5975| 				continue;
|5976|    |-			if (cmpIdentity && targetClasses.avoid
|5977|    |-				&& MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|    |5976|+			if (cmpIdentity && targetClasses.avoid &&
|    |5977|+				MatchesClassList(cmpIdentity.GetClassesList(), targetClasses.avoid))
|5978|5978| 				continue;
|5979|5979| 			// Only used by the AIs to prevent some choices of targets
|5980|5980| 			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
|6126|6126| 
|6127|6127| UnitAI.prototype.SetHeldPosition = function(x, z)
|6128|6128| {
|6129|    |-	this.heldPosition = {"x": x, "z": z};
|    |6129|+	this.heldPosition = { "x": x, "z": z};
|6130|6130| };
|6131|6131| 
|6132|6132| 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
|6126|6126| 
|6127|6127| UnitAI.prototype.SetHeldPosition = function(x, z)
|6128|6128| {
|6129|    |-	this.heldPosition = {"x": x, "z": z};
|    |6129|+	this.heldPosition = {"x": x, "z": z };
|6130|6130| };
|6131|6131| 
|6132|6132| 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
|6153|6153| 	return false;
|6154|6154| };
|6155|6155| 
|6156|    |-//// Helper functions ////
|    |6156|+// // Helper functions ////
|6157|6157| 
|6158|6158| /**
|6159|6159|  * 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
|6172|6172| 		return undefined;
|6173|6173| 
|6174|6174| 	return component.GetRange(type);
|6175|    |-}
|    |6175|+};
|6176|6176| 
|6177|6177| UnitAI.prototype.CanAttack = function(target)
|6178|6178| {
|    | [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
|6348|6348| 	return cmpPack && cmpPack.IsPacking();
|6349|6349| };
|6350|6350| 
|6351|    |-//// Formation specific functions ////
|    |6351|+// // Formation specific functions ////
|6352|6352| 
|6353|6353| UnitAI.prototype.IsAttackingAsFormation = function()
|6354|6354| {
|    | [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
|6353|6353| UnitAI.prototype.IsAttackingAsFormation = function()
|6354|6354| {
|6355|6355| 	var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
|6356|    |-	return cmpAttack && cmpAttack.CanAttackAsFormation()
|6357|    |-		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|    |6356|+	return cmpAttack && cmpAttack.CanAttackAsFormation() &&
|    |6357|+		this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6358|6358| };
|6359|6359| 
|6360|6360| //// 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
|6357|6357| 		&& this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING";
|6358|6358| };
|6359|6359| 
|6360|    |-//// Animal specific functions ////
|    |6360|+// // Animal specific functions ////
|6361|6361| 
|6362|6362| UnitAI.prototype.MoveRandomly = function(distance)
|6363|6363| {
|    | [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
|6408|6408| {
|6409|6409| 	let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|6410|6410| 	return cmpUnitMotion && cmpUnitMotion.GetFacePointAfterMove();
|6411|    |-}
|    |6411|+};
|6412|6412| 
|6413|6413| UnitAI.prototype.AttackEntitiesByPreference = function(ents)
|6414|6414| {

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4054| »   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
|4973| »   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
|4988| »   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
|5054| »   let·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
|5077| »   »   ····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
|2068| »   »   »   »   »   »   &&·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
|3148| »   »   »   »   »   this.SetAnimationVariant(this.formationAnimationVariant)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|4990| »   »   &&·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
|4991| »   »   &&·(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
|5619| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

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

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

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

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

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

binaries/data/mods/public/simulation/components/UnitAI.js
|6357| »   »   &&·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
|6411| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
Executing section cli...

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

Aug 1 2020, 6:42 PM
Imarok updated the summary of D148: Fix gametime overlay and watermark in summary screen.
Aug 1 2020, 6:20 PM
Imarok added a comment to D148: Fix gametime overlay and watermark in summary screen.

I have one alternate proposition:

  • How about you make the FPS counter have a completely transparent background (doesn't matter too much if it's not seen)?
  • The in-game time counter could be made a "first-class citizen", since it's specific to in-game.

Then you wouldn't have to hack with the order of things.

Hmm, not that happy about this solution.
With a fully transparent background the white font gets unreadable in some situations. (e.g. main menu)

Aug 1 2020, 5:49 PM

Jul 29 2020

Imarok added a comment to D1751: [WIP] Map flares.

Code looks good, I failed to test this because patch doesn't include images (and arc-patch doesn't work on my git here apparently).

Jul 29 2020, 1:23 PM
Imarok updated the diff for D1751: [WIP] Map flares.

Use alarmally_1.ogg. Consistently name it flare.

Jul 29 2020, 12:14 AM
Imarok retitled D1751: [WIP] Map flares from [WIP] Map ping to [WIP] Map flares.
Jul 29 2020, 12:12 AM

Jul 28 2020

Imarok updated the summary of D1751: [WIP] Map flares.
Jul 28 2020, 5:53 PM
Imarok updated the summary of D1751: [WIP] Map flares.
Jul 28 2020, 5:51 PM
Imarok added a comment to D2919: Make PlayerHasMarket event-based.

Just some style issues found by Jenkins.

Jul 28 2020, 5:49 PM
Imarok awarded D2919: Make PlayerHasMarket event-based a The World Burns token.
Jul 28 2020, 5:41 PM
Imarok updated the diff for D1751: [WIP] Map flares.

flare animation only in 256×256.
Use prop svn:mime-type=image/png. Maybe this helps with arcanist downloading pngs.

Jul 28 2020, 5:24 PM

Jul 26 2020

Imarok added a member for Contributors: Mr.lie.
Jul 26 2020, 7:35 PM

Jul 24 2020

Imarok added a comment to D2902: Fix entdocs generation.
In D2902#125748, @Stan wrote:

Well at least once see the link in the summary :)
Maybe the mod selection?

Jul 24 2020, 10:35 PM
Imarok added a comment to D2902: Fix entdocs generation.

Did this ever worked correctly?
If so when and what broke it?

Jul 24 2020, 10:28 PM

Jul 22 2020

Imarok committed rP23871: x → × in game speeds.
x → × in game speeds
Jul 22 2020, 6:28 PM
Imarok closed D2895: x → × in game speeds.
Jul 22 2020, 6:28 PM
Imarok committed rP23870: [gui] replace hyphen-minus with em-dash in credits.
[gui] replace hyphen-minus with em-dash in credits
Jul 22 2020, 6:24 PM
Imarok closed D2820: [gui] replace hyphen-minus with em-dash in credits.
Jul 22 2020, 6:24 PM
Imarok accepted D2895: x → × in game speeds.

simulation/data/civs/cart.json:

Included in D2885.

Jul 22 2020, 6:10 PM
Imarok accepted D2820: [gui] replace hyphen-minus with em-dash in credits.

Looks good

Jul 22 2020, 6:09 PM
Imarok added a comment to D2895: x → × in game speeds.

iirc there was a diff for the counters.

D2610

Jul 22 2020, 5:54 PM
Imarok added a comment to D2895: x → × in game speeds.

Sounds reasonable.

Jul 22 2020, 5:21 PM
Imarok added inline comments to D2893: [gui] fix barter message string.
Jul 22 2020, 1:25 PM
Imarok added inline comments to D2893: [gui] fix barter message string.
Jul 22 2020, 11:31 AM

Jul 17 2020

Imarok committed rP23845: Show summary graphs for teams.
Show summary graphs for teams
Jul 17 2020, 11:55 AM
Imarok closed D1877: Show summary graphs for teams.
Jul 17 2020, 11:55 AM
Imarok updated the diff for D1877: Show summary graphs for teams.

Make Vulcan happier by adjusting indentation.

Jul 17 2020, 11:29 AM
Imarok added inline comments to D1877: Show summary graphs for teams.
Jul 17 2020, 11:23 AM
Imarok added inline comments to D2882: update credits.
Jul 17 2020, 11:13 AM
Imarok committed rP23844: Add where and how to contribute to README.txt.
Add where and how to contribute to README.txt
Jul 17 2020, 11:12 AM
Imarok closed D2833: Add where and how to contribute to README.txt.
Jul 17 2020, 11:11 AM

Jul 16 2020

Imarok committed rP23841: Fix opening the summary as Gaia.
Fix opening the summary as Gaia
Jul 16 2020, 11:11 PM
Imarok closed D2836: When opening the summary as Gaia don't show warnings.
Jul 16 2020, 11:11 PM
Imarok added a comment to D2836: When opening the summary as Gaia don't show warnings.

Can't we show GAIA kills and such?

Jul 16 2020, 11:05 PM
Imarok added a comment to rP20886: Enable players to open the lobby as a dialog in the gamesetup, running games….

Seems to be fixed now. (thx to Freagarach for noticing it)

Jul 16 2020, 3:55 PM
Imarok resigned from rP20886: Enable players to open the lobby as a dialog in the gamesetup, running games….
Jul 16 2020, 3:55 PM

Jul 5 2020

Imarok awarded D2861: [gameplay] differentiate African and Indian war elephants a Love token.
Jul 5 2020, 10:46 AM

Jul 1 2020

Imarok added a comment to D2848: [WIP] NetClient Threading.

You might want to add some description to this diff like:
What is its state? (TODOs, Bugs, etc)
Did this originate from the diff andy9595 (I think that's the wrong number ;) wrote or was it written by you?

Jul 1 2020, 9:00 AM

Jun 27 2020

Imarok updated the diff for D1877: Show summary graphs for teams.

Minor style fixes

Jun 27 2020, 11:43 PM
Imarok updated the diff for D1877: Show summary graphs for teams.

Translate and use setStringTags

Jun 27 2020, 11:40 PM

Jun 25 2020

Imarok added inline comments to D1877: Show summary graphs for teams.
Jun 25 2020, 1:32 AM
Imarok updated the diff for D1269: Session: Show more command buttons.

Use icons from Stan. No extra icon definition. Remove change crept in from other diff.

Jun 25 2020, 1:20 AM
Imarok added inline comments to D1269: Session: Show more command buttons.
Jun 25 2020, 1:20 AM
Imarok added inline comments to D1269: Session: Show more command buttons.
Jun 25 2020, 12:54 AM
Imarok updated the diff for D1269: Session: Show more command buttons.

Rebase

Jun 25 2020, 12:51 AM
Stan awarded D2836: When opening the summary as Gaia don't show warnings a Hungry Hippo token.
Jun 25 2020, 12:41 AM
Imarok created D2836: When opening the summary as Gaia don't show warnings.
Jun 25 2020, 12:35 AM
Imarok added a comment to D1877: Show summary graphs for teams.

Will commit this soon.
(Still not convinced about the reduction of the duplication. It is probably doable but doesn't get more readable.)

Jun 25 2020, 12:31 AM
Imarok updated the diff for D1877: Show summary graphs for teams.

Rebase

Jun 25 2020, 12:24 AM

Jun 24 2020

Imarok added a comment to D2833: Add where and how to contribute to README.txt.

It's not really consistent in the rest of the file ;)

Jun 24 2020, 11:20 PM
Imarok committed rP23790: Remove inappropriate quote about women.
Remove inappropriate quote about women
Jun 24 2020, 11:18 PM
Imarok closed D2832: Remove inappropriate quote about women.
Jun 24 2020, 11:18 PM

Jun 23 2020

Imarok added inline comments to D2833: Add where and how to contribute to README.txt.
Jun 23 2020, 10:45 PM
Imarok added inline comments to D2833: Add where and how to contribute to README.txt.
Jun 23 2020, 10:16 PM
Imarok updated the diff for D2833: Add where and how to contribute to README.txt.

https

Jun 23 2020, 10:15 PM
Imarok added a comment to D2832: Remove inappropriate quote about women.

Nor is line 138. To me 138 seems to be in the same vein as e.g. “a true gentleman’s name appears in newspapers only three times in his life: to announce his birth, marriage and death.” Not being talked about was generally a virtue.

any real knowledge about the "real" position of women in this times.

Hmm didn't thought about it that way around. To me the quote just sounded like women should not matter.

Jun 23 2020, 10:14 PM
Imarok accepted D1206: Absorb duplicated summary tab code to the tab_buttons gui.

Looks very good.
Notice my two comments.

Jun 23 2020, 9:16 PM
Imarok added a comment to D2832: Remove inappropriate quote about women.

How is this fundamentally different from e.g. line 52 or 199? Or the way female citizens are presented in game (i.e. cheap, weak, expendable workers)?
I don't really care about this particular quote, but once you start censoring ancient authors based on modern views of political correctness, you enter a slippery slope.

Jun 23 2020, 8:43 PM
Imarok created D2833: Add where and how to contribute to README.txt.
Jun 23 2020, 8:09 PM
Imarok created D2832: Remove inappropriate quote about women.
Jun 23 2020, 7:42 PM

Jun 21 2020

Imarok committed rP23784: CVector2D: Fix members may not be initialized warnings.
CVector2D: Fix members may not be initialized warnings
Jun 21 2020, 8:23 PM
Imarok closed D2825: CVector2D: Fix members may not be initialized warnings.
Jun 21 2020, 8:23 PM
Imarok updated the diff for D1751: [WIP] Map flares.

Rebase

Jun 21 2020, 8:00 PM
Imarok updated the summary of D1751: [WIP] Map flares.
Jun 21 2020, 7:57 PM
Imarok updated the summary of D1751: [WIP] Map flares.
Jun 21 2020, 7:46 PM
Imarok updated the summary of D1751: [WIP] Map flares.
Jun 21 2020, 7:42 PM
Imarok updated the diff for D1751: [WIP] Map flares.

Add frames for an animated ping.

Jun 21 2020, 7:41 PM
Imarok updated the summary of D1751: [WIP] Map flares.
Jun 21 2020, 5:06 PM
Imarok updated the diff for D1751: [WIP] Map flares.

Correct scissoring → Don't draw parts of the ping outside the minimap.

Jun 21 2020, 4:55 PM
Imarok added a comment to D2825: CVector2D: Fix members may not be initialized warnings.

Hm, this technically could be a small performance regression if the uninitialisation is on purpose. Though I'm not sure it is from comparing with CVector3.

Yeah, in theory. But I doubt it has a real impact. And as you also noticed we already do it in CVector3D

I'm not sure we use CVector2 a lot so it's probably irrelevant.

Yep.

Jun 21 2020, 4:25 PM

Jun 20 2020

Imarok added inline comments to D1751: [WIP] Map flares.
Jun 20 2020, 11:53 AM
Imarok added a comment to D1751: [WIP] Map flares.

Seems like this does not work with GLSL disabled.
Edit: Found another issue: when pinging at mid of the minimap border, the ping is also drawn outside of the minimap. (I thought scissoring would fix that, but doesn't seem like.)

Jun 20 2020, 11:13 AM
Imarok created D2825: CVector2D: Fix members may not be initialized warnings.
Jun 20 2020, 9:42 AM

Jun 15 2020

Imarok added a comment to D2815: [gameplay] give all civs rams.

Isn't this another step into making the different civs indistinguishable?
Wrt rams vs rams: Afaik swordmen are quite effective against rams aren't they?

Jun 15 2020, 9:48 AM

Jun 14 2020

Imarok updated the diff for D1751: [WIP] Map flares.

Use a circle texture.

Jun 14 2020, 8:11 PM

Jun 13 2020

Imarok added a comment to D2814: Allow remapping hotkeys from inside the game / fix QWERTY hotkeys.

I think you should split the string fix.
And you should show some translated explanation for each hotkey instead of it's config name.

Jun 13 2020, 8:34 PM

Jun 12 2020

Imarok added a comment to D2812: Adds MSAA to anti-aliasing techniques.

Does MSAA 32× make sense?

I don't think so, I see no difference with 32 (also I don't remember such value in most games).

Me neither xD

Seems like not working when changing in atlas.

It's disabled in Atlas, because it uses wxWidgets's canvas with own GL context.

aha. I guess that makes sense. (I personally have no idea, about that topic ;P)

Jun 12 2020, 11:33 PM
Imarok added a comment to rP23747: Refactor HWDetect and rendering options setup..
../../../source/ps/GameSetup/HWDetect.cpp:138:13: warning: ‘bool IsOverridden(const char*)’ defined but not used [-Wunused-function]
 static bool IsOverridden(const char* setting)
Jun 12 2020, 11:28 PM
Imarok added a comment to D2812: Adds MSAA to anti-aliasing techniques.

Looks really sharp. Does MSAA 32× make sense?
Can change ingame without issues.
Seems like not working when changing in atlas. (FXAA is working)

Jun 12 2020, 11:01 PM

Jun 1 2020

Imarok committed rP23727: Improve the warning message for FromJSValue<CColor> when trying to convert a….
Improve the warning message for FromJSValue<CColor> when trying to convert a…
Jun 1 2020, 6:09 PM
Imarok closed D2778: Improve the warning message for FromJSValue<CColor>.
Jun 1 2020, 6:09 PM
Imarok added a comment to D2778: Improve the warning message for FromJSValue<CColor>.
In D2778#117793, @Stan wrote:

The mac build failiure in unrelated. Itms disabled Mac SVN build until he has some time to address the bug. Linux one is the usual segfault.

Jun 1 2020, 6:02 PM
Imarok created D2778: Improve the warning message for FromJSValue<CColor>.
Jun 1 2020, 12:01 PM

May 30 2020

Imarok added a comment to D2651: Allow right-click on disabled buttons..

Hmm, it feels quite wrong to allow a disabled button to be pressed when it's disabled in general.
What about adding a special event for rightlclick on disabled button?
That way a disabled button is still disabled, but one can add a special event handler for a specific button if they really want to react to a right-click even if the button is disabled. (Like in case of unit buttons)

May 30 2020, 4:12 PM

May 29 2020

Imarok updated the diff for D1751: [WIP] Map flares.

Small style fixes.

May 29 2020, 10:00 PM
Imarok updated the diff for D1751: [WIP] Map flares.

This patch is still WIP.

May 29 2020, 8:47 PM

May 24 2020

Imarok added a comment to D2362: Allow for building-specific build/repair animations and use seeding animation for fields.

I kind of get how you want to do this. It sounds sane.
But I've never done something with our animations/variants etc. so I'll need to look into it first. I'll do that when I find the time.
If you think it's a quick no-brainer for you, feel free to commandeer. ;)

It's quite easy: you set the animation variant, and in the groups you have something like:

<group>
  <variant name="default0" frequency="0.5">
    <animation name='Idle' ... />
  </variant>
  <variant name="default1" frequency="0.5">
    <animation name='Idle' ... />
  </variant>
  <variant name="build_field" frequency="0">  <- this never gets picked, unless the animation variant is "build_field", in which case it always gets picked
    <animation name='Idle' ... />
  </variant>
</group>

Ah, that's how I imagined it :)

May 24 2020, 12:18 PM
Imarok added a comment to D2362: Allow for building-specific build/repair animations and use seeding animation for fields.

Anyways, don't bother with XML, just do like carrying animations: define a variant build_{generic building name} (instead of an animation) and set it when building. Then make sure to create a group with the build animations only, and let the default one(s) have some >0 frequency, and name one "build_farm" with frequency 0. Then your units will do what you want automagically.
(you'll need to use "Idle" for your animation name when Idle, but that's OK).

May 24 2020, 11:58 AM

May 22 2020

Imarok changed the visibility for P206 A better fix for rP23690?.
May 22 2020, 10:54 PM
Imarok edited P206 A better fix for rP23690?.
May 22 2020, 10:54 PM
Imarok edited P205 Disable gcc warning introduced by rP23690.
May 22 2020, 10:44 PM
Imarok changed the visibility for P205 Disable gcc warning introduced by rP23690.
May 22 2020, 10:42 PM
Imarok edited P205 Disable gcc warning introduced by rP23690.
May 22 2020, 10:42 PM

May 17 2020

Imarok added a comment to D1751: [WIP] Map flares.

Note to self: According to Vladislav a texture should be used to draw circles. Scaling should be done with "adding tex coords and so on". Entry point for understanding how that works could be OverlayRenderer::RenderForegroundOverlays.

May 17 2020, 9:18 PM