Playable character mods, as the name suggests, adds additional playable characters to X-Change Life. If you have an interest in learning how to create a playable character, this guide is for you.
This guide assumes you are:
- somewhat comfortable reading and editing code
- mostly comfortable editing photos and videos
- going to download the template or use the mod tools site
- willing to use AI/image generation
- willing to ask for help (in the discord) when you need it 🙂
Getting Started
There are some things to consider before you get started. One of the biggest hurdles in completing a playable character is the time investment. In short, you have to essentially replicate all the same scenarios that are in the game, with the model you have chosen. A good starting point is to ensure the model has enough material to cover those scenarios. This is more than just the sex scenes, it includes:
- morning routine/activities (brushing teeth/cooking breakfast)
- working out (at the gym/doing yoga/jogging/swimming)
- showering
- cleaning/doing chores
- solo masturbation
Once you’ve decided there is enough media to proceed, a good practice is to grab as much media as you can while sourcing your images and videos. When it comes down to what you actually need, the list will mimic what is out there for the existing characters. If you’re ever unsure about what an image or video is supposed to look like, look at one of the other girls!
Files
At it’s core, a playable character mod consists of:
- Media Files
- The media files are the images and videos of your character, which match the various scenarios within X-Change Life.
- Twee File
- The twee file is written in a Twine/Harlowe 3 format. It contains the main code for the mod, in the form of “passages”, that allow the game to find and display your media files.
- Javascript Files
- Javascript files are for adding your character’s bedroom positions and outfits to the game.
Template
You can either download the template and fill in your own values or you can use the community hosted mod tools.
Images
When searching for images, look for professional photoshoots and try to source those from sites that uses the full resolution images (something like 3000×2000 instead of a rescaled 900×600). Starting with a higher resolution source will give you the creative freedom to crop out unwanted sections and allows for easier editing and/or image processing. If you have a really good image that you can’t seem to find a high quality version of, you can usually still get a good result by upscaling it and running it through Prequel (see below).
Dimensions:
- Square images: 540×540
- Landscape images: 960×540
- Portrait images: 540×960 (vertical)
- All images are
.jpg
(except for the transformation pictures, they’re.png
)
Colors
Colors can vary between portraits, especially once passed through filters, but generally they start as these colors:
- Female (pink) background hex code: #fb94b2
- Male (blue) background hex code: #1e3c70
Effects
The cartoon effect on images comes from an iPhone/Android app called Prequel. The filter is called Cartoon+ Ai. Unfortunately there is not a desktop version of this, and as of currently (0.21), we do not have a reliable PC workaround. Several modders have tried to find a solution but Prequel provides such a unique look that is too difficult to replicate elsewhere.
Hairstyles
There are a ton of different hairstyles (currently 39). Check out the hairstyle directory to get an idea. There isn’t really a requirement on how many hairstyles to include, but it looks like most modders are going with about 10. Given the most models probably don’t naturally have that many photos/videos of different hairstyles, you may need to generate some images or use some face swapping websites.
Outfits
A big portion of a playable character mod involves their outfits. Outfits are split into 8 subfolders, representing different locations or activities (see the file list below for specific locations.) Similar to hairstyles, there isn’t really a requirement on how many to include, but you should probably aim for at least 10 in each location, if possible. Again, you’ll likely need to generate images or face swap.
File List for Images:
File Path | Naming Structure | Dimensions | No. of Files |
img/characters/bimbo | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/bj/bwc | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/cum | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/dream | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/emotion/bimbo | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/emotion/reject | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/emotion/surprise | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/face | <character_id>.jpg | 9:16 (540×960) | 1 |
img/characters/female | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/hairstyle/<hairstyle_name> | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/male | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/nude/body | <character_id>.jpg | 9:16 (540×960) | 1 |
img/characters/nude/boobs | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/nude/bust | <character_id> <file number>.jpg | 9:16 (540×960) | 4 |
img/characters/nude/butt | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/nude/present | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/nude/pussy | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/outfits/<character_id>/beach | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/outfits/<character_id>/casual | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/outfits/<character_id>/fetish | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/outfits/<character_id>/gym | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/outfits/<character_id>/lingerie | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/outfits/<character_id>/lounge | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/outfits/<character_id>/office | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/outfits/<character_id>/stylin | <outfit_name>.jpg | 9:16 (540×960) | Unlimited |
img/characters/places | <character_id> (good|bad).jpg | 16:9 (960×540) | 2 |
img/characters/makeup | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/sex | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/sex/doggy | <character_id>.jpg | 1:1 (540×540) | 1 |
img/characters/sex/doggy/moan | <character_id>.jpg | 9:16 (540×960) | 1 |
img/characters/sex/insert | <character_id>.jpg | 16:9 (960×540) | 1 |
img/characters/sex/missionary/moan | <character_id>.jpg | 9:16 (540×960) | 1 |
img/places/club/dancers | <character_id>.jpg | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/sex/doggy | transactional insert <file number>.jpg | 16:9 (960×540) | 4 |
img/scenes/characters/<character_id>/sex/doggy | moan <file number>.jpg | 9:16 (540×960) | 4 |
img/scenes/characters/<character_id>/solo | masturbate.jpg | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/tg | <file number>.png | 9:16 (540×960) | 5 |
Videos
When looking for videos, look for full length videos that you can extract your clips from. This gives a better consistency in terms of continuity and quality. The length of a clip can vary, but you’ll typically see 15-30 second clips. You may see shorter or longer, depending on the modder and the clip. As a general rule, if something is really hot, but outside the length suggestion, go ahead and include it anyway.
Dimensions:
- 540×960 / 432×768*
- All videos are
.mp4
Videos in the base game are 540×960, however the displayed media is limited to your monitor resolution. *A lot of modders opt for a smaller 432×768 size, in order to optimize the size of their mod. If file size is not a concern, stick to 540×960. You could even opt to go higher and use a 720p resolution, however users without a 2k or 4k monitor won’t be able to see the full resolution. It could also affect performance as the videos are streamed from the user’s local files on a loop. You can use a free desktop program called “Handbrake” to convert/compress/export your video. Ask in the discord about handbrake settings, there is a template 🙂
Effects
The cartoon effect on videos comes from an iOS app called Clip2Comic, with lines and blackness turned all the way down, and details all the way up.
You can achieve a similar effect on desktop video editors using a “posterize” effect. In DaVinci Resolve, it is in the Effects tab -> Templates -> Fusion -> Looks -> Posterize AFTER you add Brightness/Contrast node. In Adobe Premiere Pro, it is under Video Effects -> Stylize -> Posterize
Prequel technically handles video as well, but it doesn’t always turn out well.
File List for Videos:
File Path | Naming Structure | Dimensions | No. of Files |
img/characters/pregnancy/<character_id> | <character_id> <week count>.mp4 | 16:9 (960×540) | 1 per week |
img/scenes/characters/<character_id>/bj | rough <file number>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/bj | transactional <file number>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/chores | bathroom.mp4 | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/chores | morning.mp4 | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/chores | cleaning.mp4 | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/chores | shower <file number>.mp4 | 16:9 (960×540) | 2 |
img/scenes/characters/<character_id>/chores | workout.mp4 | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/cum | creampie <file number>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/cum | facial <file number>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/cum | mouth <file number>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/cum | pullout <file number>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/foreplay | grope ass.mp4 | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/foreplay | grope tits.mp4 | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/foreplay | kiss.mp4 | 16:9 (960×540) | 1 |
img/scenes/characters/<character_id>/oral | oral <file number>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/active/cowgirl | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/active/doggy | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/active/missionary | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/active/service | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/passive/cowgirl | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/passive/doggy | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/passive/missionary | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/sex/passive/service | <scene name>.mp4 | 16:9 (960×540) | Unlimited |
img/scenes/characters/<character_id>/solo | masturbate <file number>.mp4 | 16:9 (960×540) | Unlimited |
Audio
Most of your audio can simply be extracted from the videos that you end up using. You may have to hunt around for specific media though.
File List for Audio:
File Path | Naming Structure | No. of Files |
aud/se/sex/loops/bj | <character_id> <file number>.mp3 | Unlimited |
aud/se/sex/loops/bj rough | <character_id> <file number>.mp3 | Unlimited |
aud/se/sex/loops/doggy | <character_id> <file number>.mp3 | Unlimited |
aud/se/sex/loops/fondling | <character_id>.mp3 | 1 |
aud/se/sex/loops/licking | <character_id> <file number>.mp3 | Unlimited |
aud/se/sex/loops/masturbate | <character_id>.mp3 | 1 |
aud/se/sex/loops/missionary | <character_id> <file number>.mp3 | Unlimited |
aud/se/sex/loops/riding | <character_id> <file number>.mp3 | Unlimited |
aud/se/sex/orgasm/cum | <character_id>.mp3 | 1 |
aud/se/sex/orgasm/cum/dynamic | <character_id> body <file number>.mp3 | Unlimited |
aud/se/sex/orgasm/cum/dynamic | <character_id> creampie <file number>.mp3 | Unlimited |
aud/se/sex/orgasm/cum/dynamic | <character_id> face <file number>.mp3 | Unlimited |
aud/se/sex/orgasm/cum/dynamic | <character_id> mouth <file number>.mp3 | Unlimited |
aud/se/sex/orgasm/cum/dynamic | <character_id> tits <file number>.mp3 | Unlimited |
aud/se/sex/orgasm/orgasm | <character_id> <file number>.mp3 | Unlimited |
aud/se/sex/orgasm/orgasm | <character_id> solo.mp3 | 1 |
aud/se/sex/penetration/pre | <character_id> <file number>.mp3 | 3 |
aud/se/sex/penetration | <character_id> <file number>.mp3 | Unlimited |
Outfits
The file that contains the outfit information is a javascript file. These are the fields and what they mean
Field Name | Field Description | Example |
name | Name of the outfit, must match the file name | floral bikini |
flavor | Flavor text that shows up under the outfit. It can be descriptive, informative… whatever you want it to say. | A floral bikini with a plethora of underboob, leaving little to the imagination. |
description | A very short description of the outfit (a few words). It doesn’t show up when you look at the outfit in the store or your wardrobe, but it is used in the game when referring to the outfit. | revealing floral bikini |
price | How much the outfit will cost when the player goes to buy it. | 100 |
type | This classifies the type of outfit. It is used in game to make sure you are dressed in appropriate attire for certain events. For example, if you show up to the club in a bikini, you’ll be turned away. | Beachwear Gym Casual |
sluttiness | Sluttiness👄 affects other’s reactions and mainly guides conversations. Stat wise, it can also impact affection, sexual reputation at work, etc. | (1 through 10) |
comfort | Comfort😌 affects your mood. Comfortable clothes can reduce negative mood stats. Uncomfortable clothes can make your mood worse. | (1 through 10) |
durability | Durability affects how easily your clothes can be ripped. Lower durability clothes are more likely to be ripped when being taken off you. | (1 through 10) |
style | Style is mostly used in conversations when people are referring to your outfit. | sexy cute |
tags | Optional. Tags can impact a lot of things. Stat buffs, sound effects, npc personality, descriptions, actions, etc. | (See tag list below) |
colors | Optional. This drives the cum on clothes image. If nothing is specified you’ll get an image of cum on black fabric. | red black |
emphasizes | Optional. This drives dialog triggers. For example, ‘Asscheeks’ might trigger the thought: ‘He’s staring at my butt’. | cleavage asscheeks |
reveals | Optional. Similar to Emphasizes, this drives dialog. For example, if your outfit reveals ‘boobs’, this might cause your coworkers to say that ‘your cleavage is like a sales magnet’. | tummy underboob |
panties under | This determines if your character has additional layers to remove during sex scenes, as well as sets description values tied to lingerie | true false |
bra under | This determines if your character has additional layers to remove during sex scenes, as well as sets description values tied to lingerie. Also tied to breast support. | true false |
breast support | Breast Support👙 affects soreness in characters with cup sizes of C or higher. Having sore breasts can lead to a negative fitness debuff. | (0 through 10) |
locations | This is all the places/scenarios in which the outfit can be worn. | [“beach”, “gym”] [“fetish”, “stylin”] |
onepiece | **This field cannot be included if Top and Bottom are also included** This is the very short description of the outfit. | Sundress Bodysuit Latex Dress |
top | **This field cannot be included if Onepiece is also included** This is the very short description of the top piece of the outfit. | Bikini Top Red Jacket |
bottom | **This field cannot be included if Onepiece is also included** This is the very short description of the bottom piece of the outfit. | Bikini Bottom Black Skirt |
shoes | The type of shoes being worn with the outfit. If no shoes are worn, exclude the field or enter “none”. | sneakers sandals heels |
Outfit Tag List
Certain tags can provide the player with stat buffs, others can trigger sound effects, or even impact NPC personality.
- professional – Gives +1 🍀 while wearing this outfit at the office
- very professional – Gives +2 🍀 while wearing this outfit at the office
- masculine – Gives +1 🍀 while wearing this outfit with high masculinity
- chores – Earn a bit extra 💵 while doing chores
- workout – Gain 50% more XP while wearing this outfit at the gym
- great workout – Gain 100% more XP while wearing this outfit at the gym
- sleep – May get a better night’s sleep while wearing this outfit
- great sleep – May get an exceptional night’s sleep while wearing this outfit
- fragile – Strong men or jerks might destroy this outfit while removing it during sex
- very fragile – Strong men or jerks will likely destroy this outfit while removing it during sex.
- easy access dress – Dress can be moved out of the way instead of stripped off during sex.
- easy access skirt – Skirt can be moved out of the way instead of stripped off during sex.
- boobs fall out – Your breasts are likely to fall out of this outfit, and people may comment on it.
- nude – You’re considered nude while wearing the outfit.
- basically naked – People may comment on this outfit while wearing it.
- not serious – People tend to not take you seriously while wearing this outfit.
- jingles – Tends to jingle while moving and wearing the outfit.
- underwire – Uses underwire as part of the outfit.
- long changing – Takes longer than normal to change into.
- rich magnet – Rich people are attracted to this outfit.
- gentleman magnet – Gentlemen are attracted to this outfit.
- chad magnet – Chads are attracted to this outfit.
- fuckboy magnet – Fuckboys are attracted to this outfit.
- jock magnet – Jocks are attracted to this outfit.
- nerd magnet – Nerds are attracted to this outfit.
- collar – Has a collar as part of the outfit.
- straps – Has straps as part of the outfit.
- garter – Has a garter as part of the outfit.
- stockings – Has stockings as part of the outfit.
- zipper – Has a zipper as part of the outfit.
- strings – Has strings as part of the outfit.
Positions
The file that contains the position information is a javascript file. These are the fields and what they mean
Position Name | Position Description | Examples / Rules |
name | Name of the position. Must match the file name. | amateur riding |
flavor | Flavor text that shows up under the position. It can be descriptive, informative… whatever you want it to say. | “You’ve got him pinned down, his cock trapped inside you” |
type | Active or Passive. Active means your character is doing most of the work. Passive means your partner is doing most of the work. | active passive |
subtype | Subtype helps to classify the position. If you’re on top, it’s cowgirl. You’re on your back, it’s missionary, etc. Service are “servicing” positions, like blowjob, 69, etc. | cowgirl, doggy, missionary, or service. |
position | Sometimes mirrors subtype, but can specify a type of…the subtype. “Standing fuck”, for example, could be a type of doggy. | cowgirl side fuck standing fuck |
athletics | In Active positions, Athletics plays a role in calculating the stamina cost⚡ (along with your fitness💪) In Passive positions, Athletics determines your partner’s eligible positions (along with your partner’s fitness). | (1 through 10) |
roughness | Roughness affects the rate at which you gain or lose control. In Passive positions, Roughness determines your partner’s eligible positions (along with their dominance). | (1 through 10) |
your pleasure | One component of how your pleasure💦 gains happen. It is calculated as this number times the number returned by the pleasure factor calculation. | (0 through 10) |
pleasure factor | Pleasure Factor determines the method in which the rate that you gain pleasure is calculated. It is based on your partner’s skill or cock [attribute]. None means you gain no pleasure. | oral width length both none |
his pleasure | Affects the rate at which your partner gains pleasure🍾. It is this number divided by 2. Example: A position with a 6 in this field would fill up your partner’s pleasure bar by 3 (bar is 0-10). | (0 through 10) |
his satisfaction | Affects the rate at which your partner gains satisfaction😋. Normal rate is this number divided by 2. Depending on your actions, this can be doubled or halved. His satisfaction is what lets you increase their stats after bedroom sex. | (0 through 10) |
rhythm | This is the Beats Per Minute (BPM) of the position, measured in milliseconds. Take 60000 divided by BPM to convert. Example: 60 BPM = 1000 rhythm, 120 BPM = 500 rhythm, etc. Rhythm is used in the minigames. | Usually between 400 and 1400 |
tags | Tags are used to drive on screen flavor text and descriptions. Some mods may also lean on tags for filtering purposes. | [“legs in air”, “butt view”] [“eye rolling”, “leg up”] |
skill | This is the type of skill that this position requires. It will also reward experience for using that skill. On skill checks, this is what determines the pass and fail values. It is also used independently with skill levels. For example, if the position’s skill is ‘Blowjob’, and you have a skill level of 3 for the blowjob skill, you’ll earn experience towards reaching level 4 in blowjob skill, but only in that skill. | active sex passive sex gag reflex blowjob handjob titfuck female masturbation |
skill level | This is the level of skill that this position requires. For example, if the position’s skill is ‘Blowjob’ and the skill level is 5, but you have a skill level of 3, you won’t be able to earn this position yet. Only once you reach level 5 or higher will this be an eligible position to be learned. | (1 through 10) |
locations | Places where this position can happen. Most positions will have this set to ‘bed’, but some may include things like ‘couch’, ‘floor’, etc. It is mostly descriptive so base it on what is in the video. | [“bed”, “couch”, “floor”] |
Main Code
The main code (also known as core) is a .twee
file.
Rather than stepping through every single passage and making this page longer than it already is, let’s just cover some basics. The majority of what you will be doing with this is adjusting the code that is already in the template to match your situation. If the passage is written for 10 blowjob videos and you have 6, then you will adjust the section to be 6 instead of 10. Easy right?
Some general tips:
IDE
Trying to look at many lines of code in your basic notepad program is definitely not ideal. You will definitely want to use a program that is designed to help make coding easier to read. Hopefully you’ve skimmed the “Creating Mods” article and already have one ready to go 🙂
Twirl
Twirl picks a random value from a list of arguments using the Mersenne Twister algorithm.
So, as an example, if you see:
(twirl:
"feel way too big for you.",
"look a bit comical on your female body.",
"look really awkward on your buxom female body.",
"don't really compliment your shape.")
That would pick one of those four lines to display. So when you are going through and editing the file, you want to fill in those with what you would want it to say about your character.
It doesn’t have to be the same number of lines as in the template. The example has 4, but if you wanted to do 8 you could do that as well.
The minimum for twirl is 2. If you only want it to say one thing, you need to remove the twirl part. So if you only wanted to use the first line then you would replace the whole twirl section with: "feel way to big for you"
Twist
Twist generates a random integer between a specified minimum and maximum value (inclusive) using the Mersenne Twister algorithm.
So you might see something like: (set:$img to $character's "id" + "/bj/rough " + (text:(twist:1,10)))
. Which would mean there are 10 rough blowjob (facefuck) videos. If your character only has 6, you would change 10 to 6.
This will be a big portion of how you go through and edit the code.
Comments
Within the template exist comments. These comments are lines that begin with <!– and end with –>. They are there to help guide you on what is expected in or around that area. For example, there are a few times when the passage will do a check to see if it should play a generic clip, or if it should proceed with your character specific clip. In many of these situations, you only need to edit your character specific section and can leave the generic section alone. Comments can also stand to clarify pieces that might not be obvious.
Credits
Huge thanks to Chuck, Sorrow, and Pudge for creating, maintaining, and hosting the Multiple Characters Framework (also known as MCF). In 0.21 Aphrodite integrated MCF into the game’s base code, which allows modders to create Playable Characters without needing to use MCF.
Also big thanks to hphpanon for creating the table of filenames and aspect ratios that made writing this article easier!
I borrowed most of the code for the template from the Lauren mod, so big thanks to Zihara as well!
And of course, Aphrodite, for creating this wonderful game that we all love. And everything she does to keep it current!!!