/** Equivalent to the VisionLevel enum in the Pathfinder 2e system */ class VisionLevelPF2e { static BLINDED = 0; static NORMAL = 1; static LOW_LIGHT_VISION = 2; static DARKVISION = 3; } Hooks.on( "init", () => { // Calculate the NPCs vision level from its sense field. The field is a free-text string, so we have to do a bit of // maniplulation and make some assumptions about the data. libWrapper.register( "pf2e-rules-based-npc-vision", "CONFIG.PF2E.Actor.documentClasses.npc.prototype.visionLevel", function npcVisionLevel() { const senses = (this.system.traits.senses.value ?? "").split(",").map(s => s.replace(/[\s-]+/g, '').toLowerCase()); return this.getCondition("blinded") ? VisionLevelPF2e.BLINDED : senses.some(sense => ["darkvision", "greaterdarkvision"].includes(sense)) ? VisionLevelPF2e.DARKVISION : senses.includes("lowlightvision") ? VisionLevelPF2e.LOW_LIGHT_VISION : VisionLevelPF2e.NORMAL; }, "OVERRIDE" ); libWrapper.register( "pf2e-rules-based-npc-vision", "CONFIG.Token.documentClass.prototype.rulesBasedVision", function npcRulesBasedVision() { return !!(this.sight.enabled && this.actor?.isOfType("character", "familiar", "npc") && this.scene?.rulesBasedVision); }, "OVERRIDE" ); } );