From aba7ff2a90462c7727f1eea09d216b841b1c45bb Mon Sep 17 00:00:00 2001
From: Ada <gubertpol0@gmail.com>
Date: Thu, 19 Nov 2020 23:59:59 -0800
Subject: [PATCH 1/4] Futuristic gag deflation speed

By popular request, I made the gag deflate one level at a time instead of all at once.
---
 .../ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js    | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js b/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
index 167a0a68fd..e8f776a0d6 100644
--- a/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
+++ b/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
@@ -314,7 +314,7 @@ function InventoryItemMouthFuturisticPanelGagNpcDialog(C, Option) {
 }
 
 function InventoryItemMouthFuturisticPanelGagTrigger(C, Item, Reset) {
-	var OptionLevel = (Reset) ? InventoryItemMouthFuturisticPanelGagGetOption(InventoryItemMouthFuturisticPanelGagOptions, Item.Property.OriginalSetting)
+	var OptionLevel = (Reset) ? Math.max(InventoryItemMouthFuturisticPanelGagGetOption(InventoryItemMouthFuturisticPanelGagOptions, Item.Property.OriginalSetting), InventoryItemMouthFuturisticPanelGagGetOption(InventoryItemMouthFuturisticPanelGagOptions, Item.Property.Type) - 1)
 		: Math.min(InventoryItemMouthFuturisticPanelGagOptions.length, InventoryItemMouthFuturisticPanelGagGetOption(InventoryItemMouthFuturisticPanelGagOptions, Item.Property.Type) + 1);
 	
 	if (Reset || Item.Property.Type != "Plug") {
@@ -403,6 +403,12 @@ function AssetsItemMouthFuturisticPanelGagScriptUpdatePlayer(data) {
 		} else if (Item.Property.AutoPunishUndoTime - CurrentTime <= 0 && Item.Property.Type && Item.Property.Type != Item.Property.OriginalSetting) {
 			// Deflate the gag back to the original setting after a while
 			InventoryItemMouthFuturisticPanelGagTrigger(Player, Item, true)
+			if (Item.Property.OriginalSetting != Item.Property.Type)
+				Item.Property.AutoPunishUndoTime = CurrentTime + AutoPunishUndoCD // Reset the deflation time
+			CharacterRefresh(Player, true); // Does not sync appearance while in the wardrobe
+			
+			// For a restraint, we might publish an action or change the dialog of a NPC
+			ChatRoomCharacterUpdate(Player);	
 		}
 	}
 	
-- 
GitLab


From f7029e1c48ad9cca3390bf72f9baa874ad499332 Mon Sep 17 00:00:00 2001
From: Ada <gubertpol0@gmail.com>
Date: Fri, 20 Nov 2020 14:45:02 -0800
Subject: [PATCH 2/4] Futuristic Panel Gag feature update

The gag can now have the deflation timer changed, and it can be manually pumped one level (to deflate it, just manually set it lower)
---
 BondageClub/Assets/Female3DCG/Female3DCG.js   |  4 +-
 .../Character/Player/Dialog_Player.csv        | 13 +++
 .../FuturisticPanelGag/FuturisticPanelGag.js  | 82 +++++++++++++------
 3 files changed, 72 insertions(+), 27 deletions(-)

diff --git a/BondageClub/Assets/Female3DCG/Female3DCG.js b/BondageClub/Assets/Female3DCG/Female3DCG.js
index 516288e66d..ff21d6b433 100644
--- a/BondageClub/Assets/Female3DCG/Female3DCG.js
+++ b/BondageClub/Assets/Female3DCG/Female3DCG.js
@@ -2379,7 +2379,7 @@ var AssetFemale3DCG = [
 				]
 			},
 			{
-        Name: "FuturisticPanelGag", Category: ["SciFi"], Fetish: ["Metal"], Value: 100, Difficulty: 4, Time: 15, Random: false, AllowLock: true, DefaultColor: ["#50913C", "Default"], BuyGroup: "FuturisticPanelGag", Prerequisite: "GagFlat", Hide: ["Mouth"], Effect: ["BlockMouth"], AllowEffect: ["BlockMouth", "GagVeryLight", "LightBall", "GagMedium", "GagTotal"], AllowType: ["Padded", "LightBall", "Ball", "Plug", "AutoPunish", "AutoPunishUndoTime", "OriginalSetting", "ChatMessage"], HideItem: ["ItemNoseNoseRing"], Extended: true, AlwaysExtend: true,DynamicScriptDraw: true,DynamicBeforeDraw: true, Audio: "FuturisticApply",
+        Name: "FuturisticPanelGag", Category: ["SciFi"], Fetish: ["Metal"], Value: 100, Difficulty: 4, Time: 15, Random: false, AllowLock: true, DefaultColor: ["#50913C", "Default"], BuyGroup: "FuturisticPanelGag", Prerequisite: "GagFlat", Hide: ["Mouth"], Effect: ["BlockMouth"], AllowEffect: ["BlockMouth", "GagVeryLight", "LightBall", "GagMedium", "GagTotal"], AllowType: ["Padded", "LightBall", "Ball", "Plug", "AutoPunish", "AutoPunishUndoTime", "AutoPunishUndoTimeSetting", "OriginalSetting", "ChatMessage"], HideItem: ["ItemNoseNoseRing"], Extended: true, AlwaysExtend: true,DynamicScriptDraw: true,DynamicBeforeDraw: true, Audio: "FuturisticApply",
         Layer: [
 						{ Name: "Ball", AllowColorize: true, HasType: false },
 						{ Name: "Mask" , AllowColorize: true, HasType: false },
@@ -2387,7 +2387,7 @@ var AssetFemale3DCG = [
 					]
 				},
 		  {
-					Name: "FuturisticHarnessPanelGag", Category: ["SciFi"], Fetish: ["Metal"], Value: -1, Difficulty: 6, Time: 15, Random: false, AllowLock: true, DefaultColor: ["#50913C", "Default"], BuyGroup: "FuturisticPanelGag", Prerequisite: "GagFlat", Hide: ["Mouth"], Effect: ["BlockMouth"], AllowEffect: ["BlockMouth", "GagVeryLight", "GagMedium", "GagTotal"], AllowType: ["Padded", "LightBall", "Ball", "Plug", "AutoPunish", "AutoPunishUndoTime", "OriginalSetting", "ChatMessage"], HideItem: ["ItemNoseNoseRing"], Extended: true, AlwaysExtend: true,DynamicScriptDraw: true,DynamicBeforeDraw: true, Audio: "FuturisticApply",
+					Name: "FuturisticHarnessPanelGag", Category: ["SciFi"], Fetish: ["Metal"], Value: -1, Difficulty: 6, Time: 15, Random: false, AllowLock: true, DefaultColor: ["#50913C", "Default"], BuyGroup: "FuturisticPanelGag", Prerequisite: "GagFlat", Hide: ["Mouth"], Effect: ["BlockMouth"], AllowEffect: ["BlockMouth", "GagVeryLight", "GagMedium", "GagTotal"], AllowType: ["Padded", "LightBall", "Ball", "Plug", "AutoPunish", "AutoPunishUndoTime", "AutoPunishUndoTimeSetting", "OriginalSetting", "ChatMessage"], HideItem: ["ItemNoseNoseRing"], Extended: true, AlwaysExtend: true,DynamicScriptDraw: true,DynamicBeforeDraw: true, Audio: "FuturisticApply",
 					Layer: [
 						{ Name: "Ball", AllowColorize: true, HasType: false },
 						{ Name: "Straps" , AllowColorize: true, HasType: false },
diff --git a/BondageClub/Screens/Character/Player/Dialog_Player.csv b/BondageClub/Screens/Character/Player/Dialog_Player.csv
index e47fdb3bfd..1429352748 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player.csv
+++ b/BondageClub/Screens/Character/Player/Dialog_Player.csv
@@ -619,6 +619,15 @@ FuturisticArmbinderSetTight,,,SourceCharacter configures DestinationCharacter ar
 FuturisticArmbinderTypeNormal,,,Standard Mode,,
 FuturisticArmbinderTypeTight,,,Strict Mode,,
 SelectFuturisticArmbinderType,,,Select device tightness:,,
+FuturisticPanelGagMouthDeflationTimeSetting120000,,,Timer: 2 min,,
+FuturisticPanelGagMouthDeflationTimeSetting300000,,,Timer: 5 min,,
+FuturisticPanelGagMouthDeflationTimeSetting900000,,,Timer: 15 min,,
+FuturisticPanelGagMouthDeflationTimeSetting3600000,,,Timer: 1 hour,,
+FuturisticPanelGagMouthDeflationTimeButton120000,,,2 min,,
+FuturisticPanelGagMouthDeflationTimeButton300000,,,5 min,,
+FuturisticPanelGagMouthDeflationTimeButton900000,,,15 min,,
+FuturisticPanelGagMouthDeflationTimeButton3600000,,,1 hour,,
+FuturisticPanelGagMouthDeflationTimeButtonPump,,,Trigger Inflation,,
 FuturisticPanelGagMouthDeflationTime,,,Time until deflation:,,
 FuturisticPanelGagMouthButtonChatMessage,,,Show chat message ,,
 FuturisticPanelGagMouthButtonAutoPunish,,,Auto-inflation sensitivity:,,
@@ -641,6 +650,10 @@ FuturisticPanelGagMouthSetAutoPunish0,,,SourceCharacter configures DestinationCh
 FuturisticPanelGagMouthSetAutoPunish1,,,SourceCharacter configures DestinationCharacter gag to punish her for shouting.,,
 FuturisticPanelGagMouthSetAutoPunish2,,,SourceCharacter configures DestinationCharacter gag to punish her for saying long sentences.,,
 FuturisticPanelGagMouthSetAutoPunish3,,,SourceCharacter configures DestinationCharacter gag to punish her for speaking.,,
+FuturisticPanelGagMouthSetAutoPunishTime120000,,,SourceCharacter configures DestinationCharacter gag deflate 2 minutes after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime300000,,,SourceCharacter configures DestinationCharacter gag deflate 5 minutes after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime900000,,,SourceCharacter configures DestinationCharacter gag deflate 15 minutes after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime3600000,,,SourceCharacter configures DestinationCharacter gag deflate 1 hour after triggering.,,
 DildoPlugGagMouthSetPlug,,,SourceCharacter plugs up DestinationCharacter mouth with the dildo plug.,,
 DildoPlugGagMouthSetOpen,,,SourceCharacter pulls out DestinationCharacter dildo plug from her gag.,,
 FuturisticChastityBeltPunishOrgasm,,,Punish wearer for orgasm,,
diff --git a/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js b/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
index e8f776a0d6..223191f7f3 100644
--- a/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
+++ b/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
@@ -87,6 +87,7 @@ function InventoryItemMouthFuturisticPanelGagLoad() {
 			AutoPunish: 0, AutoPunishUndoTime: 0 , OriginalSetting: "Padded", ChatMessage: true};
 		if (DialogFocusItem.Property.AutoPunish == null) DialogFocusItem.Property.AutoPunish = 0;
 		if (DialogFocusItem.Property.AutoPunishUndoTime == null) DialogFocusItem.Property.AutoPunishUndoTime = 0;
+		if (DialogFocusItem.Property.AutoPunishUndoTimeSetting == null) DialogFocusItem.Property.AutoPunishUndoTimeSetting = 300000;
 		if (DialogFocusItem.Property.OriginalSetting == null) DialogFocusItem.Property.OriginalSetting = null;
 		if (DialogFocusItem.Property.ChatMessage == null) DialogFocusItem.Property.ChatMessage = true;
 		if (DialogFocusItem.Property.BlinkState == null) DialogFocusItem.Property.BlinkState = true;
@@ -169,11 +170,11 @@ function InventoryItemMouthFuturisticPanelGagDraw() {
 		
 		var type = "FuturisticPanelGagMouthType" + ((DialogFocusItem.Property.Type != null) ? DialogFocusItem.Property.Type : "Padded")
 		DrawText(DialogFind(Player, "FuturisticPanelGagMouthTypeDesc") + " " +
-			DialogFind(Player, type), 1500, 475, "White", "Gray");	
+			DialogFind(Player, type), 1350, 475, "White", "Gray");	
 				
 		MainCanvas.textAlign = "left";
-		DrawCheckbox(1100, 650, 64, 64, "", DialogFocusItem.Property.ChatMessage, "White");
-		DrawText(DialogFind(Player, "FuturisticPanelGagMouthButtonChatMessage"), 1200, 683, "White", "Gray");	
+		DrawCheckbox(1100, 890, 64, 64, "", DialogFocusItem.Property.ChatMessage, "White");
+		DrawText(DialogFind(Player, "FuturisticPanelGagMouthButtonChatMessage"), 1200, 923, "White", "Gray");	
 		MainCanvas.textAlign = "center";
 		
 		var autopunish = "Off" 
@@ -182,17 +183,25 @@ function InventoryItemMouthFuturisticPanelGagDraw() {
 		else if (DialogFocusItem.Property.AutoPunish == 2) {autopunish = "Medium"}
 		else {autopunish = "Maximum"}
 		
-		DrawText(DialogFind(Player, "FuturisticPanelGagMouthButtonAutoPunish") + " " + autopunish, 1500, 770, "White", "Gray");
+		DrawText(DialogFind(Player, "FuturisticPanelGagMouthButtonAutoPunish") + " " + autopunish, 1350, 683, "White", "Gray");
 		if (DialogFocusItem) {
-			if (DialogFocusItem.Property.Type != null) DrawButton(1250, 500, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypePadded"), "White", "");
-			if (DialogFocusItem.Property.Type != "LightBall") DrawButton(1550, 500, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypeLightBall"), "White", "");
-			if (DialogFocusItem.Property.Type != "Ball") DrawButton(1250, 570, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypeBall"), "White", "");
-			if (DialogFocusItem.Property.Type != "Plug") DrawButton(1550, 570, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypePlug"), "White", "");
+			if (DialogFocusItem.Property.Type != null) DrawButton(1100, 500, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypePadded"), "White", "");
+			if (DialogFocusItem.Property.Type != "LightBall") DrawButton(1400, 500, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypeLightBall"), "White", "");
+			if (DialogFocusItem.Property.Type != "Ball") DrawButton(1100, 570, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypeBall"), "White", "");
+			if (DialogFocusItem.Property.Type != "Plug") DrawButton(1400, 570, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthTypePlug"), "White", "");
 			
-			if (DialogFocusItem.Property.AutoPunish != 0) DrawButton(1250, 800, 200, 64, DialogFind(Player, "TurnOff"), "White", "");
-			if (DialogFocusItem.Property.AutoPunish != 1) DrawButton(1550, 800, 200, 64, DialogFind(Player, "Low"), "White", "");
-			if (DialogFocusItem.Property.AutoPunish != 2) DrawButton(1250, 870, 200, 64, DialogFind(Player, "Medium"), "White", "");
-			if (DialogFocusItem.Property.AutoPunish != 3) DrawButton(1550, 870, 200, 64, DialogFind(Player, "Maximum"), "White", "");
+			if (DialogFocusItem.Property.AutoPunish != 0) DrawButton(1100, 707, 200, 64, DialogFind(Player, "TurnOff"), "White", "");
+			if (DialogFocusItem.Property.AutoPunish != 1) DrawButton(1400, 707, 200, 64, DialogFind(Player, "Low"), "White", "");
+			if (DialogFocusItem.Property.AutoPunish != 2) DrawButton(1100, 777, 200, 64, DialogFind(Player, "Medium"), "White", "");
+			if (DialogFocusItem.Property.AutoPunish != 3) DrawButton(1400, 777, 200, 64, DialogFind(Player, "Maximum"), "White", "");
+			
+			DrawText(DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeSetting" + DialogFocusItem.Property.AutoPunishUndoTimeSetting), 1775, 475, "White", "Gray");	
+			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 120000) DrawButton(1675, 500, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton120000"), "White", "");
+			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 300000) DrawButton(1675, 570, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton300000"), "White", "");
+			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 900000) DrawButton(1675, 640, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton900000"), "White", "");
+			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 3600000) DrawButton(1675, 710, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton3600000"), "White", "");
+			
+			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting) DrawButton(1675, 800, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButtonPump"), "White", "");
 		}
 		
 	}
@@ -206,32 +215,45 @@ function InventoryItemMouthFuturisticPanelGagClick() {
 	if (!InventoryItemMouthFuturisticPanelGagValidate(C)) {
 		InventoryItemMouthFuturisticPanelGagClickAccessDenied()
 	} else {		
-		if (MouseIn(1885, 25, 90, 90)) InventoryItemPelvisFuturisticChastityBeltExit()
+		if (MouseIn(1885, 25, 90, 90)) InventoryItemMouthFuturisticPanelGagExit()
 			
-		else if (MouseIn(1100, 650, 64, 64)) DialogFocusItem.Property.ChatMessage = !DialogFocusItem.Property.ChatMessage
+		else if (MouseIn(1100, 890, 64, 64)) DialogFocusItem.Property.ChatMessage = !DialogFocusItem.Property.ChatMessage
 		
 		
-		else if (DialogFocusItem.Property.Type != null && MouseIn(1250, 500, 200, 64)) {
+		else if (DialogFocusItem.Property.Type != null && MouseIn(1100, 500, 200, 64)) {
 			DialogFocusItem.Property.AutoPunishUndoTime = 0; 
 			DialogFocusItem.Property.OriginalSetting = null; 
 			ExtendedItemSetType(C, InventoryItemMouthFuturisticPanelGagOptions, InventoryItemMouthFuturisticPanelGagOptions[0], false)}
-		else if (DialogFocusItem.Property.Type != "LightBall" && MouseIn(1550, 500, 200, 64)) {
+		else if (DialogFocusItem.Property.Type != "LightBall" && MouseIn(1400, 500, 200, 64)) {
 			DialogFocusItem.Property.AutoPunishUndoTime = 0;
 			DialogFocusItem.Property.OriginalSetting = "LightBall";
 			ExtendedItemSetType(C, InventoryItemMouthFuturisticPanelGagOptions, InventoryItemMouthFuturisticPanelGagOptions[1], false)}
-		else if (DialogFocusItem.Property.Type != "Ball" && MouseIn(1250, 570, 200, 64)) {
+		else if (DialogFocusItem.Property.Type != "Ball" && MouseIn(1100, 570, 200, 64)) {
 			DialogFocusItem.Property.AutoPunishUndoTime = 0;
 			DialogFocusItem.Property.OriginalSetting = "Ball";
 			ExtendedItemSetType(C, InventoryItemMouthFuturisticPanelGagOptions, InventoryItemMouthFuturisticPanelGagOptions[2], false)}
-		else if (DialogFocusItem.Property.Type != "Plug" && MouseIn(1550, 570, 200, 64)) {
+		else if (DialogFocusItem.Property.Type != "Plug" && MouseIn(1400, 570, 200, 64)) {
 			DialogFocusItem.Property.AutoPunishUndoTime = 0;
 			DialogFocusItem.Property.OriginalSetting = "Plug";
 		ExtendedItemSetType(C, InventoryItemMouthFuturisticPanelGagOptions, InventoryItemMouthFuturisticPanelGagOptions[3], false)}
 		
-		else if (DialogFocusItem.Property.AutoPunish != 0 && MouseIn(1250, 800, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 0)
-		else if (DialogFocusItem.Property.AutoPunish != 1 && MouseIn(1550, 800, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 1)
-		else if (DialogFocusItem.Property.AutoPunish != 2 && MouseIn(1250, 870, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 2)
-		else if (DialogFocusItem.Property.AutoPunish != 3 && MouseIn(1550, 870, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 3)
+		else if (DialogFocusItem.Property.AutoPunish != 0 && MouseIn(1100, 707, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 0)
+		else if (DialogFocusItem.Property.AutoPunish != 1 && MouseIn(1400, 707, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 1)
+		else if (DialogFocusItem.Property.AutoPunish != 2 && MouseIn(1100, 777, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 2)
+		else if (DialogFocusItem.Property.AutoPunish != 3 && MouseIn(1400, 777, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, DialogFocusItem, 3)
+			
+		
+		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 120000 && MouseIn(1675, 500, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 120000)
+		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 300000 && MouseIn(1675, 570, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 300000)
+		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 900000 && MouseIn(1675, 640, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 900000)
+		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 3600000 && MouseIn(1675, 710, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 3600000)
+			
+		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting && MouseIn(1675, 800, 200, 64)) {
+			InventoryItemMouthFuturisticPanelGagTrigger(Player, DialogFocusItem, false)
+			DialogFocusItem.Property.AutoPunishUndoTime = CurrentTime + DialogFocusItem.Property.AutoPunishUndoTimeSetting // Reset the deflation time
+			CharacterRefresh(Player, true); // Does not sync appearance while in the wardrobe
+			ChatRoomCharacterUpdate(Player);	
+		}
 		
 	}
 }
@@ -287,6 +309,16 @@ function InventoryItemMouthFuturisticPanelGagSetAutoPunish(C, Item, Level) {
 	ChatRoomPublishCustomAction(msg, true, Dictionary);
 }
 
+function InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, Item, Time) {
+	Item.Property.AutoPunishUndoTimeSetting = Time
+	var msg = "FuturisticPanelGagMouthSetAutoPunishTime" + Time;
+	var Dictionary = [
+		{ Tag: "SourceCharacter", Text: Player.Name, MemberNumber: Player.MemberNumber },
+		{ Tag: "DestinationCharacter", Text: C.Name, MemberNumber: C.MemberNumber },
+	];
+	ChatRoomPublishCustomAction(msg, true, Dictionary);
+}
+
 function InventoryItemMouthFuturisticPanelGagPublishAction(C, Option) {
 	
 	
@@ -372,7 +404,7 @@ function InventoryItemMouthFuturisticPanelGagSetOption(C, Options, Option, Item,
 function AssetsItemMouthFuturisticPanelGagScriptUpdatePlayer(data) {
 	var Item = data.Item
 	// Punish the player if they speak
-	if (Item.Property.AutoPunish && Item.Property.AutoPunish > 0) {
+	if (Item.Property.AutoPunish && Item.Property.AutoPunish > 0 && Item.Property.AutoPunishUndoTimeSetting) {
 		
 		var LastMessages = data.PersistentData().LastMessageLen
 		var GagTriggerPunish = false
@@ -394,7 +426,7 @@ function AssetsItemMouthFuturisticPanelGagScriptUpdatePlayer(data) {
 		
 		if (GagTriggerPunish) {
 			InventoryItemMouthFuturisticPanelGagTrigger(Player, Item, false)
-			Item.Property.AutoPunishUndoTime = CurrentTime + AutoPunishUndoCD // Reset the deflation time
+			Item.Property.AutoPunishUndoTime = CurrentTime + Item.Property.AutoPunishUndoTimeSetting // Reset the deflation time
 			CharacterRefresh(Player, true); // Does not sync appearance while in the wardrobe
 			
 			// For a restraint, we might publish an action or change the dialog of a NPC
@@ -404,7 +436,7 @@ function AssetsItemMouthFuturisticPanelGagScriptUpdatePlayer(data) {
 			// Deflate the gag back to the original setting after a while
 			InventoryItemMouthFuturisticPanelGagTrigger(Player, Item, true)
 			if (Item.Property.OriginalSetting != Item.Property.Type)
-				Item.Property.AutoPunishUndoTime = CurrentTime + AutoPunishUndoCD // Reset the deflation time
+				Item.Property.AutoPunishUndoTime = CurrentTime + Item.Property.AutoPunishUndoTimeSetting // Reset the deflation time
 			CharacterRefresh(Player, true); // Does not sync appearance while in the wardrobe
 			
 			// For a restraint, we might publish an action or change the dialog of a NPC
-- 
GitLab


From 4a59d403a542664b72853132cfc177cbdaa737f8 Mon Sep 17 00:00:00 2001
From: Ada <gubertpol0@gmail.com>
Date: Fri, 20 Nov 2020 14:47:45 -0800
Subject: [PATCH 3/4] Typo

---
 BondageClub/Screens/Character/Player/Dialog_Player.csv | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/BondageClub/Screens/Character/Player/Dialog_Player.csv b/BondageClub/Screens/Character/Player/Dialog_Player.csv
index ca8176ce7e..853ee78a07 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player.csv
+++ b/BondageClub/Screens/Character/Player/Dialog_Player.csv
@@ -650,10 +650,10 @@ FuturisticPanelGagMouthSetAutoPunish0,,,SourceCharacter configures DestinationCh
 FuturisticPanelGagMouthSetAutoPunish1,,,SourceCharacter configures DestinationCharacter gag to punish her for shouting.,,
 FuturisticPanelGagMouthSetAutoPunish2,,,SourceCharacter configures DestinationCharacter gag to punish her for saying long sentences.,,
 FuturisticPanelGagMouthSetAutoPunish3,,,SourceCharacter configures DestinationCharacter gag to punish her for speaking.,,
-FuturisticPanelGagMouthSetAutoPunishTime120000,,,SourceCharacter configures DestinationCharacter gag deflate 2 minutes after triggering.,,
-FuturisticPanelGagMouthSetAutoPunishTime300000,,,SourceCharacter configures DestinationCharacter gag deflate 5 minutes after triggering.,,
-FuturisticPanelGagMouthSetAutoPunishTime900000,,,SourceCharacter configures DestinationCharacter gag deflate 15 minutes after triggering.,,
-FuturisticPanelGagMouthSetAutoPunishTime3600000,,,SourceCharacter configures DestinationCharacter gag deflate 1 hour after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime120000,,,SourceCharacter configures DestinationCharacter gag to deflate 2 minutes after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime300000,,,SourceCharacter configures DestinationCharacter gag to deflate 5 minutes after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime900000,,,SourceCharacter configures DestinationCharacter gag to deflate 15 minutes after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime3600000,,,SourceCharacter configures DestinationCharacter gag to deflate 1 hour after triggering.,,
 DildoPlugGagMouthSetPlug,,,SourceCharacter plugs up DestinationCharacter mouth with the dildo plug.,,
 DildoPlugGagMouthSetOpen,,,SourceCharacter pulls out DestinationCharacter dildo plug from her gag.,,
 FuturisticChastityBeltPunishOrgasm,,,Punish wearer for orgasm,,
-- 
GitLab


From 9fcc67c8939f5df2b3ff919315617d443fd1f33f Mon Sep 17 00:00:00 2001
From: Ada <gubertpol0@gmail.com>
Date: Fri, 20 Nov 2020 15:32:25 -0800
Subject: [PATCH 4/4] Added 20 hours option

---
 BondageClub/Screens/Character/Player/Dialog_Player.csv      | 3 +++
 .../ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js      | 6 ++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/BondageClub/Screens/Character/Player/Dialog_Player.csv b/BondageClub/Screens/Character/Player/Dialog_Player.csv
index 853ee78a07..82c8e75255 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player.csv
+++ b/BondageClub/Screens/Character/Player/Dialog_Player.csv
@@ -623,10 +623,12 @@ FuturisticPanelGagMouthDeflationTimeSetting120000,,,Timer: 2 min,,
 FuturisticPanelGagMouthDeflationTimeSetting300000,,,Timer: 5 min,,
 FuturisticPanelGagMouthDeflationTimeSetting900000,,,Timer: 15 min,,
 FuturisticPanelGagMouthDeflationTimeSetting3600000,,,Timer: 1 hour,,
+FuturisticPanelGagMouthDeflationTimeSetting72000000,,,Timer: 20 hours,,
 FuturisticPanelGagMouthDeflationTimeButton120000,,,2 min,,
 FuturisticPanelGagMouthDeflationTimeButton300000,,,5 min,,
 FuturisticPanelGagMouthDeflationTimeButton900000,,,15 min,,
 FuturisticPanelGagMouthDeflationTimeButton3600000,,,1 hour,,
+FuturisticPanelGagMouthDeflationTimeButton72000000,,,20 hours,,
 FuturisticPanelGagMouthDeflationTimeButtonPump,,,Trigger Inflation,,
 FuturisticPanelGagMouthDeflationTime,,,Time until deflation:,,
 FuturisticPanelGagMouthButtonChatMessage,,,Show chat message ,,
@@ -654,6 +656,7 @@ FuturisticPanelGagMouthSetAutoPunishTime120000,,,SourceCharacter configures Dest
 FuturisticPanelGagMouthSetAutoPunishTime300000,,,SourceCharacter configures DestinationCharacter gag to deflate 5 minutes after triggering.,,
 FuturisticPanelGagMouthSetAutoPunishTime900000,,,SourceCharacter configures DestinationCharacter gag to deflate 15 minutes after triggering.,,
 FuturisticPanelGagMouthSetAutoPunishTime3600000,,,SourceCharacter configures DestinationCharacter gag to deflate 1 hour after triggering.,,
+FuturisticPanelGagMouthSetAutoPunishTime72000000,,,SourceCharacter configures DestinationCharacter gag to deflate 20 hours after triggering.,,
 DildoPlugGagMouthSetPlug,,,SourceCharacter plugs up DestinationCharacter mouth with the dildo plug.,,
 DildoPlugGagMouthSetOpen,,,SourceCharacter pulls out DestinationCharacter dildo plug from her gag.,,
 FuturisticChastityBeltPunishOrgasm,,,Punish wearer for orgasm,,
diff --git a/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js b/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
index 54a2192aad..6893af3161 100644
--- a/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
+++ b/BondageClub/Screens/Inventory/ItemMouth/FuturisticPanelGag/FuturisticPanelGag.js
@@ -200,8 +200,9 @@ function InventoryItemMouthFuturisticPanelGagDraw() {
 			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 300000) DrawButton(1675, 570, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton300000"), "White", "");
 			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 900000) DrawButton(1675, 640, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton900000"), "White", "");
 			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 3600000) DrawButton(1675, 710, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton3600000"), "White", "");
+			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 72000000) DrawButton(1675, 780, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButton72000000"), "White", "");
 			
-			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting) DrawButton(1675, 800, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButtonPump"), "White", "");
+			if (DialogFocusItem.Property.AutoPunishUndoTimeSetting) DrawButton(1675, 880, 200, 64, DialogFind(Player, "FuturisticPanelGagMouthDeflationTimeButtonPump"), "White", "");
 		}
 		
 	}
@@ -247,8 +248,9 @@ function InventoryItemMouthFuturisticPanelGagClick() {
 		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 300000 && MouseIn(1675, 570, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 300000)
 		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 900000 && MouseIn(1675, 640, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 900000)
 		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 3600000 && MouseIn(1675, 710, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 3600000)
+		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting != 72000000 && MouseIn(1675, 780, 200, 64)) InventoryItemMouthFuturisticPanelGagSetAutoPunishTime(C, DialogFocusItem, 72000000)
 			
-		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting && MouseIn(1675, 800, 200, 64)) {
+		else if (DialogFocusItem.Property.AutoPunishUndoTimeSetting && MouseIn(1675, 880, 200, 64)) {
 			InventoryItemMouthFuturisticPanelGagTrigger(Player, DialogFocusItem, false)
 			DialogFocusItem.Property.AutoPunishUndoTime = CurrentTime + DialogFocusItem.Property.AutoPunishUndoTimeSetting // Reset the deflation time
 			CharacterRefresh(Player, true); // Does not sync appearance while in the wardrobe
-- 
GitLab