<h1>Choose your Name</h1>\
This is the quintessential train for any IF project: the PC's name — assuming you are making it customisable.
There are different ways to let the player customise their name: provide them with a list of option or let them fill the name in a textbox. The following example includes a combination of both options.
//What is your name?//
<<textbox "$mc.name" "">>
<<button "Confirm">>
<<if $mc.name.toLowerCase().trim() == "manon">>
<<replace "#error">>Yeah, can't use that one, buddy!<</replace>>
<<else>>
<<if !$mc.name.trim()>>
<<set $mc.name = "No-Name">>
<</if>>
<<goto "Index-CC">>
<</if>>
<</button>>
Once you are set on a name (by typing in the texbox and pressing the confirm button), you will be sent back to the menu of traits.
/*
~ Notes:
There is no reason for me to add this as the main text, but my to-go option for setting names has always been just a simple text-box. Or just not include this at all (unnamed PC or preset PC).
The textbox allowing for more complex names (multiple first names or hyphenated names), messing with the formatting of names (toLowerCase() or toUpperFirst() or toUpperCase()) can have weird consequences...
*/<h1>Choose your Nickname</h1>\
This trait is not particularly common, though you could see it being used by the PC's relatives, friends, and/or ROs (or in a condescending manner by the PC's nemesis). If set, you may want to ensure it is included in the story in some fashion (specific scenes or at random).
/*
~ Notes:
You could even set up different nicknames for the player, dependent on the NPC saying it.
You can use a nickname at random with something like the following code:
<<if $NicknameVariable>> <-checks if defined
<<print either($NameVariable, $NicknameVariable)>>
<</if>>
It could even be in a widget for convenience.
*/
There are multiple ways to set a nickname, from a list of pre-determined options to a simple textbox. The example below will give the player the options whether to have an nickname.
//Do you go by a nickname?//
* <<linkappend "Yes, I do!">>:
> Nickname: <<textbox "$mc.nickname" "" autofocus>> <<button [[Confirm|Index-CC]]>><</button>>
<</linkappend>>
* [[No|Index-CC][$mc.nickname to "{/}"]]
Once you are set on a name (by following one of the listed options and), you will be sent back to the menu of traits.
/*
I'm only setting the nickname to a "fake thing" for the >No< option for the sake of the trait menu and the checking page.
You may want to ensure the variable is unset before the game starts if the player chose no nickname or left the textbox empty.
*/<h1>Choose your Surname</h1>\
Similar to given names, this trait can be an way to add extra customisation to the PC. Thought, for many IF projects, this would be completely irrelevant, as the PC's backstory tend to be pre-set, which will include a surname. Still, there are many scenarios where the PC may need a/another surname.
/*
~ Notes:
Examples of scenarios: going undercover (spy), giving someone a fake name to enter a place you shouldn't enter, starting a new life...
Another thing that could be tied to the name would be a background for the PC, and potentially special traits, bonuses, or other. See the [CC-Background] passage.
*/
The example below only includes pre-selected options for the player to choose.
//What is your surname?//
* [[Bartlett|Index-CC][$mc.surname to "Bartlett"]]
* [[Kerr|Index-CC][$mc.surname to "Kerr"]]
* [[Silva|Index-CC][$mc.surname to "Silva"]]
Surname: <<textbox "$mc.surname" "" autofocus>> <<button [[Confirm|Index-CC]]>><</button>>
Once you are set on a name (by clicking one of the listed options), you will be sent back to the menu of traits.
/*
Of course, you are not bound to a list of options. A textbox is also possible, letting the player choose for themselves (like with the name/nickname).
Or the available options could be formatted inside a listbox or with ratiobutton.
*/<h1>Set your Gender Identity</h1>\
Setting the gender fo the PC can be as simple as a ternary list of options (woman/man/nb person), or as complex as the separation of different aspects of the gender identity (identity vs noun/title to refer to someone). Below is an example of the latter:
/*
~ Notes:
Of course, these elements and the available options are not exhaustive, when defining one's gender or what is relevant for the PC's gender identity.
This template also separates gender identity and gender presentation (see options in the [CC-Build] passage).
*/
//What term do you use to describe your gender?//
* <label><<radiobutton "$mc.gender" "female" checked>> Female</label>
* <label><<radiobutton "$mc.gender" "male">> Male</label>
* <label><<radiobutton "$mc.gender" "nonbinary">> Nonbinary</label>
//Are you trans?//
* <label><<radiobutton "$mc.trans" "transgender">> Yes</label>
* <label><<radiobutton "$mc.trans" "cisgender">> No</label>
* <label><<radiobutton "$mc.trans" "NR" checked>> Not relevant/Don't want to disclose</label>
//People would typically refer to you as...//
* <label><<radiobutton "$mc.person" "woman" checked>> a woman.</label>
* <label><<radiobutton "$mc.person" "man">> a man.</label>
* <label><<radiobutton "$mc.person" "person">> a person.</label>
//Due to your title, people refer to you as...//
* <label><<radiobutton "$mc.title" "lady" checked>> Lady $mc.name.</label>
* <label><<radiobutton "$mc.title" "lord">> Lord $mc.name.</label>
* <label><<radiobutton "$mc.title" "liege">> Liege $mc.name.</label>
//What do you identify as?//
* <label><<radiobutton "$mc.sexu" "Heterosexual" checked>> Heterosexual</label>
* <label><<radiobutton "$mc.sexu" "Homosexual">> Homosexual</label>
* <label><<radiobutton "$mc.sexu" "Bisexual">> Bisexual</label>
* <label><<radiobutton "$mc.sexu" "Pansexual">> Pansexual</label>
* <label><<radiobutton "$mc.sexu" "Asexual">> Asexual</label>
<<button "Confirm">>
<<set $pages.gender to true>>
<<if $mc.trans is "NR">><<unset $mc.trans>><</if>>
<<if $mc.person is "custom" or $mc.gender is "custom" or $mc.title is "custom">>
<<run Dialog.create("Custom Answers").wikiPassage("GenderAddOn").open();>>
<<else>>
<<goto "Index-CC">>
<</if>>
<</button>>
/*
~ Notes:
The radio button macro restrict the player to choose from a limited pool of options. I have included an example on how to add manual customisation with a popup.
You could also choose to merge the first and second questions.
And, there are more gender and sexuality identities than the ones listed here. For the PC's sexuality, rather than choosing a term to define it, you could let the player pick which gender the PC is attracted to.
*/<h1>Choose your Pronouns Set</h1>\
Another important element to define is pronouns. Part of defining the PC's gender identity, having set pronouns will allow you to have NPCs refer to the PC in the third person. The most common sets are {{{she/her}}}, {{{he/him}}}, and {{{they/them}}}. The example below has expanded that list to a couple neopronoun sets, as well as adding a //Custom// option, for which the player can fill their preferences.
//What pronoun set are you most comfortable with?//
* <label><<radiobutton "$mc.pronouns" "She/Her" checked>>She/Her</label>
* <label><<radiobutton "$mc.pronouns" "He/Him">>He/Him</label>
* <label><<radiobutton "$mc.pronouns" "They/Them (singular)">>They/Them (singular)</label>
* <label><<radiobutton "$mc.pronouns" "They/Them (plural)">>They/Them (plural)</label>
* <label><<radiobutton "$mc.pronouns" "Ae/Aer">>Ae/Aer</label>
* <label><<radiobutton "$mc.pronouns" "E/Em">>E/Em</label>
* <label><<radiobutton "$mc.pronouns" "custom">>A different set...</label>
<<button "Confirm">>
<<set $pages.pronouns to true>>
<<if $mc.pronouns is "custom">>
<<set $proset.custom to true>>
<<run Dialog.create("Custom Pronouns").wikiPassage("PronounAddOn").open();>>
<<else>>
<<set $proset.custom to false>>
<<PronounsSet>>
<<goto "Index-CC">>
<</if>>
<</button>>
You can choose the //Custom// option if you would like to customise a specific pronoun, even if your main ones are already listed above.
/*
If the PC is *never* referred to by the 3rd person throughout the game (e.g. an NPC talking about the PC), this whole section would be completely useless, and as such unneeded.
If you //still// want to include it, there would be no need to set all the separate pronouns variables (they, them, their, theirs, themselves).
*/<<set _agerange to ["Early 20s", "Mid 20s", "Late 20s", "Early 30s", "Mid 30s", "Late 30s", "Early 40s", "Mid 40s", "Late 40s", "Early 50s", "Mid 50s", "Late 50s", "Technically dead..."]>>\
<h1>Indicate your Age</h1>\
This trait might be one of the most unlikely one to be used in IF projects, namely because the settings/story will often force a specific age/range for the PC ahead of the writing. However, for more open stories (or ones where age actually affect the story), age can be another defining aspect of a PC.
Below is an example that would give the player different ways to input their PC's age (if they wished to).
//What is your age?//
* <<linkappend "I can give a general bracket">>:
> Your age: <<listbox "_agelist">><<optionsfrom _agerange>><</listbox>> <<button [[Confirm|Index-CC]]>><<set $mc.age to _agelist>><</button>>
<</linkappend>>
* <<linkappend "I'll be specific">>:
> First Name: <<numberbox "_agenumber" 18 autofocus>> <<button [[Confirm|Index-CC]]>><<set $mc.age to _agenumber>><</button>>
<</linkappend>>
* [[I'd rather not share my age|Index-CC][$mc.age to "{/}"]]
/*
~ Notes:
While I've included different ways to choose an age, I DO NOT RECOMMEND THE CODE ABOVE! Mainly because it would become a headache down the line, with having too many ranges of ages (brackets and specific numbers) to account for in the variation.
Unless you transform the number into a range for conditional variation.
You'd be better off with using a list of options (listbox/radiobutton/links) or numbers (numberbox), for simplicity sake.
Side-note: you can't have a minimum/maximum number with this macro, but you can use the (<<numberpool>>) custom macro instead (downloadable on the SugarCube website).
DO NOT USE TEXTBOXES to enter a number age, or you'd end up with a string variable instead of a number - increasing the PC's age {<<set $age ++>>} will break the code.
Even better yet, don't include an age variable :P
Less headaches...
*/<<set _eyecolours = ["white", "grey", "golden", "green", "blue", "maroon", "brown", "black", "red", "pink", "purple", "lime", "seafoam", "cream"]>>
<h1>Choose your Eye Colour(s)</h1>\
Do your eyes have <<link "the same colour">><<set $heterochromia to false>><<redo>><</link>> or <<link "different colours">><<set $heterochromia to true>><<redo>><</link>>?
<<do>>\
<<if $heterochromia is false>>\
Eye Colours: <<cycle "$mc.eyes">>
<<optionsfrom _eyecolours>>
<</cycle>>
//Cycle through the options until you find the colour you want.//
<<button [[Confirm|Index-CC]]>><</button>>
<<elseif $heterochromia is true>>\
Left: <<cycle "_eyesleft">>
<<optionsfrom _eyecolours>>
<</cycle>>
Right: <<cycle "_eyesright">>
<<optionsfrom _eyecolours>>
<</cycle>>
//Cycle through the options until you find the colours you want.//
<<button [[Confirm|Index-CC]]>>
<<set $mc.eyes to _eyesleft + " and " + _eyesright>>
/*
If eye colours matters in the story (creates variation, not just to be in the PC's page), you will ether want to use:
- the [.includes("colour")] function
- a variable for each eye
to help to so..
*/
<</button>>
<</if>>\
<</do>><<HairOptions>><h1>Let's Talk Hair!</h1>\
Hair might be one of the most customisable characteristic there is in IF projects. Whether it is type/texture, density, length, colour, hairdo or accessories, the options are wide and varied.
And I may have gone a bit overboard with this one...
\
//Does hair grow on your head?//
<<nobr>>
<<button "Yes, I have hair.">><<addclass ".hair" "visible">><<set $hair to {}>><</button>>
|
<<button "No, I am bald.">><<removeclass ".hair" "visible">><<set $hair to "bald">><</button>>
<</nobr>>
<span class="hair">
//What is your natural hair texture?// <<listbox "$hair.texture">>
<<optionsfrom _hairtexture>>
<</listbox>>
//How long is your natural hair?// <<listbox "$hair.length">>
<<optionsfrom _hairlength>>
<</listbox>>
//What is your natural hair colour?// <<listbox "$hair.colour">>
<<optionsfrom _haircolour>>
<</listbox>>
Is your natural hair colour uniform? <<listbox "$hair.uniform">>
<<optionsfrom _hairuniform>>
<</listbox>>
//Do you have bangs?// <<listbox "$hair.bangs">>
<<optionsfrom _bangs>>
<</listbox>>
//Is your hair (or part of it) shaved?// <<listbox "$hair.shave">>
<<optionsfrom _shavedhair>>
<</listbox>>
//How is your hair styled?// <<listbox "$hair.do">>
<<optionsfrom _hairdo>>
<</listbox>>
</span>
\
<span id="cover"></span>
<<button [[Confirm|Index-CC]]>><<set $pages.hair to true>><</button>>
Please answer the question below as they appear on the screen. If you would like to reset this page, <<link [[Click Here|CC-Hair]]>><<set $hair to {}>><</link>>. Click the button when you are done.
/*
~ Notes:
Instead of <<add/removeclass>> and <<replace>>, you could use the <<do>>/<<redo>> macro. I just added this example so the template has a complete range of macro use, especially with the DOM macros.
When it comes to hairdos, it is possible to take into account the hair texture or the length of the hair. But you would need to structure the page differently and/or use special custom macro.
For the hair accessories, you could consider using a checkbox list instead (and have the accessories piling up on the PC's head). It is also possible to customise the accessories further (colour, texture, length, position...). But I've done enough here...
*/<h1>Options for Facial Features</h1>\
//What facial feature(s) is(are) applicable to you?//
* <label><<checkbox "_fullmoustache" false true>> a full moustache</label>
* <label><<checkbox "_thinmoustache" false true>> a thin moustache</label>
* <label><<checkbox "_goatee" false true>> a goatee</label>
* <label><<checkbox "_fullbeard" false true>> a full beard</label>
* <label><<checkbox "_sideburns" false true>> some sideburns</label>
* <label><<checkbox "_shadow" false true>> shadow</label>
* <label><<checkbox "_patch" false true>> soul patch</label>
* <label><<checkbox "_handlebar" false true>> a handle bar</label>
* <label><<checkbox "_wrinkes" false true>> wrinkles</label>
* <label><<checkbox "_mole" false true>> a mole</label>
* <label><<checkbox "_brow" false true>> a unibrow</label>
* <label><<checkbox "_thickbrow" false true>> thick brows</label>
* <label><<checkbox "_thinbrow" false true>> thin brows</label>
* <label><<checkbox "_noeyelash" false true>> no eye lashes</label>
* <label><<checkbox "_pointedear" false true>> pointed ears</label>
* <label><<checkbox "_smallears" false true>> small ears</label>
* <label><<checkbox "_largeears" false true>> large ears</label>
* <label><<checkbox "_buttonnose" false true>> a Button nose</label>
* <label><<checkbox "_romannose" false true>> a Roman nose</label>
* <label><<checkbox "_crooked" false true>> a Crooked nose</label>
* <label><<checkbox "_widenose" false true>> a Wide nose</label>
* <label><<checkbox "_hawknose" false true>> a Hawk nose</label>
* <label><<checkbox "_pointchin" false true>> a pointy chin</label>
* <label><<checkbox "_roundchin" false true>> a rounded chin</label>
* <label><<checkbox "_squarejaw" false true>> a square jaw</label>
* <label><<checkbox "_pronouncedcheeks" false true>> pronounced cheeks</label>
* <label><<checkbox "_bmrighteye" false true>> a beauty mark below the right eye</label>
* <label><<checkbox "_bmlefteye" false true>> a beauty mark below the left eye</label>
* <label><<checkbox "_bmcheek" false true>> a beauty mark on the cheek</label>
* <label><<checkbox "_bmlips" false true>> a beauty mark above the lips</label>
* <label><<checkbox "_freckles" false true>> freckles</label>
* <label><<checkbox "_facehair" false true>> fluff hair</label>
* <label><<checkbox "_fangs" false true>> fangs</label>
* <label><<checkbox "_toothgap" false true>> tooth gap</label>
* <label><<checkbox "_acne" false true>> acne</label>
<<button [[Confirm|Index-CC]]>><<AllThisInAnArray>><<set $pages.facefeat to true>><</button>>/*
Change skin options
*/
<h1>Choose your Skin Characteristics</h1>\
Your skin colour is <<SkinColourCycle>>, with a <<SkinSatMutCycle>> <<SkinToneCycle>> undertone.
//Does your skin have any notable features?//
* <label><<checkbox "_vitiligo" false true>> Viligo</label>
* <label><<checkbox "_freckles" false true>> Freckles</label>
* <label><<checkbox "_eczema" false true>> Eczema</label>
* <label><<checkbox "_beatymarks" false true>> Beauty Marks</label>
* <label><<checkbox "_albinism" false true>> Albinism</label>
<<button [[Confirm|Index-CC]]>>
<<set
$skin.color to _color,
$skin.satmut to _satmut,
$skin.undertone to _undertone,
$skin.features to []
>>
<<if _vitiligo>><<run $skin.features.push("Viligo")>><</if>>
<<if _freckles>><<run $skin.features.push("Freckles")>><</if>>
<<if _eczema>><<run $skin.features.push("Eczema")>><</if>>
<<if _beatymarks>><<run $skin.features.push("Beauty Marks")>><</if>>
<<if _albinism>><<run $skin.features.push("Albinism")>><</if>>
<</button>><<BodyBuild>>\
<h1>Set up the frame of the body</h1>\
Tall, short, wide, thin... there are many ways to define how a body is framed. Below are examples of setting the PC's height, type, and musculature.
//How tall are you?// <<listbox "$body.height">><<optionsfrom _height>><</listbox>>
//What id your body type?// <<listbox "$body.weight">><<optionsfrom _type>><</listbox>>
//How muscular are you?// <<listbox "$body.musc">><<optionsfrom _muscle>><</listbox>>
<<button [[Confirm|Index-CC]]>><</button>>
/*
Notes:
Additionally, you could include length of limbs (arms/legs), or size of the head in regards of the body, or going more into detail about additional elements (beer belly, size of chest, etc...).
Different kinds of builds don't just open the door for additional variation depending on the situation (needs to crouch to pass a low door, can't win a fight because no muscles...), you could even add bonuses on stats (+1 strength if muscular)!
*/<h1>Choose your Personality</h1>\
While this trait can be tracked through a series of choices throughout a section (adding/removing points), you could ask the player to set a personality ahead of the story, which could give extra advantage to the PC (i.e. the PC being more outgoing, making them more charismatic). This way of setting personality can be useful for a Cheat Mode.
//What term do you use to describe your personality?//
* <label><<radiobutton "$personality" "adventerous" checked>> Adventurous</label>
* <label><<radiobutton "$personality" "friendly">>Friendly</label>
* <label><<radiobutton "$personality" "good">>Good</label>
* <label><<radiobutton "$personality" "evil">>Evil</label>
<<button [[Confirm|Index-CC]]>>
<<set $pages.perso to true>>
<</button>>
/*
~ Notes:
Ok, so I kind of lied. The template has //some// custom code. Some JavaScript and jquery that affect an HTML slider. See the JavaScript passage.
Unless {:passagerender} or {State.setVar} change with new updates (VERY UNLIKELY), this shouldn't ever break.
*/<h1>Choose your Class</h1>\
This section will obviously be pretty specific, applying only to IF projects where the PC is involved in some sort of Combat mechanism or RPG system (with/out dice-check). This can be as general as a combat class (see below), or more specific, like a specialisation (e.g. Engineering or Navigator). If you want an example for a socio-economical type of class, see [[this page|CC-Background]].
The basic example below would work more for a Fantasy setting, but it can be made more complex by including further options (e.g. type of mage/rogue/warrior). The code includes setting variables for different attributes/skills.
//What class have you chosen for yourself?//
<div id="choose-class">\
<div>
<icon></icon>
<<link "Warrior">><<PopupWarrior>><</link>>
<<button [[Choose|CS2]]>>
<<WarriorStartingStats>>
<</button>>\
</div>\
<div>
<icon></icon>
<<link "Mage">><<PopupMage>><</link>>
<<button [[Choose|CS2]]>>
<<MageStartingStats>>
<</button>>\
</div>\
<div>
<icon></icon>
<<link "Rogue">><<PopupRogue>><</link>>
<<button [[Choose|CS2]]>>
<<RogueStartingStats>>
<</button>>\
</div>\
</div>\
You can click on the Class's moniker to learn more about it and see its attribute levels.
Click on the //Choose// button to select the wanted class and move to the next step.
/*
~ Notes:
Because //lazy//, this page only has a basic SG icon as "illustration" for each class. I would recommend, however, to include a more fitting icon/image instead for your own project.
While there are only three class in this example, you could expand it to as many as you want.
Please ensure you've tested this for mobile, if you add any element to the page. Since the options are in a flex box, they should appear one below the other if the screen width decreases. Adding [flex-wrap: wrap;] in the StyleSheet for the [#choose-class] element should do the trick.
*/<<PopupExtraPoints>><<LockedPoints>>\
<h1>Spend your Points</h1>\
Following the more RPG types of games, with level ups, you may want to award points to the players so they can improve their abilities. Here's one way of doing it below:
//To upgrade your skills, and make future adventures easier, increase the level of your abilities!//
<center><<do>>
strength : <<RemoveSTR>> $stat.strength <<AddSTR>>
dexterity : <<RemoveDEX>> $stat.dexterity <<AddDEX>>
willpower : <<RemoveWIL>> $stat.willpower <<AddWIL>>
magic : <<RemoveMAG>> $stat.magic <<AddMAG>>
cunning : <<RemoveCUN>> $stat.cunning <<AddCUN>>
constitution : <<RemoveCON>> $stat.constitution <<AddCON>>
points left: $availablepts
<</do>></center>
<<button [[Confirm|Index-CC]]>><</button>>
/*
~ Notes:
This used to be a lot more complex, but the <<do>>/<<redo>> macro combo of 2.37 simplified a lot of stuff, especially in the widgets.
If you wanted to go even deeper, you could have:
- the player click on the name of the ability to get more information about it (similar to what was done with the [CC-StatClass] or [CC-Background] passage)
- add a limit to the amount of points that could be added to a skill (like can't be more than 10 strength if the PC's overall level is below 10)
- unlock special sub-skills after a certain level, which can also be upgraded
- etc...
*/<h1>Choose a Background</h1>\
If the story doesn't give the PC a specific background/status, you could consider letting the player pick one. This could affect, in turn, the story as a whole (e.g. paths locked/background), characteristics of the PC (e.g. wealth), and/or NPCs could interact/perceive with the PC.
The example below takes a more general socio-economical class approach, but you could go into more details withing one class (e.g. different noble status, reputation of the family, etc..).
//What is your background?//
<div id="choose-class">\
<div>
<icon></icon>
<<link "Commoner">><<PopupCommoner>><</link>>
<<button [[Choose|Index-CC]]>>
<<CommonerStartingStats>>
<</button>>\
</div>\
<div>
<icon></icon>
<<link "Bourgeois">><<PopupBourgeois>><</link>>
<<button [[Choose|Index-CC]]>>
<<BourgeoisStartingStats>>
<</button>>\
</div>\
<div>
<icon></icon>
<<link "Noble">><<PopupNoble>><</link>>
<<button [[Choose|Index-CC]]>>
<<NobleStartingStats>>
<</button>>\
</div>\
</div>
You can click on the Class's moniker to learn more about it and see its attribute levels.
Click on the //Choose// button to select the wanted class.
/*
~ Notes:
Is this the same code as the [CC-StatClass] passage? Absolutely!
The same principle applies between the two: general glass/title + attributes/stats. Essentially, any non-physical/input trait that may require further explanation (e.g. class, backstory, status, general build) can be formatted this way.
If you want to go all fancy, you could consider adding graphics to make the page POP!
I didn't because I didn't feel like it, so there are some barely-related icons instead.
OOOORRRRR you can just make it a list of links. That works too :P
*/<h1>Choose the Gender of ROs</h1>\
In many IF projects, you will find some (or all) ROs without a set gender, allowing instead the player to choose either/both gender and/or pronouns for these NPCs. There are multiple paths to consider, from having a manual choice for the player or link it to the sexuality of the PC (more dating-sim-like).
The basic example below gives the player the option to set all genders at once, or separately for each RO.
> During this story you will meet:
> ~ Camille Renaud (She/He/They)
> ~ Frances/Frank Wallace (She/He/They)
> ~ Alexander/Alexandra/Alex Curtis (She/He/They)
//Do you want to set the gender of the ROs?//
* [[Set them all as female (She/Her)|Index-CC][$pages.rogen to true, $Camille to "Camille (She/Her)", $Fran to "Frances (She/Her)", $Alex to "Alexandra (She/Her)"]]
* [[Set them all as male (He/Him)|Index-CC][$pages.rogen to true, $Camille to "Camille (He/Him)", $Fran to "Frank (He/Him)", $Alex to "Alexander (He/Him)"]]
* [[Set them all as nonbinary (They/Them)|Index-CC][$pages.rogen to true, $Camille to "Camille (They/Them)", $Fran to "Frances (They/Them)", $Alex to "Alex (They/Them)"]]
* [[Randomise the gender|Index-CC][$pages.rogen to true, $Camille to "Camille (She/Her)", $Fran to "Frances (They/Them)", $Alex to "Alexander (He/Him)"]]
* <<linkappend "Set each RO separately">>
** <<CamilleCycle>> Renaud
** <<FranCycle>> Wallace
** <<AlexCycle>> Curtis
<<button [[Confirm|Index-CC]]>>
<<set $Camille to _camille, $Fran to _fran, $Alex to _alex, $pages.rogen to true>>
<</button>>
<</linkappend>>
* [[Set the gender of the ROs when introduced|Index-CC][$pages.rogen to true, $Camille to "N/C", $Fran to "N/C", $Alex to "N/C"]]
Please choose one of the options above. You will be sent back to the main menu.
/*
~ Notes:
There are, of course, many more pronouns than the one listed here, without mentioning custom ones. But for simplicity's sake with template, I just showcased the interactivity.
Not all ROs should be gender selectable. Not all gender-selectable ROs should have the same options (gender/pronoun). I've just used the same options here out of laziness.
Also the randomisation here is not a true one. I've picked the genders at random before coding them. You can use the function [either()] to have proper randomisation.
I did not set the actual pronouns of the ROs (because there's no story here), but it would work the same way as the [<<PronounsSet>>] widget
*/<<set _animal to ["--", "a turtle", "a dog", "a cat", "a bird", "a rodent", "a snake", "a tiger", "a dragon", "a robot", "a horse", "a spider", "a moon", "a cow", "a pig"]>>\
<h1>Choosing a Pet</h1>\
//What pet do you have?// <<listbox "_pet">>
<<optionsfrom _animal>>
<</listbox>>
<<button [[Confirm|Index-CC]]>>
<<if _pet isnot "--">>
<<set $mc.pet to _pet>>
<<else>>
<<unset $mc.pet>>
<</if>>
<</button>>
Choose the option wanted from the list, and click the button to return to the menu.
/*
~ Notes:
With the options, here, I've mixed multiple genres, just for fun. Those should, of course, be edited to fit your project.
Further customisation for a pet could include: its name, race/specie (animal dependent), colour(s) of its fur/scales/coat/etc, specific traits...
For a menagerie of pets: checkboxes.
*/Your name is currently $mc.name.
If you want to change your name, please indicate it in the textbox below:
<<textbox "_name" `$mc.name` autofocus>>
<<button "Confirm">>
<<if _name>>
<<set $mc.name to _name>>
<<replace "#mc-name">>$mc.name<</replace>>
<</if>>
<<run Dialog.close()>>
<</button>>
/*
Instead of [<<replace>>], you could use the <<do>>/<<redo>> macro combo (with <<do>> wrapping at least the table).
*/<<if $mc.nickname>>Your nickname is currently $mc.nickname.
If you want to change your name, please indicate it in the textbox below:
<<else>>You currently do not have a nickname.
If you want to indicate one, please fill the textbox below:
<</if>>
\
<<textbox "_nickname" `$mc.nickname` autofocus>>
<<button "Confirm">>
<<if _nickname>>
<<set $mc.nickname to _nickname>>
<<replace "#mc-nick">>$mc.nickname<</replace>>
<</if>>
<<run Dialog.close()>>
<</button>>Your surname is currently $mc.surname.
If you want to change it, please select one of the options below:
<<textbox "_surname" `$mc.surname` autofocus>>
<<button "Confirm">>
<<if _surname>>
<<set $mc.surname to _surname>>
<<replace "#mc-surb">>$mc.surname<</replace>>
<</if>>
<<run Dialog.close()>>
<</button>>
<<IfGenderIsCustom>>\
You currently describe yourself as a <<if $mc.trans>>$mc.trans <</if>>$mc.gender, referred by others as a(n) $mc.person, and a(n) $mc.title
If you want to change any trait, please select one of the options below:
//What term do you use to describe your gender?//
* <label><<radiobutton "_gender" "female" autocheck>> Female</label>
* <label><<radiobutton "_gender" "male" autocheck>> Male</label>
* <label><<radiobutton "_gender" "nonbinary" autocheck>> Nonbinary</label>
//Are you trans?//
* <label><<radiobutton "_trans" "transgender" autocheck>> Yes</label>
* <label><<radiobutton "_trans" "cisgender" autocheck>> No</label>
* <label><<radiobutton "_trans" "NR" autocheck>> Not relevant/Don't want to disclose</label>
//People would typically refer to you as...//
* <label><<radiobutton "_person" "woman" autocheck>> a woman.</label>
* <label><<radiobutton "_person" "man" autocheck>> a man.</label>
* <label><<radiobutton "_person" "person" autocheck>> a person.</label>
//Due to your title, people refer to you as...//
* <label><<radiobutton "_title" "lady" autocheck>> Lady $mc.name.</label>
* <label><<radiobutton "_title" "lord" autocheck>> Lord $mc.name.</label>
* <label><<radiobutton "_title" "liege" autocheck>> Liege $mc.name.</label>
//What do you identify as?//
* <label><<radiobutton "$mc.sexu" "Heterosexual" checked>> Heterosexual</label>
* <label><<radiobutton "$mc.sexu" "Homosexual" checked>> Homosexual</label>
* <label><<radiobutton "$mc.sexu" "Bisexual" checked>> Bisexual</label>
* <label><<radiobutton "$mc.sexu" "Pansexual" checked>> Pansexual</label>
* <label><<radiobutton "$mc.sexu" "Asexual" checked>> Asexual</label>
<<button "Confirm">>
<<if _trans is "NR">>
<<unset $mc.trans>>
<</if>>
<<if _gender isnot "custom">>
<<set $mc.gender to _gender>>
<</if>>
<<if _person isnot "custom">>
<<set $mc.gender to _person>>
<</if>>
<<if _title isnot "custom">>
<<set $mc.gender to _title>>
<</if>>
<<if _person is "custom" or _gender is "custom" or _title is "custom">>
<<run Dialog.create("Custom Answers").wikiPassage("Popup-GenderAddOn").open();>>
<<else>>
<<unset _person, _gender, _title>>
<<replace "#mc-surb">>Gender: <<if $mc.trans>>$mc.trans <</if>>$mc.gender
Referred as a: $mc.person
Title: $mc.title <</replace>>
<<run Dialog.close()>>
<</if>>
<</button>>Please fill all available textboxes below.
<<if _gender is "custom">>//What term do you use to describe your gender?//
<<textbox _genderbox `$mc.gender`>>
<</if>>
<<if _person is "custom">>//People would typically refer to you as a/an...//
<<textbox _personbox `$mc.person`>>
<</if>>
<<if _title is "custom">>//Due to your title, people refer to you as a/an...//
<<textbox _titlebox `$mc.title`>>
<</if>>
<<button "Confirm">>
<<if _gender is "custom" && _genderbox is "">>
<<set $mc.gender to "nonbinary">>
<<elseif _gender is "custom">>
<<set _genderbox to $mc.gender.toLowerCase()>>
<</if>>
<<if _person is "custom" && _personbox is "">>
<<set $mc.person to "person">>
<<elseif _person is "custom">>
<<set _personbox to $mc.person.toLowerCase()>>
<</if>>
<<if _title is "custom" && _titlebox is "">>
<<set $mc.title to "liege">>
<<elseif _title is "custom">>
<<set _titlebox to $mc.title.toLowerCase()>>
<</if>>
<<unset _gender, _genderbox, _person, _personbox, _title, _titlebox>>
<<replace "#mc-surb">>Gender: <<if $mc.trans>>$mc.trans <</if>>$mc.gender
Referred as a: $mc.person
Title: $mc.title <</replace>>
<<run Dialog.close()>>
<</button>>
/*
Notes:
<<unset>> the temporary variables is normally not needed, I'm only using it here because I'm forcing the player to stay on the same page and want to avoid value issues.
For this popup, I have not include any warning messages to force the player to fill all available textboxes.
Mainly because I am pretty lazy, and there's already an example of this with the [CC-Name] passage.
So if left empty, this popup will default to gender neutral for all the listed elements.
*/Please fill all available textboxes below.
<<if $mc.gender is "custom">>//What term do you use to describe your gender?//
<<textbox _gender "">>
<</if>>
<<if $mc.person is "custom">>//People would typically refer to you as a/an...//
<<textbox _person "">>
<</if>>
<<if $mc.title is "custom">>//Due to your title, people refer to you as a/an...//
<<textbox _title "">>
<</if>>
<<button [[Confirm|Index-CC]]>>
/* Gender Textbox check */
<<if $mc.gender is "custom" && _gender is "">>
<<set $mc.gender to "nonbinary">>
<<elseif $mc.gender is "custom">>
<<set _gender to $mc.gender.toLowerCase()>>
<</if>>
/* Person Textbox check */
<<if $mc.person is "custom" && _person is "">>
<<set $mc.person to "person">>
<<elseif $mc.person is "custom">>
<<set _person to $mc.person.toLowerCase()>>
<</if>>
/* Title Textbox check */
<<if $mc.title is "custom" && _title is "">>
<<set $mc.title to "liege">>
<<elseif $mc.title is "custom">>
<<set _title to $mc.title.toLowerCase()>>
<</if>>
<<run Dialog.close()>>
<</button>>
/*
For this popup, I have not include any warning messages to force the player to fill all available textboxes.
Mainly because I am pretty lazy, and there's already an example of this with the [CC-Name] passage.
So if left empty, this popup will default to gender neutral for all the listed elements.
*/<<IfPronounsIsCustom>>\
Your current set of pronouns is $mc.pronouns. If you want to change your pronouns, please pick one of the options below:
//What pronoun set are you most comfortable with?//
* <label><<radiobutton "_pronouns" "She/Her">>She/Her</label>
* <label><<radiobutton "_pronouns" "He/Him">>He/Him</label>
* <label><<radiobutton "_pronouns" "They/Them (singular)">>They/Them (singular)</label>
* <label><<radiobutton "_pronouns" "They/Them (plural)">>They/Them (plural)</label>
* <label><<radiobutton "_pronouns" "Ae/Aer">>Ae/Aer</label>
* <label><<radiobutton "_pronouns" "E/Em">>E/Em</label>
* <label><<radiobutton "_pronouns" "custom">>A different set...</label>
<<button "Confirm">>
<<set $pages.pronouns to true>>
<<if $mc.pronouns is "custom">>
<<set $proset.custom to true>>
<<run Dialog.create("Custom Pronouns").wikiPassage("PronounAddOn").open();>>
<<else>>
<<set $proset.custom to false>>
<<PronounsCustomSet>>
<<replace "#mc-pro">>$mc.pronouns<</replace>>
<</if>>
<<run Dialog.close()>>
<</button>>
You can choose the //Custom// option if you would like to customise a specific pronoun, even if your main ones are already listed above.Please fill all the textboxes below if your preferred pronouns.
<center>
''Subject:'' //I wished to know what ''they'' wanted.//
<<textbox "$they" "they">>
'Object:'' //You have to stop bothering ''them'' during meals.//
<<textbox"$them" "them">>
''Possessive Adjective:'' //Could you get ''their'' coat?//
<<textbox "$their" "their">>
''Possessive:'' //Don't take this book, it's ''theirs''.//
<<textbox "$theirs" "theirs">>
''Reflexive:'' //They want to keep it for ''themself''.//
<<textbox "$themself" "themself">>
</center>
\
//What verb tense do your pronouns use?//
* <label><<radiobutton "$proset.plural" "true">> Plural (they ''are'')</label>
* <label><<radiobutton "$proset.plural" "false">> Singular (<<print either("she","he","ae","e")>> ''is'')</label>
<center><<button "Confirm">>
<<set
$proset.they to $they.toLowerCase(),
$proset.them to $them.toLowerCase(),
$proset.their to $their.toLowerCase(),
$proset.theirs to $theirs.toLowerCase(),
$proset.themselves to $themself.toLowerCase(),
$mc.pronouns to $they.toLowerCase() + "/" + $them.toLowerCase()
>>
<<unset $they, $them, $their, $theirs, $themself>>
<<run Dialog.close()>>
<<goto "Index-CC">>
<</button>></center>
/*
~ Notes:
I've ensured the pronouns as all in lowercases by default. For Capitalised or Uppercase version, you can create either a widget or set a new variable for each pronoun.
You should make sure you are using all pronouns defined (they, them, their, theirs, themselves). If you are not, you might as well not define the ones left unused.
*/<<if $proset.plural is true>><<set _plural to true>><<else>><<set _plural to false>><</if>>\
Please fill all the textboxes below if your preferred pronouns.
<center>
''Subject:'' //I wished to know what ''they'' wanted.//
<<textbox "_they" `$proset.they`>>
'Object:'' //You have to stop bothering ''them'' during meals.//
<<textbox"_them" `$proset.them`>>
''Possessive Adjective:'' //Could you get ''their'' coat?//
<<textbox "_their" `$proset.their`>>
''Possessive:'' //Don't take this book, it's ''theirs''.//
<<textbox "_theirs" `$proset.theirs`>>
''Reflexive:'' //They want to keep it for ''themself''.//
<<textbox "_themself" `$proset.themselves`>>
</center>
\
//What verb tense do your pronouns use?//
* <label><<radiobutton "_plural" true autocheck>> Plural (they ''are'')</label>
* <label><<radiobutton "_plural" false autocheck>> Singular (<<print either("she","he","ae","e")>> ''is'')</label>
<center><<button "Confirm">>
<<set
$proset.they to _they.toLowerCase(),
$proset.them to _them.toLowerCase(),
$proset.their to _their.toLowerCase(),
$proset.theirs to _theirs.toLowerCase(),
$proset.themselves to _themself.toLowerCase(),
$mc.pronouns to _they.toLowerCase() + "/" + _them.toLowerCase(),
$proset.plural to _plural
>>
<<replace "#mc-pro">>$mc.pronouns<</replace>>
<<run Dialog.close()>>
<</button>></center>
/*
~ Notes:
I've ensured the pronouns as all in lowercases by default. For Capitalised or Uppercase version, you can create either a widget or set a new variable for each pronoun.
You should make sure you are using all pronouns defined (they, them, their, theirs, themselves). If you are not, you might as well not define the ones left unused.
*/<<set _agerange to ["Early 20s", "Mid 20s", "Late 20s", "Early 30s", "Mid 30s", "Late 30s", "Early 40s", "Mid 40s", "Late 40s", "Early 50s", "Mid 50s", "Late 50s", "Technically dead..."]>>\
Your current age is $mc.age.
If you want to change it, please choose one of the options below:
//What is your age?//
* <<linkappend "I can give a general bracket">>:
> Your age: <<listbox "_agelist">><<optionsfrom _agerange>><</listbox>> <<button "Confirm">>
<<set $mc.age to _agelist>>
<<replace "#mc-age">>$mc.age<</replace>>
<<run Dialog.close()>>
<</button>>
<</linkappend>>
* <<linkappend "I'll be specific">>:
> First Name: <<numberbox "_agenumber" 18 autofocus>> <<button "Confirm">>
<<set $mc.age to _agenumber>>
<<replace "#mc-age">>$mc.age<</replace>>
<<run Dialog.close()>>
<</button>>
<</linkappend>>
* <<link "I'd rather not share my age">>
<<set $mc.age to "{/}">>
<<replace "#mc-age">>$mc.age<</replace>>
<<run Dialog.close()>>
<</link>>
/*
Yup, I just reused the same code as the main trait setter :P
The same comments from the other passage apply here as well!
*/<<set _eyecolours = ["white","grey","golden","green","blue","maroon","brown","black","red","pink","purple","lime","seafoam","cream"]>>
Your eyes are currently $mc.eyes.
If you would like to change their colours, please click on the links below:
Do your eyes have <<link "the same colour">><<set _heterochromia to false>><<redo "eyesc">><</link>> or <<link "different colours">><<set _heterochromia to true>><<redo "eyesc">><</link>>?
<<do tag "eyesc">>\
<<if _heterochromia is false>>\
Eye Colours: <<cycle "$mc.eyes">>
<<optionsfrom _eyecolours>>
<</cycle>>
//Cycle through the options until you find the colour you want.//
<<button "Confirm">>
<<replace "#mc-eyes">>$mc.eyes<</replace>>
<<run Dialog.close()>>
<</button>>
<<elseif _heterochromia is true>>\
Left: <<cycle "_eyesleft">>
<<optionsfrom _eyecolours>>
<</cycle>>
Right: <<cycle "_eyesright">>
<<optionsfrom _eyecolours>>
<</cycle>>
//Cycle through the options until you find the colours you want.//
<<button "Confirm">>
<<set $mc.eyes to _eyesleft + " and " + _eyesright>>
<<replace "#mc-eyes">>$mc.eyes<</replace>>
<<run Dialog.close()>>
<</button>>
<</if>>\
<</do>>
/*
This is the same code as with the [CC-Eyes] passage, except with the [<<replace>>] macro.
*/<<HairOptions>><<if $hair is "bald">>You are $hair.<<else>>You have $hair.length $hair.texture $hair.colour hair <<if $hair.uniform isnot "Yes">>($hair.uniform)<</if>>.
<<if $hair.bangs isnot "No">>You have $hair.bangs. <</if>><<if $hair.shave isnot "No">>Your hair is shaved $hair.shave. <</if>> Your hair is styled in a $hair.do way.<</if>>
If you want to edit this trait, please interact with the elements below!
//Does hair grow on your head?//
<<nobr>>
<<button "Yes, I have hair.">><<addclass ".hair" "visible">><<set _hair to true>><</button>>
|
<<button "No, I am bald.">><<removeclass ".hair" "visible">><<set _hair to false>><</button>>
<</nobr>>
<span class="hair">
//What is your natural hair texture?// <<listbox "_texture">>
<<optionsfrom _hairtexture>>
<</listbox>>
//How long is your natural hair?// <<listbox "_length">>
<<optionsfrom _hairlength>>
<</listbox>>
//What is your natural hair colour?// <<listbox "_colour">>
<<optionsfrom _haircolour>>
<</listbox>>
Is your natural hair colour uniform? <<listbox "_uniform">>
<<optionsfrom _hairuniform>>
<</listbox>>
//Do you have bangs?// <<listbox "_bangs">>
<<optionsfrom _bangs>>
<</listbox>>
//Is your hair (or part of it) shaved?// <<listbox "_shave">>
<<optionsfrom _shavedhair>>
<</listbox>>
//How is your hair styled?// <<listbox "_do">>
<<optionsfrom _hairdo>>
<</listbox>>
</span>
<<button "Confirm">>
<<if _hair is false>>
<<set $hair to "bald">>
<<else>>
<<set $hair to {},
$hair.texture to _texture,
$hair.length to _length,
$hair.colour to _colour,
$hair.uniform to _uniform,
$hair.bangs to _bangs,
$hair.shave to _shave,
$hair.do to _do
>>
<</if>>
<<replace "#mc-hairnat">><<if $hair is "bald">>You are $hair.<<else>>You have $hair.length $hair.texture $hair.colour hair <<if $hair.uniform isnot "Yes">>($hair.uniform)<</if>>.
<<if $hair.bangs isnot "No">>You have $hair.bangs. <</if>><<if $hair.shave isnot "No">>Your hair is shaved $hair.shave. <</if>> Your hair is styled in a $hair.do way.<</if>><</replace>>
<<run Dialog.close()>>
<</button>><<FacialFeaturesPicked>>\
You currently have the following features: $facefeatures.
If you want to edit this trait, please check or uncheck the relevant options below:
//What facial features are applicable to you?//
* <label><<checkbox "_fullmoustache" false true autocheck>> a full moustache</label>
* <label><<checkbox "_thinmoustache" false true autocheck>> a thin moustache</label>
* <label><<checkbox "_goatee" false true autocheck>> a goatee</label>
* <label><<checkbox "_fullbeard" false true autocheck>> a full beard</label>
* <label><<checkbox "_sideburns" false true autocheck>> some sideburns</label>
* <label><<checkbox "_shadow" false true autocheck>> shadow</label>
* <label><<checkbox "_patch" false true autocheck>> soul patch</label>
* <label><<checkbox "_handlebar" false true autocheck>> a handle bar</label>
* <label><<checkbox "_wrinkes" false true autocheck>> wrinkles</label>
* <label><<checkbox "_mole" false true autocheck>> a mole</label>
* <label><<checkbox "_brow" false true autocheck>> a unibrow</label>
* <label><<checkbox "_thickbrow" false true autocheck>> thick brows</label>
* <label><<checkbox "_thinbrow" false true autocheck>> thin brows</label>
* <label><<checkbox "_noeyelash" false true autocheck>> no eye lashes</label>
* <label><<checkbox "_pointedear" false true autocheck>> pointed ears</label>
* <label><<checkbox "_smallears" false true autocheck>> small ears</label>
* <label><<checkbox "_largeears" false true autocheck>> large ears</label>
* <label><<checkbox "_buttonnose" false true autocheck>> a Button nose</label>
* <label><<checkbox "_romannose" false true autocheck>> a Roman nose</label>
* <label><<checkbox "_crooked" false true autocheck>> a Crooked nose</label>
* <label><<checkbox "_widenose" false true autocheck>> a Wide nose</label>
* <label><<checkbox "_hawknose" false true autocheck>> a Hawk nose</label>
* <label><<checkbox "_pointchin" false true autocheck>> a pointy chin</label>
* <label><<checkbox "_roundchin" false true autocheck>> a rounded chin</label>
* <label><<checkbox "_squarejaw" false true autocheck>> a square jaw</label>
* <label><<checkbox "_pronouncedcheeks" false true autocheck>> pronounced cheeks</label>
* <label><<checkbox "_bmrighteye" false true autocheck>> a beauty mark below the right eye</label>
* <label><<checkbox "_bmlefteye" false true autocheck>> a beauty mark below the left eye</label>
* <label><<checkbox "_bmcheek" false true autocheck>> a beauty mark on the cheek</label>
* <label><<checkbox "_bmlips" false true autocheck>> a beauty mark above the lips</label>
* <label><<checkbox "_freckles" false true autocheck>> freckles</label>
* <label><<checkbox "_facehair" false true autocheck>> fluff hair</label>
* <label><<checkbox "_fangs" false true autocheck>> fangs</label>
* <label><<checkbox "_toothgap" false true autocheck>> tooth gap</label>
* <label><<checkbox "_acne" false true autocheck>> acne</label>
<<button "Confirm">>
<<set $facefeatures to []>>
<<AllThisInAnArray>>
<<replace "#mc-ffeat">>$facefeatures<</replace>>
<<run Dialog.close()>>
<</button>><<PopupSkinChecker>>Your skin is currently $skin.satmut $skin.undertone $skin.color, with $skin.features.
To change this trait, interact with the elements below:
Your skin colour is <<SkinColourCycle>>, with a <<SkinSatMutCycle>> <<SkinToneCycle>> undertone.
//Does your skin have any notable features?//
* <label><<checkbox "_vitiligo" false true autocheck>> Viligo</label>
* <label><<checkbox "_freckles" false true autocheck>> Freckles</label>
* <label><<checkbox "_eczema" false true autocheck>> Eczema</label>
* <label><<checkbox "_beatymarks" false true autocheck>> Beauty Marks</label>
* <label><<checkbox "_albinism" false true autocheck>> Albinism</label>
<<button "Confirm">>
<<set
$skin.color to _color,
$skin.satmut to _satmut,
$skin.undertone to _undertone,
$skin.features to []
>>
<<if _vitiligo>><<run $skin.features.push("Viligo")>><</if>>
<<if _freckles>><<run $skin.features.push("Freckles")>><</if>>
<<if _eczema>><<run $skin.features.push("Eczema")>><</if>>
<<if _beatymarks>><<run $skin.features.push("Beauty Marks")>><</if>>
<<if _albinism>><<run $skin.features.push("Albinism")>><</if>>
<<replace "#mc-skin">>$skin.satmut $skin.undertone $skin.color
$skin.features<</replace>>
<<run Dialog.close()>>
<</button>>
/*
You could make the checkbox autochecked here, as well as have the cycles start at the first chosen value if wanted.
*/<<PopupBodyBuild>>\
You are currently $body.height, with a $body.weight a $body.musc body.
To change this trait, please interact with the elements below. If you'd like to keep some traits as is, keep the listbox on the //--// option.
//How tall are you?// <<listbox "_heightbox">><<optionsfrom _height>><</listbox>>
//What id your body type?// <<listbox "_weightbox">><<optionsfrom _type>><</listbox>>
//How muscular are you?// <<listbox "_muscbox">><<optionsfrom _muscle>><</listbox>>
<<button "Confirm">>
<<if _heightbox isnot "--">>
<<set $body.height to _heightbox>>
<</if>>
<<if _weightbox isnot "--">>
<<set $body.weight to _weightbox>>
<</if>>
<<if _muscbox isnot "--">>
<<set $body.musc to _muscbox>>
<</if>>
<<replace "#mc-build">>Height: $body.height
Type: $body.weight
Musculature: $body.musc<</replace>>
<<run Dialog.close()>>
<</button>>You are currently $personality
If you want to edit this trait, please interact options below:
<center>\
//What term do you use to describe your personality?//
* <label><<radiobutton "$personality" "adventerous" >> Adventurous</label>
* <label><<radiobutton "$personality" "friendly">>Friendly</label>
* <label><<radiobutton "$personality" "good">>Good</label>
* <label><<radiobutton "$personality" "evil">>Evil</label>
</center>
<<button "Confirm">>
<<set $personality to _personality>>
<<replace "#mc-perso">> $personality<</replace>>
<<run Dialog.close()>>
<</button>>You are currently a $class.
If you would like to edit this trait, choose one of the options below:
<<button "Warrior">>
<<WarriorStartingStats>>
<<replace "#mc-class">>$class<</replace>>
<<run Dialog.close()>>
<</button>> | \
<<button "Mage">>
<<MageStartingStats>>
<<replace "#mc-class">>$class<</replace>>
<<run Dialog.close()>>
<</button>> | \
<<button "Rogue">>
<<RogueStartingStats>>
<<replace "#mc-class">>$class<</replace>>
<<run Dialog.close()>>
<</button>>
/*
~ Notes:
Unlike the main passage, this one will not offer additional points. Mainly because I didn't feel like doing it again...
Though, it is important to stay as consistent as possible between the main passage setters and the check changes!
Also... not exlanation about the traits, because you can't stack popups. Though you could create an explanation popup with a button re-opening this one again...
*/<<if _explanation is "warrior">>\
Warriors find themselves on the front line, dealing damage in close combat. Their high levels in streght and dexterity help ward off enemies. Their high constitution also makes them good tanks.
//Stats://
* strength : 5
* dexterity : 4
* willpower : 0
* magic : 1
* cunning : 1
* constitution : 3
<<elseif _explanation is "mage">>\
Mages get their abilities through high levels of magic and strong willpower. They have the widest range of specialisation, from healing to range damange or close combat. Their low constitution, however, make them weak to attacks.
//Stats://
* strength : 1
* dexterity : 1
* willpower : 4
* magic : 6
* cunning : 2
* constitution : 0
<<elseif _explanation is "rogue">>\
Rogues use subterfuge and agility to handle their enemies. Working best in the dark, they have high levels of cunning and dexterity, making them incredibly deadly. Their low constitution, however, make them weak to attacks.
//Stats://
* strength : 1
* dexterity : 5
* willpower : 2
* magic : 1
* cunning : 5
* constitution : 0
<<else>>\
The Gods are looking positively on you.
They are awarding you:
<center>10 extra SP!</center>
<</if>>
/*
~ Notes:
Was lazy, so I merged the class popups together, instead of creating a passage for each.
There is no good or bad ways of doing this, honestly.
The descriptions are highly generic. I def pulled them out of my ass.
*/You are currently a $background.
If you would like to edit this trait, choose one of the options below:
<<button "Commoner">>
<<CommonerStartingStats>>
<<replace "#mc-backg">>$background<</replace>>
<<run Dialog.close()>>
<</button>> | \
<<button "Bourgeois">>
<<BourgeoisStartingStats>>
<<replace "#mc-backg">>$background<</replace>>
<<run Dialog.close()>>
<</button>> | \
<<button "Noble">>
<<NobleStartingStats>>
<<replace "#mc-backg">>$background<</replace>>
<<run Dialog.close()>>
<</button>>
/*
Like with changing the class, this popup does not offer additional information about each class.
I do recomend however a line or two, especially if the trait is important for the story!
*/<<if _explanation is "commoner">>\
The commoner has a hard life with little funds to sustain their wellbeing. Though they have some support from other commoners, and are potentially able to sway some weak merchants, no member of the court will ever receive them.
* wealth : 0
* favours at court : 0
* favours with commoners : 40
* favours with merchants : 15
* difficulty : "hard"
<<elseif _explanation is "bourgeois">>\
The bourgeois will be able to navigate the world with few worries... if they manage their wealth smartly. They are sometimes received at court and find much influence with the merchant class. However, the commoners will not look favourably towards them.
* wealth : 45
* favours at court : 25
* favours with commoners : 10
* favours with merchants : 50
* difficulty : "medium"
<<elseif _explanation is "noble">>\
The noble will never have a day of struggle in their life, unless they arouse the wrath of the KING. They will usually be able to easily trade favours with other nobles, sway merchants to their cause, and find limited support with the commoners thanks to charities.
* wealth : 100
* favours at court : 60
* favours with commoners : 20
* favours with merchants : 40
* difficulty : "easy"
<</if>>The ROs are currently: $Camille, $Fran, and $Alex.
If you would like to change their genders, please interact with the elements below:
//Do you want to set the gender of the ROs?//
* <<link "Set them all as female (She/Her)">>
<<set $Camille to "Camille (She/Her)", $Fran to "Frances (She/Her)", $Alex to "Alexandra (She/Her)">>
<<replace "mc-rogen">>$Camille
$Fran
$Alex<</replace>>
<<run Dialog.close()>>
<</link>>
* <<link "Set them all as male (He/Him)">>
<<set $Camille to "Camille (He/Him)", $Fran to "Frank (He/Him)", $Alex to "Alexander (He/Him)">>
<<replace "mc-rogen">>$Camille
$Fran
$Alex<</replace>>
<<run Dialog.close()>>
<</link>>
* <<link "Set them all as nonbinary (They/Them)">>
<<set $Camille to "Camille (They/Them)", $Fran to "Frances (They/Them)", $Alex to "Alex (They/Them)">>
<<replace "mc-rogen">>$Camille
$Fran
$Alex<</replace>>
<<run Dialog.close()>>
<</link>>
* <<link "Randomise the gender">>
<<set $Camille to "Camille (She/Her)", $Fran to "Frances (They/Them)", $Alex to "Alexander (He/Him)">>
<<replace "mc-rogen">>$Camille
$Fran
$Alex<</replace>>
<<run Dialog.close()>>
<</link>>
* <<linkappend "Set each RO separately">>
** <<CamilleCycle>> Renaud
** <<FranCycle>> Wallace
** <<AlexCycle>> Curtis
<<button "Confirm">>
<<set $Camille to _camille, $Fran to _fran, $Alex to _alex>>
<<replace "mc-rogen">>$Camille
$Fran
$Alex<</replace>>
<<run Dialog.close()>>
<</button>>
<</linkappend>>
* <<link "Set the gender when each RO is introduced">>
<<set $Camille to "N/C", $Fran to "N/C", $Alex to "N/C">>
<<replace "mc-rogen">>$Camille
$Fran
$Alex<</replace>>
<<run Dialog.close()>>
<</link>><<set _animal to ["--", "a turtle", "a dog", "a cat", "a bird", "a rodent", "a snake", "a tiger", "a dragon", "a robot", "a horse", "a spider", "a moon", "a cow", "a pig"]>>\
You current pet is $mc.pet.s
If you would like to change this trait, please use the interactive element below:
//What pet do you have?// <<listbox "_pet">>
<<optionsfrom _animal>>
<</listbox>>
<<button "Confirm">>
<<if _pet isnot "--">>
<<set $mc.pet to _pet>>
<<else>>
<<unset $mc.pet>>
<</if>>
<<replace "mc-pet">>$mc.pet<</replace>>
<</button>><h1>List of Traits</h1>\
<center><<button [[Use the Randomiser|CC-Check]]>><<Randomiser>><</button>> | <<button [[Use the Pre-Set|CC-Check]]>><<PreSet>><</button>></center>
<h2>Basic Info</h2>\
<div class="index-flex">\
<div id="name">\
FIRST NAME
<<button [[Choose|"CC-Name"]]>><</button>>\
</div>
<div id="nickname">\
NICKNAME
<<button [[Choose|CC-Nickname]]>><</button>>\
</div>\
<div id="surname">\
SURNAME
<<button [[Choose|CC-Surname]]>><</button>>\
</div>\
<div id="gender">\
GENDER AND SEX
<<button [[Choose|CC-Gender]]>><</button>>\
</div>\
<div id="pronouns">\
PRONOUNS
<<button [[Choose|CC-Pronouns]]>><</button>>\
</div>\
<div id="age">\
AGE
<<button [[Choose|CC-Age]]>><</button>>\
</div>\
</div>\
<h2>Physical Traits</h2>\
<h3>Face and Hair</h3>\
<div class="index-flex">\
<div id="eyes">\
EYES
<<button [[Choose|CC-Eyes]]>><</button>>\
</div>\
<div id="hair">\
HAIR
<<button [[Choose|CC-Hair]]>><</button>>\
</div>\
<div id="ffeat">\
FACIAL FEATURES
<<button [[Choose|CC-FacialFeatures]]>><</button>>\
</div>\
</div>\
<h3>Body</h3>
<div class="index-flex">
<div id="skin">\
SKIN
<<button [[Choose|CC-Skin]]>><</button>>\
</div>\
<div id="build">\
BUILD
<<button [[Choose|CC-Build]]>><</button>>\
</div>\
</div>\
<h2>Personality, Class and Background</h2>\
<div class="index-flex">
<div id="perso">\
PERSONALITY
<<button [[Choose|CC-Personality]]>><</button>>\
</div>
<div id="class">\
CLASS (Combat)
<<button [[Choose|CC-StatClass]]>><</button>>\
</div>\
<div id="back">\
BACKGROUND
<<button [[Choose|CC-Background]]>><</button>>\
</div>\
</div>\
<h2>Non-MC Options</h2>\
<div class="index-flex">
<div id="rogender">\
RO GENDER
<<button [[Choose|CC-ROGender]]>><</button>>\
</div>\
<div id="pets">\
PETS
<<button [[Choose|CC-Pets]]>><</button>>\
</div>\
</div>
<<button [[Review Choices|CC-Check]]>><</button>>
<<CheckIfDone>>
/*
~ Notes:
This is essentially an overview of each trait (sub)category for PC/NPC customisation. Each button sends you to a different page to select respective options. Coming back to that page will trigger the [<<CheckIfDone>>] widget, which will change the section's button's colour to green.
This whole section was coded as if it was an in-game character customisation (can't go back and change stuff), meaning it does not track previous choices if you return to a section (the [CC-] passages). This isn't the case with the [CC-Check] section, who does take it into account (in the [Popup-] passages).
The page also includes a semi-random Randomiser, with the [<<Randomiser>>] widget, and a Pre-Set function, with the [<<PreSet>>] widget. It has some caveats:
- [<<Randomiser>>] does not include all traits, specifically textbox inputs outside of names and checkboxes (features others). Mainly because the widget is already over 100 lines of code.
- [<<PreSet>>] was chosen ahead of time by me (granted, randomly), for one possible PC option. If you are looking to include Pre-Set characters, you could consider having multiple preset PC options.
*/<h1>Is this Correct?</h1>\
Please review the character page below and confirm the traits chosen are correct. If you would like to change an option, please click the button //Change option//.
<h2>Basic Info</h2>\
<table>
<tr id="name">
<th>First Name</th>
<td id="mc-name">$mc.name</td>
<td><<button "Change First Name">><<PopupNameChange>><</button>></td>
</tr>
<tr id="nickname">
<th>Nickname</th>
<td id="mc-nick">$mc.nickname</td>
<td><<button "Change Nickname">><<PopupNickNameChange>><</button>></td>
</tr>
<tr id="surname">
<th>Surname</th>
<td id="mc-surb">$mc.surname</td>
<td><<button "Change Surname">><<PopupSurNameChange>><</button>></td>
</tr>
<tr id="gender">
<th>Gender Identity</th>
<td id="mc-idenity">Gender: <<if $mc.trans>>$mc.trans <</if>>$mc.gender
Referred as a: $mc.person
Title: $mc.title
Sexuality: $mc.sexu</td>
<td><<button "Change Gender">><<PopupGenderChange>><</button>></td>
</tr>
<tr id="pronouns">
<th>Pronouns</th>
<td id="mc-pro">$mc.pronouns</td>
<td><<button "Change Pronouns">><<PopupPronounChange>><</button>></td>
</tr>
<tr id="age">
<th>Age</th>
<td id="mc-age">$mc.age</td>
<td><<button "Change Age">><<PopupAgeChange>><</button>></td>
</tr>
</table>
<h2>Physical Traits</h2>\
<h3>Face and Hair</h3>\
<table>
<tr id="eyes">
<th>Eyes</th>
<td id="mc-eyes">$mc.eyes</td>
<td><<button "Change Eye Colour(s)">><<PopupEyesChange>><</button>></td>
</tr>
<tr id="hair">
<th>Hair</th>/*This is one of the most annoying one to summarise because of all the different elements. The sentences definitely doesn't work completely well with all the different options. */
<td><span id="mc-hairnat"><<if $hair is "bald">>You are $hair.<<else>>You have $hair.length $hair.texture $hair.colour hair <<if $hair.uniform isnot "Yes">>($hair.uniform)<</if>>.
<<if $hair.bangs isnot "No">>You have $hair.bangs. <</if>><<if $hair.shave isnot "No">>Your hair is shaved $hair.shave. <</if>> Your hair is styled in a $hair.do way.<</if>></span>
</td>
<td><<button "Change Your Hair">><<PopupHairChange>><</button>>
</td>
</tr>
<tr id="facial-features">
<th>Facial Features</th>
<td id="mc-ffeat">$facefeatures</td>
<td><<button "Change Features">><<PopupFaceFeatChange>><</button>></td>
</tr>
</table>
<h3>Body</h3>\
<table>
<tr id="skin-colour">
<th>Skin</th>
<td id="mc-skin">$skin.satmut $skin.undertone $skin.color
$skin.features</td>
<td><<button "Change Skin Colour">><<PopupSkinColourChange>><</button>></td>
</tr>
<tr id="body-build">
<th>Build</th>
<td id="mc-build">Height: $body.height
Type: $body.weight
Musculature: $body.musc</td>
<td><<button "Change Build">><<PopupBuildChange>><</button>></td>
</tr>
</table>
<h2>Personality, Class and Background</h2>\
<table>
<tr id="perso">
<th>Personality</th>
<td id="mc-perso">$personality</td>
<td><<button "Change Personality">><<PopupPersoChange>><</button>></td>
</tr>
<tr id="class">
<th>Class (Combat)</th>
<td id="mc-class">$class</td>
<td><<button "Change Class">><<PopupClassChange>><</button>></td>
</tr>
<tr id="background">
<th>Background</th>
<td id="mc-backg">$background</td>
<td><<button "Change Background">><<PopupBackgroundChange>><</button>></td>
</tr>
</table>
<h2>Non-MC Options</h2>\
<table>
<tr id="ro">
<th>RO Gender</th>
<td id="mc-rogen">$Camille
$Fran
$Alex</td>
<td><<button "Change RO Gender">><<PopupROGenderChange>><</button>></td>
</tr>
<tr id="pet">
<th>Pets</th>
<td id="mc-pet">$mc.pet</td>
<td><<button "Change Pet">><<PopupPetsChange>><</button>></td>
</tr>
</table>
<<button [[YES!|CC-Confirm]]>><</button>>
/*
~ Notes:
I've gone with a table for format the content of this passage, but you can use flex-boxes (like [Index-CC]), grids, or something completely different instead. Honestly, I'm pretty sure this isn't even the best way of doing this. But it works, sooooo.....
You don't need IDs on each <tr> element, this was for me to organise/fold lines when coding.
For some traits, the code between the [CC-] passage and its [Popup-] counterpart is the same. For others, I've picked different macros.
Popups might not be the most accessible option for users. You may want to use separate pages instead (same format as [Index-CC]).
*/<h1>Hi $mc.name!</h1>\
<h2>You're adventure is about to start...</h2>
[[Beginning]]/*
~~ Things I have not included in this template because it is becoming increasingly long and there is only so many variation of the same code I can do before I lose my mind.
And because not everything can/should be codified? Especially not at once!
For the PC
* further customisation for already coded traits (see notes on each passage)
* job/position
* outfit
* genitals (more relevant for explicit NSFW projects)
* setting/genre specific options (Sci-Fi alien features)
* mental disorders/fears/etc (should be project specific) + medication as an aid
* actual skills (not just levels of attributes): ex: fishing/cooking/etc...
* hobbies
* knowledge/education
* likes/dislikes
* hopes/dreams/goals
* more???
Other stuff:
* Relation stats/status with non-RO NPCs
* Status with other groups (kinda set with the background now, but I didn't make a stat)
* Reputation in general (could be tied to a class/job)
*//*
~ Notes: ~
You don't *have to* set variables ahead of time. I've only done it here for a handful of them, because of the way I've coded this template. You should however, ensure that a minimum of variables are coded here, especially if they are used before the player interact with them (i.e. included in the Autoname code, setup variables, etc...).
Also, I rely heavily on objects and arrays here (and in general), to organise the player information, since this template is pretty extensive. However, you can use basic single variables, if you prefer those. This is just how I (personally) organise my stuff (and I don't even bother setting sub-objects...).
*/
/* General MC/PC characteristics */
<<set
$mc to {},
$proset to {},
$hair to {},
$face to {},
$facefeatures to [],
$skin to {},
$body to {}
>>
/* MC/PC stats */
<<set
$stat = {
strength : 0,
dexterity : 0,
willpower : 0,
magic : 0,
cunning : 0,
constitution : 0
},
$statusStat = {
wealth : 0,
court : 0,
commoner : 0,
merchant : 0,
difficulty : 0
}
>>
/* This last one is only for practicality */
<<set $pages to {}>>
<<button "Lexicon">><<PopupLexicon>><</button>>
<<button "Credits">><<PopupCredits>><</button>>
<<button "Statistics">><<PopupStats>><</button>><h1>Welcome to the This RPG game by Jay Villanueva!</h1>\
<h3 style="font-weight: normal;">This game is meant to simulate DnD mechanics and have a very thourough character customization. Also include the option to use a preset character or randomize your features.
Check statistics to see your information. It is advised to already put information in before you check.
</h3>\
<center><<button [[Create Character|Index-CC]]>><</button>></center>IF = Interactive Fiction
PC = Player Character
NPC = Non Player Character
RO = Romance Option<h3>First Name</h3>\
<center>
$mc.name
</center>
<h3>Nickname</h3>\
<center>
$mc.nickname
</center>
<h3>Surname</h3>\
<center>
$mc.surname
</center>
<h3>Gender Identity</h3>\
<center>
$mc.gender
$mc.person
$mc.title
$mc.sexu
</center>
<h3>Pronouns</h3>\
<center>
$mc.pronouns
</center>
<h3>Age</h3>\
<center>
$mc.age
</center>
<h3>Eyes</h3>\
<center>
$mc.eyes
</center>
<h3>Hair</h3>\
<center>
$hair.texture
</center>
<h3>Facial Features</h3>\
<center>
$mc.name
</center>
<h3>Skin</h3>\
<center>
$skin.undertone
$skin.color
$skin.features
</center>
<h3>Build</h3>\
<center>
$body.height
$body.weight
$body.musc
</center>
<h3>Personality</h3>\
<center>
$personality
</center>
<h3>Class</h3>\
<center>
$class
</center>
<h3>Background</h3>\
<center>
$background
</center>
<h3>Wealth</h3>\
<progress @value="$statusStat.wealth" max="100"></progress> $statusStat.wealth
<h3>Relationship Progress</h3>\
$Camille: <progress value="70" max="100"></progress>
$Fran: <progress value="30" max="100"></progress>
$Alex: <progress value="50" max="100"></progress>
/*
The stats for the ROs are obviously not variable dependent here, I've just chosen them at random.
You could also turn the names into popups for more information about each RO. Same with Personality traits or other Background info.
*/The ''Character Creator Template'' was created by manonamora on Twine 2/Tweego with SugarCube (2.37.3).
/***************************
SET PRONOUNS WIDGETS
***************************/
<<widget "PronounsSet">>
<<if $mc.pronouns is "She/Her">>
<<set
$proset.they to "she",
$proset.them to "her",
$proset.their to "her",
$proset.theirs to "hers",
$proset.themselves to "herself",
$proset.plural to false
>>
<<elseif $mc.pronouns is "He/Him">>
<<set
$proset.they to "he",
$proset.them to "him",
$proset.their to "his",
$proset.theirs to "his",
$proset.themselves to "himself",
$proset.plural to false
>>
<<elseif $mc.pronouns is "They/Them (singular)">>
<<set
$proset.they to "they",
$proset.them to "them",
$proset.their to "their",
$proset.theirs to "theirs",
$proset.themselves to "themself",
$proset.plural to false
>>
<<elseif $mc.pronouns is "They/Them (plural)">>
<<set
$proset.they to "they",
$proset.them to "them",
$proset.their to "their",
$proset.theirs to "theirs",
$proset.themselves to "themselves",
$proset.plural to true
>>
<<elseif $mc.pronouns is "Ae/Aer">>
<<set
$proset.they to "ae",
$proset.them to "aer",
$proset.their to "aer",
$proset.theirs to "aers",
$proset.themselves to "aerself",
$proset.plural to false
>>
<<elseif $mc.pronouns is "E/Em">>
<<set
$proset.they to "e",
$proset.them to "em",
$proset.their to "eir",
$proset.theirs to "eirs",
$proset.themselves to "emself",
$proset.plural to false
>>
<</if>>
<</widget>>
<<widget "PronounsCustomSet">>
<<if _pronouns is "She/Her">>
<<set $mc.pronouns to "She/Her">>
<<elseif _pronouns is "He/Him">>
<<set $mc.pronouns to "He/Him">>
<<elseif _pronouns is "They/Them (singular)">>
<<set $mc.pronouns to "They/Them (singular)">>
<<elseif _pronouns is "They/Them (plural)">>
<<set $mc.pronouns to "They/Them (plural)">>
<<elseif _pronouns is "Ae/Aer">>
<<set $mc.pronouns to "Ae/Aer">>
<<elseif _pronouns is "E/Em">>
<<set $mc.pronouns to "E/Em">>
<</if>>
<<PronounsSet>>
<</widget>>
/*
The Second one is for the popup version.
*/
/***************************
HAIR WIDGET
***************************/
<<widget "HairOptions">>
<<set
_hairtexture to ["--", "Straight", "Wavy", "Curly (loose)", "Curly (tight)", "Coily"],
_hairlength to ["--", "Buzzcut", "Short", "Ear-Length", "Chin-Length", "Shoulder-Length", "Long", "Waist-Length", "Hip-Length", "Knee-Length", "Floor-Length"],
_haircolour to ["--", "Black", "Brown", "Auburn", "Red", "Blond", "White"],
_hairuniform to ["Yes", "Graying", "White Streaks"],
_shavedhair to ["No", "Completely", "Undercut", "Shaved Left Side", "Shaved Right Side", "Mohawk"],
_bangs to ["No", "Curtain Bangs", "Bottleneck Bangs", "Blunt Bangs", "Curly Bangs", "Side-Swept Bangs", "Layered Bangs", "Choppy Bangs", "Braided Bangs", "Wispy Bangs", "Wavy Bangs", "Micro Bangs", "Shaggy Bangs", "Piecey Bangs", "Clip-In Bangs"],
_hairdo to ["Natural", "Covered", "Up do", "Braided", "Ponytail", "Buns", "Unstyled"],
_hairaccess to ["Headwrap", "Cap", "Clips", "Extensions", "Hairband", "Barrette", "Pins"]
>>
<</widget>>
/***************************
FACE WIDGET
***************************/
/*
This widget pushed all options ticked into an array.
Depending on how your organise features, you may end up with multiple variables (regular variables and/or other arrays).
*/
<<widget "AllThisInAnArray">>
<<set $facefeatures to []>>
<<if _fullmoustache>><<run $facefeatures.push("a full moustache")>><</if>>
<<if _thinmoustache>><<run $facefeatures.push("a thin moustache")>><</if>>
<<if _goatee>><<run $facefeatures.push("a goatee")>><</if>>
<<if _fullbeard>><<run $facefeatures.push("a full beard")>><</if>>
<<if _sideburns>><<run $facefeatures.push("some sideburns")>><</if>>
<<if _shadow>><<run $facefeatures.push("shadow")>><</if>>
<<if _patch>><<run $facefeatures.push("soul patch")>><</if>>
<<if _handlebar>><<run $facefeatures.push("a handle bar")>><</if>>
<<if _wrinkles>><<run $facefeatures.push("wrinkles")>><</if>>
<<if _mole>><<run $facefeatures.push("a mole")>><</if>>
<<if _brow>><<run $facefeatures.push("a unibrow")>><</if>>
<<if _thickbrow>><<run $facefeatures.push("thick brows")>><</if>>
<<if _thinbrow>><<run $facefeatures.push("thin brows")>><</if>>
<<if _noeyelash>><<run $facefeatures.push("no eye lashes")>><</if>>
<<if _pointedear>><<run $facefeatures.push("pointed ears")>><</if>>
<<if _smallears>><<run $facefeatures.push("small ears")>><</if>>
<<if _largeears>><<run $facefeatures.push("large ears")>><</if>>
<<if _buttonnose>><<run $facefeatures.push("a Button nose")>><</if>>
<<if _romannose>><<run $facefeatures.push("a Roman nose")>><</if>>
<<if _crooked>><<run $facefeatures.push("a Crooked nose")>><</if>>
<<if _widenose>><<run $facefeatures.push("a Wide nose")>><</if>>
<<if _hawknose>><<run $facefeatures.push("a Hawk nose")>><</if>>
<<if _pointchin>><<run $facefeatures.push("a pointy chin")>><</if>>
<<if _roundchin>><<run $facefeatures.push("a rounded chin")>><</if>>
<<if _squarejawe>><<run $facefeatures.push("a square jaw")>><</if>>
<<if _pronouncedcheeks>><<run $facefeatures.push("pronounced cheeks")>><</if>>
<<if _bmrighteye>><<run $facefeatures.push("a beauty mark below the right eye")>><</if>>
<<if _bmlefteye>><<run $facefeatures.push("a beauty mark below the left eye")>><</if>>
<<if _bmcheek>><<run $facefeatures.push("a beauty mark on the cheek")>><</if>>
<<if _bmlips>><<run $facefeatures.push("a beauty mark above the lips")>><</if>>
<<if _freckles>><<run $facefeatures.push("freckles")>><</if>>
<<if _facehair>><<run $facefeatures.push("fluff hair")>><</if>>
<<if _fangs>><<run $facefeatures.push("fangs")>><</if>>
<<if _toothgap>><<run $facefeatures.push("tooth gap")>><</if>>
<<if _acne>><<run $facefeatures.push("acne")>><</if>>
<</widget>>
/***************************
SKIN COLOURS WIDGETS
***************************/
<<widget "SkinColourCycle">>
<<cycle "_color" autoselect>>
<<option "white">>
<<option "pink">>
<<option "beige">>
<<option "brown">>
<<option "black">>
<<option "blue">>
<<option "green">>
<<option "purple">>
<</cycle>>
<</widget>>
<<widget "SkinSatMutCycle">>
<<cycle "_satmut" autoselect>>
<<option "muted">>
<<option "saturated">>
<</cycle>>
<</widget>>
<<widget "SkinToneCycle">>
<<cycle "_undertone" autoselect>>
<<option "warm">>
<<option "neutral">>
<<option "cold">>
<</cycle>>
<</widget>>
/***************************
BUILD WIDGET
***************************/
<<widget "BodyBuild">>
<<set
_height to ["Very Short {below 5’1”/155cm}", "Short {5’1”–5’7”/155-170cm}", "Average {5’7”–6’/170-185cm}", "Tall {6’–6’5”/185-195cm}", "Very Tall {above 6’5”/195cm}"],
_type to ["Thin", "Slender", "Average", "Curvy", "Chubby", "Fat"],
_muscle to ["Ripped", "Muscular", "Athletic", "Toned", "Lean", "Soft"]
>>
<</widget>>
/***************************
CHOOSE CLASS WIDGETS
***************************/
<<widget "WarriorStartingStats">>
<<set
$class to "warrior",
$stat = {
strength : 5,
dexterity : 4,
willpower : 0,
magic : 1,
cunning : 1,
constitution : 3
},
$availablepts = 10
>>
<</widget>>
<<widget "MageStartingStats">>
<<set
$class to "mage",
$stat = {
strength : 1,
dexterity : 1,
willpower : 4,
magic : 6,
cunning : 2,
constitution : 0
},
$availablepts = 10
>>
<</widget>>
<<widget "RogueStartingStats">>
<<set
$class to "rogue",
$stat = {
strength : 1,
dexterity : 5,
willpower : 2,
magic : 1,
cunning : 5,
constitution : 0
},
$availablepts = 10
>>
<</widget>>
/*
~ Notes:
You could technically merge the popup widgets below into one, using an argument widget to set each option apart.
I'm using the same passage to display inside the popup because I am lazy. See the ClassExplanations Passage.
*/
<<widget "PopupWarrior">>
<<set _explanation to "warrior">>
<<run Dialog.create("The Warrior Class").wikiPassage("ClassExplanations").open();>>
<</widget>>
<<widget "PopupMage">>
<<set _explanation to "mage">>
<<run Dialog.create("The Mage Class").wikiPassage("ClassExplanations").open();>>
<</widget>>
<<widget "PopupRogue">>
<<set _explanation to "rogue">>
<<run Dialog.create("The Rogue Class").wikiPassage("ClassExplanations").open();>>
<</widget>>
<<widget "PopupExtraPoints">>
<<set _explanation to "points">>
<<run Dialog.create("A Gift from the Gods!").wikiPassage("ClassExplanations").open();>>
<</widget>>
/***************************
SPEND POINTS WIDGETS
***************************/
/* The following widgets are used to update the spending points passage. It uses the new <<do>>/<<redo>> macros in a general way. But you could make it a bit more complex by tagging <<do>> sections (see the SugarCube Documentation).
*/
<<widget "LockedPoints">>
<<set
_statlocked = {
strength : $stat.strength,
dexterity : $stat.dexterity,
willpower : $stat.willpower,
magic : $stat.magic,
cunning : $stat.cunning,
constitution : $stat.constitution
}
>>
<</widget>>
<<widget "RemoveSTR">>
<<if $stat.strength is _statlocked.strength>>
←
<<else>>
<<link "←">>
<<set $stat.strength --, $availablepts ++>>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "AddSTR">>
<<if $availablepts is 0 >>
→
<<else>>
<<link "→">>
<<set $stat.strength ++, $availablepts -->>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "RemoveDEX">>
<<if $stat.dexterity is _statlocked.dexterity>>
←
<<else>>
<<link "←">>
<<set $stat.dexterity --, $availablepts ++>>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "AddDEX">>
<<if $availablepts is 0 >>
→
<<else>>
<<link "→">>
<<set $stat.dexterity ++, $availablepts -->>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "RemoveWIL">>
<<if $stat.willpower is _statlocked.willpower>>
←
<<else>>
<<link "←">>
<<set $stat.willpower --, $availablepts ++>>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "AddWIL">>
<<if $availablepts is 0 >>
→
<<else>>
<<link "→">>
<<set $stat.willpower ++, $availablepts -->>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "RemoveMAG">>
<<if $stat.magic is _statlocked.magic>>
←
<<else>>
<<link "←">>
<<set $stat.magic --, $availablepts ++>>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "AddMAG">>
<<if $availablepts is 0 >>
→
<<else>>
<<link "→">>
<<set $stat.magic ++, $availablepts -->>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "RemoveCUN">>
<<if $stat.cunning is _statlocked.cunning>>
←
<<else>>
<<link "←">>
<<set $stat.cunning --, $availablepts ++>>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "AddCUN">>
<<if $availablepts is 0 >>
→
<<else>>
<<link "→">>
<<set $stat.cunning ++, $availablepts -->>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "RemoveCON">>
<<if $stat.constitution is _statlocked.constitution>>
←
<<else>>
<<link "←">>
<<set $stat.constitution --, $availablepts ++>>
<<redo>>
<</link>>
<</if>>
<</widget>>
<<widget "AddCON">>
<<if $availablepts is 0 >>
→
<<else>>
<<link "→">>
<<set $stat.constitution ++, $availablepts -->>
<<redo>>
<</link>>
<</if>>
<</widget>>
/********************************
CHOOSE BACKGROUND WIDGETS
********************************/
<<widget "CommonerStartingStats">>
<<set
$background to "commoner",
$statusStat = {
wealth : 0,
court : 0,
commoner : 40,
merchant : 15,
difficulty : "hard"
}
>>
<</widget>>
<<widget "BourgeoisStartingStats">>
<<set
$background to "bourgeois",
$statusStat = {
wealth : 45,
court : 25,
commoner : 10,
merchant : 50,
difficulty : "medium"
}
>>
<</widget>>
<<widget "NobleStartingStats">>
<<set
$background to "noble",
$statusStat = {
wealth : 100,
court : 60,
commoner : 20,
merchant : 40,
difficulty : "easy"
}
>>
<</widget>>
<<widget "PopupCommoner">>
<<set _explanation to "commoner">>
<<run Dialog.create("The Commoner").wikiPassage("StatusExplanations").open();>>
<</widget>>
<<widget "PopupBourgeois">>
<<set _explanation to "bourgeois">>
<<run Dialog.create("The Bourgeois").wikiPassage("StatusExplanations").open();>>
<</widget>>
<<widget "PopupNoble">>
<<set _explanation to "noble">>
<<run Dialog.create("The Noble").wikiPassage("StatusExplanations").open();>>
<</widget>>
/********************************
RO GENDER WIDGETS
********************************/
<<widget "CamilleCycle">>
<<cycle "_camille">>
<<option "Camille (She/Her)">>
<<option "Camille (He/Him)">>
<<option "Camille (They/Them)">>
<</cycle>>
<</widget>>
<<widget "FranCycle">>
<<cycle "_fran">>
<<option "Frances (She/Her)">>
<<option "Frank (He/Him)">>
<<option "Frances (They/Them)">>
<</cycle>>
<</widget>>
<<widget "AlexCycle">>
<<cycle "_alex">>
<<option "Alexandra (She/Her)">>
<<option "Alexander (He/Him)">>
<<option "Alex (They/Them)">>
<</cycle>>
<</widget>>
/********************************
MAIN PAGE WIDGETS
********************************/
<<widget "Randomiser">>
<<set
$mc.name to either ("Suzette", "Maribelle", "Francine", "Thomas", "Charles", "Alfonso", "Riley", "Blake", "Taylor"),
$mc.nickname to "{/}",
$mc.surname to either("Bartlett", "Kerr", "Silva"),
$mc.gender to either("female", "male", "nonbinary"),
$mc.trans to either("transgender", "cisgender", "NR"),
$mc.person to either("woman", "man", "person"),
$mc.title to either("lady", "lord", "liege"),
$mc.sexu to either("Heterosexual", "Homosexual", "Bisexual", "Pansexual", "Asexual"),
$mc.pronouns to either("She/Her", "He/Him", "They/Them (singular)", "They/Them (plural)", "Ae/Aer", "E/Em"),
$mc.age to random(18, 78),
$heterochromia to either(true, false),
_bald to either(true, false),
$facefeatures to "{/}",
$skin.color to either("white", "pink", "beige", "brown", "black", "blue", "green", "purple"),
$skin.satmut to either("muted", "saturated"),
$skin.undertone to either("warm", "neutral", "cold"),
$skin.features to "{/}",
$body.height to either("Very Short {below 5’1”/155cm}", "Short {5’1”–5’7”/155-170cm}", "Average {5’7”–6’/170-185cm}", "Tall {6’–6’5”/185-195cm }", "Very Tall {above 6’5”/195cm}"),
$body.weight to either("Thin", "Slender", "Average", "Curvy", "Chubby", "Fat"),
$body.musc to either("Ripped", "Muscular", "Athletic", "Toned", "Lean", "Soft"),
$personality to either("Friendly", "Shy", "Confident", "Curious", "Sarcastic", "Serious", "Optimistic", "Pessimistic", "Caring", "Aggressive", "Lazy", "Energetic", "Intelligent", "Naive", "Funny", "Calm", "Anxious", "Rebellious", "Loyal", "Greedy"),
_class to random(1,3),
_bg to random(1,3),
$Camille to either("Camille (She/Her)", "Camille (He/Him)", "Camille (They/Them)"),
$Fran to either("Frances (She/Her)", "Frank (He/Him)", "Frances (They/Them)"),
$Alex to either("Alexandra (She/Her)", "Alexander (He/Him)", "Alex (They/Them)"),
$mc.pet to either("a turtle", "a dog", "a cat", "a bird", "a rodent", "a snake", "a tiger", "a dragon", "a robot", "a horse", "a spider", "a moon", "a cow", "a pig")
>>
<<if $mc.trans is "NR">><<unset $mc.trans>><</if>>
<<PronounsSet>>
<<if $heterochromia>>
<<set $mc.eyes to either("white", "grey", "golden", "green", "blue", "maroon", "brown", "black", "red", "pink", "purple", "lime", "seafoam", "cream")>>
<<else>>
<<set
_eyesleft to either("white", "grey", "golden", "green", "blue", "maroon", "brown", "black", "red", "pink", "purple", "lime", "seafoam", "cream"),
_eyesright to either("white", "grey", "golden", "green", "blue", "maroon", "brown", "black", "red", "pink", "purple", "lime", "seafoam", "cream"),
$mc.eyes to _eyesleft + " and " + _eyesright
>>
<</if>>
<<if _bald>>
<<set $hair to "bald">>
<<else>>
<<set
$hair to {},
$hair.texture to either("Straight", "Wavy", "Curly (loose)", "Curly (tight)", "Coily"),
$hair.length to either("Buzzcut", "Short", "Ear-Length", "Chin-Length", "Shoulder-Length", "Long", "Waist-Length", "Hip-Length", "Knee-Length", "Floor-Length"),
$hair.colour to either("Black", "Brown", "Auburn", "Red", "Blond", "White"),
$hair.uniform to either("Yes", "Graying", "White Streaks"),
$hair.bangs to either("No", "Curtain Bangs", "Bottleneck Bangs", "Blunt Bangs", "Curly Bangs", "Side-Swept Bangs", "Layered Bangs", "Choppy Bangs", "Braided Bangs", "Wispy Bangs", "Wavy Bangs", "Micro Bangs", "Shaggy Bangs", "Picey Bangs", "Clip-In Bangs"),
$hair.shave to either("No", "Completely", "Undercut", "Shaved Left Side", "Shaved Right Side", "Mohawk"),
$hair.do to either("Natural", "Covered", "Up do", "Braided", "Ponytail", "Buns", "Unstyled")
>>
<</if>>
<<if _class is 1>>
<<WarriorStartingStats>>
<<elseif _class is 2>>
<<MageStartingStats>>
<<else>>
<<RogueStartingStats>>
<</if>>
<<if _bg is 1>>
<<CommonerStartingStats>>
<<elseif _bg is 2>>
<<BourgeoisStartingStats>>
<<else>>
<<NobleStartingStats>>
<</if>>
<</widget>>
<<widget "CheckIfDone">>
<<done>>
<<if $mc.name>>
<<addclass "#name" "green">>
<</if>>
<<if $mc.nickname>>
<<addclass "#nickname" "green">>
<</if>>
<<if $mc.surname>>
<<addclass "#surname" "green">>
<</if>>
<<if $mc.surname>>
<<addclass "#surname" "green">>
<</if>>
<<if $pages.gender>>
<<addclass "#gender" "green">>
<</if>>
<<if $pages.pronouns>>
<<addclass "#pronouns" "green">>
<</if>>
<<if $mc.age>>
<<addclass "#age" "green">>
<</if>>
<<if $mc.eyes>>
<<addclass "#eyes" "green">>
<</if>>
<<if $pages.hair>>
<<addclass "#hair" "green">>
<</if>>
<<if $pages.facefeat>>
<<addclass "#ffeat" "green">>
<</if>>
<<if $skin.color>>
<<addclass "#skin" "green">>
<</if>>
<<if $body.height>>
<<addclass "#build" "green">>
<</if>>
<<if $pages.perso>>
<<addclass "#perso" "green">>
<</if>>
<<if $class>>
<<addclass "#class" "green">>
<</if>>
<<if $background>>
<<addclass "#back" "green">>
<</if>>
<<if $pages.rogen>>
<<addclass "#rogender" "green">>
<</if>>
<<if $mc.pet>>
<<addclass "#pets" "green">>
<</if>>
<</done>>
<</widget>>
/********************************
CHANGE POPUP WIDGETS
********************************/
<<widget "PopupNameChange">>
<<run Dialog.create("Change Your Name").wikiPassage("Popup-Name").open();>>
<</widget>>
<<widget "PopupNickNameChange">>
<<run Dialog.create("Change Your Nickname").wikiPassage("Popup-NickName").open();>>
<</widget>>
<<widget "PopupSurNameChange">>
<<run Dialog.create("Change Your Surname").wikiPassage("Popup-SurName").open();>>
<</widget>>
<<widget "PopupGenderChange">>
<<run Dialog.create("Change Your Gender").wikiPassage("Popup-Gender").open();>>
<</widget>>
<<widget "IfGenderIsCustom">>
/*
This is to check which option was selected, especially if it was custom, and autocheck the relevant radiobutton.
All of this use temporary variables so it doesn't override the actual variable if the dialog box is closed without actually confirming the change.
*/
<<if $mc.gender is "female">>
<<set _gender to "female">>
<<elseif $mc.gender is "male">>
<<set _gender to "male">>
<<elseif $mc.gender is "nonbinary">>
<<set _gender to "nonbinary">>
<<else>>
<<set _gender to "custom">>
<</if>>
<<if $mc.trans is "transgender">>
<<set _trans to "transgender">>
<<elseif $mc.trans is "cisgender">>
<<set _trans to "cisgender">>
<<else>>
<<set _trans to "NR">>
<</if>>
<<if $mc.gender is "woman">>
<<set _person to "woman">>
<<elseif $mc.gender is "man">>
<<set _person to "man">>
<<elseif $mc.gender is "person">>
<<set _person to "person">>
<<else>>
<<set _person to "custom">>
<</if>>
<<if $mc.gender is "lady">>
<<set _title to "lady">>
<<elseif $mc.gender is "lord">>
<<set _title to "lord">>
<<elseif $mc.gender is "liege">>
<<set _title to "liege">>
<<else>>
<<set _title to "custom">>
<</if>>
<</widget>>
<<widget "PopupPronounChange">>
<<run Dialog.create("Change Your Pronouns").wikiPassage("Popup-Pronouns").open();>>
<</widget>>
<<widget "IfPronounsIsCustom">>
/*
This is to check which option was selected, especially if it was custom, and autocheck the relevant radiobutton.
All of this use temporary variables so it doesn't override the actual variable if the dialog box is closed without actually confirming the change.
*/
<<if !$proset.custom>>
<<if $mc.pronouns is "She/Her">>
<<set _pronouns to "She/Her">>
<<elseif $mc.pronouns is "He/Him">>
<<set _pronouns to "He/Him">>
<<elseif $mc.pronouns is "They/Them (singular)">>
<<set _pronouns to "They/Them (singular)">>
<<elseif $mc.pronouns is "They/Them (plural)">>
<<set _pronouns to "They/Them (plural)">>
<<elseif $mc.pronouns is "Ae/Aer">>
<<set _pronouns to "Ae/Aer">>
<<elseif $mc.pronouns is "E/Em">>
<<set _pronouns to "E/Em">>
<</if>>
<<else>>
<<set _pronouns to "custom">>
<</if>>
<</widget>>
<<widget "PopupAgeChange">>
<<run Dialog.create("Change Your Age").wikiPassage("Popup-Age").open();>>
<</widget>>
<<widget "PopupEyesChange">>
<<run Dialog.create("Change Your Eye").wikiPassage("Popup-Eye").open();>>
<</widget>>
<<widget "PopupHairChange">>
<<run Dialog.create("Change Your Hair").wikiPassage("Popup-Hair").open();>>
<</widget>>
<<widget "PopupFaceFeatChange">>
<<run Dialog.create("Change Your Features").wikiPassage("Popup-FaceFeat").open();>>
<</widget>>
<<widget "FacialFeaturesPicked">>
<<if $facefeatures.includes("a full moustache")>><<set _fullmoustache to true>><</if>>
<<if $facefeatures.includes("a thin moustache")>><<set _thinmoustache to true>><</if>>
<<if $facefeatures.includes("a goatee")>><<set _goatee to true>><</if>>
<<if $facefeatures.includes("a full beard")>><<set _fullbeard to true>><</if>>
<<if $facefeatures.includes("some sideburns")>><<set _sideburns to true>><</if>>
<<if $facefeatures.includes("shadow")>><<set _shadow to true>><</if>>
<<if $facefeatures.includes("soul patch")>><<set _patch to true>><</if>>
<<if $facefeatures.includes("a handle bar")>><<set _handlebar to true>><</if>>
<<if $facefeatures.includes("wrinkles")>><<set _wrinkles to true>><</if>>
<<if $facefeatures.includes("a mole")>><<set _mole to true>><</if>>
<<if $facefeatures.includes("a unibrow")>><<set _brow to true>><</if>>
<<if $facefeatures.includes("thick brows")>><<set _thickbrow to true>><</if>>
<<if $facefeatures.includes("thin brows")>><<set _thinbrow to true>><</if>>
<<if $facefeatures.includes("no eye lashes")>><<set _noeyelash to true>><</if>>
<<if $facefeatures.includes("pointed ears")>><<set _pointedear to true>><</if>>
<<if $facefeatures.includes("small ears")>><<set _smallears to true>><</if>>
<<if $facefeatures.includes("large ears")>><<set _largeears to true>><</if>>
<<if $facefeatures.includes("a Button nose")>><<set _buttonnose to true>><</if>>
<<if $facefeatures.includes("a Roman nose")>><<set _romannose to true>><</if>>
<<if $facefeatures.includes("a Crooked nose")>><<set _crooked to true>><</if>>
<<if $facefeatures.includes("a Wide nose")>><<set _widenose to true>><</if>>
<<if $facefeatures.includes("a Hawk nose")>><<set _hawknose to true>><</if>>
<<if $facefeatures.includes("a pointy chin")>><<set _pointchin to true>><</if>>
<<if $facefeatures.includes("a rounded chin")>><<set _roundchin to true>><</if>>
<<if $facefeatures.includes("a square jaw")>><<set _squarejawe to true>><</if>>
<<if $facefeatures.includes("pronounced cheeks")>><<set _pronouncedcheeks to true>><</if>>
<<if $facefeatures.includes("a beauty mark below the right eye")>><<set _bmrighteye to true>><</if>>
<<if $facefeatures.includes("a beauty mark below the left eye")>><<set _bmlefteye to true>><</if>>
<<if $facefeatures.includes("a beauty mark on the cheek")>><<set _bmcheek to true>><</if>>
<<if $facefeatures.includes("a beauty mark above the lips")>><<set _bmlips to true>><</if>>
<<if $facefeatures.includes("freckles")>><<set _freckles to true>><</if>>
<<if $facefeatures.includes("fluff hair")>><<set _facehair to true>><</if>>
<<if $facefeatures.includes("fangs")>><<set _fangs to true>><</if>>
<<if $facefeatures.includes("tooth gap")>><<set _toothgap to true>><</if>>
<<if $facefeatures.includes("acne")>><<set _acne to true>><</if>>
<</widget>>
<<widget "PopupSkinColourChange">>
<<run Dialog.create("Change Your Skin Colour").wikiPassage("Popup-Skin").open();>>
<</widget>>
<<widget "PopupSkinChecker">>
<<set
_undertone to $skin.undertone,
_color to $skin.color,
_satmut to $skin.satmut
>>
<<if $skin.features.includes("Viligo")>><<set _vitiligo to true>><</if>>
<<if $skin.features.includes("Freckles")>><<set _freckles to true>><</if>>
<<if $skin.features.includes("Eczema")>><<set _eczema to true>><</if>>
<<if $skin.features.includes("Beauty Marks")>><<set _beatymarks to true>><</if>>
<<if $skin.features.includes("Albinism")>><<set _albinism to true>><</if>>
<</widget>>
<<widget "PopupBuildChange">>
<<run Dialog.create("Change Your Build").wikiPassage("Popup-Build").open();>>
<</widget>>
<<widget "PopupBodyBuild">>
<<set
_height to ["--", "Very Short {below 5’1”/155cm}", "Short {5’1”–5’7”/155-170cm}", "Average {5’7”–6’/170-185cm}", "Tall {6’–6’5”/185-195cm}", "Very Tall {above 6’5”/195cm}"],
_type to ["--", "Thin", "Slender", "Average", "Curvy", "Chubby", "Fat"],
_muscle to ["--", "Ripped", "Muscular", "Athletic", "Toned", "Lean", "Soft"]
>>
<</widget>>
<<widget "PopupPersoChange">>
<<run Dialog.create("Change Your Personality").wikiPassage("Popup-Perso").open();>>
<<set _personality to $personality>>
<</widget>>
<<widget "PopupClassChange">>
<<run Dialog.create("Change Your Class").wikiPassage("Popup-Class").open();>>
<</widget>>
<<widget "PopupBackgroundChange">>
<<run Dialog.create("Change Your Background").wikiPassage("Popup-Back").open();>>
<</widget>>
<<widget "PopupROGenderChange">>
<<run Dialog.create("Change Your ROs' Gender").wikiPassage("Popup-ROGender").open();>>
<</widget>>
<<widget "PopupPetsChange">>
<<run Dialog.create("Change Your Pets").wikiPassage("Popup-Pets").open();>>
<</widget>>
<<widget "PopupLexicon">>
<<run Dialog.create("Lexicon").wikiPassage("Lexicon").open();>>
<</widget>>
<<widget "PopupCredits">>
<<run Dialog.create("Credits").wikiPassage("Credits").open();>>
<</widget>>
<<widget "PopupStats">>
<<run Dialog.create("Statistics").wikiPassage("Statistics").open();>>
<</widget>>
<<widget "PreSet">>
<<set
$mc.name to "Jinx",
$mc.nickname to "{/}",
$mc.surname to "Vanilla",
$mc.gender to "male",
$mc.trans to "cisgender",
$mc.person to "man",
$mc.title to "lord",
$mc.sexu to "Bisexual",
$mc.pronouns to "He/Him (singular)",
$mc.age to "{/}",
$heterochromia to false,
$mc.eyes to "brown",
$hair to "bald",
$facefeatures to ["a mole", "no eye lashes", "pointed ears", "a Hawk nose", "fangs"],
$skin.color to "white",
$skin.satmut to "muted",
$skin.undertone to "cold",
$skin.features to ["Freckles"],
$body.height to "Very Short {below 5’1”/155cm}",
$body.weight to "Thin",
$body.musc to "Soft",
$personality to "Kind",
$class to "mage",
$stat = {
strength : 1,
dexterity : 1,
willpower : 4,
magic : 6,
cunning : 2,
constitution : 0
},
$background to "noble",
$statusStat = {
wealth : 100,
court : 60,
commoner : 20,
merchant : 40,
difficulty : "easy"
},
$Camille to "Camille (She/Her)",
$Fran to "Frances (They/Them)",
$Alex to "Alexander (He/Him)",
$mc.pet to "a dog"
>>
<</widget>>End of game so far.
More to be added later.
To be added:
Dialogue affected by character traits.
Generate npc's as enemies or friendly.
Create a battle senario.