From 948d18acad49b1429709bdc6fa68ffacaaf8fcd1 Mon Sep 17 00:00:00 2001 From: bananarama92 <35132-bananarama92@users.noreply.gitgud.io> Date: Mon, 5 Sep 2022 20:50:30 +0200 Subject: [PATCH 1/2] MAINT: Refactor the DroneMask code Move global variable getting and setting to smaller wrapper functions --- .../Inventory/ItemHead/DroneMask/DroneMask.js | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/BondageClub/Screens/Inventory/ItemHead/DroneMask/DroneMask.js b/BondageClub/Screens/Inventory/ItemHead/DroneMask/DroneMask.js index c095bba156..8bfc629247 100644 --- a/BondageClub/Screens/Inventory/ItemHead/DroneMask/DroneMask.js +++ b/BondageClub/Screens/Inventory/ItemHead/DroneMask/DroneMask.js @@ -10,10 +10,13 @@ var InventoryItemHeadDroneMaskYOffset = 89; // For testing text position for tho // Load item extension properties function InventoryItemHeadDroneMaskPattern5Load() { + InventoryItemHeadDroneMaskOriginalText = DialogFocusItem.Property.Text; + InventoryItemHeadDroneMaskPattern5LoadBase(); +} - const C = CharacterGetCurrent(); +function InventoryItemHeadDroneMaskPattern5LoadBase() { - InventoryItemHeadDroneMaskOriginalText = DialogFocusItem.Property.Text; + const C = CharacterGetCurrent(); // Dynamically displayed input const input = ElementCreateInput( @@ -39,11 +42,13 @@ function InventoryItemHeadDroneMaskPattern5Draw() { // Click function function InventoryItemHeadDroneMaskPattern5Click() { if (MouseIn(1330, 731, 340, 64)) { - InventoryItemHeadDroneMaskPattern5SaveAndExit(); + InventoryItemHeadDroneMaskPattern5SaveAndExit(InventoryItemHeadDroneMaskOriginalText); + InventoryItemHeadDroneMaskPattern5ExitSubscreen(); } // Exits screen else if (MouseIn(1885, 25, 90, 90)) { - InventoryItemHeadDroneMaskPattern5Exit(); + InventoryItemHeadDroneMaskPattern5Exit(InventoryItemHeadDroneMaskOriginalText); + InventoryItemHeadDroneMaskPattern5ExitSubscreen(); } } @@ -55,7 +60,7 @@ function InventoryItemHeadDroneMaskPattern5ExitSubscreen() { } // Save text changes and exit subscreen -function InventoryItemHeadDroneMaskPattern5SaveAndExit() { +function InventoryItemHeadDroneMaskPattern5SaveAndExit(OriginalText) { const C = CharacterGetCurrent(); const item = DialogFocusItem; @@ -63,7 +68,7 @@ function InventoryItemHeadDroneMaskPattern5SaveAndExit() { if (InventoryItemHeadDroneMaskAllowedChars.test(text)) { item.Property.Text = text; } - if (CurrentScreen === "ChatRoom" && text !== InventoryItemHeadDroneMaskOriginalText) { + if (CurrentScreen === "ChatRoom" && text !== OriginalText) { const dictionary = [ { Tag: "SourceCharacter", Text: CharacterNickname(Player), MemberNumber: Player.MemberNumber }, { Tag: "DestinationCharacterName", Text: CharacterNickname(C), MemberNumber: C.MemberNumber }, @@ -75,14 +80,12 @@ function InventoryItemHeadDroneMaskPattern5SaveAndExit() { } CharacterRefresh(C); ChatRoomCharacterItemUpdate(C, item.Asset.Group.Name); - InventoryItemHeadDroneMaskPattern5ExitSubscreen(); } // Revert text changes and exit subscreen -function InventoryItemHeadDroneMaskPattern5Exit() { - DialogFocusItem.Property.Text = InventoryItemHeadDroneMaskOriginalText; +function InventoryItemHeadDroneMaskPattern5Exit(OriginalText) { + DialogFocusItem.Property.Text = OriginalText; CharacterLoadCanvas(CharacterGetCurrent()); - InventoryItemHeadDroneMaskPattern5ExitSubscreen(); } // Exit the item's extended screen @@ -104,6 +107,15 @@ const InventoryItemHeadDroneMaskTextChange = CommonLimitFunction((C, item, text) // Drawing function for tag text function AssetsItemHeadDroneMaskAfterDraw({ C, A, X, Y, Property, drawCanvas, drawCanvasBlink, AlphaMasks, L, Color +}) { + const YOffset = InventoryItemHeadDroneMaskYOffset; + AssetsItemHeadDroneMaskAfterDrawBase({ + C, A, X, Y, Property, drawCanvas, drawCanvasBlink, AlphaMasks, L, Color, YOffset, + }) +} + +function AssetsItemHeadDroneMaskAfterDrawBase({ + C, A, X, Y, Property, drawCanvas, drawCanvasBlink, AlphaMasks, L, Color, YOffset, }) { if (L === "_Text"){ const Properties = Property || {}; @@ -133,7 +145,7 @@ function AssetsItemHeadDroneMaskAfterDraw({ DynamicDrawText(text, ctx, Width/2, Height/ (isAlone? 2: 2.5), drawOptions); //And print the canvas onto the character based on the above positions - drawCanvas(TempCanvas, X+ XOffset, Y + InventoryItemHeadDroneMaskYOffset, AlphaMasks); - drawCanvasBlink(TempCanvas, X + XOffset, Y + InventoryItemHeadDroneMaskYOffset, AlphaMasks); + drawCanvas(TempCanvas, X+ XOffset, Y + YOffset, AlphaMasks); + drawCanvasBlink(TempCanvas, X + XOffset, Y + YOffset, AlphaMasks); } } -- GitLab From beceb38a0966ec6b014057dfaefcbb23099796c0 Mon Sep 17 00:00:00 2001 From: bananarama92 <35132-bananarama92@users.noreply.gitgud.io> Date: Mon, 5 Sep 2022 20:52:42 +0200 Subject: [PATCH 2/2] ENH: Add a hood-based variant of the Smooth Latex Mask --- BondageClub/Assets/Female3DCG/Female3DCG.csv | 5 +- BondageClub/Assets/Female3DCG/Female3DCG.js | 60 +++++++++++++++++++ .../Assets/Female3DCG/Female3DCGExtended.js | 6 +- .../Character/Player/Dialog_Player.csv | 47 +++++++++++++++ .../Inventory/ItemHood/DroneMask/DroneMask.js | 51 ++++++++++++++++ BondageClub/index.html | 1 + 6 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 BondageClub/Screens/Inventory/ItemHood/DroneMask/DroneMask.js diff --git a/BondageClub/Assets/Female3DCG/Female3DCG.csv b/BondageClub/Assets/Female3DCG/Female3DCG.csv index 57afff5393..dbf4ae8523 100644 --- a/BondageClub/Assets/Female3DCG/Female3DCG.csv +++ b/BondageClub/Assets/Female3DCG/Female3DCG.csv @@ -1349,7 +1349,7 @@ ItemMouth3,PaciGag,Pacifier Gag ItemMouth3,Tentacles,Tentacle ItemMouth3,PonyGag,Bridle Gag ItemMouth3,Slime,Slime -ItemMouth3,Stitches,Stitches +ItemMouth3,Stitches,Stitches ItemMouth3,FurScarf,Fur Scarf ItemHead,,Eyes ItemHead,ClothBlindfold,Cloth Blindfold @@ -1383,7 +1383,7 @@ ItemHead,MedicalPatch,Medical Patches ItemHead,DroneMask,Smooth Latex Mask ItemHead,Slime,Slime ItemHead,FurScarf,Fur Scarf -ItemHead,Stitches,Stitches +ItemHead,Stitches,Stitches ItemNose,,Nose ItemNose,NoseHook,Nose Hook ItemNose,PigNose,Pig Nose @@ -1428,6 +1428,7 @@ ItemHood,Slime,Slime ItemHood,KittyHood,Kitty Hood ItemHood,LatexDogHood,Latex Dog Hood ItemHood,OpenMouthPlugHood,Latex Open Mouth Plug Hood +ItemHood,DroneMask,Smooth Latex Mask ItemEars,,Ears ItemEars,LightDutyEarPlugs,Light Duty Ear Plugs ItemEars,HeavyDutyEarPlugs,Heavy Duty Ear Plugs diff --git a/BondageClub/Assets/Female3DCG/Female3DCG.js b/BondageClub/Assets/Female3DCG/Female3DCG.js index 5c5f2b41d7..d5ab1b1322 100644 --- a/BondageClub/Assets/Female3DCG/Female3DCG.js +++ b/BondageClub/Assets/Female3DCG/Female3DCG.js @@ -5895,6 +5895,7 @@ var AssetFemale3DCG = [ }, { Name: "DroneMask", Category: ["SciFi"], Fetish: ["Latex"], Value: 90, Difficulty: 5, DefaultColor: ["#222222", "#CCCCCC", "#7F7F7F", "#00F4FD", "#E700CA", ], Time: 10, AllowLock: true, DrawLocks: false, Extended: true, DynamicAfterDraw: true, + BuyGroup: "DroneMask", Block:["ItemMouth", "ItemMouth2", "ItemMouth3", "ItemNose"], Hide: ["Glasses", "ItemMouth", "ItemMouth2", "ItemMouth3", "Blush"], HideItem: ["HatFacePaint", "MaskFacePaint", "ClothAccessoryFacePaint"], @@ -6314,6 +6315,65 @@ var AssetFemale3DCG = [ ] }, + { + Name: "DroneMask", Category: ["SciFi"], Fetish: ["Latex"], Value: -1, Difficulty: 5, DefaultColor: ["#222222", "#CCCCCC", "#7F7F7F", "#00F4FD", "#E700CA", ], Time: 10, AllowLock: true, DrawLocks: false, Extended: true, DynamicAfterDraw: true, + DynamicGroupName: "ItemHead", + BuyGroup: "DroneMask", + Block:["ItemMouth", "ItemMouth2", "ItemMouth3", "ItemNose"], + Hide: ["Glasses", "ItemMouth", "ItemMouth2", "ItemMouth3", "Blush", "Mask"], + HideItem: ["HatFacePaint", "MaskFacePaint", "ClothAccessoryFacePaint"], + Layer: [ // Colors layer references: Base, Shine, EyeRegular, MouthOnahole, Barcode + { Name: "Base", HasType: false, AllowModuleTypes: ["h0"] }, + { Name: "Shine", HasType: false, AllowModuleTypes: ["h0"] }, + { Name: "BaseHelm", HasType: false, AllowModuleTypes: ["h1","h2"], CopyLayerColor: "Base", Alpha: [{ Masks: [[0, 0, 500, 200]], Group: ["Head"] }], }, + { Name: "ShineHelm", HasType: false, AllowModuleTypes: ["h1","h2"], CopyLayerColor: "Shine" }, + + // All Non-part-reliant Patterns + { Name: "Barcode", HasType: false, AllowModuleTypes: ["p1"]}, + { Name: "Scarab", HasType: false, AllowModuleTypes: ["p2"], CopyLayerColor: "Barcode"}, + { Name: "Hexagon", HasType: false, AllowModuleTypes: ["p3"], CopyLayerColor: "Barcode"}, + { Name: "TwoLines", HasType: false, AllowModuleTypes: ["p4"], CopyLayerColor: "Barcode"}, + { Name: "Text", HasImage: false, CopyLayerColor: "Barcode"}, + + // All Eyes + { Name: "EyeRegularShine", HasType: false, AllowModuleTypes: ["e1"], CopyLayerColor: "Shine" }, + { Name: "EyeRegular", HasType: false, AllowModuleTypes: ["e1"], }, + { Name: "EyeRegularGlow", HasType: false, AllowModuleTypes: ["e1g1"], CopyLayerColor: "EyeRegular" }, + + { Name: "EyeSpiralShine", HasType: false, AllowModuleTypes: ["e2"], CopyLayerColor: "Shine" }, + { Name: "EyeSpiral", HasType: false, AllowModuleTypes: ["e2"], CopyLayerColor: "EyeRegular" }, + { Name: "EyeSpiralGlow", HasType: false, AllowModuleTypes: ["e2g1"], CopyLayerColor: "EyeRegular" }, + + { Name: "EyeSmileShine", HasType: false, AllowModuleTypes: ["e3"], CopyLayerColor: "Shine" }, + { Name: "EyeSmile", HasType: false, AllowModuleTypes: ["e3"], CopyLayerColor: "EyeRegular" }, + { Name: "EyeSmileGlow", HasType: false, AllowModuleTypes: ["e3g1"], CopyLayerColor: "EyeRegular" }, + + { Name: "EyeHolesShine", HasType: false, AllowModuleTypes: ["e4"], CopyLayerColor: "Shine" }, + { Name: "EyeHoles", HasType: false, AllowModuleTypes: ["e4"], CopyLayerColor: "EyeRegular" }, + + { Name: "EyeSculpted", HasType: false, AllowModuleTypes: ["e5"], CopyLayerColor: "EyeRegular" }, + { Name: "EyeSculptedShine", HasType: false, AllowModuleTypes: ["e5"], CopyLayerColor: "Shine" }, + { Name: "EyeSculptedGlow", HasType: false, AllowModuleTypes: ["e5g1"], CopyLayerColor: "EyeRegular" }, + + { Name: "EyeConcave", HasType: false, AllowModuleTypes: ["e6"], CopyLayerColor: "Base"}, + { Name: "EyeConcaveShine", HasType: false, AllowModuleTypes: ["e6"], CopyLayerColor: "Shine"}, + + // All Mouths + { Name: "MouthOnahole", HasType: false, AllowModuleTypes: ["m1"]}, + + { Name: "MouthFleshlightShine", HasType: false, AllowModuleTypes: ["m2"], CopyLayerColor: "Shine" }, + { Name: "MouthFleshlight", HasType: false, AllowModuleTypes: ["m2"], CopyLayerColor: "MouthOnahole" }, + + { Name: "MouthSmileShine", HasType: false, AllowModuleTypes: ["m3"], CopyLayerColor: "Shine" }, + { Name: "MouthSmile", HasType: false, AllowModuleTypes: ["m3"], CopyLayerColor: "MouthOnahole" }, + { Name: "MouthSmileGlow", HasType: false, AllowModuleTypes: ["m3g1"], CopyLayerColor: "MouthOnahole" }, + + { Name: "MouthHolesShine", HasType: false, AllowModuleTypes: ["m4"], CopyLayerColor: "Shine" }, + { Name: "MouthHoles", HasType: false, AllowModuleTypes: ["m4"], CopyLayerColor: "MouthOnahole" }, + + { Name: "MouthSculpted", HasType: false, AllowModuleTypes: ["m5"], CopyLayerColor: "MouthOnahole" }, + ], + }, AssetSpankingToys ], Color: ["Default", "#202020", "#808080", "#bbbbbb", "#aa8080", "#80aa80", "#8080aa", "#aaaa80", "#80aaaa", "#aa80aa", "#cc3333", "#33cc33", "#3333cc", "#cccc33", "#33cccc", "#cc33cc"] diff --git a/BondageClub/Assets/Female3DCG/Female3DCGExtended.js b/BondageClub/Assets/Female3DCG/Female3DCGExtended.js index 392ecc40b6..9d7d0301fa 100644 --- a/BondageClub/Assets/Female3DCG/Female3DCGExtended.js +++ b/BondageClub/Assets/Female3DCG/Female3DCGExtended.js @@ -2663,7 +2663,11 @@ var AssetFemale3DCGExtended = { } ] } - } + }, + DroneMask: { + Archetype: ExtendedArchetype.MODULAR, + CopyConfig: { GroupName: "ItemHead", AssetName: "DroneMask" }, + }, // DroneMask }, // ItemHood ItemDevices: { FuturisticCrate: { diff --git a/BondageClub/Screens/Character/Player/Dialog_Player.csv b/BondageClub/Screens/Character/Player/Dialog_Player.csv index b579e0584e..6de2bf8f0f 100644 --- a/BondageClub/Screens/Character/Player/Dialog_Player.csv +++ b/BondageClub/Screens/Character/Player/Dialog_Player.csv @@ -3089,6 +3089,53 @@ ItemHoodHeadboxSeethroughSeethrough,,,Lights On,, ItemHoodHeadboxSeethroughOpaque,,,Lights Off,, ItemHoodHeadboxSeethroughSetOpaque,,,SourceCharacter turns off the lights of DestinationCharacter headbox.,, ItemHoodHeadboxSeethroughSetSeethrough,,,SourceCharacter turns on the lights of DestinationCharacter headbox.,, +ItemHoodDroneMaskSelectBase,,,Select Mask Details,, +ItemHoodDroneMaskSelectEyes,,,Select Eye Shape,, +ItemHoodDroneMaskModuleEyes,,,Eyes,, +ItemHoodDroneMaskOptione0,,,Smooth,, +ItemHoodDroneMaskOptione1,,,Open,, +ItemHoodDroneMaskOptione2,,,Spirals,, +ItemHoodDroneMaskOptione3,,,Smile,, +ItemHoodDroneMaskOptione4,,,Holes,, +ItemHoodDroneMaskOptione5,,,Sculpted,, +ItemHoodDroneMaskOptione6,,,Concave,, +ItemHoodDroneMaskSetEyes,,,SourceCharacter changes the eyes on DestinationCharacter smooth latex mask.,, +ItemHoodDroneMaskSelectMouth,,,Select Mouth Shape,, +ItemHoodDroneMaskModuleMouth,,,Mouth,, +ItemHoodDroneMaskOptionm0,,,Smooth,, +ItemHoodDroneMaskOptionm1,,,Onahole,, +ItemHoodDroneMaskOptionm2,,,Pussy,, +ItemHoodDroneMaskOptionm3,,,Smile,, +ItemHoodDroneMaskOptionm4,,,Holes,, +ItemHoodDroneMaskOptionm5,,,Sculpted,, +ItemHoodDroneMaskSetMouth,,,SourceCharacter changes the mouth on DestinationCharacter smooth latex mask.,, +ItemHoodDroneMaskSelectGlow,,,Switch Glow Function,, +ItemHoodDroneMaskModuleGlow,,,Glow,, +ItemHoodDroneMaskOptiong0,,,Off,, +ItemHoodDroneMaskOptiong1,,,On,, +ItemHoodDroneMaskSetGlow,,,SourceCharacter flicks the glow switch on DestinationCharacter smooth latex mask.,, +ItemHoodDroneMaskSelectPattern,,,Select Mask Pattern,, +ItemHoodDroneMaskModulePattern,,,Pattern,, +ItemHoodDroneMaskOptionp0,,,None,, +ItemHoodDroneMaskOptionp1,,,Barcode,, +ItemHoodDroneMaskOptionp2,,,Scarab,, +ItemHoodDroneMaskOptionp3,,,Hexagon,, +ItemHoodDroneMaskOptionp4,,,Lines,, +ItemHoodDroneMaskOptionp5,,,Text,, +ItemHoodDroneMaskTextRemove,,,SourceCharacter removes the text from DestinationCharacterName smooth latex mask.,, +ItemHoodDroneMaskTextChange,,,SourceCharacter changes the text on DestinationCharacterName smooth latex mask to read 'NewText'.,, +ItemHoodDroneMaskSetPattern,,,SourceCharacter changes the pattern on DestinationCharacter smooth latex mask.,, +ItemHoodDroneMaskSelectSight,,,Select Lens Quality,, +ItemHoodDroneMaskModuleSight,,,Lenses,, +ItemHoodDroneMaskOptions0,,,Opaque,, +ItemHoodDroneMaskOptions1,,,One-Way,, +ItemHoodDroneMaskSetSight,,,SourceCharacter changes the inner lining of DestinationCharacter smooth latex mask.,, +ItemHoodDroneMaskSelectHelmet,,,Select Coverage,, +ItemHoodDroneMaskModuleHelmet,,,Coverage,, +ItemHoodDroneMaskOptionh0,,,Mask,, +ItemHoodDroneMaskOptionh1,,,Hood,, +ItemHoodDroneMaskOptionh2,,,Total Hood,, +ItemHoodDroneMaskSetHelmet,,,SourceCharacter changes the coverage of DestinationCharacter smooth latex mask.,, ItemMouthPonyGagSelectBase,,,Select bridle Gag Accessories,, ItemMouthPonyGagSelectGag,,,Select Gag Accessory,, ItemMouthPonyGagModuleGag,,,Gag,, diff --git a/BondageClub/Screens/Inventory/ItemHood/DroneMask/DroneMask.js b/BondageClub/Screens/Inventory/ItemHood/DroneMask/DroneMask.js new file mode 100644 index 0000000000..20437190d4 --- /dev/null +++ b/BondageClub/Screens/Inventory/ItemHood/DroneMask/DroneMask.js @@ -0,0 +1,51 @@ +// Wrap around the itemHead/DroneMask/DroneMask.js code as much as possible + +"use strict"; +let InventoryItemHoodDroneMaskOriginalText = ""; +var InventoryItemHoodDroneMaskYOffset = 89; // For testing text position for those with longer hair + +// Load item extension properties +function InventoryItemHoodDroneMaskPattern5Load() { + InventoryItemHoodDroneMaskOriginalText = DialogFocusItem.Property.Text; + InventoryItemHeadDroneMaskPattern5LoadBase(); +} + +// Draw extension screen image +function InventoryItemHoodDroneMaskPattern5Draw() { + InventoryItemHeadDroneMaskPattern5Draw(); +} + +// Click function +function InventoryItemHoodDroneMaskPattern5Click() { + if (MouseIn(1330, 731, 340, 64)) { + InventoryItemHeadDroneMaskPattern5SaveAndExit(InventoryItemHoodDroneMaskOriginalText); + InventoryItemHoodDroneMaskPattern5ExitSubscreen(); + } + // Exits screen + else if (MouseIn(1885, 25, 90, 90)) { + InventoryItemHeadDroneMaskPattern5Exit(InventoryItemHoodDroneMaskOriginalText); + InventoryItemHoodDroneMaskPattern5ExitSubscreen(); + } +} + +// Exit the subscreen +function InventoryItemHoodDroneMaskPattern5ExitSubscreen() { + ElementRemove(InventoryItemHeadDroneMaskInputId); + InventoryItemHoodDroneMaskOriginalText = ""; + ExtendedItemSubscreen = null; +} + +// Exit the item's extended screen +function InventoryItemHoodDroneMaskExit() { + InventoryItemHeadDroneMaskExit(); +} + +// Drawing function for tag text +function AssetsItemHoodDroneMaskAfterDraw({ + C, A, X, Y, Property, drawCanvas, drawCanvasBlink, AlphaMasks, L, Color, +}) { + let YOffset = InventoryItemHoodDroneMaskYOffset; + AssetsItemHeadDroneMaskAfterDrawBase({ + C, A, X, Y, Property, drawCanvas, drawCanvasBlink, AlphaMasks, L, Color, YOffset, + }) +} diff --git a/BondageClub/index.html b/BondageClub/index.html index 8497475cc6..e08f0793b5 100644 --- a/BondageClub/index.html +++ b/BondageClub/index.html @@ -301,6 +301,7 @@ <script src="Screens/Inventory/Wings/SteampunkWings/SteampunkWings.js"></script> <script src="Screens/Inventory/ItemNeck/TechnoCollar/TechnoCollar.js"></script> <script src="Screens/Inventory/ItemHead/DroneMask/DroneMask.js"></script> +<script src="Screens/Inventory/ItemHood/DroneMask/DroneMask.js"></script> <script src="Screens/Inventory/ItemNipples/LactationPump/LactationPump.js"></script> <script> -- GitLab