Newer
Older
window.saPorn = (function saPorn() {
"use strict";
let r;
let he, him, his, hers, himself, girl, loli, He, His;
let decayRate;
let viewership;
return saPorn;
function saPorn(slave) {
({
he, him, his, hers, himself, girl, He, His, loli
} = getPronouns(slave));
let oldFame = slave.porn.viewerCount;
if (V.studio === 1 && slave.porn.feed === 1) {
calcBaseViewership(slave);
r += `The studio regularly releases clips of ${his} daily affairs. `;
if (V.cheatMode === 1) {
r += `(Decay: ${decayRate} Viewership: ${viewership} Last week's fame: ${oldFame}) `;
}
prestigeCommentary(slave);
faceCommentary(slave);
hack();
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
updateViewerCount(slave);
if (oldFame > slave.porn.viewerCount) {
r += `Overall, ${his} online fame <span class="red">dropped</span> this week. `;
} else if (oldFame < slave.porn.viewerCount) {
r += `Overall, ${his} online fame <span class="green">rose</span> this week. `;
if (oldFame < 100 && slave.porn.viewerCount >= 100 && V.studioFeed === 1) {
r += `${He} <span class="yellow">has accrued enough views to determine prospective porn genres.</span> `;
}
} else if (slave.porn.viewerCount !== 0) {
r += `Surprisingly, ${his} online fame <span class="yellow">remained consistent</span> this week despite how fickle watchers can be. `;
} else {
r += `${He} went <span class="red">completely overlooked</span> this week and failed to gain any hits at all. `;
}
if (slave.porn.viewerCount > 0) {
let donations = Math.floor(slave.porn.viewerCount / jsRandom(10, 15 + viewerSoaking));
if (donations > 0) {
r += `Fans donated a total of <span class="cash inc">${cashFormat(donations)}</span> to ${his} account this week. `;
cashX(donations, "porn", slave);
}
}
if (slave.porn.spending > 0) {
cashX(forceNeg(slave.porn.spending / V.PCSlutContacts), "porn", slave);
}
prestigeGen(slave);
} else { /* popularity decay from lack of new content */
if (slave.porn.prestige > 1) { // 500k
decayRate = 5000;
} else if (slave.porn.prestige > 0) { // 10k
decayRate = 500;
} else {
decayRate = 30;
}
genreDecay(slave);
updateViewerCount(slave);
prestigeDecay(slave);
}
return r;
function genreDecay(slave) {
if (slave.porn.fame[genre.fameName] > 0) {
const oldPorn = slave.porn.fame[genre.fameName];
slave.porn.fame[genre.fameName] = Math.clamp(slave.porn.fame[genre.fameName] - (decayRate * 2), 0, 100000);
r += cheatDelta(genre.uiName(), oldPorn, slave.porn.fame[genre.fameName]);
}
}
function updateViewerCount(slave) {
slave.porn.viewerCount = Math.trunc(App.Porn.getAllGenres().reduce((acc, cur) => acc + slave.porn.fame[cur.fameVar], 0.0));
function prestigeDecay(slave) {
if (slave.porn.prestige > 0) {
const genre = App.Porn.getGenreByFameName(slave.porn.fameType);
if (slave.porn.fame[genre.fameName] < 40000 && slave.porn.prestige === 2) {
slave.porn.prestige = 1;
slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
r +=`With the lack of any new content, <span class="red">${his} popularity in ${slave.porn.fameType} pornography has dropped considerably,</span> though some viewers still cling to the hope that ${he}'ll come back. `;
} else if (slave.porn.fame[genre.fameName] < 5000) {
slave.porn.prestige = 0;
slave.porn.prestigeDesc = 0;
slave.porn.fameType = "none";
r += `With no new ${slave.porn.fameType} content coming out, <span class="red">${his} popularity has faded away.</span> `;
}
}
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
function calcBaseViewership(slave) {
let face;
if (slave.porn.prestige > 1) {
decayRate = 5000;
if (slave.fuckdoll > 0) {
face = 50;
} else if (slave.collar === "porcelain mask") {
face = 20;
} else {
face = slave.face * 4;
}
viewership = ((500/V.HackingSkillMultiplier)+(slave.porn.spending)+(face)+(slave.prestige*10)-(decayRate));
} else if (slave.porn.prestige > 0) {
decayRate = 500;
if (slave.fuckdoll > 0) {
face = 20;
} else if (slave.collar === "porcelain mask") {
face = 50;
} else {
face = slave.face * 2;
}
viewership = ((900/V.HackingSkillMultiplier)+(slave.porn.spending/15)+(face)+(slave.prestige*250)-(decayRate));
} else {
decayRate = 30;
if (slave.fuckdoll > 0) {
face = 0;
} else if (slave.collar === "porcelain mask") {
face = 0;
} else {
face = slave.face / 20;
}
viewership = ((300/V.HackingSkillMultiplier)+(slave.porn.spending > 0 ? 1.01*slave.porn.spending : 200)+(face)+(slave.prestige*20)-(decayRate));
}
viewership = Math.trunc(viewership);
function prestigeCommentary(slave) {
if (slave.porn.prestige > 1) {
r += `${He} is widely regarded in ${slave.porn.fameType} porn, but with so many watchers, turn over is high. `;
} else if (slave.porn.prestige > 0) {
if (slave.porn.fameType === "generic") {
r += `${He} has claimed a niche in slave porn, so there is a constant cycle of new arrivals and bored ex-watchers. `;
} else {
r += `${He} has claimed a niche for ${himself} in ${slave.porn.fameType} porn, so there is a constant cycle of new arrivals and bored ex-watchers. `;
}
} else {
r += `${He} is borderline unknown, so ${he} tends to hold onto the few watchers ${he} has. `;
}
if (slave.prestige > 1) {
r += `Interest in porn of ${him} is very high, since ${he}'s already quite prestigious. `;
} else if (slave.prestige > 0) {
r += `Interest in porn of ${him} is high, since ${he}'s already prestigious. `;
}
function faceCommentary(slave) {
if (slave.fuckdoll > 0) {
return;
} else if (slave.collar === "porcelain mask") {

svornost
committed
r += `${His} mask adds an air of mystery to ${him}, `;
if (slave.porn.prestige > 1) {

svornost
committed
r += `but people wonder if ${he} is trying to hide something. `;
} else if (slave.porn.prestige > 0) {
r += `tantalizing viewers with what it hides. `;
} else {
r += `but viewers are more interested in ${his} body. `;
}
} else if (slave.face > 95) {
r += `${His} unbelievably beautiful face seizes the attention of all who see it. `;
} else if (slave.face > 40) {
r += `${His} gorgeous face draws viewers in and keeps them watching. `;
} else if (slave.face > 10) {
r += `${His} pretty face draws viewers in. `;
} else if (slave.face > 0) {
r += `${His} face is attractive, but it attracts few viewers. `;
} else if (slave.face === 0) {
r += `${His} face is completely average and makes no difference to ${his} viewers. `;
} else if (slave.face >= -10) {
r += `${His} face, while attractive, is so average it turns off some viewers. `;
} else if (slave.face >= -40) {
r += `${His} unattractive face causes viewers to move on. `;
} else if (slave.face >= -95) {
r += `${His} ugly face drives viewers off. `;
} else {
r += `${His} face chases off all but the most desperate viewers. `;
}
function hack() {
if (V.PC.skill.hacking > 10) {
r += `With your hacking skills, you manage to tweak search algorithms to display ${his} content more often. `;
} else if (V.PC.skill.hacking < 0) {
r += `With your lack of skill with computers you manage to misidentify ${his} content, complicating searches. `;
IncreasePCSkills('hacking', 0.1);
}
IncreasePCSkills('hacking', 0.1);
function viewershipDelta(newPorn, oldPorn) {
if (newPorn > oldPorn) {
return `Viewership <span class="green">increased</span> this week. `;
} else if (newPorn < oldPorn) {
return `Viewership <span class="red">decreased</span> this week. `;
} else {
return `Viewership <span class="yellow">was stable</span> this week. `;
}
function cheatDelta(name, oldPorn, newPorn) {
if (V.cheatMode === 1) {
return `(${name}: ${oldPorn} to ${newPorn}). `;
}
return ``;
let adjustedViewership = viewership;
function genreViews(slave, genre) {
const oldPorn = slave.porn.fame[genre.fameVar];
if (genre.valid(slave)) {
if (slave.porn.focus === genre.focusName || slave.porn.fameType === genre.fameName) {
adjustedViewership = viewership * genre.type.focusedViewershipFactor;
} else if (slave.porn.focus !== "none") {
adjustedViewership = viewership * genre.type.unfocusedViewershipFactor;
}
slave.porn.fame[genre.fameVar] += adjustedViewership/(1+viewerSoaking*genre.type.viewershipSoakingFactor) + genre.type.bonusViewership(slave) - ((decayRate/10)*(V.pornStars[genre.fameVar].p1count-1));
slave.porn.fame[genre.fameVar] = Math.clamp(slave.porn.fame[genre.fameVar], 0, 150000);

svornost
committed
viewerSoaking++;
if (slave.porn.focus === genre.focusName || slave.porn.fameType === genre.fameName) {
r += `${genre.hitText(slave)} `;
r += viewershipDelta(slave.porn.fame[genre.fameVar], oldPorn);
}
r += cheatDelta(genre.uiName(), oldPorn, slave.porn.fame[genre.fameVar]);
} else if (slave.porn.fame[genre.fameVar] > 0) {
slave.porn.fame[genre.fameVar] = Math.clamp(slave.porn.fame[genre.fameVar] - decayRate*2, 0, 150000);
r += cheatDelta(genre.uiName(), oldPorn, slave.porn.fame[genre.fameVar]);
}
}
/* Paraphilias have the highest take of viewers */
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.paraphilia)) {
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.fetish)) {
}
/* General */
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.general)) {
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.generic)) {
}
/* Quirks are low and unlikely, requiring focus to push into the limelight */
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.quirk)) {
}

svornost
committed
function getHighestPornGenre(slave) {
return App.Porn.getAllGenres().reduce((acc, cur) => slave.porn.fame[cur] > slave.porn.fame[acc] ? cur : acc);
}
function prestigeGen(slave) {

svornost
committed
const highestPorn = getHighestPornGenre(slave);
if (slave.porn.prestige === 0 && slave.porn.viewerCount >= 100000) {
const pornFameGrabBag = App.Porn.getAllGenres().filter((g) => slave.porn.fame[g.fameVar] >= 10000);
if (pornFameGrabBag.length > 0) {
const genre = pornFameGrabBag.pluck();
slave.porn.fameType = genre.fameName;
slave.porn.prestige = 1;
r += `<span style="green">${He} has gained a following in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc1}, but he isn't famous enough to be called presigious yet. `;
slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
if (genre.type === App.Porn.GenreType.fetish && slave.fetishKnown !== 1) {
slave.fetishKnown = 1;
}
}
} else if (slave.porn.prestige === 1) {
const swapPoint = 1.2;
const genre = App.Porn.getGenreByFameName(slave.porn.fameType);
if (slave.porn.fame[genre.fameVar] >= 50000) {
slave.porn.prestige = 2;
slave.porn.prestigeDesc = `$He is well known from $his career in slave pornography. ${genre.prestigeDesc2}.`;
r += `<span class="green">${He} has gained a hold in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc2}, so it is now prestigious to own ${him}. `;

svornost
committed
} else if (slave.porn.fame[highestPorn] >= slave.porn.fame[genre.fameVar] * swapPoint) {

svornost
committed
r += `${His} fame in ${slave.porn.fameType} pornography has been overwhelmed by ${his} surging popularity in other aspects. <span class="yellow">${He} is now better known for ${his} ${highestPorn.fameName} porn.</span> `;

svornost
committed
slave.porn.fameType = highestPorn.fameName;
slave.porn.prestigeDesc = `$He has a following in slave pornography. ${highestPorn.prestigeDesc1}.`;
} else if (slave.porn.fame[genre.fameVar] < 5000) {
slave.porn.prestige = 0;
slave.porn.prestigeDesc = 0;
r += `<span class="red">${His} popularity in ${slave.porn.fameType} pornography has faded.</span> ${He} is once again relatively unknown. `;
slave.porn.fameType = "none";
}
} else if (slave.porn.prestige === 2) {
const genre = App.Porn.getGenreByFameName(slave.porn.fameType);
if (slave.porn.fame[genre.fameVar] >= 150000 && V.pornStars[genre.fameVar].p3ID === 0) {
slave.porn.prestige = 3;
slave.porn.fame[genre.fameVar] = 250000;
slave.porn.viewerCount = 250000;
V.pornStars[genre.fameVar].p3ID = slave.ID;
slave.porn.prestigeDesc = `$He is world famous for $his career in slave pornography. ${genre.prestigeDesc3}.`;
r += `<span class="green">${He} has become world famous for ${his} career in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc3}, so it is now extremely presitigious to own ${him}. `;
V.trinkets.push(`a framed shot from porn starring ${slave.slaveName} ${genre.trinketShotDesc(slave)}`);
r += `Further paid publicity cannot increase ${his} fame, so subsidy of porn featuring ${him} has stopped. `;
slave.porn.spending = 0;
} else if (slave.porn.fame[genre.fameVar] < 40000) {
slave.porn.prestige = 1;
slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
r += `<span class="red">${His} popularity in ${slave.porn.fameType} pornography has dropped considerably,</span> though ${he} still retains a core fanbase. `;
}
}
}
})();