From f54301776a9e42d0a3f1b492f09e2e5b7956ab04 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Sat, 2 Mar 2019 12:35:53 -0500
Subject: [PATCH] Albinism genetic quirk

---
 devNotes/VersionChangeLog-Premod+LoliMod.txt |  2 +-
 slave variables documentation - Pregmod.txt  |  2 +-
 src/js/SlaveState.js                         |  1 +
 src/js/assayJS.js                            | 23 +++++-
 src/js/generateGenetics.js                   | 74 ++++++++++++++++++--
 src/js/generateNewSlaveJS.js                 | 41 +++++++++++
 src/js/slaveCostJS.js                        |  6 ++
 src/npc/databases/dSlavesDatabase.tw         |  2 +-
 src/uncategorized/prestigiousSlave.tw        |  6 +-
 src/uncategorized/remoteSurgery.tw           |  4 ++
 src/uncategorized/sellSlave.tw               |  4 ++
 src/utility/descriptionWidgets.tw            |  3 +
 12 files changed, 156 insertions(+), 12 deletions(-)

diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt
index 5b6b24408d5..9e6c1ba0246 100644
--- a/devNotes/VersionChangeLog-Premod+LoliMod.txt
+++ b/devNotes/VersionChangeLog-Premod+LoliMod.txt
@@ -13,7 +13,7 @@ Pregmod
 	-RA can now manage basic abortions
 	-added abortion tracking tattoos
 	-added bulk incubator retrieval
-	-added "pFace" and "uFace" genetic traits
+	-added "albinism", "pFace" and "uFace" genetic traits
 	-fixes
 
 0.10.7.1-2.1.x
diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt
index c0df1367f61..f2b35ba2bc4 100644
--- a/slave variables documentation - Pregmod.txt	
+++ b/slave variables documentation - Pregmod.txt	
@@ -3563,7 +3563,7 @@ How to set up your own hero slave.
 
 -The default slave template used:
 
-<<set $activeSlave = {slaveName: "blank", slaveSurname: 0, birthName: "blank", birthSurname: 0, genes: "XX", pronoun: "she", possessive: "her", possessivePronoun: "hers", objectReflexive: "herself", object: "her", noun: "girl", weekAcquired: 0, origin: 0, career: 0, ID: 0, prestige: 0, pornFeed: 0, pornFame: 0, pornFameSpending: 0, pornPrestige: 0, pornPrestigeDesc: 0, pornFameType: "none", pornFocus: "none", pornTypeGeneral: 0, pornTypeFuckdoll: 0, pornTypeRape: 0, pornTypePreggo: 0, pornTypeBBW: 0, pornTypeGainer: 0, pornTypeStud: 0, pornTypeLoli: 0, pornTypeDeepThroat: 0, pornTypeStruggleFuck: 0, pornTypePainal: 0, pornTypeTease: 0, pornTypeRomantic: 0, pornTypePervert: 0, pornTypeCaring: 0, pornTypeUnflinching: 0, pornTypeSizeQueen: 0, pornTypeNeglectful: 0, pornTypeCumAddict: 0, pornTypeAnalAddict: 0, pornTypeAttentionWhore: 0, pornTypeBreastGrowth: 0, pornTypeAbusive: 0, pornTypeMalicious: 0, pornTypeSelfHating: 0, pornTypeBreeder: 0, pornTypeSub: 0, pornTypeCumSlut: 0, pornTypeAnal: 0, pornTypeHumiliation: 0, pornTypeBoobs: 0, pornTypeDom: 0, pornTypeSadist: 0, pornTypeMasochist: 0, pornTypePregnancy: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, father: 0, mother: 0, daughters: 0, sisters: 0, canRecruit: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), actualAge: 18, visualAge: 18, physicalAge: 18, ovaryAge: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race: "white", origRace: "white", markings: "none", eyes: 1, eyeColor: "brown", origEye: "brown", pupil: "circular", sclerae: "white", eyewear: "none", hears: 0, earwear: "none", earImplant: 0, origHColor: "brown", hColor: "brown", pubicHColor: "brown", underArmHColor: "brown", eyebrowHColor: "brown", origSkin: "light", skin: "light", hLength: 60, eyebrowFullness: "natural", hStyle: "short", pubicHStyle: "neat", underArmHStyle: "neat", eyebrowHStyle: "natural", waist: 0, corsetPiercing: 0, PLimb: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute", nipplesPiercing: 0, nipplesAccessory: 0, areolae: 0, areolaePiercing: 0, areolaeShape: "circle", boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, pregAdaptation: 50, superfetation: 0, ovaImplant: 0, wombImplant: "none", broodmother: 0, broodmotherFetuses: 0, broodmotherOnHold: 0, broodmotherCountDown: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, prostate: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules: "restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", legAccessory: "none", buttplug: "none", buttplugAttachment: "none", intelligence: 0, intelligenceImplant: 0, energy: 50, need: 0, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, publicCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customTitle: "", customTitleLisp: "", rudeTitle: 0, customImage: 0, currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, pregKnown: 0, pregWeek: 0, belly: 0, bellyPreg: 0, bellyFluid: 0, bellyImplant: -1, bellySag: 0, bellySagPreg: 0, bellyPain: 0, cervixImplant: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, scars: 0, breedingMark: 0, bodySwap: 0, HGExclude: 0, ballType: "human", eggType: "human", reservedChildren: 0, reservedChildrenNursery: 0, choosesOwnChastity: 0, pregControl: "none", readyLimbs: [], ageAdjust: 0, bald: 0, origBodyOwner: "", origBodyOwnerID: 0, death: "", hormoneBalance: 0, onDiet: 0, breastMesh: 0, slavesFathered: 0, PCChildrenFathered: 0, slavesKnockedUp: 0, PCKnockedUp: 0, prematureBirth: 0, premature: 0, origSkin: "white", vasectomy: 0, haircuts: 0, newGamePlus: 0, skillHG: 0, skillRC: 0, skillBG: 0, skillMD: 0, skillDJ: 0, skillNU: 0, skillTE: 0, skillAT: 0, skillMT: 0, skillST: 0, skillMM: 0, skillFA: 0, skillWA: 0, skillS: 0, skillE: 0, skillW: 0, tankBaby: 0, geneMods: {NCS: 0, rapidCellGrowth: 0}, NCSyouthening: 0, override_Race: 0, override_Skin: 0, override_Eye_Color: 0, override_H_Color: 0, override_Pubic_H_Color: 0, override_Arm_H_Color: 0, override_Brow_H_Color: 0, missingEyes: 0, missingArms: 0, missingLegs: 0, slaveCost: 0, lifetimeCashExpenses: 0, lifetimeCashIncome: 0, lastWeeksCashIncome: 0, lifetimeRepExpenses: 0, lifetimeRepIncome: 0, lastWeeksRepIncome: 0}>>
+<<set $activeSlave = {slaveName: "blank", slaveSurname: 0, birthName: "blank", birthSurname: 0, genes: "XX", pronoun: "she", possessive: "her", possessivePronoun: "hers", objectReflexive: "herself", object: "her", noun: "girl", weekAcquired: 0, origin: 0, career: 0, ID: 0, prestige: 0, pornFeed: 0, pornFame: 0, pornFameSpending: 0, pornPrestige: 0, pornPrestigeDesc: 0, pornFameType: "none", pornFocus: "none", pornTypeGeneral: 0, pornTypeFuckdoll: 0, pornTypeRape: 0, pornTypePreggo: 0, pornTypeBBW: 0, pornTypeGainer: 0, pornTypeStud: 0, pornTypeLoli: 0, pornTypeDeepThroat: 0, pornTypeStruggleFuck: 0, pornTypePainal: 0, pornTypeTease: 0, pornTypeRomantic: 0, pornTypePervert: 0, pornTypeCaring: 0, pornTypeUnflinching: 0, pornTypeSizeQueen: 0, pornTypeNeglectful: 0, pornTypeCumAddict: 0, pornTypeAnalAddict: 0, pornTypeAttentionWhore: 0, pornTypeBreastGrowth: 0, pornTypeAbusive: 0, pornTypeMalicious: 0, pornTypeSelfHating: 0, pornTypeBreeder: 0, pornTypeSub: 0, pornTypeCumSlut: 0, pornTypeAnal: 0, pornTypeHumiliation: 0, pornTypeBoobs: 0, pornTypeDom: 0, pornTypeSadist: 0, pornTypeMasochist: 0, pornTypePregnancy: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, father: 0, mother: 0, daughters: 0, sisters: 0, canRecruit: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), actualAge: 18, visualAge: 18, physicalAge: 18, ovaryAge: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race: "white", origRace: "white", markings: "none", eyes: 1, eyeColor: "brown", origEye: "brown", pupil: "circular", sclerae: "white", eyewear: "none", hears: 0, earwear: "none", earImplant: 0, origHColor: "brown", hColor: "brown", pubicHColor: "brown", underArmHColor: "brown", eyebrowHColor: "brown", origSkin: "light", skin: "light", hLength: 60, eyebrowFullness: "natural", hStyle: "short", pubicHStyle: "neat", underArmHStyle: "neat", eyebrowHStyle: "natural", waist: 0, corsetPiercing: 0, PLimb: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute", nipplesPiercing: 0, nipplesAccessory: 0, areolae: 0, areolaePiercing: 0, areolaeShape: "circle", boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, pregAdaptation: 50, superfetation: 0, ovaImplant: 0, wombImplant: "none", broodmother: 0, broodmotherFetuses: 0, broodmotherOnHold: 0, broodmotherCountDown: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, prostate: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules: "restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", legAccessory: "none", buttplug: "none", buttplugAttachment: "none", intelligence: 0, intelligenceImplant: 0, energy: 50, need: 0, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, publicCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customTitle: "", customTitleLisp: "", rudeTitle: 0, customImage: 0, currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, pregKnown: 0, pregWeek: 0, belly: 0, bellyPreg: 0, bellyFluid: 0, bellyImplant: -1, bellySag: 0, bellySagPreg: 0, bellyPain: 0, cervixImplant: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, scars: 0, breedingMark: 0, bodySwap: 0, HGExclude: 0, ballType: "human", eggType: "human", reservedChildren: 0, reservedChildrenNursery: 0, choosesOwnChastity: 0, pregControl: "none", readyLimbs: [], ageAdjust: 0, bald: 0, origBodyOwner: "", origBodyOwnerID: 0, death: "", hormoneBalance: 0, onDiet: 0, breastMesh: 0, slavesFathered: 0, PCChildrenFathered: 0, slavesKnockedUp: 0, PCKnockedUp: 0, prematureBirth: 0, premature: 0, origSkin: "white", vasectomy: 0, haircuts: 0, newGamePlus: 0, skillHG: 0, skillRC: 0, skillBG: 0, skillMD: 0, skillDJ: 0, skillNU: 0, skillTE: 0, skillAT: 0, skillMT: 0, skillST: 0, skillMM: 0, skillFA: 0, skillWA: 0, skillS: 0, skillE: 0, skillW: 0, tankBaby: 0, geneMods: {NCS: 0, rapidCellGrowth: 0}, NCSyouthening: 0, override_Race: 0, override_Skin: 0, override_Eye_Color: 0, override_H_Color: 0, override_Pubic_H_Color: 0, override_Arm_H_Color: 0, override_Brow_H_Color: 0, albinismOverride: 0, missingEyes: 0, missingArms: 0, missingLegs: 0, slaveCost: 0, lifetimeCashExpenses: 0, lifetimeCashIncome: 0, lastWeeksCashIncome: 0, lifetimeRepExpenses: 0, lifetimeRepIncome: 0, lastWeeksRepIncome: 0}>>
 
 Making your slave; add their name to the following, then go down the documentation adding in your changes.
 -each variable must be separated from the last by a comma followed by a space
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index 0fcfca780f9..aa66d0a24b2 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -2190,6 +2190,7 @@ App.Entity.SlaveState = class SlaveState {
 		this.override_Pubic_H_Color = 0;
 		this.override_Arm_H_Color = 0;
 		this.override_Brow_H_Color = 0;
+		this.albinismOverride = 0;
 		/** are eyes missing?
 		 *
 		 * 0: none; 1: yes, left; 2: yes, right; 3: yes, both */
diff --git a/src/js/assayJS.js b/src/js/assayJS.js
index 8ad8b3d6e6f..b2395e08f2e 100644
--- a/src/js/assayJS.js
+++ b/src/js/assayJS.js
@@ -358,12 +358,23 @@ window.newSlave = /** @param {App.Entity.SlaveState} slave */ function newSlave(
 
 	if (slave.origin !== "She was your slave, but you freed her, which she repaid by participating in a coup attempt against you. It failed, and she is again your chattel." && slave.ID !== V.boomerangSlave.ID) {
 		V.genePool.push(slave);
+		/* Store non-albino stats in genePool */
+		if (slave.geneticQuirks.albinism === 2) {
+			var albInd = V.genePool.findIndex(function(s) { return s.ID === slave.ID; });
+			V.genePool.genePool[albInd].origSkin = slave.albinismOverride.skin;
+			V.genePool.genePool[albInd].origEye = slave.albinismOverride.eyeColor;
+			V.genePool.genePool[albInd].origHColor = slave.albinismOverride.hColor;
+			V.genePool.genePool[albInd].underArmHColor = slave.albinismOverride.hColor;
+			V.genePool.genePool[albInd].pubicHColor = slave.albinismOverride.hColor;
+			V.genePool.genePool[albInd].eyebrowHColor = slave.albinismOverride.hColor;
+			slave.albinismOverride = 0;
+		}
 	} else {
 		if (V.genePool.findIndex(function(s) { return s.ID === slave.ID; }) === -1) {
 			V.genePool.push(slave);
 		}
 	}
-
+	
 	/* add to facilities array if needed */
 	if (slave.assignment !== "rest") {
 		assignJob(slave, slave.assignment);
@@ -1323,6 +1334,10 @@ window.SlaveTitle = /** @param {App.Entity.SlaveState} slave */ function SlaveTi
 				r = "loli " + r;
 			}
 		}
+		
+		if (slave.geneticQuirks.albinism === 2) {
+			r = "albino " + r;
+		}
 
 		if (slave.dick > 9 && slave.balls > 9 && slave.boobs > 12000) {
 			r = "hyper " + r;
@@ -1373,7 +1388,7 @@ window.SlaveTitle = /** @param {App.Entity.SlaveState} slave */ function SlaveTi
 		} else if (slave.births >= 3) {
 			r = r + " breeder";
 		}
-
+		
 		if (slave.indenture > -1) {
 			r = "indentured " + r;
 		}
@@ -1585,6 +1600,10 @@ window.SlaveTitle = /** @param {App.Entity.SlaveState} slave */ function SlaveTi
 			r = r + " breeder";
 		}
 
+		if (slave.geneticQuirks.albinism === 2) {
+			r = "albino " + r;
+		}
+
 		if (slave.indenture > -1) {
 			r = "indentured " + r;
 		}
diff --git a/src/js/generateGenetics.js b/src/js/generateGenetics.js
index 70947a096ed..e307acb3ee2 100644
--- a/src/js/generateGenetics.js
+++ b/src/js/generateGenetics.js
@@ -649,6 +649,38 @@ window.generateGenetics = (function() {
 		} else if (mother.geneticQuirks.uFace === 2) {
 			quirks.uFace = 1;
 		}
+		
+		//albinism
+		if (father !== 0) {
+			// Add treatment to force albinism
+			if (mother.geneticQuirks.albinism === 2 && father.geneticQuirks.albinism === 2) {
+				if (jsRandom(1, 4) === 1) {
+					quirks.albinism = 2;
+				} else {
+					quirks.albinism = 1;
+				}
+			} else if (mother.geneticQuirks.albinism === 1 + father.geneticQuirks.albinism >= 3) {
+				chance = jsRandom(1, 4);
+				if (chance === 1) {
+					quirks.albinism = 2;
+				} else if (chance !== 4) {
+					quirks.albinism = 1;
+				}
+			} else if (mother.geneticQuirks.albinism === 1 && father.geneticQuirks.albinism === 1) {
+				if (jsRandom(1, 4) === 1) {
+					quirks.albinism = 2;
+				}
+			}
+		} else if (mother.geneticQuirks.albinism >= 1) {
+			if (jsRandom(0, 40000) >= 39500) {
+				chance = jsRandom(1, 4);
+				if (chance === 1) {
+					quirks.albinism = 2;
+				} else if (chance !== 4) {
+					quirks.albinism = 1;
+				}
+			}
+		}
 
 		return clone(quirks);
 	}
@@ -850,7 +882,6 @@ window.generateChild = function (mother, ova, destination) {
 		child.mother = genes.mother;
 		child.father = genes.father;
 		child.nationality = genes.nationality;
-		child.skin = genes.skin;
 		child.race = genes.race;
 		child.intelligence = genes.intelligence;
 		if (mother.prematureBirth > 0) {
@@ -860,8 +891,6 @@ window.generateChild = function (mother, ova, destination) {
 			child.premature = 1;
 		}
 		child.face = genes.face;
-		child.eyeColor = genes.eyeColor;
-		child.hColor = genes.hColor;
 		child.underArmHStyle = genes.underArmHStyle;
 		child.pubicHStyle = genes.pubicHStyle;
 		child.markings = genes.markings;
@@ -869,9 +898,42 @@ window.generateChild = function (mother, ova, destination) {
 		child.behavioralFlaw = genes.behavioralFlaw;
 		child.fetish = genes.fetish;
 		child.geneticQuirks = clone(genes.geneticQuirks);
-		child.pubicHColor = child.hColor;
-		child.underArmHColor = child.hColor;
-		child.eyebrowHColor = child.hColor;
+		if (child.geneticQuirks.albinism == 2) {
+			child.albinismOverride = {skin: genes.skin, eyeColor: genes.eyeColor, hColor: genes.hColor};
+			child.hColor = "white";
+			child.pubicHColor = child.hColor;
+			child.underArmHColor = child.hColor;
+			child.eyebrowHColor = child.hColor;
+			child.eyeColor = "red";
+			switch (child.race) {
+				case "black":
+				case "indo-aryan":
+				case "malay":
+				case "pacific islander":
+				case "amerindian":
+					child.skin = "very fair";
+					break;
+				case "latina":
+					child.skin = "extremely fair";
+					break;
+				case "asian":
+				case "middle eastern":
+				case "semitic":
+				case "southern european":
+				case "white":
+					child.skin = "pure white";
+					break;
+				default:
+					child.skin = "pure white";
+			}
+		} else {
+			child.skin = genes.skin;
+			child.eyeColor = genes.eyeColor;
+			child.hColor = genes.hColor;
+			child.pubicHColor = child.hColor;
+			child.underArmHColor = child.hColor;
+			child.eyebrowHColor = child.hColor;
+		}
 		child.birthWeek = 0;
 		if (genes.faceShape !== undefined) {
 			child.faceShape = genes.faceShape;
diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js
index 95d513e927d..91d08e69e68 100644
--- a/src/js/generateNewSlaveJS.js
+++ b/src/js/generateNewSlaveJS.js
@@ -61,6 +61,7 @@ window.GenerateNewSlave = (function(){
 		generateBoobTweaks(); /* split this up for female vs. male? */
 		generateSkills();
 		generateDisabilities();
+		generateGeneticQuirkTweaks();
 		generatePronouns(slave);
 		slave.origRace = slave.race;
 		slave.origEye = slave.eyeColor;
@@ -1085,6 +1086,12 @@ window.GenerateNewSlave = (function(){
 		} else if (chance >= 9900) {
 			slave.geneticQuirks.hyperFertility = 1;
 		}
+		chance = jsRandom(1,20000);
+		if (chance == 777) {
+			slave.geneticQuirks.albinism = 2;
+		} else if (chance >= 19500) {
+			slave.geneticQuirks.albinism = 1;
+		}
 	}
 
 	function generateXYGeneticQuirks() {
@@ -1102,6 +1109,11 @@ window.GenerateNewSlave = (function(){
 		if (chance >= 9900) {
 			slave.geneticQuirks.hyperFertility = 1;
 		}
+		if (chance == 777) {
+			slave.geneticQuirks.albinism = 2;
+		} else if (chance >= 19500) {
+			slave.geneticQuirks.albinism = 1;
+		}
 	}
 
 	function generateAge() {
@@ -1400,6 +1412,35 @@ window.GenerateNewSlave = (function(){
 			V.oneTimeDisableDisability = 0;
 		}
 	}
+	
+	function generateGeneticQuirkTweaks() {
+		if (slave.geneticQuirks.albinism === 2) {
+			slave.albinismOverride = {skin: slave.skin, eyeColor: slave.eyeColor, hColor: slave.hColor};
+			slave.hColor = "white";
+			slave.eyeColor = "red";
+			switch (slave.race) {
+				case "black":
+				case "indo-aryan":
+				case "malay":
+				case "pacific islander":
+				case "amerindian":
+					slave.skin = "very fair";
+					break;
+				case "latina":
+					slave.skin = "extremely fair";
+					break;
+				case "asian":
+				case "middle eastern":
+				case "semitic":
+				case "southern european":
+				case "white":
+					slave.skin = "pure white";
+					break;
+				default:
+					slave.skin = "pure white";
+			}
+		}
+	}
 
 	return GenerateNewSlave;
 })();
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 87c0ba6d7ef..bdf475fa920 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -1191,6 +1191,9 @@ window.Beauty = (function() {
 	/** @param {App.Entity.SlaveState} slave */
 	function calcMultipliersBeauty(slave) {
 		calcBellyBeauty(slave);
+		if (slave.geneticQuirks.albinism == 2) {
+			beauty += 0.1*beauty;
+		}
 		if (slave.breedingMark === 1) {
 			if (V.propOutcome === 1) {
 				beauty = 2*beauty;
@@ -1970,6 +1973,9 @@ window.slaveCost = (function() {
 		if (slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge && slave.genes === "XY" && arcology.FSGenderRadicalist === "unset") {
 			multiplier += 0.5;
 		}
+		if (slave.geneticQuirks.albinism === 2) {
+			multiplier += 0.2;
+		}
 		if (slave.brand !== 0) {
 			if (V.rep > 10000) {
 				multiplier += 0.1;
diff --git a/src/npc/databases/dSlavesDatabase.tw b/src/npc/databases/dSlavesDatabase.tw
index 53b5441959f..a359fb572bd 100644
--- a/src/npc/databases/dSlavesDatabase.tw
+++ b/src/npc/databases/dSlavesDatabase.tw
@@ -489,7 +489,7 @@
 <<set $heroSlaves.push(_HS)>>
 
 <<set _HS = {}>>
-<<set _HS.slaveName = "'Virago' Kissa", _HS.birthName = "", _HS.birthSurname = "", _HS.origin = "In spite of the great demand for her kind, she has apparently eluded enslavement until recently.", _HS.career = "a wanderer", _HS.ID = _i++, _HS.prestige = 1, _HS.prestigeDesc = "She is a natural albino.", _HS.birthWeek = random(0,51), _HS.health = 100, _HS.devotion = 100, _HS.muscles = 50, _HS.height = 190, _HS.nationality = "Ugandan", _HS.race = "black", _HS.eyeColor = "pale grey", _HS.hColor = "white", _HS.pubicHColor = "white", _HS.skin = "extremely pale", _HS.hLength = 100, _HS.hStyle = "extremely long and bushy", _HS.pubicHStyle = "bushy", _HS.waist = -55, _HS.boobs = 600, _HS.face = 55, _HS.lips = 35, _HS.vaginaLube = 1, _HS.clitPiercing = 3, _HS.clitSetting = "oral", _HS.ovaries = 1, _HS.anusTat = "bleached", _HS.oralSkill = 100, _HS.whoreSkill = 100, _HS.entertainSkill = 100, _HS.combatSkill = 3, _HS.livingRules = "luxurious", _HS.speechRules = "permissive", _HS.releaseRules = "permissive", _HS.collar = "pretty jewelry", _HS.shoes = "flats", _HS.intelligence = 100, _HS.intelligenceImplant = 30, _HS.attrXY = 40, _HS.fetish = "cumslut", _HS.fetishKnown = 1, _HS.behavioralFlaw = "odd", _HS.customTat = "Her entire body is tattooed with a detailed map of her arteries which, combined with her albinism, gives her a quasi-translucent quality.", _HS.customDesc = "Her eyes are unsettling; though her irises are a pale grey color, in some lights the whole eye takes on a red cast.">>
+<<set _HS.slaveName = "'Virago' Kissa", _HS.birthName = "", _HS.birthSurname = "", _HS.origin = "In spite of the great demand for her kind, she has apparently eluded enslavement until recently.", _HS.career = "a wanderer", _HS.ID = _i++, _HS.prestige = 1, _HS.prestigeDesc = "She is a natural albino.", _HS.birthWeek = random(0,51), _HS.health = 100, _HS.devotion = 100, _HS.muscles = 50, _HS.height = 190, _HS.nationality = "Ugandan", _HS.race = "black", _HS.eyeColor = "pale grey", _HS.hColor = "white", _HS.pubicHColor = "white", _HS.skin = "extremely pale", _HS.hLength = 100, _HS.hStyle = "extremely long and bushy", _HS.pubicHStyle = "bushy", _HS.waist = -55, _HS.boobs = 600, _HS.face = 55, _HS.lips = 35, _HS.vaginaLube = 1, _HS.clitPiercing = 3, _HS.clitSetting = "oral", _HS.ovaries = 1, _HS.anusTat = "bleached", _HS.oralSkill = 100, _HS.whoreSkill = 100, _HS.entertainSkill = 100, _HS.combatSkill = 3, _HS.livingRules = "luxurious", _HS.speechRules = "permissive", _HS.releaseRules = "permissive", _HS.collar = "pretty jewelry", _HS.shoes = "flats", _HS.intelligence = 100, _HS.intelligenceImplant = 30, _HS.attrXY = 40, _HS.fetish = "cumslut", _HS.fetishKnown = 1, _HS.behavioralFlaw = "odd", _HS.geneticQuirks.albinism == 2, _HS.customTat = "Her entire body is tattooed with a detailed map of her arteries which, combined with her albinism, gives her a quasi-translucent quality.", _HS.customDesc = "Her eyes are unsettling; though her irises are a pale grey color, in some lights the whole eye takes on a red cast.">>
 <<set $heroSlaves.push(_HS)>>
 
 <<set _HS = {}>>
diff --git a/src/uncategorized/prestigiousSlave.tw b/src/uncategorized/prestigiousSlave.tw
index 53450b58a32..c9dd8a5c57b 100644
--- a/src/uncategorized/prestigiousSlave.tw
+++ b/src/uncategorized/prestigiousSlave.tw
@@ -194,6 +194,8 @@ You check to see if any especially prestigious slaves are on auction. <<if $pres
 	<<set $activeSlave.origin = "You bought her at auction.">>
 	<<set $activeSlave.prestige = 1>>
 	<<set $activeSlave.prestigeDesc = "She is a natural albino, and was quickly enslaved due to the great demand for physically unusual specimens.">>
+	<<set $activeSlave.geneticQuirks.albinism == 2>>
+	<<set $activeSlave.albinismOverride = {skin: $activeSlave.skin, eyeColor: $activeSlave.eyeColor, hColor = $activeSlave.hColor}>>
 	<<set $activeSlave.career = "a slave">>
 	<<set $activeSlave.devotion = random(-90,-80)>>
 	<<set $activeSlave.trust = random(-45,-25)>>
@@ -666,6 +668,8 @@ You check to see if any especially prestigious slaves are on auction. <<if $pres
 	<<set $activeSlave.origin = "You bought her at auction.">>
 	<<set $activeSlave.prestige = 1>>
 	<<set $activeSlave.prestigeDesc = "She is a natural albino, and was quickly enslaved due to the great demand for physically unusual specimens.">>
+	<<set $activeSlave.geneticQuirks.albinism == 2>>
+	<<set $activeSlave.albinismOverride = {skin: $activeSlave.skin, eyeColor: $activeSlave.eyeColor, hColor = $activeSlave.hColor}>>
 	<<set $activeSlave.devotion = random(-90,-80)>>
 	<<set $activeSlave.trust = random(-45,-25)>>
 	<<set $activeSlave.health = random(40,60)>>
@@ -704,7 +708,7 @@ You check to see if any especially prestigious slaves are on auction. <<if $pres
 	<<set $activeSlave.anus = 3>>
 	<<set $activeSlave.dick = 1>>
 	<<if $activeSlave.foreskin > 0>><<set $activeSlave.foreskin = $activeSlave.dick>><</if>>
-<<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>>
+	<<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>>
 	<<set $activeSlave.balls = 0>>
 	<<set $activeSlave.weight = 0>>
 	<<set $activeSlave.clitPiercing = 2>>
diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw
index 0ae78fc2bab..4c0f8dbc7d1 100644
--- a/src/uncategorized/remoteSurgery.tw
+++ b/src/uncategorized/remoteSurgery.tw
@@ -1325,6 +1325,10 @@ $He has
 				//$He already has received the plasticity increasing elasticity treatment//
 			<</if>>
 		<</if>>
+		<<if $activeSlave.geneticQuirks.albinism == 2>>
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;
+			[[Albinism prevention treamtment|Surgery Degradation][$activeSlave.geneticQuirks.albinism = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]]
+		<</if>>
 		<<if $activeSlave.geneticQuirks.pFace == 2>>
 			<br>&nbsp;&nbsp;&nbsp;&nbsp;
 			[[Prevent passing of perfect faces|Surgery Degradation][$activeSlave.geneticQuirks.pFace = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]]
diff --git a/src/uncategorized/sellSlave.tw b/src/uncategorized/sellSlave.tw
index f01a5113996..8bb1d99c935 100644
--- a/src/uncategorized/sellSlave.tw
+++ b/src/uncategorized/sellSlave.tw
@@ -204,6 +204,10 @@ A reputable slave appraiser arrives promptly to inspect $him and certify $his qu
 	$His blindness is an obvious issue.
 <</if>>
 
+<<if $activeSlave.geneticQuirks.albinism == 2>>
+	$His albinism makes $him rather desirable.
+<</if>>
+
 <<if $activeSlave.career != 0>>
 	<<if setup.bodyguardCareers.includes($activeSlave.career)>>
 		$His background would help make $him a good Bodyguard; that's valuable.
diff --git a/src/utility/descriptionWidgets.tw b/src/utility/descriptionWidgets.tw
index 35c9159533d..516038cc0fa 100644
--- a/src/utility/descriptionWidgets.tw
+++ b/src/utility/descriptionWidgets.tw
@@ -258,6 +258,9 @@
 <<widget "geneticQuirkAssessment">>
 
 <<if $geneticMappingUpgrade == 1>>
+	<<if $activeSlave.geneticQuirks.albinism == 2>>
+		$He is an albino.
+	<</if>>
 	<<if $activeSlave.geneticQuirks.pFace == 2>>
 		$He has an exceedingly rare trait associated with perfect facial beauty.
 		<<if $activeSlave.geneticQuirks.uFace == 2>>
-- 
GitLab