Index: binaries/data/mods/public/globalscripts/Templates.js
===================================================================
--- binaries/data/mods/public/globalscripts/Templates.js	(révision 18460)
+++ binaries/data/mods/public/globalscripts/Templates.js	(copie de travail)
@@ -222,10 +222,21 @@ function GetTemplateDataHelper(template,
 		ret.garrisonHolder = {};
 		if (template.GarrisonHolder.Max)
 			ret.garrisonHolder.max = getEntityValue("GarrisonHolder/Max");
 	}
 
+	if (template.Heal)
+	{
+		ret.heal = {};
+		if (template.Heal.HP)
+			ret.heal.hp = getEntityValue("Heal/HP");
+		if (template.Heal.Range)
+			ret.heal.range = getEntityValue("Heal/Range");
+		if (template.Heal.Rate)
+			ret.heal.rate = getEntityValue("Heal/Rate");
+	}
+
 	if (template.Obstruction)
 	{
 		ret.obstruction = {
 			"active": ("" + template.Obstruction.Active == "true"),
 			"blockMovement": ("" + template.Obstruction.BlockMovement == "true"),
Index: binaries/data/mods/public/gui/common/tooltips.js
===================================================================
--- binaries/data/mods/public/gui/common/tooltips.js	(révision 18460)
+++ binaries/data/mods/public/gui/common/tooltips.js	(copie de travail)
@@ -458,29 +458,29 @@ function getSpeedTooltip(template)
 	});
 }
 
 function getHealerTooltip(template)
 {
-	if (!template.healer)
+	if (!template.heal)
 		return "";
 
 	return [
-		sprintf(translatePlural("%(label)s %(val)s %(unit)s", "%(label)s %(val)s %(unit)s", template.healer.HP), {
+		sprintf(translatePlural("%(label)s %(val)s %(unit)s", "%(label)s %(val)s %(unit)s", template.heal.hp), {
 			"label": headerFont(translate("Heal:")),
-			"val": template.healer.HP,
+			"val": template.heal.hp,
 			// Translation: Short for hit points (or health points) that are healed in one healing action
-			"unit": unitFont(translatePlural("HP", "HP", template.healer.HP))
+			"unit": unitFont(translatePlural("HP", "HP", template.heal.hp))
 		}),
-		sprintf(translatePlural("%(label)s %(val)s %(unit)s", "%(label)s %(val)s %(unit)s", template.healer.Range), {
+		sprintf(translatePlural("%(label)s %(val)s %(unit)s", "%(label)s %(val)s %(unit)s", template.heal.range), {
 			"label": headerFont(translate("Range:")),
-			"val": template.healer.Range,
-			"unit": unitFont(translatePlural("meter", "meters", template.healer.Range))
+			"val": template.heal.range,
+			"unit": unitFont(translatePlural("meter", "meters", template.heal.range))
 		}),
-		sprintf(translatePlural("%(label)s %(val)s %(unit)s", "%(label)s %(val)s %(unit)s", template.healer.Rate/1000), {
+		sprintf(translatePlural("%(label)s %(val)s %(unit)s", "%(label)s %(val)s %(unit)s", template.heal.rate/1000), {
 			"label": headerFont(translate("Rate:")),
-			"val": template.healer.Rate/1000,
-			"unit": unitFont(translatePlural("second", "seconds", template.healer.Rate / 1000))
+			"val": template.heal.rate/1000,
+			"unit": unitFont(translatePlural("second", "seconds", template.heal.rate / 1000))
 		})
 	].join(translate(", "));
 }
 
 function getAurasTooltip(template)
Index: binaries/data/mods/public/gui/session/selection_details.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_details.js	(révision 18460)
+++ binaries/data/mods/public/gui/session/selection_details.js	(copie de travail)
@@ -285,10 +285,11 @@ function displaySingle(entState)
 	Engine.GetGUIObjectByName("attackAndArmorStats").tooltip = [
 		getAttackTooltip,
 		getArmorTooltip,
 		getRepairRateTooltip,
 		getBuildRateTooltip,
+		getHealerTooltip,
 		getGarrisonTooltip,
 		getProjectilesTooltip
 	].map(func => func(entState)).filter(tip => tip).join("\n");
 
 	let iconTooltips = [];
Index: binaries/data/mods/public/gui/session/selection_panels.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_panels.js	(révision 18460)
+++ binaries/data/mods/public/gui/session/selection_panels.js	(copie de travail)
@@ -1005,10 +1005,11 @@ g_SelectionPanels.Training = {
 		if (Engine.ConfigDB_GetValue("user", "showdetailedtooltips") === "true")
 			tooltips.push(
 				getHealthTooltip(template),
 				getAttackTooltip(template),
 				getArmorTooltip(template),
+				getHealerTooltip(template),
 				getGarrisonTooltip(template),
 				getProjectilesTooltip(template),
 				getSpeedTooltip(template)
 			);
 
Index: binaries/data/mods/public/gui/structree/load.js
===================================================================
--- binaries/data/mods/public/gui/structree/load.js	(révision 18460)
+++ binaries/data/mods/public/gui/structree/load.js	(copie de travail)
@@ -77,18 +77,10 @@ function loadUnit(templateName)
 				if (g_Lists.techs.indexOf(research) < 0)
 					g_Lists.techs.push(research);
 			}
 		}
 	}
-
-	if (template.Heal)
-		unit.healer = {
-			"Range": +template.Heal.Range || 0,
-			"HP": +template.Heal.HP || 0,
-			"Rate": +template.Heal.Rate || 0
-		};
-
 	if (template.Builder && template.Builder.Entities._string)
 		for (let build of template.Builder.Entities._string.split(" "))
 		{
 			build = build.replace("{civ}", g_SelectedCiv);
 			if (g_Lists.structures.indexOf(build) < 0)
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js	(révision 18460)
+++ binaries/data/mods/public/simulation/components/GuiInterface.js	(copie de travail)
@@ -543,11 +543,14 @@ GuiInterface.prototype.GetExtendedEntity
 		ret.barterMarket = { "prices": cmpBarter.GetPrices() };
 	}
 
 	let cmpHeal = Engine.QueryInterface(ent, IID_Heal);
 	if (cmpHeal)
-		ret.healer = {
+		ret.heal = {
+			"hp": cmpHeal.GetHP(),
+			"range": cmpHeal.GetRange().max,
+			"rate": cmpHeal.GetRate(),
 			"unhealableClasses": cmpHeal.GetUnhealableClasses(),
 			"healableClasses": cmpHeal.GetHealableClasses(),
 		};
 
 	return ret;
Index: binaries/data/mods/public/simulation/components/Heal.js
===================================================================
--- binaries/data/mods/public/simulation/components/Heal.js	(révision 18460)
+++ binaries/data/mods/public/simulation/components/Heal.js	(copie de travail)
@@ -45,10 +45,20 @@ Heal.prototype.GetTimers = function()
 	repeat = ApplyValueModificationsToEntity("Heal/Rate", repeat, this.entity);
 	
 	return { "prepare": prepare, "repeat": repeat };
 };
 
+Heal.prototype.GetHP = function()
+{
+	return ApplyValueModificationsToEntity("Heal/Range", +this.template.HP, this.entity);
+};
+
+Heal.prototype.GetRate = function()
+{
+	return ApplyValueModificationsToEntity("Heal/Rate", +this.template.Rate, this.entity);
+};
+
 Heal.prototype.GetRange = function()
 {
 	var min = 0;
 	var max = +this.template.Range;
 	
Index: binaries/data/mods/public/simulation/templates/units/maur_hero_chanakya.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/units/maur_hero_chanakya.xml	(révision 18460)
+++ binaries/data/mods/public/simulation/templates/units/maur_hero_chanakya.xml	(copie de travail)
@@ -29,12 +29,10 @@
     <Classes datatype="tokens">Human Organic Support</Classes>
     <VisibleClasses datatype="tokens">Hero Healer</VisibleClasses>
     <GenericName>Acharya Chanakya</GenericName>
     <SpecificName>Acharya Chāṇakya</SpecificName>
     <Icon>units/maur_hero_chanakya.png</Icon>
-    <Tooltip>Hero Special: "Healer" - Heal units at an accelerated rate.
-Hero Special: "Philosopher" - Research 4 special technologies only available to Chanakya.</Tooltip>
     <RequiredTechnology>phase_city</RequiredTechnology>
   </Identity>
   <Minimap>
     <Type>hero</Type>
   </Minimap>
