Newer
Older
/* intended to condense the clothing/toy/etc availability checks into something less asinine */
switch (string) {
/* no breaks needed because we always return */
case "attractive lingerie for a pregnant woman":
return (V.arcologies[0].FSRepopulationFocus > 0 || V.clothesBoughtMaternityLingerie === 1);
case "a bunny outfit":
return (V.arcologies[0].FSGenderFundamentalist > 0 || V.clothesBoughtBunny === 1);
case "body oil":
return (V.arcologies[0].FSPhysicalIdealist > 0 || V.clothesBoughtOil === 1);
case "chains":
return (V.arcologies[0].FSDegradationist > 0 || V.clothesBoughtChains === 1);
case "a chattel habit":
return (V.arcologies[0].FSChattelReligionist > 0 || V.clothesBoughtHabit === 1);
case "conservative clothing":
return (V.arcologies[0].FSPaternalist > 0 || V.clothesBoughtConservative === 1);
case "harem gauze":
return (V.arcologies[0].FSArabianRevivalist > 0 || V.clothesBoughtHarem === 1);
case "a huipil":
return (V.arcologies[0].FSAztecRevivalist > 0 || V.clothesBoughtHuipil === 1);
case "a kimono":
return (V.arcologies[0].FSEdoRevivalist > 0 || V.clothesBoughtKimono === 1 || V.continent === "Japan");
case "a maternity dress":
return (V.arcologies[0].FSRepopulationFocus > 0 || V.clothesBoughtMaternityDress === 1);
case "a slutty qipao":
return (V.arcologies[0].FSChineseRevivalist > 0 || V.clothesBoughtQipao === 1);
case "a long qipao":
return (V.arcologies[0].FSChineseRevivalist > 0 || V.clothesBoughtCultural === 1);
case "stretch pants and a crop-top":
return (V.arcologies[0].FSHedonisticDecadence > 0 || V.clothesBoughtLazyClothes === 1);
case "a toga":
return (V.arcologies[0].FSRomanRevivalist > 0 || V.clothesBoughtToga === 1);
case "Western clothing":
return (V.arcologies[0].FSPastoralist > 0 || V.clothesBoughtWestern === 1);
case "a courtesan dress":
return (V.arcologies[0].FSSlaveProfessionalism > 0 || V.clothesBoughtCourtesan === 1);
case "a bimbo outfit":
return (V.arcologies[0].FSIntellectualDependency > 0 || V.clothesBoughtBimbo === 1);
case "petite admi outfit":
return (V.arcologies[0].FSPetiteAdmiration > 0 || V.clothesBoughtPetite === 1);
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
case "battlearmor":
case "a military uniform":
case "a red army uniform":
case "battledress":
return (V.clothesBoughtMilitary === 1);
case "a biyelgee costume":
case "a dirndl":
case "lederhosen":
case "a mounty outfit":
case "a hanbok":
return (V.clothesBoughtCultural === 1);
case "a burqa":
case "a niqab and abaya":
return (V.clothesBoughtMiddleEastern === 1 || V.continent === "the Middle East");
case "a hijab and blouse":
return (V.clothesBoughtMiddleEastern === 1 || V.clothesBoughtConservative === 1 || V.continent === "the Middle East");
case "a burkini":
return (V.clothesBoughtMiddleEastern === 1 && V.clothesBoughtSwimwear === 1 || V.continent === "the Middle East");
case "a Santa dress":
return (V.clothesBoughtCostume === 1);
case "a klan robe":
case "a slutty klan robe":
case "a schutzstaffel uniform":
case "a slutty schutzstaffel uniform":
return (V.clothesBoughtPol === 1);
case "nice business attire":
case "a nice nurse outfit":
case "a police uniform":
return (V.clothesBoughtCareer === 1);
case "a nice maid outfit":
return (V.clothesBoughtCareer === 1 || V.PC.career === "servant");
case "a ball gown":
case "a gothic lolita dress":
return (V.clothesBoughtDresses === 1);
case "a cybersuit":
case "a latex catsuit":
return (V.clothesBoughtBodysuits === 1);
case "a button-up shirt and panties":
case "a button-up shirt":
case "cutoffs":
case "jeans":
case "leather pants and a tube top":
case "leather pants":
case "an oversized t-shirt":
case "a sweater and cutoffs":
case "a sweater and panties":
case "a sweater":
case "a t-shirt and jeans":
case "a t-shirt and panties":
case "a t-shirt":
case "a tank-top and panties":
case "a tank-top":
case "a tube top":
return (V.clothesBoughtCasual === 1);
case "boyshorts":
case "a bra":
case "kitty lingerie":
case "panties and pasties":
case "a skimpy loincloth":
case "a thong":
return (V.clothesBoughtUnderwear === 1);
case "leather pants and pasties":
case "a t-shirt and thong":
case "a tube top and thong":
case "an oversized t-shirt and boyshorts":
return (V.clothesBoughtUnderwear === 1 && V.clothesBoughtCasual === 1);
case "sport shorts and a sports bra":
case "sport shorts":
case "a sports bra":
return (V.clothesBoughtSports === 1);
case "sport shorts and a t-shirt":
return (V.clothesBoughtSports === 1 && V.clothesBoughtCasual === 1);
case "a nice pony outfit":
case "a slutty pony outfit":
return (V.clothesBoughtPony === 1);
case "a monokini":
case "a one-piece swimsuit":
return (V.clothesBoughtSwimwear === 1);
case "a striped bra":
case "striped panties":
case "striped underwear":
return (V.clothesBoughtPantsu === 1 || V.continent === "Japan");
case "platform shoes":
case "platform heels":
case "extreme platform heels":
return (V.arcologies[0].FSStatuesqueGlorification > 0 || V.shoesBoughtHeels === 1);
case "bowtie":
return (V.arcologies[0].FSGenderFundamentalist > 0 || V.clothesBoughtBunny === 1);
case "ancient Egyptian":
return (V.arcologies[0].FSEgyptianRevivalist > 0 || V.clothesBoughtEgypt === 1);
case "massive dildo gag":
return (V.toysBoughtGags === 1);
case "a small empathy belly":
case "a medium empathy belly":
case "a large empathy belly":
case "a huge empathy belly":
return (V.arcologies[0].FSRepopulationFocus > 0 || V.clothesBoughtBelly === 1);
case "bullet vibrator":
case "smart bullet vibrator":
case "long dildo":
case "long, large dildo":
case "long, huge dildo":
return (V.toysBoughtDildos === 1);
case "vibrator":
return (V.toysBoughtVaginalAttachments === 1);
case "long plug":
case "long, large plug":
case "long, huge plug":
return (V.toysBoughtButtPlugs === 1);
case "tail":
case "cat tail":
case "fox tail":
return (V.toysBoughtButtPlugTails === 1);
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
// "Normal" things:
case "an apron":
case "slutty jewelry":
case "clubslut netting":
case "cutoffs and a t-shirt":
case "a comfortable bodysuit":
case "a cheerleader outfit":
case "a fallen nuns habit":
case "a hijab and abaya":
case "a leotard":
case "a slutty maid outfit":
case "a mini dress":
case "attractive lingerie":
case "a slutty nurse outfit":
case "overalls":
case "panties":
case "a scalemail bikini":
case "a schoolgirl outfit":
case "a slutty outfit":
case "spats and a tank top":
case "a string bikini":
case "a succubus outfit":
case "slutty business attire":
case "no clothing":
case "a penitent nuns habit":
case "restrictive latex":
case "shibari ropes":
case "uncomfortable straps":
case "choosing her own clothes":
case "a halter top dress":
case "a slave gown":
return true;
window.isClothingAccessible = (function() {
return {
array: array,
entry: entry,
};
/**
* Checks whether clothing is accessible
* @param {string} string Name of wearable item
* @returns {boolean}
*/
function entry(string) {
if (V.cheatMode === 1) {
return true;
}
let item = App.Data.misc.niceClothes.find((i) => i.value === string);
if (!item) {
item = App.Data.misc.harshClothes.find((i) => i.value === string);
}
if (!item) {
console.log(`${string} is not a registered piece of clothing! Check App.Data.Misc.`);
return false; /* couldn't be found */
}
return isAvailable(item);
* Returns array of wearable clothing in format [name, value], basically player facing / game data.
* @param {string} db Name of array to look in (such as "App.Data.misc.niceClothes")
* @returns {Array}
*/
function array(db) {
const array = [];
db.forEach((i) => {
if (V.cheatMode || isAvailable(i)) {
function isAvailable(item) {
if (!(item.hasOwnProperty("unlock")) && !(item.hasOwnProperty("fs"))) {
// No restriction, this clothing item is available to everyone
if (item.hasOwnProperty("fs")) {
if (V.arcologies[0][item.fs] > 0) {
if (item.hasOwnProperty("unlock")) {
let keys = Object.keys(item.unlock);
for (let key in keys) {
if (keys[key] === "continent" && V.continent === item.unlock[keys[key]]) {
return true;
} else if (V[keys[key]] > 0 ) {
return true;
}
}
// special case where they must both be true
if (item.unlock.clothesBoughtSports && item.unlock.clothesBoughtCasual) {
if (V.clothesBoughtSports && V.clothesBoughtCasual) {
return true;
}
* @param {App.Entity.SlaveState} slave
* @param {string} prosthetic
* @returns {boolean}
*/
window.isProstheticAvailable = function(slave, prosthetic) {
return slave.readyProsthetics.findIndex(function(p) { return p.id === prosthetic; }) !== -1;
};
/**
* @param {App.Entity.SlaveState} slave
* @param {string} prosthetic
*/
window.addProsthetic = function(slave, prosthetic) {
if (!isProstheticAvailable(slave, prosthetic)) {
let limb = prostheticToLimb(prosthetic);
if (limb > 0) {
let p = {
id: prosthetic,
arm: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()},
leg: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}
};
p.arm.left.type = limb;
p.arm.right.type = limb;
p.leg.left.type = limb;
p.leg.right.type = limb;
slave.readyProsthetics.push(p);
} else {
slave.readyProsthetics.push({id: prosthetic});
}
/**
* @param {App.Entity.SlaveState} slave
* @param {string} prosthetic
* @returns {{}}
*/
window.findProsthetic = function(slave, prosthetic) {
return slave.readyProsthetics.find(p => p.id === prosthetic);
};
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
/**
* @param {string} prosthetic
* @returns {number}
*/
window.prostheticToLimb = function(prosthetic) {
switch (prosthetic) {
case "basicL":
return 2;
case "sexL":
return 3;
case "beautyL":
return 4;
case "combatL":
return 5;
case "cyberneticL":
return 6;
default:
return 0;
}
};
/**
*
* @param {number} limb
* @returns {string}
*/
window.limbToProsthetic = function(limb) {
switch (limb) {
case 2:
return "basicL";
case 3:
return "sexL";
case 4:
return "beautyL";
case 5:
return "combatL";
case 6:
return "cyberneticL";
default:
return "";
}
};