diff --git a/css/art/art.css b/css/art/art.css index 823dc50712358a9214b83de33ac234987354ec0a..68db87b3b08c1080dc3ecc5dc54c9c9ff14efd3c 100644 --- a/css/art/art.css +++ b/css/art/art.css @@ -13,13 +13,13 @@ img { } .imageRef { + align-items: flex-start; + background-color: rgba(80, 80, 80, 0.5); + border: 1px solid #333333; display: flex; flex-direction: column; flex-wrap: wrap; - align-items: flex-start; position: relative; - background-color: rgba(80, 80, 80, 0.5); - margin: 2px; } .tinyImg { diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index f3e77d404fa6f40eb30debc11a0ee1f07c1f1731..2977f3da51072e7e1b4e87e3882b2b56c94703d3 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -121,15 +121,16 @@ App.Data.defaultGameStateVariables = { seeArcology: 1, seeAvatar: 1, seeBestiality: 0, + seeCats: 0, seeCircumcision: 1, + seeCustomImagesOnly: 0, seeDesk: 1, seeDetails: 1, seeDicks: 25, seeDicksAffectsPregnancy: 1, seeExtreme: 0, - seeCats: 0, - seeFCNN: 1, seeFaces: 1, + seeFCNN: 1, seeHeight: 0, seeHyperPreg: 0, seeIllness: 1, @@ -139,9 +140,9 @@ App.Data.defaultGameStateVariables = { seeNationality: 1, seePee: 1, seePreg: 1, - seeStretching: 1, seeRace: 1, seeReportImages: 1, + seeStretching: 1, seeSummaryImages: 1, seeVectorArtHighlights: 1, setSuperSampling: 2, diff --git a/src/art/artJS.js b/src/art/artJS.js index 593fd0d4991fd0738c38fd70f8103582289892c3..64ebc0a0bb7c10546e668ca8a7448e51fb84a533 100644 --- a/src/art/artJS.js +++ b/src/art/artJS.js @@ -79,29 +79,34 @@ App.Art.SlaveArtBatch = class { return App.Art.customArtElement(artSlave.custom.image, this._artSize); } - const slaveData = this._slaveArtBatch.get(artSlave.ID); - if (slaveData) { - // perform "one of batch" rendering for supported formats - if (V.imageChoice === 1) { /* VECTOR ART BY NOX/DEEPMURK */ - if (slaveData.displayClass) { - return App.Art.vectorArtElement(artSlave, this._artSize, slaveData.displayClass); - } else { - console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`); - } - } else if (V.imageChoice === 3) { /* VECTOR ART REVAMP*/ - if (slaveData.displayClass) { - return App.Art.revampedVectorArtElement(artSlave, slaveData.displayClass); - } else { - console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`); + if (!V.seeCustomImagesOnly) { + const slaveData = this._slaveArtBatch.get(artSlave.ID); + + if (slaveData) { + // perform "one of batch" rendering for supported formats + if (V.imageChoice === 1) { /* VECTOR ART BY NOX/DEEPMURK */ + if (slaveData.displayClass) { + return App.Art.vectorArtElement(artSlave, this._artSize, slaveData.displayClass); + } else { + console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`); + } + } else if (V.imageChoice === 3) { /* VECTOR ART REVAMP*/ + if (slaveData.displayClass) { + return App.Art.revampedVectorArtElement(artSlave, slaveData.displayClass); + } else { + console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`); + } } - } - // or render directly for unsupported formats + // or render directly for unsupported formats + return App.Art.SlaveArtElement(artSlave, this._artSize, this._UIDisplay); + } + // definitely an error, but we can handle this...just redirect to the standard single-slave renderer + console.error(`Requested batch render of slave ID ${artSlave.ID} which was not present in the initialization vector. Falling back to single-slave renderer.`); return App.Art.SlaveArtElement(artSlave, this._artSize, this._UIDisplay); } - // definitely an error, but we can handle this...just redirect to the standard single-slave renderer - console.error(`Requested batch render of slave ID ${artSlave.ID} which was not present in the initialization vector. Falling back to single-slave renderer.`); - return App.Art.SlaveArtElement(artSlave, this._artSize, this._UIDisplay); + + return new DocumentFragment(); } }; @@ -119,8 +124,6 @@ App.Art.SlaveArtElement = function(artSlave, artSize, UIDisplay) { const imageChoice = V.imageChoice; if (artSlave.custom.image !== null && artSlave.custom.image.filename !== "") { return App.Art.customArtElement(artSlave.custom.image, artSize); - } else if (imageChoice === 0) { /* Custom art only */ - return new DocumentFragment(); } else if (imageChoice === 1) { /* VECTOR ART BY NOX/DEEPMURK */ return App.Art.vectorArtElement(artSlave, artSize); } else if (imageChoice === 2) { /* VECTOR ART BY NOX - Pregmod Legacy Version */ diff --git a/src/endWeek/events/death.js b/src/endWeek/events/death.js index af9ed44407ac26922287ba547ee413ace92d2c6b..e557bec98652a081c8b73c433bb2bc314074f21c 100644 --- a/src/endWeek/events/death.js +++ b/src/endWeek/events/death.js @@ -18,7 +18,7 @@ App.Events.SEDeath = class SEDeath extends App.Events.BaseEvent { } execute(node) { - const artRenderer = V.seeImages && V.seeReportImages ? new App.Art.SlaveArtBatch(V.slaveDeath.keys(), 0, 0) : null; + const artRenderer = V.seeImages && V.seeReportImages && (!V.seeCustomImagesOnly) ? new App.Art.SlaveArtBatch(V.slaveDeath.keys(), 0, 0) : null; if (artRenderer) { node.append(artRenderer.writePreamble()); } diff --git a/src/gui/options/options.js b/src/gui/options/options.js index 9799214164ceac3a100d78d10b6ce9987f8f663b..38f0c8a7d5a50de9e5d74ac9342735b9b0ae3b34 100644 --- a/src/gui/options/options.js +++ b/src/gui/options/options.js @@ -1116,7 +1116,7 @@ App.UI.artOptions = function() { const el = new DocumentFragment(); let options = new App.UI.OptionsGroup(); - if (V.seeImages) { + if (V.seeImages && !V.seeCustomImagesOnly) { const art = App.UI.DOM.appendNewElement("div", el, App.Art.SlaveArtElement(BaseSlave(), 2, 0), ["imageRef", "medImg"]); art.style.float = "none"; art.style.display = "block"; @@ -1127,97 +1127,102 @@ App.UI.artOptions = function() { options.addOption("Images are", "seeImages") .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - /* REMOVE THIS WARNING ONCE ART DEVELOPMENT RESUMES */ - options.addComment('<span class="warning">All image packs are currently incomplete; some outfits will not be displayed.</span>'); - if (V.seeImages > 0) { - const option = options.addOption("Image style is", "imageChoice") - .addValueList([ // Keeping the most up to date options as the first in line - ["Elohiem's interactive WebGL", 4], - ["Custom images only", 0], - ["NoX/Deepmurk's vector art", 1], - ["Revamped embedded vector art", 3], - ["Non-embedded vector art", 2], - ["Shokushu's rendered image pack", 5], - ]); - if (V.imageChoice === 1) { - options.addComment("The only 2D art in somewhat recent development. Contains many outfits."); - options.addOption("Face artwork is", "seeFaces") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - - options.addOption("Highlights on shiny clothing are", "seeVectorArtHighlights") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + options.addOption("Show custom images only", "seeCustomImagesOnly") + .addValue("Enabled", 1).addValue("Disabled", 0); + + if (!V.seeCustomImagesOnly) { + /* REMOVE THIS WARNING ONCE ART DEVELOPMENT RESUMES */ + options.addComment('<span class="warning">All image packs are currently incomplete; some outfits will not be displayed.</span>'); + const option = options.addOption("Image style is", "imageChoice") + .addValueList([ // Keeping the most up to date options as the first in line + ["Elohiem's interactive WebGL", 4], + ["NoX/Deepmurk's vector art", 1], + ["Revamped embedded vector art", 3], + ["Non-embedded vector art", 2], + ["Shokushu's rendered image pack", 5], + ]); + if (V.imageChoice === 1) { + options.addComment("The only 2D art in somewhat recent development. Contains many outfits."); + options.addOption("Face artwork is", "seeFaces") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + options.addOption("Highlights on shiny clothing are", "seeVectorArtHighlights") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + options.addOption("Height scaling", "seeHeight") + .addValue("All images", 2).on().addValue("Small images", 1).addValue("Disabled", 0).off(); + + options.addOption("Clothing erection bulges are", "showClothingErection") + .addValue("Enabled", true).on().addValue("Disabled", false).off(); + } else if (V.imageChoice === 5) { + options.addComment("Dead since long before the end of vanilla. You need to" + + " <a href='https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0' target='_blank'>download the image" + + " pack</a> and put the 'renders' folder into the resources/ folder where this html file is."); + + options.addOption("Slave summary fetish images are", "seeMainFetishes") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + } else if (V.imageChoice === 3) { + options.addComment("This art development is dead."); + options.addOption("Clothing erection bulges are", "showClothingErection") + .addValue("Enabled", true).on().addValue("Disabled", false).off(); + } else if (V.imageChoice === 4) { + options.addComment(`This art is currently (12/12/21) the most actively developed. Real time 3D models. <a href='https://mega.nz/folder/m1JQ3JAQ#2GJsM7csBBvBu0DX8SB2kA' target='_blank'> Download the WebGL art assets</a> and place the 'webgl' folder into the resources/ folder where this HTML file is. + Then <b>refresh</b> the page. + Create the resources folder if it does not exist. <span class="warning">(Android/MacOS not supported)</span>`); + + let option = options.addOption("Supersampling (SSAA)", "setSuperSampling"); + for (const value of [0.25, 0.5, 1, 2, 4]) { + option.addValue(`${value}`, value); + } + option.addComment("Multiplies the resolution of the render. Use a smaller factor for low-end GPU's."); - options.addOption("Height scaling", "seeHeight") - .addValue("All images", 2).on().addValue("Small images", 1).addValue("Disabled", 0).off(); + option = options.addOption("Texture resolution", "setTextureResolution"); + for (const value of [512, 1024, 2048, 4096]) { + option.addValue(`${value}`, value); + } + option.addComment("Refresh the page to take affect."); + + options.addOption("Face culling", "setFaceCulling") + .addValue("Enabled", true).off().addValue("Disabled", false).on() + .addComment("Whether to draw the backside of the model, affects transparent surfaces such as hair. Enabling is recommended for low-end GPU's."); + options.addOption("Pan speed", "setPanSpeed") + .addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off(); + options.addOption("Rotation speed", "setRotationSpeed") + .addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off(); + options.addOption("Zoom speed", "setZoomSpeed") + .addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off(); + + options.addOption("Auto-frame", "setAutoFrame") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + if (V.setAutoFrame === 1) { + options.addOption("Default view", "setDefaultView").showTextBox() + .addComment("Choose a value between 0 and 1."); + } + options.addOption("Large Image size", "setImageSize").showTextBox() + .addComment("Recommended to be between 0.5 and 1.5."); + options.addOption("Ambient Occlusion", "setSSAO") + .addValue("Enabled", true).on().addValue("Disabled", false).off(); + options.addOption("Shadowmapping", "setShadowMapping") + .addValue("Enabled", true).on().addValue("Disabled", false).off(); + options.addOption("Tonemapping", "setTonemapping") + .addValue("Enabled", true).on().addValue("Disabled", false).off(); + } else if (V.imageChoice === 2) { + option.addComment("This art development is dead since vanilla. Since it is not embedded, requires a separate art pack to be downloaded."); + } - options.addOption("Clothing erection bulges are", "showClothingErection") - .addValue("Enabled", true).on().addValue("Disabled", false).off(); - } else if (V.imageChoice === 5) { - options.addComment("Dead since long before the end of vanilla. You need to" + - " <a href='https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0' target='_blank'>download the image" + - " pack</a> and put the 'renders' folder into the resources/ folder where this html file is."); + options.addOption("PA avatar art is", "seeAvatar") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - options.addOption("Slave summary fetish images are", "seeMainFetishes") + options.addOption("Slave images in lists are", "seeSummaryImages") .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - } else if (V.imageChoice === 3) { - options.addComment("This art development is dead."); - options.addOption("Clothing erection bulges are", "showClothingErection") - .addValue("Enabled", true).on().addValue("Disabled", false).off(); - } else if (V.imageChoice === 4) { - options.addComment(`This art is currently (12/12/21) the most actively developed. Real time 3D models. <a href='https://mega.nz/folder/m1JQ3JAQ#2GJsM7csBBvBu0DX8SB2kA' target='_blank'> Download the WebGL art assets</a> and place the 'webgl' folder into the resources/ folder where this HTML file is. - Then <b>refresh</b> the page. - Create the resources folder if it does not exist. <span class="warning">(Android/MacOS not supported)</span>`); - - let option = options.addOption("Supersampling (SSAA)", "setSuperSampling"); - for (const value of [0.25, 0.5, 1, 2, 4]) { - option.addValue(`${value}`, value); - } - option.addComment("Multiplies the resolution of the render. Use a smaller factor for low-end GPU's."); - option = options.addOption("Texture resolution", "setTextureResolution"); - for (const value of [512, 1024, 2048, 4096]) { - option.addValue(`${value}`, value); - } - option.addComment("Refresh the page to take affect."); - - options.addOption("Face culling", "setFaceCulling") - .addValue("Enabled", true).off().addValue("Disabled", false).on() - .addComment("Whether to draw the backside of the model, affects transparent surfaces such as hair. Enabling is recommended for low-end GPU's."); - options.addOption("Pan speed", "setPanSpeed") - .addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off(); - options.addOption("Rotation speed", "setRotationSpeed") - .addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off(); - options.addOption("Zoom speed", "setZoomSpeed") - .addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off(); - - options.addOption("Auto-frame", "setAutoFrame") + options.addOption("Slave images in the weekly report are", "seeReportImages") .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - if (V.setAutoFrame === 1) { - options.addOption("Default view", "setDefaultView").showTextBox() - .addComment("Choose a value between 0 and 1."); - } - options.addOption("Large Image size", "setImageSize").showTextBox() - .addComment("Recommended to be between 0.5 and 1.5."); - options.addOption("Ambient Occlusion", "setSSAO") - .addValue("Enabled", true).on().addValue("Disabled", false).off(); - options.addOption("Shadowmapping", "setShadowMapping") - .addValue("Enabled", true).on().addValue("Disabled", false).off(); - options.addOption("Tonemapping", "setTonemapping") - .addValue("Enabled", true).on().addValue("Disabled", false).off(); - } else if (V.imageChoice === 2) { - option.addComment("This art development is dead since vanilla. Since it is not embedded, requires a separate art pack to be downloaded."); } + } - options.addOption("PA avatar art is", "seeAvatar") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - - options.addOption("Slave images in lists are", "seeSummaryImages") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - options.addOption("Slave images in the weekly report are", "seeReportImages") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - } el.append(options.render()); return el; }; diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js index 6cc2e4c4a2d85d79bc0b06a5858e585044ecafc7..935ad0682be9fbd760154bf8867eb6ab1c82d285 100644 --- a/src/js/slaveListing.js +++ b/src/js/slaveListing.js @@ -132,10 +132,9 @@ App.UI.SlaveList.render = function() { } const slave = slaveStateById(id); - if (batchRenderer) { + if (batchRenderer && (!V.seeCustomImagesOnly || (V.seeCustomImagesOnly && slave.custom.image))) { let imgDiv = document.createElement("div"); - imgDiv.classList.add("imageRef"); - imgDiv.classList.add("smlImg"); + imgDiv.classList.add("imageRef", "smlImg", "margin-right"); imgDiv.appendChild(batchRenderer.render(slave)); res.appendChild(imgDiv); }