From 538d1c953d2401459b0df23cc7007af84facb839 Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Mon, 22 Feb 2021 23:15:52 -0500
Subject: [PATCH] allow voice change from RA

---
 devTools/types/FC/RA.d.ts       |  1 +
 src/js/rulesAssistant.js        |  1 +
 src/js/rulesAssistantOptions.js | 15 +++++++++++++++
 src/js/rulesAutosurgery.js      |  2 ++
 4 files changed, 19 insertions(+)

diff --git a/devTools/types/FC/RA.d.ts b/devTools/types/FC/RA.d.ts
index 1ffbafabf9b..f837d13e769 100644
--- a/devTools/types/FC/RA.d.ts
+++ b/devTools/types/FC/RA.d.ts
@@ -25,6 +25,7 @@ declare namespace FC {
 		}
 
 		interface RuleSurgerySettings {
+			voice: number;
 			eyes: number;
 			hears: number;
 			smells: number;
diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js
index 8fec2409220..e5b20fa7fd3 100644
--- a/src/js/rulesAssistant.js
+++ b/src/js/rulesAssistant.js
@@ -364,6 +364,7 @@ App.RA.newRule = function() {
 	/** @returns {FC.RA.RuleSurgerySettings} */
 	function emptySurgery() {
 		return {
+			voice: null,
 			eyes: null,
 			hears: null,
 			smells: null,
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 9b85122e9bb..a289ccc665e 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -1879,6 +1879,7 @@ App.RA.options = (function() {
 		constructor(tabButtons) {
 			super("autosurgery", "Autosurgery", tabButtons);
 			this.appendChild(new AutosurgerySwitch());
+			this.appendChild(new VoiceSurgeryList());
 			this.appendChild(new VisionSurgeryList());
 			this.appendChild(new HearingSurgeryList());
 			this.appendChild(new SmellSurgeryList());
@@ -3838,6 +3839,20 @@ App.RA.options = (function() {
 		}
 	}
 
+	class VoiceSurgeryList extends RadioSelector {
+		constructor() {
+			const items = [
+				["mute", 0],
+				["deep", 1],
+				["feminine", 2],
+				["high, girly", 3],
+			];
+			super("Voice modification", items, true);
+			this.setValue(current_rule.set.surgery.voice);
+			this.onchange = (value) => current_rule.set.surgery.voice = value;
+		}
+	}
+
 	class VisionSurgeryList extends RadioSelector {
 		constructor() {
 			const items = [
diff --git a/src/js/rulesAutosurgery.js b/src/js/rulesAutosurgery.js
index b5d6511683f..f4ee8a70e8a 100644
--- a/src/js/rulesAutosurgery.js
+++ b/src/js/rulesAutosurgery.js
@@ -169,6 +169,8 @@ globalThis.rulesAutosurgery = (function() {
 			commitProcedure(`surgery to correct ${his} sense of taste`, s => { s.tastes = 0; });
 		} else if (slave.tastes === 0 && thisSurgery.tastes === -1) {
 			commitProcedure(`surgery to muffle ${his} sense of taste`, s => { s.tastes = -1; });
+		} else if (slave.voice !== thisSurgery.voice) {
+			commitProcedure(`surgery to alter ${his} voice`, s => { s.voice = thisSurgery.voice; });
 		}
 
 		if (slave.lactation === 2 && thisSurgery.lactation === 0) {
-- 
GitLab