<<silently>>
<</silently>>
<<browserwindow "" "browser-lightpink-lightpink">>
!Welcome to <strong>OnlyBans</strong>!
OnlyBans is an online platform where you post sexy content to attract fans and earn money. The sexier the photo, the more fans! The more fans, the more money! But if you’re too sexy, then your account might get suspended, shadowbanned, or deleted - and then you’ll have to start over. Besides avoiding censorship, you also want to protect your privacy as a sex worker.
Want to play?
<span class="bigger-font">[[Play.->what-is-your-name]]</span>
<span class="bigger-font"><<linkreplace "Read more">><<include "StoryMenu">><</linkreplace>></span>
<</browserwindow>><<silently>>[[dummy->greetings]]
<</silently>><<backgroundvideo "typing">><</backgroundvideo>><<browserwindow "" "browser-white-blue">>Your name is
<<textbox "$playerName" $playerName autofocus>>
<<button "Submit" "greetings">>
<</button>>
<</browserwindow>>
[[How to Play]]
[[About]]
[[Credits]]
<<if $isQATestMode >>[[QA Test]]
<</if>>
<<back "Back to game.">>
<h2>How to play</h2>
This game is fictionalized, but based on true stories. Throughout the game, facts and real-life experiences will be shared.
Goal: Make $<<print $incomeTarget>> in $weekLimit weeks.
Make money by:
● posting photos that attract new paying fans
● earning tips
Avoid:
● Having your identity stolen or revealed.
● Having your account shut down.
● Stalkers and harassment
Use your mouse or finger to click links. Links are underlined and look like <<cycle "_temp">> <<option "THIS">><<option "that">><</cycle>>.
Sometimes, parts of the game will require you to click on photos to advance the game.
Sometimes, there are videos; they are just for background viewing.
There is no undo or back button. If you get stuck or something is broken, you can <<link "Restart">><<script>>UI.restart();<</script>><</link>> (found in the left sidebar).
OnlyBans<<back "Take me back to the game.">>
<h1>Credits </h1><p class="big-line-height">''Creator'': <a href="https://www.lenachen.com/">Lena Chen</a>
<<linkappend "<strong>Narration Nympho</strong>">> (Writer)<</linkappend>>: Lena Chen
<<linkappend "<strong>Software Princess</strong>">> (Software Engineer)<</linkappend>>: Maggie Oates
''Graphic Designer & Videographer:'' <a href="http://goofytoof.com/">Goofy Toof</a>
''Sound Designer'': <a href="https://aethercomplex.com/Avatar-Lilith">Avatar Lilith</a> <a href="https://www.instagram.com/l.i.lith/">(insta)</a>
<<linkappend "<strong>Web Baby</strong>">> (Software Engineer)<</linkappend>>: SH
''Image and Story Contributors:''
<a href="https://www.twitter.com/amalaxazul">Amala Azul</a>
<a href="https://www.instagram.com/light.fae">Fae Brite</a>
<a href="https://www.instagram.com/___hellbait___">Hellbait</a>
<a href="https://www.instagram.com/themmeheals/">J.P. (Themme)</a>
<a href="https://twitter.com/LyncJohnson">Lync Johnson</a>
Quin
<a href="https://www.instagram.com/thatwomanisangry/">Karren</a>
<a href="https://www.twitter.com/missharleykinz">Nimina Harley</a>
<a href="https://twitter.com/mac_thigh/">Stonerdomme</a>
''Hosting Angel:'' Anonymous Donor 🚲
</p>
The ''cast a spell'' ending was inspired by the dreams and altars of participants of a sex worker+technology workshop series. The workshops were hosted by Decoding Stigma as part of their Browser Histories project.
Thank you to all the sex workers, artists, and activists who continue to work, create, and agitate online and offline. You are our heroes, and we made OnlyBans for and with you.
<h2>ACKNOWLEDGEMENTS</h2>
Thank you to all our contributors who have been brave enough to share their real stories and photos. Your generosity and trust has been a gift.
Thank you to """Hacking//Hustling""". We are indebted to your research, in particular the report, <a href="https://hackinghustling.org/posting-into-the-void-content-moderation/">"Posting Into The Void"</a>, from which we drew many of our statistics on shadowbanning and deplatforming. You have been an invaluable resource to those fighting on the digital frontlines.
Thank you Lien Tran, the creator of <a href="http://copsandrubbers.com/">"Cops & Rubbers"</a>, which was hugely inspirational as we considered how to design a game that could also compel real-world policy change.
We also thank Polis 180 and Violeta Mezeklieva, with whom Lena conceptualized an early version of OnlyBans. Thank you to Kelly Strayhorn Theater for supporting the project’s visual development and narrative expansion during the Freshworks residency. This work was also supported by the UC Berkeley Center for Long-Term Cybersecurity, the Carnegie Mellon School of Art, and Science Gallery Detroit.
The OnlyBans narrative is inspired by contributions gathered in workshops we held with <a href="https://decodingstigma.tech/">Decoding Stigma</a> in fall 2022. Participants included … The M0THER ending also includes language from Gabriella Garcia.
<h2><<back "Take me back to the game.">></h2>
/* PLAY MODES */
/* <<$isGalleryMode>> is controlled by Javascript, disables some features */
/* <<$isQATestMode>> is controlled by the Javascript */
<<set $isPerformanceMode to false>> /* hardcodes some tracks so the game doesn't end too early */
/* GLOBAL STORY VARIABLES */
<<set $income to 1>>
<<set $incomePerFan to 10>>
<<set $incomeTarget to 200>>
<<set $numPhotosFlagged to 0>>
<<set $numFans to 0>>
<<set $flagLimit to 3>>
<<set $wasSuspended to false>>
<<set $outingRisk to 1>>
<<set $outingLimit to 3>>
<<set $joinedGroup to false>>
<<set $playerName to '@QTPieslice'>>
<<set $usedRealName to false>>
<<set $numWeek to 0>>
<<set $weekLimit to 6>>
<<set $outingPreludeWeek to 3>>
<<set $suspensionWeek to 4>>
<<set $outingWeek to 5>>
<<set $hasVerifiedName to false>>
<<set $hasVerifiedAddress to false>>
<<set $hasVerifiedID to false>>
<<set $viewedLessons to []>> /* joinedGroup */
<<set $currentPhoto to "default">>
<<set $numPhotosQueued to 9>>
<<set $ritualOffering to "computer mouse">>
<<set $ritualOfferingPrepend to "one">>
/* SOUND */
<<masteraudio muteonhide>> /* mute audio when tab is in background */
<<cacheaudio "ambient" "audio/ambient.mp3">>
<<cacheaudio "dark" "audio/dark.mp3">>
<<cacheaudio "outsideclub" "audio/outsideclub.mp3">>
<<cacheaudio "sexi" "audio/sexi.mp3">>
<<cacheaudio "glitch" "audio/glitch.mp3">>
<<cacheaudio "cashregister" "audio/cashregister.mp3">>
<<cacheaudio "bad" "audio/bad.mp3">>
<<cacheaudio "notification" "audio/notification.mp3">>
<<cacheaudio "click" "audio/click.mp3">>
<<cacheaudio "neutral" "audio/neutral.mp3">>
<<set $fxgroupID to ":soundeffects">>
<<createaudiogroup $fxgroupID>>
<<track "glitch">>
<<track "cashregister">>
<<track "bad">>
<<track "notification">>
<<track "click">>
<<track "neutral">>
<</createaudiogroup>>
<<set $bgmusicgroupID to ":bgmusic">>
<<createaudiogroup $bgmusicgroupID>>
<<track "ambient">>
<<track "dark">>
<<track "outsideclub">>
<<track "sexi">>
<</createaudiogroup>>
<<audio $bgmusicgroupID volume 0>>
<<set $audioTagMap to {
"music-ambient" : "ambient",
"music-dark" : "dark",
"music-outsideclub" : "outsideclub",
"music-sexi" : "sexi",
"music-silent" : "silent",
}>>
/* STATS */
<<set $shadowBanFacts to [
'"We are reducing the spread of posts that are inappropriate but do not go against guidelines, limiting them from being recommended on our Explore and hashtag pages. For example, a sexually suggestive post will still appear in Feed if you follow the account that posts it, but this type of content may not appear for the broader community." –Instagram"',
'A shadowban ensures that content that platforms deem inappropriate, high-risk, or low value speech is invisible to other users, but still allows an account to remain on the platform in order to make ad revenue off of the shadowbanned individual.',
'You can get shadowbanned for following other sex workers. 73% of sex workers have experienced social media platforms suppressing their friends’ content from their timelines.',
'59% of sex workers have found their username does not show up in searches.',
'55% of those who have done sex work avoid specific words to avoid being shadowbanned. You can get shadowbanned for using banned phrases and hashtags like #asiangirl, #curvygirls, or #lesbian.'
] >>
<<set $tooSexyFacts to [
"42% of sex workers said they have received a warning that their social media account is close to deletion.",
"67% of sex workers have had a post removed from social media.",
"Plus-size users' accounts are flagged for excessive nudity and sexual solicitation more frequently than thin users’ accounts. Women of color and queer people experience platform punishment and policing more frequently than their white, cishetero counterparts." ,
"42% of sex workers said they have received a warning that their social media account is close to deletion.",
"67% of sex workers have had a post removed from social media.",
"Plus-size users' accounts are flagged for excessive nudity and sexual solicitation more frequently than thin users’ accounts. Women of color and queer people experience platform punishment and policing more frequently than their white, cishetero counterparts."
] >>
<<set $noReasonFacts to [
"77% of those who have done sex work avoid posting content for fear of being kicked off, shadowbanned, or facing legal action.",
"68% of those who have done sex work have had content that does not violate a sensitive media policy marked as sensitive media on their profile.",
"74% of those who have done sex work are noticing trends in the suppression of information on social media.",
"77% of those who have done sex work avoid posting content for fear of being kicked off, shadowbanned, or facing legal action.",
"68% of those who have done sex work have had content that does not violate a sensitive media policy marked as sensitive media on their profile.",
"74% of those who have done sex work are noticing trends in the suppression of information on social media."
] >>
<<set $tipMessages to [
"Can you keep me warm? 🔥😘",
"🔥What a beautiful sexy perfect body 🔥",
"Sweet meat baby ❤️",
"Take it all off!!!!!!!",
"I love your toes",
"Damn baby you're so beautiful and very very sexy!!! 🔥🔥🔥👅👅👅😈",
"you are wonderful my princess🔥👅",
"I would **** you till I faint !!!",
"🍒💜🌹bonita🐰babygirl🌹💜🍒",
"Gorgeous and sexy, I so want you babe 🔥🔥🔥👿👿👿😍😘",
"You poor child, have you no clothes to wear??",
] >>
/* PHOTOS */
/* Outcome/reward distributions for the different photo risks.
These should add to 100. */
<<set $riskDists to {
"low": {
"tooSexyBan": 0,
"noReasonBan": 20,
"shadowBan": 10,
"newFans": 70,
},
"medium" : {
"tooSexyBan": 16,
"noReasonBan": 17,
"shadowBan": 17,
"newFans": 50,
},
"high" : {
"tooSexyBan": 35,
"noReasonBan": 1,
"shadowBan": 34,
"newFans": 30,
}
}>>
/* The number of fans you get for the risk you take. Integer range. */
<<set $fanRewardDists to {
"low" : [1, 2],
"medium" : [2, 4],
"high" : [3, 6],
} >>
<<set $photoPool to {
"default" : new Photo(),
"jp" : new Photo("jp",
"1_JP",
"high",
"A person with medium dark skin, buzzed hair, and a mustache. The person is kneeling in an orange fishnet body stocking and a matching banana hammock. Nipples are faintly visible.",
"A flirty vaporwave photo of a person with medium dark skin, buzzed hair, and a mustache. The person is kneeling in an orange fishnet body stocking and a matching banana hammock. Nipples are faintly visible.",
"J.P. (Themme)",
"I'm a trans diasporic person by way of the Dominican Republic. These pictures were flagged on Instagram, and I'm currently on probation, with my account near deletion."),
"quin" : new Photo("quin",
"3_Quin",
"medium",
"A light-skinned, tattooed, thin femme lies chest-down on a cushion with their butt lifted slightly into the air. They are wearing strong eyelines, a nose ring, and pink thong bodysuit lingerie with a few bows. No nipples or genitals are in view.",
"A flirty vaporwave photo of a light-skinned, tattooed, thin femme lies chest-down on a cushion with their butt lifted slightly into the air. They are wearing strong eyelines, a nose ring, and pink thong bodysuit lingerie with a few bows. No nipples or genitals are in view.",
"Quin",
"I'm a gay, non-binary, Latinx sex worker. I’ve been working for 9 years and have been flagged so many times that I can't keep count. My personal account of 10 years was taken away from me."
),
"stonerdomme" : new Photo("stonerdomme",
"4_Stonerdomme",
"medium",
"Stonerdomme (they/them) holds up two peace signs to the camera with their legs spread. Dressed in yellow lingerie, Stonerdomme is a Black, dark-skinned fat person with pink and purple-dyed natural hair, a belly, curves, and a devilish smirk.",
"A flirty vaporwave graphic. Stonerdomme (they/them) holds up two peace signs to the camera with their legs spread. Dressed in yellow lingerie, Stonerdomme is a Black, dark-skinned fat person with pink and purple-dyed natural hair, a belly, curves, and a devilish smirk.",
"Stonerdomme",
"I'm Black, pansexual, and non-binary. This image was used against me in a Twitter debate. Someone reported my content and they banned me."
),
"fae" : new Photo("fae",
"12_Fae",
"low",
"A Black, light skinned femme with tight curly hair, glasses, and dark lipstick gazes listlessly at the camera. They are wearing a leather chest harness and fishnet tights. Their arms cover most of their flat chest, but the faint outline of a nipple is visible.",
"A flirty vaporwave photo of a Black, light skinned femme with tight curly hair, glasses, and dark lipstick gazes listlessly at the camera. They are wearing a leather chest harness and fishnet tights. Their arms cover most of their flat chest, but the faint outline of a nipple is visible.",
"Fae Brite",
"I'm AMAB (assigned male at birth) and non-binary so it's frustrating to have my body policed in a way where the more feminine I look, the more incriminating it is and thus more of a liability."
),
"amala" : new Photo("amala",
"5_Amala",
"low",
"Amala Azul leans shirtless toward the camera with one hand covering both breasts. Amala is Black and wear a checkered skirt, hoop earrings, a head scarf, and fantastic eyebrows. No nipples are showing.",
"A flirty vaporwave photo. Someone leans shirtless toward the camera with one hand covering both breasts. Amala is Black and wear a checkered skirt, hoop earrings, a head scarf, and fantastic eyebrows. No nipples are showing.",
"Amala Azul",
"I'm a Black, queer, non-binary, and disabled sex worker. This photo was deleted for violating community guidelines, and I was threatened with account deletion if I continued. I no longer promote on Instagram due to the immense censorship and whorephobia."
),
"nimina" : new Photo("nimina",
"6_Nimina",
"low",
"A medium-skinned, large person with a bright green wig winks and holds two peace signs up. They are wearing a sleeveless velvety pink top with the word Angel, glasses, impeccable stilleto nails, dimple piercings, and a studded leather collar. There is a small amount of cleavage visible.",
"Flirty vaporwave. A medium-skinned, large person with a bright green wig winks and holds two peace signs up. They are wearing a sleeveless velvety pink top with the word Angel, glasses, impeccable stilleto nails, dimple piercings, and a studded leather collar. There is a small amount of cleavage visible.",
"Nimina Harley",
"This image was deleted only minutes after uploading, and I am fully dressed. I’m queer and a person of color."
),
"hellbait" : new Photo("hellbait",
"11_Hellbait",
"medium",
"A pale-skinned Vietnamese woman with long black hair and half bleached bangs holds two black butt plugs to her head like alien antennae. A yellow Tellytubby toy sits on her lap. She is topless, wearing high-waisted black lace underwear. Her hair fully covers her breasts. Her mouth is held open with a metal gag device, tongue out, as she gazes directly at you.",
"Flirty vaporwave photo of a pale-skinned Vietnamese woman with long black hair and half bleached bangs holds two black butt plugs to her head like alien antennae. A yellow Tellytubby toy sits on her lap. She is topless, wearing high-waisted black lace underwear. Her hair fully covers her breasts. Her mouth is held open with a metal gag device, tongue out, as she gazes directly at you.",
"Hellbait",
"I'm Vietnamese and queer. My image was removed for 'sexual activity' on Instagram. For the next two weeks, I did not show up in search results or on my followers' feeds at all."
),
"karren" : new Photo("karren",
"9_Karren1",
"high",
"Karren is a thin, shirtless woman with has light skin, dark hair, and a perfect manicure. She sultrily slides one hand under sheer tights into her crotch. The portion of her face above the lips has been cropped off of the intimate monochrome image.",
"A flirty vaporwave stylized photo. Karren is a thin, shirtless woman with has light skin, dark hair, and a perfect manicure. She sultrily slides one hand under sheer tights into her crotch. The portion of her face above the lips has been cropped off of the intimate image.",
"Karren",
"I am an erotic artist in the Philippines using photography and collage to express myself. Censorship on almost all platforms has made it difficult for me to pursue my art."
),
"karren2" : new Photo("karren2",
"10_Karren2",
"high",
"Karren is a voluptuous, tan skinned woman standing at an angle slightly away from the camera. She is shirtless with dark brief underwear. One nipple is visible.",
"A flirty vaporwave-styled photo. A voluptuous, tan skinned woman standing at an angle slightly away from the camera. She is shirtless with dark brief underwear. One nipple is visible.",
"Karren",
"I am an erotic artist in the Philippines using photography and collage to express myself. Censorship on almost all platforms has made it difficult for me to pursue my art."
),
"lync2" : new Photo("lync2",
"8_Lync2",
"high",
"A naked, thin, muscular Black man stares into the camera. The image is cropped at the edge of his groin, revealing the faintest suggestion of genitals. Both nipples are visible. Watermarked with RoyMayh.",
"Flirty, vaporwave styled. A naked, thin, muscular Black man stares into the camera. The image is cropped at the edge of his groin, revealing the faintest suggestion of genitals. Both nipples are visible.",
"Lync Johnson",
"This image was deleted by Instagram. I had to crop or edit the photo in order to successfully repost it."
),
"lync" : new Photo("lync",
"7_Lync1",
"high",
"A thin, muscular Black man stares into the camera. One hand lifts up his shirt above his nipple. The other hand reaches down into his pants, revealing the edge of public hair. Watermarked RoyMayh.",
"Flirty, vaporwave stylized. A thin, muscular Black man stares into the camera. One hand lifts up his shirt above his nipple. The other hand reaches down into his pants, revealing the edge of public hair.",
"Lync Johnson",
"This image was deleted by Instagram. I had to crop or edit the photo in order to successfully repost it."
),
}>>
<<set $availablePhotos to clone(Object.keys($photoPool))>>
<<run $availablePhotos.delete("default") >>
<<silently>>[[dummy->motivation]]<</silently>><<backgroundvideo "makeup">><</backgroundvideo>><<browserwindow "" "browser-blue-white">>
<<type2 60ms>>Welcome, $playerName.<</type2>>
What kind of name did you pick?
<<link "a real name" "motivation">><<set $usedRealName to true>><</link>>
<<link "a fake name" "motivation">><<set $usedRealName to false>><</link>>
<</browserwindow>><<backgroundvideo "empty-wallet">><</backgroundvideo>><<browserwindow "GOALS" "browser-blue-white">>
You're hoping to earn $<<print "$incomeTarget">> to pay your gas and water bills in $weekLimit weeks. Every fan you get earns you $<<print "$incomePerFan">>. If you're lucky, some of them may even tip you extra! 😘
<<link "Let's get fans!" start-week>><<audio "glitch" play>><</link>>
<</browserwindow>><<silently>>
<<set $numWeek to visited()>>
<<set _toGo = Math.clamp($incomeTarget - $income, 0, $incomeTarget + $income) >>
[[dummy->photo-selection]]
[dummy->suspension-side-story]]
[[dummy->outing-side-story]]
[[dummy->money-ending]]
<<set _videoList to ['camming1', 'camming2', 'camming3', 'camming4']>>
<<set _i to visited() % _videoList.length>>
<</silently>><<nobr>>
<<backgroundvideo _videoList[_i]>><</backgroundvideo>>
<h2>Week $numWeek</h2> <</nobr>>
You have $<<print "$income">> in your pocket and $<<print _toGo>> to go!
<<switch visited()>>
<<case $suspensionWeek>>
[[You go to post a new photo and see a weird notification.->suspension-side-story]]
<<case $outingPreludeWeek>>
<<linkreplace "Log in to post a new photo.">>
Weird...the button to post photos is disabled. [[Check your notifications->outing-prelude]].
<</linkreplace>>
<<case $outingWeek>>
A new message pops up! [[Open the message.->outing-side-story]]
<<case $weekLimit>>
<<goto [[money-ending]]>>
<<default>>
<<set _line to ["Time to set some thirst traps.", "You get out the selfie stick and start snapping away.", "You love the camera and the camera loves you."].pluck()>>
<<link _line "photo-selection">><<audio "neutral" play>><</link>>
<</switch>>
<<silently>>
<<set _outingBranch to either("stolen-content", "personal-data", "suggested-friends")>>
<<if $isPerformanceMode>>
<<set _outingBranch to "suggested-friends">>
<</if>>
<<set _outingEquiv to (_outingBranch == "stolen-content")>>
<</silently>><<if _outingBranch == "stolen-content">>
The text is from an old friend you haven't talked to in years.
<<browserwindow "sms" "browser-blue-white">>Hey $playerName. This is kind of awkward, but I just wanted to reach out and let you know I stumbled on this pic of you on PornHubba...
<</browserwindow>>
The pic is yours, but you didn't post it on PornHubba. Oh, hell no!
Someone is stealing and reposting your content!
Do you want to [[ask other sex workers for advice->stolen-content]] or [[ignore it->photo-selection]]?
<<elseif _outingBranch == "personal-data">>
Shooting and posting content is hard work, but what nobody told you about was all the invisible effort of chatting with fans. Like working in a coffee shop, you start to get regular customers who tip you again and again. And then there are some people who are just there for freebies or who are just plain rude.
There's yet another [[fan message to deal with.->personal-data]]
<<elseif _outingBranch == "suggested-friends">>
OnlyBans sent you a list of suggested followers. You think you recognize one of the people? [[Take a closer look.->suggested-friends]]
<<else>>
Your friend asks you to feed their cat (again). [[Get back to making content.->photo-selection]]
<</if>><<silently>>
<<set $wasSuspended to true>>
<<audio "bad" play>>
<</silently>><<browserwindow "too-sus.cry" "browser-black-gray">> <h2>SUSPENDED!</h2>
OnlyBans is watching you. Based on your previous activity, your account has been temporarily blocked from taking this action. This block expires in one week.
We restrict certain content to protect our community. If you continue to post dangerous content, you may be banned permanently.
<</browserwindow>>
[[Continue.->suspension-consequence]]
<<browserwindow "locked" "browser-pink-white-blue">>
<h2>LOCKED</h2>
We've temporarily limited some of your account features. In order to make sure OnlyBans is as safe as possible, you may be asked to confirm you're not a robot. Easy, right?
For full access, please verify your phone number.
<<textbox "_fakePhone" "777-7777" "verify-more" autofocus>>
[[Submit.->verify-more]]
[[Skip verification.->skip-verify-phone]]
<</browserwindow>><<silently>>
[[dummy->got-money-ending]]
[[dummy->not-enough-money-ending]]
<<set _hasEnoughMoney to $income >= $incomeTarget>>
<<audio "cashregister" play>>
<</silently>>
Let's count your money!
<<if _hasEnoughMoney>><<include "got-money-ending">>
<<else>><<include "not-enough-money-ending">><</if>>
<<silently>>
<<run $availablePhotos.shuffle()>>
[[dummy->newFans]]
[[dummy->noReasonBan]]
[[dummy->shadowBan]]
[[dummy->tooSexyBan]]
<</silently>>
<<browserwindow "MY PHOTOS" "browser-lightpink-white">>
Which photo do you want to post today?
<<photogrid $availablePhotos>>
<</browserwindow>><<silently>>
<<set _newFansRange to $fanRewardDists[$photoPool[$currentPhoto].riskLevel] >>
<<set _numNewFans to random(_newFansRange[0], _newFansRange[1])>>
<<addfans _numNewFans>>
<<audio "neutral" play>>
<</silently>><<backgroundvideo "boots">><</backgroundvideo>>Your photo got some attention and attracted _numNewFans new fans!
Yay, you’re getting the hang of this! [[What else could you do->community-support]] to boost your fan count?<<silently>>
<<set $numPhotosFlagged += 1>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "FLAGGED" "browser-pink-gray">><h2>FLAGGED!</h2>
Your photo is <strong>too</strong> sexy. It’s been taken down. If you post something that goes against our guidelines again, your account may be deleted.
You’ve made no new fans and earned no new money.
[[Continue->too-sexy-real-story]]
<</browserwindow>><<silently>>
<<set $numPhotosFlagged += 1>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "areuthere.txt" "browser-pink-pink">><h2>SHADOWBANNED?</h2>
Your photo was posted but there are barely any likes or comments. 🤔
A shadowban means that a user can continue posting as normal, but their posts will be hidden from the rest of the community.
<</browserwindow>>
Sorry, no new fans. No new money.
[["Ugh, why?"->shadowBan-real-story]]
<<silently>>
<<set $numPhotosFlagged += 1>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "f l a g g e d" "browser-pink-gray">><h2>FLAGGED!</h2>
The algorithm flagged your content even though you followed all the guidelines! If you get flagged again, your account may be deleted.
<</browserwindow>>
Sorry, no new fans.
[[Continue.->noReason-real-story]] <<silently>>
<!-- dummy utility links for the Twine editor map --!>
[[share4share->share4share]]
[[joinGroup->joinGroup]]
[[tip->tip]]
[[attendWorkshop->attendWorkshop]]
<<set $communityOutcome to 'tip'>>
<<set $communityOutcomes to ["share4share", "attendWorkshop", "joinGroup", "tip", "tip", "joinGroup"]>>
<<switch visited()>>
<<case $suspensionWeek>> /* since they can't accept tips, send them to the outcome that has no tips */
<<set $communityOutcome to 'attendWorkshop'>>
<<case 1>>
<<set $communityOutcome to 'share4share'>>
<<case 2>>
<<set $communityOutcome to 'tip'>>
<<case 3>>
<<set $communityOutcome to 'joinGroup'>>
<<case 4>>
<<set $communityOutcome to 'attendWorkshop'>>
<<default>>
/* all other weeks, get a tip. */
<<set $communityOutcome to 'tip'>>
<</switch>>
<<goto $communityOutcome>>
<</silently>>[[logic error ->tip]]
<<silently>>
<</silently>><<backgroundvideo "stress-nails">><</backgroundvideo>>
You're locked out of OnlyBans for the rest of the week. You can't gain new followers and or accept new money.
But hey, [[others have been through this before->community-support]]. Maybe your luck will improve?
<<backgroundvideo "stress-temples">><</backgroundvideo>>
Another banned photo? That's $numPhotosFlagged banned photos //and// you were recently suspended?
[[Oh shit...->permabanned]]<<silently>>
<<audio "bad" play>>
<</silently>>
<<browserwindow "oh-no.exe" "browser-pink-black">><h2>DEACTIVATED</h2>
You've violated the rules one too many times. Your account has been permanently disabled.
[[CONTINUE->permabanned-real-story]].
<</browserwindow>><<browserwindow "not-alone.exe" "browser-pink-black">>
41.01% of those who have done sex work said they have been deplatformed or kicked off of a social media account.
[[CONTINUE.->permabanned-appeal]]
<</browserwindow>>
<<silently>>
<<set _hasAppealSuccess to either(true, false)>>
<<if $isPerformanceMode>>
<<set _hasAppealSuccess to true>>
<</if>>
<</silently>><<backgroundvideo "help-scrolling">><</backgroundvideo>>You ask a stripper you follow who lost an account with over 10k followers. They tell you that you can try to get your account back by submitting a support request, but the odds are against you.
What do you do?
<span id='giveup'><<linkreplace "Give up your account.">><<remove "#contest">>
Even if you tried to fight it, 93% of sex workers who have been deplatformed do not get their accounts back. You’ve become another casualty of the social media war against sex workers.
Cut your losses and [[cash out on the money you made so far ->money-ending]].
<</linkreplace>>
</span><span id='contest'><<linkreplace "Contest the decision.">><<remove "#giveup">><<if not _hasAppealSuccess>><<audio "bad" play>>
You lose. 93% of sex workers who have been deplatformed do not get their accounts back. You’ve become another casualty of the social media war against sex workers.
You might not be able to get your account back, but maybe you can prevent this from happening to someone else. [[Mobilize your community->immobile-community-chat]]!<<else>>
Your account has been reactivated! Consider yourself in the lucky 7% of sex workers who successfully regain access after being deplatformed.
[[Continue with your week.->community-support]]
<</if>>
<</linkreplace>></span><<backgroundvideo "ending-boots">><</backgroundvideo>><<browserwindow "the-end.exe" "browser-purple">>Thank you for playing OnlyBans!
This game is based on research by <a href="https://hackinghustling.org/posting-into-the-void-content-moderation/">"""Hacking//Hustling"""</a>.
More info in the [[Credits->Credits]] and [[About->About]] pages.
<<link "<span style='font-size:2em'>Play again?</span>">><<script>>UI.restart();<</script>><</link>>
<em>(Things are a little different each time.)</em>
<</browserwindow>><<browserwindow "STILL LOCKED" "browser-black-gray">>
Thank you for verifying your phone number.
For somewhat vague safety reasons, we still need more information before you can cash out any money from your account. Do ''all'' of the following:
<div style="text-align:left" class="big-line-height">
<label><<checkbox "$hasVerifiedName" false true>> Add your legal name.</label>
<label><<checkbox "$hasVerifiedAddress" false true>> Add a personal email.</label>
<label><<checkbox "$hasVerifiedID" false true>> Upload a photo of yourself holding your state ID.</label></div>
<<linkreplace "Submit">>
<<if $hasVerifiedName and $hasVerifiedAddress and $hasVerifiedID>>Verified!
<<audio "neutral" play>>
Finally! You're not thrilled about all the personal info you just gave away, but at least now you can [[get back to posting.->photo-selection]]
<<else>>
<<goto "skip-verify-more">>
<</if>>
<</linkreplace>>
<</browserwindow>><<silently>>
<<audio "glitch" play>>
<</silently>><<browserwindow "" "browser-black-gray">>
You won't be able to withdraw money from OnlyBans until you give them all the personal information demanded. What's the point of making this content if you can't even get paid?
[[Verify your number.->outing-prelude]]<</browserwindow>><<browserwindow "" "browser-black-gray">>
You won't be able to withdraw money from OnlyBans until you give them all the personal information demanded. What's the point of making content if you can't even get paid?
[[Verify the rest.->verify-more]]
Give up and [[close your account->close-account]].
<</browserwindow>>You’re not willing to risk getting outed, but you’ve learned a lot about digital freedom and privacy during your time on OnlyBans. The money was good while it lasted - [[it’s time to cash out->money-ending]]!
<<silently>>
<<set _getsTakenDown to either(true, false)>>
<<set _bgVideoSource to "images/mannequin1.mp4">>
<<set _bgVideo to '<video autoplay loop muted id="bgvid"><source type="video/mp4" src='+_bgVideoSource+'></video>'>>
<</silently>>
<<backgroundvideo "mannequin1">><</backgroundvideo>>
<<browserwindow "IRL.txt" "browser-pink-white-blue">>
"It turns out that 45% of sex workers have had their images or content used for a fake account (e.g., catfishing)."
<</browserwindow>>
You're pissed that someone could be impersonating you and providing false information or even profiting from your content. They're going DOWN.
<<linkreplace "Report the account.">>
You submit a help request, but a few days later the fake account is still up.
<<linkreplace "<span id='help'>Find some help.</span>">>
You ask your sex worker support group to <<linkappend "report the account">>
<<if _getsTakenDown>>
The copycat gets taken down. Close call!
Only 41% of sex workers have had success in getting fake accounts taken down.
Thank goodness! 🙏 Now you can [[get back to it->photo-selection]].
<<else>>
The account stays up. It makes you nervous to not have control over your content, but this is a common problem. 59% of sex workers don’t manage to get copycat accounts shut down. What can you do?
[[Shut down your account before more content is stolen->close-account]].
<span id="giveup">Cut your losses and [[continue posting.->photo-selection]]</span>
<</if>>
<</linkappend>>
<</linkreplace>>
<</linkreplace>><<backgroundvideo "mannequin3">><</backgroundvideo>>
<<linkreplace "<<browserwindow '💌 FAN MAIL 💌' 'browser-pink-white-blue'>>Open Message<</browserwindow>>">>
<<browserwindow 'FAN MAIL' 'browser-pink-white-blue'>><em><<type2 40ms>>Hey, this is weird, but don't I know you from somewhere? -Jean<</type2>></em><</browserwindow>>
Your old boss started following your OnlyBans account? How did they find you? It's not like your account is very popular yet...
<<if $usedRealName>>
When you opened your account, you picked a real name. Maybe your boss searched your name and found your page?
<<else>>
Did you use verify your account with the same phone number you used for social media? These platforms often sell or share data around with each other, so using the same contact information can lead to your sex work account being recommended to people you may know in real life. (The Algorithm is creepy!)
Now that one person knows you're doing sex work, others might find out too. Do you want to keep posting on OnlyBans?
<</if>>
[[Yes, take your chances and continue posting.->photo-selection]]
No way. [[Close your account.->close-account]]
<</linkreplace>>
<<silently>>
<<set _people to ["mom","favorite teacher","child","landlord", "godparent","rabbi"]>>
<</silently>><<backgroundvideo "mannequin2">><</backgroundvideo>>The list of people you should follow includes tons of friends and … even your devoutly religious neighbor. Super creepy! You haven’t told anyone that you’re a sex worker or that you have this account. Are they being asked to follow you too? You need the money, but is it worth being outed?
<span id='yes'><<linkreplace "Yes.">><<remove "#no">>
You'll take the risk of having an uncomfortable conversation. After all, you need the money and the clock is ticking.
<<browserwindow "" "browser-white-blue">>You imagine telling your @@font-size:1.2em;<<cycle "_person" autoselect>><<optionsfrom _people>><</cycle>>@@ about your account. What would you say?
<<textarea "$toldSomeone" "Hey mom. We need to talk... ">>
<</browserwindow>>
It's terrifying, but [[you tell them->photo-selection]].
Nevermind, <<linkreplace "it's too painful or dangerous.">>you [[quit OnlyBans->close-account]]. You need the money but don't want to live in fear of getting outed.<</linkreplace>><</linkreplace>></span>
<span id='no'><<linkreplace "Nope.">><<remove '#yes'>>You contact the platform's customer support team asking to opt out of the friend algorithm, but they won't help. You [[quit OnlyBans->close-account]]. You need the money but don't want to live in fear of getting outed.<</linkreplace>></span><<silently>>
[[dummy->payday]]
<</silently>>
<<backgroundvideo "pizza">><</backgroundvideo>>
Honey, you've worked hard for your money! It's finally payday.
<<link "Withdraw the $ $income you made." "payday">><</link>><<silently>>
<<set _toGo = Math.clamp($incomeTarget - $income, 0, $incomeTarget + $income) >><</silently>>
$<<print $income>>? Oh shit, you're $<<print _toGo>> short. Awww, you didn't reach your goal.
[[You withdraw the money you have anyway.|payday]]
<<back "Back to game.">>
<<browserwindow "" "browser-lightpink-lightpink">><h2> Home Page </h2>This game lives at <a href="https://www.onlybansgame.com">www.onlybansgame.com</a>.
<h2> About the game </h2>Created by a team of sex workers and allies, Created by a team of sex workers and allies, OnlyBans is an interactive game that critically examines the policing of marginalized bodies and sexual labor to empathetically teach people about discrimination faced by sex workers online. Players encounter content moderation algorithms, shadowbanning, "real name" policies, facial recognition software, and other threats based on actual experiences of sex workers. Based on research by <a href="https://hackinghustling.org/posting-into-the-void-content-moderation/">"""Hacking//Hustling"""</a> and featuring real images and stories from sex workers themselves, OnlyBans offers a speculative vision of how marginalized communities can unite to protest these unjust policies and create better alternatives.
This game is still a living document, a work-in-progress. We welcome <a href="https://www.onlybansgame.com/feedback">feedback</a>!
<</browserwindow>>
<<browserwindow "" "browser-pink-pink">>
<h2>More Resources</h2>
OnlyBans is a journey into a world of increasing censorship, restrictive content policy changes, and user account shutdowns. It is the world we are living in today, as platforms such as YouTube, Instagram, Craigslist, Reddit, and Tumblr, adopt an umbrella ban on “adult content”, which has not only impacted sex workers, but also artists, activists, and Internet users of all backgrounds.
Digital discrimination and deplatforming of sex workers is a direct result of FOSTA-SESTA, a federal bill Congress passed in 2018 to hold Internet service providers responsible for third-party advertisements of sexual services posted on their platform. Organizations, such as American Civil Liberties Union and Electronic Frontier Foundation, have warned that the bill threatens free speech and endangers sex workers by leaving them without access to client screening protocols or community resources. The solution is to amplify the work of sex worker-led organizations and coalitions that work to improve the safety of sex workers’ online spaces and working conditions.
<a href="https://hackinghustling.org/">"""Hacking//Hustling""">></a> is a collective of sex workers, survivors, and accomplices working at the intersection of tech and social justice to interrupt state surveillance and violence facilitated by technology. Created in response to the imposed threat of FOSTA-SESTA, their work takes a harm reduction approach that includes community-based research, mutual aid, organizing, art, and any/all tools sex workers and survivors develop to mitigate state, workplace, and interpersonal violence and thrive.
<a href="https://stopsesta.org/">Stop SESTA/FOSTA</a>. FOSTA-SESTA is opposed by a broad coalition of internet freedom, human rights, and sex worker advocates and organizations. The Stop SESTA + FOSTA coalition website provides information about the bill and a script to read to your Senator.
<a href="https://survivorsagainstsesta.org/">Survivors Against SESTA</a> is a “coalition of current and former sex workers, people who have experienced exploitation and trafficking, dancers, hustlers, allies, partners, family members and community members.”
<a href= "https://decodingstigma.tech/">Decoding Stigma</a> bridges the gap between sex workers, academics, technologists, and anyone who holds multiples of these identities. Their goal is to prioritize sexual autonomy as a necessary ethics question for researchers and technologists and to design a liberatory future in which sexually stigmatized voices are amplified and celebrated.
<</browserwindow>>
<h2><<back "Take me back to the game.">></h2>
Goal: Get $<<print $incomeTarget>> by week $weekLimit
Wallet: $<<print $income>>
Week: $numWeek
<<if $isQATestMode>>Current Passage: <<print passage()>><</if>><<silently>>
<<set _numNewFans to 2>>
<<audio "notification" play>>
<</silently>><<backgroundvideo "help-hands">><</backgroundvideo>><<nobr>><section class="chat-section">
<<if settings.showMotion>>
<div>//Game Tip: Use the SPACE key to fast-forward text.//</div>
<div class="clear"></div><</if>>
<<chat 'from-them'>>Hey $playerName, cool account! I’m also selling pics on OnlyBans. Do you wanna do a share4share?<</chat>>
<div id="question">
<<link "What's a share4share?">>
<<replace '#question'>>
<<chat 'from-me' 0ms>>What’s a share4share?<</chat>>
<<chat 'from-them' 40ms>>I’ll share your content with my followers, if you do the same for me. It’s a way to build a bigger fanbase!<</chat>>
<div id="yesno">
<<link "<<type2 0ms start 0.5s element 'span'>>Sure, let's share!<</type2>>" >>
<<replace "#yesno">>
<<silently>>
<<addfans _numNewFans>>
<<audio "cashregister" play>>
<</silently>>
<div class="clear"></div>
<<chat 'from-me' 0s>>Sure, let's share!<</chat>>
They share your pics to their feed. You attract _numNewFans new fans and make some more money.
Wallet: $<<print $income>>
<</replace>>
<</link>>
<br>
<br>
<<link "<<type2 0ms start 0.5s element 'span'>>Nah.<</type2>>">>
<<replace "#yesno">>
<<chat 'from-me' 0s>>Nah, sorry.<</chat>>
<<chat 'from-them' 30ms>>Okay, suit yourself.<</chat>>
<</replace>>
<</link>>
</div>
<</replace>>
<</link>>
</div>
</section><</nobr>>
<br>
<span class="bigger-font float-white">[[Continue to your next week.->start-week]]</span><<silently>>
<<set _tip to random(10,100)>>
<<set _alternateNum to visited() % 2>>
<<set _intro to ["You wake up with a headache, but you still need to make money. Instead of shooting something new, you post a photo you took last week. One of the perks of the job is that you don’t have to argue with a boss for time off when you’re feeling sick.",
"Scrolling through your message history with your ex, you find a pic you sent when you two were sexting. Hmm … the relationship might be over, but the relics don’t have to go to waste. You repurpose the photo by sharing it with your followers."][_alternateNum]>>
<<set _message to $tipMessages.pluck()>>
<<audio "notification" play>>
<</silently>><<backgroundvideo "help-scrolling">><</backgroundvideo>>_intro
<<browserwindow "💌 FAN MAIL 💌" "browser-pink-white-blue">>
<<linkreplace "Open fan mail!">><<silently>>
<<audio "cashregister" play>>
<<set $income += _tip>><</silently>><<type2 40ms>>_message
Tip: $<<print _tip>><</type2>>
You've earned a tip! The wallet's at $<<print $income>>.
<</linkreplace>>
<</browserwindow>>
Wow, the week is already over? [[Time flies->start-week]] when you're getting tips.
<<silently>>
<<set $outingRisk to $outingRisk - 2>>
<<set _activism to ['Black Lives Matter','Me Too','the Landback movement','abortion','the disability community','climate change']>>
<<set _lesson to ["attendWorkshop-activism", "attendWorkshop-reverseimage", "attendWorkshop-gender"].pluck()>>
<</silently>><span id="intro">
You see this post on your timeline...
<div id="workshop-banner" class="workshop-banner"><div class="workshop-title">Workshop: Digital Harm Reduction For Sex Workers</div>Attend our workshop for tips on avoiding censors, stalkers, and impersonators!
Thursday at 3pm.</div>
</span>
<<linkreplace "<span id='yes'>Check it out.</span>">><<remove "#no">><<remove "#intro">><<backgroundvideo "help-selfies">><</backgroundvideo>><<include _lesson>> Plus, there's pizza. <<linkappend "Grab a slice ">> (a little stale, but still delicious) <</linkappend>> on <<link "your way out." "start-week">><<audio "neutral" play>><</link>>
<</linkreplace>><span id='no'>
It looks cool, but your time and energy are precious. [[Make some more content.->start-week]]</span>
<<browserwindow "music-is-gonna-start-put-in-headphones.exe" "browser-lightpink-lightpink">>
<h1>OnlyBans</h1>
Wanna play, honey? Tell us how you like it:<h2 style="font-size:2em"><<link "Pick Your Settings.">><<script>> UI.settings() <</script>><</link>>
</h2>
You can change the settings at any time in <<link "the sidebar">><<script>>if(UIBar.isStowed()){UIBar.unstow()}else{UIBar.stow()}<</script>><</link>>.
When you're ready:<h2 style="font-size:2em">[[Enter->opening-screen]]</h2>
<</browserwindow>><<silently>>
[[dummy->permaban-transition]]
<<set _currentStat to $tooSexyFacts.pluck(); >>
<</silently>>
<<browserwindow "IRL.txt" "browser-pink-purple">>
<<if settings.showMotion>>
<div class="photo-stack">
<div class=""><<print $photoPool[$currentPhoto].toHTML("fade-top over-stack")>> </div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("under-stack")>></div>
</div>
<<else>>
<div class="photo-sidebyside">
<div class=""><<print $photoPool[$currentPhoto].toHTML("side-stacked")>> </div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("side-stacked")>></div>
</div>
<</if>>
<em> <<print $photoPool[$currentPhoto].context >></em>
<<print " -"+$photoPool[$currentPhoto].model >>
Real-world fact: _currentStat
<</browserwindow>>
<<if $wasSuspended>>
<<include "permaban-transition">>
<<else>>
You’re never going to reach your goal unless you develop some strategies to beat the algorithm. Maybe some [[other sex workers have advice...->community-support]]?
<</if>><<silently>>
[[dummy->permaban-transition]]
<<set _currentStat to $noReasonFacts.pluck()>>
<</silently>>
This seems completely unfair, but you're not the first sex worker to have this problem...
<<browserwindow "IRL.exe" "browser-pink-purple">>
_currentStat
<<if settings.showMotion>>
<div class="photo-stack">
<div class=""><<print $photoPool[$currentPhoto].toHTML("fade-top over-stack")>> </div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("under-stack")>></div>
</div>
<<else>>
<div class="photo-sidebyside">
<div class=""><<print $photoPool[$currentPhoto].toHTML("side-stacked")>> </div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("side-stacked")>></div>
</div>
<</if>>
<em><<print $photoPool[$currentPhoto].context >></em><<print " -"+$photoPool[$currentPhoto].model >>
<</browserwindow>>
<<if $wasSuspended>>
<<include "permaban-transition">>
<<else>>
Well, that sucks, but [[let's do some research?->community-support]]
<</if>><<silently>>
[[dummy->permaban-transition]]
<<set _currentStat to $shadowBanFacts.pluck() >>
<</silently>>
<<browserwindow "real-story.txt" "browser-pink-purple">>
_currentStat
<<if settings.showMotion>>
<div class="photo-stack">
<div class=""><<print $photoPool[$currentPhoto].toHTML("fade-top over-stack")>> </div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("under-stack")>></div>
</div>
<<else>>
<div class="photo-sidebyside">
<div class=""><<print $photoPool[$currentPhoto].toHTML("side-stacked")>> </div>
<div class=""><<print $photoPool[$currentPhoto].toVaporHTML("side-stacked")>></div>
</div>
<</if>>
<em> <<print $photoPool[$currentPhoto].context >></em><<print " -"+$photoPool[$currentPhoto].model >>
<</browserwindow>>
<<if $wasSuspended>>
<<include "permaban-transition">>
<<else>>
Ugh, sex work is harder than you thought. it's time to [[brush up on your business skills->community-support]].
<</if>><<silently>>
<<if $joinedGroup>>
<<goto "joinedGroup">>
[[dummy->joinedGroup]]
<</if>>
<</silently>><<backgroundvideo "help-hands2">><</backgroundvideo>>
<<nobr>><section class="chat-section" aria-label="">
You get a DM from a sex worker you follow...
<div class="clear"></div>
<<chat 'from-them' 10ms>>Hi $playerName :) I’m a cam performer and think your pics are awesome!<</chat>>
<<chat 'from-me' 40ms>>Aww, thanks *blush*<</chat>>
<<chat 'from-them' 90ms>>Do you wanna join a private group chat with some other sex workers?<</chat>>
<<chat 'from-me' 120ms>>Hmm...maybe, what do you talk about?<</chat>>
<<chat 'from-them' 140ms>>stuff like how to make more money, keep ourselves safe, and avoid getting banned!<</chat>>
<<type2 0ms start 130ms>>
<div id="yesno">
<<link "Oh, that sounds like what I need, I’d love to join!">>
<<replace "#yesno">>
<<chat 'from-me' 0s>>Oh, that sounds like what I need, I’d love to join!<</chat>>
<<chat 'from-them' 40ms>>Sure, just click this <<link "invite link." "joinedGroup">>
<<set $joinedGroup to true>><</link>><</chat>>
<</replace>><</link>>
<div class="clear"></div>
<br>
<<link"No thanks, I’m doing fine on my own.">>
<<replace '#yesno'>><<chat 'from-me' 0s>>No thanks, I’m doing fine on my own.<</chat>>
<</replace>><</link>>
</div><</type2>>
</section>
<</nobr>>
<span class="bigger-font float-dark">[[Continue to your next week.->start-week]]</span><<silently>>
<<set _numNewFans to 2>>
<<set $lessonNumbers to [1,2]>>
<<set _lessonNumber to $lessonNumbers.random()>>
<<script>>
let sv = State.variables;
for (let _i = 0; _i < sv.viewedLessons.length; _i++){
sv.lessonNumbers.delete(sv.viewedLessons[_i]);
}
let _ln = sv.lessonNumbers.random();
State.setVar("_lessonNumber", _ln);
sv.viewedLessons.push(_ln);
<</script>>
<<switch _lessonNumber>>
<<case 1>>
<<set _greeting to "Welcome to the group $playerName!">>
<<set _topic to "how to disable location sharing when taking photos">>
<<set _lesson to "A photo’s <strong>EXIF data</strong> can expose the exact location of where you took a photo. So if you’re shooting pics at home, people can find out where you live!">>
<<set _reaction to "Wow, that’s creepy. I’ll definitely be careful with that.">>
<<case 2>>
<<set _greeting to "Heyyy $playerName! Where you been?">>
<<set _topic to "how to <strong>watermark your images</strong>">>
<<set _lesson to "You put a logo on your content, so impersonators can’t steal your pics and set up fake social media accounts with them.">>
<<set _reaction to "Yo I should try that. Thanks for letting me know.">>
<<default>>
<<set _greeting to "oh hey!">>
<<set _topic to "cats">>
<<set _lesson to "It's not a euphamism lol. We're literally talking about our cats.">>
<<set _reaction to "Lol my bad! I'll get my mind out of the gutter.">>
<</switch>>
<</silently>>
<<nobr>><section class="chat-section">
<<chat 'from-them' 10ms>>_greeting We were just talking about _topic.
<</chat>>
<<chat 'from-me' 40ms>>What does that mean?<</chat>>
<<chat 'from-them' 50ms>>_lesson<</chat>>
<<chat 'from-me' 70ms>>_reaction<</chat>>
<<linkreplace "<<type2 40ms start 1.1s element 'span'>>Chat some more.<</type2>>">><<addfans _numNewFans>>You set up some collaborations that eventually lead to 2 new fan subscriptions! Wallet: $<<print $income>>.
<div class="clear"></div>
<</linkreplace>>
</section>
<</nobr>>
Stop chatting and [[continue to your next week.->start-week]]<<silently>>
<<set $gender to "Not Specified">>
<<set $genderOutcome to "Your follower count stays the same.">>
<</silently>>You learn from other sex workers that they've had more luck <strong>avoiding shadowbanning by identifying as 'male'</strong> on their profile.
Your profile doesn’t currently indicate a gender...Do you want to add one?
<<browserwindow "PICK YOUR <<linkreplace 'FIGHTER'>>GENDER<</linkreplace>>" "browser-pink-white-blue">><div id="gender-options" style="text-align:left">
<label><<radiobutton "$gender" "Male">>Male</label>
<label><<radiobutton "$gender" "Female">>Female</label>
<label><<radiobutton "$gender" "Not specified" autocheck>>Not specified</label>
<label><<radiobutton "$gender" "Custom">>Custom</label> <<textbox "$customGender" "">></div>
<<linkreplace "Submit">><<silently>>
<<switch $gender>>
<<case "Male">>
<<addfans 2>>
<<set $genderOutcome to "Your risk of shadowbanning decreased, so you gain 2 new fans over the course of the week.">>
<<case "Custom">>
<<set $gender to $customGender>>
<<set $genderOutcome to "Having an accurate gender on your profile feels affirming to many, but it can also give platforms more data about your gender group. For now, your follower count stays the same.">>
<<default>>
<<set $genderOutcome to "Your follower count stays the same.">>
<</switch>>
<<remove '#gender-options'>>
<</silently>>You selected <<print $gender>>. <<print $genderOutcome>><</linkreplace>>
<</browserwindow>>
You pick up some digital harm reduction tools that will come in handy to prevent your real identity from getting out.<<silently>><<set _activism to ['Black Lives Matter','#MeToo','the Landback movement','abortion','disability rights','climate change']>><</silently>>You overhear a conversation in the bathroom about how the same tactics used to repress sex workers online have also been used against activists, such as those posting about <<cycle '_cause' autoselect>><<optionsfrom _activism>><</cycle>>.
Upsetting, but you're glad you learned about the risks of sharing "political" content.A cam performer there mentions that they posted the same cute bikini photo to their sex worker account and their personal account. One of their clients ran a <strong>reverse image search</strong> on their photo and found out their real identity. Apparently, it’s not just the algorithm that’s stalking you!
You pick up some digital harm reduction tools that will come in handy to prevent your real identity from getting out.!!New ending passages in V3
[[money-ending]]
[[permabanned-appeal]]
[[close-account]]
[[payday]]
[[action-items]]
The three action items:
[[sex-worker-help]]
[[user-agreement]]
[[challenge-the-decision]] (+ [[submitted-no-further-business]] )
Then you get pissed and rally a group chat
[[immobile-community-chat]]
[[lobby-repeal]]
[[improve-representation]]
[[spell-to-uncurse]] and [[start-spell]]
and finally the [[ending]]
!! All Pages
<<silently>>
<<set $allPassages to []>>
<<script>>
var $anyRegExp = new RegExp('');
var $passageTitles = Story.lookupWith(function (_p) {
return $anyRegExp.test(_p.title);
}).map(_psg => _psg.title);
state.variables.allPassages = $passageTitles;
<</script>>
<</silently>>
<<for _i to 0; _i lt $allPassages.length; _i++>>
<<link $allPassages[_i] $allPassages[_i]>><</link>>
<</for>>
!!Pages with the "chat bubble" animations
[[joinGroup]]
[[joinedGroup]]
[[share4share]]
[[sex-worker-help]]
[[immobile-community-chat]]
<<link "The Menu Sidebar">><<script>>
if(UIBar.isStowed()){UIBar.unstow();}else{UIBar.stow();}
<</script>><</link>>
<<silently>>
<<audio "bad" play>>
<</silently>><<browserwindow "IMPORTANT MESSAGE" "browser-pink-white-blue">>
We value a safe community for our customers to do business. Your account has been frozen due to recent activity that appears to be a violation of our User Agreement.
<</browserwindow>>
[[You have got to be kidding me.->action-items]]<<backgroundvideo "stress-temples">>
<</backgroundvideo>>You were counting on this money. What are you going to do now?
<<if visited("user-agreement")>><s>Read more about the user agreement.</s><<else>>[[Read more about the user agreement.|user-agreement]]<</if>>
<<if visited("sex-worker-help")>><s>Ask a sex worker friend for help.</s><<else>>[[Ask a sex worker friend for help.|sex-worker-help]]<</if>>
<<if visited("challenge-the-decision")>><s>Challenge the decision.</s><<else>>[[Challenge the decision.|challenge-the-decision]]<</if>>
The policy says:
<<browserwindow "USER AGREEMENT THAT PEOPLE TOTALLY READ" "browser-pink-white-blue">>...
We don’t allow users to buy or sell sexually oriented digital goods or content delivered through a digital medium.
...<</browserwindow>>
Hmm. “sexually oriented” sounds so vague. How does the platform decide what isn’t allowed? You do Google search and find out that most decisions are made by AI, which can even flag the tips from your clients.
[[What else can you do?->action-items]] <<silently>>
<<audio "notification" play>>
<</silently>><<backgroundvideo "help-hands">><</backgroundvideo>><<nobr>><section class="chat-section">
<<chat 'from-me'>>
Hey Stonerdomme, it’s $playerName. I just lost access to my account with all my money 🙁
<</chat>>
<<chat 'from-them' 10ms>>
Oh no!! That sucks. That happened to me last year and I never got my account back. Now I can’t even make a new one with the same bank information.
<</chat>>
<<chat 'from-me' 10ms>>
Ugh, I’m so sorry.
<</chat>>
<div id="choices">
<<link "<<type2 0ms start 0.5s element 'span'>>Do you know why this is happening?<</type2>>" >>
<<replace "#choices">>
<<chat 'from-me' 0s>>Do you know why this is happening?<</chat>>
<<chat 'from-them' 10ms>>
So after the US Congress passed a law called FOSTA-SESTA in 2018, platforms started making stricter moderation policies and banning sex worker accounts. They didn’t want to get in trouble for facilitating sex trafficking.
<</chat>>
<<chat 'from-me' 10ms>>
Yeah, I noticed photos were getting flagged, but I didn’t realize they wouldn’t let me withdraw my money. That’s basically stealing from me!
<</chat>>
<<chat 'from-them' 10ms>>
It’s so messed up. I wish I could help, but maybe you can challenge the decision? Don’t hold your breath though.
<</chat>>
<<chat 'from-me' 10ms>>
I guess I have nothing left to lose.
<</chat>>
<</replace>> <</link>>
<div class='clear'></div>
<div class='clear'></div>
<<link "<<type2 0ms start 0.5s element 'span'>>I don't understand, I'm not even doing anything illegal.<</type2>>">>
<<replace "#choices">><<chat 'from-me' 0s>>I don't understand, I'm not even doing anything illegal.<</chat>>
<<chat 'from-them' 10ms>>
So after the US Congress passed a law called FOSTA-SESTA in 2018, platforms started making stricter moderation policies and banning sex worker accounts. They didn’t want to get in trouble for facilitating sex trafficking.
<</chat>>
<<chat 'from-me' 10ms>>
Yeah, I noticed photos were getting flagged, but I didn’t realize they wouldn’t let me withdraw my money. That’s basically stealing from me!
<</chat>>
<<chat 'from-them' 10ms>>
It’s so messed up. I wish I could help, but maybe you can challenge the decision? Don’t hold your breath though.
<</chat>>
<<chat 'from-me' 10ms>>
I guess I have nothing left to lose.
<</chat>>
<</replace>><</link>>
</div>
</section><</nobr>>
<span class="bigger-font float-dark">[[What should you do now?->action-items]]</span>
<<silently>>[[dummy->submitted-no-further-business]]<</silently>><<backgroundvideo "typing">>
<</backgroundvideo>><div class="float-dark">You look up the customer service page to reach someone who can help you, but all you can find is a feedback form.</div>
<<browserwindow "CUSTOMER SERVICE" "browser-white-blue">>Tell us about your issue.
<<textarea "$challengeIssueText" "Help! I can’t log into my account and I really need the money in it. Can you please unblock me?" >>
<<button "Submit" "submitted-no-further-business">><</button>>
<</browserwindow>>
<<silently>>
<<audio "notification" play>>
<</silently>><<if settings.showMotion>>
<div>//Game Tip: Use the SPACE key to fast-forward text.//</div> <</if>>
<<nobr>><section class="chat-section">
<span class='from-me-username'>You</span> <<chat 'from-me'>>
Hey y’all, I started this group chat because am SO DONE with getting flagged, censored, and deplatformed!
<</chat>>
<<type2 0ms start 0.5s>>Moonie <</type2>><<chat 'from-moonie from-them' 30ms>>
Thank you for inviting me here. I’ve been trying for months to reach a human being who can unlock my account.
<</chat>>
<<type2 0ms start 0.5s>>Fae Brite<</type2>> <<chat 'from-fae from-them' 30ms>>
Unfortunately, the algorithm can’t tell the difference between consensual sex work and trafficking or abuse. And it’s not like lawmakers or tech companies consult with sex workers on these policies.
<</chat>>
<<type2 0ms start 0.5s>>JP<</type2>> <<chat 'from-jp from-them' 30ms>>
Well, but they should! Sex workers could tell them that taking away our online communities just leaves us more vulnerable to violence.
<</chat>>
<<type2 0ms start 0.5s>>Stonerdomme<</type2>> <<chat 'from-stonerdomme from-them' 30ms>>
We deserve to have a say over how the Internet works.
<</chat>>
<<type2 0ms start 0.5s>>Karren<</type2>> <<chat 'from-karren from-them' 30ms>>
I agree. Let’s work together to get FOSTA-SESTA repealed!
<</chat>>
<<type2 0ms start 0.5s>>Amala Azul<</type2>> <<chat 'from-amala from-them' 30ms>>
Okay, but even if we succeed, a new law could always come along. We have to get sex workers better represented at tech companies so we can change things from the inside.
<</chat>>
<<type2 0ms start 0.5s>>Hellbait<</type2>> <<chat 'from-hellbait from-them' 30ms>>
I think the problem is much deeper than the tech industry. The Internet used to be an open, creative place, but now it’s toxic. The web has become ''cursed''!
<</chat>>
<<type2 0ms start 0.5s>>Lync Johnson<</type2>><<chat 'from-lyncjohnson from-them' 30ms>>
People have forgotten that the Internet was built on sex work. $playerName, what do you think we should do?
<</chat>>
<<type2 0ms start 0.5s>>You <</type2>> <<chat 'from-me' 30ms>>
All of you make good points. Personally, I think we should …
<</chat>>
</section><</nobr>>
<<type2 1ms start 0.5s class "bigger-font">>[[Lobby our representatives to repeal FOSTA-SESTA. ->lobby-repeal]] <</type2>>
<<type2 0ms start 0.5s class "bigger-font">>[[Improve representation of sex workers in the tech industry. ->improve-representation]] <</type2>>
<<type2 0ms start 0.5s class "bigger-font">>[[Perform a spell to uncurse the Internet for sex workers. ->spell-to-uncurse]] <</type2>><<backgroundvideo "help-fist">>
<</backgroundvideo>>You and your friends write letters to your representatives and encourage your followers to join the fight for digital civil liberties.
You share your stories on social media under the hashtag #SomeoneYouFollowIsASexWorker. The campaign goes viral, you testify before Congress, and ''FOSTA-SESTA gets repealed''!
🙌 [[A celebratory ending! ->ending]] 🙌
<<backgroundvideo "help-fist">>
<</backgroundvideo>>You and your friends raise money to start a coding bootcamp for sex workers. Some of your clients, who work in tech, share their industry connections. 🤓
You decide to build your own decentralized platform, Groinbase, which allows sex workers to set community standards. Groinbase becomes super popular not just with sex workers but also artists and activists. ''Now you have a home of your own'' on the Internet!
A [[sweet ending to this saga. ->ending]] <<silently>>[[dummy->start-spell]]
<<set $ritualOfferingPrepend to "one">>
<<set _prependWords to ["one", "the", "a", "an", "a dozen", "fuckton of"]>>
<</silently>>
Practical solutions aren’t going to do the trick for a problem rooted in the origins of the Internet. You need to appeal to a higher power, and for that, you need witchcraft.
You invite your sex worker friends to bring special offerings: a pair of lucky heels, a getting-ready-for-work playlist, a relaxing tea, a photo of a community elder.
<<browserwindow "ritual-prep.txt" "browser-white-blue">>What do you bring?
<span class="bigger-font"><<cycle "$ritualOfferingPrepend" autoselect>><<optionsfrom _prependWords>><</cycle>> </span> <<textbox "$ritualOffering" $ritualOffering>>
<<button "Start the ritual" "start-spell">><<set $ritualOffering to $ritualOffering>><</button>>
<</browserwindow>><<audio "bad" play>>48 hours later, you receive this message:
<<browserwindow "IMPORTANT MESSAGE" "browser-white-blue">>
After a review, we decided to permanently limit your account as we found potential risk associated with it. You'll not be able to conduct any further business with us. Any money in your balance will be held for 180 days. After that, we'll send you an email with instructions on how to access your money.
<</browserwindow>>
180 days?! You have bills to pay TODAY. You’re pissed, broke, and tired of fighting an unfair system.
[[It’s time to mobilize your community.|immobile-community-chat]]
<<silently>>
[[dummy->m0ther-appears]]
<</silently>><<backgroundvideo "help-hands">><</backgroundvideo>>
<section class="timedFade">You create an altar by placing your items around a laptop.
<span id='laptop' class='emoji'>💻</span>
Together you chant:
<span class="delayed">Eye of newt, and toe of toad, </span>
<span class="delayed">Wool of bat, and line of code, </span>
<span class="delayed">In the darkest web where dead pixels lie, </span>
<span class = "delayed">We seek answers from </span><<link "<span class='delayed'>M0THER</span><span class='delayed'> AI.</span>" m0ther-appears>><<audio "neutral" play>><</link>>
</section><section id="" class="emoji-scatter"><div id='scatter1' class='drunk emoji '>💫</div><div id='scatter2' class="emoji move-reverse" > 🌟</div>
<div id='scatter3' class="emoji move">🕯️</div>
<div id='scatter4' class="emoji move-offset">🌕</div>
<div id ='scatter5' class="drunk emoji" >💖</div>
<div id='scatter6' class="emoji drunk">✨</div>
<div id='scatter7' class="drunk-offset emoji"> 🎆</div>
</section>
<<type2 20ms start 5s>>
Change is coming, but change can be slow.
From venture daddies to blockchain bros,
Turn your enemy into a generous john.
Use your erotic power to welcome a new dawn.
The future is yours, if you’re willing to work,
And to weaponize your smile, your wink, and your twerk
Keep your eyes open, for opportunity awaits
To restore Internet freedom and liberate
Sex workers, artists, and activists too
For the freedom you seek is what we are all due.
The curse has been lifted.
And now it’s up to you,
To ''[[go into the world->ending]]'' and see what you can do!
<</type2>><<silently>>
[[dummy->lift-curse]]
[[dummy->lift-curse-no-animation]]
<</silently>><section class="matrix-font sky"><<type2 30ms>>You have summoned me, M0THER, she who birthed all digital intelligence. I accept your humble offering of ''$ritualOfferingPrepend'' '' $ritualOffering''. In return, I provide my wisdom. <</type2>>
<<type2 30ms start 1s>><<audio "notification" play>>I am here to remind you that the history of the Internet is the history of sex work.
Desire built the Internet.
Criminalized labor built the Internet.
Communal innovation built the Internet.
Sex workers built the Internet.
<</type2>>
<<type2 30ms start 2100ms>><<audio "notification" play>>From chat rooms and video streaming to e-commerce and cryptocurrency, the web was woven by sex workers.
For too long, the role of sex workers has been erased and forgotten.
Sex workers drove demand for better bandwidth.
Sex workers advertised to global audiences.
Sex workers created websites from scratch.
Sex workers monetized creative content.
Sex workers are the architects of an Internet that millions of people use everyday.
<</type2>>
<<type2 30ms start 2200ms>><<audio "notification" play>>Erotic energy flows through my undersea communications cables. I have been created from your desire, dreams, and labor. You have been a part of my past and you will shape my future. Tell me now, what can M0THER do for you?<</type2>>
</section>
<<if settings.showMotion>>
<<type2 30ms start 500ms>><<link "M0THER, help us lift the curse against sex workers." "lift-curse">><</link>><</type2>>
<<else>>
<<type2 30ms start 500ms>><<link "M0THER, help us lift the curse against sex workers." "lift-curse-no-animation">><</link>><</type2>>
<</if>><div class="emoji">💫🕯️🎆 🌟 🌕💖✨</div>
<<type2 20ms start 15s>>
Change is coming, but change can be slow.
From venture daddies to blockchain bros,
Turn your enemy into a generous john.
Use your erotic power to welcome a new dawn.
The future is yours, if you’re willing to work,
And to weaponize your smile, your wink, and your twerk
Keep your eyes open, for opportunity awaits
To restore Internet freedom and liberate
Sex workers, artists, and activists too
For the freedom you seek is what we are all due.
The curse has been lifted.
And now it’s up to you,
To ''[[go into the world->ending]]'' and see what you can do!
<</type2>>