From 7c297068967be13a10169c381c841a220adf962c Mon Sep 17 00:00:00 2001 From: stranger <stranger.things@gmx.net> Date: Fri, 13 Oct 2023 09:34:23 +0000 Subject: [PATCH] Merge transmod into master --- CHANGELOG_TRANSMOD.md | 179 +++++++ README.md | 211 +++----- game/01-config/start.twee | 2 +- game/01-config/sugarcubeConfig.js | 2 + game/04-Variables/feats.js | 16 + game/04-Variables/variables-start2.twee | 82 ++-- .../04-Variables/variables-versionUpdate.twee | 57 ++- game/base-clothing/captiontext.twee | 28 +- game/base-clothing/clothing-upper.js | 46 +- game/base-clothing/init.twee | 124 ++--- game/base-clothing/wardrobes.twee | 6 + game/base-combat/end.twee | 56 ++- game/base-combat/init.twee | 114 ++--- game/base-combat/speech.twee | 21 +- game/base-system/attitudes.twee | 26 +- game/base-system/bodywriting-objects.twee | 124 +++++ game/base-system/bodywriting.twee | 0 game/base-system/caption.twee | 6 +- game/base-system/effects.twee | 17 +- game/base-system/feats.twee | 16 +- game/base-system/images.twee | 4 + game/base-system/mirror.twee | 32 +- .../base-system/overlays/characteristics.twee | 6 +- game/base-system/overlays/social.twee | 21 +- game/base-system/overlays/traits.twee | 24 +- game/base-system/settings.twee | 37 +- game/base-system/text.twee | 8 + game/base-system/time/time.js | 10 +- game/base-system/transformations.twee | 4 +- game/base-system/widgets.js | 4 +- game/base-system/widgets.twee | 199 +++++++- .../loc-lake/ivory/schism.twee | 18 +- game/overworld-town/loc-cafe/main.twee | 2 + .../overworld-town/loc-danube-homes/work.twee | 2 +- game/overworld-town/loc-domus-homes/nude.twee | 15 +- game/overworld-town/loc-domus-homes/work.twee | 13 +- game/overworld-town/loc-home/main.twee | 13 +- game/overworld-town/loc-home/mirror.twee | 123 ++++- game/overworld-town/loc-hospital/main.twee | 275 ++++++++++- game/overworld-town/loc-market/widgets.twee | 2 +- game/overworld-town/loc-police/community.twee | 2 +- .../changing-rooms-boys-events.twee | 0 .../loc-school/changing-rooms-events.twee | 199 +++++++- .../changing-rooms-girls-events.twee | 0 .../loc-school/changing-rooms-widgets.twee | 30 +- .../loc-school/changing-rooms.twee | 74 ++- .../loc-school/classes/club-events.twee | 97 ++++ .../loc-school/classes/club.twee | 259 ++++++++++ game/overworld-town/loc-school/detention.twee | 2 +- game/overworld-town/loc-school/hallways.twee | 33 ++ game/overworld-town/loc-school/main.twee | 39 +- .../loc-school/maths-project.twee | 58 ++- .../loc-school/widgets-events.twee | 454 ++++++++++++++++-- game/overworld-town/loc-school/widgets.twee | 7 +- game/overworld-town/loc-street/events.twee | 17 +- game/overworld-town/loc-strip club/main.twee | 12 +- game/overworld-town/loc-temple/main.twee | 4 +- .../special-robin/halloween.twee | 17 +- game/overworld-town/special-robin/main.twee | 6 +- game/overworld-town/special-whitney/main.twee | 2 +- .../loc-sewers/old-sewers-events.twee | 2 +- game/special-masturbation/widgets.twee | 2 +- game/transmod/widgets/Transmod-Widgets.twee | 372 ++++++++++++++ img/bodywriting/womb tattoo/pubic.png | Bin 0 -> 319 bytes img/clothes/upper/transshirt/frayed.png | Bin 0 -> 1781 bytes img/clothes/upper/transshirt/full.png | Bin 0 -> 1737 bytes img/clothes/upper/transshirt/left.png | Bin 0 -> 810 bytes img/clothes/upper/transshirt/right.png | Bin 0 -> 880 bytes img/clothes/upper/transshirt/tattered.png | Bin 0 -> 1830 bytes img/clothes/upper/transshirt/torn.png | Bin 0 -> 1754 bytes img/misc/icon/clothes/transshirt.png | Bin 0 -> 965 bytes img/misc/icon/rainbow_club.png | Bin 0 -> 1257 bytes 72 files changed, 3109 insertions(+), 524 deletions(-) create mode 100644 CHANGELOG_TRANSMOD.md mode change 100755 => 100644 game/base-system/bodywriting.twee create mode 100644 game/overworld-town/loc-school/changing-rooms-boys-events.twee create mode 100644 game/overworld-town/loc-school/changing-rooms-girls-events.twee create mode 100644 game/overworld-town/loc-school/classes/club-events.twee create mode 100644 game/overworld-town/loc-school/classes/club.twee create mode 100644 game/transmod/widgets/Transmod-Widgets.twee create mode 100644 img/bodywriting/womb tattoo/pubic.png create mode 100644 img/clothes/upper/transshirt/frayed.png create mode 100644 img/clothes/upper/transshirt/full.png create mode 100644 img/clothes/upper/transshirt/left.png create mode 100644 img/clothes/upper/transshirt/right.png create mode 100644 img/clothes/upper/transshirt/tattered.png create mode 100644 img/clothes/upper/transshirt/torn.png create mode 100644 img/misc/icon/clothes/transshirt.png create mode 100644 img/misc/icon/rainbow_club.png diff --git a/CHANGELOG_TRANSMOD.md b/CHANGELOG_TRANSMOD.md new file mode 100644 index 000000000..087a349e9 --- /dev/null +++ b/CHANGELOG_TRANSMOD.md @@ -0,0 +1,179 @@ +### Most recent mainline merge is as of October 4, 2023 and includes the 0.4.2.4 update. + +### 0.4.2.7 merge and bugfix +Merged to 0.4.2.7, fixed a bug with the danube modelling job that was causing the event to break. Fixed the changes I made to the changing room code working in unintended ways. And finally, the previous changelog was incorrect. As THIS time, I have, finally and for realsies, fixed the Whitney event code. + +### 0.4.2.5 merge, changes, and bug fix +Merged to 0.4.2.5, changed so that having the nude appearance set to consider or lower will disable the feature for high reputation Trans PCs attempting to enter affirming their gender causing delinquency. Having nude gender appearance set to judge will retain this feature. Also added a few more instances of slurs to the slur toggle that I had missed on my previous iteration. Fixed Whitney hallway event code after I broke it again, attempting to update it to newer code. I have finally, for realsies this time, fixed it and shouldn't need to touch it again. + + +### 0.4.2.4 merge and bug fix +Merged to 0.4.2.4, and fixed a few bugs related to the club that were causing the player to be stuck in the void. Who knew the club room was secretly a gateway to the backrooms? And now the mod has some new features thanks to a base game update. Trans PCs will now become stressed entering the changing room that matches their sex, and have stress removed entering the one that affirms their gender. Additionally, there is now more of a drawback to having trans rep in the school. If people know you're trans you'll be expected to use the changing rooms that match your character's sex regardless of what you look like. This can be disabled by setting the nude gender appearance slider to ignore. +### 0.4.1.7 merge, school club, and magic pregnancy update +Merged to 0.4.1.7, and added a club to the school, where players can go to have a more explicitly LGBT experience in the game. Starting in June, you'll be able to find a flier for the club and be able to join, an effort undertaken by Doren. Though as have haven't made much progress on building it up, it serves as little more than a hangout for students. Perhaps with some assistance (and future updates), that may change. Also added is a womb tattoo that can allow boys and trans girls to become pregnant by magical means. It can also be applied to anyone, and adds a slight boost to the chance to become pregnant. Players can be marked with this magical tattoo by interacting with the mirror in their room when it glows with an ominous light during a blood moon. Be wary though, none know the means of removing such a thing. + +Other changes include adding a slur toggle to substitute explicit mentions of transphobic slurs with alternate transphobic dialog. As well as stopgap change to the math the game uses to calculate femininity added by a pregnant belly to make it possible to have a trans boy PC be seen as masculine while pregnant. + +Also included is some bug fixes, notably an issue with the Fox TF descriptor checking the player's gender twice instead of trans status, making the game remind trans boy PCs of their birth sex. Oops. Also fixed an issue where a setting on the starting screen after character creation was overwriting the surgery toggle settings, making it impossible for people to test the feature without using the console. + +### 0.4.1.6 merge +Merged to 0.4.1.6, did a small amount of clean up on the mod's code, bringing it more in line with the vanilla code structure. added a line for pregnant trans PCs in a scene where other students confront a known trans PC in a school event. + +### Bottom surgery beta code +Added an option to allow trans PCs to receive bottom surgery. Disabled by default on account of lacking necessary systems to properly handle it. An option to enable it exists for players willing to test out the feature can be found in the settings menu and in character creation. Once set, the toggle cannot be unset to minimize breaking things. It is highly recommended to either back up your save or create a new save for testing this out as I cannot guarantee the stability of the code that was written. + +### 0.4.0.9 merge and bug fix +Merged to 0.4.0.9, fixed an issue that was causing dialog from NPCs to break. Bit of a head scratcher, that one. + +### 0.4.0.8 merge and bug fix +Merged to 0.4.0.8, hopefully fixed the issues with the whitney bathroom event, and the changing room description should now properly gender trans PCs. Added a special alternate dialog for trans characters who have their genitals discovered by an NPC who likes what they see. Fixed issue with walking into the wrong changing room as a trans boy throwing an error. Fixed characteristics screen not correctly identifying trans characters due to new code being added. Re-fixed the gendered TF traits to properly account for trans PCs due to traits being converted to a new system. Fixed a couple mistakes I let slip by in the update process. Oops. Fixed ivory wraith being able to divine a trans PCs genitals through their clothes and misgendering them in a vision. + +### Changed price of surgery +The price for the cosmetic surgery has been reduced from £30000 to £15000 as it was deemed too expensive for what the player received as a result. + +### New Feature: Cosmetic surgery added to hospital services +Harper now has an option to change the PC's natural features via surgery. It costs £30000 and takes 4 hours to complete. It can be accessed the same way as Harper's other surgical options. +### 0.3.13.5 merge and minor bug fix +Merged to 0.3.13.4, and partially migrated transmod changing room events into the new code refactor. Will need future work to fully integrate it into the new system but it's currently functional. Fixed a bug with masturbating in chastity at high purity causing the PC to gender themselves according to their appearance, not their gender. + +### 0.3.12.4 merge bugfix and new features +Merged to 0.3.12.4, fixed the displayed trait names for the cow and demon TFs not taking into consideration the player's trans status. Also added three new bodywriting options for trans boy characters. + +### 0.3.11.2 merge and base game save compatibility +Merged to 0.3.11.2 and added the ability to allow characters created in base game saves to be trans characters. This is done in the attitudes menu and cannot be undone once selected. It's currently not possible to get the Being a Trans Boy/Girl feats on characters imported this way, nor get rid of the now useless Crossdresser trait the PC might have. +### 0.3.10.5 merge and bugfix +Merged to 0.3.10.5 and fixed a bug in Whitney's events that was causing them to not function correctly, caused by an improper merge a couple of versions ago. Oops. + +### 0.3.10.3 merge and custom bodywriting added (July 25, 2022) +Merged the mod to 0.3.10.3, and added in 7 new bodywriting options for trans PCs, 4 for trans girls, 3 for trans boys. They currently do not have any requirements to be written on the body. It is not currently possible to have these written by an NPC, nor do they have any unique reactions to them. +### Minor backend fix (November 2, 2021) +Just fixed the way line breaks are handled in feats.twee so I don't end up getting a repeat of what happened earlier. That's it. If you already have the 0.3.4.5 merge update, you don't need to bother with this one right now. + +### Mainline 0.3.4.5 merge and Feats update (November 2, 2021) +Merged in the new bugfixes from 0.3.4.4 and 0.3.4.5. While I was at it, feats.twee had a minor meltdown and I had to manually re-add feats to the new version of the file, and used the opportunity to split Being Trans apart into two separate feats: Being a Trans Boy and Being a Trans Girl. Enjoy! + +### Social panel fix (October 31, 2021) +When I merged mainline in, Git did not merge the code in social.twee properly, and it broke. It has been fixed. I think. + +### Big mainline 0.3.4.3 merge (October 31, 2021) +Didn't do anything fancy here, just directly addressed merge conflicts. Haven't adjusted any new content that needs to be adjusted for Transmod yet (and I might be a while, dealing with some mental health stuff rn, my apologies). A few scene updates I pushed to mainline dev that weren't previously in Transmod are in this update, though! + +### Bodywriting gender fix (October 12, 2021) +Someone reported that they were playing a trans girl and could pick Robin's Boyfriend for bodywriting but not Robin's Girlfriend. I went into the mirror code and fixed the code that checks player.gender_appearance to enable certain bodywriting options (as well as adding $player.trans is "t" as an OR condition), along with an error where the option labeled "Whitney's Toy" actually output "Whitney's Boyslut." + +### Gendering fix (October 6, 2021) +Someone pointed out a gendering bug in a catcall response event for extremely submissive characters. I did a quick and dirty fix. + +### Minor bug fixes (October 6, 2021) +Just fixed a couple bugs where a rogue comment escaped containment, and also some text issues in an exhibitionism scene. + +### NEW FEATURE! Setting for difficulty of being gendered contrary to genitals (September 14, 2021) +What it says on the tin. There's now a slider in the Game Settings menu that lets you set how hard it is for $player.gender_appearance to be set contrary to exposed genitals. The default setting is *possible* (which works as Transmod has normally worked up until now). The others are *impossible* (which works like vanilla, where exposed genitals will always overrule everything else when determining $player.gender_appearance) and *trivial* (exposed genitals and bulges have no effect on $player.gender_appearance, which makes sense if you're playing with a very high $dgchance or $cbchance). Also adjusted weighting of exposed penises a bit to account for the fact that there's a new smallest penis size, as well as re-calibrating it around the weighting of panty bulges and also the weighting difference between bulges and covered breasts. + +### Bugfix for a Whitney event from jgl (September 13, 2021) +Merged a bugfix for one of the Whitney toilet rule events from a contributor. Thanks jgl! + +### Minor bugfix for masc bodywriting for masc PCs, and some dialogue tweaking (September 7, 2021) +There was a bug where sometimes when viewing masculine bodywriting on a male-appearing PC, an NPC would say "As if anyone would mistake you for a boy." Also tweaked some text relating to the locker room stuff. (Why is it always the locker room stuff.) + +### Bugfix and accounting for trans PCs in events (September 1, 2021) +1. Fixed a *very, very bad* misgender in a *very* important moment from Robin, who of all people should know better! +2. Fixed a version update bug that could affect certain saves made when I fucked up removing the schoolrep.trans variable. +3. Accounted for trans PCs during some cafe exhibitionism, a certain blackmail event when working on Domus, a couple Leighton things (also crossdressing and masc herm PCs in one of them), etc. +4. Fixed some PC-self-image misgenders during a strip club random event (thanks to Wren for finding it and telling me where to look), as well as a couple other spots. +5. Fixed the logic for drive-by water-balloonings so they don't magically know your PC's birth cert has an M on it. + +### Minor backend shit and some tweaks to 0.3.3.1 dialogue (August 31, 2021) +What it says on the tin. Backend shit and some tweaks to 0.3.3.1 dialogue, really only the stuff I had to deal with in the process of resolving conflicts between 0.3.3.1 and Transmod. Also a couple minor bugsquishes related to Kylar seeing the PC's genitals for the first time and also a comment escaping containment in the hospital ER. + +### Dialogue fix/addition for Robin in Halloween event (August 28, 2021) +What it says on the tin. Just forking some dialogue in the Robin Halloween event so that Robin doesn't treat a trans PC as though they're crossdressing when Robin of all people should know better smdh. + +### Tiny bugsquish (August 26, 2021) +Just a minor bugfix for an error that might occur when protesting what clothes Leighton gives you when you ask for spare clothes from them at school that I happened to bump into while testing something else. + +### More bug squishes for changing room events, some changing room improvements, a couple other typo/bug fixes (August 25, 2021) +Wren found a couple of bugs for trans boys wandering back into the girls' changing room. I squished them, as well as a like bug on the other side of the hall for trans girls. Fixed some local typos. +Also added some candy for trans boys with higher Physique wandering into the girls' changing room, and added some dialogue for if Mason knows a trans PC's gender and rescues them from an encounter in the locker room (and also removes the +delinquency because that'd be a real dick move on Mason's part). +I also fixed a typo and did a text touchup in the scene for telling Leighton you can't wear the clothes they give you if you ask them for school clothes, and fixed a misgender-of-NPCs bug in the Asylum. + +### Squishing bugs and other minor updates (August 24, 2021) +1. Fixed a couple bugs Wren from the modding server found: a missing word in the first rank of Transgender school rep... +2. ...and a bug that could cause the sidebar to say that a trans boy's bare breasts will make people think he's a girl even if his breast size is 0 (flat) and it's actually being caused by something else. +3. Fixed a nasty save-update bug that broke the social tab when trying to convert school trans rep under the old system (where it was its own variable) to the new system (where it hijacks crossdress rep for purposes of compatibility with new content from mainline). +4. Accounted for chastity belts existing in the sidebar warning messages *and also* for the exposed-genitals penalty of the Crossdresser and Trans traits (they'll prevent the penalty from kicking in). +5. Nerfed chastity belt +femininity from 600 (++++++) to 300 (+++) because oof. +6. Tinkered with the writing for scenes you can get by walking into your birth gender's locker room as a trans character. I think I like where they're at now. Certainly much more than my first draft. + +### Backend change to how school trans rep works for greater compatibility (August 20, 2021) *BACK UP SAVES TO FILE BEFORE UPDATING* +What it says on the tin: this isn't a player-facing change, aside from some minor text touch-ups. It removes variables directly related to trans rep in favor of going back to the more primitive approach I once considered of an override applied to checks for crossdress rep, for the specific reason of maximizing compatibility with incoming content (like reputation checks in the new inspections content, which come with checks for schoolrep.crossdress but not schoolrep.trans). It's still stopgap compatibility in that the text output is likely to need some editing for trans PCs, but It's Something so that trans PCs get picked up when new content checks for whether other students are judging you for being Gender Nonconforming(tm). Be forewarned that despite going back to using schoolrep.crossdress, I did *not* allow trans PCs to use the one special action crossdressers can undertake to reduce their rep, as a trans PC's differences are presumably more than just clothes deep. Backup your saves to file before updating just in case I went and broke something. + +### fix for big fucky wucky in previous update (August 20, 2021) +Yeah my code for trying to fix the "NPC with vagina refers to a nonexistent penis when they should know better" was missing some key components so I had to go back and put them in because I didn't actually have a clue what I was doing the first time. + +### fix for minor fucky wucky in previous update (August 19, 2021) +For the bug where encounter dialogue for an NPC with a vagina may refer to the PC's penis even if the NPC should know that the PC doesn't have one. + +### Updates to emergency clothing outputs, along with assorted bug squishes and misgender fixes (August 19, 2021) +1. Modernized getting emergency school clothes from Leighton to rely on $player.gender_appearance instead of $player.gender, while also increasing options for the player to protest. Unexpected protest could draw scrutiny from Leighton, and being made to wear the wrong uniform as a trans PC might be unpleasant... +2. Modernized emergency clothes from the hospital emergency room and begging on Domus Street to use $player.gender_appearance instead of $player.gender. If the person who answers the door knows you from school, though, word about your gender might get around... +3. Squished a bug relating to PC dialogue in certain trans-related locker room events (thanks to Guiding Moonlight on the modding server for finding this one). +4. Squished a bug where encounter dialogue for an NPC with a vagina may refer to the PC's penis even if the NPC should know that the PC doesn't have one. +5. Fixed a misgender in a certain slimy encounter in the sewers. +6. Fixed a misgender in an angel TF message (thanks to FadedLines on the modding server for finding this one). +7. Updated some text for a couple instances of Whitney's bullying. + +### Update to chastity belt vs. cage choice (August 13, 2021) +Modified dialogue for the scene where a male or trans girl character can choose between a chastity belt and cage so that Jordan only brings up "others may mistake you for a girl" if the player doesn't already look like a girl to begin with. + +### Update to high-exhibitionism-fame genital photo street event (August 13, 2021) +Modifies the high-exhibition-fame street event where someone offers money to take pictures of your genitals to account for trans characters. + +### Update for compatibility with master merge (August 13, 2021) +What it says on the tin. A couple of lines in one file had conflicts with upstream and needed tweaking. + +### Removed improved stress recovery (August 11, 2021) +Increased difficulty a tiny bit! I originally copied both the positive and negative effects of the Crossdresser trait, but in retrospect, Crossdresser is a *background* with opportunity cost (or tedious to farm in-game) and a reasonably good upside that isn't necessarily balanced by the downside alone. The stress penalty when you look like your birth sex or your genitals are exposed remains, but improved stress recovery has been removed. + +### Fix for chargen bug w/transgender checkbox (August 5, 2021) +Fixes the transgender checkbox unsetting if the player tabs back into character creation from another tab when dealing with starting settings. (Had to put autocheck in the code for the transgender checkbox, and then pre-emptively set $player.trans to "f" at the start with all the other defaults.) + +### Save compatibility (August 5, 2021) +WARNING: EXPORT SAVES BEFORE UPDATING! This save will break non-exported saves, but old saves can be imported from a file! + +Changes StoryTitle to "Degrees of Transmod" and adds a line of code to ensure save compatibility, as required by DoLmods.net. + +### Initial Release (July 30, 2021) +Added $player.trans variable (values: "t" or "f") and a checkbox to select it in chargen, separate from the game's background system. Also properly set it to determine your wardrobe and posture, and to preview clothes in chargen. *Current implementation of trans girl/trans boy picker is perhaps slightly unfortunate.* + +Implemented effect of Trans Girl and Trans Boy traits on stress (same as Crossdresser) and included exposed genitals as an alternate condition for the penalty even if you look like a girl with a penis or a boy with a vagina + +Implemented display for Trans Girl and Trans Boy in Traits panel + +Added functionality to Characteristics panel to display if the character is a trans girl or a trans boy + +Added Transgender reputation to the Social panel, including various code associated with this reputation. I'm not sure I'm satisfied with the text displayed in the Social panel, or the messages shown when trans rep increases. The coarseness and kind of ignorant language is intentional and intended to reflect the school rumour mill, but I could be convinced to tone it down a bit. + +Implemented feat "Being Trans," awarded for playing a transgender character for 50 days, as an alternative to the existing "Being a Boy" and "Being a Girl" feats + +Changed text for NPC rage reaction to discovering the goodies in an encounter from "deception" to "revelation" when playing a trans character + +Adjusted weighting of exposed genitals with regards to the PC's apparently gender to make it possible to be perceived as a girl with a dick or a boy with a pussy + +Played with the text output in the status sidebar "crossdress" warnings. No longer warns you for dressing according to your character's chosen gender, but does warn you about being uneasy if your genitals are exposed, even if you look like a girl with a dick or a boy with a vagina. + +Added a new school gender reputation attribute for trans characters, $schoolrep.trans, and updated widgets to increment it + +Removed +arousal for trans characters when entering the pool changing room + +Forked some of the text for trans characters using the pool changing rooms, including exempting them from text stating the PC feels naughty for being in them + +Forked changing room events for trans characters barging into the one associated with their birth gender while passing as their chosen gender. Not sure I'm thrilled with how it turned out, but let me know your thoughts and if you have any better ideas. + +Fixed a bug where a segment of a locker-room event for herm characters accidentally checked $schoolrep.crossdress instead of $schoolrep.herm as long as I was in there. + +Added alternate text events for the gender-nonconforming/intersex bullying events for trans characters, using $schoolrep.trans. I'm not sure I'm satisfied with all the choices I made for these scenes, and I might be convinced to tone down the slurs (or even to add some British ones if anyone knows any good ones, given I'm from the other side of the Atlantic). + +Tinkered with Whitney's toilet rule to account for trans characters and make the rule actually matter (did not correct it for characters with the Crossdresser trait) + +Added forks for some relevant happenings at the maths fair diff --git a/README.md b/README.md index 57f876c9e..ce3d162a7 100644 --- a/README.md +++ b/README.md @@ -1,186 +1,89 @@ -# Degrees of Lewdity +This is a continuation of the mod by Gay Raccoon. -## Lexicon of Lewdity +# What is Transmod? +That's simple: a mod that makes it so all the bad little trans boys and girls are now allowed onboard the abusement park rides! If you've ever found yourself wanting to get sexually assaulted, be extorted, date fucked-up and abusive love interests, fall in love with your rapist, be cruelly bullied, resort to crimes and/or sex work to survive, end up in the honor student-to-cumdump pipeline, re-enact your traumas to feel like you have some kind of control over the things that happen to you, and generally find yourself in a downward spiral of trauma of the horny kind, but *as a trans girl or boy* and you found the Crossdresser background to be woefully insufficient for this, this is the mod for you! While it's in its early stages, current features include being able to set your character's trans status independently of any background, re-weighting of exposed genitals on the gender appearance system, trans-specific reputation and bullying and slurs at school, improved gender display on the Characteristics panel, not assuming you're using the girl's/boy's locker room for prurient purposes, feats for playing trans girls and trans boys to day 50, and more! -Looking to contribute to Degrees of Lewdity? Read the [Lexicon of Lewdity](https://gitgud.io/Vrelnir/degrees-of-lewdity/-/wikis/home). +Check the branch above and make sure you're on the branch named "transmod-dev" if you want the most current updates. **Remember to export your saves often, and especially when updating versions!** -_Failure to do so can lead to your work being denied._ +# Content warning for transphobia, slurs, some trans-related objectification, etc., on top of everything in the base game. -## How to build +## How to play this mod -### Changing the build version and type +There are two ways. If you want to run the game locally, you'll need to follow these instructions: -1. Open `01-config\sugarcubeConfig.js`. -2. Edit the `window.StartConfig` object to the relevant config type. - - Normal Build - `enableImages` needs to be `true` and `enableLinkNumberify` needs to be `true`. - - Text Only Build - `enableImages` needs to be `false` and `enableLinkNumberify` needs to be `true`. - - Android Build - `enableImages` needs to be `true` and `enableLinkNumberify` needs to be `false`. -3. `version` is optional between release versions but will be displayed on screen in several places and stored in the saves made. -4. `debug` is optional and will only effect new games. +1. Download the compressed repo above (make sure you're on the branch named "dev" if you want the most current updates). +2. Unzip it to a folder. +3. Run `compile.bat`. +4. Open `Degrees of Lewdity VERSION.html`. -### Compiling the html +The other way, which you'll need to use if you're on mobile or some other platform where you don't have the option to build the file locally as above, is to head on over to dolmods.net, where Transmod is one of the supported mods. (Thanks Nameless Magician!) -1. On Windows: Run `compile.bat` or `compile-watch.bat`. -2. On Linux: Run `compile.sh` -3. Open `Degrees of Lewdity VERSION.html`. +After that, you're good to create your trans girl or trans boy! Just check the box for the character being transgender after you've selected their birth sex. Bear in mind that if you want to be gendered as a girl with a penis or a boy with a vagina when your genitals are exposed, you'll need to look the part. *Trans boys in particular will probably want to select masculine features,* since there are almost no masculine body features to work with other than that, and you can't get them after character creation (I might have to do something about that). Then, be careful out there. Or don't. We all know why we're here. -### Build Android version (.apk) +## What to do if you have an old save from vanilla and want that character to be set as trans -See [mobile-build.md](docs\mobile-build.md) +Until I stop being too lazy to patch in something in the Attitudes menu or something, you can hack it in via the browser console (at least if you're running the game locally; I'm not sure how this works if you're playing via dolmods.net). Make sure you're in the tab where you're playing Transmod and hit F12 to bring up the devtools panel, and then navigate to the Console tab in that if you aren't already there. Once you've got the console open, copypasta the following snippet of code into its command line, then hit Enter: -## Development +V.player.trans = "t" -### Prerequisites +If your browser requires you to type "allow pasting" or something first, that's normal, and it's because pasting strange code off the Internets into your browser console can be dangerous if it's malicious. But in any case, once you've got the above line of code entered, your character should now be flagged as trans, and you'll probably see a change in crossdressing warning message (either disappearing or appearing) when you advance to the next passage. -- Read [Coder's-Guide](https://gitgud.io/Vrelnir/degrees-of-lewdity/-/wikis/Programming/Coder's-Guide) -- [Node.js 16 or later](https://nodejs.org/en/). +## What's new in Transmod? (check CHANGELOG_TRANSMOD.md above!) +I actually try to keep Transmod current on mainline content. For the date/version of the most recent mainline merge, and for what *I've* been doing in Transmod, click CHANGELOG_TRANSMOD.md in the list of files above! -### Optional Prerequisites +If you want a complete list of commits including commits that were made in mainline, you can instead click the History button above the most recent commit at the top. -1. Install [Tweego](http://www.motoslave.net/tweego/) and remember the path where it was installed. -2. Add path to `tweego.exe` (e.g. `C:\Program Files\Twine\tweego-2.1.0-windows-x64`) to Windows `Path` environment variable. +## What is Transmod *not*? +For one, it's not a pronoun picker, so don't give me any discourse about "rapists respecting your pronouns." It does tweak how the player is gendered by NPCs (including the possibility of them deciding you look like a girl with a penis or a boy with a vagina) and the game itself, but my goal was to do this in a more organic way, and account for the fact that NPCs may be ignorant or even shitty about it. I'm also trying to follow mainline design boundaries, one of which is that it uses other systems for how NPCs gender the player instead of a pronoun picker. -### Initial setup +For two, its primary purpose isn't to be *process-oriented* (like it's not a "surgery mod" or anything like that), though I'm not inherently opposed to all process-of-transition-related or -adjacent content and I *could* see adding some options along those lines in the future (like, say, surgery to alter whether your natural features are masculine/androgynous/feminine, would be one of the easier ones). -1. Install project dependencies: +For three, one thing I don't presently have the ability to support well is nonbinary characters, aside from characters that just change their gender presentation from time to time, which you can already do in the base game. The problem here is that the game tends to be binary about gendering the player, especially with the gender appearance system, which is strictly binary. Changing this would require radically overhauling one of the basic systems of the game in ways that require both extensive coding work and extensive design decision-making, and it's way beyond my reach at the moment and would require a massive deviation from mainline to implement, and I'm not sure I want to take such a radical departure from mainline's systems at the moment. - ```bash - npm i - ``` +## What you can do to help +Helping me test and keep an eye out for things I missed or implemented incorrectly, mostly! Everything in this mod is very much a work in progress at the moment and I haven't been able to test every change I've implemented, because some of the changes are in events that it's hard to test on demand. For that reason, it'd be great if you could tell me how events mentioned in the changelog go for you should you encounter them. Beyond that, if you get a bug or the like that seems related to character gender or something that it seems like I missed, drop me a line. Try not to spoil too much, but leave a snippet of dialogue or text I could use to search the code files for the incident and maybe a vague summary of the nature of the event if that wouldn't be a spoiler, or roughly where in the game you encountered the error. Please be understanding if it's heavily based in content I haven't experienced yet and don't want to get spoiled on and it takes me a while to get around to it on that basis. -2. If you use Visual Studio Code: +Also, if you could let me know how I did with the bullying events at school (and the maths fair). Much of this is early drafts, and you can help me by getting your trans rep up at school (same way you'd raise herm or crossdress rep: getting caught with your knickers down) so they start occurring. Do I need to tone things down a notch? Does the writing come off as inorganic or otherwise in need of touching up? Do you have any good ideas for more slurs I could use? Drop me a line! - 1. Install [Twee 3 Language Tools extension](https://marketplace.visualstudio.com/items?itemName=cyrusfirheir.twee3-language-tools) - 2. Install [ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint). - 3. Install [Stylelint extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint) - 4. Install and configure [Code Spell Checker extension](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker): - 1. Use "English - United Kingdom" and "English - United States" dictionaries - 2. Enable spellchecking for`twee3-sugarcube-2`, `markdown`, `javascript` and other programming languages - 5. Optionally enable fixing js/css on save. In `settings.json` set: +### How you can drop me a line +I have a channel on the DoL modding Discord server! If you don't know how to get there, first go to the official DoL Discord server, go to the #partnered-servers channel, and follow the link to Degrees of Lewdity Modding there. On the DoL modding server, you're looking for the channel named #transmod, naturally enough. I might have to set up a burner email I can post here for people who don't want to join Discord servers, tho. - ```json - // This disables built-in formatting - "[javascript]": { - "editor.formatOnSave": false - }, - "[css]": { - "editor.formatOnSave": false - }, - // This enables running ESLint, Prettier, Stylelint formatting on file save - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true, - "source.fixAll.stylelint": true - }, +# What sorts of things will Transmod incorporate in the future? +I've divided this up into segments by necessity: what's necessary to simply *allow* the PC to be trans without necessarily reflecting it that deeply, and then less urgent stuff that would simply *make lots of sense* for trans PCs. (And then there's a pie-in-the-sky thing towards the end, but don't put too much stock in it.) - ``` +## First order of business: simply allowing the PC to be trans +The first layer is simply *allowing* the player to play a trans PC, without the game mistaking them for a crossdresser or constantly misgendering them (though *NPCs* might diegetically do so), but not necessarily incorporating a lot of content that deeply reflects it. The most necessary thing is to correct things that *actively conflict* with playing a trans PC. -### Linting +### Things I have left to correct in the "actively conflict with playing a trans PC" pile +1. Accounting for trans characters in the Insecurity system. Gender checks in the existing system need to be tweaked so that trans girls are insecure about flat chests but not about normal-sized breasts, and also insecure about any size of penis, and so that trans boys are insecure about any size of breasts that isn't flat but not a flat chest, and about their vagina. This is going to require sifting through everything that currently increments insecurity (and the game checks gender for this purpose at the level of *individual catcalls* and such), and also adding an entirely new insecurity for the vagina for trans boys and running down everywhere it needs to be implemented. Not looking forward to it, but it's gotta be done. +2. Sifting through basically every instance where the game calls $player.gender (roughly ~400 references) and either accounting for the player being trans where necessary or updating it to use $player.gender_appearance where it's just old code that today probably would have used that instead. My primary obstacle here is honestly that there's a lot of content I don't want to be spoiled on yet. +3. Further squishing of bugs and missed things as they pop up, like occasionally I've caught assumptions of boy-ness hidden behind things like $penisexist, as an example. -#### JavaScript +## Future stuff I might get to move onto someday +This stuff moves beyond the "strictly necessary to just *let* the player play a trans PC" zone and into making it an experience that more organically reflects that the PC is trans, and it's a lot less concrete/predetermined. An example of some content in this vein that's already in the mod is trans school rep and bullying: the school had a full reputation tracker and bullying events for crossdressers and herm characters, so I was basically obligated to match this for trans characters. There are similar cases where I basically have to write a bit of new dialogue or fork something to account for the PC being trans, as opposed to it being optional, but as far as more optional stuff goes: -JavaScript code linting is handled by [`ESLint`](https://eslint.org/). +1. A pillar of the initial release of Transmod was changing the weighting of exposed genitalia so that it's possible to be perceived as a girl with a penis or a boy with a vagina. But organic NPC reactions are likely to be more complex than that, and so I'd like to write and code more NPC reactions where instead of the PC being simply perceived as, say, a girl with a penis instead of a boy who was crossdressing, the PC is instead more precisely perceived as an *obviously transgender person* where appropriate, and having NPCs react to this even if the PC still looks like a girl or a boy even when exposed. This would be an involved enough process that it would likely be an eternal work-in-progress as more instances where this would fit are discovered. +2. Expansion of genital shame. There's an extremely primitive form of this in Transmod already in that I've applied the *downside* of the Crossdresser trait to trans characters (worsened stress gain when very anxious and dressed as birth gender), and *additionally* made exposed genitalia a condition that triggers this penalty even if the PC still otherwise looks like the gender they want to look like. Getting the Insecurity system working properly for trans characters will also be a big step in the right direction for this. But I'd *love* to go deeper on this and make both consensual and forced exhibitionism as intense as they should be for trans PCs, since this goes beyond embarrassment or insecurity and into the realm of outright *shame* and fear of scorn. I'd also kind of like some way for the PC to eventually overcome this, like perhaps if the PC has reached full acceptance. +3. Fleshing out some scenes that it makes sense to flesh out for trans PCs in general. Some of this stuff would overlap with expanding upon genital shame, but not all of it. +4. Adding text and/or stress/trauma incrementation for other scenarios where something seems like it'd hit trans characters especially hard (example: having to wear the wrong clothes from Leighton or Mason). There's some overlap here with the genital shame mechanics thing above. +5. *Possibly* some process-oriented stuff like more options at the hospital. Like getting surgery for more masculine or feminine facial features would probably be one of the easiest ones, and a very useful one tbh. Getting more involved could possibly create an excuse to write some Dr. Harper scenes (imagine *Dr. Harper* being your gatekeeper), but mainline design principles generally discourage scenes that are gender-specific, which I presume would also extend to too much in the way of scenes that are *trans*-specific, so idk. Hormones have crossed my mind, but given this game is a little light on clear differences between male and female bodies and breast/butt pills already exist, idk. I could see using them to slowly shift natural features in lieu of surgery, and they'd probably also affect breast development (in ways more like removing or imposing the male breast growth penalty, rather than a true replacement for growth/shrinkage/stasis pills) while they're at it; they'd probably be more beneficial for trans boys if higher levels of masculine features were added to compensate for the fact that there aren't any other hard masculine characteristics to work with in this game, as opposed to how trans girls have breasts to work with. The part that's more challenging to conceive of is how to create the need for the PC to keep taking hormones indefinitely even after they've got their features where they want them. Which is a shame, because I'd love to do something like certain LIs controlling the player by controlling their access to their hormones (you know who I'm talking about). And speaking of... +6. NPCs otherwise using the PC's trans-ness to manipulate or hurt them. A lot of the NPCs in this game are kind of awful people who would do exactly that, aren't they? I'm not sure who the best candidates would be, and unfortunately this does sort of run the risk of overly targeted scenes. I could see things like teachers at school being worse about the PC being trans if the PC is a delinquent, though, as an example. +7. Other features occasionally pop into my head. Like sometimes I think about putting a wardrobe preference toggle in the Attitudes menu for PCs who don't have a specific trait that stresses them out for being dressed a certain way (read: trans PCs and Obligate Crossdressers) -ESLint is [configured](./.eslintrc.cjs) to follow some of best practices ([ESLint Recommended Rules](https://eslint.org/docs/latest/rules/), [JavaScript Standard Style](https://standardjs.com/rules.html)) with formatting handled by Prettier (`eslint --fix` formats code with Prettier). You don't need to use `Prettier` VS Code extension to format `.js` files. +## Pie in the sky: you know how NPCs can have their gender and genitals set separately? +Honestly doing that much with this is so far off as to hardly be worth talking about, and also I wouldn't want to run too afoul of the mainline design principle of not writing scenes that wouldn't work independently of the NPC's gender and genital configuration. *The most likely way this will show up in Transmod* is that I could see NPCs reacting slightly differently to the PC being trans if the NPC is *also* trans. With the caveat that most of the NPCs are still shitty people, so don't get your hopes up too much. Not that things like, say, Robin sharing their hormones with the player if the player's running low wouldn't be extremely cute (as an example), but there are obstacles as I've mentioned before. -To run ESLint for single file: +## Why did I make Transmod? +I tried playing my first character as a femboy non-avatar style (because they can be cute sometimes), and this lasted for about five minutes before she ended up a big tiddy proto-transgirl avatar. I tried going on like this, and did have a fair bit of fun, but things kept happening that took me out of the experience. A lot of that being related to NPCs abruptly changing their assessment of my avatar to male as soon as her skirt was up and her panties were down, or when her clothes were soaked, or just when the code was old, or etc. (which was particularly jarring in the case of LIs), and a fair bit of it being related to the game *assuming my avatar considered herself a boy*, because there's still a lot of that in there. So basically I *had* to make this mod for my own sake, so that I could just bloody enjoy the game, because it's a wonderful game that spoke to me like few things have in *years* but its handling of my avatar's gender was becoming enough of an issue that I was no longer able to enjoy playing it. I wish I hadn't had to, honestly, because being in the community and poking through code has exposed me to a lot of spoilers, which has also been detrimental to my experience. Even if the game just allowed you to play a girl with a dick as opposed to a boy with tits, with trans-ness left entirely to the realm of player interpretation, I probably never would have ended up making this mod. -```bash -npx eslint "game/03-JavaScript/02-Helpers/Utils.js" -``` +So please bear in mind that unlike most modders, my path to modding wasn't wearing out the content in the base game and then deciding to make more; it was so that I could enjoy the base game in the first place. Please understand that I may not want things more spoiled than they already are, and that getting through more of the content on my own for the first time is probably the thing that'll take the most time with regards to developing Transmod. -or for all files inside `game` directory: +## Special thanks +Vrelnir and the crew for making the game, even if I was just being a little salty about certain things. -```bash -npx eslint "game/**" -``` +The DoL Modding server for helping me get started on this and answering my questions. Especially folks like note leven, hwp, and Rukarin (even if he didn't entirely get why I'm making the mod), without whom I never would have been able to get started because I had no bloody clue what I'm doing with this "git" or "code" thing. (Still hardly do tbh.) And Rukarin was right about it being a better idea to build new variables and systems for trans characters separate from and not hijacking the traits and rep and etc. for crossdressers so that both can co-exist in the same version of the game right from the start. -##### Resolving issues +Koharu from the DoL modding server for making the Android .apk file. -Some issues are fixable and can be auto-fixed when you save a file (provided ESLint extension is configured to run fix on save) or by running `eslint --fix file_relative_path` - -If you find a rule that doesn't make sense for the project you can disable it inside `rules` section inside `.eslintrc.cjs`: - -```json -rules: { - ... - // SugarCube extends native objects and we follow it - "no-extend-native": "off", - ... -} -``` - -Please discuss the reasons with the team before disabling the rule. Add a comment explaining why the rule was disabled - -If ESLint reports a lot of issues for particular file and you cannot fix them all at once feel free to [disable particular rule](https://eslint.org/docs/latest/user-guide/configuring/rules#disabling-rules) for the file (there is quick actions menu when code with error is hovered): - -```js -/* eslint-disable camelcase -- TODO: Fix variables' names */ -... -let demo_rainbow_colors = [ -... -``` - -Add a TODO comment explaining that this will be fixed someday - -##### Global variables - -ESLint may report a issue like `'myVariable' is not defined`. It means ESLint cannot figure out where the variable is defined. If you really meant to make variable global add the new variable to `.eslintrc.cjs` `globals` section inside corresponding group: - -```json -myVariable: "readonly" -``` - -If the variable is suppose to be writable set `myVariable: "writable"` instead. - -### CSS - -CSS linting is handled by [`Stylelint`](https://stylelint.io/). - -Stylelint is [configured](./stylelint.config.cjs) to follow [common conventions](https://github.com/stylelint/stylelint-config-standard) along with [rules for properties order](https://github.com/cahamilton/stylelint-config-property-sort-order-smacss) and formatting handled by Prettier (`stylelint --fix` formats code with Prettier). You don't need to use `Prettier` VS Code extension to format `.css` files. - -To run Stylelint for the file: - -```bash -npx stylelint "game/02-CSS/pillsInventory.css" -``` - -or for all CSS file inside `game` directory: - -```bash -npx stylelint "game/**/*.css" -``` - -#### Resolving issues - -Some issues are fixable and can be auto-fixed when you save a file (provided Stylelint extension is configured to run fix on save) or by running `stylelint --fix file_relative_path`. - -Sometimes all issues cannot be fixed within single "fix" run (e.g. properties order). Simply run fix command several time until all auto-fixable issues are resolved. - -If you find a rule that doesn't make sense for the project you can disable it inside `rules` section inside `stylelint.config.cjs`: - -```js -rules: { - // Class and ID patterns disabled for now due to the large amounts of classes and IDs that break this rule - "selector-class-pattern": null, - "selector-id-pattern": null, - ... -} -``` - -Please discuss the reasons with the team before disabling the rule. Add a comment explaining why the rule was disabled - -### Formatting - -Formatting CSS and other non-JavaScript file is handled by `Prettier`. Formatting rules are set in `.prettierrc.json` - -### Pre-commit hook - -On pre-commit [`lint-staged`](https://github.com/okonet/lint-staged) using [`husky`](https://typicode.github.io/husky) lints/formats `.js`, `.css` with ESLint, Stylelint and formats other supported files with Prettier. - -Pre-commit hook is the last quality gate to avoid "bad" code getting into the repository. It's better to make sure you aren't committing files with issues beforehand - you can run command `npm run lint-staged` when you've staged the files to check if there are issues. - -If for some reason you really want to commit the code that fails linting add `--no-verify` parameter to `commit` call - -```bash -commit --no-verify -``` +### what's with this giant wall of text +i have a nice keyboard that feels good and makes pretty clacky clack thocc noises and this was a good excuse ok diff --git a/game/01-config/start.twee b/game/01-config/start.twee index cd6d1c45c..4ad6ec76f 100644 --- a/game/01-config/start.twee +++ b/game/01-config/start.twee @@ -6,7 +6,7 @@ } :: StoryTitle -Degrees of Lewdity +Degrees of Transmod :: Start [nosave exitCheckBypass] <<if $intro is undefined>> diff --git a/game/01-config/sugarcubeConfig.js b/game/01-config/sugarcubeConfig.js index d06f4bc9c..bb1ee23f8 100644 --- a/game/01-config/sugarcubeConfig.js +++ b/game/01-config/sugarcubeConfig.js @@ -53,6 +53,8 @@ function onSave(save) { window.onSave = onSave; Save.onSave.add(onSave); +Config.saves.id = "degrees-of-lewdity" + /* LinkNumberify and images will enable or disable the feature completely */ /* debug will enable or disable the feature only for new games */ /* sneaky will enable the Sneaky notice banner on the opening screen and save display */ diff --git a/game/04-Variables/feats.js b/game/04-Variables/feats.js index e924bbfef..5c2e97bd6 100644 --- a/game/04-Variables/feats.js +++ b/game/04-Variables/feats.js @@ -61,6 +61,14 @@ setup.feats = { filter: ["All", "General"], softLockable: true, }, + "Being a Trans Boy":{ + title: "Being a Trans Boy", + desc: "Get to day 50 as a trans boy.", + difficulty: 1, + series: "", + filter: ["All", "General"], + softLockable: true, + }, "Being a Girl": { title: "Being a Girl", desc: "Get to day 50 as a girl.", @@ -69,6 +77,14 @@ setup.feats = { filter: ["All", "General"], softLockable: true, }, + "Being a Trans Girl":{ + title: "Being a Trans Girl", + desc: "Get to day 50 as a trans girl.", + difficulty: 1, + series: "", + filter: ["All", "General"], + softLockable: true, + }, "Being a Hermaphrodite": { title: "Being a Hermaphrodite", desc: "Get to day 50 as a hermaphrodite.", diff --git a/game/04-Variables/variables-start2.twee b/game/04-Variables/variables-start2.twee index f413fcff0..398fc2dcf 100644 --- a/game/04-Variables/variables-start2.twee +++ b/game/04-Variables/variables-start2.twee @@ -142,40 +142,56 @@ <</switch>> <<set Time.set()>> - <<if $background is "nerd">> - <<set $science += 100>><<set $maths += 100>><<set $english += 100>><<set $history += 100>><<set $school += 400>><<set $cool to 0>> - <<set $sciencetrait to 1>><<set $mathstrait to 1>><<set $englishtrait to 1>><<set $historytrait to 1>> - <<elseif $background is "athlete">> - <<set $physique += ($physiquesize / 4)>><<set $swimmingskill += 200>><<set $athletics += 200>> - <<set $science to 0>><<set $maths to 0>><<set $english to 0>><<set $history to 0>><<set $school to 0>> - <<set $sciencetrait to -1>><<set $mathstrait to -1>><<set $englishtrait to -1>><<set $historytrait to -1>> - <<elseif $background is "delinquent">> - <<set $delinquency += 401>><<set $cool += 200>> - <<elseif $background is "promiscuous">> - <<set $promiscuity += 35>> - <<elseif $background is "exhibitionist">> - <<set $exhibitionism += 35>> - <<elseif $background is "deviant">> - <<set $deviancy += 35>> - <<elseif $background is "beautiful">> - <<set $beauty += ($beautymax / 2)>> - <<elseif $background is "crossdresser">> - <<if $player.gender is "f">> - <<set $player.gender_posture to "m">> - <<elseif $player.gender is "m">> - <<set $player.gender_posture to "f">> - <<else>> - <<set $player.gender_posture to "n">> - <<set $background to "waif">> - <</if>> - <<elseif $background is "greenthumb">> - /* Leaving this here in case we ever turn Green Thumb back into a background. Can't be set to the background variable in current state. */ - <<set $tending += 200>> - <<elseif $background is "plantlover">> - <<set $nectar_addiction to 200>> - <<set $nectar_timer to 21>> +<<if $background is "nerd">> + <<set $science += 100>><<set $maths += 100>><<set $english += 100>><<set $history += 100>><<set $school += 400>><<set $cool to 0>> + <<set $sciencetrait to 1>><<set $mathstrait to 1>><<set $englishtrait to 1>><<set $historytrait to 1>> +<<elseif $background is "athlete">> + <<set $physique += ($physiquesize / 4)>><<set $swimmingskill += 200>><<set $athletics += 200>> + <<set $science to 0>><<set $maths to 0>><<set $english to 0>><<set $history to 0>><<set $school to 0>> + <<set $sciencetrait to -1>><<set $mathstrait to -1>><<set $englishtrait to -1>><<set $historytrait to -1>> +<<elseif $background is "delinquent">> + <<set $delinquency += 401>><<set $cool += 200>> +<<elseif $background is "promiscuous">> + <<set $promiscuity += 35>> +<<elseif $background is "exhibitionist">> + <<set $exhibitionism += 35>> +<<elseif $background is "deviant">> + <<set $deviancy += 35>> +<<elseif $background is "beautiful">> + <<set $beauty += ($beautymax / 2)>> +<<elseif $background is "crossdresser">> + <<if $player.gender is "f">> + <<set $player.gender_posture to "m">> + <<elseif $player.gender is "m">> + <<set $player.gender_posture to "f">> + <<else>> + <<set $player.gender_posture to "n">> + <<set $background to "waif">> <</if>> - <<set $backgroundTraits to [$background]>> +<<elseif $background is "greenthumb">> + /* Leaving this here in case we ever turn Green Thumb back into a background. Can't be set to the background variable in current state. */ + <<set $tending += 200>> +<<elseif $background is "plantlover">> + <<set $nectar_addiction to 200>> + <<set $nectar_timer to 21>> +<</if>> +<<set $backgroundTraits to [$background]>> + +<<if $player.trans is "t">> + <<if $player.gender is "f">> + <<set $player.gender_posture to "m">> + <<elseif $player.gender is "m">> + <<set $player.gender_posture to "f">> + <<else>> + <<set $player.gender_posture to "n">> + <</if>> +<</if>> + +<<set $clubCheck to "f">> +<<set $clubIntro to 0>> +<<set $clubAccepted to "f">> +<<set $clubRefused to "f">> +<<set $markAcquired to "f">> <<if $hairlength gte 900>> <<set $hairlengthstage to "feet">> diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee index 6de070c3d..c6263b270 100644 --- a/game/04-Variables/variables-versionUpdate.twee +++ b/game/04-Variables/variables-versionUpdate.twee @@ -75,6 +75,46 @@ <<set $player.ballsExist to ($player.gender isnot "f")>> <</if>> + <<if $player.trans is undefined>> + <<set $player.trans to "f">> + <</if>> + + <<if $player.surgery is undefined>> + <<set $player.surgery to "f">> + <</if>> + + <<if $surgeryToggle is undefined>> + <<set $surgeryToggle to "f">> + <</if>> + + <<if $clubCheck is undefined>> + <<set $clubCheck to "f">> + <</if>> + + <<if $clubIntro is undefined>> + <<set $clubIntro to 0>> + <</if>> + + <<if $clubAccepted is undefined>> + <<set $clubAccepted to "f">> + <</if>> + + <<if $clubRefused is undefined>> + <<set $clubRefused to "f">> + <</if>> + + <<if $preferred is undefined>> + <<set $preferred to "n">> + <</if>> + + <<if $clubProgess is undefined>> + <<set $clubProgess to 0>> + <</if>> + + <<if $markAcquired is undefined>> + <<set $markAcquired to "f">> + <</if>> + <<if $clothing_update is undefined>><<set $clothing_update to 1>> <<clothinginit>> <<givestartclothing>> @@ -1675,11 +1715,16 @@ <<set $punishmentposition to 0>> <</if>> - <<if $schoolrep is undefined>> - <<set $schoolrep to {}>> - <<set $schoolrep.crossdress to 0>> - <<set $schoolrep.herm to 0>> - <</if>> +<<if $schoolrep is undefined>> + <<set $schoolrep to {}>> + <<set $schoolrep.crossdress to 0>> + <<set $schoolrep.herm to 0>> +<</if>> + +<<if $schoolrep.trans isnot undefined>> + <<set $schoolrep.crossdress to $schoolrep.trans>> + <<run delete $schoolrep.trans>> +<</if>> <<if $science_star is undefined>> <<set $science_star to 0>> @@ -3568,7 +3613,7 @@ /* * * * * * * * * * * * * * * * * * * * * * * * new backwards compatibility code goes here */ - + <<modUpdate>> /* Code that should not be moved into a check like above */ <<set $runWardrobeSanityChecker to true>> diff --git a/game/base-clothing/captiontext.twee b/game/base-clothing/captiontext.twee index 26be10b2e..e08507a71 100644 --- a/game/base-clothing/captiontext.twee +++ b/game/base-clothing/captiontext.twee @@ -278,7 +278,7 @@ <</widget>> <<widget "clothingCaptionTextGender">><<silently>> - <<if $player.gender isnot "f" and $player.gender_appearance is "f">> + <<if $player.gender isnot "f" and $player.gender_appearance is "f" and $player.trans isnot "t">> <<if $breastindicator is 1 and $player.perceived_breastsize gt 1>> <<set $_text_output to "Your exposed breasts will make people think you're a girl!">> <<elseif $exposed gte 2>> @@ -286,15 +286,37 @@ <<else>> <<set $_text_output to "The way you're dressed, people will think you're a girl!">> <</if>> - <<elseif $player.gender isnot "m" and $player.gender_appearance is "m">> + <<elseif $player.gender isnot "m" and $player.gender_appearance is "m" and $player.trans isnot "t">> <<if $breastindicator is 0 and $worn.upper.exposed is 2 and $worn.under_upper.exposed gte 1 and $player.perceived_breastsize lte 1>> <<set $_text_output to "Your exposed flat chest will make people think you're a boy!">> <<elseif $exposed gte 2>> - <<set $_text_output to "The way you look, people will think you're a boy!">> + <<set $_text_output to "Your exposed penis will make people think you're a boy!">> + <<else>> + <<set $_text_output to "The way you're dressed, people will think you're a boy!">> + <</if>> +<<elseif $player.gender is "m" and $player.trans is "t" and $player.gender_appearance is "m">> + <<if $breastindicator is 0 and $worn.upper.exposed is 2 and $worn.under_upper.exposed gte 1>> + <<set $_text_output to "Your exposed flat chest will make people think you're a boy!">> + <<elseif $exposed gte 2>> + <<set $_text_output to "Your exposed penis will make people think you're a boy!">> <<else>> <<set $_text_output to "The way you're dressed, people will think you're a boy!">> <</if>> + <<elseif $player.gender is "m" and $player.trans is "t" and $player.gender_appearance is "f" and $exposed gte 2 and !$worn.genitals.type.includes("hidden")>> + <<set $_text_output to "You look like a girl with a penis, but you still feel shame with it exposed.">> +<<elseif $player.gender is "f" and $player.trans is "t" and $player.gender_appearance is "f">> + <<if $breastindicator is 1 and $breastsize gte 1>> <!-- TRANSMOD This is sidestepping what might be a bug in mainline but it's good enough for now --> + <<set $_text_output to "Your exposed breasts will make people think you're a girl!">> + <<elseif $exposed gte 2 and $worn.genitals.type.includes("hidden")>> + <<set $_text_output to "Your chastity belt will make people think you're a girl!">> + <<elseif $exposed gte 2 and !$worn.genitals.type.includes("hidden")>> + <<set $_text_output to "Your exposed vagina will make people think you're a girl!">> + <<else>> + <<set $_text_output to "The way you're dressed, people will think you're a girl!">> <</if>> +<<elseif $player.gender is "f" and $player.trans is "t" and $player.gender_appearance is "m" and $exposed gte 2 and !$worn.genitals.type.includes("hidden")>> + <<set $_text_output to "You look like a boy with a vagina, but you still feel shame with it exposed.">> +<</if>> <</silently>><<if $_text_output>><span class="pink"><<print $_text_output>></span><</if>><</widget>> <<widget "clothingCaptionTextPreggy">><<silently>> diff --git a/game/base-clothing/clothing-upper.js b/game/base-clothing/clothing-upper.js index 555b33978..531a7ab07 100644 --- a/game/base-clothing/clothing-upper.js +++ b/game/base-clothing/clothing-upper.js @@ -5881,7 +5881,51 @@ function initUpper() { Clothes that modders add go into this array, this should be empty in the base game at all times. These items should have a `modder` variable with a the modders name in a short string */ - setup.moddedClothes.upper = []; + setup.moddedClothes.upper = [ + { + index: 0, + name: "trans pride shirt", + name_cap: "Trans pride shirt", + variable: "transshirt", + integrity: 100, + integrity_max: 100, + fabric_strength: 20, + reveal: 400, + bustresize: 0, + word: "a", + one_piece: 0, + strap: 0, + open: 0, + state: "waist", + state_base: "waist", + state_top: "chest", + state_top_base: "chest", + plural: 0, + colour: 0, + colour_options: [], + colour_sidebar: 0, + exposed: 0, + exposed_base: 0, + type: ["normal"], + set: "upper", + gender: "n", + warmth: 40, + cost: 1000, + description: "T-shirt in the Trans Pride colors.", + shop: ["forest"], + accessory: 0, + accessory_colour: 0, + accessory_colour_options: [], + sleeve_img: 1, + breast_img: 0, + cursed: 0, + location: 0, + iconFile: "transshirt.png", + accIcon: 0, + notuck: 0, + pregType: 0, + } + ]; setup.moddedClothes.upper.forEach((x, i) => (x.index = setup.clothes.upper.length + i)); setup.clothes.upper.push(...setup.moddedClothes.upper); diff --git a/game/base-clothing/init.twee b/game/base-clothing/init.twee index 453013382..6e5b287ed 100644 --- a/game/base-clothing/init.twee +++ b/game/base-clothing/init.twee @@ -118,67 +118,69 @@ <<set $worn.legs to clone(setup.clothes.legs[0])>> <<set $worn.feet to clone(setup.clothes.feet[0])>> - <<if ($player.gender is "f" and $background isnot "crossdresser") or - ($player.gender is "m" and $background is "crossdresser") or - ($player.gender is "h" and - ( - (($player.gender_body is "m" or ($player.gender_body is "a" and $player.breastsize lte 3)) and $background is "crossdresser") or - (($player.gender_body is "f" or ($player.gender_body is "a" and $player.breastsize gt 3)) and $background isnot "crossdresser") - ) - )>> - <<set $outfit.push( - {index: $outfit.length, - name: "Everyday", - over_upper: "naked", - over_lower: "naked", - upper: "sundress", - lower: "sundress skirt", - under_upper: "naked", - under_lower: "plain panties", - over_head: "naked", - head: "naked", - face: "naked", - neck: "naked", - legs: "girl's gym socks", - feet: "school shoes", - type: ["normal"], - colors: false - }, - {index: $outfit.length, - name: "School", - over_upper: "naked", - over_lower: "naked", - upper: "school shirt", - lower: "school skirt", - under_upper: "naked", - under_lower: "plain panties", - over_head: "naked", - head: "hairpin", - face: "naked", - neck: "naked", - legs: "girl's gym socks", - feet: "school shoes", - type: ["school"], - colors: false - }, - {index: $outfit.length, - name: "Swimwear", - over_upper: "naked", - over_lower: "naked", - upper: "naked", - lower: "naked", - under_upper: "school swimsuit", - under_lower: "school swimsuit bottom", - over_head: "naked", - head: "naked", - face: "naked", - neck: "naked", - legs: "naked", - feet: "naked", - type: ["swim"], - colors: false - } - )>> + + +<<if ($player.gender is "f" and $background isnot "crossdresser" and $player.trans isnot "t") or + ($player.gender is "m" and ($background is "crossdresser" or $player.trans is "t")) or + ($player.gender is "h" and + ( + (($player.gender_body is "m" or ($player.gender_body is "a" and $player.breastsize lte 3)) and $background is "crossdresser") or + (($player.gender_body is "f" or ($player.gender_body is "a" and $player.breastsize gt 3)) and $background isnot "crossdresser") + ) + )>> + <<set $outfit.push( + {index: $outfit.length, + name: "Everyday", + over_upper: "naked", + over_lower: "naked", + upper: "sundress", + lower: "sundress skirt", + under_upper: "naked", + under_lower: "plain panties", + over_head: "naked", + head: "naked", + face: "naked", + neck: "naked", + legs: "girl's gym socks", + feet: "school shoes", + type: ["normal"], + colors: false + }, + {index: $outfit.length, + name: "School", + over_upper: "naked", + over_lower: "naked", + upper: "school shirt", + lower: "school skirt", + under_upper: "naked", + under_lower: "plain panties", + over_head: "naked", + head: "hairpin", + face: "naked", + neck: "naked", + legs: "girl's gym socks", + feet: "school shoes", + type: ["school"], + colors: false + }, + {index: $outfit.length, + name: "Swimwear", + over_upper: "naked", + over_lower: "naked", + upper: "naked", + lower: "naked", + under_upper: "school swimsuit", + under_lower: "school swimsuit bottom", + over_head: "naked", + head: "naked", + face: "naked", + neck: "naked", + legs: "naked", + feet: "naked", + type: ["swim"], + colors: false + } + )>> <<set $worn.upper to clone(setup.clothes.upper[1])>> <<set $worn.upper.colour to "white">> diff --git a/game/base-clothing/wardrobes.twee b/game/base-clothing/wardrobes.twee index 45ee2494b..b2e27f341 100644 --- a/game/base-clothing/wardrobes.twee +++ b/game/base-clothing/wardrobes.twee @@ -1502,6 +1502,12 @@ <</if>> <<case "Prison Wardrobe">> <<link [[Close|Prison Cell]]>><<cleanupOnWardrobeExit>><</link>> + <<case "clubRoom">> + <<if $exposed lte 0>> + <<link [[Return|Club Room]]>><<cleanupOnWardrobeExit>><<set $wardrobe_location to "wardrobe">><</link>> + <<else>> + You can't remain undressed like this! + <</if>> <</switch>> <br><br> <</widget>> diff --git a/game/base-combat/end.twee b/game/base-combat/end.twee index 16c73b7ef..666645e84 100644 --- a/game/base-combat/end.twee +++ b/game/base-combat/end.twee @@ -128,19 +128,51 @@ <<switch $player.gender>> <<case "f">> - /*state*/ - <<set $vaginastate to 0>> - <<set $penisstate to "none">> - /*use*/ - <<set $vaginause to 0>> - <<set $penisuse to "none">> + <<if $player.trans is "f">> + /*state*/ + <<set $vaginastate to 0>> + <<set $penisstate to "none">> + /*use*/ + <<set $vaginause to 0>> + <<set $penisuse to "none">> + <<elseif $player.surgery is "t">> + /*state*/ + <<set $vaginastate to "none">> + <<set $penisstate to 0>> + /*use*/ + <<set $penisuse to 0>> + <<set $vaginause to "none">> + <<else>> + /*state*/ + <<set $vaginastate to 0>> + <<set $penisstate to "none">> + /*use*/ + <<set $vaginause to 0>> + <<set $penisuse to "none">> + <</if>> <<case "m">> - /*state*/ - <<set $vaginastate to "none">> - <<set $penisstate to 0>> - /*use*/ - <<set $penisuse to 0>> - <<set $vaginause to "none">> + <<if $player.trans is "f">> + /*state*/ + <<set $vaginastate to "none">> + <<set $penisstate to 0>> + /*use*/ + <<set $penisuse to 0>> + <<set $vaginause to "none">> + <<elseif $player.surgery is "t">> + /*state*/ + <<set $vaginastate to 0>> + <<set $penisstate to "none">> + /*use*/ + <<set $vaginause to 0>> + <<set $penisuse to "none">> + <<else>> + /*state*/ + <<set $vaginastate to "none">> + <<set $penisstate to 0>> + /*use*/ + <<set $penisuse to 0>> + <<set $vaginause to "none">> + <</if>> <<case "h">> /*state*/ <<set $vaginastate to 0>> diff --git a/game/base-combat/init.twee b/game/base-combat/init.twee index bfae41342..16ff15e0b 100644 --- a/game/base-combat/init.twee +++ b/game/base-combat/init.twee @@ -999,7 +999,7 @@ <<run $npc.forEach(npc => $genderknown.pushUnique(npc))>> <</if>> - <<if $worn.genitals.type.includesAll("chastity", "hidden") or $NPCList[0].state is "stalk" or $NPCList[0].state is "pursuit">> +<<if $worn.genitals.type.includesAll("chastity", "hidden") or $NPCList[0].state is "stalk" or $NPCList[0].state is "pursuit">> <<elseif $crossdressing gte 1 and $worn.over_lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1>> <<exposedcheck true>> <<if $NPCList[0].teen is 1 and $location is "school" and !($npc.length is 1 and (["Kylar","Sydney"].includes($npc[0])))>> @@ -1058,68 +1058,58 @@ <</if>> <<set $enemyanger += 200>><<set $enemytrust -= 100>><<set $speechhermangry to 2>> <</if>> - <<else>> <!-- Crossdressing PC --> - <<if $npc.length is 1 and (["Kylar","Sydney"].includes($npc[0]))>> - <<if $npc[0] is "Sydney" and !$sydneySeen.includes("crossdress")>> - <<set $sydneySeen.pushUnique("crossdress")>> - <<run statusCheck("Sydney")>> - <<if _sydneyStatus.includes("corrupt")>> - <<He>> looks taken aback by your <<genitals>>. It wasn't what <<he>> was expecting, but <<he>> doesn't seem to mind. - <<else>> - <<He>> stares at your <<genitals>> with confusion. It wasn't what <<he>> was expecting, but <<he>> doesn't seem to mind. - <</if>> - <<npcincr Sydney purity -2>><<lspurity>><<set $speechcrossdressaroused to 2>> - <<elseif $npc[0] is "Kylar">> - <!-- TODO: Give Kylar unique reactions? --> - <<set _kylar to statusCheck("Kylar")>> - <<if _kylar.gender isnot $player.gender or _kylar.gender is "h">> - Your <<genitals 1>> was clearly not what <<he>> was expecting, but <<he>> doesn't seem to mind. <<if _kylar.gender isnot "h">><span class="purple">In fact, if <<his>> shaking hands are anything to go by <<he>> is quite pleased.</span><</if>> - <<set $enemyarousal += 50>><<set $speechcrossdressaroused to 2>> - <<else>> - <<He>> looks disappointed by your <<genitals>>. It wasn't what <<he>> was expecting. - <<set $enemyarousal -= 100>><<set $enemytrust -= 50>><<set $speechcrossdressdisappointed to 2>> - <</if>> - <</if>> - <<elseif $NPCList[0].type is "plant" or $rng lt 30>> - <<if $enemyno gte 2>> - Your <<genitals>> was clearly not what they were expecting, but they don't seem to mind. - <<else>> - Your <<genitals 1>> was clearly not what <<he>> was expecting, but <<he>> doesn't seem to mind. - <</if>> - <<elseif $rng lt 50>> - <<if $enemyno gte 2>> - They look disappointed by your <<genitals>>. It wasn't what they were expecting. - <<else>> - <<He>> looks disappointed by your <<genitals>>. It wasn't what <<he>> was expecting. - <</if>> - <<set $enemyarousal -= 100>><<set $enemytrust -= 50>><<set $speechcrossdressdisappointed to 2>> - <<elseif $rng lt 85>> - <<if $enemyno gte 2>> - Their eyes widen in shock when they see your <<genitals>>. They seem unsure what to do. - <<else>> - <<His>> eyes widen in shock when <<he>> sees your <<genitals>>. <<He>> seems unsure what to do. - <</if>> - <<set $enemyanger -= 50>><<set $enemytrust -= 50>><<set $speechcrossdressshock to 2>> - <<elseif $rng lt 95>> - <<if $enemyno gte 2>> - Your <<genitals>> was clearly not what they were expecting, but they don't seem to mind. <span class="purple">In fact, if their shaking hands are anything to go by they're quite pleased.</span> - <<else>> - Your <<genitals 1>> was clearly not what <<he>> was expecting, but <<he>> doesn't seem to mind. <span class="purple">In fact, if <<his>> shaking hands are anything to go by <<he>> is quite pleased.</span> - <</if>> - <<set $enemyarousal += (50 * $enemyno)>><<set $speechcrossdressaroused to 2>> + <br><br> + <</if>> +<<elseif $crossdressing is 1 and $worn.under_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.over_lower.vagina_exposed gte 1>> + <<set $crossdressing to 0>> + <<exposedcheck true>> + <<if !$backgroundTraits.includes("crossdresser") and $player.trans isnot "t">> + <<if $crossdressingTrait is undefined>> + <<set $crossdressingTrait to 1>> + <<else>> + <<set $crossdressingTrait += 1>> + <</if>> + <<if $crossdressingTrait gte 100>> + <<run $backgroundTraits.pushUnique("crossdresser")>> + <<set _newTrait to true>> + <</if>> + <</if>> + <<if $NPCList[0].teen is 1 and $location is "school" and !($npc.length is 1 and ($npc[0] is "Kylar" or $npc[0] is "Sydney"))>> + <<schoolrep crossdress 1>> + <</if>> + <<if $enemyno gte 2>> + <<if $rng gte 96>> + <span class="red">They recoil in horror upon seeing your <<genitals>>. The <<print ($player.trans is "t"? "revelation" : "deception")>> has driven them mad with rage!</span> + <<set $enemyanger += 200>><<set $enemytrust -= 100>><<set $speechcrossdressangry to 2>> + <<elseif $rng gte 85>> + Your <<genitals>> was clearly not what they were expecting, but they don't seem to mind. <span class="purple">In fact, if their shaking hands are anything to go by they're quite pleased.</span> + <<set $enemyarousal += (50 * $enemyno)>><<set $speechcrossdressaroused to 2>> + <<else>> + Your <<genitals>> was clearly not what they were expecting, but they don't seem to mind. + <</if>> + <br><br> + <<else>> + <<if $npc.includes("Sydney") and !$sydneySeen.includes("crossdress")>> + <<set $sydneySeen.pushUnique("crossdress")>> + <<NPCStatusCheck "Sydney">> + <<if _sydneyStatus.includes("corrupt") and $player.trans is "t">><!--TRANSMOD change --> + <<He>> looks taken aback by your <<genitals>>. "All this time, you were a <<trans_gender>>? Well, that doesn't change how I feel about you." + <<elseif $player.trans is "t">> + <<He>> stares at your <<genitals>> with confusion. "You're... a <<gender>>?" Noticing your discomfort, <<he>> backpedals. "I mean, you're... what's the word, a t-t-transsexual? Th-that's okay! I don't think of you any differently!" + <<elseif _sydneyStatus.includes("corrupt")>> + <<He>> looks taken aback by your <<genitals>>. "All this time, you were a <<gender>>? Well, that doesn't change how I feel about you." <<else>> - <<if $enemyno gte 2>> - <span class="red">They recoil in horror upon seeing your <<genitals>>. The deception has driven them mad with rage!</span> - <<else>> - <span class="red"><<He>> recoils in horror upon seeing your <<genitals>>. The deception has driven <<him>> mad with rage!</span> - <</if>> - <<set $enemyanger += 200>><<set $enemytrust -= 100>><<set $speechcrossdressangry to 2>> - <</if>> - <<if !$backgroundTraits.includes("crossdresser")>> - <<set $crossdressingTrait to ($crossdressingTrait gte 1 ? $crossdressingTrait + 1 : 1)>> - <<if $crossdressingTrait gte 100>> - <<run $backgroundTraits.pushUnique("crossdresser")>> - <br><br> + <<He>> stares at your <<genitals>> with confusion. "You're... a <<gender>>? Th-that's okay! I don't think of you any differently!" + <</if>><<npcincr Sydney purity -2>><<lspurity>> + <<elseif $rng gte 96 and !$npc.includes("Kylar") and $NPCList[0].type isnot "plant">> + <span class="red"><<He>> recoils in horror upon seeing your <<genitals>>. The <<print ($player.trans is "t"? "revelation" : "deception")>> has driven <<him>> mad with rage!</span> + <<set $enemyanger += 200>><<set $enemytrust -= 100>><<set $speechcrossdressangry to 2>> + <</if>> + <<if !$backgroundTraits.includes("crossdresser")>> + <<set $crossdressingTrait to ($crossdressingTrait gte 1 ? $crossdressingTrait + 1 : 1)>> + <<if $crossdressingTrait gte 100>> + <<run $backgroundTraits.pushUnique("crossdresser")>> + <br><br> <span class="gold">Being seen crossdressing makes you feel happy inside.</span> <</if>> diff --git a/game/base-combat/speech.twee b/game/base-combat/speech.twee index 36f6364aa..c30b44e79 100644 --- a/game/base-combat/speech.twee +++ b/game/base-combat/speech.twee @@ -3010,11 +3010,24 @@ <<elseif $speechvaginaflaunt is 1>> <<He>> coos. - <<if $player.gender_appearance is "m">> + <<if $npc.length gt 0>> + <<for _iii to 0; _iii lt $npc.length; _iii++>> + <<if $genderknown.includes($npc[_iii])>> + <<set _genitalsknown to true>> + <</if>> + <</for>> + <</if>> + <<if $player.gender_appearance is "m" and ($player.penisExist or ($exposed lte 1 and !_genitalsknown))>> <<print [ - `"I can't wait to swallow your dick."`, - `"Just look at the effect you're having on me."`, - `"Like what you see?"`, + `"I can't wait to swallow your dick."`, + `"Just look at the effect you're having on me."`, + `"Like what you see?"`, + ][random(0,2)]>> + <<elseif $player.penisExist and ($exposed gte 2 or _genitalsknown)>> <!-- TRANSMOD I split this off into an elseif to avoid a rat's nest of parentheses --> + <<print [ + `"I can't wait to swallow your dick."`, + `"Just look at the effect you're having on me."`, + `"Like what you see?"`, ][random(0,2)]>> <<else>> <<print [ diff --git a/game/base-system/attitudes.twee b/game/base-system/attitudes.twee index 484a13226..95b7ceb27 100644 --- a/game/base-system/attitudes.twee +++ b/game/base-system/attitudes.twee @@ -86,7 +86,31 @@ <label><<checkbox "$uncomfortable.hypnosis" false true autocheck>> You're uncomfortable being hypnotised during sex. <i>If unchecked, you will accept hypnosis attempts during combat regardless of willpower.</i></label> <br> <</if>> - <br> + +<<if $player.trans is undefined>> + <<set $player.trans to "f">> +<</if>> +<<if $player.trans is "f">> +<br> +How do you feel about yourself? +<br> +<</if>> + <<if $player.trans is "f">> + <label><<print '<<checkbox "$player.trans" "f" "t" ' + ($player.trans ? "" : "checked") + '>>'>> You're trans. <span class="red">WARNING</span> cannot be undone if you leave this menu with the checkbox checked.</label> + <<if $player.trans is "t">> + <<if $player.gender is "m">> + <<earnFeat "Being a Trans Girl">> + <<elseif $player.gender is "f">> + <<earnFeat "Being a Trans Boy">> + <</if>> + <</if>> + <<if $player.trans is "t" and $crossdressingTrait gte 100>> + <<set $crossdressingTrait to 0>> + <<set $backgroundTraits.delete("crossdresser")>> + <</if>> + <</if>> +<br><br> + <<set _loveIntStart1 to $loveInterest.primary>> <<set _loveIntStart2 to $loveInterest.secondary>> diff --git a/game/base-system/bodywriting-objects.twee b/game/base-system/bodywriting-objects.twee index 012616b4a..351ef3491 100644 --- a/game/base-system/bodywriting-objects.twee +++ b/game/base-system/bodywriting-objects.twee @@ -2305,8 +2305,132 @@ gender: "n", lewd: 0, degree: 0 + }, + + girldick: { + index: 200, + writing: "Girldick", + type: "text", + arrow: 0, + special: "none", + gender: "f", + lewd: 1, + degree: 0 + }, + + girlcock: { + index: 201, + writing: "Girlcock", + type: "text", + arrow: 0, + special: "none", + gender: "f", + lewd: 1, + degree: 0 + }, + + suck_my_clit: { + index: 202, + writing: "Suck my clit", + type: "text", + arrow: 0, + special: "none", + gender: "f", + lewd: 1, + degree: 0 + }, + + boypussy: { + index: 203, + writing: "Boypussy", + type: "text", + arrow: 0, + special: "none", + gender: "m", + lewd: 1, + degree: 0 + }, + + bussy: { + index: 204, + writing: "Bussy", + type: "text", + arrow: 0, + special: "none", + gender: "m", + lewd: 1, + degree: 0 + }, + + man_hole: { + index: 205, + writing: "Man hole", + type: "text", + arrow: 0, + special: "none", + gender: "m", + lewd: 1, + degree: 0 + }, + + man_cave: { + index: 206, + writing: "Man cave", + type: "text", + arrow: 0, + special: "none", + gender: "m", + lewd: 1, + degree: 0 + }, + + male_box: { + index: 207, + writing: "Male box", + type: "text", + arrow: 0, + special: "none", + gender: "m", + lewd: 1, + degree: 0 + }, + + self_made_woman: { + index: 208, + writing: "Self-made woman", + type: "text", + arrow: 0, + special: "none", + gender: "f", + lewd: 0, + degree: 0 + }, + + self_made_man: { + index: 209, + writing: "Self-made man", + type: "text", + arrow: 0, + special: "none", + gender: "m", + lewd: 0, + degree: 0 + }, + + womb_tattoo: { + index: 210, + writing: "womb tattoo", + type: "object", + arrow: 0, + special: "pregnancy", + gender: "f", + lewd: 1, + degree: 0, + key: "womb_tattoo", + sprites: ["pubic"] } }>> + <<set setup.bodywriting_namebyindex to []>> <<for _label, _value range setup.bodywriting>> <<set setup.bodywriting_namebyindex[_value.index] to _label>> diff --git a/game/base-system/bodywriting.twee b/game/base-system/bodywriting.twee old mode 100755 new mode 100644 diff --git a/game/base-system/caption.twee b/game/base-system/caption.twee index 2c01f5997..30228d789 100644 --- a/game/base-system/caption.twee +++ b/game/base-system/caption.twee @@ -925,9 +925,9 @@ <<set _clothesType to "female">> <</if>> - <<if $background is "crossdresser">> - <<set _clothesType to (_clothesType is "male" ? "female" : "male")>> - <</if>> +<<if $background is "crossdresser" or $player.trans is "t">> + <<set _clothesType to (_clothesType is "male" ? "female" : "male")>> +<</if>> <div id="img" @class="'hair-'+ $hairselect + ' noAnimations'"> <<charLight "118px" "187px" "limited">> diff --git a/game/base-system/effects.twee b/game/base-system/effects.twee index 89dc7e847..e3a882ccb 100644 --- a/game/base-system/effects.twee +++ b/game/base-system/effects.twee @@ -676,7 +676,22 @@ <<if $sadism_message is "down 3">><<unset $sadism_message>> <span class="pink">You are no longer so sadistic, and can only be considered a <i>hardened sadist.</i></span> <</if>> - <<if $school_crossdress_message gte 5>> + <<if $school_crossdress_message gte 5 and $player.trans is "t">> + <<unset $school_crossdress_message>> + <span class="red">Everyone at school has heard that you're trans, including the teachers.</span> + <<elseif $school_crossdress_message gte 4 and $player.trans is "t">> + <<unset $school_crossdress_message>> + <span class="pink">Rumours about your gender have reached everyone at the school.</span> + <<elseif $school_crossdress_message gte 3 and $player.trans is "t">> + <<unset $school_crossdress_message>> + <span class="purple">The school is rife with gossip about a student who's supposedly having a sex change.</span> + <<elseif $school_crossdress_message gte 2 and $player.trans is "t">> + <<unset $school_crossdress_message>> + <span class="blue">Whispers that you crossdress or even that you're changing gender are spreading through the school.</span> + <<elseif $school_crossdress_message gte 1 and $player.trans is "t">> + <<unset $school_crossdress_message>> + <span class="lblue">A few cliques at school have begun questioning your gender.</span> + <<elseif $school_crossdress_message gte 5>> <<unset $school_crossdress_message>> <span class="red">Your crossdressing has become common knowledge at school. Everyone knows, including the teachers.</span> <<elseif $school_crossdress_message gte 4>> diff --git a/game/base-system/feats.twee b/game/base-system/feats.twee index 60374bed4..a56b84b41 100644 --- a/game/base-system/feats.twee +++ b/game/base-system/feats.twee @@ -458,13 +458,21 @@ <<if _args[0] is true>> /*Rarely occuring feats*/ <<if Time.days gte 50>> + <<if $player.trans is "t">><!-- TRANSMOD change --> <<if $player.gender is "m">> - <<earnFeat "Being a Boy">> + <<earnFeat "Being a Trans Girl">> <<elseif $player.gender is "f">> - <<earnFeat "Being a Girl">> - <<elseif $player.gender is "h">> - <<earnFeat "Being a Hermaphrodite">> + <<earnFeat "Being a Trans Boy">> <</if>> + <<elseif $player.trans isnot "t">> + <<if $player.gender is "m">> + <<earnFeat "Being a Boy">> + <<elseif $player.gender is "f">> + <<earnFeat "Being a Girl">> + <<elseif $player.gender is "h">> + <<earnFeat "Being a Hermaphrodite">> + <</if>> + <</if>> <<if Time.days gte 150>> <<earnFeat "Being an Orphan">> diff --git a/game/base-system/images.twee b/game/base-system/images.twee index 37772f645..313989bbd 100644 --- a/game/base-system/images.twee +++ b/game/base-system/images.twee @@ -788,6 +788,10 @@ <<icon "history.png">> <</widget>> +<<widget "clubicon">> + <<icon "rainbow_club.png">> +<</widget>> + <<widget "mathicon">> <<icon "math.png">> <</widget>> diff --git a/game/base-system/mirror.twee b/game/base-system/mirror.twee index b9570896e..fb4274746 100644 --- a/game/base-system/mirror.twee +++ b/game/base-system/mirror.twee @@ -1034,10 +1034,10 @@ <<set _bodyWritingOptions["Love Interests"]["Robin's Protector"] to "robins_protector">> <<set _bodyWritingOptions["Love Interests"]["Robin & I"] to "robin_and_i">> <<set _bodyWritingOptions["Love Interests"]["The Orphan Lover"] to "the_orphan_lover">> - <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Robin's Boyfriend"] to "robins_boyfriend">> <</if>> - <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Robin's Girlfriend"] to "robins_girlfriend">> <</if>> <</if>> @@ -1045,10 +1045,10 @@ <<set _bodyWritingOptions["Love Interests"]["Whitney's Pet"] to "whitneys_pet">> <<set _bodyWritingOptions["Love Interests"]["Property of Whitney"] to "property_of_whitney">> <<set _bodyWritingOptions["Love Interests"]["Whitney's Toy"] to "whitneys_toy">> - <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Whitney's Boyslut"] to "whitneys_boyslut">> <</if>> - <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Whitney's Slut"] to "whitneys_slut">> <</if>> <</if>> @@ -1067,10 +1067,10 @@ <<if $dateCount.Avery gte 3 and $NPCName[$NPCNameList.indexOf("Avery")].state isnot "dismissed">> <<set _bodyWritingOptions["Love Interests"]["Avery's Trophy"] to "averys_trophy">> <<set _bodyWritingOptions["Love Interests"]["Endearing"] to "endearing">> - <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Uptown Boy"] to "uptown_boy">> <</if>> - <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Uptown Girl"] to "uptown_girl">> <</if>> <<set _bodyWritingOptions["Love Interests"]["Avery's Monopoly"] to "averys_monopoly">> @@ -1079,10 +1079,10 @@ <<set _bodyWritingOptions["Love Interests"]["Alex's Partner"] to "alexs_partner">> <<set _bodyWritingOptions["Love Interests"]["Sunrise to Sunset"] to "sunrise_to_sunset">> <<set _bodyWritingOptions["Love Interests"]["Hay Baler"] to "hay_baler">> - <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.penisExist or $player.gender_appearance is "m" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Cowboy"] to "cowboy">> <</if>> - <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser"))>> + <<if ($player.vaginaExist or $player.gender_appearance is "f" or $backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set _bodyWritingOptions["Love Interests"]["Cowgirl"] to "cowgirl">> <</if>> <</if>> @@ -1110,6 +1110,22 @@ <<set _bodyWritingOptions["Love Interests"]["Terror's Mate"] to "terrors_mate">> <<set _bodyWritingOptions["Love Interests"]["Free Bird"] to "free_bird">> <</if>> + <<if $player.trans is "t">> + <<set _bodyWritingOptions["Trans"] to {}>> + <<if $player.gender is "m" and $player.trans is "t">> + <<set _bodyWritingOptions["Trans"]["Girldick"] to "girldick">> + <<set _bodyWritingOptions["Trans"]["Girlcock"] to "girlcock">> + <<set _bodyWritingOptions["Trans"]["Suck my clit"] to "suck_my_clit">> + <<set _bodyWritingOptions["Trans"]["Self-made woman"] to "self_made_woman">> + <<elseif $player.gender is "f" and $player.trans is "t">> + <<set _bodyWritingOptions["Trans"]["Boypussy"] to "boypussy">> + <<set _bodyWritingOptions["Trans"]["Bussy"] to "bussy">> + <<set _bodyWritingOptions["Trans"]["Man hole"] to "man_hole">> + <<set _bodyWritingOptions["Trans"]["Man cave"] to "man_cave">> + <<set _bodyWritingOptions["Trans"]["Male box"] to "male_box">> + <<set _bodyWritingOptions["Trans"]["Self-made man"] to "self_made_man">> + <</if>> + <</if>> <<if $debug is 1>> <<set _bodyWritingOptions["Debug"] to setup.bodywriting>> <<set _debugBodywritingOptionsKeys to Object.keys(setup.bodywriting)>> diff --git a/game/base-system/overlays/characteristics.twee b/game/base-system/overlays/characteristics.twee index 913e7ee0a..10cb9392c 100644 --- a/game/base-system/overlays/characteristics.twee +++ b/game/base-system/overlays/characteristics.twee @@ -47,8 +47,10 @@ a<<if $NudeGenderDC lt 0 and $player.gender_posture is "n">>n<</if>> <</if>> <</if>> - <<if $NudeGenderDC gte 0>> - <<gender>>. + <<if $NudeGenderDC gte 0 and $player.trans is "f">> + <<gender>> + <<elseif $player.trans is "t">> + <<trans_gender>> <!-- TRANSMOD change --> <<else>> <<gender_posture>>. <</if>> diff --git a/game/base-system/overlays/social.twee b/game/base-system/overlays/social.twee index 505994380..0692e0ed4 100644 --- a/game/base-system/overlays/social.twee +++ b/game/base-system/overlays/social.twee @@ -212,7 +212,7 @@ <<set _studentBoxConfig = { name : "Students", icon : "img/misc/icon/schoolnew.png", description: "<<relation-text _studentRepConfig>> <<statbarinverted $cool $coolmax>>"}>> /*Crossdressing*/ - <<if $schoolrep.crossdress neq 0>> + <<if $schoolrep.crossdress neq 0 and $player.trans isnot "t">> <<set _crossdressRepConfig = { currentValue: $schoolrep.crossdress, states : [ { requiredValue: 1, color: 'lblue', description: 'A few cliques at school whisper amongst themselves about your crossdressing ways. Few believe it.'}, { requiredValue: 2, color: 'blue', description: 'A rumour has taken root at school. Some say you\'re a crossdresser.'}, @@ -235,6 +235,18 @@ <<set _hermBoxConfig = { name : "Genitalia", description : '<<relation-text _hermRepConfig>>'}>> <</if>> + /*Trans*/ + <<if $schoolrep.crossdress neq 0 and $player.trans is "t">> + <<set _transRepConfig = { currentValue: $schoolrep.crossdress, states : [ + { requiredValue: 1, color: 'lblue', description: 'A few cliques at school speculate in whispers about your gender. Few take it seriously.'}, + { requiredValue: 2, color: 'blue', description: 'A rumour has taken root at school. Some say you\'re a crossdresser, or even that you\'re trans.'}, + { requiredValue: 3, color: 'purple', description: 'Students gossip about whether you\'re getting a sex change, though most think it only a joke.'}, + { requiredValue: 4, color: 'pink', description: 'Everyone at school has heard the rumours about you supposedly getting a sex change.'}, + { requiredValue: 5, color: 'red', description: 'Everyone at school knows that you\'re trans, including the teachers.'} + ]}>> + <<set _transBoxConfig = { name : "Transgender", description : '<<relation-text _transRepConfig>>'}>> + <</if>> + /* Prison */ <<if $prison>> <<set _prisonMoodConfig = { currentValue: $prison.hope, secondaryValue: $prison.reb, preText: 'The atmosphere in the prison is ', states : [ @@ -312,13 +324,16 @@ <<relation-box-simple _orphanageBoxConfig>> <<relation-box-simple _teacherBoxConfig>> <<relation-box-simple _studentBoxConfig>> - <<if $schoolrep.crossdress neq 0>> + <<if $schoolrep.crossdress neq 0 and $player.trans isnot "t">> <<relation-box-simple _crossdressBoxConfig>> <</if>> <<if $schoolrep.herm neq 0>> <<relation-box-simple _hermBoxConfig>> <</if>> - <<if $prison>> + <<if $schoolrep.crossdress neq 0 and $player.trans is "t">> + <<relation-box-simple _transBoxConfig>> + <</if>> + <<if $prison>> <<relation-box-simple _guardBoxConfig>> <<relation-box-simple _inmateBoxConfig>> <<relation-box-simple _prisonBoxConfig>> diff --git a/game/base-system/overlays/traits.twee b/game/base-system/overlays/traits.twee index 3bc9fea90..426b000fe 100644 --- a/game/base-system/overlays/traits.twee +++ b/game/base-system/overlays/traits.twee @@ -58,6 +58,18 @@ has: $backgroundTraits.includes("crossdresser") and $player.gender is "f", text: "Stress decays faster while dressed as a boy, but slower when dressed as a girl.", }, + { + name: "Trans Girl", + colour: "pink", + has: $player.trans is "t" and $player.gender is "m", + text: "Stress decays slower when dressed as a boy or when your <<genitals>> is exposed.", + }, + { + name: "Trans Boy", + colour: "lblue", + has: $player.trans is "t" and $player.gender is "f", + text: "Stress decays slower when dressed as a girl or when your <<genitals>> is exposed.", + }, { name: "Lustful", colour: "lewd", @@ -169,12 +181,12 @@ { name: () => { if(V.player.gender_appearance is "m"){ - if(V.player.gender is "f"){ + if(V.player.gender is "f" and V.player.trans is "f"){ return "Bull boy (female)"; } return "Bull boy"; }else{ - if(V.player.gender is "m"){ + if(V.player.gender is "m" and V.player.trans is "f"){ return "Cow girl (male)"; } return "Cow girl"; @@ -193,12 +205,12 @@ { name: () => { if(V.player.gender_appearance is "m"){ - if(V.player.gender is "f"){ + if(V.player.gender is "f" and V.player.trans is "f"){ return "Fox (female)"; } return "Fox"; }else{ - if(V.player.gender is "m"){ + if(V.player.gender is "m" and V.player.trans is "f"){ return "Vixen (male)"; } return "Vixen"; @@ -262,12 +274,12 @@ { name: () => { if(V.player.gender_appearance is "m"){ - if(V.player.gender is "f"){ + if(V.player.gender is "f" and V.player.trans is "f"){ return "Incubus (female)"; } return "Incubus"; }else{ - if(V.player.gender is "m"){ + if(V.player.gender is "m" and V.player.trans is "f"){ return "Succubus (male)"; } return "Succubus"; diff --git a/game/base-system/settings.twee b/game/base-system/settings.twee index 23b894a47..dd1895b23 100644 --- a/game/base-system/settings.twee +++ b/game/base-system/settings.twee @@ -3,7 +3,10 @@ <<widget "initsettings">> <<set $player.gender to "f">> <<set $player.sex to "f">> - <<set $player.gender_body to "a">> + <<set $player.trans to "f">> + <<set $player.surgery to "f">> + <<set $surgeryToggle to "f">> +<<set $player.gender_body to "a">> <<set $player.ballsExist to false>> <<set $player.freckles to false>> <<set $player.breastsize to 0>> @@ -905,10 +908,12 @@ <div class="settingsToggleItem"> <div class="playergender"> - <span class="gold">Gender:</span><br> + <span class="gold">Sex:</span><br> <label>Male <<radiobutton "$player.gender" "m" autocheck>></label> | <label>Female <<radiobutton "$player.gender" "f" autocheck>></label> | <label>Hermaphrodite <<radiobutton "$player.gender" "h" autocheck>></label> + <br> + <label data-target="player.gender" data-disabledif="V.player.gender==='h'"><<checkbox "$player.trans" "f" "t" autocheck>> Character is transgender (trans girl if male is selected above, or trans boy if female is selected above). Does nothing for hermaphrodites.</label> </div> </div> @@ -919,9 +924,9 @@ <label>Androgynous <<radiobutton "$player.gender_body" "a" autocheck>></label> </div> - <<if $debug is 1>> + <<if $surgeryToggle is "t">> <div class="settingsToggleItem"> - <span class="gold">Sex:</span><br> + <span class="gold">Genitals:</span><br> <label>Penis <<radiobutton "$player.sex" "m" autocheck>></label> | <label>Vagina <<radiobutton "$player.sex" "f" autocheck>></label> </div> @@ -1125,7 +1130,12 @@ <br> <label><span class="lewd">Beautiful</span> <<radiobutton "$background" "beautiful" autocheck>> - You turn heads. <i>Not recommended for beginners.</i></label> <br> - <label data-target="player.gender" data-disabledif="V.player.gender==='h'"><span class="lewd">Crossdresser</span> <<radiobutton "$background" "crossdresser" autocheck>> - You've taken a liking to the clothing of the opposite sex. Does nothing for hermaphrodites.</label> + <label><span class="lewd">Crossdresser</span> + <label data-target="player.gender" data-disabledif="V.player.gender==='h'"> + <label data-target="player.trans" data-disabledif="V.player.trans==='t'"> <<radiobutton "$background" "crossdresser" autocheck>> - You've taken a liking to the clothing of the opposite sex. Does nothing for hermaphrodites or transgender characters. + </label> + </label> + </label> <br> <label><span class="lewd">Lustful</span> <<radiobutton "$background" "lustful" autocheck>> - Arousal increases over time, and needs to be managed.</label> /*<br> @@ -1319,6 +1329,23 @@ <<checkbox "$statdisable" "f" "t" autocheck>> <mouse class = "tooltip linkBlue">Enable blind stats<span>Playing with blind stats enabled means that you'll receive no indication when your stats change, or what skills are required to succeed in certain events. Survive on your intuition. <i class="red normal"><br>Not recommended for beginners. This is an experimental feature and may be changed or removed in the future.</i></span></mouse> </label> </div> + + <div class="settingsToggleItem"> + <span class="gold">Surgery Settings</span> + <br> + <<if $surgeryToggle is "f">> + <label> + <<checkbox "$surgeryToggle" "f" "t" autocheck>> If checked, will allow trans characters to get genital surgery. This feature is untested and will more than likely break things. Backing up save recommended. <span class="red">Cannot be unset, use at own risk</span> + </label> + <</if>> + </div> + + <div class="settingsToggleItem"> + <span class="gold">Slur Toggle</span> + <label> + <<checkbox "$slurToggle" "f" "t" autocheck>> If checked, will replace usage of slurs with alternate dialog. + </label> + </div> <div class="settingsToggleItemWide"> <span class="gold">Randomise:</span><br> diff --git a/game/base-system/text.twee b/game/base-system/text.twee index ae5be00d7..cf454dcac 100644 --- a/game/base-system/text.twee +++ b/game/base-system/text.twee @@ -1633,6 +1633,14 @@ <</switch>> <</silently>><<print _text_output>><</widget>> +<<widget "trans_gender">><<silently>><!--TRANSMOD specific widget --> + <<switch $player.gender>> + <<case "f">><<if $player.trans is "t">><<set _text_output to "trans boy">><<else>><<set _text_output to "girl">><</if>> + <<case "m">><<if $player.trans is "t">><<set _text_output to "trans girl">><<else>><<set _text_output to "boy">><</if>> + <<case "h">><<set _text_output to "hermaphrodite">> + <</switch>> +<</silently>><<print _text_output>><</widget>> + <<widget "genitals_are">><<silently>> <<if _args[0] is undefined>> <<genitals>> diff --git a/game/base-system/time/time.js b/game/base-system/time/time.js index 78b6de3b1..396925f22 100644 --- a/game/base-system/time/time.js +++ b/game/base-system/time/time.js @@ -744,11 +744,11 @@ function hourPassed(hours) { function minutePassed(minutes) { const fragment = document.createDocumentFragment(); // Stress - // decay/rise and crossdresser trait - const isCrossdresser = V.backgroundTraits.includes("crossdresser"); - const isCrossdressing = V.player.gender !== V.player.gender_appearance && V.player.gender !== "h"; - if (V.controlled === 0 && V.anxiety >= 2) V.stress += minutes * ((isCrossdresser && !isCrossdressing) + 1); - else if (V.stress < V.stressmax && (V.controlled === 1 || V.anxiety === 0)) V.stress -= minutes * ((isCrossdresser && isCrossdressing) + 1); + const traitCheck = V.backgroundTraits.includes("crossdresser") || V.player.trans === "t"; + const traitFulfilled = (V.player.gender !== V.player.appearance && V.player.gender != "h" && (V.exposed < 2 || V.worn.genitals.type.includes("hidden"))); + // TRANSMOD Since I changed exposed genital weighting to make it possible to be perceived as a girl with a dick or a boy with a pussy, I added the extra condition of genital exposure for the effects of Crossdresser and Trans traits. + if (V.controlled === 0 && V.anxiety >= 2) V.stress += minutes * ((traitCheck && !traitFulfilled) + 1); + else if (V.stress < V.stressmax && (V.controlled === 1 || V.anxiety === 0)) V.stress -= minutes * ((traitCheck && traitFulfilled) + 1); parasiteProgressTime(minutes); parasiteProgressTime(minutes, "vagina"); diff --git a/game/base-system/transformations.twee b/game/base-system/transformations.twee index c446a94f1..3655b17fb 100644 --- a/game/base-system/transformations.twee +++ b/game/base-system/transformations.twee @@ -368,8 +368,8 @@ <<case 0>> <<if $angelbuild gte 25>> <<set $angel to 1>> - <<set $specialTransform to 1>> - <span class="gold">Despite everything, you have managed to remain a pure <<gender>>. The thought makes you happy.</span> + <<set $specialTransform to 1>><!--TRANSMOD change below --> + <span class="gold">Despite everything, you have managed to remain a pure <<if $player.trans is "t" and $player.gender is "m">>girl<<elseif $player.trans is "t" and $player.gender is "f">>boy<<else>><<gender>><</if>>. The thought makes you happy.</span> <br><br> <</if>> <<case 1>> diff --git a/game/base-system/widgets.js b/game/base-system/widgets.js index f9108e1b3..48b41da4b 100644 --- a/game/base-system/widgets.js +++ b/game/base-system/widgets.js @@ -274,10 +274,10 @@ function genderappearancecheck() { playerAwareTheyArePregnant() ? "Pregnant Belly" : "Pregnant Looking Belly" ); } else if (playerBellySize() >= 18) { - addfemininityfromfactor(Math.clamp(10000, 0, Infinity), playerAwareTheyArePregnant() ? "Pregnant Belly" : "Pregnant Looking Belly"); + addfemininityfromfactor(Math.clamp(1000, 0, Infinity), playerAwareTheyArePregnant() ? "Pregnant Belly" : "Pregnant Looking Belly"); } else if (playerBellySize() >= 8) { addfemininityfromfactor( - Math.clamp((playerBellySize() - 7) * 250, 0, Infinity), + Math.clamp((playerBellySize() - 7) * 50, 0, Infinity), playerAwareTheyArePregnant() ? "Pregnant Belly" : "Pregnant Looking Belly" ); } diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee index 743f4708a..81c225533 100644 --- a/game/base-system/widgets.twee +++ b/game/base-system/widgets.twee @@ -190,6 +190,199 @@ <<set $oxygen = Math.clamp($oxygen, 0, $oxygenmax)>> <</widget>> +<<widget "passwater">> + <<if $outside is 1 and $weather is "clear">> + <<if $upperwet gte 1>> + <<upperwet `($pass * -2)`>> + <</if>> + <<if $lowerwet gte 1>> + <<lowerwet `($pass * -2)`>> + <</if>> + <<if $underlowerwet gte 1>> + <<if $worn.lower.type.includes("naked")>> + <<underlowerwet `($pass * -2)`>> + <<else>> + <<underlowerwet `-$pass`>> + <</if>> + <</if>> + <<if $underupperwet gte 1>> + <<if $worn.upper.type.includes("naked")>> + <<underupperwet `($pass * -2)`>> + <<else>> + <<underupperwet `-$pass`>> + <</if>> + <</if>> + <<elseif $outside is 1 and $weather is "rain" and !$worn.head.type.includes("rainproof")>> + <<if !$worn.upper.type.includes("naked") and !waterproofCheck($worn.upper) and !waterproofCheck($worn.over_upper)>> + <<upperwet $pass>> + <</if>> + <<if !$worn.lower.type.includes("naked") and !waterproofCheck($worn.lower) and !waterproofCheck($worn.over_lower)>> + <<lowerwet $pass>> + <</if>> + <<if !$worn.under_lower.type.includes("naked") and !waterproofCheck($worn.under_lower) and !waterproofCheck($worn.lower) and !waterproofCheck($worn.over_lower)>> + <<underlowerwet $pass>> + <</if>> + <<if !$worn.under_upper.type.includes("naked") and !waterproofCheck($worn.under_upper) and !waterproofCheck($worn.upper) and !waterproofCheck($worn.over_upper)>> + <<underupperwet $pass>> + <</if>> + <<else>> + <<if $upperwet gte 1>> + <<upperwet `-$pass`>> + <</if>> + <<if $lowerwet gte 1>> + <<lowerwet `-$pass`>> + <</if>> + <<if $underlowerwet gte 1>> + <<underlowerwet `-$pass`>> + <</if>> + <<if $underupperwet gte 1>> + <<underupperwet `-$pass`>> + <</if>> + <</if>> + /* Commented out, new system is the "passArousalWetness" widget + <!-- Soak underwear if vagina is wet enough --> + <<if $vaginaWetness gte 60 and !$worn.under_lower.type.includes("naked") and !$worn.under_lower.type.includes("swim")>> + <<set $underlowerwet += Math.log10($vaginaWetness - 59) * 2 * $pass>><!-- 59 is to have at minimum log10(1) and not log10(0), which is NaN --> + <<set $pantiesSoaked to ($underlowerwet gte 100)>> + <!-- Wetness accumulates at vaginaWetness >= 63 (or at >= 70 in direct sunlight), otherwise it dries out faster than it soaks. + At maximum wetness (90, drenched) panties become damp in 25 minutes and soaked in 50 min, at 65 wetness - damp in 1.5 hours and soaked in 3h--> + <</if>> + */ +<</widget>> + +<<widget "passArousalWetness">> + <<if $player.vaginaExist>> + <<set $_wetnessChange to 0>> + <<set $_arousalPercent to Math.clamp($arousal / $arousalmax, 0, 1)>> + + <!-- Vaginal lube is produced at a fairly linear rate, between 1-3 per minute based on arousal. --> + <<if $arousal gte $arousalmax * (2/5)>> + <<set $_wetnessChange to 1 + ($_arousalPercent * 2)>> + <!-- It also gets harder to build up the closer you get to full wetness --> + <<set $_wetnessPercent to Math.clamp($vaginaArousalWetness / 100, 0, 1)>> + <<set $_wetnessChange to Math.floor($_wetnessChange * 2 * (1 - $_wetnessPercent))>> + <</if>> + + <!-- It dries up at a gradually increasing rate, starting at 0.1 per minute, but increasing the longer it's been since last arousal. --> + <!-- It also dries slower at high arousal, in an inverse relationship. --> + <<set $_wetnessChange -= 0.1 * $timeSinceArousal * (1-$_arousalPercent)>> + + <!-- If wetnessChange would go negative, and arousal is high enough, wetness instead does not change. --> + <<if $arousal gte $arousalmax * (3/5) and $_wetnessChange lt 0>> + <<set $_wetnessChange to 0>> + <</if>> + + <<set $vaginaArousalWetness += Math.round($_wetnessChange * $pass)>> + + <!-- Arbitrarily, we'll say that the player's vagina holds up to 60 units of lube, and it begins to leak out above 60. --> + <<if $vaginaArousalWetness gte 60>> + <<set $vaginaArousalWetness to Math.floor(120 - (3600/$vaginaArousalWetness))>> + + <!-- Clothing dries at a rate of -1 * $pass. To offset that, it needs to be wet by at least 1 * $pass. --> + <!-- Expected rate: between 1 and 2.61, usually around 1.8 --> + <<set $_change to 1 + Math.log10($vaginaArousalWetness - 59)>> + <<set $_change to Math.clamp($_change, 1, 3)>> + + <<if !$worn.under_lower.type.includes("naked") and !$worn.under_lower.type.includes("swim")>> + <<underlowerwet `Math.round($_change * $pass)`>> + <<underlowerwet `Math.clamp($underlowerwet, 0, 100 + $pass)`>> + <<set $pantiesSoaked to ($underlowerwet gte 100)>> + <</if>> + <!-- Commented out for now because the wetness messages aren't updated to account for it --> + /* <<if ($underlowerwet gte 100 or $worn.under_lower.type.includes("naked")) and !$worn.lower.type.includes("naked") and !$worn.lower.type.includes("swim")>> + <<set $lowerwet += Math.round($_change * $pass)>> + <</if>> */ + <</if>> + + <<set $vaginaArousalWetness to Math.clamp($vaginaArousalWetness, 0, 100)>> + <<vaginaWetnessCalculate>> + <</if>> +<</widget>> + +/* +<<widget "pass">> + <<if _args[1]>> + <<if _args[1].includes("h", 0)>> + <<set $pass to (_args[0]*60)>> + <<elseif _args[1].includes("d", 0)>> + <<set $pass to (_args[0]*1440)>> + <</if>> + <<elseif _args[0]>> + <<set $pass to _args[0]>> + <<else>> + <<set $pass to 0>> + <</if>> + <<pregProgressTime $pass>> + <<if $controlled is 0 and $anxiety gte 2>> + <<set $stress += $pass>> <!-- TRANSMOD Since I changed exposed genital weighting to make it possible to be perceived as a girl with a dick or a boy with a pussy, I added the extra condition of genital exposure for the effects of Crossdresser and Trans traits. --> + <<if ($backgroundTraits.includes("crossdresser") or $player.trans is "t") and (($player.gender is $player.gender_appearance) or ($exposed gte 2 and !$worn.genitals.type.includes("hidden"))) and $player.gender isnot "h">> + <<set $stress += $pass>> + <</if>> + <<elseif $controlled is 0 and $anxiety gte 1 or $stress gte $stressmax>> + <<else>> + <<set $stress -= $pass>> + <<if $backgroundTraits.includes("crossdresser") and (($player.gender isnot $player.gender_appearance) and $exposed lte 1) and $player.gender isnot "h" and $player.trans isnot "t">> + <<set $stress -= $pass>> + <</if>> + <</if>> + <<if $body_temperature is "cold">> + <<set $stress += ($pass * 2)>> + <<elseif $body_temperature is "chilly">> + <<set $stress += $pass>> + <</if>> + + <<if $hallucinogen gt 0>> + <<hallucinogen `-$pass`>> + <</if>> + <<if $drunk gt 0>> + <<tiredness $pass pass>> + <<alcohol `-$pass`>> + <<set $drunk to Math.clamp($drunk, 0, 1000)>> + <</if>> + <<if $drugged gt 0>> + <<drugs `-$pass`>> + <</if>> + + <<pain $pass -1>> + + <<if $pass gt 1200>> + <<set $tiredness to 0>> + <<else>> + <<tiredness $pass pass>> + <</if>> + <<set $time += $pass>><<set $minute += $pass>> + <<if $backgroundTraits.includes("lustful")>> + <<set _arousalMult to 0.2 * (12 - Math.floor($purity / 80)) + 1>> + <<if $purity lte 50>> + <<set _arousalMult++>> + <<set _arousalmax to 10000>> + <<else>> + <<set _arousalmax to 9000>> + <</if>> + <<arousal `_arousalMult * $pass`>><<arousalpass>> + <<else>> + <<arousal `$pass * -10`>><<arousalpass>> + <</if>> + <<if $arousal lt ($arousalmax / 4)>> + <<set $timeSinceArousal += $pass>> + <<else>> + <<set $timeSinceArousal to 1>> + <</if>> + <<if $player.vaginaExist>> + <<passArousalWetness>> + <</if>> + <<passwater>> + <<if $daystate is "day" and $weather is "clear" and $outside is 1 and $location isnot "forest" and !$worn.head.type.includes("shade")>> + <<if $season is "winter">> + <<tanned `$pass / 4`>> + <<elseif $season is "summer">> + <<tanned `$pass`>> + <<else>> + <<tanned `$pass / 2`>> + <</if>> + <</if>> +<</widget>> +*/ <<widget "virginitylosttext">> <<if $templePromised is _args[0]>> <span class="lblue">yet you remain pure.</span> @@ -2589,13 +2782,13 @@ <<widget "schoolspareclothes">> <<if !$worn.upper.type.includes("school") or !$worn.lower.type.includes("school") and $worn.upper.set is $worn.lower.set>> - <<upperwear 5>><<set $worn.upper.colour to either("black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow")>><<set $worn.upper.integrity /= 2>> + <<upperwear 5>><<set $worn.upper.colour to either("black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow")>>/*<<if $wardrobe_location isnot "clubRoom">>*/<<set $worn.upper.integrity /= 2>>/*<</if>>*/ <</if>> <<if !$worn.lower.type.includes("school")>> <<if $clothingselector is "m">> - <<lowerwear 6>><<set $worn.lower.colour to either("black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow")>><<set $worn.lower.integrity /= 2>> + <<lowerwear 6>><<set $worn.lower.colour to either("black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow")>>/*<<if $wardrobe_location isnot "clubRoom">>*/<<set $worn.upper.integrity /= 2>>/*<</if>>*/ <<else>> - <<lowerwear 7>><<set $worn.lower.colour to either("black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow")>><<set $worn.lower.integrity /= 2>> + <<lowerwear 7>><<set $worn.lower.colour to either("black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow")>>/*<<if $wardrobe_location isnot "clubRoom">>*/<<set $worn.upper.integrity /= 2>>/*<</if>>*/ <</if>> <</if>> <</widget>> diff --git a/game/overworld-forest/loc-lake/ivory/schism.twee b/game/overworld-forest/loc-lake/ivory/schism.twee index eff4e9a6a..21b9e63ba 100644 --- a/game/overworld-forest/loc-lake/ivory/schism.twee +++ b/game/overworld-forest/loc-lake/ivory/schism.twee @@ -592,7 +592,7 @@ You hold your necklace. <<effects>><<canvas-model-override "mouth" "neutral">> Someone's coming down. <<if $necklaceThief is "player">> - A <<if $real_playergender is "m">>boy<<else>>girl<</if>> with + A <<if $real_playergender is "m">>boy<<elseif $player.trans is "t">>girl<<else>>girl<</if>> with <<set _colour to $real_haircolour>> <<if $real_hairColourStyle == "gradient">> two-toned @@ -610,24 +610,24 @@ Someone's coming down. $real_eyecolour <</if>> <<if $real_angel gte 4>> - eyes, and a ring of light proudly circling <<if $real_playergender is "m">>his<<else>>her<</if>> head. + eyes, and a ring of light proudly circling <<if $real_playergender is "m">>his<<elseif $player.trans is "t">>her<<else>>her<</if>> head. <<elseif $real_fallenangel gte 2>> - eyes, and a shattered ring of light circling <<if $real_playergender is "m">>his<<else>>her<</if>> head. + eyes, and a shattered ring of light circling <<if $real_playergender is "m">>his<<elseif $player.trans is "t">>her<<else>>her<</if>> head. <<elseif $real_demon gte 2>> - eyes, and two baleful horns protruding from <<if $real_playergender is "m">>his<<else>>her<</if>> head. + eyes, and two baleful horns protruding from <<if $real_playergender is "m">>his<<elseif $player.trans is "t">>her<<else>>her<</if>> head. <<else>> eyes. <</if>> - You try to stop <<if $real_playergender is "m">>him<<else>>her<</if>>. You can't. + You try to stop <<if $real_playergender is "m">>him<<elseif $player.trans is "t">>her<else>>her<</if>>. You can't. <br><br> You yell. You scream. You cry. <br><br> - <<if $real_playergender is "m">>He<<else>>She<</if>> enters the plinth room. You can't follow. You wail. You claw at the walls. You churn the waves. + <<if $real_playergender is "m">>He<<elseif $player.trans is "t">>She<<else>>She<</if>> enters the plinth room. You can't follow. You wail. You claw at the walls. You churn the waves. <br><br> - <<if $real_playergender is "m">>He<<else>>She<</if>> takes it. It disappears from around your neck. + <<if $real_playergender is "m">>He<<elseif $player.trans is "t">>She<<else>>She<</if>> takes it. It disappears from around your neck. <<else>> A smooth, featureless mass in the shape of a person, with a harsh metal weight strapped to its back and face. It seeks to pilfer. You try to stop it. You can't. @@ -657,11 +657,11 @@ You scream. You float endlessly, clawing at your bare neck, sobbing, sulking, longing. <br><br> <<if $necklaceThief is "player">> - You hate <<if $real_playergender is "m">>him<<else>>her<</if>>. <<if $real_playergender is "m">>He<<else>>She<</if>> took the last thing you have. + You hate <<if $real_playergender is "m">>him<<elseif $player.trans is "t">>her<<else>>her<</if>>. <<if $real_playergender is "m">>He<<elseif $player.trans is "t">>She<<else>>She<</if>> took the last thing you have. <br><br> But that's okay. <br><br> - As long as you take everything from <<if $real_playergender is "m">>him<<else>>her<</if>>. + As long as you take everything from <<if $real_playergender is "m">>him<<elseif $player.trans is "t">>her<<else>>her<</if>>. <<else>> You hate them all. They took the last thing you have. <br><br> diff --git a/game/overworld-town/loc-cafe/main.twee b/game/overworld-town/loc-cafe/main.twee index 8b99b1bab..7688db843 100644 --- a/game/overworld-town/loc-cafe/main.twee +++ b/game/overworld-town/loc-cafe/main.twee @@ -1889,6 +1889,8 @@ The <<persons>> eyes visibly widen in shock as <<he>> stares at your bare <<geni From the look on <<his>> face it's clear <<he>> was not expecting you to <<if $player.penisExist and $player.vaginaExist>> have both a penis and pussy. + <<elseif $player.trans is "t">> + be a <<print ($player.gender is "m" ? "trans girl" : "trans boy")>>. <<else>> be a <<print ($player.gender is "m" ? "boy" : "girl")>>. <</if>> diff --git a/game/overworld-town/loc-danube-homes/work.twee b/game/overworld-town/loc-danube-homes/work.twee index 224865a7a..4adbb0129 100644 --- a/game/overworld-town/loc-danube-homes/work.twee +++ b/game/overworld-town/loc-danube-homes/work.twee @@ -1751,7 +1751,7 @@ You don't say much, but <<he>> seems content. <<elseif $phase is 3>> - <<if $player.gender is "m">> + <<if ($player.gender is "m" and $player.trans isnot "t") or ($player.gender is "f" and $player.trans is "t")>> You <<nervously>> remove your <<outfit>>, your feminine appearance making you exceptionally self-conscious. Once stripped down to your $worn.under_lower.name, you sit back at the table. Your exposure impacts <<his>> behaviour, <<he>> can't keep <<his>> eyes off you. diff --git a/game/overworld-town/loc-domus-homes/nude.twee b/game/overworld-town/loc-domus-homes/nude.twee index c73fb64cd..e11bb8fc5 100644 --- a/game/overworld-town/loc-domus-homes/nude.twee +++ b/game/overworld-town/loc-domus-homes/nude.twee @@ -30,7 +30,7 @@ You walk up to one of the homes and knock. <<fameexhibitionism 1>> <<link [[Ask for clothes|Domus House Beg]]>><<set $phase to 3>><</link>> <br> -<<elseif $rng gte 11 and !Time.schoolDay>> +<<elseif $rng gte 11 and !Time.schoolDay>> <!-- TRANSMOD-TODO Could perhaps stand to add more nuance to the event for the NPC getting a surprise? --> <<generatey1>><<person1>>A <<person>> answers the door. <<He>> looks shocked, then grins. "I know you from school," <<he>> says. <<if $player.penisExist and $player.vaginaExist and !playerChastity("hidden")>> <<if $schoolrep.herm gte 3>> @@ -39,6 +39,15 @@ You walk up to one of the homes and knock. "I never guessed you were..." <<He>> trails off and shakes <<his>> head. "You must be really embarrassed, huh?" <</if>> <<schoolrep herm 1>> + <<elseif $player.trans is "t" and !$worn.genitals.type.includes("hidden")>> + <<if $schoolrep.crossdress gte 3>> + "I guess the rumours about you are true. You must be really embarrassed, huh?" + <<elseif $schoolrep.crossdress gte 1>> + "Someone said you were trans, but I never thought it was true. You must be really embarrassed, huh?" + <<else>> + "I never guessed you were trans. You must be really embarrassed, huh?" + <</if>> + <<schoolrep crossdress 1>> <<elseif ($schoolrep.crossdress gte 1 or $backgroundTraits.includes("crossdresser")) and !playerChastity("hidden")>> <<if $schoolrep.crossdress gte 3>><!-- Crossdresser trait checked above to predict that the PC normally crossdresses at school if they have no rep --> "I guess the rumours about you are true. You must be really embarrassed, huh?" @@ -66,13 +75,14 @@ You walk up to one of the homes and knock. <<set $outside to 1>><<set $location to "town">><<effects>><<set $bus to "domus">> <<if $phase is 1>> <<if $rng gte 20>> - <<if $player.gender is "m">> + <<if $player.gender_appearance is "m">> <<set $clothingselector to "m">> "Very well then," <<he>> says. "I'll fetch some clothes." <br><br> <<link [[Get changed and leave (0:01)|Domus Street]]>><<spareclothesdomus>><<endevent>><<pass 1>><</link>> <br> <<else>> + <<set $clothingselector to "f">> "Very well then," <<he>> says. "I'll fetch some clothes." <br><br> <<link [[Get changed and leave (0:01)|Domus Street]]>><<spareclothesdomus>><<endevent>><<pass 1>><</link>> @@ -273,6 +283,7 @@ Running as fast as you can, you reach the house and hit the buzzer before turnin :: Widgets Spare Clothes Domus [widget] +<!-- TRANSMOD-TODO this is begging and perhaps should be more randomized? --> <<widget "spareclothesdomus">> <<if $player.gender_appearance is "m">> <<upperwear 4>><<set $worn.lower.colour to either("black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow")>><<set $worn.upper.integrity /= 2>> diff --git a/game/overworld-town/loc-domus-homes/work.twee b/game/overworld-town/loc-domus-homes/work.twee index 4678466fa..1d41681c8 100644 --- a/game/overworld-town/loc-domus-homes/work.twee +++ b/game/overworld-town/loc-domus-homes/work.twee @@ -688,10 +688,11 @@ You climb a ladder to reach the rooftop, and get to work clearing moss. <<if !playerChastity() and $worn.under_lower.vagina_exposed is 1>> <<if $player.penisExist and $player.vaginaExist>> You don't want people knowing you have both sets of gear, do you?" - <<elseif $player.gender_appearance isnot $player.gender>> + <<elseif $player.gender_appearance isnot $player.gender and $player.trans isnot "t">> You don't want people knowing you like dressing as a <<print ($player.gender_appearance is "m" ? "boy" : "girl")>>, do you?" + <<elseif $player.gender_appearance isnot $player.gender and $player.trans is "t">> + You don't want people knowing you're only a <<girl>> from the waist up, do you?" <<else>> - I'm sure there's lots of perverts who'd love to see your <<genitals>>." <</if>> <<else>> I'm sure there's lots of perverts who'd love some upskirt shots of you." @@ -1673,11 +1674,15 @@ The bathroom is <<print either("small","tiny","very clean")>>. <<lstress>><<stress -2>> <</if>> <br> - The few pictures produced are mostly just crude sketches of your + The few pictures produced are mostly just crude sketches of your <!--TRANSMOD double-check breast sizes? --> <<if $player.penisExist and $player.vaginaExist>> dick, cunt and ass, - <<elseif $player.gender is "f">> + <<elseif $player.vaginaExist and $player.breastsize gte 2>> tits and cunt, + <<elseif $player.vaginaExist and $player.breastsize lte 1>> + cunt, + <<elseif $player.breastsize gte 2>> + tits, dick and ass, <<else>> dick and ass, <</if>> diff --git a/game/overworld-town/loc-home/main.twee b/game/overworld-town/loc-home/main.twee index 4482a9294..78224c070 100644 --- a/game/overworld-town/loc-home/main.twee +++ b/game/overworld-town/loc-home/main.twee @@ -167,7 +167,7 @@ You are in your bedroom. <<deskText "noicon">> /* If project, study, or Christmas options are available, desk location appears here, in line with bed/wardrobe/etc locations */ - /* <<if $debug is 1>> + <<if $debug is 1>> <span class="green">Debugging starts here</span> <br> <<if $debugradio or $debugradio is undefined>> @@ -197,9 +197,11 @@ You are in your bedroom. <br> <<link [[Test new features for DoL (0:15)|Bedroom]]>><<pass 15>><</link>> <br> + <<link [[Test transmod features|Transmod Test]]>><</link>> + <br> <span class="green">Debugging end here</span> <br><br> - <</if>> */ + <</if>> /* Bed */ Your bed takes up most of the room. @@ -261,6 +263,11 @@ You are in your bedroom. <br> <<bloodmirroricon>><<link [[Mirror|Eerie Mirror]]>><<preMirror>><<set $daily.mirrorTentacles to 1>><<set $phase to 0>><</link>> <br> + <<elseif isBloodmoon() and $hallucinations gte 2 and $tentacledisable is "f" and $markAcquired is "f">> + <br> + <span class="purple">An ominous light shines from your mirror. </span><br><span class="lewd">You get the feeling something will happen if you go near it.</span> + <br> + <<bloodmirroricon>><<link [[Mirror|Ominous Mirror]]>><<preMirror>><</link>> <<else>> <<homemirroricon>><<link [[Mirror|Mirror]]>><<preMirror>><</link>> <br> @@ -1864,6 +1871,8 @@ Once finished, you look back up to Kylar. <<His>> eyes lock onto your body. A lo <<towelicon>><<link [[Wrap yourself in a towel|Bathroom]]>> <<if $player.gender == "f" or $player.breastsize > 0>> <<set $wear_upper = "large_towel">> + <<elseif $player.gender is "m" and $player.trans is "t">> + <<set $wear_upper = "large_towel">> <<else>> <<set $wear_lower = "towel">> <</if>> diff --git a/game/overworld-town/loc-home/mirror.twee b/game/overworld-town/loc-home/mirror.twee index 54aa0c8a8..d098925e8 100644 --- a/game/overworld-town/loc-home/mirror.twee +++ b/game/overworld-town/loc-home/mirror.twee @@ -150,4 +150,125 @@ You try to scream for help, <span class="pink">but the aphrodisiacs make it soun On being pulled through the mirror, you find yourself on an alien landscape. Giant tentacles writhe against the sky. <span class="red">An orgasm here could be dangerous.</span> <br><br> -<<link [[Next|Tentacle Plains]]>><<set $tentacleEntrance to "mirror">><</link>> \ No newline at end of file +<<link [[Next|Tentacle Plains]]>><<set $tentacleEntrance to "mirror">><</link>> + +:: Ominous Mirror + +You gaze into the mirror's surface. Light shines from the mirror's edges. You can peer inside. Several tentacles writhe below the surface. They seem to take notice of you, and push through the mirror into your room, the mirror's surface rippling like water as they do. +<br><br> +<<strip>> +They converge on you, stripping you of your clothes and binding your arms and legs. Another wraps itself around your neck and face, stifling you. You try to free yourself, but to no avail. The tentacles mangage to keep you suspended despite your flailing. +<br><br> +Another tentacle joins the others, glowing with an odd light. <span class="lewd">Something about this one is different than the others.</span> +<br> +<<if $skin.pubic.pen isnot "magic">>The glowing tentacle sprays a purple liquid on your pubic area. It wipes it away, revealing clear skin. <<if $skin.pubic.pen is "tattoo">>The removal of your tattoo takes you by surprise.<</if>><<bodywriting_clear pubic>><</if>> + +<br><br> +<<link [[Next|Ominous Mirror 2]]>><</link>> + +:: Ominous Mirror 2 + +<<set _target to 'none'>> + +More tentacles emerge from the mirror, winding themselves around your legs, rubbing against your inner thighs. <<arousal 200>><<garousal>> +<br> +Others work their way to your chest<<if $player.breastsize gte 1>> and around your <<breasts>><</if>>, flicking and teasing your <<nipples>>. <<arousal 200 "breasts">><<garousal>> +<br><br> +You feel the growing arousal pooling between your legs as they continue to touch and and tease your body. <<if $player.penisExist and $player.penissize gte 0>>Your <<penis>> begins to harden in response to the stimulation.<<elseif $player.penissize lte -1>>It's not enough yet to get you hard. <<elseif $player.gender is "h" and $player.penissize gte 0>> You feel your <<penis>> begin to harden and your <<pussy>> growing wet in response to the stimulation. <<elseif $player.gender is "h" and $player.penissize lte -1>>It's not enough yet to get you hard, but you feel your <<pussy>> growing wet in response to the stimulation. <<else>> You feel your <<pussy>> growing wet in response to the stimulation.<</if>> +<br><br> +<<if $player.penisExist and !$player.vaginaExist>> + <<if $analdisable is "f">> + The glowing tentacle moves closer to you, positioning itself at the entrance of your <<bottom>>, where it begins rubbing the entrance to your anus with its tip. the tentacles at your <<nipples>> begin sucking on them, twisting and tugging at them as they do so. The tentacles caressing your inner thighs inching closer to your <<genitals>> <<arousal 400>><<arousal 200 "anus">><<arousal 400 "breasts">><<garousal>><<set _target to 'anus'>> + <<else>> + The glowing tentacle moves closer to you, positioning itself near your <<penis>>, where it begins coiling around it, stroking its length. the tentacles at your <<nipples>> begin sucking on them, twisting and tugging at them as they do so. The tentacles caressing your inner thighs inching closer to your <<genitals>> <<arousal 400>><<arousal 200 "genitals">><<arousal 400 "breasts">><<garousal>><<set _target to 'penis'>> + <</if>> +<<elseif $player.penisExist and $player.vaginaExist>> + The glowing tentacle moves closer to you, positioning itself at the entrance of your <<pussy>>, where it begins rubbing at your entrance and <<clit>> with its tip. the tentacles at your <<nipples>> begin sucking on them, twisting and tugging at them as they do so. The tentacles caressing your inner thighs inching closer to your <<genitals>> <<arousal 400>><<arousal 200 "genitals">><<arousal 400 "breasts">><<garousal>><<set _target to 'pussy'>> +<<else>> + The glowing tentacle moves closer to you, positioning itself at the entrance of your <<pussy>>, where it begins rubbing at your entrance and <<clit>> with its tip. the tentacles at your <<nipples>> begin sucking on them, twisting and tugging at them as they do so. The tentacles caressing your inner thighs inching closer to your <<genitals>> <<arousal 400>><<arousal 200 "genitals">><<arousal 400 "breasts">><<garousal>><<set _target to 'pussy'>> +<</if>> +<br><br> +After a while, the glowing tentacle changes tactics, <<if _target is 'penis'>>the tip opens up, and presses against the tip of your penis<<elseif _target is 'anus'>> it comes to a rest at the entrance to your anus, and presses against it<<elseif _target is 'pussy'>> it comes to a rest at the entrance to your <<pussy>>, and presses against it<</if>>. +<br><br> +<<link [[Next|Ominous Mirror 3]]>><</link>> + +:: Ominous Mirror 3 + +<<if $player.penisExist and !$player.vaginaExist>> + <<if $analdisable is "f">> + <<set _target to 'anus'>> + <<else>> + <<set _target to 'penis'>> + <<set $penisuse to 'tentacle'>> + <</if>> +<<else>> + <<set _target to 'pussy'>> +<</if>> + + +You buck your hips, trying to pull away from the tentacle attempting to <<if _target is 'anus' or _target is 'pussy'>>penetrate your <<if _target is 'anus'>><<bottom>>,<<elseif _target is 'pussy'>><<pussy>>,<</if>><<if _target is 'penis'>>engulf your <<penis>>,<</if>><</if>> but your attempts fail. +<br><br> +<<if _target is 'anus'>> + <<if $player.virginity.anal is true>> + <<takeVirginity "glowing tentacle" "anal">><<analstat>> + The tentacle thrusts deep into your <<bottom>>,<span class="red"> violating you in a way you hadn't conceived of.</span> <<arousal 1000 "bottom">><<ggarousal>> + <<else>> + the tentale thrusts deep into your <<bottom>>. <<arousal 1000 "bottom">><<ggarousal>> + <</if>> +<<elseif _target is 'pussy'>> + <<if $player.virginity.vaginal is true>> + <<takeVirginity "glowing tentacle" "vaginal">><<vaginalstat>> + The tentacle thrusts deep into your virgin <<pussy>>,<span class="red"> breaking your hymen, and </span><<virginitylosttext>><<fallenTransform>> <<arousal 1000 "genitals">><<ggarousal>> + <<else>> + The tentacle thrusts deep into your <<pussy>> <<arousal 1000 "genitals">><<ggarousal>> + <</if>> +<<elseif _target is 'penis'>> + <<if $player.virginity.penile is true>> + <<takeVirginity "glowing tentacle" "penile">><<penilestat>> + The tentacle thrusts against your <<penis>>, swallowing you to the base and <span class="red">tearing the membrane between your glans and foreskin, </span><<virginitylosttext>><<fallenTransform>> <<arousal 1000 "genitals">><<ggarousal>> + <<else>> + The tentacle thrusts against your <<penis>>, swallowing you to the base. <<arousal 1000 "genitals">><<ggarousal>> + <</if>> +<</if>> +<br> +<<if _target is 'anus'>> + The tentacle continues thrusting in and out of your <<bottom>>, teasing and caressing your prostate with its movements. All the while the other tentacles continue working your sensitive areas, eliciting stifled moans as their combined efforts begin to build up within you. <<arousal 400>><<arousal 2000 "anus">><<arousal 400 "breasts">><<ggarousal>> +<<elseif _target is 'pussy'>> + The tentacle continues thrusting in and out of your <<pussy>>, finding your sensitive spots while it rubs against your <<clit>> with each thrust. All the while, the other tentacles continue working your sensitive areas, eliciting stifled moans as their combined efforts begin to build up within you. <<arousal 400>><<arousal 2000 "genitals">><<arousal 400 "breasts">><<ggarousal>> +<<elseif _target is 'penis'>> + The tentacle continues working the length of your <<penis>>, swallowing you from tip to base, rubbing against your sensitive spots as it takes you in. All the while the other tentacles continue working your sensitive areas, eliciting stifled moans as their combined efforts begin to build up within you. <<arousal 400>><<arousal 2000 "genitals">><<arousal 400 "breasts">><<ggarousal>> +<</if>> +<br><br> +You feel an orgasm start to build as the tentacles keep up the pace, the pleasure increasing from your <<nipples>>, skin, <<if _target is 'anus'>>ass, and prostate<<elseif _target is 'pussy'>>and <<pussy>><<elseif _target is 'penis'>>and <<penis>><</if>>. As if sensing your nearing orgasm, they redouble their efforts, intensifying the sensations they coax from your body. You feel your skin begin to tingle as you reach the point of no return. The light from the glowing tentacle intensifies as you hit the apex. +<br><br> +<<orgasm>> +<br><br> +You scream into the tentacle wrapped around your mouth as the orgasm hits you. Your body feels like it's on fire as the wave washes through your body. You feel the tentacle ejaculate inside you as you cum. The intensity almost makes you feel like you're going to cum again as you ride out the orgasm. As your orgasm subsides, the mirror begins shining with a blinding light. + +<<if _target is 'anus'>> + <<analejacstat>> +<<elseif _target is 'pussy'>> + <<vaginalejacstat>> +<<elseif _target is 'penis'>> + <<penileejacstat>> +<</if>> + +<br><br> +<<link[[Next|Ominous Mirror End]]>><<clotheson>><<endcombat>><<if $fallenAngel gte 2>><<set $trauma to 0>><</if>><<add_bodywriting "pubic" "womb_tattoo" magic>><</link>> + +:: Ominous Mirror End + +You open your eyes, but the tentacles are nowhere to be seen. All you see is your own reflection, back in the clothes you wearing earlier. No sign of anything that had happened. +<br><br> +You begin examining your body, looking for evidence of what you'd experienced. You find nothing until you come across a glowing mark on you pubic area<<if $fallenAngel gte 2>>, the shattered halo, and black wings in your reflection<</if>>. <<if $fallenAngel gte 2>><<gggtrauma>><</if>> +<br><br> +you're unsure what to make of it. you prod it with a finger. <span class="lewd">You briefly feel an emptiness inside you.</span> You're unsure of what that means. +<br><br> +You poke at it some more, but the feeling does not return. Attempts to rub at the mark do nothing. The faint light it gives off appears to be coming from your skin, as unbelieveable as it seems. +<br><br> +Deciding that you won't get any further answers from this, you cover it back up, mind still full of questions. + +<<set $markAcquired to "t">> +<br><br> +<<link [[Step away|Bedroom]]>><<endevent>><</link>> + diff --git a/game/overworld-town/loc-hospital/main.twee b/game/overworld-town/loc-hospital/main.twee index 83c6e587d..79eedb868 100644 --- a/game/overworld-town/loc-hospital/main.twee +++ b/game/overworld-town/loc-hospital/main.twee @@ -155,7 +155,12 @@ You are inside the hospital foyer. <<if $psych is 1>>You see a sign directing to <<break>> <</if>> <</for>> + <<link[[Inquire about facial surgery (0:10)|Hospital Facial Surgery]]>><<pass 10>><</link>> <br> + <<if $surgeryToggle is "t">> + <<link[[Inquire about genital surgery (0:10)|Hospital Genital Surgery]]>><<pass 10>><</link>> + <</if>> + <br><br> <<pillicon>><<link [[Pharmacy (0:02)|Pharmacy]]>><<pass 2>><</link>> <br><br> @@ -374,10 +379,11 @@ You've pushed yourself too much. <<set $worn.face.type.push("broken")>> <<faceruined>> <</if>> +<!-- TRANSMOD-TODO? I don't know that adding a scene to protest what clothes you're given would add anything compared to just assuming the hospital gave the PC the clothes they want, but could add code for that --> <<if $exposed gte 1>> - <<if $player.gender is "m" and $backgroundTraits.includes("crossdresser")>> - <<set $clothingselector to "f">><!-- PCs with Crossdresser trait are only PC type with a specific known clothing preference and can presumably ask for it here --> - <<elseif $player.gender is "f" and $backgroundTraits.includes("crossdresser")>> + <<if $player.gender is "m" and ($backgroundTraits.includes("crossdresser") or $player.trans is "t")>> + <<set $clothingselector to "f">><!-- Trans and obligate CD PCs have a specific known clothing preference and can presumably ask for it here --> + <<elseif $player.gender is "f" and ($backgroundTraits.includes("crossdresser") or $player.trans is "t")>> <<set $clothingselector to "m">> <<else>> <<set $clothingselector to $player.gender_appearance>> @@ -1476,6 +1482,269 @@ You remove your clothing and stand waiting, feeling more than a little exposed. <<link [[Next|Hospital Penis Done]]>><</link>> <br> +:: Hospital Facial Surgery +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +<<generate1>><<person1>> +The receptionist taps something into <<his>> computer and instructs you to take a seat in the waiting room. +<br><br> +<<endevent>> + +<<harper_intro>> + +"This is a very simple procedure." <<He>> pulls a chart of facial types from <<his>> desk. "You're about here." <<He>> points at a picture labelled <span class="lewd"> + <<if $player.gender_body is "m">> + "Masculine". + <<elseif $player.gender_body is "f">> + "Feminine" + <<else>> + "Androgynous." + <</if>> +</span> +<br><br> + +<<if $player.gender_body is "m">> + <<link [[Make your natural features feminine|Hospital Facial Surgery 2]]>><<set $phase to 1>><</link>> + <br> + <<link [[Make your natural features androgynous|Hospital Facial Surgery 2]]>><<set $phase to 3>><</link>> + <br> +<</if>> +<<if $player.gender_body is "f">> + <<link [[Make your natural features masculine|Hospital Facial Surgery 2]]>><<set $phase to 2>><</link>> + <br> + <<link [[Make your natural features androgynous|Hospital Facial Surgery 2]]>><<set $phase to 3>><</link>> + <br> +<</if>> +<<if $player.gender_body is "a">> + <<link [[Make your natural features feminine|Hospital Facial Surgery 2]]>><<set $phase to 1>><</link>> + <br> + <<link [[Make your natural features masculine|Hospital Facial Surgery 2]]>><<set $phase to 2>><</link>> + <br> +<</if>> +<br> + +<<link [[Leave|Hospital Foyer]]>><<endevent>><</link>> +<br> + +:: Hospital Facial Surgery 2 +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +"This will cost <span class="gold">£<<print 15000>></span>," <<he>> says. "And take four hours." +<br><br> + +<<if $money gte 1500000>> + <<link [[Accept (4:00)|Hospital Facial Surgery 3]]>><<pass 4 hours>><</link>> + <br> +<<else>> + You can't afford it. + <br><br> +<</if>> + +<<link [[Leave|Hospital Foyer]]>><<endevent>><</link>> +<br> + +:: Hospital Facial Surgery 3 +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +<<set $money -= 1500000>> + +<<upperstrip>> +<<lowerstrip>> +<<underlowerstrip>> +<<underupperstrip>> +Harper accepts the payment. "Please undress," <<he>> says as <<he>> stands to leave the room. +You remove your clothing and stand waiting, feeling more than a little exposed. +<<if $worn.genitals.type.includes("chastity")>>You can't remove your $worn.genitals.name, you hope it won't be a problem.<</if>> +<<He>> soon returns, carrying a medical gown. +<br><br> + +"Wear this," <<he>> instructs. You put the gown on. "Right, if you'd like to come with me, it's just a short walk away." +<br><br> + +<<He>> leads you to another room, containing a small bed. "Please lie down. I'll put you under then move you to the theatre." You lie down. +<<He>> presses a mask against your face, and you feel your consciousness start to slip. <<He>> pulls a camera from <<his>> pocket as you pass out. +<br><br> + +<<fameexhibitionism 10 "pic">> + +<<link [[Next|Hospital Facial Surgery Done]]>><</link>> +<br> + +:: Hospital Facial Surgery Done +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +<<if $phase is 1>> + <<set $player.gender_body to "f">> +<<elseif $phase is 2>> + <<set $player.gender_body to "m">> +<<elseif $phase is 3>> + <<set $player.gender_body to "a">> +<</if>> + +You awaken in the same room you passed out in. You don't feel any different. Harper enters the room, carrying a small hand mirror. +<br><br> + +"The operation was a success," <<he>> says, holding the mirror up so you can take in your new, <<if $player.gender_body is "f">> feminine <<elseif $player.gender_body is "m">> masculine <<else>> androgynous <</if>> features. + +<<if $player.gender_body is "f">> + "You look very beautiful." +<<elseif $player.gender_body is "m">> + "You look very handsome." +<<elseif $player.gender_body is "a">> + "You look great." +<</if>> +<br><br> + +<<He>> checks <<his>> clipboard. "You can leave straight away. Be well." <<He>> leaves you to dress. +<br><br> + +<<endevent>> + +<<link [[Next|Hospital Foyer]]>><<clotheson>><</link>> +<br> + +:: Hospital Genital Surgery +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +<<generate1>><<person1>> +The receptionist taps something into <<his>> computer and instructs you to take a seat in the waiting room. +<br><br> +<<endevent>> + +<<harper_intro>> + +You don't have to wait long. Doctor Harper emerges from <<his>> office and beckons you over. You follow <<him>> in and take a seat. + +<<He>> hands you a brochure. "Sex reassignment is a very delicate procedure," <<he>> says as you begin to thumb through the pamphlet. It's filled with anatomical diagrams, definitions of assorted medical jargon, and pictures of Harper shaking hands with previous patients. +<<if $player.gender is "m">> +"Your medical records indicate that you currently have a male reproductive system. If you're interested, I could perform what's known as a vaginoplasty," <<he>> says, pointing at a relevant spot on the brochure. "In layman's terms, it would swap your male organs with female ones. I happen to be one of the best in the field, and my cutting-edge procedures produce results indistinguishable from the real thing." + +/*"Or, if you're interested in something a bit more exotic," <<he>> says, tapping a small paragraph hidden away on the back of the brochure, "there's another procedure I can perform. It's a bit experimental, but it's all above-board, I assure you. I could give you a female reproductive system, but you'd keep your male organs along with the new ones. You'd be indistinguishable from a natural-born hermaphrodite, but it's an extremely complicated and expensive procedure."*/ +<<elseif $player.gender is "f">> +"Your medical records indicate that you currently have a female reproductive system. If you're interested, I could perform what's known as a phalloplasty," <<he>> says, pointing at a relevant spot on the brochure. "In layman's terms, it would swap your female organs with male ones. I happen to be one of the best in the field, and my cutting-edge procedures produce results indistinguishable from the real thing." + +/*"Or, if you're interested in something a bit more exotic," <<he>> says, tapping a small paragraph hidden away on the back of the brochure, "there's another procedure I can perform. It's a bit experimental, but it's all above-board, I assure you. I could give you a male reproductive system, but you'd keep your female organs along with the new ones. You'd be indistinguishable from a natural-born hermaphrodite, but it's an extremely complicated and expensive procedure." + +"Your medical records indicate that you currently have a hermaphroditic reproductive system. If you're interested, I could remove either your male or female anatomy. I happen to be one of the best in the field, and my cutting-edge procedures produce such clean results that not even a forensic pathologist would be able to tell you used to have both." +*/ +<</if>> +"It would be £20000 to become the opposite sex/*, or £50000 to become a hermaphrodite*/. And it would take around four hours." +/* "It would be £20000 for the [vaginoplasty / phalloplasty], or £50000 for the hermaphroditism surgery. And it would take around four hours." +"It would be £20000 for me to remove one of your sets of sexual organs. And it would take around four hours." */ + +<<if $player.gender is "m" and !$worn.genitals.type.includes("chastity")>> + <<link [[Get Vaginoplasty surgery|Hospital Genital Surgery 2]]>><<set $phase to 1>><</link>> + <br> + /*<<link [[Get combined surgery|Hospital Facial Surgery 2]]>><<set $phase to 3>><</link>>*/ + <br> +<</if>> +<<if $player.gender is "f" and !$worn.genitals.type.includes("chastity")>> + <<link [[Get Phalloplasty surgery|Hospital Genital Surgery 2]]>><<set $phase to 2>><</link>> + <br> + /*<<link [[Get combined surgery|Hospital Facial Surgery 2]]>><<set $phase to 3>><</link>>*/ + <br> +<</if>> +/*<<if $player.gender_body is "a">> + <<link [[Make your natural features feminine|Hospital Facial Surgery 2]]>><<set $phase to 1>><</link>> + <br> + <<link [[Make your natural features masculine|Hospital Facial Surgery 2]]>><<set $phase to 2>><</link>> + <br> +<</if>>*/ +<br> + +<<if $worn.genitals.type.includes("chastity")>> +you can't get surgery while you're wearing chastity. +<</if>> + +<<link [[Leave|Hospital Foyer]]>><<endevent>><</link>> +<br> + +:: Hospital Genital Surgery 2 +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +"This will cost <span class="gold">£<<print 20000>></span>," <<he>> says. "And take four hours." +<br><br> + +<<if $money gte 2000000>> + <<link [[Accept (4:00)|Hospital Genital Surgery 3]]>><<pass 4 hours>><</link>> + <br> +<<else>> + You can't afford it. + <br><br> +<</if>> + +<<link [[Leave|Hospital Foyer]]>><<endevent>><</link>> +<br> + +:: Hospital Genital Surgery 3 +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +<<set $money -= 2000000>> + +<<upperstrip>> +<<lowerstrip>> +<<underlowerstrip>> +<<underupperstrip>> +Harper accepts the payment. "Please undress," <<he>> says as <<he>> stands to leave the room. +You remove your clothing and stand waiting, feeling more than a little exposed. +<<He>> soon returns, carrying a medical gown. +<br><br> + +"Wear this," <<he>> instructs. You put the gown on. "Right, if you'd like to come with me, it's just a short walk away." +<br><br> + +<<He>> leads you to another room, containing a small bed. "Please lie down. I'll put you under then move you to the theatre." You lie down. +<<He>> presses a mask against your face, and you feel your consciousness start to slip. <<He>> pulls a camera from <<his>> pocket as you pass out. +<br><br> + +<<fameexhibitionism 10 "pic">> + +<<link [[Next|Hospital Genital Surgery Done]]>><</link>> +<br> + +:: Hospital Genital Surgery Done +<<set $outside to 0>><<set $location to "hospital">><<effects>> + +<<if $phase is 1>> + <<set $player.surgery to "t">> + <<set $player.penisExist to false>> + <<set $player.ballsExist to false>> + <<set $player.vaginaExist to true>> + <<set $vaginastate to 0>> + <<set $penisstate to "none">> + <<set $vaginause to 0>> + <<set $penisuse to "none">> +<<elseif $phase is 2>> + <<set $player.surgery to "t">> + <<set $player.penisExist to true>> + <<set $player.ballsExist to true>> + <<set $player.vaginaExist to false>> + <<set $vaginastate to "none">> + <<set $penisstate to 0>> + <<set $vaginause to "none">> + <<set $penisuse to 0>> +/*<<elseif $phase is 3>> + <<set $player.gender_body to "a">>*/ +<</if>> + +You awaken in the same room you passed out in. You don't feel any different until you look down and see your brand-new <<if $player.vaginaExist is true>>pussy<<else>>dick<</if>>. Harper enters the room. +<br><br> +/*You awaken in the same room you passed out in. You don't feel any different until you look down and realize your [dick / pussy] is gone. Harper enters the room.*/ +<<if $player.vaginaExist is true>> +"The operation was a success," <<he>> says. "Now, as I mentioned previously, that thing's the real deal. That means you're both fertile and will begin to have menstrual cycles. If you need birth control, you can buy it at the pharmacy." +<<else>> +"The operation was a success," <<he>> says. "Now, as I mentioned previously, that thing's the real deal. That means you're potent, and will begin producing semen just like anyone else who has one. If you need condoms, you can buy them at the pharmacy." +<</if>> +<br><br> + +<<He>> checks <<his>> clipboard. "You can leave straight away. Be well." <<He>> leaves you to dress. +<br><br> + +<<endevent>> + +<<link [[Next|Hospital Foyer]]>><<clotheson>><</link>> +<br> + :: Hospital Tattoo Removal <<effects>> diff --git a/game/overworld-town/loc-market/widgets.twee b/game/overworld-town/loc-market/widgets.twee index 757f2acb8..54794947d 100644 --- a/game/overworld-town/loc-market/widgets.twee +++ b/game/overworld-town/loc-market/widgets.twee @@ -3,7 +3,7 @@ <<if $stress gte $stressmax>> <<passoutstreet>> <<elseif $worn.upper.type.includes("naked") and $player.gender_appearance is "f">> - <<if $player.gender is "m">> + <<if ($player.gender is "m" and $player.trans isnot "t") or ($player.gender is "f" and $player.trans is "t")>> You can't do this with your <<breasts>> on display. Not while looking like a girl. You duck and run. <<else>> You can't do this with your <<breasts>> on display. You duck and run. diff --git a/game/overworld-town/loc-police/community.twee b/game/overworld-town/loc-police/community.twee index 11806b7c5..784e6df14 100644 --- a/game/overworld-town/loc-police/community.twee +++ b/game/overworld-town/loc-police/community.twee @@ -918,7 +918,7 @@ You tear the fabric away from the thorns. <<link [[Next|Police Community Wasteland Topless]]>><</link>> <br> <<else>> - <<if $player.gender is "f">> + <<if ($player.gender is "f" and $player.trans isnot "t") or ($player.gender is "m" and $player.trans is "t")>> You hear laughter, and catch the other criminals ogling, but they seem to think you're a boy.<<gstress>><<garousal>><<arousal 600>><<stress 6>> <br><br> <<else>> diff --git a/game/overworld-town/loc-school/changing-rooms-boys-events.twee b/game/overworld-town/loc-school/changing-rooms-boys-events.twee new file mode 100644 index 000000000..e69de29bb diff --git a/game/overworld-town/loc-school/changing-rooms-events.twee b/game/overworld-town/loc-school/changing-rooms-events.twee index b1b377d03..28d623bac 100644 --- a/game/overworld-town/loc-school/changing-rooms-events.twee +++ b/game/overworld-town/loc-school/changing-rooms-events.twee @@ -111,23 +111,81 @@ Some of the $changingRoomGender blush. The <<person>> seems less impressed. "I k The $changingRoomGender break into excitement as your <<genitals_are>> revealed. "I knew it," the <<person>> says, reaching forward to seize your clothes. "You're the school freak." <br><br> <<elseif $schoolrep.herm gte 3 and !$worn.face.type.includes("mask")>> - The $changingRoomGender break into excitement as they see your <<genitals>>. "You're the freak I keep hearing about," the <<person>> says, reaching forward to seize your clothes. "I didn't believe it." + The $changingRoomGender break into excitement as they see your <<genitals>>. "You're the <<if $player.gender_appearance is "f" and $slurToggle is "f">>shemale<<else>>freak<</if>> I keep hearing about," the <<person>> says, reaching forward to seize your clothes. "I didn't believe it." <br><br> <<else>> - The $changingRoomGender gape at your <<genitals>>, too stunned to speak. The <<person>> is first to shake free of <<his>> stupour. "You're a freak," <<he>> says as <<he>> seizes your clothes. + The $changingRoomGender gape at your <<genitals>>, too stunned to speak. The <<person>> is first to shake free of <<his>> stupour. "You're a <<if $player.gender_appearance is "f" and $slurToggle is "f">> tranny,"<<else>>freak,"<</if>> <<he>> says as <<he>> seizes your clothes. <br><br> <</if>> <<if $promiscuity gte 35>> <<link [[Seduce|School Changing Room Crossdress Seduce]]>><</link>><<promiscuous3>> <br> <</if>> - <<link [[Say that's just the way you are|School Changing Room Crossdress Honest]]>><</link>> + <<if $player.gender is "h" and $player.gender_appearance is "f">> + <<link [[Say you're trans|School Changing Room Crossdress Honest]]>><</link>> + <<else>> + <<link [[Say that's just the way you are|School Changing Room Crossdress Honest]]>><</link>> + <</if>> <br> <<link [[Blame a curse (0:05)|School Changing Room Herm Explain]]>><<set $phase to 0>><<pass 5>><<status -10>><</link>><<lcool>> <br> <<link [[Blame strange science (0:05)|School Changing Room Herm Explain]]>><<set $phase to 1>><<pass 5>><<status -10>><</link>><<lcool>> <br> <<schoolrep herm 1>> +<<elseif $player.trans is "t" and $player.gender is "m">> + <<if $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> + The boys break into excitement as your naked <<if $breastsize gte 1>><<breasts>><<else>>body<</if>> and <<genitals>> are revealed. "So the rumours are true," the <<person>> says, satisfied. "You really are half girl and half boy." + <<elseif $schoolrep.crossdress gte 3 and !$worn.face.type.includes("mask")>> + The boys break into excitement as they see your naked <<if $breastsize gte 1>><<breasts>><<else>>body<</if>> and <<genitals>>. "You're the <<if $slurToggle is "f">>shemale<<else>>freak<</if>> I keep hearing about," the <<person>> says. "I didn't believe it." + <<else>> + The <<person>> gapes, first at your <<genitals>> and then at <<if $breastsize gte 1>>your <<breasts>><<else>>the rest of your body.<</if>> "What are you?" <<he>> says. + <</if>> + <br><br> + <<if $promiscuity gte 35>> + <<link [[Seduce|School Changing Room Crossdress Seduce]]>><</link>><<promiscuous3>> + <br> + <</if>> + <<link [[Say you're a trans girl|School Changing Room Crossdress Honest]]>><</link>> + <br> + <<link [[Blame a curse (0:05)|School Changing Room Herm Explain]]>><<set $phase to 0>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + <<link [[Blame strange science (0:05)|School Changing Room Herm Explain]]>><<set $phase to 1>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + + <<schoolrep crossdress 1>> +<<elseif $player.trans is "t" and $player.gender is "f">> + <<if $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> + <<if $physique gte (($physiquesize / 7) * 4)>> + The girls break into excitement as your naked <<if $breastsize lte 0>>pecs<<else>>body<</if>> and <<genitals>> are revealed, and some of the girls ogle your muscles. "So the rumours are true," the <<person>> says, satisfied. "You really are half boy and half girl." + <<else>> + The girls break into excitement as your naked body and <<genitals>> are revealed. "So the rumours are true," the <<person>> says, satisfied. "You really are half boy and half girl." + <</if>> + <<elseif $schoolrep.crossdress gte 3 and !$worn.face.type.includes("mask")>> + <<if $physique gte (($physiquesize / 7) * 4)>> + The girls break into excitement as they see your naked <<if $breastsize lte 0>>pecs<<else>>body<</if>> and <<genitals>>, and some of the girls ogle your muscles. The <<person>> says, "I didn't believe it when they said you're half boy and half girl, but it's true." + <<else>> + The girls break into excitement as they see your naked body and <<genitals>>. The <<person>> says, "I didn't believe it when they said you're half boy and half girl, but it's true." + <</if>> + <<else>> + <<if $physique gte (($physiquesize / 7)* 4)>> + The <<person>> gapes, first at your <<genitals>>, and then at <<if $breastsize lte 0>>your pecs, and then at <</if>>the rest of your muscular body. "What are you?" <<he>> says. + <<else>> + The <<person>> gapes, first at your <<genitals>>, and then at the rest of your body. "What are you?" <<he>> says. + <</if>> + <</if>> + <br><br> + <<if $promiscuity gte 35>> + <<link [[Seduce|School Changing Room Crossdress Seduce]]>><</link>><<promiscuous3>> + <br> + <</if>> + <<link [[Say you're a trans boy|School Changing Room Crossdress Honest]]>><</link>> + <br> + <<link [[Blame a curse (0:05)|School Changing Room Herm Explain]]>><<set $phase to 0>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + <<link [[Blame strange science (0:05)|School Changing Room Herm Explain]]>><<set $phase to 1>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + + <<schoolrep crossdress 1> <<else>> <<if $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> "So the rumours are true," the <<person>> says, satisfied. "You're really a <<gender>>. Why do you do it? Are you just a pervert?" @@ -194,7 +252,13 @@ Some of the $changingRoomGender blush. The <<person>> seems less impressed. "I k <<else>> <<He>> escorts you from the room. <</if>> - <<if ($player.gender is "m" and $changingRoomGender is "girls") or ($player.gender is "f" and $changingRoomGender is "boys") and $genderknown.includes("Mason")>> + <<if ($player.gender is "m" and $player.trans is "t" and $changingRoomGender is "girls") or ($player.gender is "f" and $player.trans is "t" and $changingRoomGender is "boys") and $genderknown.includes("Mason")>> + <<He>> stops once you're alone, but struggles to look you in the eye. "You need to be more careful," <<he>> says. "I know it's not fair, but you're different, and not everyone is going to accept you. But I'll have a word with them." + <<lcool>><<status -10>> + <<elseif ($player.gender is "f" and $player.trans is "t" and $changingRoomGender is "girls") or ($player.gender is "m" and $player.trans is "t" and $changingRoomGender is "boys") and $genderknown.includes("Mason")>> + "You shouldn't be in the $changingRoomGender' changing room," <<he>> says once you're alone. "That doesn't make what they did okay, but you need to be more careful in the future. And not go in the $changingRoomGender' changing room if you're going to be a <<girl>> now. Don't make this more difficult than it already is." + <<gdelinquency>><<detention 1>> + <<elseif ($player.gender is "m" and $player.trans is "f" and $changingRoomGender is "girls") or ($player.gender is "f" and $player.trans is "f" and $changingRoomGender is "boys") and $genderknown.includes("Mason")>> "You shouldn't be in the $changingRoomGender' changing room," <<he>> says once you're alone. "That doesn't make what they did okay, but you need to be more careful in the future." <<gdelinquency>><<detention 1>> <<elseif $player.penisExist and $player.vaginaExist and $genderknown.includes("Mason")>> @@ -250,28 +314,87 @@ Some of the $changingRoomGender blush. The <<person>> seems less impressed. "I k <</if>> <<elseif $player.penisExist and $player.vaginaExist>> The <<person>> backs away from you, your clothes in hand. - <<if $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> - The $changingRoomGender murmur in excitement. "I knew it," the <<person>> says. "You're the school freak." - <br><br> - <<elseif $schoolrep.crossdress gte 3 and !$worn.face.type.includes("mask")>> - The $changingRoomGender murmur in excitement. "You're the freak I keep hearing about," the <<person>> says. "I didn't believe it." - <br><br> + <<if $schoolrep.herm gte 5 and !$worn.face.type.includes("mask")>> + The $changingRoomGender break into excitement as your <<genitals_are>> revealed. "I knew it," the <<person>> says, reaching forward to seize your clothes. "You're the school freak." + <br><br> + <<elseif $schoolrep.herm gte 3 and !$worn.face.type.includes("mask")>> + The $changingRoomGender break into excitement as they see your <<genitals>>. "You're the <<if $player.gender_appearance is "f" and $slurToggle is "f">>shemale<<else>>freak<</if>> I keep hearing about," the <<person>> says, reaching forward to seize your clothes. "I didn't believe it." + <br><br> + <<else>> + The $changingRoomGender gape at your <<genitals>>, too stunned to speak. The <<person>> is first to shake free of <<his>> stupour. "You're a <<if $player.gender_appearance is "f" and $slurToggle is "f">>tranny,"<<else>>freak,"<</if>> <<he>> says as <<he>> seizes your clothes. + <br><br> + <</if>> + <<if $promiscuity gte 35>> + <<link [[Seduce|School Changing Room Crossdress Seduce]]>><</link>><<promiscuous3>> + <br> + <</if>> + <<if $player.gender is "h" and $player.gender_appearance is "f">> + <<link [[Say you're trans|School Changing Room Crossdress Honest]]>><</link>> + <<else>> + <<link [[Say that's just the way you are|School Changing Room Crossdress Honest]]>><</link>> + <</if>> + <br> + <<link [[Blame a curse (0:05)|School Changing Room Herm Explain]]>><<set $phase to 0>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + <<link [[Blame strange science (0:05)|School Changing Room Herm Explain]]>><<set $phase to 1>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + <<schoolrep herm 1>> + <<elseif $player.trans is "t" and $player.gender is "m">> + The <<person>> backs away from you, your clothes in hand. + <<if $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> + The boys break into excitement as your naked <<if $breastsize gte 1>><<breasts>><<else>>body<</if>> and <<genitals>> are revealed. "So the rumours are true," the <<person>> says, satisfied. "You really are half girl and half boy." + <<elseif $schoolrep.crossdress gte 3 and !$worn.face.type.includes("mask")>> + The boys break into excitement as they see your naked <<if $breastsize gte 1>><<breasts>><<else>>body<</if>> and <<genitals>>. "You're the <<if $slurToggle is "f">>shemale<<else>>freak<</if>> I keep hearing about," the <<person>> says. "I didn't believe it." + <<else>> + The <<person>> gapes, first at your <<genitals>> and then at <<if $breastsize gte 1>>your <<breasts>><<else>>the rest of your body.<</if>> "What are you?" <<he>> says. + <</if>> + <br><br> + <<if $promiscuity gte 35>> + <<link [[Seduce|School Changing Room Crossdress Seduce]]>><</link>><<promiscuous3>> + <br> + <</if>> + <<link [[Say you're a trans girl|School Changing Room Crossdress Honest]]>><</link>> + <br> + <<link [[Blame a curse (0:05)|School Changing Room Herm Explain]]>><<set $phase to 0>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + <<link [[Blame strange science (0:05)|School Changing Room Herm Explain]]>><<set $phase to 1>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + + <<schoolrep crossdress 1>> +<<elseif $player.trans is "t" and $player.gender is "f">> + <<if $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> + The <<person>> backs away from you, your clothes in hand. + <<if $physique gte (($physiquesize / 7) * 4)>> + The girls break into excitement as your naked <<if $breastsize lte 0>>pecs<<else>>body<</if>> and <<genitals>> are revealed, and some of the girls ogle your muscles. "So the rumours are true," the <<person>> says, satisfied. "You really are half boy and half girl." <<else>> - The $changingRoomGender gape at your <<genitals>>, too stunned to speak. The <<person>> is first to shake free of <<his>> stupour. "You're a freak," <<he>> says. - <br><br> + The girls break into excitement as your naked body and <<genitals>> are revealed. "So the rumours are true," the <<person>> says, satisfied. "You really are half boy and half girl." <</if>> - <<if $promiscuity gte 35>> - <<link [[Seduce|School Changing Room Crossdress Seduce]]>><</link>><<promiscuous3>> - <br> + <<elseif $schoolrep.crossdress gte 3 and !$worn.face.type.includes("mask")>> + <<if $physique gte (($physiquesize / 7) * 4)>> + The girls break into excitement as they see your naked <<if $breastsize lte 0>>pecs<<else>>body<</if>> and <<genitals>>, and some of the girls ogle your muscles. The <<person>> says, "I didn't believe it when they said you're half boy and half girl, but it's true." + <<else>> + The girls break into excitement as they see your naked body and <<genitals>>. The <<person>> says, "I didn't believe it when they said you're half boy and half girl, but it's true." <</if>> - <<link [[Say that's just the way you are|School Changing Room Crossdress Honest]]>><</link>> - <br> - <<link [[Blame a curse (0:05)|School Changing Room Herm Explain]]>><<set $phase to 0>><<pass 5>><<status -10>><</link>><<lcool>> - <br> - <<link [[Blame strange science (0:05)|School Changing Room Herm Explain]]>><<set $phase to 1>><<pass 5>><<status -10>><</link>><<lcool>> + <<else>> + <<if $physique gte (($physiquesize / 7)* 4)>> + The <<person>> gapes, first at your <<genitals>>, and then at <<if $breastsize lte 0>>your pecs, and then at <</if>>the rest of your muscular body. "What are you?" <<he>> says. + <<else>> + The <<person>> gapes, first at your <<genitals>>, and then at the rest of your body. "What are you?" <<he>> says. + <</if>> + <</if>> + <br><br> + <<if $promiscuity gte 35>> + <<link [[Seduce|School Changing Room Crossdress Seduce]]>><</link>><<promiscuous3>> <br> + <</if>> + <<link [[Say you're a trans boy|School Changing Room Crossdress Honest]]>><</link>> + <br> + <<link [[Blame a curse (0:05)|School Changing Room Herm Explain]]>><<set $phase to 0>><<pass 5>><<status -10>><</link>><<lcool>> + <br> + <<link [[Blame strange science (0:05)|School Changing Room Herm Explain]]>><<set $phase to 1>><<pass 5>><<status -10>><</link>><<lcool>> + <br> - <<schoolrep herm 1>> + <<schoolrep crossdress 1>> <<else>> The <<person>> backs away from you, your clothes in hand. <<if $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> @@ -410,8 +533,8 @@ Leighton's voice appears behind the group. It's not long before the crowd has di You lean against the lockers and bend over. The <<person>> walks beside you, and leans on your back. "Make sure you get this," <<he>> says. There's silence for a moment, then a loud smack as something hits your <<bottom>>. Then another. <<Hes>> spanking you with a pool float. It's made of foam, but <<he>> whips it against your skin with such speed that the pain makes you jolt. <<gpain>><<pain 10>> <br><br> -<<fameexhibitionism 50 "pic">> -"Someone else have a go," <<he>> says after a while. Someone does. They aren't as effective, but the <<person>> leans against the lockers and pulls your hair back. <<He>> leans close. "This is what happens to <<if $exposed gte 2 and $player.penisExist and $player.vaginaExist>>freaks<<elseif $player.gender_appearance is "f">>girls<<else>>boys<</if>> who come in here," <<he>> says. Another jolt of pain. "Consider yourself lucky I'm so nice. Some wanted much worse." <<He>> glances at your body, and regret darkens <<his>> face. <<He>> stands up. "That's enough. <<pShes>> learnt <<pher>> lesson." <<He>> throws your clothes at you. <<tearful>> you take your clothing and leave the room. +<<fameexhibitionism 50 "pic">><!--TRANSMOD may need to change this event to account for trans PCs later --> <!-- note: PC is naked for this scene, gender appearance checks should take this into consderation --> +"Someone else have a go," <<he>> says after a while. Someone does. They aren't as effective, but the <<person>> leans against the lockers and pulls your hair back. <<He>> leans close. "This is what happens to <<if $exposed gte 2 and $player.gender is "h">>freaks<<elseif $player.gender_appearance is "f" and $player.trans is "f">>girls<<elseif $player.gender_appearance is "m" and $player.trans is "t">>'girls'<<elseif $player.gender_appearance is "f" and $player.trans is "t">>'boys'<<else>>boys<</if>> who come in here," <<he>> says. Another jolt of pain. "Consider yourself lucky I'm so nice. Some wanted much worse." <<He>> glances at your body, and regret darkens <<his>> face. <<He>> stands up. "That's enough. <<if $player.trans is "f">> <<pShes>> learnt <<pher>> lesson."<<elseif $player.gender is "m">> She's learnt her lesson."<<else>> He's learnt his lesson."<</if>> <<He>> throws your clothes at you. <<tearful>> you take your clothing and leave the room. <br><br> <<clothesontowel>> <<endcombat>> @@ -438,6 +561,8 @@ Groping hands fondle you all over, and push you towards an open window. It's sma <br><br> <<if $player.penisExist and $player.vaginaExist>> "Don't be shy," you purr. "I know you want this 'freak.'" +<<elseif $player.trans is "t">> + "I'm a <<gender>>. And I can be all the <<gender>> that you can handle," you purr. "If you want." <<else>> "I can be your <<gender>>," you purr. "If you want." <</if>> @@ -532,6 +657,28 @@ Groping hands fondle you all over, and push you towards an open window. It's sma <br><br> The $changingRoomGender laugh. "What should we do with it?" the <<person>> asks. <br><br> +<<elseif $player.gender is "m" and $player.trans is "t">> + <<if $speech_attitude is "meek">> + "I-I'm a girl," you say. "I'm a trans girl. Please don't hate me." + <<elseif $speech_attitude is "bratty">> + "I'm a girl. A trans girl. Or 'Madam,' to you." + <<else>> + "I'm a trans girl," you say. + <</if>> + <br><br> + The $changingRoomGender laugh uncomfortably. "Then you're barging into the wrong changing room," the <<person>> says. "What should we do with her, $changingRoomGender?" + <br><br> +<<elseif $player.gender is "f" and $player.trans is "t">> + <<if $speech_attitude is "meek">> + "I-I'm a boy," you say. "I'm a trans boy. Please don't hate me." + <<elseif $speech_attitude is "bratty">> + "I'm a boy. A trans boy. Or 'Sir,' to you." + <<else>> + "I'm a trans boy," you say. + <</if>> + <br><br> + The $changingRoomGender laugh uncomfortably. "Then you're barging into the wrong changing room," the <<person>> says. "What should we do with him, $changingRoomGender?" + <br><br> <<else>> <<if $speech_attitude is "meek">> "I like dressing as a <<print $changingRoomGender is "boys" ? "girl" : "boy">>," you say. "It makes me feel pretty." @@ -591,10 +738,16 @@ The $changingRoomGender enjoy a laugh at your expense. "We're not letting you in "I was cursed," you say. "By evil magic." <</if>> <br><br> + <<if $player.gender is "h">> Some of the $changingRoomGender step back. The <<person>> stands <<his>> ground, but <<his>> voice quivers. "C-curses aren't real," <<he>> says. "Right?" <<He>> glances around for support, but no one gives it. <br><br> <<He>> throws you your clothes, as if afraid of a disease. "You should dress like a <<print $changingRoomGender.slice(0, -1)>> if you're gonna come in here," <<he>> says. "And stay away from me." <br><br> + <<elseif $player.trans is "t">> + Some of the $changingRoomGender step back. The <<person>> stands <<his>> ground, but <<his>> voice quivers. "C-curses aren't real," <<he>> says. "Right?" <<He>> glances around for support, and one boy leans in and whispers to <<him>>. + <br><br> + The <<person>> grimaces at you and says, "Cursed enough." <<He>> throws you your clothes, as if afraid of a disease. "Just stay away from me. The <<if $changingRoomGender is "boys">> girl's <<else>> boy's <</if>> locker room is over there. They can put up with you." + <</if>> <<else>> <<if $speech_attitude is "meek">> "A strange experiment made me like this," you say. "Please don't hate me." diff --git a/game/overworld-town/loc-school/changing-rooms-girls-events.twee b/game/overworld-town/loc-school/changing-rooms-girls-events.twee new file mode 100644 index 000000000..e69de29bb diff --git a/game/overworld-town/loc-school/changing-rooms-widgets.twee b/game/overworld-town/loc-school/changing-rooms-widgets.twee index 0cca7ac41..01dc39174 100644 --- a/game/overworld-town/loc-school/changing-rooms-widgets.twee +++ b/game/overworld-town/loc-school/changing-rooms-widgets.twee @@ -2,10 +2,14 @@ <<widget "changingRoom">> <<set _studentsKnow to ($schoolrep.crossdress gte 4 and $changingroomstate is "own") or ($schoolrep.crossdress gte 5 and $changingroomstate isnot "empty")>> - <<set _seenGender to (_studentsKnow ? $player.gender : $player.gender_appearance)>> <!-- If they know you crossdress, then they won't judge you by appearance --> + <<if $player.trans is "f">> + <<set _seenGender to (_studentsKnow ? $player.gender : $player.gender_appearance)>> <!-- If they know you crossdress, then they won't judge you by appearance --> + <<else>> + <<set _seenGender to $player.gender_appearance>> + <</if>> <<set _changingRoomGenderType to ($changingRoomGender is "girls" ? "f" : "m")>> <<set _playerGenderAppearance to (_seenGender is _changingRoomGenderType ? "same" : "other")>> - <<set _uncomfortable to ($backgroundTraits.includes("crossdresser") and $player.gender is _changingRoomGenderType)>> + <<set _uncomfortable to (($backgroundTraits.includes("crossdresser") or $player.trans is "t") and $player.gender is _changingRoomGenderType)>> <<set _justChangedClothes to ["School Pool Wardrobe", "School Boy Changing Room", "School Girl Changing Room"].includes($passagePrev)>> <<if $changingRoomGender is "girls">> <<set _chance to 100 - maleChance()>> @@ -40,11 +44,19 @@ <</switch>> <<endevent>> <<elseif $player.gender isnot $player.gender_appearance and $NudeGenderDC isnot -1>> - <<if $schoolrep.crossdress is 3>> - Some of the $changingRoomGender look at you uncomfortably. A few keep their eyes glued on you as you head to your locker. <span class="pink">They suspect the rumours of you crossdressing are true.</span> <<gstress>> + <<if $schoolrep.crossdress gte 3>> + <<if $player.trans is "f">> + Some of the $changingRoomGender look at you uncomfortably. A few keep their eyes glued on you as you head to your locker. <span class="pink">They suspect the rumours of you crossdressing are true.</span> <<gstress>> + <<else>> + Some of the $changingRoomGender look at you uncomfortably. A few keep their eyes glued on you as you head to your locker. <span class="pink">They suspect the rumours that you weren't born a <<girl>> are true.</span> <<gstress>> + <</if>> <<elseif $schoolrep.crossdress lt 3>> - No one gives you a second glance, not realising you're a <<gender>>. - <<if $backgroundTraits.includes("crossdresser") and $player.gender isnot _changingRoomGenderType>> + <<if $player.trans is "f">> + No one gives you a second glance, not realising you're a <<gender>>. + <<else>> + No one gives you a second glance, not realising you weren't born a <<girl>>. + <</if>> + <<if ($backgroundTraits.includes("crossdresser") or $player.trans is "t") and $player.gender isnot _changingRoomGenderType>> <<if !$daily.school.changingRoomStressRelief>> <span class="green">You feel good about that.</span><<lstress>><<stress -3>><<set $daily.school.changingRoomStressRelief to true>> <<else>> @@ -256,9 +268,9 @@ <</if>> <</widget>> -<<widget "schoolPoolSwap">> - <<if $schoolrep.crossdress gte 1 and !$weekly.schoolPoolSwap and currentSkillValue('skulduggery') gte 400>> - <br> +<<widget "schoolPoolSwap">> + <<if $schoolrep.crossdress gte 1 and !$weekly.schoolPoolSwap and currentSkillValue('skulduggery') gte 400 and $player.trans is "f">> + <br> <!--TRANSMOD Can't do the above if trans; what people know about you cuts deeper than what you wear. --> <<if Time.minute lte 40>> <span class="lblue">An idea strikes you.</span> Perhaps you could distract from your reputation as a crossdresser. <br> diff --git a/game/overworld-town/loc-school/changing-rooms.twee b/game/overworld-town/loc-school/changing-rooms.twee index 522ec6e78..3bdccd7fc 100755 --- a/game/overworld-town/loc-school/changing-rooms.twee +++ b/game/overworld-town/loc-school/changing-rooms.twee @@ -306,11 +306,19 @@ You successfully pick one of the lockers, and rummage inside. "I'll have to tell the head," Mason replies. <<if $exposed gte 1>> - <<if $genderknown.includes("Mason")>> + <<if $genderknown.includes("Mason")>> <!-- TRANSMOD TODO I feel like more venom is called for here for trans PCs making Mason's life more difficult with their bad behavior? --> <<if $player.gender is "m" and $changingRoomGender is "girls">> - "Y-you should go back to the boys' room, and get dressed." + <<if $player.trans is "t">> + "Y-you should get dressed. Don't make me regret my decision to tolerate you using the girls' changing room." + <<else>> + "Y-you should go back to the boys' room, and get dressed." + <</if>> <<elseif $player.gender is "f" and $changingRoomGender is "boys">> - "Y-you should go back to the girls' room, and get dressed." + <<if $player.trans is "t">> + "Y-you should get dressed. Don't make me regret my decision to tolerate you using the boys' changing room." + <<else>> + "Y-you should go back to the girls' room, and get dressed." + <</if>> <<else>> "Y-you should get dressed." <</if>> @@ -326,9 +334,17 @@ You successfully pick one of the lockers, and rummage inside. <<else>> <<if $genderknown.includes("Mason")>> <<if $player.gender is "m" and $changingRoomGender is "girls">> - "Let's not meet in the girls' changing room again." + <<if $player.trans is "t">> + "Don't make me regret my decision to tolerate you using the girls' changing room." + <<else>> + "Let's not meet in the girls' changing room again." + <</if>> <<elseif $player.gender is "f" and $changingRoomGender is "boys">> - "Let's not meet in the boys' changing room again." + <<if $player.trans is "t">> + "Don't make me regret my decision to tolerate you using the boys' changing room." + <<else>> + "Let's not meet in the boys' changing room again." + <</if>> <<else>> "I hope <<nnpc_he Leighton>> goes easy on you." <</if>> @@ -364,9 +380,17 @@ Mason seems unconvinced. <<if $exposed gte 1>> <<if $genderknown.includes("Mason")>> <<if $player.gender is "m" and $changingRoomGender is "girls">> - "Y-you shouldn't be in the girls' room in the first place, least of all dressed like that. Go get changed." + <<if $player.trans is "t">> + "Don't expect me to tolerate you using the girls' changing room and then let you get away with behaving like this. Now get dressed." + <<else>> + "Y-you shouldn't be in the girls' room in the first place, least of all dressed like that. Go get changed." + <</if>> <<elseif $player.gender is "f" and $changingRoomGender is "boys">> - "Y-you shouldn't be in the boys' room in the first place, least of all dressed like that. Go get changed." + <<if $player.trans is "t">> + "Don't expect me to tolerate you using the boys' changing room and then let you get away with behaving like this. Now get dressed." + <<else>> + "Y-you shouldn't be in the boys' room in the first place, least of all dressed like that. Go get changed." + <</if>> <<else>> "I- I have to tell the head," <<he>> replies. "You should get dressed." <</if>> @@ -382,9 +406,17 @@ Mason seems unconvinced. <<else>> <<if $genderknown.includes("Mason")>> <<if $player.gender is "m" and $changingRoomGender is "girls">> - "You shouldn't be in the girls' room in the first place." + <<if $player.trans is "t">> + "Don't expect me to tolerate you using the girls' changing room and then let you get away with behaving like this." + <<else>> + "You shouldn't be in the girls' room in the first place." + <</if>> <<elseif $player.gender is "f" and $changingRoomGender is "boys">> - "You shouldn't be in the boys' room in the first place." + <<if $player.trans is "t">> + "Don't expect me to tolerate you using the boys' changing room and then let you get away with behaving like this." + <<else>> + "You shouldn't be in the boys' room in the first place." + <</if>> <<else>> "I'll have to tell the head," <<he>> replies. "I hope <<nnpc_he Leighton>> goes easy on you." <</if>> @@ -422,9 +454,17 @@ Mason seems unconvinced. <<if $exposed gte 1>> <<if $genderknown.includes("Mason")>> <<if $player.gender_appearance is "m" and $changingRoomGender is "girls">> - "Y-you should go back to the boys' room, and get dressed." + <<if $player.trans is "t">> + "Y-you should get dressed. Don't make me regret my decision to tolerate you using the girls' changing room." + <<else>> + "Y-you should go back to the boys' room, and get dressed." + <</if>> <<elseif $player.gender_appearance is "f" and $changingRoomGender is "boys">> - "Y-you should go back to the girls' room, and get dressed." + <<if $player.trans is "t">> + "Y-you should get dressed. Don't make me regret my decision to tolerate you using the boys' changing room." + <<else>> + "Y-you should go back to the girls' room, and get dressed." + <</if>> <<else>> "Y-you should get dressed." <</if>> @@ -440,9 +480,17 @@ Mason seems unconvinced. <<else>> <<if $genderknown.includes("Mason")>> <<if $player.gender is "m" and $changingRoomGender is "girls">> - "Let's not meet in the girls' changing room again." + <<if $player.trans is "t">> + "Don't make me regret my decision to tolerate you using the girls' changing room." + <<else>> + "Let's not meet in the girls' changing room again." + <</if>> <<elseif $player.gender is "f" and $changingRoomGender is "boys">> - "Let's not meet in the boys' changing room again." + <<if $player.trans is "t">> + "Don't make me regret my decision to tolerate you using the boys' changing room." + <<else>> + "Let's not meet in the boys' changing room again." + <</if>> <<else>> "I hope <<nnpc_he Leighton>> goes easy on you." <</if>> diff --git a/game/overworld-town/loc-school/classes/club-events.twee b/game/overworld-town/loc-school/classes/club-events.twee new file mode 100644 index 000000000..4b71be2f4 --- /dev/null +++ b/game/overworld-town/loc-school/classes/club-events.twee @@ -0,0 +1,97 @@ +:: Club Events [widget] + +/*<<widget "clubSafe">>*/ + + <<if $rng gte 91>> + Doren gives an impromptu lecture about neopronouns. It's <<if currentSkillValue('english') gte 800>>nothing you don't already understand<<elseif currentSkillValue('english') gte 600 and lte 799>>tricky to follow along with<<else>>a little beyond you<</if>>, but you learn a thing or two regardless. <<if currentSkillValue('english') lte 800>><<genglish>><<englishskill>><</if>> + <br><br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 86>> + Doren gives an impromptu lecture about queer history. <<nnpc_He "Doren">> seems uncomfortable using some of the terminology out loud, but it's a good lesson otherwise<<if currentSkillValue('history') gte 800>>, even if it's nothing you didn't already know<</if>>. <<if currentSkillValue('history') lte 800>><<ghistory>><<historyskill>><</if>> + <br><br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <<elseif $rng gte 81>> + <<generatey1>><<generatey2>> + A <<person1>><<person>> flops down into a seat near yours with a groan. <<if $loveInterest.primary is "Whitney">>You recognize <<him>> as one of Whitney's friends.<</if>><br> + "Ugh! My friends're such twats sometimes," <<he>> whines. "We were all making fun of some shit-for-brains earlier, and guess what insult they all went with? <<if $_npcPronoun is "m">>Faggot<<else>>Dyke<</if>>! Can you believe that!?"<br> + "That's what you get for hanging out with the delinquents," a <<person2>><<person>> sat near you sighs. "You still haven't told them, have you?"<br> + "As if!" the <<person1>><<person>> responds. "What do you want me to say? 'Hey gang, I'm a fucking queer! Here's your bullying licenses!'?"<br> + <<if $loveInterest.primary is "Whitney">>"B-besides, <<nnpc_he "Whitney">> already got a <<if $player.gender_appearance is "m">>boyfriend<<else>>girlfriend<</if>>," the <<person1>><<person>> whispers, throwing clandestine glances in your direction when <<person1>><<he>> thinks you aren't looking.<</if>><br> + The <<person2>><<person>> rests <<his>> head in one hand while <<he>> scrolls through a social media app on <<his>> phone with the other. "Some kind of development would be nice. Anything, really--if I have to hear you complain about this again I might just do something drastic."<br> + <br><br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 71>> + <<generatey1>> + A <<person1>><<person>> vents to you about <<his>> friends being <<switch random(1,3)>><<case 1>>homophobic<<case 2>>transphobic<<case 3>>aphobic<</switch>> around <<him>>. <<if $loveInterest.primary is "Whitney">>You recognize <<him>> as one of Whitney's friends.<</if>> <<if $loveInterest.primary is "Whitney">><<stress 6>><<gstress>><<else>><<stress -6>><<lstress>><</if>> + <br><br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 61>> + <<generatey1>><<person1>><<pronoun>> + A <<person1>><<person>> approaches you and asks if <<he>> can talk to you so <<he>> can try out different pronouns.<br> + You and <<them>> chit-chat about <<switch random(1,6)>><<case 1>>school<<case 2>>homework<<case 3>>the food in the canteen<<case 4>><<if C.npc.Robin.init is 1>>Robin<<else>>English class<</if>><<case 5>><<if C.npc.Whitney.init is 1>>Whitney<<else>>Maths class<</if>><<case 6>><<if C.npc.Sydney.init is 1>>Sydney<<else>>History class<</if>><</switch>> for a bit, and you try your best. <<They>> seem<<if $preferred isnot "t">>s<</if>> grateful. <<stress -6>><<lstress>><<status 2>><<gcool>> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 51>> + <<generatey1>><<generatey2>> + You help Doren solve a dispute between a <<person1>><<person>> and a <<person2>><<person>>. <<status 3>><<gcool>><<npcincr Doren love 1>><<glove>> + <br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 41>> + Doren asks you to help <<nnpc_him "Doren">> haul in some supplies for the club. + + <<link [[Accept|Club Supplies Accept]]>><</link>> + <br> + <<link [[Refuse|Club Supplies Refuse]]>><</link>> + <br> + <<elseif $rng gte 31>> + <<generatey1>> + A <<person1>><<person>> passes around a box of homemade cookies. You take one. <span class="green">It's delicious!</span> <<stress -6>><<lstress>> + <br> + One of the other students asks <<him>> about how <<he>> made them. The <<person1>><<person>> goes into perhaps a little more detail than is necessary. + <br> + <<He>> does mention some helpful cooking tips, though, <<if $housekeeping lte 499>>so you're glad you paid attention<<else>>even if it's nothing you don't already know<</if>>. <<housekeeping 1 500>><<ghousekeeping 500>> + <br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 21>> + <<generatey1>> + A <<person1>><<person>> walks out of the changing room wearing <<if $_npc.pronoun is "m">>a school uniform skirt<<else>>school uniform trousers<</if>>. <<he>> glances around the room sheepishly, eyes meeting yours. + <br><br> + You give <<him>> a thumbs-up; <<he>> smiles back, thankful for the support as <<he>> takes <<his>> seat. <<status 2>><<gcool>> + <br><br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 11>> + Doren has everyone go around in a circle and say their names and what pronouns they use. <<if $player.gender isnot $player.gender_appearance>>A few students seem surprised when the circle gets to you, but they don't say anything.<</if>> + <br><br> + <<link [[Next|Club Activity]]>><<endevent>><</link>> + <br> + <<else>> + You spend some time making small talk with one of the other club members. + <<link [[Next|Club Activity]]>><<status 1>><<gcool>><<endevent>><</link>> + <br> + <</if>> + +/*<</widget>> */ + +:: Club Supplies Accept + +It's hard work, but the two of you manage somehow. + +"Much appreciated, <<lass>>," Doren says as you both sit back down. <<tiredness 5>><<gtiredness>> <<npcincr Doren love 3>><<glove>> +<br> +<<physique 5>> +<<set $clubProgress to +=1>> + +<<link [[Next|Club Activity]]>><<endevent>><</link>> + +:: Club Supplies Refuse +<<generatey1>> + +Doren asks a <<person1>><<person>> to help <<him>> instead. <<npcincr Doren love -3>><<llove>> + +<<link [[Next|Club Activity]]>><<endevent>><</link>> \ No newline at end of file diff --git a/game/overworld-town/loc-school/classes/club.twee b/game/overworld-town/loc-school/classes/club.twee new file mode 100644 index 000000000..49ce11b82 --- /dev/null +++ b/game/overworld-town/loc-school/classes/club.twee @@ -0,0 +1,259 @@ +:: Club Room +<<set $outside to 0>><<set $location to "school">><<schooleffects>><<effects>> + +<<if $schoolstate is "afternoon" and (Time.weekDayName is "Tuesday" or Time.weekDayName is "Thursday") and $clubIntro is 2>> + <<if Time.hour gte 15 and Time.hour lt 16>> + <<if $worn.upper.type.includes("naked") and $worn.lower.type.includes("naked")>> + <<outfitChecks>> + /*Check for when the pc is only wearing an overcoat*/ + <<if $worn.over_upper.name isnot "naked" and $worn.over_lower.name isnot "naked" and $worn.under_upper.name is "naked" and $worn.under_lower.name is "naked">> + As you go to hang your <<if _middleOutfit>>$worn.over_upper.name<<else>>$worn.over_upper.name and $worn.over_lower.name<</if>>, you remember that you're naked underneath. + <<elseif $worn.over_upper.name isnot "naked" and $worn.over_lower.name isnot "naked" and ($worn.under_upper.type.includes("swim") or $worn.under_lower.type.includes("swim"))>> + As you go to hang your <<if _middleOutfit>>$worn.over_upper.name<<else>>$worn.over_upper.name and $worn.over_lower.name<</if>>, you remember that you're only wearing swimwear underneath. + <<elseif $worn.over_upper.name isnot "naked" and $worn.over_lower.name isnot "naked" and $worn.under_upper.name isnot "naked" and $worn.under_lower.name isnot "naked">> + As you go to hang your <<if _middleOutfit>>$worn.over_upper.name<<else>>$worn.over_upper.name and $worn.over_lower.name<</if>>, you remember that you're only wearing underwear underneath. + <</if>> + <br><br> + <<npc Doren>><<person1>> + Doren laughs. "Something wrong? If you need something, there's a changing room I've set up over there. Should be some spare clothes you could use." + <br><br> + <!--<<link [[Hang up coat|]]>><<endevent>><</link>> + <br><br> good starting point for when you can go to class naked--> + <<link [[Next|Club Room Changing Room]]>><<endevent>><</link>> + <br><br> + /* <<elseif $worn.upper.type.includes("school") and $worn.lower.type.includes("school") and $rightarm isnot "bound">> + <<if $daily.school.attended.english>> + You rejoin the English lesson, + <<if $worn.over_upper.name isnot "naked" or $worn.over_lower.name isnot "naked" or $worn.over_head.name isnot "naked">> + hang your coat at the back of the class + <<undressOverClothes "clubRoom">> + <</if>> + and take your seat. + <br><br> + <<englishstart>> + <<elseif Time.minute lte 5>> + You enter the English classroom. + <<npc Doren>><<person1>> + Doren is preparing at the front of the room while the seats fill. + <<if $worn.over_upper.name isnot "naked" or $worn.over_lower.name isnot "naked" or $worn.over_head.name isnot "naked">> + <<undressOverClothes "clubRoom">> + You hang your coat at the back of the class and take your seat. + <</if>> + <br><br> + <<englishstart>> + <<else>> + You + <<if $worn.over_upper.name isnot "naked" or $worn.over_lower.name isnot "naked" or $worn.over_head.name isnot "naked">> + hang your coat at the back of the class and + <<undressOverClothes "clubRoom">> + <</if>> + enter the English classroom. + <<npc Doren>><<person1>> + Doren cuts off mid-sentence and smiles at you. + <<if $daily.school.englishExcused>> + <<run delete $daily.school.englishExcused>> + "Don't worry, <<lass>>. You're in the clear." + <<else>> + "Better late than never! Sit down, you've got lost time to make up for." + <<gdelinquency>> + <<detention 1>> + <</if>> + <br><br> + You take a seat as Doren continues. + <br><br> + + <<englishstart>> + <</if>> */ + + <<elseif $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">> + Doren looks concerned. "Who tied you up like that? Are you okay? There may be something here to cut you free. Let me check." + <br><br> + + <<link [[Next (0:01)|Doren Club Unbind]]>><<pass 1>><<endevent>><</link>> + <br><br> + <<else>> + <<npc Doren>><<person1>> + Doren laughs. "It might not be school hours, but you should still be properly dressed. Feel free to grab something from the changing room and rejoin us when you're decent." + <br><br> + + <<link [[Next|Club Room Changing Room]]>><<endevent>><</link>> + <br><br> + <</if>> + <</if>> +<</if>> + +<<if $schoolstate is "afternoon" and (Time.weekDayName is "Tuesday" or Time.weekDayName is "Thursday")>> + <<if Time.hour gte 15 and Time.hour lt 16>> + <<if $clubIntro is 1>> + <<npc Doren>><<person1>> + You walk into the Rainbow Club room. It's obvious that it used to be one of the unused classrooms; extra desks have been pushed into one corner, and a small assortment of queer-themed posters decorate the otherwise plain walls. + <br><br> + The remaining desks have been arranged in a large circle which dominates the rest of the room. Students occupy a few of them, chatting amongst themselves, but the majority remain empty. + <br><br> + "Come on in, <<lass>>! Don't be shy," a familiar face greets you from the head of the circle. It's Doren. "You must've seen the flier I hung up, then? Glad it wasn't totally useless," <<he>> chuckles. + <br><br> + <<he>> rises from <<his>> seat and strides over to you. "This here's the Rainbow Club. Founded it myself; wasn't a fan of some of the conduct I've seen lately around the school," <<he>> says. <<if $schoolrep.crossdress gte 5 or ($loveInterest.primary is "Kylar" and $player.gender_appearance is C.npc.kylar.pronoun)>>"Had a feeling I'd see you here sooner or later, <<lass>>. <<else>> Can't say I expected to see you in here, <<lass>>, but you're more than welcome to stay."<</if>> + <br><br> + "We meet every Tuesday and Thursday after school, between <<ampm 15>> and <<ampm 16>>. No pressure, though--you can attend as much or as little as you'd like. How about it?" + <br><br> + <<link [[Accept|Club Room Accept]]>><<set $clubIntro to 2>><</link>> + <br> + <<link [[Refuse|Club Room Refuse]]>><<set $clubIntro to 2>><</link>> + <</if>> + <<if $clubIntro is 2 and $clubRefused is "t">> + Doren smiles as you enter. "Hello again, <<lass>>. Offer's always open if you'd like to join the Rainbow Club. We meet every Tuesday and Thursday after school, between <<pmpm 15>> and <<ampm 16>>; you can attend as much or as little as you'd like. Interested?" + <br><br> + <<link [[Accept|Club Room Accept]]>><</link>> + <br> + <<link [[Refuse|Club Room Refuse]]>><</link>> + <br> + <<elseif $clubAccepted is "t">> + <<if Time.minute lte 5>> + Some club members have already arrived and chat amongst themselves, others filter in behind you. + <br><br> + <<else>> + The club room bustles with activity as the various club members interact with one another. + <br><br> + <</if>> + <br><br> + <<link [[Partake in club activity|Club Events]]>><<advancelesson>><</link>> + <br><br> + <<link [[Club Changing Room|Club Room Changing Room]]>><<endevent>><</link>> + <br><br> + <<link [[Leave the room (0:01)|Hallways]]>><<pass 1>><</link>> + <</if>> + <<else>> + You are in the Rainbow Club room. The posters that've been hung up do little for the barren atmosphere. + <br><br> + <<if $arousal gte $arousalmax>> + <<orgasmLocation "emptyClassroom">> + <</if>> + + <<exhibitionclassroom>> + + <<emptyClassroomMasturbationIntro>> + + <<link [[Leave the room (0:01)|Hallways]]>><<pass 1>><</link>> + <br> + <</if>> +<</if>> +/* +<<if $clubIntro is 2>> + <<if Time.minute lte 5>> + Some club members have already arrived and chat amongst themselves, others filter in behind you. + <br><br> + <<else>> + The club room bustles with activity as the various club members interact with one another. + <br><br> + <</if>> +<br><br> +<<link [[Partake in club activity|Club Events]]>><<advancelesson>><</link>> +<br><br> +<<link [[Leave the room (0:01)|Hallways]]>><<pass 1>><</link>> +<</if>> +*/ +:: Club Room Accept +<<set $outside to 0>><<set $location to "school">><<schooleffects>><<effects>> + +<<generates1>><<generates2>> +"Wonderful! Find a seat wherever you'd like," Doren beams. +<br><br> +You pick the closest one, a desk right next to where a <<person1>><<person>> is sitting.<<if $cool gte 160>><<He>> gives you a friendly smile, then turns back towards the <<person2>><<person>><<person1>><<he>> was talking to.<<elseif $cool lte 40>> <<He>> promptly gets up and moves a couple seats away.<<else>><<Hes>> talking to a <<person2>><<person>> sat on <<person1>><<his>> opposite side.<</if>> +<br><br> +"If I could have everyone's attention for a moment," Doren says, "it looks like we've got a new member. Mind introducing yourself, <<lass>>?" +<br><br> +You do so. The other students <<if $cool gte 160>>seem interested <<elseif $cool lte 40>> don't seem very interested <<else>> don't seem particularly interested.<</if>> +<br><br> +You spend the rest of the hour <<if $cool gte 160>>making small talk <<elseif $cool lte 40>> trying to make small talk <<else>> making small talk<</if>> with the other members. <<status 6>><<gcool>> +<br><br> +<<link [[Next (1:00)|Hallways]]>><<pass 60>><<set $clubAccepted to "t">><<set $clubRefused to "f">><</link>> + + + +:: Club Room Refuse +<<set $outside to 0>><<set $location to "school">><<schooleffects>><<effects>> + + "We'll be here if you change your mind," Doren says. + <br><br> + You excuse yourself back out into the hallway. + <br><br> + <<link [[Next (0:01)|Hallways]]>><<pass 1>><<set $clubRefused to "t">><</link>> + + +:: Club Room Changing Room +<<effects>> + +You look through the club's wardrobe. +<br><br> + +<<if player.gender is "m" and $player.trans is "f" or ($player.gender is "f" and $player.trans is "t")>> + <<set $clothingselector to "m">> +<<else>> + <<set $clothingselector to "f">> +<</if>> + +<<if !$worn.upper.type.includes("school") or !$worn.lower.type.includes("school")>> + You grab some spare clothes from the box Doren provided. + <<schoolspareclothes>> +<</if>> + +<<set $wardrobe_location to "clubRoom">> +<<wardrobeSelection>> +<<wardrobewear>> +<div id="wardrobeExits"><<wardrobeExits>></div> +<<wardrobe>> + +:: Club Activity + +<<if $phase is 1>> + <<set $phase to 0>> + Before you know it, the hour is up. You + <<storeon "clubRoom" "check">> + <<if _store_check is 1>> + <<storeon "clubRoom">> + grab your coat and + <</if>> + leave the club room. + <br><br> + + <<link [[Next (0:01)|Hallways]]>><<pass 1>><</link>> +<<else>> + /* + <<set $danger to random(1, 10000)>><<set $dangerevent to 0>> + <<if $danger gte (8900 - $allure)>> + <<eventsenglish>> + <<else>> + <<eventsenglishsafe>> + <</if>> + */ + <<if Time.minute lte 5>> + Some club members have already arrived and chat amongst themselves, others filter in behind you. + <br><br> + <<else>> + The club room bustles with activity as the various club members interact with one another. + <br><br> + <</if>> + /* + <<if $arousal gte $arousalmax>> + <<set _teacher to "Doren">> + <<orgasmLocation "classroom">> + <</if>>*/ + + <<advancelesson>> + + <<link [[Partake in club activity|Club Events]]>><</link>> + + /* + <<if $exhibitionism gte 75>> + <<link [[Masturbate|English Lesson Masturbate]]>><<set $masturbationstart to 1>><</link>><<exhibitionist4>> + <br> + <</if>>*/ +<</if>> + +:: Doren Club Unbind + +<<npc doren>><<person1>> + +Doren takes a moment to search around the club room for an implement to free you, but <<he>> eventually frees you. + +<<link [[Next|Club Room]]>><<unbind>><</link>> \ No newline at end of file diff --git a/game/overworld-town/loc-school/detention.twee b/game/overworld-town/loc-school/detention.twee index 4acac02ae..493c2e3a4 100644 --- a/game/overworld-town/loc-school/detention.twee +++ b/game/overworld-town/loc-school/detention.twee @@ -336,7 +336,7 @@ <<underlowerruined>><<underupperruined>><<set $phase to 4>> <<else>> "No underwear?" <<he>> comments. "That's against the rules, - young<<if $player.gender is "m">> man.<<elseif $player.penisExist and $player.vaginaExist and $player.gender_appearance is "m">>... man?<<elseif $player.penisExist and $player.vaginaExist and $player.gender_appearance is "f">>... lady?<<else>> lady.<</if>>" + young<<if $player.gender is "m">> man.<<elseif $player.gender is "f" and $player.trans is "t">>'man'.<<elseif $player.penisExist and $player.vaginaExist and $player.gender_appearance is "m">>... man?<<elseif $player.gender is "m" and $player.trans is "t">>'lady'.<<elseif $player.penisExist and $player.vaginaExist and $player.gender_appearance is "f">>... lady?<<else>> lady.<</if>>" <br><br> <</if>> <<if playerChastity()>> diff --git a/game/overworld-town/loc-school/hallways.twee b/game/overworld-town/loc-school/hallways.twee index 9fec5967f..e3cc6629f 100644 --- a/game/overworld-town/loc-school/hallways.twee +++ b/game/overworld-town/loc-school/hallways.twee @@ -31,6 +31,33 @@ <<orgasmLocation "schoolHallway">> <</if>> <<schoolperiodtext>> + +<<if Time.monthName is "June" and Time.monthDay gte 1>> + <<if $clubCheck is "f">> + <<set $clubCheck to "t">> + <</if>> +<</if>> +<<if ($schoolstate is "morning" or $schoolstate is "lunch") and Time.monthName is "June" and Time.monthDay gte 1>> + <<if $clubCheck is "t" and $clubIntro is 0 and ($schoolstate is "morning" or $schoolstate is "lunch")>> + <<generatey1>><<generatey2>> + You overhear a couple students standing in front of a bulletin board in the hallway. + <br><br> + "Hey, this one's new, isn't it?" the <<person1>><<person>> says, pointing at a flier attached to the board. "You ever think about joining a club?" + "Maybe?" the <<person2>><<person>> responds. "I dunno, seems like a lot of work. I'd rather just relax after school, y'know?" + "I'm in one and it's totally worth it," the <<person1>><<person>> says. "Lots of fun! I don't think we're recruiting right now, though..." + The <<person1>><<person>> and the <<person2>><<person>> walk off, <<if $cool gte 160>>giving you a friendly wave<<elseif $cool lte 40>>trying not to make eye contact with you<<else>>chatting about their plans for after school<</if>> as they walk by. + <br><br> + Curious about what they were looking at, you approach the board and read the flier the <<person1>><<person>> was pointing out. + It's for something called the Rainbow Club, and it looks like it was established just recently. Apparently it gets together every Tuesday and Thursday in one of the previously-unused classrooms. + <br><br> + The flier also mentions that they're looking for new members. You could probably join if you decide to attend one of their meetings. + <br><br> + <span class ="gold">You can now go to the Rainbow Club.</span> + <br><br> + <<set $clubIntro to 1>> + <</if>> +<</if>> + <<set $danger to random(1, 10000)>><<set $dangerevent to 0>> <<if $forcedcrossdressingdisable is "t">><<unset $whitneyskirtmaths>><</if>> <<if $whitneypantiesmaths or $whitneyskirtmaths>> @@ -163,6 +190,10 @@ <br> <<historyicon>><<link [[History classroom (0:01)|History Classroom]]>><<pass 1>><</link>> <br> + <<if $clubIntro gte 1>> + <<clubicon>><<link [[Club room (0:01)|Club Room]]>><<pass 1>><</link>> + <</if>> + <br> <</if>> <</if>> @@ -178,6 +209,8 @@ <<if $schoolrep.herm gte 5>> A <<person1>><<person>> spots you first, and whispers to <<his>> friends. As you pass, three of them grab you and shove you against a locker. The others goad them on, encouraging them to punish the "freak". <br><br> + <<elseif $schoolrep.crossdress gte 5 and $player.trans is "t">> + A <<person1>><<person>> spots you first, and whispers to <<his>> friends. You overhear <<if $slurToggle is "f">>"tranny"<<else>>"delusional"<</if>> and "freak." As you pass, three of them grab you and shove you against a locker. <<elseif $schoolrep.crossdress gte 5>> A <<person1>><<person>> spots you first, and whispers to <<his>> friends. You overhear "crossdresser" and "pervert". As you pass, three of them grab you and shove you against a locker. <br><br> diff --git a/game/overworld-town/loc-school/main.twee b/game/overworld-town/loc-school/main.twee index c99f8a470..f6683e95d 100644 --- a/game/overworld-town/loc-school/main.twee +++ b/game/overworld-town/loc-school/main.twee @@ -421,7 +421,7 @@ The school gate is shut and sealed by a sturdy padlock. <<set _studentsKnow to ($schoolrep.crossdress gte 4 and $changingroomstate is "own") or ($schoolrep.crossdress gte 5 and $changingroomstate isnot "empty")>> <<set _seenGender to ($NudeGenderDC isnot -1 and $schoolrep.crossdress gte 4 and _studentsKnow) ? $player.gender : $player.gender_appearance>> -<<set _uncomfortableGender to ($backgroundTraits.includes("crossdresser") ? $player.gender : false)>> +<<set _uncomfortableGender to ($backgroundTraits.includes("crossdresser") or $player.trans is "t" ? $player.gender : false)>> <<set _delinquentGender to ($changingroomstate is "empty" ? false : _seenGender)>> <<if $changingroomstate is "empty">> @@ -429,7 +429,7 @@ The school gate is shut and sealed by a sturdy padlock. <<else>> You are outside the school changing rooms. You need to pass through them to access the pool. You hear chatter from both sides. - <<if $NudeGenderDC isnot -1 and _studentsKnow>> + <<if $NudeGenderDC is 2 and _studentsKnow>> <<if $schoolrep.crossdress gte 4>> <br><br> <<print ($changingroomstate is "own" ? "Your classmates know" : "Everyone knows")>> you should be using the <<print ($player.gender is "m" ? "boys'" : "girls'")>> changing room. @@ -699,7 +699,8 @@ You haul yourself over the fence and drop down on the other side. <<He>> hands you a worn-looking school shirt and a pair of school shorts. "You can get changed in the storeroom. I'll have your clothes sent to the pool for you to collect after school." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <!-- TRANSMOD The conditional trauma and stress are there to represent this striking an insecurity of trans PCs --> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "m" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "m" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the boys' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>><<if !$genderknown.includes("Leighton")>><<note "Leighton will be suspicious" "pink">><</if>> <br> @@ -708,7 +709,7 @@ You haul yourself over the fence and drop down on the other side. <<He>> hands you a worn-looking school shirt and skirt. <<He>> speaks before you can articulate any apprehension. "I know it's a girl's uniform, but it's all I have. Wear your own uniform if you don't want this to happen in the future." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "f" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "f" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the girls' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>> <br> @@ -719,7 +720,7 @@ You haul yourself over the fence and drop down on the other side. <<He>> hands you a worn-looking school shirt and a school skirt. "You can get changed in the storeroom. I'll have your clothes sent to the pool for you to collect after school." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "f" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "f" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the girls' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>><<if !$genderknown.includes("Leighton")>><<note "Leighton will be suspicious" "pink">><</if>> <br> @@ -728,7 +729,7 @@ You haul yourself over the fence and drop down on the other side. <<He>> hands you a worn-looking school shirt and pair of shorts. <<He>> speaks before you can articulate any apprehension. "I know it's a boy's uniform, but it's all I have. Wear your own uniform if you don't want this to happen in the future." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "m" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "m" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the boys' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>> <br> @@ -740,7 +741,7 @@ You haul yourself over the fence and drop down on the other side. <<set $clothingselector to "m">> <<He>> hands you a worn-looking pair of school shorts. "You can get changed in the storeroom. I'll have your clothes sent to the pool for you to collect after school." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "m" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "m" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the boys' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>><<if !$genderknown.includes("Leighton")>><<note "Leighton will be suspicious" "pink">><</if>> <br> @@ -749,7 +750,7 @@ You haul yourself over the fence and drop down on the other side. <<He>> hands you a worn-looking school skirt. <<He>> speaks before you can articulate any apprehension. "I know it's a girl's uniform, but it's all I have. Wear your own uniform if you don't want this to happen in the future." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "f" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "f" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the girls' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>> <br> @@ -759,7 +760,7 @@ You haul yourself over the fence and drop down on the other side. <<set $clothingselector to "f">> <<He>> hands you a worn-looking school skirt. "You can get changed in the storeroom. I'll have your clothes sent to the pool for you to collect after school." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "f" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "f" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the girls' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>><<if !$genderknown.includes("Leighton")>><<note "Leighton will be suspicious" "pink">><</if>> <br> @@ -768,7 +769,7 @@ You haul yourself over the fence and drop down on the other side. <<He>> hands you a worn-looking pair of school shorts. <<He>> speaks before you can articulate any apprehension. "I know it's a boy's uniform, but it's all I have. Wear your own uniform if you don't want this to happen in the future." <<He>> turns back to <<his>> computer and leaves you to change. <br><br> - <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><</link>> + <<link [[Get changed and leave (0:01)|Hallways]]>><<schoolspareclothes>><<endevent>><<pass 1>><<if $player.gender is "m" and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is "f" and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Refuse to wear the boys' uniform |Head's Office Refusal]]>><<detention 1>><</link>><<gdelinquency>> <br> @@ -807,7 +808,7 @@ You haul yourself over the fence and drop down on the other side. <<elseif $speech_attitude is "bratty">> "I won't wear _offeredclothing!" you say. <<else>> - <<if $player.gender is $clothingselector and !$backgroundTraits.includes("crossdresser")>><!-- Crossdresser trait makes PC distressed by not crossdressing and so goes to "I can't" --> + <<if $player.gender is $clothingselector and !$backgroundTraits.includes("crossdresser") and $player.trans isnot "t">><!-- if PC is distressed by offered clothes, goes to "I can't" --> "Are you sure you don't have a <<print ($clothingselector is "f" ? "pair of shorts" : "skirt")>>?" you ask. <<else>> "But I can't wear _offeredclothing!" you say. @@ -818,7 +819,7 @@ You haul yourself over the fence and drop down on the other side. <<He>> looks slightly confused for a moment, before turning back to <<his>> computer to look something up. <<He>> skims briefly before <<if $player.penisExist and $player.vaginaExist>><!-- implication: PC's ambiguous sex is recorded as medical information --> gasping at what <<he>> finds. - <<elseif $backgroundTraits.includes("crossdresser")>><!-- deliberately ambiguous implication: PC has been crossdressing for long enough for it to be on file --> + <<elseif $backgroundTraits.includes("crossdresser") or $player.trans is "t">><!-- deliberately ambiguous implication: PC has been at this for long enough for it to be on file --> smirking at what <<he>> finds. <<else>> quirking a brow at what <<he>> finds and typing something in. @@ -826,13 +827,13 @@ You haul yourself over the fence and drop down on the other side. <<He>> looks back up and says, "I'm sorry, but this uniform is all I have. Now, get dressed." <<set $genderknown.pushUnique("Leighton")>><<if $player.penisExist and $player.vaginaExist>><<detention -1>><</if>> <!-- Leighton is too surprised to be angry at herm PC right now --> <<elseif $player.gender is $clothingselector and $genderknown.includes("Leighton")>> - <<He>> looks at you sternly and scoffs. "If you want to dress as a <<print ($clothingselector is "m" ? "girl" : "boy")>>, that's your prerogative, but perhaps you should come dressed like it next time. Now, get dressed." + <<He>> looks at you sternly and scoffs. "If you want to <<if $player.trans is "t">>be<<else>>dress as<</if>> a <<print ($clothingselector is "m" ? "girl" : "boy")>>, that's your prerogative, but perhaps you should come dressed like it next time. Now, get dressed." <<else>> <<He>> looks at you sternly. "Don't talk back. I told you to get dressed. Now, get dressed." <</if>> <br><br> -<<link [[Wear the clothes and leave (0:01)|Hallways]]>><<schoolspareclothes>><<pass 1>><<endevent>><</link>> +<<link [[Wear the clothes and leave (0:01)|Hallways]]>><<schoolspareclothes>><<pass 1>><<endevent>><<if $player.gender is $clothingselector and $player.trans is "t">><<trauma 6>><<stress 6>><</if>><</link>><<if $player.gender is $clothingselector and $player.trans is "t">><<gtrauma>><<gstress>><</if>> <br> <<link [[Walk out|Hallways]]>><<detention 3>><<endevent>><</link>><<gdelinquency>> <br> @@ -2124,8 +2125,10 @@ The <<person2>><<person>> tries to grab you again, but you bat <<his>> arm away. <<if $exposed gte 2>> They stand around you, staring at your exposed genitals. <br> - <<if $schoolrep.crossdress gte 5>> + <<if $schoolrep.crossdress gte 5 and $player.trans isnot "t">> "It's true," the <<person1>><<person>> shouts. "A crossdressing pervert!" + <<elseif $schoolrep.crossdress gte 5 and $player.trans is "t" and $player.gender is "m">>>> + "It's true," the <<person1>><<person>> shouts. "A shemale!" <<else>> "It's true," the <<person1>><<person>> shouts. "A freak!" <</if>> @@ -2158,8 +2161,10 @@ The <<person2>><<person>> tries to grab you again, but you bat <<his>> arm away. <br><br> They stand around you, staring at your exposed genitals. <br> - <<if $schoolrep.crossdress gte 5>> + <<if $schoolrep.crossdress gte 5 and $player.trans isnot "t">> "It's true," the <<person1>><<person>> shouts. "A crossdressing pervert!" + <<elseif $schoolrep.crossdress gte 5 and $player.trans is "t" and $player.gender is "m">> + "It's true," the <<person1>><<person>> shouts. "A shemale!" <<else>> "It's true," the <<person1>><<person>> shouts. "A freak!" <</if>> @@ -2252,6 +2257,8 @@ The <<fullGroup>> each stare at your crotch, astonishment on their faces. <br> <<if $schoolrep.herm gte 5>> "<<pShes>> a freak." +<<elseif $schoolrep.crossdress gte 5 and $player.trans is "t">> + "<<pShes>> a <<if $slurToggle is "f">>tranny<<else>>trans<</if>>, and <<pShe>> hasn't even had the surgery yet!" <<else>> "<<pShes>> a pervert." <</if>> diff --git a/game/overworld-town/loc-school/maths-project.twee b/game/overworld-town/loc-school/maths-project.twee index c2f5691ab..160a10d5e 100644 --- a/game/overworld-town/loc-school/maths-project.twee +++ b/game/overworld-town/loc-school/maths-project.twee @@ -1856,7 +1856,32 @@ Gasps and laughter fill the hall. Some look away, but most stare in astonishment <<famepregnancy 1>> <</if>> <<schoolrep herm 1>> -<<elseif $player.gender isnot $player.gender_appearance and !playerChastity("hidden")>> +<<elseif $player.gender isnot $player.gender_appearance and $player.trans is "t" and !playerChastity("hidden")>> + <<if $player.gender is "m">> + "She's a he!" someone shouts. + <br> + "Are they one of those transgendereds or something?" + <br> + "I bet they're doing this on purpose." + <br> + "Oh God, that poor girl must be so humiliated right now." + <br> + "If she wants everyone to treat her like a girl, she shouldn't be flashing her pe-- I mean, he shouldn't be flashing his penis!"<<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>> + <br> + <<else>> + "He's a she!" someone shouts. + <br> + "Are they one of those transgendereds or something?" + <br> + "I bet they're doing this on purpose." + <br> + "Oh God, that poor boy must be so humiliated right now." + <br> + "If he wants everyone to treat him like a boy, he shouldn't be flashing his pu-- I mean, she shouldn't be flashing her pussy!"<<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>> + <br> + <</if>> + <<schoolrep_naked>> +<<elseif $player.gender isnot $player.gender_appearance and $player.trans isnot "t" and !$worn.genitals.type.includes("hidden")>> <<if $player.gender is "m">> "He's a boy!" someone shouts. <br> @@ -1875,7 +1900,7 @@ Gasps and laughter fill the hall. Some look away, but most stare in astonishment <br><<schoolrep crossdress 1>> <</if>> -With a shaking voice you try to talk through your solution as if nothing is amiss. <<if $worn.under_lower.type.includes("naked")>> As if your <<genitals>> does not have the attention of everyone in the room. <</if>>The photographer darts around in front of the stage, taking pictures of you from every angle. +With a shaking voice you try to talk through your solution as if nothing is amiss. <<if $worn.under_lower.type.includes("naked")>> As if your <<genitals>> does not have the attention of everyone in the room.<<if $player.trans is "t">><<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>><</if>><</if>> The photographer darts around in front of the stage, taking pictures of you from every angle. <br><br> You reach the end of your presentation. The audience cheer and applaud. You feel around for the hooks, and remove them one by one. Your skirt falls back into place, covering your <<undies>>. Whitney leans back and smirks. @@ -1926,7 +1951,32 @@ Gasps and laughter fill the hall. Some look away, but most stare in astonishment <<famepregnancy 1>> <</if>> <<schoolrep herm 1>> -<<elseif $player.gender isnot $player.gender_appearance and !playerChastity("hidden")>> +<<elseif $player.gender isnot $player.gender_appearance and $player.trans is "t" and !playerChastity("hidden")>> + <<if $player.gender is "m">> + "She's a he!" someone shouts. + <br> + "Are they one of those transgendereds or something?" + <br> + "I bet they're doing this on purpose." + <br> + "Oh God, that poor girl must be so humiliated right now." + <br> + "If she wants everyone to treat her like a girl, she shouldn't be flashing her pe-- I mean, he shouldn't be flashing his penis!"<<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>> + <br> + <<else>> + "He's a she!" someone shouts. + <br> + "Are they one of those transgendereds or something?" + <br> + "I bet they're doing this on purpose." + <br> + "Oh God, that poor boy must be so humiliated right now." + <br> + "If he wants everyone to treat him like a boy, he shouldn't be flashing his pu-- I mean, she shouldn't be flashing her pussy!"<<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>> + <br> + <</if>> + <<schoolrep_naked>> +<<elseif $player.gender isnot $player.gender_appearance and $player.trans isnot "t" and !$worn.genitals.type.includes("hidden")>> <<if $player.gender is "m">> "He's a boy!" someone shouts. <br> @@ -1945,7 +1995,7 @@ Gasps and laughter fill the hall. Some look away, but most stare in astonishment <br><<schoolrep crossdress 1>> <</if>> -With a shaking voice you try to talk through your solution as if nothing is amiss. <<if $worn.under_lower.type.includes("naked")>> As if your <<if $player.penisExist>><<penis>><<else>><<pussy>><</if>> does not have the attention of everyone in the room. <</if>>The photographer darts around in front of the stage, taking pictures of you from every angle. +With a shaking voice you try to talk through your solution as if nothing is amiss. <<if $worn.under_lower.type.includes("naked")>> As if your <<if $player.penisExist>><<penis>><<else>><<pussy>><</if>> does not have the attention of everyone in the room.<<if $player.trans is "t">><<stress 12>><<trauma 12>><<ggstress>><<ggtrauma>><</if>><</if>> The photographer darts around in front of the stage, taking pictures of you from every angle. <br><br> You reach the end of your presentation. The audience cheer and applaud. You crouch to feel around for the hooks, and remove them one by one. You pull your $worn.lower.name into place, covering your <<undies>>. Whitney leans back and smirks. diff --git a/game/overworld-town/loc-school/widgets-events.twee b/game/overworld-town/loc-school/widgets-events.twee index 994ea2665..d85d77c38 100644 --- a/game/overworld-town/loc-school/widgets-events.twee +++ b/game/overworld-town/loc-school/widgets-events.twee @@ -51,8 +51,34 @@ <<if $player.penisExist and $player.vaginaExist>> <<set _correctBathroom to ($NPCName[$NPCNameList.indexOf("Whitney")].pronoun is "m" ? "boys" : "girls")>> <</if>> - <<if $changingRoomGender is "boys" and $player.gender is "m" or $changingRoomGender is "girls" and $player.gender is "f" or ($player.penisExist and $player.vaginaExist) and $changingRoomGender isnot _correctBathroom>> - <<if $player.gender is $NPCName[$NPCNameList.indexOf("Whitney")].pronoun>> + <<if ($player.trans is "f" and $changingRoomGender is "boys" and $player.gender is "m") or ( $player.trans is "f" and $changingRoomGender is "girls" and $player.gender is "f") or $player.gender is "h" and $changingRoomGender isnot _correctBathroom>> + <<if $player.gender is C.npc.Whitney.pronoun>> + <<npc Whitney>><<person1>> + You bump into Whitney. <<His>> expression darkens. "What did I say about showing your face in here?" <<he>> says. "I guess I'll have to beat it into you." + <br><br> + <<His>> friends block the exit. + <br><br> + <<link [[Next|Bully Toilets Fight]]>><<set $fightstart to 1>><</link>> + <<else>> + <<generatey1>><<generatey2>><<generatey3>><<person1>> + A few of Whitney's friends enter the toilets. They smirk when they see you. + <br><br> + "Naughty," a <<person>> says. "Didn't you hear that you're not supposed to come here anymore? Or were you just looking for an excuse to get punished? You're in luck. Whitney said we can do whatever we want to you in here." + <br><br> + They close in around you. + <br><br> + <<if $submissive lte 500>> + <<link [[Threaten|Bully Friends Threaten]]>><<def 1>><</link>><<defianttext>> + <br> + <<elseif $submissive gte 1500>> + <<link [[Submit|Bully Friends Rape]]>><<set $molestationstart to 1>><<set $phase to 1>><<sub 1>><</link>><<submissivetext>> + <br> + <</if>> + <<link [[Endure|Bully Friends Rape]]>><<set $phase to 0>><<set $molestationstart to 1>><</link>> + <br> + <</if>> + <<elseif ($player.trans is "t" and $changingRoomGender is "boys" and $player.gender is "f") or ($player.trans is "t" and $changingRoomGender is "girls" and $player.gender is "m") or $player.gender is "h" and $changingRoomGender isnot _correctBathroom>> + <<if $player.gender isnot $NPCName[$NPCNameList.indexOf("Whitney")].pronoun>> <<npc Whitney>><<person1>> You bump into Whitney. <<His>> expression darkens. "What did I say about showing your face in here?" <<he>> says. "I guess I'll have to beat it into you." <br><br> @@ -78,10 +104,10 @@ <br> <</if>> <<else>> - <<if $player.gender is $NPCName[$NPCNameList.indexOf("Whitney")].pronoun>> + <<if ($player.gender is C.npc.Whitney.pronoun and $player.trans is "f") or ($player.gender isnot C.npc.Whitney.pronoun and $player.trans is "t")>> A couple of Whitney's friends enter the bathroom. They laugh and nudge each other. They make no aggressive moves, but they refuse to leave you alone. <br><br> - "We're just here to make sure you <<if $player.gender is "m">>sit down to pee<<else>>know how to use the urinal<</if>>. Whitney's orders." + "We're just here to make sure you <<if $changingRoomGender is "girls">>sit down to pee<<else>>know how to use the urinal<</if>>. Whitney's orders." <br><br> They stick to words. It seems Whitney hasn't given them permission to lay their hands on you. They soon grow bored and return to the hallway. <<gtrauma>><<gstress>><<trauma 6>><<stress 6>> @@ -390,7 +416,9 @@ <<elseif $cool gte 120>> <<if $schoolrep.herm gte 5 and !$worn.face.type.includes("mask")>> You pass by a group of students who break into whispers as you pass by. You hear something about a hermaphrodite. - <<elseif $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> + <<elseif $schoolrep.crossdress gte 5 and!$worn.face.type.includes("mask") and $player.trans is "t">> + You pass by a group of students who break into whispers as you pass by. You hear something about a sex change. + <<elseif $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> You pass by a group of students who break into whispers as you pass by. You hear something about a crossdresser. <<else>> You pass by a group of students who completely ignore you. You might as well be invisible to them. @@ -403,7 +431,9 @@ <<elseif $cool gte 40>> <<if $schoolrep.herm gte 5 and !$worn.face.type.includes("mask")>> You pass a group of students who mock and call you a freak. - <<elseif $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> + <<elseif $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask") and $player.trans is "t">> + You pass a group of students who mock you for being trans. + <<elseif $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> You pass a group of students who mock you for crossdressing. <<else>> You pass a group of students who mock and laugh at you. @@ -519,7 +549,7 @@ <<link [[Next|Hallways]]>><<endevent>><<set $eventskip to 1>><</link>> <br> - <<elseif $rng gte 51 and $schoolrep.crossdress gte 5 and !$worn.face.type.includes("mask")>> + <<elseif $rng gte 51 and $schoolrep.crossdress gte 5 and $player.trans isnot "t" and !$worn.face.type.includes("mask")>> <<generatey1>><<generatey2>><<generatey3>> You hear whispering behind you. <br> @@ -687,6 +717,326 @@ <br><br> <<link [[Next|Hallways]]>><<endevent>><<set $eventskip to 1>><</link>> <br> + <<elseif $rng gte 51 and $schoolrep.crossdress gte 5 and $player.trans is "t" and !$worn.face.type.includes("mask")>> + <<generatey1>><<generatey2>><<generatey3>> + You hear whispering behind you. + <br> + <<if $player.gender_appearance is "f">> + <<if $player.gender is "f">> + <!--trans boy, feminine appearance --> + <<if !playerBellyVisible() and ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <<if random(1, 2) is 2>> + "She thinks she's a boy?" a <<person1>><<person>> says. "She looks like a girl now." + <<else>> + "She's the one?" a <<person1>><<person>> says. "Who thinks she's a boy? I wouldn't know it from looking at her." + <</if>> + <br> + <<if random(1, 2) is 2>> + "She knows she really isn't," a <<person2>><<person>> replies. "She just wishes she were." + <<else>> + "She looks just like a boy when she wants to," a <<person2>><<person>> replies. "Maybe it's just to trick people into sex." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with her," a <<person3>><<person>> adds. "She's a weirdo." + <<else>> + "That's sad," a <<person3>><<person>> adds. "She needs to get help." + <</if>> + <<elseif !playerBellyVisible() and $slurToggle is "f">> + <<if random(1, 2) is 2>> + "You sure she's a tranny?" a <<person1>><<person>> asks. "She looks just like a girl." + <<else>> + "You must be getting muddled," a <<person1>><<person>> says. "No way she thinks she's a boy." + <</if>> + <br> + <<if random(1, 2) is 2>> + "No mistake. That's the one," a <<person2>><<person>> replies. "She was born with a fanny and all." + <<else>> + "That's the right one. She's the one that thinks she's a boy," a <<person2>><<person>> replies. "They're getting a sex change." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with them," a <<person3>><<person>> adds. "They're a weirdo." + <<else>> + "Why would they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <<else>> + <<if ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <<if random(1, 2) is 2>> + "She thinks she's a boy? How?" a <<person1>><<person>> asks. "She's obviously pregnant..." + <<else>> + "She's the one?" a <<person1>><<person>> says. "Who thinks she's a boy? Hard to deny reality with a belly like that." + <</if>> + <br> + <<if random(1, 2) is 2>> + "How could she?" a <<person2>><<person>> replies. "She's going to be a mother. A boy being a mother just wouldn't be right." + <<else>> + "She should try looking in a mirror sometime," a <<person2>><<person>> snickers. "Should dispel that notion real quick." + <</if>> + <br> + <<if random(1, 2) is 2>> + "I'll say," a <<person3>><<person>> agrees. "Delusional, just like the rest of them." + <<else>> + "For sure," a <<person3>><<person>> agrees. "Whatever's going on with her, she needs help. Like, the professional kind." + <</if>> + <<schoolrep crossdress -1>> + <<elseif $slurToggle is "f">> + <<if random(1, 2) is 2>> + "She thinks she's a boy? How?" a <<person1>><<person>> asks. "She's obviously pregnant..." + <<else>> + "She's the one?" a <<person1>><<person>> says. "Who thinks she's a boy? Hard to deny reality with a belly like that." + <</if>> + <br> + <<if random(1, 2) is 2>> + "How could she?" a <<person2>><<person>> replies. "She's going to be a mother. A boy being a mother just wouldn't be right." + <<else>> + "She should try looking in a mirror sometime," a <<person2>><<person>> snickers. "Should dispel that notion real quick." + <</if>> + <br> + <<if random(1, 2) is 2>> + "I'll say," a <<person3>><<person>> agrees. "Delusional, just like the rest of them." + <<else>> + "For sure," a <<person3>><<person>> agrees. "Whatever's going on with her, she needs help. Like, the professional kind." + <</if>> + /*<<schoolrep crossdress -1>>*/ + <</if>> + <</if>> + <<else>> + <!--trans girl, feminine appearance --> + <<if !playerBellyVisible() and ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <<if random(1, 2) is 2>> + "You sure she's a boy?" a <<person1>><<person>> asks. "She looks just like a girl." + <<else>> + "You must be getting muddled," a <<person1>><<person>> says. "No way that's a boy." + <</if>> + <br> + <<if random(1, 2) is 2>> + "No mistake. That's the one, he thinks he's a girl," a <<person2>><<person>> replies. "He was born with the wedding tackle and all." + <<else>> + "That's the right one. She's a he," a <<person2>><<person>> replies. "They're getting a sex change." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with them," a <<person3>><<person>> adds. "They're a weirdo." + <<else>> + "Why would they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <<elseif !playerBellyVisible() and $slurToggle is "f">> + <<if random(1, 2) is 2>> + "You sure she's a tranny?" a <<person1>><<person>> asks. "She looks just like a girl." + <<else>> + "You must be getting muddled," a <<person1>><<person>> says. "No way she used to be a boy." + <</if>> + <br> + <<if random(1, 2) is 2>> + "No mistake. That's a shemale," a <<person2>><<person>> replies. "She was born with the wedding tackle and all." + <<else>> + "That's the right one. She's a he," a <<person2>><<person>> replies. "They're getting a sex change." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with them," a <<person3>><<person>> adds. "They're a weirdo." + <<else>> + "Why would they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <<elseif ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <<if random(1, 2) is 2>> + "You sure she's actually a trans?" a <<person1>><<person>> asks. "She's totally pregnant. How could a boy be pregnant!?" + <<else>> + "You must be getting muddled," a <<person1>><<person>> says. "No way that's a trans. She's pregnant!" + <</if>> + <<if random(1, 2) is 2>> + "Yeah," a <<person2>><<person>> adds. "I've never heard of a transgender getting knocked up before." + <<else>> + "You must be thinking of someone else. She's clearly an actual girl," a <<person2>><<person>> adds. "Seriously, you've gotta quit sleeping through science class." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Still, though, look at that baby bump," a <<person3>><<person>> replies. "Even if she's not one of those freaks, she's still a total slut." + <<else>> + "Either way," a <<person3>><<person>> replies. "you'd have to be totally shameless to still come to school like that." + <</if>> + <<schoolrep crossdress -1>> + <<elseif $slurToggle is "f">> + <<if random(1, 2) is 2>> + "You sure she's a tranny?" a <<person1>><<person>> asks. "She's totally pregnant. How could a boy be pregnant!?" + <<else>> + "You must be getting muddled," a <<person1>><<person>> says. "No way that's a tranny. She's pregnant!" + <</if>> + <br> + <<if random(1, 2) is 2>> + "Yeah," a <<person2>><<person>> adds. "I've never heard of a transgender getting knocked up before." + <<else>> + "You must be thinking of someone else. She's clearly an actual girl," a <<person2>><<person>> adds. "Seriously, you've gotta quit sleeping through science class." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Still, though, look at that baby bump," a <<person3>><<person>> replies. "Even if she's not one of those freaks, she's still a total slut." + <<else>> + "Either way," a <<person3>><<person>> replies. "you'd have to be totally shameless to still come to school like that." + <</if>> + <<schoolrep crossdress -1>> + <</if>> + <</if>> + <<else>> + <<if $player.gender is "m">> + <!--trans girl, masculine appearance --> + <<if !playerBellyVisible() and ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <<if random(1, 2) is 2>> + "He thinks he's a girl?" a <<person1>><<person>> says. "He looks like a boy now." + <<else>> + "He's the one?" a <<person1>><<person>> says. "Who thinks he's a girl? I wouldn't know it from looking at him." + <</if>> + <br> + <<if random(1, 2) is 2>> + "He knows he really isn't," a <<person2>><<person>> replies. "He just wishes he were." + <<else>> + "He looks just like a girl when he wants to," a <<person2>><<person>> replies. "Maybe it's just to trick people into sex." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with him," a <<person3>><<person>> adds. "He's a weirdo." + <<else>> + "That's sad," a <<person3>><<person>> adds. "He needs to get help." + <</if>> + <<elseif !playerBellyVisible() and $slurToggle is "f">> + <<if random(1, 2) is 2>> + "You sure he's a tranny?" a <<person1>><<person>> asks. "He looks just like a boy." + <<else>> + "He's the one?" a <<person1>><<person>> says. "Who thinks he's a girl? I wouldn't know it from looking at him." + <</if>> + <br> + <<if random(1, 2) is 2>> + "He knows he really isn't," a <<person2>><<person>> replies. "He just wishes he were." + <<else>> + "He looks just like a girl when he wants to," a <<person2>><<person>> replies. "Maybe it's just to trick people into sex." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with him," a <<person3>><<person>> adds. "He's a weirdo." + <<else>> + "Why do they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <<elseif ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <<if random(1, 2) is 2>> + "He thinks he's a girl?" a <<person1>><<person>> asks. "More like she thinks she's a boy." + <<else>> + "He's the one?" a <<person1>><<person>> asks. "Don't you mean she's the one? Her belly's clear as day." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Must be some sort of mistake," a <<person2>><<person>> replies. "If she was really a trans then she wouldn't be pregnant." + <<else>> + "That's clearly the wrong one. She's an actual girl," a <<person2>><<person>> replies. "Bet she got knocked up by one of the teachers or something." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever the reason," a <<person3>><<person>> adds, "She's a pervert." + <<else>> + "Either way," a <<person3>><<person>> adds, "you'd have to be totally shameless to still come to school like that." + <</if>> + /*<<schoolrep crossdress -1>>*/ + <<elseif $slurToggle is "f">> + <<if random(1, 2) is 2>> + "He thinks he's a girl?" a <<person1>><<person>> asks. "More like she thinks she's a boy." + <<else>> + "He's the one?" a <<person1>><<person>> asks. "Don't you mean she's the one? Her belly's clear as day." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Must be some sort of mistake," a <<person2>><<person>> replies. "If she was really a tranny then she wouldn't be pregnant." + <<else>> + "That's clearly the wrong one. She's an actual girl," a <<person2>><<person>> replies. "Bet she got knocked up by one of the teachers or something." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever the reason," a <<person3>><<person>> adds, "She's a pervert." + <<else>> + "Either way," a <<person3>><<person>> adds, "you'd have to be totally shameless to still come to school like that." + <</if>> + <</if>> + <<else>> + <<if !playerBellyVisible() and ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <!--trans boy, masculine appearance --> + <<if random(1, 2) is 2>> + "You sure he's a girl?" a <<person1>><<person>> asks. "He looks just like a boy." + <<else>> + "You must be getting muddled," a <<person1>><<person>> says. "No way that's a girl." + <</if>> + <br> + <<if random(1, 2) is 2>> + "No mistake. He used to be a girl," a <<person2>><<person>> replies. "Born with a fanny and all." + <<else>> + "That's the right one. He's a she," a <<person2>><<person>> replies. "They're getting a sex change." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with them," a <<person3>><<person>> adds. "They're a weirdo." + <<else>> + "Why do they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <<elseif !playerBellyVisible() and $slurToggle is "f">> + <<if random(1, 2) is 2>> + "You sure he's a tranny?" a <<person1>><<person>> asks. "He looks just like a boy." + <<else>> + "You must be getting muddled," a <<person1>><<person>> says. "No way he used to be a girl." + <</if>> + <br> + <<if random(1, 2) is 2>> + "No mistake. He used to be a girl," a <<person2>><<person>> replies. "Born with a fanny and all." + <<else>> + "That's the right one. He's a she," a <<person2>><<person>> replies. "They're getting a sex change." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with them," a <<person3>><<person>> adds. "They're a weirdo." + <<else>> + "Why do they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <<elseif ($slurToggle is "t" or ($slurToggle is "f" and random(1, 2) is 2))>> + <<if random(1, 2) is 2>> + Is she serious??" a <<person1>><<person>> asks. "She must be delusional if she thinks anyone would believe she's a guy with a baby bump like that..." + <<else>> + "You've gotta wonder if she knows," a <<person1>><<person>> says. "There's no running away from biological reality. That belly proves it." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Seriously," a <<person2>><<person>> replies. "I bet she gets off on spying on the boys in the locker room." + <<else>> + "I bet she's one of those 'fujoshi' I keep hearing about," a <<person2>><<person>> replies. "Pretending she's a boy to live out some sick fantasy. Ew." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with them," a <<person3>><<person>> adds. "They're a weirdo." + <<else>> + "Why do they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <<elseif $slurToggle is "f">> + <<if random(1, 2) is 2>> + Is she serious??" a <<person1>><<person>> asks. "She must be delusional if she thinks anyone would believe she's a guy with a baby bump like that..." + <<else>> + "You've gotta wonder if she knows," a <<person1>><<person>> says. "There's no running away from biological reality. That belly proves it." + <</if>> + <br> + <<if random(1, 2) is 2>> <!-- --> + "Seriously," a <<person2>><<person>> replies. "I bet she only does it to sneak into the boys' locker room." + <<else>> + "I bet she's one of those 'fujoshi' I keep hearing about," a <<person2>><<person>> replies. "Pretending she's a boy to live out some sick fantasy. Ew." + <</if>> + <br> + <<if random(1, 2) is 2>> + "Whatever's going on with them," a <<person3>><<person>> adds. "They're a weirdo." + <<else>> + "Why do they let people like this in our school?" a <<person3>><<person>> adds. "They're a freak." + <</if>> + <</if>> + <</if>> + <</if>> + <br><br> + The three glance at you, and hurry away when they notice you looking.<<gtrauma>><<gstress>><<trauma 6>><<stress 6>> + <br><br> + <<link [[Next|Hallways]]>><<endevent>><<set $eventskip to 1>><</link>> + <br> <<elseif $rng gte 41 and _fameRumour.length gt 0>> /* Using random in case the player has fame in multiple categories */ <<set _selectedRumour to _fameRumour.random()>> @@ -1315,7 +1665,7 @@ <<link [[Flaunt|Courtyard Herm Flaunt]]>><</link>><<exhibitionist5>> <br> <</if>> - <<elseif $rng gte 61 and $schoolrep.crossdress gte 5 and $player.gender isnot $player.gender_appearance and !$worn.face.type.includes("mask")>> + <<elseif $rng gte 61 and $schoolrep.crossdress gte 5 and $player.trans isnot "t" and $player.gender isnot $player.gender_appearance and !$worn.face.type.includes("mask")>> <<generatey1>><<generatey2>><<generatey3>> A <<fullGroup>> surround you. <br><br> @@ -1325,19 +1675,50 @@ "Nice," says a <<person2>><<person>>, leering at your crotch. "How about you show us?" <<He>> makes a grab for your $worn.lower.name, but you dodge out of the way. <br><br> - You're still surrounded. The staff room is nearby. Perhaps a teacher would hear if you called for help. + You're still surrounded. The staff room is nearby. Perhaps a teacher would hear if you called for help. + <br><br> + + <<link [[Fight|Playground Herm Resist]]>><<def 1>><</link>> + <br> + <<link [[Call for help|Playground Herm Call]]>><<set $rescued += 1>><<status -10>><<trauma -6>><<stress -6>><</link>><<lcool>><<ltrauma>><<lstress>> + <br> + <<link [[Show|Playground Herm Show]]>><<sub 1>><<trauma 6>><<stress 6>><</link>><<gtrauma>><<gstress>> + <br> + <<if $exhibitionism gte 75>> + <<link [[Flaunt|Playground Herm Flaunt]]>><</link>><<exhibitionist5>> + <br> + <</if>> + <<elseif $rng gte 61 and $schoolrep.crossdress gte 5 and $player.trans is "t" and $player.gender isnot $player.gender_appearance and !$worn.face.type.includes("mask")>> + <<generatey1>><<generatey2>><<generatey3>><<person1>> + A <<person>>, <<person2>><<person>>, and <<person3>><<person>> surround you. + <br><br> + "This is the one," the <<person1>><<person>> says. "They say <<pshe>>'s getting a sex change." + <br><br> + <<if playerBellyVisible() and $pregnancyspeechdisable is "f" and $player.gender is "m">> + "With that growing belly of <<phers>>," the <<person3>><<person>> says, staring at your pregnant belly, "it looks like <<pshe>> already has." + <br><br> + <<famepregnancy 1>> + <<elseif playerBellyVisible() and $pregnancyspeechdisable is "f" and $player.gender is "f">> + "With that growing belly of <<phis>>," the <<person3>><<person>> says, staring at your pregnant belly, "it looks like <<phe>> hasn't." <br><br> + <<famepregnancy 1>> + <<else>> + "Have you had the surgery?" asks a <<person2>><<person>>, leering at your crotch. "How about you show us?" <<He>> makes a grab for your $worn.lower.name, but you dodge out of the way. + <br><br> + <</if>> + You're still surrounded. The staff room is nearby. Perhaps a teacher would hear if you called for help. + <br><br> - <<link [[Fight|Courtyard Herm Resist]]>><<def 1>><</link>> - <br> - <<link [[Call for help|Courtyard Herm Call]]>><<set $rescued += 1>><<status -10>><<trauma -6>><<stress -6>><</link>><<lcool>><<ltrauma>><<lstress>> - <br> - <<link [[Show|Courtyard Herm Show]]>><<sub 1>><<trauma 6>><<stress 6>><</link>><<gtrauma>><<gstress>> - <br> - <<if $exhibitionism gte 75>> - <<link [[Flaunt|Courtyard Herm Flaunt]]>><</link>><<exhibitionist5>> - <br> - <</if>> + <<link [[Fight|Courtyard Herm Resist]]>><<def 1>><</link>> + <br> + <<link [[Call for help|Courtyard Herm Call]]>><<set $rescued += 1>><<status -10>><<trauma -6>><<stress -6>><</link>><<lcool>><<ltrauma>><<lstress>> + <br> + <<link [[Show|Courtyard Herm Show]]>><<sub 1>><<trauma 6>><<stress 6>><</link>><<gtrauma>><<gstress>> + <br> + <<if $exhibitionism gte 75>> + <<link [[Flaunt|Courtyard Herm Flaunt]]>><</link>><<exhibitionist5>> + <br> + <</if>> <<elseif $player.gender_appearance is "f">> "You sure about that," a <<person2>><<person>> asks, looking at your belly. "She looks like a pregnant girl to me. Let's just leave her be; she wouldn't be able to crossdress right now anyway." <br><br> @@ -1700,21 +2081,35 @@ <<WhitneyPantyCheck>> <<elseif $bullyevent is 11>> <<set $bullyevent += 1>> + <<if $whitney_toilet is undefined and $genderknown.includes("Whitney") and _whitney.dom gte 18>> - Whitney and <<his>> friends surround you. Whitney smirks and grasps your shoulders. - <!-- dev note: Keep in mind that this scene uses player.gender directly and not player.gender_appearance. That's why we have to do complicated things. --> - <<if $player.gender is _whitney.pronoun>> - <<He>> tries to push you into the <<print ($player.gender is "m" ? "girl" : "boy")>>s' toilets. + + <<if $player.gender is _whitney.pronoun and $player.trans is "f">> + Whitney and <<his>> friends surround you. Whitney smirks and grasps your shoulders. <<He>> tries to push you into the <<if $player.gender is "m">>boys'<<else>>girls'<</if>> toilets. <br><br> "A new rule, slut," <<he>> says. "You're a failure of a <<print ($player.gender is "m" ? "boy" : "girl")>>. You don't deserve to use the same toilets as me." <<He>> pushes you closer. <<else>> - <!-- includes when player has both genitals --> + <!-- includes player.gender is "h" --> <<He>> tries to push you into the <<nnpc_gendery "Whitney">>s' toilets. <br><br> <!-- dev note: This scene is weird for herm PCs that normally choose the same toilets as Whitney. They aren't hiding from Whitney. How should Whitney's rule apply to herms? --> <!-- dev note: This is ALSO weird for crossdresser PCs, because gender_appearance is what dictates getting thrown out of bathrooms, not gender, so they're ALSO already using the bathroom Whitney wants. --> - "A new rule, slut," <<he>> says. "No more hiding from me in the bathroom. You may be a <<if $player.gender is "m">>boy<<elseif $player.penisExist and $player.vaginaExist>>freak<<else>>girl<</if>>, but you're also mine. I want you nearby in case I feel like using you. That means you're using the <<nnpc_gendery "Whitney">>s' toilets from now on." + "A new rule, slut," <<he>> says. "No more hiding from me in the bathroom. You may be a <<if $player.gender is "m">>boy<<elseif $player.gender is "h">>freak<<else>>girl<</if>>, but you're also mine. I want you nearby in case I feel like using you. That means you're using the <<nnpc_gendery "Whitney">>s' toilets from now on." + <br><br> + <<He>> pushes you closer. + <</if>> + <<if $player.gender isnot _whitney.pronoun and $player.trans is "t">> + <<He>> tries to push you into the <<print ($player.gender is "f" ? "girl" : "boy")>>s' toilets. + <br><br> + "A new rule, slut," <<he>> says. "You're not a real <<print ($player.gender is "f" ? "boy" : "girl")>>. You don't deserve to use the same toilets as me." + <<He>> pushes you closer. + <<else>> + <!-- includes when player has both genitals --> + <<He>> tries to push you into the <<nnpc_gendery "Whitney">>s' toilets. + <br><br> + <!-- dev note: This scene is weird for herm PCs that normally choose the same toilets as Whitney. They aren't hiding from Whitney. How should Whitney's rule apply to herms? --> + "A new rule, slut," <<he>> says. "No more hiding from me in the bathroom. You're not a real <<print ($player.gender is "f" ? "boy" : "girl")>>, and you're also mine. I want you nearby in case I feel like using you. That means you're using the <<nnpc_gendery "Whitney">>s' toilets from now on." <br><br> <<He>> pushes you closer. <</if>> @@ -1722,6 +2117,7 @@ <<link [[Let it happen|Bully Toilets]]>><</link>> <br> <<link [[Fight|Bully Fight]]>><<set $fightstart to 1>><<def 1>><<npcincr Whitney dom -1>><</link>><<ldom>> + <br><br> <<else>> Whitney and <<his>> friends surround you. <<He>> grasps your arms, pulls them above your head, and pushes you against a locker. <br><br> @@ -1732,9 +2128,11 @@ <<tearful>> you pick yourself off the floor. <br><br> - <<link [[Next|Hallways]]>><<endevent>><<set $eventskip to 1>><</link>> - <br> - <</if>> + <<endevent>> + <<link [[Next|Hallways]]>><<set $eventskip to 1>><</link>> + <br> + + <</if>> <<elseif $bullyevent is 12>> <<set $bullyevent += 1>> diff --git a/game/overworld-town/loc-school/widgets.twee b/game/overworld-town/loc-school/widgets.twee index d0797efb0..3ba13e2e8 100644 --- a/game/overworld-town/loc-school/widgets.twee +++ b/game/overworld-town/loc-school/widgets.twee @@ -107,6 +107,9 @@ <<elseif $schoolstate is "fourth" or ($schoolstate is "fifth" and Time.minute lte 58)>> <<swimmingicon>><<link [[Go to your swimming lesson (0:01)|School Pool Entrance]]>><<pass 1>><</link>> <br><br> + <<elseif $schoolstate is "afternoon" and (Time.weekDayName is "Tuesday" or Time.weekDayName is "Thursday") and (Time.hour gte 15 and Time.hour lt 16) and $clubIntro is 2>> + <<clubicon>><<link [[Go to your club meeting (0:01)|Club Room]]>><<pass 1>><</link>> + <br><br> <</if>> <</if>> <</widget>> @@ -1260,10 +1263,10 @@ <<if $schoolrep.crossdress gte 3 or $schoolrep.herm gte 3>> The other students <<print ($_seat_glued ? "look almost satisfied by" : "giggle at")>> your plight. You overhear a few whispers while Doren is busy helping you, - and can make out something about <<print ($player.penisExist and $player.vaginaExist ? "your genitals" : "you crossdressing")>>. They saw, and they know the rumours are true. + and can make out something about <<print ($player.penisExist and $player.vaginaExist or $player.trans is "t" ? "your genitals" : "you crossdressing")>>. They saw, and they know the rumours are true. <<else>> The other students gasp, and the classroom fills with hushed whispers while Doren is busy helping you. - You can make out something about <<print ($player.penisExist and $player.vaginaExist ? "your genitals" : "you crossdressing")>>. They saw. + You can make out something about <<print ($player.penisExist and $player.vaginaExist or $player.trans is "t" ? "your genitals" : "you crossdressing")>>. They saw. <</if>> <<schoolrep_naked>> <</if>> diff --git a/game/overworld-town/loc-street/events.twee b/game/overworld-town/loc-street/events.twee index c6bb4add6..afad0d3ce 100644 --- a/game/overworld-town/loc-street/events.twee +++ b/game/overworld-town/loc-street/events.twee @@ -1236,7 +1236,7 @@ The <<person3>><<person>> looks serious. "You know I would never let that happen <<if $submissive gte 1500>> "Thank you <<if $pronoun is "m">>sir,"<<else>>ma'am,"<</if>> you mutter. <br> - You hasten away with your head down. It's not <<his>> fault. It's how people treat <<if $player.gender is "m">>boys<<elseif $player.gender is "f">>girls<<else>>freaks<</if>> like you. + You hasten away with your head down. It's not <<his>> fault. It's how people treat <<if $player.gender is "m" and $player.trans isnot "t">>boys<<elseif $player.gender is "f" and $player.trans isnot "t">>girls<<else>>freaks<</if>> like you. <<else>> Head down, you hasten your pace to escape. <</if>> @@ -2338,11 +2338,14 @@ Your cries attract the attention of the people passing by the alley's entrance. <br><br> <<if $player.gender_appearance is $player.gender>> <<He>> stares for a moment, smiling, transfixed. + <<elseif $player.trans is "t" and $NudeGenderDC gt 0>> + "So it's true. They said you have a <<if $player.gender is "m">><<if $penissize lte 1>>cute little<<elseif $penissize gte 3>>meaty<<else>>juicy<</if>> girl dick<<else>>sweet boy pussy<</if>>." <<elseif $player.gender is "h" or $NudeGenderDC gt 0>> "So it's true. They said you were actually a <<if $player.gender is "m">>boy."<<elseif $player.gender is "h">>hermaphrodite."<<else>>girl<<if $player.penisExist>> who's grown a penis<</if>>."<</if>> <<else>> <<He>> hums in thought, then smiles. "Not what I had in mind, but it'll do." <</if>> + With trembling hands, <<he>> starts snapping pictures of your <<genitals>> from different angles. <<if $player.vaginaExist>> <<if $player.bodyliquid.anus.semen gte 3 and $player.virginity.vaginal is true>> @@ -2393,7 +2396,7 @@ Your cries attract the attention of the people passing by the alley's entrance. <<if $sexStats.vagina.pregnancy.totalBirthEvents is 0>>"Your hymen looks intact?" <</if>><<he>> gasps. "Lucky me, finding a virgin pussy. <<if currentSkillValue('physique') gte ($physiquesize / 7) * 4>>Good work..."<<else>>Watch out, girl..."<</if>> <<He>> stops and looks at your belly. "Wait," <<he>> pauses. "How did you get yourself pregnant? While still being a virgin? How is that even possible?" <<famepregnancy 1>> <<else>> - <<if $sexStats.vagina.pregnancy.totalBirthEvents is 0>>"Your hymen looks intact?" <</if>><<he>> gasps. "Lucky me, finding a virgin pussy. <<if currentSkillValue('physique') gte ($physiquesize / 7) * 4>>Good work! You look like you can take care of yourself!"<<else>>Watch out, girl. Little thing like you will be lucky to last a week!"<</if>> + <<if $sexStats.vagina.pregnancy.totalBirthEvents is 0>>"Your hymen looks intact?" <</if>><<he>> gasps. "Lucky me, finding a virgin pussy. <<if currentSkillValue('physique') gte ($physiquesize / 7) * 4>>Good work! You look like you can take care of yourself!"<<elseif $player.gender_appearance is "m">>"You must be new around here. Skinny thing like you will be lucky to last a week in this town."<<else>>Watch out, girl. Little thing like you will be lucky to last a week!"<</if>> <</if>> <br><br> After a lot of camera snaps, <<he>> stops and browses through the photos on <<his>> phone. @@ -2448,7 +2451,7 @@ Your cries attract the attention of the people passing by the alley's entrance. You better look after his child." <<famepregnancy 1>> <<else>> - <<if $pronoun is "m">>Good girl!<<else>>Not too bright, huh?<</if>>" + <<if $pronoun is "m">>Good <<print ($player.gender_appearance is "m" and $player.trans is "t"? "cuntboy" : "girl")>>!<<else>>Not too bright, huh?<</if>>" <</if>> <br><br> After few more snaps, <<he>> stops and browses through the photos on <<his>> phone. @@ -2462,7 +2465,7 @@ Your cries attract the attention of the people passing by the alley's entrance. "Not like it's stopped you from getting pregnant." <<famepregnancy 1>> <<else>> - <<if $pronoun is "m">>"Dirty girl!"<<else>>"Smart girl. <<if $pregnancyspeechdisable is "f">>No getting pregnant that way.<</if>>"<</if>> + <<if $pronoun is "m">>"Dirty <<print ($player.gender_appearance is "m" and $player.trans is "t"? "cuntboy" : "girl")>>!"<<elseif $pregnancyspeechdisable is "f">>"Smart <<print ($player.gender_appearance is "m" and $player.trans is "t"? "boy" : "girl")>>. No getting pregnant that way."<</if>> <</if>> <br><br> After few more snaps, <<he>> stops and browses through the photos on <<his>> phone. @@ -2565,7 +2568,7 @@ Your cries attract the attention of the people passing by the alley's entrance. <<if $player.virginity.penile is true>> <<He>> stops for a moment and looks more closely. <br> - "Wow. It doesn't look like you've ever even used that thing!" <<he>> gasps. "I've found the last pure boy in this town!" + "Wow. It doesn't look like you've ever even used that thing!" <<he>> gasps. <<if $player.gender_appearance is "f" and $player.trans is "t">>"It's almost a shame you've never used that girl dick."<<else>>"I've found the last pure boy in this town!"<</if>> <br><br> After a lot more camera snaps, <<he>> stops and browses through the photos on <<his>> phone. <br> @@ -2573,7 +2576,7 @@ Your cries attract the attention of the people passing by the alley's entrance. <br><br> <<elseif $player.virginity.anal is true>> <br> - "Your ass looks intact," <<he>> comments. <<if currentSkillValue('physique') gte ($physiquesize / 7) * 4>>"You look like you can take care of yourself! In this town you might need to."<<else>>"You must be new around here. Skinny thing like you will be lucky to last a week in this town."<</if>> + "Your ass looks intact," <<he>> comments. <<if currentSkillValue('physique') gte ($physiquesize / 7) * 4>>"You look like you can take care of yourself! In this town you might need to."<<else>><<if $player.gender_appearance is "f">>"Watch out<<if $player.trans is "t">>, girl<</if>>. Little thing like you will be lucky to last a week!"<<else>>"You must be new around here. Skinny thing like you will be lucky to last a week in this town."<</if>><</if>> <br><br> After a lot of camera snaps, <<he>> stops and browses through the photos on <<his>> phone. <br> @@ -2607,7 +2610,7 @@ Your cries attract the attention of the people passing by the alley's entrance. <br><br> <<elseif $fame.sex gte 600>> <br> - "They say you're quite the rake," <<he>> says. "That you love putting it about." + "They say you're quite the <<if $player.gender_appearance is "m">>rake<<else>>slut<</if>>," <<he>> says. "That you love putting it about." <br><br> "Is that true?" <br><br> diff --git a/game/overworld-town/loc-strip club/main.twee b/game/overworld-town/loc-strip club/main.twee index 505846a0b..9b0e5b8ae 100644 --- a/game/overworld-town/loc-strip club/main.twee +++ b/game/overworld-town/loc-strip club/main.twee @@ -654,7 +654,7 @@ You give a little spin to show off your form. The <<person>> cheers, <<his>> eye <<tipreceive>><<exhibitionism1>> <<elseif $phase is 2>> - +<!-- version of the event where $player.gender_appearance is "m" --> <<if $worn.upper.open is 1>> You pull down your $worn.upper.name, revealing your <<breasts>>. You feel your face begin to heat up. <<else>> @@ -663,8 +663,8 @@ You give a little spin to show off your form. The <<person>> cheers, <<his>> eye The <<person>> cheers and raises <<his>> glass to you. Satisfied, <<he>> leaves a tip. <<tipreceive>> <br><br> - - <<if $player.gender is $player.gender_appearance>> +<!-- TRANSMOD TODO I feel like maybe this event should account for female breasts not being normal on guys? Insecurity? idk--> + <<if $player.gender is $player.gender_appearance or ($player.gender is "f" and $player.trans is "t")>> Despite it not being considered obscene for guys to display their chests, doing so on demand for money leaves you feeling flustered and vulnerable. You cover up quickly. <<exhibitionism2>> <<else>> Despite everyone thinking you're a guy, displaying your <<breasts>> in public like this still fills you with a guilty thrill. You cover up quickly. @@ -672,7 +672,7 @@ You give a little spin to show off your form. The <<person>> cheers, <<his>> eye <</if>> <<elseif $phase is 3>> - +<!-- version of the event where $player.gender_appearance is "f" --> <<if $worn.upper.open is 1>> You pull down your $worn.upper.name, revealing your <<breasts>>. You feel your face begin to heat up. <<else>> @@ -682,9 +682,11 @@ You give a little spin to show off your form. The <<person>> cheers, <<his>> eye <<tipreceive>> <br><br> - <<if $player.gender is $player.gender_appearance or ($player.penisExist and $player.vaginaExist)>> + <<if $player.gender is $player.gender_appearance or ($player.penisExist and $player.vaginaExist or $player.trans is "t")>> Despite being in a strip club, actually displaying yourself publicly like this pervades you with excitement and embarrassment. You cover up quickly, before you draw too many eyes. <<exhibitionism4>> + <<elseif $breastsize gte 2>> + It's not normally a big deal for a guy's chest to be exposed. But you don't have a flat chest like a guy, you have <<breasts>> like a girl. The hungry and sinful look in the eyes of your patrons makes that very clear. You cover up quickly, before you feel too exposed. <<else>> It's not normally a big deal for a guy's chest to be exposed. But your patrons don't know you're a guy. The hungry and sinful look in their eyes as they take in your bare flesh makes that very clear. You cover up quickly, before you feel too exposed. <<exhibitionism4>> diff --git a/game/overworld-town/loc-temple/main.twee b/game/overworld-town/loc-temple/main.twee index c1e8af0ff..3a45998b6 100644 --- a/game/overworld-town/loc-temple/main.twee +++ b/game/overworld-town/loc-temple/main.twee @@ -1428,7 +1428,7 @@ The fondling continues for a few minutes. Finally, <<he>> finishes <<his>> work. <br><br> "Thanks to your <<genitals 2>>, you have two options. You could wear this cage, secured at the base of your <<penisSimple>>. However, it would only protect your <<penisSimple>>, leaving you vulnerable to sodomy." <br><br> - After giving you a chance to examine it, <<he>> continues, "Your other option would be this chastity belt. It would be able to protect your <<genitals 2>>, and can be fitted with a shield to protect you from sodomy. It's been designed to both prevent rubbing and to hold a flaccid penis in place. This is the best protection, but others may mistake you for a girl." + After giving you a chance to examine it, <<he>> continues, "Your other option would be this chastity belt. It would be able to protect your <<genitals 2>>, and can be fitted with a shield to protect you from sodomy. It's been designed to both prevent rubbing and to hold a flaccid penis in place. This is the best protection<<if $player.gender_appearance is "m">>, but others may mistake you for a girl<</if>>." <br><br> <<link [[Ask for the chastity cage|Temple Male Chastity Fitting]]>><<genitalswear 2>><</link>> @@ -1520,7 +1520,7 @@ You look down to examine it yourself. It doesn't feel as tight or uncomfortable <<else>> <<He>> asks, "Thanks to your <<genitals 2>>, you have two options. You could wear this cage and it would provide protection for just your <<penisSimple>> and be secured at its base, however, it will be unable to protect you from sodomy." <br><br> - After giving you a chance to examine it, <<he>> continues, "Your other option would be this chastity belt, it will be able to protect your <<genitals 2>> on top of it being able to fit a shield to protect you from sodomy. It's been designed to both prevent rubbing and to hold a flaccid penis gently in place. As much as this is the best way to protect you, others may mistake you for a girl." + After giving you a chance to examine it, <<he>> continues, "Your other option would be this chastity belt, it will be able to protect your <<genitals 2>> on top of it being able to fit a shield to protect you from sodomy. It's been designed to both prevent rubbing and to hold a flaccid penis gently in place. <<if $player.gender_appearance is "m">>As much as this is the best way to protect you, others may mistake you for a girl.<<else>> This is the best way to protect you.<</if>>" <br><br> <<link [[Ask for the chastity cage|Temple Male Chastity Fitting]]>><<genitalswear 2>><</link>> diff --git a/game/overworld-town/special-robin/halloween.twee b/game/overworld-town/special-robin/halloween.twee index 0d3ecaf19..55f7e0094 100644 --- a/game/overworld-town/special-robin/halloween.twee +++ b/game/overworld-town/special-robin/halloween.twee @@ -183,17 +183,26 @@ At last, <<he>> manages to compose <<himself>>. "Are you coming trick-or-treatin Together you, Robin and the orphans leave the orphanage, carrying empty bags. The orphans wear a mix of homemade costumes. Some just wear bedsheets with holes cut for eyes. <<if $halloween_robin_costume is "witch" and $NPCName[$NPCNameList.indexOf("Robin")].pronoun is "m">> - <<if $player.gender is "f" and $player.gender_appearance is "m">> + <<if $player.gender is "f" and $player.gender_appearance is "m" and $player.trans isnot "t">> "Thanks for dressing up as a boy," Robin says as you pass through the door. "It feels better not being the only one dressed as the opposite sex." - <<elseif $player.gender isnot "f" and $player.gender_appearance is "f">> + <<elseif $player.gender isnot "f" and $player.gender_appearance is "f" and $player.trans isnot "t">> "Thanks for dressing up as a girl too," Robin says as you pass through the door. "It's made me feel more confident." + <<elseif $player.trans is "t" and $player.gender is $player.gender_appearance>> + "You didn't need to dress like that for my sake," Robin says as you pass through the door. "But... thank you. It does make me feel a little less awkward about being dressed as a girl." + <<elseif $player.trans is "t" and $player.gender isnot $player.gender_appearance>> + "I know it's not crossdressing for you anymore," Robin says as you pass through the door, "but I feel less nervous about dressing as a girl with you here. Thank you." <</if>> <<elseif $halloween_robin_costume is "vampire" and $NPCName[$NPCNameList.indexOf("Robin")].pronoun is "f">> - <<if $player.gender isnot "m" and $player.gender_appearance is "m">> + <<if $player.gender isnot "m" and $player.gender_appearance is "m" and $player.trans isnot "t">> "Thanks for dressing up as a boy too," Robin says as you pass through the door. "It's made me feel more confident." - <<elseif $player.gender is "m" and $player.gender_appearance is "f">> + <<elseif $player.gender is "m" and $player.gender_appearance is "f" and $player.trans isnot "t">> "Thanks for dressing up as a girl," Robin says as you pass through the door. "It feels better not being the only one dressed as the opposite sex." + <<elseif $player.trans is "t" and $player.gender is $player.gender_appearance>> + "You didn't need to dress like that for my sake," Robin says as you pass through the door. "But... thank you. It does make me feel a little less awkward about being dressed as a boy." + <<elseif $player.trans is "t" and $player.gender isnot $player.gender_appearance>> + "I know it's not crossdressing for you anymore," Robin says as you pass through the door, "but I feel less nervous about dressing as a boy with you here. Thank you." <</if>> + <!-- TRANSMOD TODO Maybe branch dialogue a little more if Robin's .pronoun and .gender don't match? --> <</if>> <br><br> The group stops at the edge of the road. You see other trick-or-treaters up and down the street. "Stay close everyone," Robin announces. diff --git a/game/overworld-town/special-robin/main.twee b/game/overworld-town/special-robin/main.twee index 5e1c8bc32..29822d57f 100644 --- a/game/overworld-town/special-robin/main.twee +++ b/game/overworld-town/special-robin/main.twee @@ -2484,7 +2484,11 @@ You read the note. <br><br> I've started feeling butterflies in my tummy when you talk to me, and when we hug it feels like my body is melting (In a good way). Do you want to be my -<<if ($player.gender isnot $player.gender_appearance and $player.gender isnot "h") or $backgroundTraits.includes("crossdresser")>> +<<if $player.trans is "t" and $player.gender is "m">> + girlfriend? +<<elseif $player.trans is "t" and $player.gender is "f">> + boyfriend? +<<elseif ($player.gender isnot $player.gender_appearance and $player.gender isnot "h") or $backgroundTraits.includes("crossdresser")>> <<girlfriend>>? Or my <<print ($player.gender_appearance is "m" ? "girlfriend" : "boyfriend")>>? (Either would make me happy.) <<else>> <<girlfriend>>? diff --git a/game/overworld-town/special-whitney/main.twee b/game/overworld-town/special-whitney/main.twee index ce1d1707f..589e832cd 100644 --- a/game/overworld-town/special-whitney/main.twee +++ b/game/overworld-town/special-whitney/main.twee @@ -3326,7 +3326,7 @@ Whitney walks behind the <<person>>, reaches into <<his>> jacket and successfull <<person1>> <<set $whitney_toilet to 1>> -Whitney shoves you into the <<if $player.gender is "m">>girls'<<elseif $player.gender is "h">><<nnpc_gendery "Whitney">>s'<<else>>boys'<</if>> toilets. +Whitney shoves you into the <<if $player.gender is "h">><<nnpc_gendery "Whitney">>s'<<elseif ($player.gender is "m" and $player.trans isnot "t") or ($player.gender is "f" and $player.trans is "t")>>girls'<<else>>boys'<</if>> toilets. <br><br> "The rest of you make sure <<pshe>> follows the rule," <<he>> says, turning to <<his>> friends. "Got it?" <<His>> friends nod, casting lecherous looks up and down your body. "Then it's settled." <<He>> turns back to you. "See you later, slut." <br><br> diff --git a/game/overworld-underground/loc-sewers/old-sewers-events.twee b/game/overworld-underground/loc-sewers/old-sewers-events.twee index 0f171d069..9f94583e0 100644 --- a/game/overworld-underground/loc-sewers/old-sewers-events.twee +++ b/game/overworld-underground/loc-sewers/old-sewers-events.twee @@ -319,7 +319,7 @@ Then the slime pressed up against your <<genitals>> seems to come alive, the goo <<else>> <<if $player.penisExist>> feeling as if it is stroking you from <<if $player.ballsExist>>your balls<<else>>the bottom<</if>> to the tip of your - boycock<<if $player.vaginaExist>>, while rubbing up, down, and between your pussy lips<</if>>. + <<if $player.trans is "t">>girlcock<<else>>boycock<</if>><<if $player.vaginaExist>>, while rubbing up, down, and between your pussy lips<</if>>. <<elseif $player.vaginaExist>> vibrating right on top of your excited clit as it rubs up, down, and between your pussy lips. <</if>> diff --git a/game/special-masturbation/widgets.twee b/game/special-masturbation/widgets.twee index a9b90d322..a24ce5663 100644 --- a/game/special-masturbation/widgets.twee +++ b/game/special-masturbation/widgets.twee @@ -66,7 +66,7 @@ <<earnFeat "Literally Buckets">> <</if>> <<if $purity gte 990 and playerChastity()>> - Do other <<girls>> do this, or are you a freak? + Do other <<if $player.gender is "m" and $player.trans is "t" or $player.gender is "f" and $player.trans is "f">> girls <<else>> boys <</if>> do this, or are you a freak? <</if>> <br> <<if $masturbation_oralSkill and $oralskill lt 200>> diff --git a/game/transmod/widgets/Transmod-Widgets.twee b/game/transmod/widgets/Transmod-Widgets.twee new file mode 100644 index 000000000..dbd80a153 --- /dev/null +++ b/game/transmod/widgets/Transmod-Widgets.twee @@ -0,0 +1,372 @@ +:: Transmod Update Widget [widget] + +<<widget "modUpdate">> + + <<if $player.surgery is undefined>> + <<set $player.surgery to "f">> + <</if>> + <<if $surgeryToggle is undefined>> + <<set $surgeryToggle to "f">> + <</if>> + <<if $slurToggle is undefined>> + <<set $slurToggle to "f">> + <</if>> + <<if $clubCheck is undefined>> + <<set $clubCheck to "f">> + <</if>> + <<if $markAcquired is undefined>> + <<set $markAcquired to "f">> + <</if>> + /* + <<if Time.days gte 50>> + <<if $player.trans is "t">> + <<if $player.gender is "m">> + <<earnFeat "Being a Trans Girl">> + <<elseif $player.gender is "f">> + <<earnFeat "Being a Trans Boy">> + <</if>> + <</if>> + <</if>>*/ +<</widget>> + +:: Transmod Test + + <<link [[Rainbow Club Events Test|Club Event Test]]>><</link>> + <br> + <<link [[Womb Tattoo|MPreg Tattoo Test]]>><</link>> + <br> + <<link [[Womb Tattoo Removal|MPreg Tattoo Removal]]>><</link>> + <br> + <<link [[Test trans status|Trans Test]]>><</link>> + <br> + <<link [[Test trans PC setting|Set Trans]]>><</link>> + <br> + <<link [[Revert test PC setting|Revert Trans]]>><</link>> + <br> + <<link [[Swap PC genitals|Bottom Surgery]]>><</link>> + <br> + <<link [[Revert PC genitals|Revert Bottom Surgery]]>><</link>> + <br> + <<link [[Test post-op status|Surgery Check]]>><</link>> + <br> + <<link [[Check body part status|Status Check]]>><</link>> + <br> + <<link [[Return|Bedroom]]>><</link>> + +:: Trans Test + <<if $player.sex is $player.gender and $player.trans is "t">> + So you're 'trans', huh? + <<elseif $player.sex isnot $player.gender>> + Oh, you're trans? You're so brave. + <</if>> + <br><br> + <<if $player.sex is "m">><<print "(male) ">><<elseif $player.sex is "f">><<print "(female) ">><</if>><<gender>> + <br> + <<link [[Return|Transmod Test]]>><</link>> + +:: Set Trans + <<if $player.sex is "m" and $player.trans is "t">> + <<set $player.gender to "f">> + <<elseif $player.sex is "f" and $player.trans is "t">> + <<set $player.gender to "m">> + <</if>> + Your sex has been set to <<print $player.sex>> and your gender has been set to <<print $player.gender>> + + <br> + <<link [[Return|Transmod Test]]>><</link>> + <br> + <<link [[Revert|Revert Trans]]>><</link>> + +:: Revert Trans + <<if $player.sex is not $player.gender>> + <<set $player.gender to $player.sex>> + <</if>> + Legacy settings restored. + + <<link [[Return|Transmod Test]]>><</link>> + +:: Bottom Surgery + <<if $player.sex isnot $player.gender>> + <<if $player.gender is "f">> + <<set $penisuse to "none">> + <<set $penisstate to "none">> + <<set $vaginause to 0>> + <<set $vaginastate to 0>> + <<set $player.vaginaExist to true>> + <<set $player.penisExist to false>> + <<set $player.ballsExist to false>> + <<elseif $player.gender is "m">> + <<set $vaginause to "none">> + <<set $vaginastate to "none">> + <<set $penisuse to 0>> + <<set $penisstate to 0>> + <<set $player.vaginaExist to false>> + <<set $player.penisExist to true>> + <<set $player.ballsExist to true>> + <</if>> + <</if>> + Babe wake up, new bottom surgery just dropped. + <br> + <<link[[Return|Transmod Test]]>><</link>> + +:: Revert Bottom Surgery + <<if $player.sex isnot $player.gender>> + <<if $player.gender is "m">> + <<set $vaginause to 0>> + <<set $vaginastate to 0>> + <<set $penisuse to "none">> + <<set $penisstate to "none">> + <<set $player.vaginaExist to true>> + <<set $player.penisExist to false>> + <<set $player.ballsExist to false>> + <<elseif $player.gender is "f">> + <<set $penisuse to 0>> + <<set $penisstate to 0>> + <<set $vaginause to "none">> + <<set $vaginastate to "none">> + <<set $player.vaginaExist to false>> + <<set $player.penisExist to true>> + <<set $player.ballsExist to true>> + <</if>> + <</if>> + +Successfully detransitioned. +<br> +<<link [[Return|Transmod Test]]>><</link>> + +:: Surgery Check + <<if $player.sex isnot $player.gender>> + <<if $player.gender is "f" and $player.vaginaExist is true>> + You got bottom surgery? I'm so happy for you girl. + <<elseif $player.gender is "m" and $player.penisExist is true>> + You got bottom surgery? I'm so happy for you dude. + <<else>> + You'll get there eventually <<if $player.gender is "f">>girl<<else>>dude<</if>>. + <</if>> + <</if>> + <br> + <<link [[Return|Transmod Test]]>><</link>> + +:: Status Check + Player status: + <br> + gender: <<print $player.gender>> + <br> + sex: <<print $player.sex>> + <br> + Body part status: + <br> + penisuse: <<print $penisuse>> + <br> + penisstate: <<print $penisstate>> + <br> + vaginause: <<print $vaginause>> + <br> + vaginastate: <<print $vaginastate>> + <br> + vaginaExist: <<print $player.vaginaExist>> + <br> + penisExist: <<print $player.penisExist>> + <br> + ballsExist: <<print $player.ballsExist>> + <br> + <<link [[Return|Transmod Test]]>><</link>> + +:: Transmod Widgets [widget] + +<<widget "pronoun">> + <<if $preferred is undefined>> + <<set $preferred to "n">> + <</if>> + <!-- Add the option to call for named NPCs individually --> + <<if _args[0]>> + <<set $pronoun to $NPCName[$NPCNameList.indexOf(_args[0])].pronoun>> + <</if>> +<<if $pronoun is "f">> + <<switch random(1,5)>> + <<case 1>> + <<set $preferred to "m">> + <<case 2>> + <<set $preferred to "t">> + <<case 3>> + <<set $preferred to "x">> + <<case 4>> + <<set $preferred to "h">> + <<case 5>> + <<set $preferred to "z">> + <</switch>> +<<elseif $pronoun is "m">> + <<switch random(1,5)>> + <<case 1>> + <<set $preferred to "f">> + <<case 2>> + <<set $preferred to "t">> + <<case 3>> + <<set $preferred to "x">> + <<case 4>> + <<set $preferred to "h">> + <<case 5>> + <<set $preferred to "z">> + <</switch>> +<</if>> +<</widget>> + +<<widget "they">><<silently>> + <<if $preferred is "m">> + <<set _text_output to "he">> + <<elseif $preferred is "f">> + <<set _text_output to "she">> + <<elseif $preferred is "t">> + <<set _text_output to "they">> + <<elseif $preferred is "x">> + <<set _text_output to "xe">> + <<elseif $preferred is "h">> + <<set _text_output to "ze">> + <<elseif $preferred is "z">> + <<set _text_output to "ze">> + <</if>> +<</silently>>_text_output<</widget>> + +<<widget "They">><<silently>> + <<if $preferred is "m">> + <<set _text_output to "He">> + <<elseif $preferred is "f">> + <<set _text_output to "She">> + <<elseif $preferred is "t">> + <<set _text_output to "They">> + <<elseif $preferred is "x">> + <<set _text_output to "Xe">> + <<elseif $preferred is "h">> + <<set _text_output to "Ze">> + <<elseif $preferred is "z">> + <<set _text_output to "Ze">> + <</if>> +<</silently>>_text_output<</widget>> + +<<widget "them">><<silently>> + <<if $preferred is "m">> + <<set _text_output to "him">> + <<elseif $preferred is "f">> + <<set _text_output to "her">> + <<elseif $preferred is "t">> + <<set _text_output to "them">> + <<elseif $preferred is "x">> + <<set _text_output to "xem">> + <<elseif $preferred is "h">> + <<set _text_output to "hir">> + <<elseif $preferred is "z">> + <<set _text_output to "zir">> + <</if>> +<</silently>>_text_output<</widget>> + +:: Club Event Test + <<if $rng gte 91>> + Doren gives an impromptu lecture about neopronouns. It's <<if currentSkillValue('english') gte 800>>nothing you don't already understand<<elseif currentSkillValue('english') gte 600 and lte 799>>tricky to follow along with<<else>>a little beyond you<</if>>, but you learn a thing or two regardless. <<genglish>><<englishskill>> + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 81>> + <<generatey1>><<generatey2>> + A <<person1>><<person>> flops down into a seat near yours with a groan. <<if $loveInterest.primary is "Whitney">>You recognize <<him>> as one of Whitney's friends.<</if>><br> + "Ugh! My friends're such twats sometimes," <<he>> whines. "We were all making fun of some shit-for-brains earlier, and guess what insult they all went with? <<if $_npcPronoun is "m">>Faggot<<else>>Dyke<</if>>! Can you believe that!?" + <br><br> + "That's what you get for hanging out with the delinquents," a <<person2>><<person>> sat near you sighs. "You still haven't told them, have you?" + <br><br> + "As if!" the <<person1>><<person>> responds. "What do you want me to say? 'Hey gang, I'm a fucking queer! Here's your bullying licenses!'?"<br> + <<if $loveInterest.primary is "Whitney">>"B-besides, <<nnpc_he "Whitney">> already got a <<if $player.gender_appearance is "m">>boyfriend<<else>>girlfriend<</if>>," the <<person1>><<person>> whispers, throwing clandestine glances in your direction when <<person1>><<he>> thinks you aren't looking.<</if>> + <br> + The <<person2>><<person>> rests <<his>> head in one hand while <<he>> scrolls through a social media app on <<his>> phone with the other. "Some kind of development would be nice. Anything, really--if I have to hear you complain about this again I might just do something drastic."<br> + <br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 71>> + <<generatey1>> + A <<person1>><<person>> vents to you about <<his>> friends being <<switch random(1,3)>><<case 1>>homophobic<<case 2>>transphobic<<case 3>>aphobic<</switch>> around <<him>>. <<if $loveInterest.primary is "Whitney">>You recognize <<him>> as one of Whitney's friends.<</if>> <<if $loveInterest.primary is "Whitney">><<stress 6>><<gstress>><<else>><<stress -6>><<lstress>><</if>> + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 61>> + <<generatey1>><<person1>><<pronoun>> + A <<person1>><<person>> approaches you and asks if <<he>> can talk to you so <<he>> can try out different pronouns.<br> + You and <<person1>><<them>> chit-chat about <<switch random(1,6)>><<case 1>>school<<case 2>>homework<<case 3>>the food in the canteen<<case 4>><<if C.npc.Robin.init is 1>>Robin<<else>>English class<</if>><<case 5>><<if C.npc.Whitney.init is 1>>Whitney<<else>>Maths class<</if>><<case 6>><<if C.npc.Sydney.init is 1>>Sydney<<else>>History class<</if>><</switch>> for a bit, and you try your best. <<They>> seem<<if $preferred isnot "t">>s<</if>> grateful. <<stress -6>><<lstress>><<status 6>><<gcool>> + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 51>> + <<generatey1>><<generatey2>> + You help Doren solve a dispute between a <<person1>><<person>> and a <<person2>><<person>>. <<status 3>><<gcool>><<npcincr Doren love 1>><<glove>> + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 41>> + Doren asks you to help <<nnpc_him "Doren">> haul in some supplies for the club. + <br><br> + <<link [[Accept|Test Club Supplies Accept]]>><</link>> + <br><br> + <<link [[Refuse|Test Club Supplies Refuse]]>><</link>> + <br> + <<elseif $rng gte 31>> + <<generatey1>> + A <<person1>><<person>> passes around a box of homemade cookies. You take one. <span class="green">It's delicious!</span> <<stress -6>><<lstress>> + <br> + One of the other students asks <<him>> about how <<he>> made them. The <<person1>><<person>> goes into perhaps a little more detail than is necessary. + <br> + <<He>> does mention some helpful cooking tips, though, <<if $housekeeping lte 499>>so you're glad you paid attention<<else>>even if it's nothing you don't already know<</if>>. <<housekeeping 1 500>><<ghousekeeping 500>> + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 21>> + placeholder text + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<elseif $rng gte 11>> + placeholder text + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <<else>> + You spend some time making small talk with one of the other club members. <<status 3>><<gcool>> + <br><br> + <<link [[Next|Transmod Test]]>><<endevent>><</link>> + <br> + <</if>> + + + +:: Test Club Supplies Accept + +It's hard work, but the two of you manage somehow. +<br> +"Much appreciated, <<lass>>," Doren says as you both sit back down. <<tiredness 5>><<gtiredness>> <<npcincr Doren love 3>><<glove>> +<br><br> +<<physique 5>> + +<<link [[Next|Transmod Test]]>><<endevent>><</link>> + +:: Test Club Supplies Refuse +<<generatey1>> + +Doren asks a <<person1>><<person>> to help <<him>> instead. <<npcincr Doren love -3>><<llove>> +<br><br> +<<link [[Next|Transmod Test]]>><<endevent>><</link>> + +:: MPreg Tattoo Test + + +<<add_bodywriting "pubic" "womb_tattoo" magic>> + +womb tattoo applied + +<<link [[Return|Transmod Test]]>><<endevent>><</link>> +<br> +:: MPreg Tattoo Removal + +<<bodywriting_clear pubic>> + +womb tattoo removed +<br> +<<link [[Return|Transmod Test]]>><<endevent>><</link>> + +:: Fix Passage + diff --git a/img/bodywriting/womb tattoo/pubic.png b/img/bodywriting/womb tattoo/pubic.png new file mode 100644 index 0000000000000000000000000000000000000000..6d1c11e79dfb4598b6ad8dbe8253a5a8fb537d0a GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yU;;838911M)F(f?P$0z_;1l8sr2p!h{Ac<9&{4|) z$YCxC@(X78|KBCxnj(<<$kW9!q+-t7YnEIG3`Cp{`oF7xku%}c1fvP&!II(A0v<{N z6_E!bZt~@u|B0w$_{sFlXOEq_ghLI(@*2icwu0yD($aYp;tqWK@k@2SVZ#@OSFBe) zKj&WYJp90x%hC?D3|t!ZjrwdC{Oq|-7?Wo?OjklG`?N;J#MFka_aGrpS3j3^P6<r_ Dk9tOm literal 0 HcmV?d00001 diff --git a/img/clothes/upper/transshirt/frayed.png b/img/clothes/upper/transshirt/frayed.png new file mode 100644 index 0000000000000000000000000000000000000000..f8883bf7a7a85d9069e28633f2797f68171c0d7f GIT binary patch literal 1781 zcmd^7`BT$(5dDNBD3%C{q6mmE!WclXa*T-(kZ_kvk;oaea#$)93I(H(Kt~g#3Kgjb zNJ3>mFmfMafiDyR<uEZ8DI_s~LWl{ZBvi;j(m2z9qSN=w?hkMF?c04tVIh77`lk8- z0D}O3>`4H$G%XBlfosZ8>8oS_;5`9YuZY~rWiGm8-|0Q@Sw{Q|_@U@byV8^}W5Ww! zR^hN+2M_v`E~QxOQ1%yYAr=Oyz^>CfUem%z{)U0tUPU@v10yNDx#V+;qNHK8a16B? zTUA#y(vs{jE#5%$%&0{gvHuWAEBovfy3LUN*r#6gxLZyeg~B$$-xc<vMbd(W09kPD z#A**C2(C>oK5Tkep$kALwY9POBMRJ6$1)^pMi&O^jBl84D9>w9V)BJ&E@5y}L2Q&3 z^UByLgz$6|fc98|cFr$yBq_0!i13b@3M)f_Yz@Cdf{%$ibP>bZQ(jfK6HIi_l|qnJ zh5%r#R3lNl3?l60mjpVV(i;ovr9z3CHz1pWE!mg@uyi0X&O10-&+-8~#$PYN(5M`< zK2XoU;z~O^EP-f<{+fSBeLbf~Qy2rl^k!&mI#DCK9q31Jm2l=4q{WzA)iw#wF+}7X zk&Wn|wv%;3LPq*x4*f$qw~HSt_DFg=<k|YC0`y$whhwpo&^_@`6QCXYMoK*EB~!nj zRaR&-gHa&v=!-jB&5gT80_6jJZUr}UmBpKuk`gW2MP!@nJDE((Wk+G@7ML$5(_B?A z{dNdeD~38tbezw)s4*`w(xY1q0l~j}D$}o)zVW!h`YLymlO1K0vQ5T!$^w8!&H~X^ zlMC!7>U9cb&WZYaTgLl*ES6q%ywz>aabl%D4d?FKmb1o+&VT>*$E!W@2^lsE#Kr*m zV6W{(=m#q(Lpayt`15WSZ0VNQZAcU>)umlSc(Nn<{_ryi@x?xe$XxNOrRK|^s{Ota z_XHtL)%i9e(_N4+_t68I)%0i&ZBEN8&<|OrUcP`CKdD4q*B$tnnV0qS+%!H5%pi*g zpRgU2%=j`1{(F~Imb8w&Gp<&f`JF({n=0YkWg8G*ByZMs^yeV?07tH`9YeA+W;bIn zs$DH*KIc7lFpb|VVzTAKQjZ7ay!}2u#TwAl&6d&0Gxh3Q2(GpIt56to_d>zu%8j`j z?Yna=lyfhqBjN0)Q22~WwHB%Qjf1ZR)Qz;X=iQd^kgR8fbEBzR90qz@%+ROxI_YMg zgga<&H9yrg^#K|jhXIlW3zqVDd7ih1NaL3)-cdXpIYM8pecMM%*d4dTBiCn{2`;iw z_J#9!s(K<%Tr%&c&0c4XTBVW+_na#bpu-r(#7lU2DB!R<*?px`tZ=hS{oBO4U^P)) zeAAQbPZSlxy6qfIQVV%8IP(+U_8#hmk%OAJ>630cozjyBsqT@rXw@t+(Xltf-s;m# z2A+xzCvb-F5+kojy7EY6E2}B69O~Tf>}Prvv#cbpCFOGhAh^DZudP4=JhuygGpG4v z4$f~0-xuA;p+0B{;k8(7X&?Soia|=!b9tet&$&kdgLOgi2;9hs%8g=J4LeH0&5gzh z2uz$EvjbFLVg*)a%bI48Dq`a3flXR2CuNxb+5iPaW9L0dX>VXDkJvlk&f?chvP`3D zj0#2#@7pf)$%P~z#rzBbD>5g;#qQOZ=O>T7Iu&FBG`@ag?4@2CwW$=L+tw8v3T2~t zgS$fK|8*GefRkT<%20;=k_ai)H}g)?aYW7Fxb0Bv!)MCvaD-l5jWz)8HT2X+0p_HJ yj}*)LNXg{LUV(ScIKk|$s~QEkpBev8w9lyLSkEEonVJ9R0|fYlU>i>)6#fGcSg(`- literal 0 HcmV?d00001 diff --git a/img/clothes/upper/transshirt/full.png b/img/clothes/upper/transshirt/full.png new file mode 100644 index 0000000000000000000000000000000000000000..2f228d342e2f0672951c00a35b9de493af4b00dd GIT binary patch literal 1737 zcmdT^`#aNn9RF-CkIN`(qs|HGqLxxmbktlXmyzZ&(uE9lOeJC!V{0qVsX2SXNpcMb zF(o@`ax2quD>@82Nu^<KOKu(Jn_a#~=jl&4zx4j){r=(gykGC<dA;7RWFIerp3Zt5 z0Dzu{y9)^b<jRNuTAC}ZHLZ&RfM%M9i<5tR-t=H+$~%8!Fyy#ya&0;G+0J7DM}C{s ztTx;+q<ySvn<4HA`Wj`s6@qWoq;~uM5B?al6WWi4i_D!kZw<`%rfciU59g%E$7b{A z$K?A?;hwaUKI7moj94%A6{_#3_~ht5qo&B>o``XoXN?K*>0IaHPnd*NNA2~wsl-+$ zZ{l)~o03QdVD9s?DyeSB{sI9LYi>@uIyCZ-P(1Ot*6y))HuJzPaqy)deH=#$E|Cxs zwF{aikqcNBaW(wojS61r{blf8af%|-l`i6NYo=)9%!I^qVM=L;ZA{)BAnGq2A)B%; zlMsNVf9v(%q9QcQu9%#02#Cb~ih>|N1sr!#@c{7CSA@No#;+_Lzp0j%KmG6?QpjO{ z5;I~|HU)az>~e_grx6nT4e9rM6<+QEKw%O}UF5T!8W<Q_Nk<hLgT)#dWR(m@&4-kg zes%zv(MH{>na0Mz$T!#z_0g5Vw(lte&+%@1RDcf2AG6uD%Z0WaG6K)=Z-c9CTH$Cy zyTAcVmmr1vo`q!zgX`=vdY8g?A$QIzjO4y8j)tt#mkH<Ta}x25&SLf(2Wr^weJIuT z6NYEt!Pr3p@~mYlY}(@Zpig@>IN)C2f58It3Zl|Hhv)245AQ${H>&pQqXC#SL$j{C z)4r&16PwJ7#8&lls2Rr;HhY?C(Y8TFn$4%%F9mgf7;f!r{j=HPTwQPoW4skUbaz26 zNs@^j0xj+6^&hwN;<4a-FXyFI;vgNtEkp{f2QruE-qx|%&{FM$y|Kv>s)-X|0M|`l z*+XbD<4n=sNipBp@8o1kXH8HRZCbrZ)_8}c=BU0_0J`5o9(Y~ps!>?(7V|WwLBr9y z|0%@FBGN~o)-IRaav%!If#oyVVI`HSI9Hz78Us1WP!}2sV(WdMm=L1GautuA<lFLs zfczNN19@jOO5@3|Uh}%muZOEmt&fwxKF*&KxZjW&z?NP};o5XPdGjwSr8Oqr08&yr zZ=&|a+hrXS#DzvzPpJjxX-Jqng-YzuFq8*UIUNUoT~0LGta-9%)mN+N;QgjEnSHog z^641~hS9T@dsZ8je|RP?;(@Jqf-I|BS6_s8Rg^7?s(2~zVD`IWMGp&_)kFhqHb%YP zQ&Cf(gLkH1x;Hs3pHGUcP*rW&ZU2dR+<<#l>P<BEsa1yW-wGArs+_sWi|z2}m1JlZ zqmB3E_Bq8RGXpjvxaA9|nYM;9^RS>4`EtiVva%BP=WDr*y)ad3>{SMJC^D3V4x}B5 zpW9)|EPCl~=NMz#sPV&+4mGf$1nEOnTF!O_PLdmKvg-u(r}M82Q3OKcsT4SL9h|c? zSh5mtD=^{iFPlwioR9$ubfywdMI2QAl{-q|(HZBSZ)Nb_N7s(V@RM}FUMWgT7=;Bk z8E!*|1ey^4Q$}uuT=zh=C5eL%*UCM5WVn;L;g2XXy<v@kMD8<NY_yR2X4?`CTaLuX zCBw3RTFOe@2AUf^C1Od}ZLE5yLvsU-LK(k&isj6B#eqe)8Xk=@%m%|r9LJXuK|d82 zvFSfAojFMyL$he()vNDENSzZaVofIrE#1@^HSE_v0z%)$?<g_<&r>5fFyiV>ZWpdp R9Qt*yhpU%M<-w3^{{k1Wm@)tW literal 0 HcmV?d00001 diff --git a/img/clothes/upper/transshirt/left.png b/img/clothes/upper/transshirt/left.png new file mode 100644 index 0000000000000000000000000000000000000000..e82c5fe8df29aa7cf44e7a881b9079aba1c84fd9 GIT binary patch literal 810 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(t!dWJzX3_D(1YsYv{)mD8hQd zJcDI&=ay}|cn_Nuh^wt@y!t|_KzrLQuU12*R$<|@DN77$KHazEeXG4=^7&eO9~PiV zLm0^T1y?cjUA}tww3*VQ%DR`<OebUP_wha3pJ^kOWuRrtz)(=Z$G|XQ0y6`HN=Xz* z?Ok7K!TR@1jlWLR^GPu<cz7^7tbh4r$rla>#mmJ%&pQBBa%M6}l-O_PZdvnWe;!25 zfd${r=m~7fI{qo%m=|c)62=7mvc?J5-~Va<ej>yXqUlEWZiWfdcQce;VqkD^l47V@ zd(U23>CqzVpZfFeDIIzzZxpe1_n-3r9J?a^ovAO5&M^2l6&RI5ml!U*PX7G$<#hWe opXdHx`scb2(7aKAEd-|CWSn1T!}(J}<0MGh)78&qol`;+0Cf0<X8-^I literal 0 HcmV?d00001 diff --git a/img/clothes/upper/transshirt/right.png b/img/clothes/upper/transshirt/right.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffde4b46fe891ce53174da7d4b2ebdecd2a6f7d GIT binary patch literal 880 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(is?-%{^TlLn`LHy}Qwi*-?b` zLMNA2hnU$$;rhch?rXM+_3nS_zA`n-nmdx)n4@Wy(z)Abte5+JO!$82_U_3`M1bZD zG4SG`N>#&~w#10n#p3;^7fuP9_bm82&!m+<>-Skrt~X0luVP?Wuy^kZ#vieF|GZCk zzqpv8xAy#hr4p&C#f%IMEhY@grTcFE5uZNqkD~O?<*d963@S?)C1&pWdH?1gMcJRr zRUslbgpU8-eNmag@yY!E3m_V!AN~4rLBGK<$n?MY#pVm5P_3O+zrL51{@R|Grp|uv zujBhC^Esp#7(6_f4UEi;PI&*zJo%T6fisiAE$h)4`z5OXw?K_MSZDQ@`-}g-&L?%u zV0Q(YZ~XOc{l9PDU*E1i<KSTY$)5#e#gjFe8xkeFG~?eh$*0YK&-7Zj;XgyezqPaf zcdlpO;0Utogq7qPGltMwp%rn!(BPQ#L;JrJgPAAu5Q|&7Id|?)hWJ|V38sRM!XP_6 MUHx3vIVCg!09FODhyVZp literal 0 HcmV?d00001 diff --git a/img/clothes/upper/transshirt/tattered.png b/img/clothes/upper/transshirt/tattered.png new file mode 100644 index 0000000000000000000000000000000000000000..39d3595b29844163669d1726e769d6ba5e60ac3a GIT binary patch literal 1830 zcmd^9`#;lr82^k$EnRkyN>qsAWQ2rfQ`2a2{g$IsOE(b*-H>{1Q!SH(aO9M2NkwFi zOQw!ZWjTtJ6)$Plp<K6>%Pwte-!p&4d7bw!&-2s!d7k(4JnyW~VB#XwN)!NKQD6We z8~_7-iU9MC^g)pK`WOI4(m;YAly*xhB4w}IZ3aFGvG%5GgP3g=8Edj`(67^+%;$-k zPv_Honl9|nu05nR^_@2UxPHFt5nFUv0HMC)qFwB}BTF6JgwnE!*Flk~yOf;`DOg^T z+wS-Ki%_CbMf3ec(G`8Y{}5;+lbz~$%O8rr=6=*kEK-fgT*^pCmhW?^%ou8~9^wn% z?sE@I?R5Y^3tQimFR1kxC5tT4=t_LDB-`glPSifv`j8Up2M)I-0mn{n!wJg`LQjnw zO1fr$rbR7<C6}r>WiMZVTl|(SYWl2NAjps(8sWR(JZp8)ac81&SVTollz{IFy2|w{ z+i3T&sv^({2(D6|Kn85}<soW!;SkK~8a{wzmp}lp>E&n4Jrb>Hr+-UwG^Yg<%yiAE zi?OmN2y-_xIN|}gnoTvQ#e^fG*Q*e*z6$_o$jhP~cRZRH;nex17-43}R^PLRy{5#@ z&JqYZVbVIau)mQ{(pVq09I4Bdy^6@}8?1ldfmi>jL#9pkK4&ntobm9v@&vHGcMij| z`esH(rjktXZk51&m%~l_h62ozyR)VF+4$`V+JoY&DxyKCCq2wENjIzca1v)TqWsDn zb0JY<uvxP@;`hg#dC)JeI;t6*!1AMkH`{tz{usa>d~pDhY^b&xz1DsOzn?)(*@gsQ zZvc{QA5P{?_uOVM#!~9nZY4#^h=exnQ_-ZMu4jxnl>YW|eoIyRvO0P^HR#LvjPVr~ z@W9G)@qTgK7lC2_vqs|qtp9O6O`x}{>TuEx3|I$&iF@Df@Y2=M1cJ6jIIP%{nm+Fn zf6q^_|BOho0zsm4t(!_y!VrMAEF2MAaiT<bXK<o*m0vmtJs?m?Kbu}C63CgdTXEDd zL`4-vk}#O~bcx)<Sw~{p`_{roh-DoRaCFAPnjT%ky&73+e}&lHB8`*0D4BQj<YUS~ z>}C;9`y&b6LLrDF4IUioQH2!o{z+qXe$2^4S22xxH}BQFC^<dG56B!r!$H9Yp%xdd zG>vpwk)CFmN_4TH%jD5lx@{?gaZdbkdF%q`)#Pgo#_-whVT%ytrT&{Py5gDGQe5p> zpIU3!Q-emo`mT7DSwHNnlwYI}+PXOy25jV}H-<TZYxYd@$4&QjY*OCUkkIH8pBwM! ziTM<+XI*d8;0(r2b*ewc?ZS3?Q5$t{2v$3-;(MuA;wi$`mm>H2zn=wn7os8%>_R*6 zfu!|hq42xTr);v6Y83CEHmf5-U|D2TuCIJFyHAm6Y;3-Id0um}4a-z3E0ZjBJfxmt zG2qPw!2MFb_Z#vMOPU8D=rODm6)ShNrF+R{3XF{gm1JF0akutusf!S^vxHx_8X`{6 ziv@7WU!!oFC6PGzzCJO23f4JAJt>eGp}cn3R!#%_!b$+WlWTRF+{BFvTN~f=F-Z<K zLt3dI1JVs^<zz}ua^JF<S>|^<d-~-NEF7I-o*P^&@jek9EAFbk#<O7j9y)ge*HybA z{x|nrXu<lJ1VOyw)H>E!^L?UnP52Tv_dq(%<=oLJ*4239mqWM>j||6u#F?~mj<I^I z-ShNb+>qxAJmh|qT`qEy>vci6hs7<vHJPB3JTZQsIZ!Tb<*G22hx3@o9xtCR7`glQ zoCAD*9PDr24hjQjkoz!O8#&buxOZ+`?s7{d#>YAo`)dwt*JwEITo%H!N-)0SZPn#x yS_$+62TnR3??K^LV9&;K;@bJBxexunqEUfyfsyE7o5{X82?G6t2{qfIFZ>I#5x<oH literal 0 HcmV?d00001 diff --git a/img/clothes/upper/transshirt/torn.png b/img/clothes/upper/transshirt/torn.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e4b32a93adf51914dd1d64f5a5c009adb3a6b2 GIT binary patch literal 1754 zcmdT^=~EMS5d9@n0tFFLgtREe!l)P(YPlRFBtRlig)o$e9h9JmghQb~IRZJfrJ{_2 zj3@*oP`OVzEFxf#5mUt+1-u|30VG@oG(bW^j;8Iu&@bIDyPw{^_h$E94GH!)H?=hd z0GI~`;6ed_8b$~(ff?FRAukpHSXCg-CoHpECL$#4h}mKMQG7A+`x*tN{VfXLDDjDV za!=rg&RP@nI%69jTefdFjeAIZaxZUl4u#{*rl07(Hh=KS^;RwSyw^*w!1SU(_cFIq z42!?prPF12U^zqX#m-Wcni$sokBZEmjAVhb;f_SI_IgvN-*#PJT1quPSvbQ`zm;i} z6ep_-uf<DN0Hlk}vZ>HS{;bmCC=Q3(Qr_cP)^cH}I6~1d%et{Ysm*h1JyI206b5Xa zsEpxkip@Y|AwAu<sZIJK8ng-{{y?R3NqX8Da=%cHaYegzd9x3H=^0D_iwWJUNn5bJ z4FF(`<0fATPgpZj@@c0~kP!NkoF3(?qCfgkM+D<RMgVvQthP!UrH}xnVoxY!9*<k# zO>;P;H4%gP!yWzSM9?U2g9<L9K(iSJ$m$>f*qyVl{Pnwo-B+#WuT6k!22d+L-AC6u zWM08M77cij!z)_RVa);h8I*qhv3JJV7_lrERy4GTklgDnaIl{iuBdu9tihOnjE+xm z)MvQ!*oT0u7AkP>&tVE8+xuDr#S_VJ^3@0Ww;m39GH?xw8+&$zt?Tb7$3I=Wsdeb* zPGhnN_A-6*No6s^cK@6np^D9cL7)b`%Wgs)JVFyQTQT@z^ChL(#5GsbX@vqn;DZ9@ zH^*m>t=JXh<<T(6!OqOpGdSFF<OJJO;(UF1U)!CQucnS1PIV+bTqoPlnH}eyP$3iU z)9CA!H5mm`vu-H|jkgUjstlqW((ot0Apumqf!qR1Ezz{+<z<GpZ$9^PUbnYDKgUY+ z=5XXuoI03>kCKzzMSK=Kc}=nwq8n8Vg-(v9Kf?cGzER~=BV~hlP~D|{CyyfE*o6k< zid%YrvwT0*inZ0{-LpB!c|xfIVa})>kIT$OG839K=OaE8wnTgzRiEz);+@d?&1W}r zYFl*$s(P_2V&j9#aa}Wd`fkqZz1+HYM<>GHr1I$$%l2~oxyN6GAZF$;cjWBihKT|P zSOx60TdShQCH`3CNEP)x>(4mgI+Scoi>ac!aE&UA+4RJ&(kENlE-q;`CEE|g!r_?m z%$;y}Y<>j?Sz&6Do%B?LaUSucrmZdwJks#dj&c@zB|^;Y^$<X427z|fP=V!MOlCg< zen=^k9k4$u9ZXQE*K^Rf<(Pa6M6_&4uk-4TYe`yG-<@9ntqN1z#)R)!j2_d}?WZhG zh0kJUY0|-kshzY>(U)pAi7xqqJtz=1V!~K1(koKwb<&QJm8?*UU8OxG%FmV&6WKLP zUOZtc7{5CzGj$wU&l2(INzGTb2)12>bp2A|oADeo^Rd67C&ft8lx^m>-8*YN%G*lf zL63pMwbU7E^_$6;EZFTAv<2!Vwd0(ABuO=Tgw%7=*6Mx`Q56m$dqe|J`Lhs8E*bM> zpXw5@`^uCix5Ye`>F**aHh#gmm|}y~R`*5jlQStg(zZ93sCWXccV(|$RBeb*yZ0~x zx0nOM0?`aU!CYxsG+dLdURd{O4_7^u>#*9IrGc=0{X|t81x>WU9MN_xVe|j}WYH^O zy)^?xL{rez`5P&d{#-T*(p6@N=(IxVX|Ajb8e%xA0Hqp(e(>ohtWl*X?0=M;|2b6# ZbJL<lG81m&@NxKW@IZVpuGKf{@?U=`ng##> literal 0 HcmV?d00001 diff --git a/img/misc/icon/clothes/transshirt.png b/img/misc/icon/clothes/transshirt.png new file mode 100644 index 0000000000000000000000000000000000000000..330ba05862d8494f5b56e30347376d3a65fb6fa8 GIT binary patch literal 965 zcmV;$13LVPP)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I000AwNkl<ZNQv#1 z!D}5=6vlt&%uMp~Y!O<Tnz%?oOIm47DYXRsHzGmBrNvDIl`i}XM5Q9FO9eL}B-U<R zh<m|QyC_+xU5Kreyi#eXsd;&wH}@PDGnu^P&E(aMt9)>W%bdCAJLkLSo;$FQeE=^k zwQO>+<#qPs3oSo3zglarf(-iL_(IFyKHDHx;ftG_bPax+9V^#O%&+?U(@h^j{KMr9 z1-SFZ_&~pVelRh=>KCV*-pO1<gjhfnuH4uJgVdah(@nYoB#vkZn3;XFyrF~0YmJkO zEq~|Sh;;(0IED~Kf{LO7F<?Me3hc#Gh&}kn%Wc_<T&rH5x_Zy&&W>0oxB`53y<Iv6 z$J|NX$=r+g+uJKRnMCrz%Lkd*W8dSdmjZ+$s3eX^;(=SXYrT^WD7DIr*B@Is?`Bz< zkPog!08EriKR)8EGY#raLm%<UrIydVG=jO4#1WT&-sJlO|1fjwKA7>yg$;zZM15o3 z;X#xzd-Hbyh8qz>QFU;YQpX4ZCqV#5i<D<>-A6RfT0|+#IRxAc5yct@pq*#6-mNCC zlzKNJ%McIX0T;zpG0CgigmUhxc%V2dd4TVoZ}Q^Rez_}&U7Sb+DIEMcHOku55pahr zL$XjiAh2=zQ0YrVDzn}p^~t4{UpSNRZyX81tj8*>O^xP(l}__m08|9?qWpr<3EL~* zJ>TThg_hrWZM);`%vj)Ya1<d{rJEU(YBUuL2ltXxMTkWURUj70_qmuKianPfNXa{1 zt<=B1IwoJOY+^v$oXa;h`SPiC4zH|ncx4TjJYNxr3dUHJMDy|+D&|jLzf0<nKJ4<K zV|@Noo7+A8y~wd2#}-@eMKAo};6qGyo(YK*(f;xf5klH69l!Ed6Hk=8Z$8_{Q(0WM zXUEDu``vR#`S$rEc~uwiU|2WcSwKX}k&_A_d^33z9gZqVYl(ZYktm%=`TE2-+CvVG zyA#qbA<YPB#+HEBCP(=@uIU^FDjNvEscZNA!s&*k<|^WVuykS!FWl=^RqZ~Z0<Ab< zJgey(gNPL{->FC^QbJEzRB0H1u{0$}rNV=WGlMw7x*0{2bcTbom9o@a819Y@AcZ~l z_?MYy<dfyLCL&%i7iCiq2O<F#CmO&#FtmyJ)sonXZ0F96RA!t+_@(9c);+=>uh;*9 n{I?svCzv|hll<uI<A24!tlx-TK+M6^00000NkvXXu0mjfhQ!gm literal 0 HcmV?d00001 diff --git a/img/misc/icon/rainbow_club.png b/img/misc/icon/rainbow_club.png new file mode 100644 index 0000000000000000000000000000000000000000..35b18e99d6613b5519379b9c578af5e59a91f697 GIT binary patch literal 1257 zcmV<F1Qz>=P)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT000D9 zNkl<ZNXM<0+iMhO7>A$PIqa-4hc%fbn$Xf1D5PlXUFnTN69|HcAoa!;(}Mqjt<YLZ zgQyplmRed`ian|HK)tX?i%Ch*LJOr@1#gUstx-3dm}Iw`ot@Lyi`f}x;_hT=d~b%C zZ})rV_a48Igb)O_rLRM*QX~Kt9l<I^V$l&ODgT+{39`DvoaxZfq%l*n08mmA&6-Tn za*0}7My28kilz;~#Els#Sd*gQZ3An?ne8Y2n}tOHCTDK~aBF^wcmMeefYzo?YMF2! zfF)T*xGs_```eYKIdk=HZSa=94l%Lo+q&S<Yo7pMv~;4SQX#<56)L7lTGs)nm?j03 z@MSE|BVU-VuXx8mw>Z81RHEXdY17-@6RI(Eg}muJq&9dCP_b?1{>?Ksng4&Tjw(*8 zDlIq^P-4(}@OyK2>VpUS4Ka3oCbq$3^?D09w7vt!6ZE$Cgqyzq+*=fWJqUY%ZLo7( z;>i!K@MSui(&SBNW#G{#+5zZo@1X^U1y|z4h2Q)il#1bhp56ZkdoSl1ci*A2Da~}L zLavZox#FI-?r_5sKb_<F*WUmzvg-wofB6N^JiUoc8#l0f>u?y3+p|;klWQg5k(XcL z_(vZw^5RRpefS7(?thKlTZb`ph3Qg-srh@$fM2hI=d0kmRd5~-osWa_ro&ffe}tyy zn7c1tzQU!yE;4@V<f8)vbhUKRDhmoIHIwV(#}5K<bpO7_z+3t{#KeKwy5P}Y+EG#x z-Pv_vRvWq!HjT8dQ!!2c+<2J1m-GD0dyfWu?DsB;mK!Qwa3v&JrefP@sZ`h=qZVX; zB6#P9b>h1#cjL)*r3$_V$KLS4f#Rsrz?QbooF&lZR0E1{%+>`Tdi6mAiCV?BNvkSt zDVKRqu6du>G8+N6WmI(C2saI`OD(!SXOrAOb_{fj(^qqe;Eblw+SFMWSnCCr1rPQc zVth$C5rjMso2yx!U2Vi%8MwPEog!E9NULg0wQ${)fuFC|aWuJVB@_@#xMj;}+rV1! z!@hgVg0rg)dYdz`Ib5rhf^sULB%eTr`m$o|z<fiBqqErZyjUGa=X22E62XK0hPd#Q zKWW5b$-fr;gMcVcvAOhVO!4hvIRsj^gFuj0)$nvuv26@hYHT_sfrstSDVjDtZQZoW zg1jw|@b}VGU%l-K)at1;IE73VP0H5&l__r4WK!xHx-=<twe5+AVymVkEYHJGC32Qv zwwQ3(8|ur7^BcZT1UsIfy}6SvO(JhUaBZN_vYpTa4fpE7enX60KjN1F3)P&u1HgTz znOuK1oX4i?@mNcyX21TsP>!uN6yxQ<8BHOht--DSFQciHEt`zyH;uC8e>KRG6siW2 z!9#snvFGN|h7>O?ogj;Ya7V#q%TA7Qqpn^$or1UqNfjhp0Jdz0=|V1f9tR&{QHy?{ z0jRjx$g%sS7F}=FRZP?5+>N;q{2$x=wDKF!2txn>01jnXNoGw=04e|g00;m800000 T0Mb*F00000NkvXXu0mjf<1}AQ literal 0 HcmV?d00001 -- GitLab