diff --git a/BondageClub/Assets/Female3DCG/Female3DCG.js b/BondageClub/Assets/Female3DCG/Female3DCG.js index d2504898671bbacac67f705f72a9cdf0d24a96e3..c798f24dce8caefa6c3edd9d0dbbc92c184aa43d 100644 --- a/BondageClub/Assets/Female3DCG/Female3DCG.js +++ b/BondageClub/Assets/Female3DCG/Female3DCG.js @@ -97,7 +97,7 @@ const E = /** @type {const} */ ({ /** * Marks the item as a urethral insert. - * + * * Used when checking if the item should allow the penis to be limp. */ ForcedErection: "ForcedErection", @@ -7764,7 +7764,7 @@ var AssetFemale3DCG = [ Name: "Ankle", AllowTypes: { n: 1 }, Priority: 24, - AllowColorize: true, + AllowColorize: true, }, { Name: "Knee", @@ -10123,10 +10123,7 @@ var AssetFemale3DCG = [ Top: 30, Left: 150, DefaultColor: ["#808080", "#A0A0A0"], - HideItem: [ - "HairAccessory1EarsElfEars", - "HairAccessory2EarsElfEars", - ], + HideItem: ["HairAccessory1EarsElfEars", "HairAccessory2EarsElfEars"], Layer: [ { Name: "Main", @@ -10810,10 +10807,7 @@ var AssetFemale3DCG = [ Top: 30, Left: 150, DefaultColor: ["#808080", "#A0A0A0"], - HideItem: [ - "HairAccessory1EarsElfEars", - "HairAccessory2EarsElfEars", - ], + HideItem: ["HairAccessory1EarsElfEars", "HairAccessory2EarsElfEars"], Layer: [ { Name: "Main", @@ -11540,17 +11534,12 @@ var AssetFemale3DCG = [ BackElbowTouch: PoseType.HIDE, BackBoxTie: PoseType.HIDE, }, - Hide: [ - "LeftHand", - "RightHand", - ], + Hide: ["LeftHand", "RightHand"], Layer: [ { Name: "Main", Priority: 29 }, - { Name: "Fur", - AllowTypes: { typed: 0 }, - Priority: 32, - }, - { Name: "FurSup", + { Name: "Fur", AllowTypes: { typed: 0 }, Priority: 32 }, + { + Name: "FurSup", PoseMapping: { BackCuffs: "BackCuffs", AllFours: PoseType.HIDE, @@ -17191,7 +17180,12 @@ var AssetFemale3DCG = [ { Name: "PlasticChastityCage1", Gender: "M", - Prerequisite: ["AccessVulva", "HasPenis", "AccessFullPenis", "NoErection"], + Prerequisite: [ + "AccessVulva", + "HasPenis", + "AccessFullPenis", + "NoErection", + ], Difficulty: 50, Value: 20, Effect: [E.Chaste], @@ -17242,7 +17236,12 @@ var AssetFemale3DCG = [ { Name: "PlasticChastityCage2", Gender: "M", - Prerequisite: ["AccessVulva", "HasPenis", "AccessFullPenis", "NoErection"], + Prerequisite: [ + "AccessVulva", + "HasPenis", + "AccessFullPenis", + "NoErection", + ], Value: 20, Difficulty: 50, Effect: [E.Chaste], @@ -17273,7 +17272,12 @@ var AssetFemale3DCG = [ { Name: "TechnoChastityCage", Gender: "M", - Prerequisite: ["AccessVulva", "HasPenis", "AccessFullPenis", "NoErection"], + Prerequisite: [ + "AccessVulva", + "HasPenis", + "AccessFullPenis", + "NoErection", + ], Category: ["SciFi"], Value: 50, Difficulty: 50, @@ -17306,7 +17310,12 @@ var AssetFemale3DCG = [ Name: "FlatChastityCage", Gender: "M", Fetish: ["Metal"], - Prerequisite: ["AccessVulva", "HasPenis", "AccessFullPenis", "NoErection"], + Prerequisite: [ + "AccessVulva", + "HasPenis", + "AccessFullPenis", + "NoErection", + ], Value: 25, Difficulty: 50, Effect: [E.Chaste], @@ -17336,7 +17345,12 @@ var AssetFemale3DCG = [ { Name: "ChastityPouch", Gender: "M", - Prerequisite: ["AccessVulva", "HasPenis", "AccessFullPenis", "NoErection"], + Prerequisite: [ + "AccessVulva", + "HasPenis", + "AccessFullPenis", + "NoErection", + ], Value: 25, Difficulty: 50, Effect: [E.Chaste], @@ -17627,18 +17641,32 @@ var AssetFemale3DCG = [ Gender: "M", Value: 10, Hide: ["Pussy"], - Prerequisite: ["NoChastityCage"], + Prerequisite: ["NoChastityCage", "HasPenis"], Effect: ["ForcedErection"], Left: 200, Top: 410, Layer: [ { Name: "Sound", AllowTypes: { typed: 0 } }, { Name: "Shine", AllowTypes: { typed: 0 } }, - { Name: "SoundOut", CopyLayerColor: "Sound", AllowTypes: { typed: 1 } }, - { Name: "ShineOut", CopyLayerColor: "Shine", AllowTypes: { typed: 1 } }, - { Name: "Penis", InheritColor: "Pussy", ColorSuffix: { HEX_COLOR: "White" }, AllowTypes: { typed: [0, 1, 2] } }, - ] - } + { + Name: "SoundOut", + CopyLayerColor: "Sound", + AllowTypes: { typed: 1 }, + }, + { + Name: "ShineOut", + CopyLayerColor: "Shine", + AllowTypes: { typed: 1 }, + }, + { + Name: "Penis", + InheritColor: "Pussy", + ColorSuffix: { HEX_COLOR: "White" }, + AllowTypes: { typed: [0, 1] }, + HideColoring: true, + }, + ], + }, ], Color: [ "Default", diff --git a/BondageClub/Assets/Female3DCG/Female3DCGExtended.js b/BondageClub/Assets/Female3DCG/Female3DCGExtended.js index 93c011b3de70a3ee7836a32280ba4df697d7fb4b..03e408724ac0dbb5e6c04093659f747feb6c356e 100644 --- a/BondageClub/Assets/Female3DCG/Female3DCGExtended.js +++ b/BondageClub/Assets/Female3DCG/Female3DCGExtended.js @@ -9032,12 +9032,12 @@ var AssetFemale3DCGExtended = { { Name: "In", Property: { - Effect: [E.DenialMode] - } + Effect: [E.DenialMode], + }, }, { - Name: "Out" - } + Name: "Out", + }, ], DrawImages: false, }, // UrethralSound diff --git a/BondageClub/Assets/Female3DCG/LayerNames.csv b/BondageClub/Assets/Female3DCG/LayerNames.csv index eb5a09d1cd44313e60eee112f4356654e876252a..b53a65ae22d2dda3e8fe6af69a54cffe1c9a817e 100644 --- a/BondageClub/Assets/Female3DCG/LayerNames.csv +++ b/BondageClub/Assets/Female3DCG/LayerNames.csv @@ -1817,6 +1817,8 @@ ItemVulvaPiercingsRoundClitPiercingHaremChain,Harem Chain ItemVulvaPiercingsRoundClitPiercingHaremVeil,Harem Veil ItemVulvaPiercingsRoundClitPiercingRing,Ring ItemVulvaPiercingsRoundClitPiercingWeight,Weight +ItemVulvaPiercingsUrethralSoundSound,Sound +ItemVulvaPiercingsUrethralSoundShine,Shine ItemVulvaPiercingsTapedClitEggEgg,Egg ItemVulvaPiercingsTapedClitEggTape,Tape ItemVulvaPiercingsVibeEggGlansEgg,Vibe Egg diff --git a/BondageClub/Screens/Room/Platform/Platform.js b/BondageClub/Screens/Room/Platform/Platform.js index 636465ff3b58a3816b1446160e56f8c3451a47ac..c118006d5c798618fe0636606cf5c3e9912b5c45 100644 --- a/BondageClub/Screens/Room/Platform/Platform.js +++ b/BondageClub/Screens/Room/Platform/Platform.js @@ -2112,7 +2112,7 @@ function PlatformDrawCharacter(C, Time) { if ((X >= 2000) || (Y >= 1000)) return; if ((X + C.Anim.Width <= 0) || (Y + C.Anim.Height <= 0)) return; DrawImageEx("Screens/Room/Platform/Character/" + C.Name + "/" + C.Status + "/" + C.Anim.Name + "/" + C.Anim.Image.toString() + ".png", MainCanvas, X + C.Anim.OffsetX, Y + C.Anim.OffsetY, { Mirror: C.Anim.Mirror, Width: C.Anim.Width, Height: C.Anim.Height } ); - if (PlatformHeartEffect && (PlatformDialogCharactersAreLovers(C.Name, PlatformPlayer.Name) || C.Camera)) + if (PlatformHeartEffect && (PlatformDialogCharactersAreLovers(C.Name, PlatformPlayer.Name) || C.Camera)) DrawImageZoomCanvas("Screens/Room/Platform/Effect/Love.png", MainCanvas, 0, 0, 1000, 1000, X, Y + (((C.Anim.Name === "Crouch") || (C.Anim.Name === "Crawl")) ? C.Height / 3 : 0), C.Width, C.Height); if ((C.Effect != null) && (C.Effect.Name != null) && (C.Effect.End != null) && (C.Effect.End >= Time)) DrawImageEx("Screens/Room/Platform/Effect/" + C.Effect.Name + ".png", MainCanvas, X + C.Anim.OffsetX, Y + C.Anim.OffsetY, { Mirror: C.Anim.Mirror, Width: C.Anim.Width, Height: C.Anim.Height } ); diff --git a/BondageClub/Screens/Room/PlatformDialog/PlatformDialog.js b/BondageClub/Screens/Room/PlatformDialog/PlatformDialog.js index 653af9b39007f9ed36725e04bef76bc7998b9039..2d4319ac1aa1b40ba293aae589162a7e780ead9b 100644 --- a/BondageClub/Screens/Room/PlatformDialog/PlatformDialog.js +++ b/BondageClub/Screens/Room/PlatformDialog/PlatformDialog.js @@ -2864,7 +2864,7 @@ var PlatformDialogData = [ }, { Text: "(You can hear Lyn the bandit boss struggling in the crate.)" }, { Text: "Minions! Listen to me! Release me right now!", Audio: "10", AudioStyle: "serious" }, - { + { Text: "Minions? A deal is a deal, we can negotiate something.", Audio: "20", Answer: [ { Text: "(Open the crate.)", Reply: "(You open the crate and find her in bondage.)", Love: 2 }, @@ -2873,7 +2873,7 @@ var PlatformDialogData = [ }, { Character: [{ Name: "Lyn", Status: "Thief", Animation: "Bound", Y: -400 }] }, { Text: "It's you! Well... thanks... I guess.", Audio: "30", AudioStyle: "serious" }, - { + { Text: "My stupid minions prepared a mutiny. Can you believe it?", Audio: "40", AudioStyle: "serious", Answer: [ { Text: "They should be more loyal.", Reply: "Damn right they should.", Audio: "41", Domination: -1, Love: 1 }, @@ -3136,7 +3136,7 @@ var PlatformDialogData = [ { Text: "Water is life, life is water. Bring tons of it.", Audio: "40" }, { Text: "I used to sell water and slaves to Slandia soldiers when the war was raging.", Audio: "50" }, { Text: "These were good days, business was booming.", Audio: "60" }, - { + { Text: "(Olivia steps in front of you and makes an angry face.)", Character: [ { Name: "Olivia", Status: "Oracle", Pose: "IdleAngry", X: 750 }, @@ -3147,7 +3147,7 @@ var PlatformDialogData = [ { Text: "Excuse me? War was not a good time!", Audio: "70", AudioStyle: "angry" }, { Text: "Thousands of men died, my father died! How dare you?", Audio: "80", AudioStyle: "angry" }, { Text: "I'm forced to marry a man I barely know because of your war!", Audio: "90", AudioStyle: "angry" }, - { + { Text: "(Lyn gulps and nods slowly.)", Character: [ { Name: "Lyn", Status: "Thief", Pose: "Idle", X: 250 }, @@ -4455,7 +4455,7 @@ var PlatformDialogData = [ }, { Text: "(You kiss each other on the hand, the cheek, the neck and the lips.)" }, - { + { Background: "Black", Character: [ { Name: "Lyn", Status: "Thief", Pose: "IdleCheer", X: 1000 }, diff --git a/BondageClub/Scripts/Drawing.js b/BondageClub/Scripts/Drawing.js index 83b36f99a9aa66160fb072f17d2de5710d411d18..4e5e25a4c772b1a17db7cda68385c6626f7adf5d 100644 --- a/BondageClub/Scripts/Drawing.js +++ b/BondageClub/Scripts/Drawing.js @@ -1242,7 +1242,7 @@ function DrawGetCustomBackground(C) { */ function DrawRoomBackground(URL, bounds, opts) { let { inverted, blur, darken, tints, sizeMode } = opts; - + inverted ??= false; blur ??= 1.0; darken ??= 1.0; @@ -1780,6 +1780,6 @@ const RectFitIntoRect = CommonMemoize( const sourceRectTuple = [sourceX, sourceY, sourceW, sourceH]; /** @type {RectTuple} */ const destRectTuple = [destX, destY, destW, destH]; - + return [sourceRectTuple, destRectTuple]; - }) + }); diff --git a/BondageClub/Tools/Node/AssetCheck.js b/BondageClub/Tools/Node/AssetCheck.js index ba74a9aab912d099c5d5ea05d327488bddb0423c..060f646f9225ae11890bba236b28c8f3c62d53ee 100644 --- a/BondageClub/Tools/Node/AssetCheck.js +++ b/BondageClub/Tools/Node/AssetCheck.js @@ -1042,11 +1042,12 @@ function testAssetHasPNG(assets, extendedDataRecords, poseRecord) { }).filter(i => i != null); }); } else if (layer.AllowTypes) { + // Filter out `undefined` in case someone messes up `layer.AllowTypes` options = Object.entries(layer.AllowTypes.AllTypes).flatMap(([screenKey, indexSet]) => { - return Array.from(indexSet).flatMap(i => { + return Array.from(indexSet).map(i => { partialLayerTypes.push(`${screenKey}${i}`); return optionsRecord[screenKey][i]; - }); + }).filter(o => o !== undefined); }); }