Forked from
pregmodfan / fc-pregmod
22778 commits behind the upstream repository.
saPorn.js 13.30 KiB
window.saPorn = (function saPorn() {
"use strict";
let r;
let he, him, his, hers, himself, girl, loli, He, His;
let decayRate;
let viewership;
let viewerSoaking;
return saPorn;
function saPorn(slave) {
({
he, him, his, hers, himself, girl, He, His, loli
} = getPronouns(slave));
r = ` `;
let oldFame = slave.porn.viewerCount;
if (V.studio === 1 && slave.porn.feed === 1) {
viewerSoaking = 0;
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();
allGenreViews(slave);
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) {
for (const genre of App.Porn.getAllGenres()) {
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> `;
}
}
}
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") {
r += `${His} mask adds an air of mystery to ${him}, `;
if (slave.porn.prestige > 1) {
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 ``;
}
function allGenreViews(slave) {
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);
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)) {
genreViews(slave, genre);
}
/* Fetishes */
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.fetish)) {
genreViews(slave, genre);
}
/* General */
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.general)) {
genreViews(slave, genre);
}
/* Generic porn */
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.generic)) {
genreViews(slave, genre);
}
/* Quirks are low and unlikely, requiring focus to push into the limelight */
for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.quirk)) {
genreViews(slave, genre);
}
}
function getHighestPornGenre(slave) {
return App.Porn.getAllGenres().reduce((acc, cur) => slave.porn.fame[cur] > slave.porn.fame[acc] ? cur : acc);
}
function prestigeGen(slave) {
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}. `;
} else if (slave.porn.fame[highestPorn] >= slave.porn.fame[genre.fameVar] * swapPoint) {
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> `;
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. `;
}
}
}
})();