Index: ps/trunk/binaries/data/mods/public/globalscripts/ModificationTemplates.js =================================================================== --- ps/trunk/binaries/data/mods/public/globalscripts/ModificationTemplates.js +++ ps/trunk/binaries/data/mods/public/globalscripts/ModificationTemplates.js @@ -99,7 +99,8 @@ let derivedModifiers = {}; for (let technology of techsDataArray) { - if (!technology.reqs) + // Auras don't have a "reqs" property + if ('reqs' in technology && !technology.reqs) continue; let modifiers = DeriveModificationsFromTech(technology); Index: ps/trunk/binaries/data/mods/public/gui/reference/common/TemplateLoader.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/reference/common/TemplateLoader.js +++ ps/trunk/binaries/data/mods/public/gui/reference/common/TemplateLoader.js @@ -201,13 +201,16 @@ return buildQueue; } - deriveModifications(civCode) + deriveModifications(civCode, auraList) { - let techData = []; - for (let techName of this.autoResearchTechList) - techData.push(GetTechnologyBasicDataHelper(this.loadTechnologyTemplate(techName), civCode)); + const modificationData = []; + for (const techName of this.autoResearchTechList) + modificationData.push(GetTechnologyBasicDataHelper(this.loadTechnologyTemplate(techName), civCode)); - return DeriveModificationsFromTechnologies(techData); + for (const auraName of auraList) + modificationData.push(this.loadAuraTemplate(auraName)); + + return DeriveModificationsFromTechnologies(modificationData); } /** Index: ps/trunk/binaries/data/mods/public/gui/reference/common/TemplateParser.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/reference/common/TemplateParser.js +++ ps/trunk/binaries/data/mods/public/gui/reference/common/TemplateParser.js @@ -36,6 +36,7 @@ let affectedPlayers = template.affectedPlayers || this.AuraAffectedPlayerDefault; parsed.affectsTeam = this.AuraTeamIndicators.some(indicator => affectedPlayers.includes(indicator)); + parsed.affectsSelf = this.AuraSelfIndicators.some(indicator => affectedPlayers.includes(indicator)); this.auras[auraName] = parsed; return this.auras[auraName]; @@ -334,7 +335,13 @@ deriveModifications(civCode) { - this.modifiers[civCode] = this.TemplateLoader.deriveModifications(civCode); + const player = this.getPlayer(civCode); + const auraList = clone(player.civbonuses); + for (const bonusname of player.teambonuses) + if (this.getAura(bonusname).affectsSelf) + auraList.push(bonusname); + + this.modifiers[civCode] = this.TemplateLoader.deriveModifications(civCode, auraList); } derivePhaseList(technologyList, civCode) @@ -380,3 +387,8 @@ // that the aura applies to team members. TemplateParser.prototype.AuraTeamIndicators = ["MutualAlly", "ExclusiveMutualAlly"]; + +// List of tokens that, if found in an aura's "affectedPlayers" attribute, indicate +// that the aura applies to the aura's owning civ. +TemplateParser.prototype.AuraSelfIndicators = + ["Player", "Ally", "MutualAlly"];