Skip to content
Snippets Groups Projects
Commit a5aef7d5 authored by Pregmodder's avatar Pregmodder
Browse files

Merge branch 'JSification' into 'pregmod-master'

Collecting art related JS

See merge request pregmodfan/fc-pregmod!2340
parents 7c151cf7 5f37769c
No related branches found
No related tags found
No related merge requests found
......@@ -11475,86 +11475,6 @@ window.getHeroSlave = function(heroSlave, baseHeroSlave) {
return newSlave;
}
 
/*:: Art Color Tools JS [script]*/
/*
This takes a textual hair colour description and tries to guess the appropriate HTML compliant color code.
hColor should be a color name, but can also be a string describing hair colour.
This code's working is described to the user in the Encyclopedia, chapter "Lore", section "Dyes".
*/
window.extractHairColor = function(hColor) {
/*
these are color names known and used in FreeCities
attributed color names are at the front of the array
*/
var FCname2HTMLarray = [
["blazing red", "#E00E2B"],
["neon green", "#25d12b"],
["neon blue", "#2284C3"],
["neon pink", "#cc26aa"],
["strawberry-blonde", "#e5a88c"],
["platinum blonde", "#fcf3c1"],
["dark brown", "#463325"],
["brown", "#8D4F21"],
["auburn", "#7e543e"],
["black", "#3F4040"],
["blonde", "#F4F1A3"],
["blue", "#4685C5"],
["burgundy", "#5f3946"],
["chestnut", "#663622"],
["chocolate", "#6e4937"],
["copper", "#a16145"],
["ginger", "#da822d"],
["golden", "#ffdf31"],
["green", "#5FBA46"],
["grey", "#9e9fa4"],
["hazel", "#8d6f1f"],
["pink", "#D18CBC"],
["red", "#BB2027"],
["deep red", "#6D1318"],
["blue-violet", "#8790B7"],
["silver", "#cdc9c6"],
["light olive", "#d4c6bb"],
["dark", "#a46237"],
/* these are not actually FreeCities canon, but like to appear in custom descriptions */
["dark", "#463325"],
["brunette", "#8D4F21"]
];
/* these are HTML color names supported by most browsers */
var HTMLstandardColors = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred ","indigo ","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"];
var FCnames = new Map(FCname2HTMLarray);
hColor = hColor.toLowerCase(); /* normalization: lowercase color name */
var colorCode = FCnames.get(hColor); /* look up in FreeCities color names */
if (!colorCode) { /* not a FreeCities color name*/
if (HTMLstandardColors.includes(hColor) || hColor.match(/^#([0-9a-f]{3}){1,2}$/) !== null) {
colorCode = hColor; /* is a HTML color name or value, use it directly */
} else {
/*
is not even a HTML color name. hColor probably is a description.
look for anything resembling a valid color name within the description.
*/
var hColorNoSpaces = hColor.replace(/\s+/g, ''); /* remove all spaces from description */
var FCkeys = Array.from(FCnames.keys());
var colorCodes = [
FCnames.get(FCkeys.find(function (e){return hColor.startsWith(e);})),
HTMLstandardColors.find(function (e){return hColorNoSpaces.startsWith(e);}),
FCnames.get(FCkeys.find(function (e){return hColor.includes(e);})),
HTMLstandardColors.find(function (e){return hColorNoSpaces.includes(e);})
];
colorCode = colorCodes.find(function (e){return e;}); /* picks the first successful guess */
}
}
if (!colorCode) {
console.log("Art Color Tools JS: Unable to determine HTML compliant color code for hair color string '"+hColor+"'.");
colorCode = "fuchsia"; /* use fuchsia as error marker */
}
return colorCode;
};
/*SFJS [script]*/
 
window.simpleWorldEconomyCheck = function() {
......@@ -23274,3 +23194,95 @@ window.ArtControlRendered = function ArtControlRendered(slave, sizePlacement) {
}
return r;
};
/*
This takes a textual hair colour description and tries to guess the appropriate HTML compliant color code.
hColor should be a color name, but can also be a string describing hair colour.
This code's working is described to the user in the Encyclopedia, chapter "Lore", section "Dyes".
*/
window.extractHairColor = function(hColor) {
/*
these are color names known and used in FreeCities
attributed color names are at the front of the array
*/
var FCname2HTMLarray = [
["blazing red", "#E00E2B"],
["neon green", "#25d12b"],
["neon blue", "#2284C3"],
["neon pink", "#cc26aa"],
["strawberry-blonde", "#e5a88c"],
["platinum blonde", "#fcf3c1"],
["dark brown", "#463325"],
["brown", "#8D4F21"],
["auburn", "#7e543e"],
["black", "#3F4040"],
["blonde", "#F4F1A3"],
["blue", "#4685C5"],
["burgundy", "#5f3946"],
["chestnut", "#663622"],
["chocolate", "#6e4937"],
["copper", "#a16145"],
["ginger", "#da822d"],
["golden", "#ffdf31"],
["green", "#5FBA46"],
["grey", "#9e9fa4"],
["hazel", "#8d6f1f"],
["pink", "#D18CBC"],
["red", "#BB2027"],
["deep red", "#6D1318"],
["blue-violet", "#8790B7"],
["silver", "#cdc9c6"],
["light olive", "#d4c6bb"],
["dark", "#a46237"],
/* these are not actually FreeCities canon, but like to appear in custom descriptions */
["dark", "#463325"],
["brunette", "#8D4F21"]
];
/* these are HTML color names supported by most browsers */
var HTMLstandardColors = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred ","indigo ","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"];
var FCnames = new Map(FCname2HTMLarray);
hColor = hColor.toLowerCase(); /* normalization: lowercase color name */
var colorCode = FCnames.get(hColor); /* look up in FreeCities color names */
if (!colorCode) { /* not a FreeCities color name*/
if (HTMLstandardColors.includes(hColor) || hColor.match(/^#([0-9a-f]{3}){1,2}$/) !== null) {
colorCode = hColor; /* is a HTML color name or value, use it directly */
} else {
/*
is not even a HTML color name. hColor probably is a description.
look for anything resembling a valid color name within the description.
*/
var hColorNoSpaces = hColor.replace(/\s+/g, ''); /* remove all spaces from description */
var FCkeys = Array.from(FCnames.keys());
var colorCodes = [
FCnames.get(FCkeys.find(function (e){return hColor.startsWith(e);})),
HTMLstandardColors.find(function (e){return hColorNoSpaces.startsWith(e);}),
FCnames.get(FCkeys.find(function (e){return hColor.includes(e);})),
HTMLstandardColors.find(function (e){return hColorNoSpaces.includes(e);})
];
colorCode = colorCodes.find(function (e){return e;}); /* picks the first successful guess */
}
}
if (!colorCode) {
console.log("Art Color Tools JS: Unable to determine HTML compliant color code for hair color string '"+hColor+"'.");
colorCode = "fuchsia"; /* use fuchsia as error marker */
}
return colorCode;
};
window.clothing2artSuffix = function(v) {
if (v == "restrictive latex") { v = "latex"; } /* universal "special case": latex art is actually "restrictive latex" TODO: align name in vector source */
return v.replace(/^a[n]? /,"") /* remove "a" and "an" from the beginning*/
.replace(/ ?(outfit|clothing) ?/,"") /* remove "outfit" and "clothing" (redundant) */
.replace(/ and .+/,"") /* remove concatenated descriptions */
.replace(/\w\S*/g,
function(txt){
return txt.charAt(0).toUpperCase() +
txt.substr(1).toLowerCase();
}
) /* CamelCase by whitespace */
.replace(/\W/g,""); /* remove remaining whitespace */
};
:: Art Color Tools JS [script]
:: Art JS [script]
/*
Displays assistant images. Currently passage-based.
sizePlacement: Image size/center.
3: Large, right. Example: description.
2: Medium, right. Example: random events.
*/
window.AssistantArtRendered = function AssistantArtRendered(sizePlacement) {
const V = State.variables;
let fileName = "";
if (V.imageChoice === 0) {
switch (V.assistantAppearance) {
case "monstergirl":
fileName = "'resources/renders/assistant monstergirl.png'";;
break;
case "shemale":
fileName = "'resources/renders/assistant shemale.png'";
break;
case "amazon":
fileName = "'resources/renders/assistant amazon.png'";
break;
case "businesswoman":
fileName = "'resources/renders/assistant businesswoman.png'";
break;
case "goddess":
fileName = "'resources/renders/assistant goddess.png'";
break;
case "schoolgirl":
fileName = "'resources/renders/assistant schoolgirl.png'";
break;
default:
fileName = "'resources/renders/assistant default.png'";
}
if (sizePlacement === 3) {
fileName = `<img src=${fileName} style='float:right; border:3px hidden'/>`;
} else {
fileName = `<img src=${fileName} style='float:right; border:3px hidden' width='300' height='300'/>`;
}
}
return fileName;
};
window.ArtControlRendered = function ArtControlRendered(slave, sizePlacement) {
const V = State.variables;
let fileName = "";
let r = "";
if (slave.vagina > -1) {
if (slave.dick > 0) {
if (slave.balls > 0) {
fileName = "futanari";
} else {
fileName = "herm";
}
} else {
fileName = "female";
}
} else {
if (slave.balls > 0) {
fileName = "shemale";
} else {
fileName = "gelding";
}
}
if (slave.belly > 1500) {
fileName = `preg ${fileName}`;
}
if (slave.boobs < 400) {
fileName = `${fileName} small`;
} else if (slave.boobs < 800) {
fileName = `${fileName} big`;
} else if (slave.boobs < 6000) {
fileName = `${fileName} huge`;
} else {
fileName = `${fileName} hyper`;
}
if (slave.muscles > 30) {
fileName = `${fileName} muscle`;
} else {
fileName = `${fileName} soft`;
}
if (slave.fuckdoll > 0) {
fileName = `${fileName} rebellious`;
} else if (slave.devotion <= 20) {
if (slave.trust < -20) {
fileName = `${fileName} reluctant`;
} else {
fileName = `${fileName} rebellious`;
}
} else if (slave.fetish === "mindbroken") {
fileName = `${fileName} reluctant`;
} else if (slave.devotion <= 50 || slave.fetishKnown !== 1 || V.seeMainFetishes === 0 && sizePlacement < 2) {
fileName = `${fileName} obedient`;
} else {
if (slave.fetish === "none") {
fileName = `${fileName} obedient`;
} else {
fileName = `${fileName} ${slave.fetish}`;
}
}
fileName = `'resources/renders/${fileName}.png'`;
if (sizePlacement === 3) {
r = `<img src=${fileName} style='float:right; border:3px hidden'>`;
} else if (sizePlacement === 2) {
r = `<img src=${fileName} style='float:right; border:3px hidden' width='300' height='300'>`;
} else if (sizePlacement === 1) {
r = `<img src=${fileName} style='float:left; border:3px hidden' width='150' height='150'>`;
} else {
r = `<img src=${fileName} style='float:left; border:3px hidden' width='120' height='120'>`;
}
return r;
};
/*
This takes a textual hair colour description and tries to guess the appropriate HTML compliant color code.
......@@ -77,3 +191,17 @@ window.extractHairColor = function(hColor) {
}
return colorCode;
};
window.clothing2artSuffix = function(v) {
if (v == "restrictive latex") { v = "latex"; } /* universal "special case": latex art is actually "restrictive latex" TODO: align name in vector source */
return v.replace(/^a[n]? /,"") /* remove "a" and "an" from the beginning*/
.replace(/ ?(outfit|clothing) ?/,"") /* remove "outfit" and "clothing" (redundant) */
.replace(/ and .+/,"") /* remove concatenated descriptions */
.replace(/\w\S*/g,
function(txt){
return txt.charAt(0).toUpperCase() +
txt.substr(1).toLowerCase();
}
) /* CamelCase by whitespace */
.replace(/\W/g,""); /* remove remaining whitespace */
};
:: Art_Vector_Helper_Functions_ [script]
window.clothing2artSuffix = function(v) {
if (v == "restrictive latex") { v = "latex"; } /* universal "special case": latex art is actually "restrictive latex" TODO: align name in vector source */
return v.replace(/^a[n]? /,"") /* remove "a" and "an" from the beginning*/
.replace(/ ?(outfit|clothing) ?/,"") /* remove "outfit" and "clothing" (redundant) */
.replace(/ and .+/,"") /* remove concatenated descriptions */
.replace(/\w\S*/g,
function(txt){
return txt.charAt(0).toUpperCase() +
txt.substr(1).toLowerCase();
}
) /* CamelCase by whitespace */
.replace(/\W/g,""); /* remove remaining whitespace */
}
:: Art JS [script]
/*
Displays assistant images. Currently passage-based.
sizePlacement: Image size/center.
3: Large, right. Example: description.
2: Medium, right. Example: random events.
*/
window.AssistantArtRendered = function AssistantArtRendered(sizePlacement) {
const V = State.variables;
let fileName = "";
if (V.imageChoice === 0) {
switch (V.assistantAppearance) {
case "monstergirl":
fileName = "'resources/renders/assistant monstergirl.png'";;
break;
case "shemale":
fileName = "'resources/renders/assistant shemale.png'";
break;
case "amazon":
fileName = "'resources/renders/assistant amazon.png'";
break;
case "businesswoman":
fileName = "'resources/renders/assistant businesswoman.png'";
break;
case "goddess":
fileName = "'resources/renders/assistant goddess.png'";
break;
case "schoolgirl":
fileName = "'resources/renders/assistant schoolgirl.png'";
break;
default:
fileName = "'resources/renders/assistant default.png'";
}
if (sizePlacement === 3) {
fileName = `<img src=${fileName} style='float:right; border:3px hidden'/>`;
} else {
fileName = `<img src=${fileName} style='float:right; border:3px hidden' width='300' height='300'/>`;
}
}
return fileName;
};
window.ArtControlRendered = function ArtControlRendered(slave, sizePlacement) {
const V = State.variables;
let fileName = "";
let r = "";
if (slave.vagina > -1) {
if (slave.dick > 0) {
if (slave.balls > 0) {
fileName = "futanari";
} else {
fileName = "herm";
}
} else {
fileName = "female";
}
} else {
if (slave.balls > 0) {
fileName = "shemale";
} else {
fileName = "gelding";
}
}
if (slave.belly > 1500) {
fileName = `preg ${fileName}`;
}
if (slave.boobs < 400) {
fileName = `${fileName} small`;
} else if (slave.boobs < 800) {
fileName = `${fileName} big`;
} else if (slave.boobs < 6000) {
fileName = `${fileName} huge`;
} else {
fileName = `${fileName} hyper`;
}
if (slave.muscles > 30) {
fileName = `${fileName} muscle`;
} else {
fileName = `${fileName} soft`;
}
if (slave.fuckdoll > 0) {
fileName = `${fileName} rebellious`;
} else if (slave.devotion <= 20) {
if (slave.trust < -20) {
fileName = `${fileName} reluctant`;
} else {
fileName = `${fileName} rebellious`;
}
} else if (slave.fetish === "mindbroken") {
fileName = `${fileName} reluctant`;
} else if (slave.devotion <= 50 || slave.fetishKnown !== 1 || V.seeMainFetishes === 0 && sizePlacement < 2) {
fileName = `${fileName} obedient`;
} else {
if (slave.fetish === "none") {
fileName = `${fileName} obedient`;
} else {
fileName = `${fileName} ${slave.fetish}`;
}
}
fileName = `'resources/renders/${fileName}.png'`;
if (sizePlacement === 3) {
r = `<img src=${fileName} style='float:right; border:3px hidden'>`;
} else if (sizePlacement === 2) {
r = `<img src=${fileName} style='float:right; border:3px hidden' width='300' height='300'>`;
} else if (sizePlacement === 1) {
r = `<img src=${fileName} style='float:left; border:3px hidden' width='150' height='150'>`;
} else {
r = `<img src=${fileName} style='float:left; border:3px hidden' width='120' height='120'>`;
}
return r;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment