Creating a Playable Character

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 PathNaming StructureDimensionsNo. of Files
img/characters/bimbo<character_id>.jpg1:1 (540×540)1
img/characters/bj/bwc<character_id>.jpg1:1 (540×540)1
img/characters/cum<character_id>.jpg1:1 (540×540)1
img/characters/dream<character_id>.jpg1:1 (540×540)1
img/characters/emotion/bimbo<character_id>.jpg16:9 (960×540)1
img/characters/emotion/reject<character_id>.jpg16:9 (960×540)1
img/characters/emotion/surprise<character_id>.jpg16:9 (960×540)1
img/characters/face<character_id>.jpg9:16 (540×960)1
img/characters/female<character_id>.jpg1:1 (540×540)1
img/characters/hairstyle/<hairstyle_name><character_id>.jpg1:1 (540×540)1
img/characters/male<character_id>.jpg1:1 (540×540)1
img/characters/nude/body<character_id>.jpg9:16 (540×960)1
img/characters/nude/boobs<character_id>.jpg16:9 (960×540)1
img/characters/nude/bust<character_id> <file number>.jpg9:16 (540×960)4
img/characters/nude/butt<character_id>.jpg16:9 (960×540)1
img/characters/nude/present<character_id>.jpg16:9 (960×540)1
img/characters/nude/pussy<character_id>.jpg1:1 (540×540)1
img/characters/outfits/<character_id>/beach<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/outfits/<character_id>/casual<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/outfits/<character_id>/fetish<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/outfits/<character_id>/gym<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/outfits/<character_id>/lingerie<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/outfits/<character_id>/lounge<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/outfits/<character_id>/office<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/outfits/<character_id>/stylin<outfit_name>.jpg9:16 (540×960)Unlimited
img/characters/places<character_id> (good|bad).jpg16:9 (960×540)2
img/characters/makeup<character_id>.jpg16:9 (960×540)1
img/characters/sex<character_id>.jpg1:1 (540×540)1
img/characters/sex/doggy<character_id>.jpg1:1 (540×540)1
img/characters/sex/doggy/moan<character_id>.jpg9:16 (540×960)1
img/characters/sex/insert<character_id>.jpg16:9 (960×540)1
img/characters/sex/missionary/moan<character_id>.jpg9:16 (540×960)1
img/places/club/dancers<character_id>.jpg16:9 (960×540)1
img/scenes/characters/<character_id>/sex/doggytransactional insert <file number>.jpg16:9 (960×540)4
img/scenes/characters/<character_id>/sex/doggymoan <file number>.jpg9:16 (540×960)4
img/scenes/characters/<character_id>/solomasturbate.jpg16:9 (960×540)1
img/scenes/characters/<character_id>/tg<file number>.png9: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 PathNaming StructureDimensionsNo. of Files
img/characters/pregnancy/<character_id><character_id> <week count>.mp416:9 (960×540)1 per week
img/scenes/characters/<character_id>/bjrough <file number>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/bjtransactional <file number>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/choresbathroom.mp416:9 (960×540)1
img/scenes/characters/<character_id>/choresmorning.mp416:9 (960×540)1
img/scenes/characters/<character_id>/chorescleaning.mp416:9 (960×540)1
img/scenes/characters/<character_id>/choresshower <file number>.mp416:9 (960×540)2
img/scenes/characters/<character_id>/choresworkout.mp416:9 (960×540)1
img/scenes/characters/<character_id>/cumcreampie <file number>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/cumfacial <file number>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/cummouth <file number>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/cumpullout <file number>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/foreplaygrope ass.mp416:9 (960×540)1
img/scenes/characters/<character_id>/foreplaygrope tits.mp416:9 (960×540)1
img/scenes/characters/<character_id>/foreplaykiss.mp416:9 (960×540)1
img/scenes/characters/<character_id>/oraloral <file number>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/active/cowgirl<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/active/doggy<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/active/missionary<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/active/service<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/passive/cowgirl<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/passive/doggy<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/passive/missionary<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/sex/passive/service<scene name>.mp416:9 (960×540)Unlimited
img/scenes/characters/<character_id>/solomasturbate <file number>.mp416: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 PathNaming StructureNo. of Files
aud/se/sex/loops/bj<character_id> <file number>.mp3Unlimited
aud/se/sex/loops/bj rough<character_id> <file number>.mp3Unlimited
aud/se/sex/loops/doggy<character_id> <file number>.mp3Unlimited
aud/se/sex/loops/fondling<character_id>.mp31
aud/se/sex/loops/licking<character_id> <file number>.mp3Unlimited
aud/se/sex/loops/masturbate<character_id>.mp31
aud/se/sex/loops/missionary<character_id> <file number>.mp3Unlimited
aud/se/sex/loops/riding<character_id> <file number>.mp3Unlimited
aud/se/sex/orgasm/cum<character_id>.mp31
aud/se/sex/orgasm/cum/dynamic<character_id> body <file number>.mp3Unlimited
aud/se/sex/orgasm/cum/dynamic<character_id> creampie <file number>.mp3Unlimited
aud/se/sex/orgasm/cum/dynamic<character_id> face <file number>.mp3Unlimited
aud/se/sex/orgasm/cum/dynamic<character_id> mouth <file number>.mp3Unlimited
aud/se/sex/orgasm/cum/dynamic<character_id> tits <file number>.mp3Unlimited
aud/se/sex/orgasm/orgasm<character_id> <file number>.mp3Unlimited
aud/se/sex/orgasm/orgasm<character_id> solo.mp31
aud/se/sex/penetration/pre<character_id> <file number>.mp3Unlimited
aud/se/sex/penetration<character_id> <file number>.mp3Unlimited

Outfits

The file that contains the outfit information is a javascript file. These are the fields and what they mean

Field NameField DescriptionExample
nameName of the outfit, must match the file namefloral bikini
flavorFlavor 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.
descriptionA 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
priceHow much the outfit will cost when the player goes to buy it.100
typeThis 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
sluttinessSluttiness👄 affects other’s reactions and mainly guides conversations. Stat wise, it can also impact affection, sexual reputation at work, etc.(1 through 10)
comfortComfort😌 affects your mood. Comfortable clothes can reduce negative mood stats. Uncomfortable clothes can make your mood worse.(1 through 10)
durabilityDurability 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)
styleStyle is mostly used in conversations when people are referring to your outfit.sexy
cute
tagsOptional. Tags can impact a lot of things. Stat buffs, sound effects, npc personality, descriptions, actions, etc.(See tag list below)
colorsOptional. This drives the cum on clothes image. If nothing is specified you’ll get an image of cum on black fabric.red
black
emphasizesOptional. This drives dialog triggers. For example, ‘Asscheeks’ might trigger the thought: ‘He’s staring at my butt’.cleavage
asscheeks
revealsOptional. 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 underThis determines if your character has additional layers to remove during sex scenes, as well as sets description values tied to lingerietrue
false
bra underThis 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 supportBreast 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)
locationsThis 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
shoesThe 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 NamePosition DescriptionExamples / Rules
nameName of the position. Must match the file name.amateur riding
flavorFlavor 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”
typeActive or Passive. Active means your character is doing most of the work. Passive means your partner is doing most of the work.active
passive
subtypeSubtype 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.
positionSometimes 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
athleticsIn 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)
roughnessRoughness 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 pleasureOne 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 factorPleasure 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 pleasureAffects 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 satisfactionAffects 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)
rhythmThis 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
tagsTags 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”]
skillThis 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 levelThis 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)
locationsPlaces 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!!!