<<Image "events/bed/bedPov.jpg">>
<p>
You are lying down in bed.
You can @@.highlight;sleep@@ here, but only if you are tired enough.
Sleeping will provide the most effective rest.
Make sure to not got to bed hungry.
Your sleep will get aborted if you get too hungry in the middle of the night.
Alternatively you can @@.highlight;take a nap@@.
This provides only half as much rest as sleeping does, but you don't have to watch your hunger and thirst too closely while doing so.
You can also @@.highlight;daydream@@, which, for all intents and purposes, is equivalent to waiting for time to pass.
</p>
<div class="actions">
<<set _disabledMsg to "">>
<<set _sleepState to statState("sleep")>>
<<set _thirstState to statState("thirst")>>
<<set _hungerState to statState("hunger")>>
<<if _sleepState == 0>>
<<set _disabledMsg += "You are not tired enough. ">>
<</if>>
<<if _thirstState >= 2>>
<<set _disabledMsg += "You are too thirsty. ">>
<</if>>
<<if _hungerState >= 2>>
<<set _disabledMsg += "You are too hungry. ">>
<</if>>
<<if _disabledMsg == "">>
<<set _sleepOutfitRequirement = {coverage: ["naked","topless","nighty","underwear"]}>>
<<set _standardSleepAction = true>>
<<if !Outfits.Current.requirementFullfilled(_sleepOutfitRequirement).fullfilled>>
<<set _sleepOutfit = Outfits.outfitByRequirement(_sleepOutfitRequirement)>>
<<if _sleepOutfit>>
<<ActionA `"Put on outfit \""+_sleepOutfit.id+"\" and sleep"` "Sleep" `{girliness:{outfit:_sleepOutfit.id,type:"outfit"}}`>>
<<run Outfits.equip(_sleepOutfit.id)>>
<<set $currentEventType to "sleepDream">>
<</ActionA>>
<</if>>
<</if>>
<<if _standardSleepAction>>
<<ActionA "Sleep" "Sleep" `{outfit:_sleepOutfitRequirement}`>>
<<set $currentEventType to "sleepDream">>
<</ActionA>>
<</if>>
<<else>>
<a class="disabled">Sleep<p class="disabledMessage">_disabledMsg</p></a>
<</if>>
<<ActionA "Take a nap" "Bed" `{time:[60,300,900,3600,10800],timeMode:"nap"}`>>
<</ActionA>>
<<ActionA "Daydream" "Bed" `{time:[60,300,900,3600,10800],mood:{magnitude:1/240,type:"passtime"}}`>>
<</ActionA>>
</div>
<hr/>
Your alarm clock is set to<br/>
<span class="time">
<<set _displayTime to TimeToString($actions.bed.alarm.weekday.time)>>
<<linkreplace _displayTime >>
<<numberbox "$actions.bed.alarm.weekday.time.hour" $actions.bed.alarm.weekday.time.hour>> :
<<numberbox "$actions.bed.alarm.weekday.time.minute" $actions.bed.alarm.weekday.time.minute>> :
<<numberbox "$actions.bed.alarm.weekday.time.second" $actions.bed.alarm.weekday.time.second>>
<</linkreplace>>
</span>
<<if $actions.bed.alarm.weekday.enabled is false>>
[[(disabled)|Bed][$actions.bed.alarm.weekday.enabled = true]]
<<else>>
[[(enabled)|Bed][$actions.bed.alarm.weekday.enabled = false]]
<</if>>
on weekdays and<br/>
<span class="time">
<<set _displayTime to TimeToString($actions.bed.alarm.weekend.time)>>
<<linkreplace _displayTime >>
<<numberbox "$actions.bed.alarm.weekend.time.hour" $actions.bed.alarm.weekend.time.hour>> :
<<numberbox "$actions.bed.alarm.weekend.time.minute" $actions.bed.alarm.weekend.time.minute>> :
<<numberbox "$actions.bed.alarm.weekend.time.second" $actions.bed.alarm.weekend.time.second>>
<</linkreplace>>
</span>
<<if $actions.bed.alarm.weekend.enabled is false>>
[[(disabled)|Bed][$actions.bed.alarm.weekend.enabled = true]]
<<else>>
[[(enabled)|Bed][$actions.bed.alarm.weekend.enabled = false]]
<</if>>
on weekend.
<hr/>
<<Actions>>
<<BackC>>
<</Actions>><<run painIncrease("uterus","period",60)>>
<<run skillExperienceInc("cycle",15)>>
<<Image "events/body/period.jpg">>
<<if !$pc.experiences.includes("period")>>
<<run $pc.experiences.push("period")>>
<p>
It started as a uncomfortable feeling in your lower stomach.
At first you thought that you ate something bad, but the feeling didn't stop.
It grew worse. Way worse.
And then, to your shock, you understood: you have a functioning female body and your period just started!
</p>
<p>
You should make sure to use hygiene products during your period or you will soil yourself and your clothes with blood.
</p>
<<else>>
<p>
It happens again!
Pain, blood and feeling as if you are not in control of your own body.
Getting your period certainly isn't something you were missing when you were a man.
</p>
<</if>>
<<if periodProtected()>>
<p>
At least you had enough foresight to use female hygiene products.
It might have been a catastrophe otherwise.
</p>
<<elseif Outfits.Current.itemIdBySlot("p")>>
<<run Outfits.Current.remove("p")>>
<<Image "events/body/periodRuinedPanties.jpg">>
<p>
And the fact that you just ruined your panties doesn't make it any better.
You have to toss them.
The next time you really should use some female hygiene products in advance.
</p>
<</if>>
<<Actions>>
<<BackC>>
<</Actions>><<if $pc.body.makeup.strength > 0>>
<<set $pc.body.makeup.quality to -4>>
<<set $pc.body.ageOffset += 7>>
Your make-up smeared. It looks terrible and is bad for your skin. You should remove it before going to bed.
<</if>>
/* -------------Dream ------------------ */
<<Image "events/bed/dream_fly_f.jpg">>
You dream of flying high up in the sky.
<hr/>
<<set _timeToSleepNextEmergency = TimeUntilNextEmergency(86400,'sleep')>>
<<set _thirstState to statState("thirst")>>
<<set _hungerState to statState("hunger")>>
<<if _hungerState >= 2 or _thirstState >=2>>
/%There allready is an emergency! Only rest 1 hourish%/
<<set _timeToSleepNextEmergency = 3600 + randomInt(-300,300)>>
<</if>>
/% ----------ALARM (_timeToAlarmTime) ---------%/
<<set _timeToAlarmWeekend = Infinity>>
<<set _timeToAlarmWeekday = Infinity>>
/% Weekend %/
<<if $actions.bed.alarm.weekend.enabled === true>>
<<set _timeToAlarmWeekend = SecondsTil(Object.assign($actions.bed.alarm.weekend.time,{day:NextWeekendday(true)}))>>
<<if _timeToAlarmWeekend <= 0>>
/% The alarm was already activated today. Check for the next weekendday %/
<<set _timeToAlarmWeekend = SecondsTil(Object.assign($actions.bed.alarm.weekend.time,{day:NextWeekendday(false)}))>>
<</if>>
<</if>>
/% Weekday %/
<<if $actions.bed.alarm.weekday.enabled === true>>
<<set _timeToAlarmWeekday = SecondsTil(Object.assign($actions.bed.alarm.weekday.time,{day:NextWeekday(true)}))>>
<<if _timeToAlarmWeekday <= 0>>
/% The alarm was already activated today. Check for the next weekday %/
<<set _timeToAlarmWeekday = SecondsTil(Object.assign($actions.bed.alarm.weekday.time,{day:NextWeekday(false)}))>>
<</if>>
<</if>>
<<set _timeToAlarmTime = Math.min(_timeToAlarmWeekday,_timeToAlarmWeekend)>>
<<run console.log(_timeToAlarmTime)>>
<<set _timeToCompleteRelaxation = Math.floor((100 - $pc.stats.sleep.current) / - window.constant.character.stats.sleep.decay.sleep)>>
<<set _timeToAutowakeup = Math.floor((SecondsTil($actions.bed.autoWakeupTime) +86400) % 86400 + (randomInt(-15,15) + randomInt(-15,15)) * 60)>>
<<if _timeToAutowakeup - _timeToCompleteRelaxation <= 14400 or $passageArguments.ignoreAutoWakeupOnce === true>>
/% Don't wake up if there are less than 4 hours to autowakeup %/
<<set _timeToAutowakeup = Math.max(_timeToAutowakeup,_timeToCompleteRelaxation)>>
<<run delete $passageArguments.ignoreAutoWakeupOnce>>
<<else>>
<<set _timeToAutowakeup = _timeToCompleteRelaxation>>
<</if>>
<<set _timeToSleep = Math.min(_timeToSleepNextEmergency, _timeToAlarmTime,_timeToAutowakeup)>>
<<run console.log(_timeToCompleteRelaxation)>>
<<if _timeToAutowakeup == _timeToSleep>>
<<run TimePassSeconds(_timeToAutowakeup,'sleep')>>
You wake up well relaxed.
<<elseif _timeToAlarmTime == _timeToSleep>>
<<run TimePassSeconds(_timeToAlarmTime,'sleep')>>
Your alarm clock rings too early for your taste.
<<elseif _timeToSleepNextEmergency == _timeToSleep>>
<<run TimePassSeconds(_timeToSleepNextEmergency,'sleep')>>
<<set _thirstState to statState("thirst")>>
<<set _hungerState to statState("hunger")>>
<<if _hungerState >= 2>>
You are to hungry to continue sleeping.
<<elseif _thirstState >=2>>
You are to thirsty to continue sleeping.
<<set _actionDrink to true>>
<</if>>
<</if>>
/* ----------- Change Autowakeup time ------------*/
<<if $time.getUTCHours() > $actions.bed.autoWakeupTime.hour ||
($time.getUTCHours() == $actions.bed.autoWakeupTime.hour && $time.getUTCMinutes() > $actions.bed.autoWakeupTime.minute)>>
<<set $actions.bed.autoWakeupTime.minute += randomInt(1,3)>>
<<else>>
<<set $actions.bed.autoWakeupTime.minute -= randomInt(1,3)>>
<</if>>
<<if $actions.bed.autoWakeupTime.minute >= 60>>
<<set $actions.bed.autoWakeupTime.minute -= 60>>
<<set $actions.bed.autoWakeupTime.hour += 1>>
<</if>>
<<if $actions.bed.autoWakeupTime.minute < 0>>
<<set $actions.bed.autoWakeupTime.minute += 60>>
<<set $actions.bed.autoWakeupTime.hour -= 1>>
<</if>>
<<set $actions.bed.autoWakeupTime.hour = ($actions.bed.autoWakeupTime.hour + 24) % 24>>
<<run console.log($actions.bed.autoWakeupTime)>>
<<Actions>>
<<BackC "Stand Up">>
<<if _actionDrink === true>>
<<ActionA "Get a glass of water from the kitchen and continue sleeping" "Sleep" `{arguments:{ignoreAutoWakeupOnce:true}}`>>
<<run TimePassSeconds(60)>>
<<run Body.consume("water")>>
<</ActionA>>
<</if>>
<</Actions>><<Actions>>
<<BackC>>
<</Actions>>
<hr/>
<<button "Inhibition">><<replace "#characterContents">><<include "CharacterGirliness">><</replace>><</button>>
<<button "Sexuality">><<replace "#characterContents">><<include "CharacterSexuality">><</replace>><</button>>
<<button "Skills">><<replace "#characterContents">><<include "Skills">><</replace>><</button>>
<div id="characterContents">
<<include "CharacterGirliness">>
</div>
<<Actions>>
<<BackC>>
<</Actions>><h2>Inhibition</h2>
<<set _girliness = Girliness.current>>
<<if _girliness >= 0>>
<<set _progress = Math.floor(20 + _girliness/10 * 8)>>
<<else>>
<<set _progress = Math.floor((100 + _girliness) / 5)>>
<</if>>
<div class="girlinessProgress" @style="'--progress:'+_progress+'%'">
<span>
<<if _girliness < 10>>
Manly
<<elseif _girliness < 20>>
Slightly girly
<<elseif _girliness < 30>>
A little girly
<<elseif _girliness < 40>>
Somewhat girly
<<elseif _girliness < 50>>
Girly
<<elseif _girliness < 60>>
Feminine
<<elseif _girliness < 70>>
Very feminine
<<elseif _girliness < 80>>
Somewhat slutty
<<elseif _girliness < 90>>
Slutty
<<elseif _girliness < 100>>
Very Slutty
<<else>>
Whorish
<</if>>
(_girliness)
</span>
</div>
<p>
Your inhibition represents your self-perception and determines which acitivies you are fine doing, which ones stress you and which ones can't be performed by you volunteeringly.
This value is increased by performing <<print mood2string(10,"stressInc girliness")>>-actions.
</p>
<<set _actions = [
{text:"Wearing sneakers",girliness:0},
{text:"Wearing pants",girliness:0},
{text:"Doing household chores",girliness:0},
{text:"Shaving privates",girliness:10},
{text:"Applying subtle makeup",girliness:20},
{text:"Shaving legs",girliness:20},
{text:"Wearing female underwear",girliness:20},
{text:"Wearing outfits/shoes which don't have the androgynous-trait",girliness:30},
{text:"Applying light make-up",girliness:30},
{text:"Wearing outfits which have at least a common coverage",girliness:40},
{text:"Wearing low height heels",girliness:40},
{text:"Applying heavy make-up",girliness:50},
{text:"Wearing outfits which have an attractive coverage",girliness:50},
{text:"Wearing medium height heels",girliness:50},
{text:"Wearing high heels",girliness:60},
{text:"Wearing slutty clothes",girliness:70},
{text:"Wearing fetish heels",girliness:80},
{text:"Wearing whore clothes",girliness:90},
{text:"Whoring",girliness:100}
]>>
<<set _reversedActions = clone(_actions).reverse()>>
<div id="girlinessActions">
<div>
<b>You are fine with:</b>
<ul>
<<for _i, _action range _reversedActions>>
<<if _action.girliness <= _girliness - 10>>
<li style="opacity:40%">_action.text</li>
<<elseif _action.girliness <= _girliness>>
<li>_action.text</li>
<</if>>
<</for>>
</ul>
</div>
<div>
<b>Stresses you:</b>
<ul>
<<for _i, _action range _actions>>
<<if _action.girliness <= _girliness + 20 and _action.girliness > _girliness>>
<li>
_action.text (<<if _action.girliness <= _girliness + 10>><<print mood2string(10,"stressInc girliness")>><<else>><<print mood2string(40,"stressInc girliness")>><</if>>)
</li>
<</if>>
<</for>>
</ul>
</div>
<div>
<b>Can't be done volunteeringly:</b>
<ul>
<<for _i, _action range _actions>>
<<if _action.girliness > _girliness + 30>>
<li style="opacity:40%">_action.text</li>
<<elseif _action.girliness > _girliness + 20>>
<li>_action.text</li>
<</if>>
<</for>>
</ul>
</div>
</div><<set _attractionM to Arousal.SexualAttractionToGender("m") * 100>>
<<set _attractionF to Arousal.SexualAttractionToGender("f") * 100>>
<h2>Sexuality</h2>
<div style="display:grid; grid-template-columns:auto 1fr; column-gap: 10px;">
<span>Attraction to men</span>
<<Progressbar _attractionM `{label:""}`>>
<span>Attraction to women</span>
<<Progressbar _attractionF `{label:""}`>>
</div>
<h3>Sexual History</h3>
<p>You had sex in your previous life. But that's a distant and fading memory.</p>
<<set _sexPartners = SexHistory.sexPartners>>
<<if _sexPartners.length == 0>>
<<if SexHistory.rapeUnknown > 0>>
<p>In your current life, you never had consensual sex in your new life.</p>
<<else>>
<p>In your current life, you never had sex in your new life.</p>
<</if>>
<<else>>
<p>In your current life, you had sex with _sexPartners.length <<SP _sexPartners.length "partner" "different partners">>:</p>
<ul>
<<for _i,_sexPartner range _sexPartners>>
<li>
_sexPartner.name (<<print _sexPartner.counter+"x">>)
</li>
<</for>>
</ul>
<p>In total, you had sex with men <<print SexHistory.sexMen>> time<<SP `SexHistory.sexMen` "" "s">> and with women <<print SexHistory.sexWomen>> time<<SP `SexHistory.sexWomen` "" "s">>.</p>
<</if>>
<<if SexHistory.rapeUnknown > 0>><p>You have been raped <<print SexHistory.rapeUnknown>> time<<SP `SexHistory.rapeUnknown` "" "s">> by <<SP `SexHistory.rapeUnknown` "an unknown assailant" "unknown assailants">>.</p><</if>><<set _consumable to consumables[$currentConsumable]>>
<<Image _consumable.image>>
<<if "description" in _consumable>>
<p>_consumable.description</p>
<</if>>
<<set _consumeData = Body.consume($currentConsumable)>>
<<switch _consumable.type>>
<<case "drink">>
<<if _consumeData.consumeAmount > 1.1 >>
<p>You are so thirsty that you drink another one right after the first.</p>
<<elseif _consumeData.consumeAmount > 0.8 >>
<p>You are thirsty enough to drink all of it.</p>
<<elseif _consumeData.consumeAmount > 0.5 >>
<p>You drink most of it before you feel completely full.</p>
<<elseif _consumeData.consumeAmount > 0.25 >>
<p>You don't even drink half of it before you feel completely full.</p>
<<else>>
<p>You are not really thirsty and therefore you only drink a tiny bit.</p>
<</if>>
<<case "meal">>
<<if _consumeData.consumeAmount > 1.1 >>
<p>You are so hungry that you eat another one right after the first.</p>
<<elseif _consumeData.consumeAmount > 0.8 >>
<p>You are hungry enough to eat all of it.</p>
<<elseif _consumeData.consumeAmount > 0.5 >>
<p>You eat most of it before you feel completely full.</p>
<<elseif _consumeData.consumeAmount > 0.25 >>
<p>You don't even eat half of it before you feel completely full.</p>
<<else>>
<p>You are not really hungry and therefore you only eat a tiny bit.</p>
<</if>>
<</switch>>
<hr/>
<<Actions>>
<<BackC>>
<</Actions>><<set _itemId to $passageArguments.consumable>>
<<set _item to inventoryItem(_itemId)>>
<<Image _item.image>>
<<switch _itemId>>
<<case "antiAgingPills">>
<<set _currentEffect to getDrugEffectMagnitude("antiAgingPills")>>
<<run console.log("Old Age Offset:")>>
<<run console.log($pc.body.ageOffset)>>
<<set $pc.body.ageOffset -= (1-_currentEffect) * 72>>
<<run console.log("New Age Offset:")>>
<<run console.log($pc.body.ageOffset)>>
<<run drugEffectStart("antiAgingPills",3600*36)>>
<<case "painkiller0">>
<<run drugEffectStart("painkiller0",3600*8)>>
<<run painUpdate()>>
<</switch>>
<<Actions>>
<<BackC>>
<</Actions>><<Image "events/critical/sleep_home.jpg">>
<p>You are completely exhausted. You manage to reach your bed and fall into it. Then you immidiately fall asleep.</p>
<<set $currentLocation.id to "ParentsPlayerRoom">>
<div class="actions">
[[Sleep]]
</div><<run TimePassSeconds(1800,'sleep')>>
<<Image "events/critical/sleep.jpg">>
<p>You are too exhausted to make another step. You sink down on your knees and lay down on the ground. You just want to rest your tired eyes but before you know it you are allready asleep.</p>
<p>You wake up some minutes later, still lying on the ground. How embarassing!</p>
<div class="actions">
[[Stand Up|$currentLocation.id]]
</div><<run setVar("critical.distressCd",TimeWithOffset(0,30))>>
<<set _timeSpendInHospital to Math.ceil(randomNumber(2,4) * 86400)>>
<<run TimePassSeconds(_timeSpendInHospital,'sleep')>>
<<run statsFill()>>
<<Image "events/critical/hospital.jpg">>
<p>
You wake up.
What happened?
How much time passed?
Have you been unconscious?
You body feels as if a truck rolled over it.
You open your eyes.
Apparently you are in an hospital.
</p>
<p>
It doesn't take long before a nurse notices that you are awake.
She calls a doctor and he explains to you, that you had a body system collapse.
You had a lot of luck. You nearly died. Maybe the next time you won't be so lucky.
</p>
<<Actions>>
[[Thank you|HospitalPCPatient]]
<</Actions>><svg width="800" height="800" xmlns="http://www.w3.org/2000/svg" style="margin: 0 auto;display: block;">
<image id="background" href="" height="100%" width="100%"/>
<text id="surname" x="53%" y="51%" style="font-family: Verdana;font-size: 2em;filter:drop-shadow( 0.05em 0.05em 0.1em black);fill:white;"></text>
<text id="firstname" x="50%" y="46%" style="font-family: Verdana;font-size: 2em;filter:drop-shadow( 0.05em 0.05em 0.1em black);fill:white;"></text>
<text id="dob" x="50%" y="58%" style="font-family: Verdana;font-size: 1.5em;filter:drop-shadow( 0.05em 0.05em 0.1em black);fill:white;"></text>
<text id="dod" x="50%" y="62%" style="font-family: Verdana;font-size: 1.5em;filter:drop-shadow( 0.05em 0.05em 0.1em black);fill:white;"></text>
<foreignObject x="45%" y="65%" width="15em" height="35%">
<div xmlns="http://www.w3.org/1999/xhtml">
<span style="font-family: Brush Script MT;font-size: 1.5em;filter:drop-shadow( 0.05em 0.05em 0.1em black);color:white;">
Geliebte Tochter, Schwester und Freundin.<br/>Ruhe in Frieden.
</span>
</div>
</foreignObject>
</svg>
<p>
Another body system failure so short after the last one is too much for you to handle.
You break down and before any paramedic can reach you your spirit has already left your body.
</p>
<<ENDING "dead" "You are dead">>
<<done>>
<<script>>
$("#background").attr("href",mediaPath('events/critical/grave.jpg'));
$("#surname").html(State.variables.pc.name.last);
$("#firstname").html(State.variables.pc.name.first);
$("#dob").html("* "+TimeFormat(State.variables.pc.birthday,"DD.MM.YYYY"));
$("#dod").html("♱ "+TimeFormat(Now(),"DD.MM.YYYY"));
<</script>>
<</done>><<set _npc to NPCs.load()>>
<<if TimeIsLater(_npc.phoneDisabledTil)>>
<p>You call _npc.nameUsed, but nobody picks up the phone. Maybe you should try again later.</p>
<<Actions>>
<<BackC>>
<</Actions>>
<<else>>
<<Dialog "CallDate" "Root" `{participants:{1:NPCs.CID}}`>>
<<DialogLine 1>>Hello $pc.name.first. How nice of you to call me. I was just thinking of you.<</DialogLine>>
<<DialogTopic "Root">>
<<if NextDate(NPCs.CID) != null>>
<<DialogOption "About our upcomming date..." "CallDateDateOptions" "#">>
<</if>>
<<DialogOption "Break up" "Break up">>
<<DialogOptionA "Call me back" "END:CallingDate" null `{debug:true}`>><<set $currentEvent = {npcId:NPCs.CID}>><</DialogOptionA>>
<<DialogOption "Sex! Now!" "END:DateNightHisHomeInside" null `{debug:true}`>>
<<DialogOption "Bye" "END">>
<<DialogTopic "CallDateDateOptions">>
<<DialogOption "Cancel next date" "CallDateDateCancel" null `{favorCost:{npc:NPCs.CID,cost:1}}`>>
<<DialogOption "Never mind" "Root" "#">>
<<DialogTopic "CallDateDateCancel">>
<<run DatesRemoveByNpcId(NPCs.CID)>>
<<DialogLine 0>>I'm afraid I have to cancel it.<</DialogLine>>
<<DialogLine 1>>A pity. I guess we will catch up another time then.<</DialogLine>>
<<DialogOption "Change the topic" "Root">>
<<DialogTopic "Break up">>
<<run NPCs.load(NPCs.CID).stopDating()>>
<<DialogLine 0>>Sorry, but I think we should stop seeing each other. Bye!<</DialogLine>>
<<DialogOption "Hang up" "END">>
<</Dialog>>
<</if>><<if $currentEvent>>
<<set NPCs.CID to $currentEvent.npcId>>
<</if>>
<<set _npc to NPCs.load()>>
<<set _date to _npc.get("dating")>>
<div id="phone">
<<Image "events/ringing-phone.jpg">>
</div>
<<capture _npc>>
<<timed 2s>>
<<replace "#phone" t8n>>
<<Image _npc.image>>
_npc.nameUsed is calling.
<<Actions>>
[[Answer|CallingDateDialog]]
<<link "Don't Answer">>
<<run DateRefuseCall(NPCs.CID)>>
<<addclass "#phone" "notAnswered">>
<<replace "#phone">>
<<Image _npc.image>>
You didn't answer the call from _npc.nameUsed.
<div class="actions">
[[Put phone away|$currentLocation.id]]
</div>
<</replace>>
<</link>>
<</Actions>>
<</replace>>
<</timed>>
<</capture>><<set _npc to NPCs.load()>>
<<set _date to _npc.get("dating")>>
<<Dialog "CallingDateDialog" "Root" `{participants:{1:NPCs.CID}}`>>
<<Image _npc.image>>
<<DialogTopic "Root">>
<<DialogLine 1>>
Hello Darling.
<<if _date.phoneCallsMissed >= 2>>
<br/>Are you allright? I tried to call you several time but you didn't answer.
<br/>Anyways, would you like to go out on a date?
<<else>>
<br/>How about a date?
<</if>>
<</DialogLine>>
<<set _date.phoneCallsMissed = 0>>
<<if SecondsTil({day: $time.getUTCDay(), hour:20,minute:30}) >= 3600>>
<<DialogOption "How about tonight?" "DateSchedule" "#" `{arguments:{"dayOffset":0}}`>>
<</if>>
<<DialogOption "How about tomorrow?" "DateSchedule" "#" `{arguments:{"dayOffset":1}}`>>
<<DialogOption "How about the day after tomorrow?" "DateSchedule" "#" `{arguments:{"dayOffset":2}}`>>
<<DialogOption `"How about "+TimeFormat(TimeWithOffset(0,3),'www')+"?"` "DateSchedule" "#" `{arguments:{"dayOffset":3}}`>>
<<DialogTopic "DateSchedule">>
<<DialogLine 1>>"Fine. When should I pick you up?"<</DialogLine>>
<<CallingDateNightDatePicktimeOption "18:00" `new Date(TimeWithOffset(0,$passageArguments.dayOffset).setUTCHours(18, 0, 0))`>>
<<CallingDateNightDatePicktimeOption "18:30" `new Date(TimeWithOffset(0,$passageArguments.dayOffset).setUTCHours(18, 30, 0))`>>
<<CallingDateNightDatePicktimeOption "19:00" `new Date(TimeWithOffset(0,$passageArguments.dayOffset).setUTCHours(19, 0, 0))`>>
<<CallingDateNightDatePicktimeOption "19:30" `new Date(TimeWithOffset(0,$passageArguments.dayOffset).setUTCHours(19, 30, 0))`>>
<<CallingDateNightDatePicktimeOption "20:00" `new Date(TimeWithOffset(0,$passageArguments.dayOffset).setUTCHours(20, 0, 0))`>>
<<CallingDateNightDatePicktimeOption "20:30" `new Date(TimeWithOffset(0,$passageArguments.dayOffset).setUTCHours(20, 30, 0))`>>
<<DialogTopic "DateScheduled">>
<<switch $dates.last().destination>>
<<case "cinema">>
<<DialogLine 1>>Great. We will be going to the cinema. See you then.<</DialogLine>>
<<case "restaurant">>
<<DialogLine 1>>Great. We will be going to a restaurant. See you then.<</DialogLine>>
<</switch>>
<<DialogOption "See you (Hang up)" "END">>
<</Dialog>><<widget "CallingDateNightDatePicktimeOption">>
<<if TimeDifference(_args[1]) >= 3600>>
<<DialogOptionA _args[0] "DateScheduled" "#">>
<<run $dates.push({type:"datenight",npcId:NPCs.CID,time:_args[1],destination:"restaurant"})>>
<<run console.log($dates)>>
<<set $npcs[NPCs.CID].dating.phoneCooldown = new Date(_args[1].getTime() + 1000 * 22 * 3600)>>
<</DialogOptionA>>
<</if>>
<</widget>><<set _date to $dates[$passageArguments.dateId]>>
<<set NPCs.CID to _date.npcId>>
<<set _npc to NPCs.load()>>
<<run $dates.splice($passageArguments.dateId,1)>>
<<set $date = {returnLocation:$currentLocation.id}>>
<<include "DatePickupDialog">><<set _npc to NPCs.load()>>
<<set _himher to l("himher")>>
<<set _attraction to Arousal.SexualAttractionToNPC(_npc)>>
<<Dialog "DatePickupDialog" "Root" `{participants:{1:NPCs.CID},mode:"flat"}`>>
<h2>Date with _npc.nameUsed</h2>
<<Image _npc.image>>
<<DialogTopic "Root">>
<<DialogLine 1>>Hello $pc.name.first.<</DialogLine>>
<<DialogLine -1>><<L "HeShe">> greets you with a hug.<</DialogLine>>
<<set _attraction to Arousal.SexualAttractionToNPC(_npc)>>
<<switch _date.destination>>
<<case "cinema">>
<<DialogLine 1>>Are you ready to go to the cinema?<</DialogLine>>
<<DialogOption "Yes (Go to the cinema together)" "END:DateStart" "#" `{sexOrientationStress:_attraction.stress.date}`>>
<<case "restaurant">>
<<DialogLine 1>>Are you ready to go to the restaurant?<</DialogLine>>
<<set _dateLabel = "Go to the restaurant together">>
<<set _datePassage = "Restaurant">>
<</switch>>
<p>
<<AttractionToNPC _attraction>>
Dating <<L "himher">>
<<if _attraction.stress.date == 0>>
could be nice.
<<elseif _attraction.stress.date <= 10>>
would feel a bit unfamiliar.
<<elseif _attraction.stress.date <= 20>>
would make you a bit uncomfortable.
<<elseif _attraction.stress.date <= 30>>
would make you uncomfortable.
<<else>>
would make you really uncomfortable.
<</if>>
</p>
<<DialogOption `"Yes ("+_dateLabel+")"` "END:DateStart" "#" `{arguments:{datePassage:_datePassage},sexOrientationStress:_attraction.stress.date}`>>
<<DialogOption "I changed my mind" "DateCancel" "" `{favorCost:{npc:NPCs.CID,cost:2}}`>>
<<DialogOptionA "Break up with _himher" "END:DateBreakUpAndWalkHome">>
<</DialogOptionA>>
<<DialogTopic "DateCancel">>
<<DialogLine 0>>I'm afraid I have to cancel our date.<</DialogLine>>
<<DialogLine 1>>Are you serious?! Do you know how much of my time you just wasted?<</DialogLine>>
<<DialogOptionA "Bye" "END">><<run DatesRemoveByNpcId(NPCs.CID)>><</DialogOptionA>>
<</Dialog>><<set _npc to NPCs.load()>>
<<set _attraction to Arousal.SexualAttractionToNPC(_npc)>>
<<set $date = {npc:{enjoyance:50,enjoyanceChange:0},pc:{enjoyance:_attraction.enjoyance.date,enjoyanceChange:0}}>>
<<include "Date">><<set _npc to NPCs.load()>>
<<set _subPassage to $passageArguments.datePassage>>
<div id="date" class="fullHeight">
<div id="dateContent">
<<include `"Date"+_subPassage`>>
</div>
<div id="dateInfo">
<<set _onclick = "npcInfoDialog('"+NPCs.CID+"');">>
<span @onclick="_onclick">
<<Image _npc.image>>
</span>
<div id="npcInfo" class="characterInfo">
<<set $date.npc.enjoyance = clamp($date.npc.enjoyanceChange + $date.npc.enjoyance,0,100)>>
<<Progressbar $date.npc.enjoyance `{change:$date.npc.enjoyanceChange }`>>
<<set $date.npc.enjoyanceChange = 0>>
</div>
<div id="pcInfo" class="characterInfo">
<<set $date.pc.enjoyance = clamp($date.pc.enjoyanceChange + $date.pc.enjoyance,0,100)>>
<<Progressbar $date.pc.enjoyance `{rightAligned:true,change:$date.pc.enjoyanceChange }`>>
<<set $date.pc.enjoyanceChange = 0>>
</div>
<<Image $pc.body.image>>
</div>
</div><<run _npc.dateCountInc()>>
<<set _himher to l("himher")>>
<<set _hisher to l("hisher")>>
<<set _mobilityDescription = "The two of you head back to "+l("hisher")+" car.">>
<<set _favorsNet = _npc.favors>>
<<if $date.npc.enjoyance < 20>>
<p>_mobilityDescription _npc.nameUsed seems to be upset. You can tell that <<L "heshe">> didn't enjoy your date at all.</p>
<<set _favorsNet -= 2>>
<<FavorLost _npc 2>>
<<elseif $date.npc.enjoyance < 40>>
<p>_mobilityDescription _npc.nameUsed seems to be a little upset. You can tell that <<L "heshe">> didn't enjoy your date too much.</p>
<<FavorLost _npc 1>>
<<set _favorsNet -= 1>>
<<elseif $date.npc.enjoyance <= 60>>
<p>_mobilityDescription _npc.nameUsed seems to be in a decent mood. You can tell that <<L "heshe">> somewhat enjoyed your date.</p>
<<elseif $date.npc.enjoyance <= 80>>
<p>_mobilityDescription _npc.nameUsed seems to be in good mood. You can tell that <<L "heshe">> enjoyed your date.</p>
<<FavorEarned _npc 1>>
<<set _favorsNet += 1>>
<<else>>
<p>_mobilityDescription _npc.nameUsed seems to be in great mood. You can tell that he really enjoyed your date.</p>
<<FavorEarned _npc 2>>
<<set _favorsNet += 2>>
<</if>>
<<if $date.pc.enjoyance < 20>>
<p>This was a horrible date for you.</p>
<<MoodLost 40>>
<<elseif $date.pc.enjoyance < 40>>
<p>You didn't enjoy the date too much.</p>
<<MoodLost 20>>
<<elseif $date.pc.enjoyance <= 60>>
<p>You had a okay time.</p>
<<elseif $date.pc.enjoyance <= 80>>
<p>You had a good time.</p>
<<MoodGain 20>>
<<else>>
<p>You had a great time.</p>
<<MoodGain 40>>
<</if>>
<<set _dateOptions = {
brokenByHim:false,
breakUp:true,
home: true,
driveHome: true,
hisHome:false
}>>
<<if _favorsNet < 0>>
<<set _dateOptions = {
brokenByHim:true,
breakUp:false,
home: false,
driveHome: false,
hisHome:false
}>>
<p>After a few minutes of silence, he tells you that he don't want to continue dating you.</p>
<<elseif _favorsNet == 0>>
<p>After a few minutes of silence, <<L "heshe">> tells you that <<L "heshe">> isn't sure if dating you is the thing he needs right now.</p>
<<elseif _npc.sexCount > 0>>
<<set _dateOptions.hisHome = "appropriate">>
<p>
You have been at <<L "hisher">> place before. It would be a common thing for you to go there again.
<<L "HeShe">> asks you, if you would like to have a coffee at <<L "hisher">> place.
</p>
<<elseif _npc.dating.dates == 1>>
<<set _dateOptions.hisHome = "tooearly">>
<p>
This was your first date with <<L "himher">> and <<L "heshe">> apparently thinks that it wouldn't be appropriate to take the next step yet.
You might suggest doing it, though.
</p>
<<elseif _npc.dating.dates == 2>>
<<set _dateOptions.hisHome = "early">>
<p>
This was your second date with <<L "himher">> and <<L "heshe">> apparently thinks that it wouldn't be appropriate to take the next step yet.
You might suggest doing it, though.
</p>
<<elseif _npc.dating.dates == 3>>
<<set _dateOptions.hisHome = "appropriate">>
<p>
This was your third date with <<L "himher">> and <<L "heshe">> apparently thinks that it would be appropriate to take the next step.
<<L "HeShe">> asks you, if you would like to have a coffee at <<L "hisher">> place.
</p>
<<else>>
<<set _dateOptions.hisHome = "required">>
<p>
You have gone on several dates with <<L "himher">> and <<L "heshe">> starts to wonder why you won't go to <<L "hisher">> place with <<L "himher">>.
</p>
<</if>>
<<set _attraction to Arousal.SexualAttractionToNPC(_npc)>>
<p>
<<AttractionToNPC _attraction>>
Getting intimate with <<L "himher">>
<<if _attraction.stress.sex == 0>>
could be nice.
<<elseif _attraction.stress.date <= 20>>
would make you a bit uncomfortable.
<<elseif _attraction.stress.date <= 40>>
would make you uncomfortable.
<<elseif _attraction.stress.date <= 60>>
would make you really uncomfortable.
<<else>>
would make you incredibly uncomfortable.
<</if>>
</p>
<<Actions>>
<<if _dateOptions.brokenByHim>>
<<ActionA "Get home alone" $date.returnLocation>>
<</ActionA>>
<</if>>
<<if _dateOptions.breakUp>>
<<ActionA "Break up and get home alone" DateBreakUpAndWalkHome>>
<</ActionA>>
<</if>>
<<if _dateOptions.home>>
<<if _dateOptions.hisHome == "required">>
<<ActionA "Get home alone" "DateWalkHome" `{favorCost:{npc:NPCs.CID,cost:1}}`>><</ActionA>>
<<else>>
<<ActionA "Get home alone" "DateWalkHome">><</ActionA>>
<</if>>
<</if>>
<<if _dateOptions.driveHome>>
<<if _dateOptions.hisHome == "required">>
<<ActionA "Let _himher drive you home" "DateDriveHome" `{favorCost:{npc:NPCs.CID,cost:1}}`>><</ActionA>>
<<else>>
<<ActionA "Let _himher drive you home" "DateDriveHome">><</ActionA>>
<</if>>
<</if>>
<<if _dateOptions.hisHome>>
<<if _dateOptions.hisHome == "tooearly">>
<<ActionA "Let _himher drive you to _hisher home" "DateNightHisHome" `{stress:30,sexOrientationStress:_attraction.stress.sex}`>><</ActionA>>
<<elseif _dateOptions.hisHome == "early">>
<<ActionA "Let _himher drive you to _hisher home" "DateNightHisHome" `{stress:10,sexOrientationStress:_attraction.stress.sex}`>><</ActionA>>
<<else>>
<<ActionA "Let _himher drive you to _hisher home" "DateNightHisHome" `{sexOrientationStress:_attraction.stress.sex}`>><</ActionA>>
<</if>>
<</if>>
<</Actions>><<Image "events/date/breakUp.jpg">>
<<run NPCs.load().stopDating()>>
<p>
You tell <<L "himher">> that you don't want to continue dating <<L "himher">>.
<<L "HeShe">> seems to be relieved. Apparently <<L "heshe">> feels the same way.
You part with some friendly words.
</p>
<<TODO>>
Make him react differently depending on how long you have been dating and how much he likes you.
<</TODO>>
<<Actions>>
[[Leave|$date.returnLocation]]
<</Actions>><<set NPCs.load().dateNextExpected = 2.5>>
<<switch NPCs.load().gender>>
<<case "f">>
<<Image "events/date/hugF.jpg">>
<<default>>
<<Image "events/date/hug.jpg">>
<</switch>>
<p>
You hug <<L "himher">> goodbye. <<L "HeShe">> promises to call you soon.
</p>
<<Actions>>
[[Leave|$date.returnLocation]]
<</Actions>><<run TimePassSecondsRand(1800)>>
<<set NPCs.load().dateNextExpected = 2.5>>
<<Image "events/date/driveHome.jpg">>
<p>
The two of you get into <<L "hisher">> car and <<L "heshe">> drives you home. After you arrive you wish <<L "himher">> goodbye and <<L "heshe">> promises to call you soon.
</p>
<<Actions>>
[[Leave|$home]]
<</Actions>>
<<DEBUG>>
<<print JSON.stringify(NPCs.load().dating)>>
<</DEBUG>><<set _npc to NPCs.load()>>
<<Image "events/date/cinema.jpg">>
<div id="description">
<p>You go to the cinema. _npc.nameUsed pays for the cards and you two take your seats. The movie is a romantic comedy.</p>
</div>
<div class="actions" id="dateActions">
</div>
<<set _randomEvent to randomInt(0,2)>>
<<done>>
<<if _randomEvent === 0>>
<<append "#description">>
<p>After about half an hour _npc.nameUsed moans quitely and starts to move his arm up. Apparantly he want to make the classic move and put his arm around you.</p>
<</append>>
<<append "#dateActions">>
<<link "Let him and smile at him">>
<<set $dateEnjoyance += 30>>
<<replace "#dateActions">><<include "DateCinema2">><</replace>>
<<append "#description">>
<p>TODO</p>
<</append>>
<</link>>
<<link "Let him">>
<<set $dateEnjoyance += 20>>
<<replace "#dateActions">><<include "DateCinema2">><</replace>>
<<append "#description">>
<p>TODO</p>
<</append>>
<</link>>
<<link "Prevent him playfully">>
<<set $dateEnjoyance += 0>>
<<replace "#dateActions">><<include "DateCinema2">><</replace>>
<<append "#description">>
<p>TODO</p>
<</append>>
<</link>>
<<link "Prevent him scornfully">>
<<set $dateEnjoyance -= 30>>
<<replace "#dateActions">><<include "DateCinema2">><</replace>>
<<append "#description">>
<p>TODO</p>
<</append>>
<</link>>
<</append>>
<<else>>
<<append "#dateActions">>
<<link "Watch Movie together">>
<<set $dateEnjoyance += 0>>
<<replace "#dateActions">><<include "DateCinema2">><</replace>>
<<append "#description">>
<p>TODO</p>
<</append>>
<</link>>
<</append>>
<</if>>
<</done>><<run TimePassSeconds(7200)>>
<<link "Continue">>
<<append "#description">>
<p>You finish watching the movie. Afterwards you and _npc.nameUsed meet outside of the cinema hall.</p>
<</append>>
<<run TimePassSeconds(1800)>>
<<replace "#dateActions">>
[[Continue|DateEnd]]
<</replace>>
<</link>><h2>His home</h2>
<<set _npc to NPCs.load()>>
<<set _hisHome = _npc.home>>
<<Image _hisHome.imageOutside>>
<p>The two of you get into <<L "hisher">> car and before long your arrive at <<L "hisher">> place.</p>
<div class="actions" id="dateActions">
[[Enter|DateNightHisHomeInside]]
</div><<set _npc to NPCs.load()>>
<<switch _npc.gender>>
<<case "f">>
<<Image "events/sex/startF.jpg">>
<<default>>
<<Image "events/sex/startM.jpg">>
<</switch>>
<p>
Once inside it becomes clear that <<L "heshe">> wants to get intimate with you.
</p>
<<switch _npc.gender>>
<<case "f">>
<<if SexHistory.sexWomen == 0>>
<p>You never had sex as a girl before. This is scary and exciting at the same time.</p>
<</if>>
<<default>>
<<if SexHistory.sexMen == 0>>
<p>You never had sex as a man before. This is scary and exciting at the same time.</p>
<</if>>
<</switch>>
<<Actions>>
[["Have Sex with "+_npc.nameUsed|SexStart]]
[["Make up an excuse and leave"|DateWalkHome]]
<</Actions>><<run TimePassSecondsRand(1800)>>
<<set $date.returnLocation = "Somewhere">>
<<Image "events/date/restaurantMed(0).jpg">>
<p>
The two of you drive in <<L "hisher">> car to a nearby restaurant.
<<if _npc.traits.includes("gentleman")>>
<<set $date.pc.enjoyanceChange = 5>>
<<L "HeShe">> holds the door open for you and once inside he makes sure that <<L "heshe">> takes <<L "hisher">> seat after you sat down yourself.
<<if _npc.knownTraits.includes("gentleman")>>
Since you already know that <<L "heshe">> is a <<Trait "gentleman">>, you are not surprised.
<<else>>
<<run _npc.knownTraitsAdd("gentleman")>>
<<L "HeShe">> really seems to be an old-school <<Trait "gentleman">>.
<</if>>
<<elseif _npc.traits.includes("boor")>>
<<set $date.pc.enjoyanceChange = -5>>
<<L "HeShe">> walks into the door wihtout waiting for you. When you reach your table <<L "heshe">> already sat down and makes a snide remark about women being slow.
<<if _npc.knownTraits.includes("boor")>>
Since you already know that <<L "heshe">> is a <<Trait "boor">>, you are not surprised.
<<else>>
<<run _npc.knownTraitsAdd("boor")>>
<<L "HeShe">> really seems to be a <<Trait "boor">>.
<</if>>
<<else>>
You enter the restaurant and sit down at your table together.
<</if>>
</p>
<<set _eventId = [
{value:"wine",weight:0},
{value:"-",weight:100}
].randomWeighted()>>
<<switch _eventId>>
<<case "-">>
<<include "DateRestaurantMenuOptions">>
<</switch>><p>
Shortly after, a waiter appears to take your order.
You have four options:
<ul>
<li>Salad: inexpensive and good for your body.</li>
<li>Fish: fresh from the baltic sea for an average price.</li>
<li>Steak: good quality for an above-average price.</li>
<li>Truffle pasta: expensive and delicious.</li>
</ul>
</p>
<<Actions>>
<<ActionA "Salad" "Date" `{arguments:{consumable:"salad",datePassage:"RestaurantOrder"}}`>><</ActionA>>
<<ActionA "Fish" "Date" `{arguments:{consumable:"fish",datePassage:"RestaurantOrder"}}`>><</ActionA>>
<<ActionA "Steak" "Date" `{arguments:{consumable:"steak",datePassage:"RestaurantOrder"}}`>><</ActionA>>
<<ActionA "Truffle pasta" "Date" `{arguments:{consumable:"trufflePasta",datePassage:"RestaurantOrder"}}`>><</ActionA>>
<<ActionA `"Let _npc.nameUsed choose"` "Date" `{arguments:{consumable:"him",datePassage:"RestaurantOrder"}}`>><</ActionA>>
<</Actions>><<run TimePassSecondsRand(120)>>
<<Image "events/date/waiter.jpg">>
<p>
<<switch $passageArguments.consumable>>
<<case "salad">>
You decide to take the salad.
<<case "fish">>
You decide to take the fish.
<<case "steak">>
You decide to take the steak.
<<if _npc.traits.includes("bitch")>>
<<set $date.pc.enjoyanceChange = -20 >>
_npc.nameUsed tells you that she wished that she had enough body confidence to consume that many calories.
<<LearnTrait "bitch">>
<<elseif _npc.traits.includes("stingy")>>
<<set $date.npc.enjoyanceChange = -20>>
<<set $date.pc.enjoyanceChange = -10>>
_npc.nameUsed doesn't seem to be happy about your choice.
After the waiter is gone <<L "heshe">> tells you that the fish would have been a cheaper option.
<<if _npc.knownTraits.includes("stingy")>>
You knew that <<L "heshe">> is <<Trait "stingy">>, therefore you are not surprised.
<<else>>
<<run _npc.knownTraitsAdd("stingy")>>
<<L "HeShe">> seems to be really <<Trait "stingy">>.
<</if>>
<</if>>
<<case "trufflePasta">>
You decide to take the truffle pasta.
<<if _npc.traits.includes("generous")>>
<<set $date.npc.enjoyanceChange = 10>>
_npc.nameUsed grins and tells you that <<L "heshe">> his happy that you try out something you usually wouldn't try for financial reasons.
<<L "heshe">> doesn't mind the price.
<<LearnTrait "generous">>
<<elseif _npc.traits.includes("stingy")>>
<<set $date.npc.enjoyanceChange = -30>>
<<set $date.pc.enjoyanceChange = -30>>
<<set $passageArguments.consumable to "fish">>
_npc.nameUsed makes a fake laugh and tells the waiter that you were joking and that you're getting the fish.
Once the waiter is gone <<L "heshe">> tells you that <<L "heshe">> doesn't want you to waste <<L "hisher">> money.
<<if _npc.knownTraits.includes("stingy")>>
Since you knew that <<L "heshe">> is <<Trait "stingy">>, you could have expected that.
<<else>>
<<run _npc.knownTraitsAdd("stingy")>>
<<L "HeShe">> seems to be really <<Trait "stingy">>.
<</if>>
<<else>>
<<set $date.npc.enjoyanceChange = -10>>
<<set $date.pc.enjoyanceChange = -10>>
_npc.nameUsed doesn't seem to be happy about your choice.
After the waiter is gone <<L "heshe">> tells you that the fish would have been a cheaper option.
<</if>>
<<case "him">>
<<set $date.npc.enjoyanceChange = 10>>
You ask _npc.nameUsed what <<L "heshe">> could recommend and <<L "heshe">> picks
<<if _npc.traits.includes("generous")>>
<<set $passageArguments.consumable to "trufflePasta">>
the truffle pasta. <<L "HeShe">> tells you that <<L "heshe">> wants you to try out something you usually wouldn't try for financial reasons.
<<if _npc.knownTraits.includes("generous")>>
You knew that <<L "heshe">> is <<Trait "generous">>, therefore you are not surprised.
<<else>>
<<run _npc.knownTraitsAdd("generous")>>
<<L "HeShe">> seems to be really <<Trait "generous">>.
<</if>>
<<elseif _npc.traits.includes("bitch")>>
<<set $passageArguments.consumable to "salad">>
the salad.
<<elseif _npc.traits.includes("stingy")>>
<<set $passageArguments.consumable to "fish">>
the fish.
<<else>>
<<set $passageArguments.consumable to "steak">>
the steak.
<</if>>
<</switch>>
</p>
<p>
You have some time before the meal arrives.
</p>
<<include "DateTalkOptions">><<Actions>>
<<ActionA "Talk about yourself" "Date" `{arguments:{talk:"you",datePassage:"Talk"}}`>><</ActionA>>
<<ActionA `"Let "+l("himher")+" talk"` "Date" `{arguments:{talk:"he",datePassage:"Talk"}}`>><</ActionA>>
<<ActionA `"Give "+l("himher")+" compliments"` "Date" `{arguments:{talk:"compliments",datePassage:"Talk"}}`>><</ActionA>>
<</Actions>><<run TimePassSecondsRand(3600)>>
<<if _npc.gender == "f">>
<<Image "events/date/restaurantTalkF.jpg">>
<<else>>
<<Image "events/date/restaurantTalk.jpg">>
<</if>>
<<switch $passageArguments.talk>>
<<case "you">>
<<set $date.pc.enjoyanceChange = 15>>
<p>
You talk about yourself for most of the time.
Your family, your friends, your daily experiences and your hobbies:
_npc.nameUsed has a few opportunities to provide you with keywords to change topics, but that's all <<L "heshe">> says.
</p>
<<case "he">>
<p>
<<L "HeShe">> talks about himself for most of the time.
<<L "HisHer">> family, <<L "hisher">> friends, his daily experiences and his hobbies:
You have a few opportunities to provide <<L "himher">> with keywords to change topics, but that's all you say.
<<if _npc.traits.includes("narcissist")>>
<<set $date.npc.enjoyanceChange = 20>>
_npc.nameUsed seems to enjoy the attention <<L "heshe">> gets from you.
<<LearnTrait "narcissist">>
<<else>>
<<set $date.npc.enjoyanceChange = 10>>
<</if>>
</p>
<<case "compliments">>
<<set $date.npc.enjoyanceChange = 15>>
<<set $date.pc.enjoyanceChange = -5>>
<p>
You start talking about a topic you think <<L "heshe">> likes.
From time to time you insert a compliment while trying to make the conversation as comfortable for <<L "himher">> as possible.
<<if _npc.traits.includes("narcissist")>>
<<set $date.npc.enjoyanceChange = 30>>
_npc.nameUsed seems to greatly enjoy the attention <<L "heshe">> gets from you.
<<LearnTrait "narcissist">>
<<elseif _npc.traits.includes("distrusting")>>
<<set $date.npc.enjoyanceChange = -10>>
<<set $date.pc.enjoyanceChange = -10>>
_npc.nameUsed questions every claim you make about <<L "himher">>. Is <<L "heshe">> really intelligent? Is <<L "heshe">> really attractive? Or are you telling a fib?
<<LearnTrait "distrusting">>
<<else>>
<<set $date.npc.enjoyanceChange = 10>>
<</if>>
</p>
<</switch>>
<<Actions>>
<<ActionA "Continue" "Date" `{arguments:{datePassage:"RestaurantEat"}}`>><</ActionA>>
<</Actions>><<run TimePassSecondsRand(1800)>>
<<set _npc to NPCs.load()>>
<<set _fun = 0>>
<<switch $passageArguments.consumable>>
<<case "fish">>
<<set $date.pc.enjoyanceChange = -5>>
<<set _consumable to consumables["rest_fish"]>>
<<Image _consumable.image>>
<<set Body.consume("rest_fish")>>
<p>Your fish arrives and it smells good enough to eat it. While eating it you find many fishbones in it and the garnish is rather uninspired.</p>
<<case "salad">>
<<set $date.pc.enjoyanceChange = -10>>
<<set _consumable to consumables["salad"]>>
<<Image _consumable.image>>
<<set Body.consume("salad")>>
<p>Your salad arrives. There is only little variety in the vegetables and the dressing tastes weird.</p>
<<case "steak">>
<<set $date.pc.enjoyanceChange = 5>>
<<set _consumable to consumables["rest_steak"]>>
<<Image _consumable.image>>
<<set Body.consume("rest_steak")>>
<p>Your steak arrives. It tastes good and the side dish is also more than acceptable.</p>
<<case "trufflePasta">>
<<set $date.pc.enjoyanceChange = 20>>
<<set _consumable to consumables["rest_trufflePasta"]>>
<<Image _consumable.image>>
<<set Body.consume("rest_trufflePasta")>>
<p>Your truffle pasta arrives and it smells delicious. And the taste is even better.</p>
<</switch>>
<<set Body.consume("water",{spendTime:false})>>
<<Actions>>
<<ActionA "Finish" "Date" `{time:600,arguments:{datePassage:"RestaurantFinish"}}`>><</ActionA>>
<</Actions>><<run TimePassSecondsRand(1800)>>
<<if _npc.gender == "f">>
<<Image "events/date/restaurantBillF.jpg">>
<<else>>
<<Image "events/date/restaurantBill.jpg">>
<</if>>
<p>
Youn continue you conversation from before. After about half an hour, the bill arrives, and _npc.nameUsed takes out <<L "hisher">> credit card to pay for it.
<<if randomInt(1,100) <= 30>>
You notice that <<L "heshe">> gives the waiter
<<if _npc.traits.includes("stingy")>>
no tip.
<<LearnTrait "stingy">>
<<elseif _npc.traits.includes("generous")>>
a bigger than average tip.
<<LearnTrait "generous">>
<<else>>
a reasonable tip.
<</if>>
<</if>>
</p>
<<Actions>>
<<ActionA "Leave" "Date" `{arguments:{datePassage:"EndHub"}}`>><</ActionA>>
<</Actions>><<set _npc to NPCs.load()>>
<<Image "events/date/restaurantWater.jpg">>
<p>
You order a bottle of water and two glasses.
After the water arrives the two of you make a toast and take a sip.
<<run Body.consume("water")>>
</p>
<<include "DateRestaurantMenuOptions">><<set _npc to NPCs.load()>>
<<Image "events/date/resturantWine.jpg">>
<p>
You order two glasses of wine.
<<if _npc.traits.includes("stingy")>>
_npc.nameUsed doesn't seem to be too happy about your decision.
The wine arrives and after the toast and the first sip he complains about the taste being rather bad for the high price.
<<if _npc.knownTraits.includes("stingy")>>
You knew that he is stingy, therefore you are not surprised.
<<else>>
<<run _npc.knownTraitsAdd("stingy")>>
He seems to be really stingy.
<</if>>
<<else>>
After the wine arrives the two of you make a toast and take a sip. The wine tastes pretty good.
<</if>>
<<run Body.consume("wineRed")>>
</p>
<<include "DateRestaurantMenuOptions">><<set _npc to NPCs.load()>>
<<if _npc.traits.includes("stingy")>>
<<Image "events/date/restaurantWater.jpg">>
<<set _d = "_npc.nameUsed orders a bottle of water and two glasses.">>
<<run Body.consume("water")>>
<<else>>
<<Image "events/date/resturantWine.jpg">>
<<set _d = "_npc.nameUsed orders two glasses of wine.">>
<<run Body.consume("wineRed")>>
<</if>>
<p>_d After it arrives, the two of you make a toast and take a sip.</p>
<<include "DateRestaurantMenuOptions">><<set NPCs.CID = NPCs.freeId("randomDude")>>
<<set _npc to NPCs.generate(NPCs.CID,{gender:["f","m"].random(),age:randomInt(19,25),home:GenericHomes.generate().id,archetype:"date"})>>
<<include "MeetRandomDudeDialog">><<set _npc to NPCs.load()>>
<<set _himher to l("himher")>>
<<Dialog "MeetRandomDudeDialog" "Root" `{participants:{1:NPCs.CID},passage:"MeetRandomDudeDialog",mode:"flat"}`>>
<<Image _npc.image>>
<<DialogLine 1>>Hello.<</DialogLine>>
<<DialogLine -1>>
A
<<switch _npc.gender>>
<<case "f">>
woman
<<default>>
man
<</switch>>
has approached you. <<L "HeShe">> seems to be in <<L "hisher">>
<<if _npc.age < 20>>
late teens.
<<elseif _npc.age < 24>>
early twenties.
<<elseif _npc.age < 28>>
twenties.
<<elseif _npc.age < 30>>
late twenties.
<<elseif _npc.age < 40>>
thirties.
<<elseif _npc.age < 50>>
fourties.
<<elseif _npc.age < 60>>
fifties.
<<elseif _npc.age < 70>>
sixtees.
<<elseif _npc.age < 80>>
seventess.
<<elseif _npc.age < 90>>
eightees.
<<elseif _npc.age < 100>>
ninetees.
<<else>>
last years.
<</if>>
<</DialogLine>>
<<DialogLine 1>>You have really sparked my interest.<</DialogLine>>
<<DialogLine -1>><<L "HeShe">> smiles at you.<</DialogLine>>
<<DialogLine 1>>I was wondering if we could meet each other some time? We could to get to know each other.<</DialogLine>>
<<DialogLine -1>><<L "HeShe">> hands you a paper with her phone number on it.<</DialogLine>>
<<DialogLine 1>>I am _npc.nameUsed, by the way.<</DialogLine>>
<<DialogTopic "Root">>
<<set _attraction to Arousal.SexualAttractionToNPC(_npc)>>
<p>
<<AttractionToNPC _attraction>>
Dating <<L "himher">>
<<if _attraction.stress.date == 0>>
could be nice.
<<elseif _attraction.stress.date <= 10>>
would feel a bit unfamiliar.
<<elseif _attraction.stress.date <= 20>>
would make you a bit uncomfortable.
<<elseif _attraction.stress.date <= 30>>
would make you uncomfortable.
<<else>>
would make you really uncomfortable.
<</if>>
</p>
<<DialogOption `"Give _himher your number"` "Give him your number" "" `{sexOrientationStress:_attraction.stress.date}`>>
<<DialogOptionA "Reject _himher" "END">>
<<run NPCs.delete(NPCs.CID)>>
<<set $actions.meetRandomDude.disabledTil to TimeWithOffset(3600)>>
<</DialogOptionA>>
<<DialogOptionA "Reject _himher and ignore all approaches for 24 hours" "END">>
<<run NPCs.delete(NPCs.CID)>>
<<set $actions.meetRandomDude.disabledTil to TimeWithOffset(0,1)>>
<</DialogOptionA>>
<<DialogOptionA "Reject _himher and ignore all approaches for 7 days" "END">>
<<run NPCs.delete(NPCs.CID)>>
<<set $actions.meetRandomDude.disabledTil to TimeWithOffset(0,7)>>
<</DialogOptionA>>
<<DialogTopic "Give him your number">>
<<run _npc.startDating()>>
<<set $actions.meetRandomDude.disabledTil to TimeWithOffset(3600)>>
<<DialogLine -1>>You agree and write down your number on a piece of paper which you afterwards hand over.<</DialogLine>>
<<DialogLine 1>>Thank you. I will call you soon.<</DialogLine>>
<<DialogOption "Goodbye" "END">>
<</Dialog>><<set _npc to NPCs.load()>>
<<set $sex = {npc:{enjoyance:50,enjoyanceChange:0},pc:{enjoyance:50,enjoyanceChange:0}}>>
<<set $passageArguments.sexState to "Foreplay">>
<<include "Sex">><<set $displayMode = "SUN_ONLY">>
<<set _npc to NPCs.load()>>
<div id="date" class="fullHeight">
<div id="dateContent">
<<set _subPassage to $passageArguments.sexState>>
<<include `"Sex"+_subPassage`>>
</div>
<div id="dateInfo">
<<set _onclick = "npcInfoDialog('"+NPCs.CID+"');">>
<span @onclick="_onclick">
<<Image _npc.image>>
</span>
<div id="npcInfo" class="characterInfo">
<<set $sex.npc.enjoyance = clamp($sex.npc.enjoyanceChange + $sex.npc.enjoyance,0,100)>>
<<Progressbar $sex.npc.enjoyance>>
<<set $sex.npc.enjoyanceChange = 0>>
</div>
<div id="pcInfo" class="characterInfo">
<<set $sex.pc.enjoyance = clamp($sex.pc.enjoyanceChange + $sex.pc.enjoyance,0,100)>>
<<Progressbar $sex.pc.enjoyance `{rightAligned:true}`>>
<<set $sex.pc.enjoyanceChange = 0>>
</div>
<<Image $pc.body.image>>
</div>
</div><h2>Foreplay</h2>
<<Actions>>
<<if _npc.gender == "m">>
<<ActionA "Blow him" "Sex" `{arguments:{sexState:"ForeplayBJ"}}`>><</ActionA>>
<</if>>
<<ActionA "Strip" "Sex" `{arguments:{sexState:"ForeplayStrip"}}`>><</ActionA>>
<<ActionA "Skip the foreplay" "Sex" `{arguments:{sexState:"ForeplayNone"}}`>><</ActionA>>
<</Actions>><<Image `"events/sex/foreplay/bj("+randomInt(0,1)+").gif"`>>
<p>You slowly pull down _npc.nameUsed's pants and underpants. Then you get on your knees and start licking and sucking his penis.</p>
<<if _npc.sexPreferences.foreplayEnjoy.contains("bj")>>
<<set $sex.npc.enjoyanceChange = 25>>
<p class="good"><<Gender "He" _npc>> seems to really enjoy your blowjob. He moans while he holds your head with one hand.</p>
<<elseif _npc.sexPreferences.foreplayHate.contains("bj")>>
<<set $sex.npc.enjoyanceChange = -25>>
<p class="bad">Somehow you doesn't manage to get <<Gender "him" _npc>> hard. He really doesn't seem to enjoy receiving a blowjob.</p>
<<else>>
<<set $sex.npc.enjoyanceChange = 10>>
<p><<Gender "He" _npc>> seems to like the experience, but is not enthusiastic about it. Maybe he would like something else for foreplay better?</p>
<</if>>
<<include "SexMainOptions">><<Image "events/sex/foreplay/none.gif">>
<p>You lay down on the bed, winking seductively for _npc.nameUsed to signal <<Gender "him" _npc>> that you are not interested in foreplay right now.</p>
<<if _npc.sexPreferences.foreplayEnjoy.contains("none")>>
<<set $sex.npc.enjoyanceChange = 5>>
<p class="good"><<Gender "He" _npc>> eagerly walks over to you. <<Gender "He" _npc>> obviously doesn't like foreplay very much.</p>
<<elseif _npc.sexPreferences.foreplayHate.contains("none")>>
<<set $sex.npc.enjoyanceChange = -25>>
<p class="bad"><<Gender "He" _npc>> seems to be very dissapointed. It appears as if foreplay is important to him.</p>
<<else>>
<<set $sex.npc.enjoyanceChange = -5>>
<p><<Gender "He" _npc>> seems to be a tiny bit dissapointed that there won't be any foreplay. But <<Gender "He" _npc>> walks over to you eagerly nevertheless.</p>
<</if>>
<<include "SexMainOptions">><<Image "events/sex/foreplay/_striptease1.webp">>
<p>You start dancing seductivle for _npc.nameUsed.</p>
<<if _npc.sexPreferences.foreplayEnjoy.contains("strip")>>
<<set $sex.npc.enjoyanceChange = 25>>
<p class="good"><<Gender "He" _npc>> seems to enjoy your show very much.</p>
<<elseif _npc.sexPreferences.foreplayHate.contains("strip")>>
<<set $sex.npc.enjoyanceChange = -25>>
<p class="bad"><<Gender "He" _npc>> doesn't seem to like your show.</p>
<<else>>
<<set $sex.npc.enjoyanceChange = 10>>
<p><<Gender "He" _npc>> seems to like what <<Gender "he" _npc>> is seeing, but not enthusiastically so. Maybe <<Gender "he" _npc>> would like something else for foreplay better?</p>
<</if>>
<<include "SexMainOptions">><<Actions>>
<<if _npc.gender =="m">>
<<ActionA "Sex" "Sex" `{arguments:{sexState:"Main"}}`>><</ActionA>>
<<else>>
<<ActionA "Sex" "Sex" `{arguments:{sexState:"MainF"}}`>><</ActionA>>
<</if>>
<</Actions>><<run TimePassSecondsRand(3600)>>
<<Image "events/sex/sex/missionary(0).gif">>
<p>
He pushes you on your back and leans himself over you.
You feel his erect penis circling your vulva.
Then pressure. Your lips open for him as he pushes himself inside of you.
Slow at first, then quicker and quicker.
</p>
<<set _penis = _npc.penis>>
<<set _penetration = Body.penetrate(_penis)>>
<<set _npcBaseEnjoyance = 50>>
<<set $sex.npc.enjoyanceChange = _penetration.pleasureObjectGirth + _npcBaseEnjoyance>>
<<set $sex.pc.enjoyanceChange = _penetration.pleasurePCGirth>>
<p>
<<PenisSizeComparison _penetration.girthDescription>>
This
<<switch _penetration.pleasureObjectGirth>>
<<case 40 30>>
greatly increases
<<case 20>>
increases
<<case 10 5>>
somewhat increases
<<case 0>>
doesn't affect
<<case -10 -5>>
somewhat decreases
<<case -20>>
decreases
<<case -30 -40>>
greatly decreases
<</switch>>
his pleasure and
<<switch _penetration.pleasurePCGirth>>
<<case 40 30>>
greatly increases
<<case 20>>
increases
<<case 10 5>>
somewhat increases
<<case 0>>
doesn't affect
<<case -10 -5>>
somewhat decreases
<<case -20>>
decreases
<<case -30 -40>>
greatly decreases
<</switch>>
your pleasure.
</p>
<<Actions>>
<<ActionA "Continue" "Sex" `{arguments:{sexState:"Finish"}}`>><</ActionA>>
<</Actions>><<run TimePassSecondsRand(3600)>>
<<set $sex.npc.enjoyanceChange = 25>>
<<set $sex.pc.enjoyanceChange = 25>>
<<Image "events/sex/sex/scissor(0).gif">>
<p>You place yourselves in front of each other and start pushing your vaginas against each other.</p>
<<Actions>>
<<ActionA "Continue" "Sex" `{arguments:{sexState:"Finish"}}`>><</ActionA>>
<</Actions>><<run SexHistory.sexLog(NPCs.CID)>>
<<TODO>>Fill Sex-Object<</TODO>>
<<switch _npc.gender>>
<<case "f">>
<<Image "events/sex/sex/scissor(0).gif">>
<<set _kinsey = 0>>
<<default>>
<<Image "events/sex/sex/missionaryCum(0).gif">>
<<set _kinsey = 6>>
<</switch>>
<<if $sex.pc.enjoyance == 100>>
<p>
The sex is great for you. You are so horny that you cum quickly. You can't help but screaming out loudly while you do so.
</p>
<<MoodGain 50>>
<<SexualPreferenceChange _kinsey 100>>
<<elseif $sex.pc.enjoyance >= 80>>
<p>
You really enjoy the sex. It takes a short while, but then you cum with a single loud moan.
</p>
<<MoodGain 30>>
<<SexualPreferenceChange _kinsey 75>>
<<elseif $sex.pc.enjoyance >= 60>>
<p>
The sex feels good. Good, not great. To your surprise, it is still enough to get you off. You cum with a single sigh.
</p>
<<MoodGain 20>>
<<SexualPreferenceChange _kinsey 50>>
<<elseif $sex.pc.enjoyance >= 40>>
<p>
The sex is okay for you. It doesn't get you off, but it is still nice, so you don't consider it a waste of time.
</p>
<<SexualPreferenceChange _kinsey 10>>
<<else>>
<p>
<<set _counter to randomInt(21,49)>>
_counter. <<print (_counter + 1)>>. <<print (_counter + 2)>>. You are counting his thrusts. You really don't enjoy yourself and just want the sex to be over soon. <<print (_counter + 3)>>.
</p>
<<MoodLost 20>>
<</if>>
<<if $sex.npc.enjoyance == 100>>
<p>
<<switch _npc.gender>>
<<case "f">>
_npc.nameUsed obviously enjoys the sex very much.
Her moans get louder and louder, until, with a final loud scream, she cums.
<<default>>
_npc.nameUsed obviously enjoys the sex very much, thrusting himself into you again and again.
His moans get louder and louder, until, with a final push, he erupts inside of you.
<</switch>>
</p>
<<FavorEarned _npc 2>>
<<elseif $sex.npc.enjoyance >= 80>>
<p>
<<switch _npc.gender>>
<<case "f">>
_npc.nameUsed obviously enjoys the sex.
Her moans get louder and louder, until, with a final scream, she cums.
<<default>>
_npc.nameUsed obviously enjoys the sex, thrusting himself into you again and again.
His moans get louder and louder, until, with a final push, he erupts inside of you.
<</switch>>
</p>
<<FavorEarned _npc 1>>
<<elseif $sex.npc.enjoyance >= 60>>
<p>
<<switch _npc.gender>>
<<case "f">>
_npc.nameUsed apparently enjoys the sex.
Her moans get louder and louder, until, with a loud scream, she cums.
<<default>>
_npc.nameUsed apparently enjoys the sex, thrusting himself into you again and again.
His moans get louder and louder, until, with a final push, he erupts inside of you.
<</switch>>
</p>
<<FavorEarned _npc 1>>
<<elseif $sex.npc.enjoyance >= 40>>
<p>
<<switch _npc.gender>>
<<case "f">>
Maybe _npc.nameUsed isn't focused enough or maybe she is tired. No matter what's the reason, it feels as if she doesn't get completely aroused.
She performs with little motivation until, with a final moan, she finally manages to cum.
<<default>>
Maybe _npc.nameUsed isn't focused enough or maybe he is tired. No matter what's the reason, it feels as if he doesn't get completely hard.
He pushes himself inside of you with little motivation until, with a final push, he finally manages to cum inside of you.
<</switch>>
</p>
<<else>>
<p>
<<switch _npc.gender>>
<<case "f">>
Maybe _npc.nameUsed isn't focused enough or maybe she is tired. No matter what's the reason, it feels as if she doesn't get completely aroused.
She performs with little motivation. After a while she just finishes. Apparently she enjoyed the sex so little she didn't feel the need to finish.
<<default>>
Maybe _npc.nameUsed isn't focused enough or maybe he is tired. No matter what's the reason, it feels as if he doesn't get completely hard.
He pushes himself inside of you with little motivation. After a while he just finishes. Apparently he enjoyed the sex so little he didn't feel the need to finish.
<</switch>>
</p>
<</if>>
<<Actions>>
[[Finish|SexAfter]]
<</Actions>><<set _npc to NPCs.load()>>
<<set _himher to l("himher")>>
<<switch _npc.gender>>
<<case "f">>
<<Image "events/sex/after/bedF.jpg">>
<<default>>
<<Image "events/sex/after/bed.jpg">>
<</switch>>
<p>
You are lying in the arms of _npc.nameUsed.
You take a look at the nearby alarm clock.
It is <<print TimeFormat($time,"hh:mm")>>.
<<if $time.getUTCHours() >= 22 or $time.getUTCHours() <= 5>>
<<set _liftRequiresFavor to true>>
It is late and it wouldn't be a matter of course for _npc.nameUsed to drive you home.
<</if>>
<<if $time.getUTCHours() < 20 and $time.getUTCHours() >= 5>>
<<set _stayNightDisabled = true>>
It is still early. It wouldn't be appropriate to ask him if you can stay for the night now.
<</if>>
</p>
<<Actions>>
[[Go home|DateWalkHome]]
<<if _liftRequiresFavor>>
<<ActionA "Ask _himher to drive you home" "DateDriveHome" `{favorCost:{npc:NPCs.CID,cost:1}}`>><</ActionA>>
<<else>>
<<ActionA "Ask _himher to drive you home" "DateDriveHome">><</ActionA>>
<</if>>
<<if !_stayNightDisabled>>
[[Stay over night|StayHisPlace]]
<</if>>
<</Actions>>
<<set $displayMode = "EVENT">><<set _npc to NPCs.load()>>
<<set $displayMode = "EVENT">>
<<set _timeToSleep = SecondsTil({hour:4,minute:randomInt(20,40)},86400)>>
<<run TimePassSeconds(_timeToSleep,'sleep')>>
<<switch _npc.gender>>
<<case "f">>
<<Image `"events/date/sheSleeps("+randomInt(0,0)+").jpg"`>>
<<default>>
<<Image `"events/date/heSleeps("+randomInt(0,1)+").jpg"`>>
<</switch>>
<<run makeupRemove()>>
<p>After making yourself ready for the night you fall asleep quickly. After a dreamless night you wake up way to early in the morning. _npc.nameUsed is still asleep.</p>
<<Actions>>
<<ActionA "Leave" "Somewhere">>
<<set NPCs.load().dateNextExpected = 2.5>>
<<run phoneMessageNew(NPCs.CID,"Hey, you have been gone when I woke up. I hope everything is okay. I had a great evening. Lets repeat that soon.",TimeWithOffset(7200),{disablePhoneTilTime:true})>>
<</ActionA>>
<</Actions>><<include "SexAfterCageStart">><<Image "events/sex/after/fiddle.jpg">>
<p>
You thought that he might unlock you now.
You don't know what you were expecting.
Maybe cuddling? Maybe just going to sleep?
But definitely not that he takes out another piece of steel bondage.
You only understand what it is after a second look: a fiddle.
</p>
<<Actions>>
[[Protest|SexAfterCageFiddleProtest]]
[[Let him apply it|SexAfterCageFiddleCalm]]
<</Actions>><<Image "events/sex/after/fiddleWear.jpg">>
<p>
You object, You don't want to be restrained anymore.
You want to be free now. But _npc.nameUsed doesn't list to you.
He takes the fiddle and come closer to you.
You try to pull away, but your current restraints make this effort pointless.
You tell him again that you don't want this.
Instead of stopping, he places the fiddle around your neck.
You feel the cold steel on your skin.
This fiddle fits tight to not leave air between it and your skin, but not so tight that it would make breathing difficult.
</p>
<p>
You tell him for the third time, that you want to be free now, now in a loud voice.
He reacts by pulling your hands up and placing your wrists in the appropriate openings of the fiddle.
Then he closes the cuffs and secures everything with a big padlock.
</p>
<<TODO>>
Extend
<</TODO>><<TODO>>
Extend
<</TODO>>
/%
<li>
<<set _artificialLubrication to false>>
<<set _naturalLubrication to false>>
<<if !_artificialLubrication and !_naturalLubrication>>
You use neither artifical lubrication nor are you naturally lubricating. This makes the experience more painful for you.
<<set _pcEnjoyment -= 10>>
<<set _pain += 10>>
<</if>>
</li>
<<if !("sexHistory" in $npcs[NPCs.CID].dating)>>
<<set $npcs[NPCs.CID].dating.sexHistory to []>>
<</if>>
<<run $npcs[NPCs.CID].dating.sexHistory.push({
time: TimeWithOffset(0),
enjoyment: _pcEnjoyment
})>>
<<if $npcs[NPCs.CID].dating.sexHistory.length > 3>>
<<run $npcs[NPCs.CID].dating.sexHistory.shift()>>
<</if>>
<<run painIncrease("vagina","insertion",_pain)>>
<hr/>
<p>_npc.nameUsed offers you to stay at his place for the night, but your parents are expecting you home.</p>
<div class="actions">
<<link [[Go home|$home]]>>
<<run DateSetNextExpected(NPCs.CID, 3600*24*3)>>
<<run TimePassSecondsRand(distanceBetween($currentLocation.id,$home))>>
<</link>>
</div>%/<<if !("sex" in $pc)>>
<<run initializeSex()>>
<</if>>
<strong>
<span style="color:red;">Important!</span>
These are your characters preferences. They must not be mistaken for player preferences.
The preferences might not be taken into account when the characters ability to effectively influence the situation is reduced.
</strong>
<h2>Condom</h2>
<i>A condom protects you against STDs and getting pregnant.</i>
<p><<radiobutton "$pc.sex.condom" "required" autocheck>> Required: You will deny sex when there is no condom available.</p>
<p><<radiobutton "$pc.sex.condom" "preferred" autocheck>> Preferred: You will insist on a condom being used if one is available. Otherwise you are fine with none being used.</p>
<p><<radiobutton "$pc.sex.condom" "opposed" autocheck>> Opposed: You will not use a condom unless the man wants to use one.</p>
<p><<radiobutton "$pc.sex.condom" "unwilling" autocheck>> Unwilling: You will deny having sex unless it is done without a condom.</p>
<h2>Activities</h2>
<p><<checkbox "$pc.sex.activities.analA" false true autocheck>> Anal (active): Would you fuck your partner in the ass?</p>
<p><<checkbox "$pc.sex.activities.analP" false true autocheck>> Anal (passive): Would you let your partner fuck you in the ass?</p>
<p><<checkbox "$pc.sex.activities.oralAF" false true autocheck>> Oral (active): Would you give head to a woman?</p>
<p><<checkbox "$pc.sex.activities.oralAM" false true autocheck>> Oral (active): Would you give head to a man?</p>
<p><<checkbox "$pc.sex.activities.oralP" false true autocheck>> Oral (passive): Would you let your partner give you head?</p>
<p><<checkbox "$pc.sex.activities.vaginalA" false true autocheck>> Vaginal (active): Would you fuck your partner in her vagina?</p>
<p><<checkbox "$pc.sex.activities.vaginalP" false true autocheck>> Vaginal (passive): Would you let your partner fuck you in your vagina?</p>
<h2>Toys</h2>
<p><<checkbox "$pc.sex.toys.strapon" false true autocheck>> Strapon: Would you wear a strapon? All active penetration activities require this toy.</p>
<div class="actions">
[[Confirm|$currentEventId]]
</div><<widget "PenisSizeComparison">>
<<switch _args[0]>>
<<case "waytoobig">>
His penis is way too big for your vagina.
<<case "toobig">>
His penis is too big for your vagina.
<<case "tight">>
His penis is bigger than you are used to, filling you completely and creating a tight feeling for him.
<<case "fit">>
His penis has a size you are used to.
<<case "small">>
His penis is a little smaller than you are used to.
<<case "toosmall">>
His penis is too small for your vagina. You feel somewhat empty and he doesn't get much stimulation.
<<case "waytoosmall">>
His penis is way too small for your vagina. You almost don't feel him and he gets almost no stimulation.
<</switch>>
<</widget>><<set _display={time:false}>>
<<if randomInt(1,100) <= 25>>
<<if randomInt(1,100) <= attractiveness()>>
<<set $currentEvent = {guy:"rapist",grabChance:0.25}>>
<<else>>
<<set $currentEvent = {guy:"nice",grabChance:0}>>
<</if>>
<<else>>
<<set $currentEvent = {guy:"nobody",grabChance:0}>>
<</if>>
<<ImageRandom "events/walkHome/night(#).jpg" 0 3>>
<p>
You walk through the city all alone.
There are not many people around and you see most of them only from afar.
Most people are probably sleeping now.
</p>
<p>
A chilling feeling creeps up your spine.
You feel like you are being followed.
</p>
<<Actions>>
<<if $currentEvent.guy == "nobody">>
<<CContinue "Ignore the feeling">>
<<else>>
[["Ignore the feeling"|FollowedHomeNightIgnore]]
<</if>>
[[Run|FollowedHomeNightRun]]
<</Actions>><<run TimePassSecondsRand(60)>>
<<set $currentEvent.grabChance = $currentEvent.grabChance * 2>>
<<ImageRandom "events/walkHome/nightFollowed(#).jpg" 0 3>>
<p>
You try to ignore the feeling.
But then you hear it: a movement behind you, maybe 5m away.
You turn your head, and from the corner of your eye, you see somebody approaching you.
</p>
<<Actions>>
[[Run|FollowedHomeNightRun]]
[[Attack|FollowedHomeNightAttack]]
<<if Inventory.load("pepperSpray").count > 0>>
<<ActionA "Attack (Pepper Spray)" "FollowedHomeNightAttackPS" `{itemsDec:{id:"pepperSpray",count:1},}`>><</ActionA>>
<</if>>
[[Talk|FollowedHomeNightTalk]]
[[Ignore|FollowedHomeNightIgnore2]]
<</Actions>><<run TimePassSecondsRand(180)>>
<<if $currentEvent.guy == "nice">>
<<ImageRandom "events/walkHome/night(#).jpg" 0 3>>
<p>
You continue your journey. The next time you turn around, the guy behind you is gone. Maybe it was a coincidence that he was there?
</p>
<<Actions>>
<<CContinue>>
<</Actions>>
<<else>>
<<Image "events/walkHome/pushedDown.jpg">>
<p>
Too late you realize the intentions of the guy who has been following you.
He hits your chest with his fist, robbing you of your breath and your ability to scream for help.
Then he forces you to the ground.
</p>
<<Actions>>
[["..."|FollowedHomeNightRape]]
<</Actions>>
<</if>><<run TimePassSecondsRand(120)>>
<<if $currentEvent.guy == "nice">>
<<Image "events/walkHome/guyGreet.jpg">>
<p>
You turn around and say "Good evening".
The guy behind you mumbles a response as he passes you.
You wait a little, while he vanishes down the road in front of you, before you continue your journey.
</p>
<<Actions>>
<<CContinue>>
<</Actions>>
<<else>>
<<Image "events/walkHome/pushedDown.jpg">>
<p>
You turn around and say "Good evening".
Too late you realize the intentions of the guy who has been following you.
He hits your chest with his fist, robbing you of your breath and your ability to scream for help.
Then he forces you to the ground.
</p>
<<Actions>>
[["..."|FollowedHomeNightRape]]
<</Actions>>
<</if>><<run TimePassSecondsRand(60)>>
<<if $currentEvent.guy == "nice">>
<<Image "events/walkHome/attackSuccess.jpg">>
<p>
You turn around and kick the guy behind you in the stomach, taking him by surprise.
With a gasping "Why?!" he goes to the ground.
Maybe he didn't intend to do you any harm?
You decide to not think about it and get away as quickly as you can.
</p>
<<Actions>>
<<CContinue>>
<</Actions>>
<<else>>
<<Image "events/walkHome/attackFail.jpg">>
<p>
You have zero experience fighting.
The guy, who has been following you, evades your attack easily.
He then hits your chest with his fist, robbing you of your breath.
You want to scream, but all you get out is a gasp.
He then quickly forces you to the ground.
</p>
<<Actions>>
[["..."|FollowedHomeNightRape]]
<</Actions>>
<</if>><<run TimePassSecondsRand(60)>>
<<if $currentEvent.guy == "nice">>
<<Image "events/walkHome/pepperSprayInnocent.jpg">>
<<else>>
<<Image "events/walkHome/pepperSpray.jpg">>
<</if>>
<p>
You quickly take out your pepper spray, turn around, and unload all of it into the face of the guy behind you.
Then you quickly get away, while he screams in pain, rubbing his eyes.
You don't know, if he was a threat, but either way, you are save now.
</p>
<<Actions>>
<<CContinue>>
<</Actions>><<set _result = "run">>
<<run statInc("hygiene",-20)>>
<<if Outfits.Current.shoeHeight > 0>>
<<switch Outfits.Current.shoeHeight>>
<<case 1>>
<<set _heelModifier = "runLow">>
<<case 2>>
<<set _heelModifier = "runMed">>
<<case 3>>
<<set _heelModifier = "runHigh">>
<<case 4>>
<<set _heelModifier = "runFetish">>
<</switch>>
<<set _chanceToSucceed = skillModifier("heels",_heelModifier)>>
<<set _succeeded = !!(randomNumber(0,1) <= _chanceToSucceed)>>
<<if _succeeded>>
<<set _result = "run">>
<<set _runImage = "events/walkHome/runHeels.jpg">>
<<set _runMessage = "Despite wearing heels you manage to run. You run for your life.">>
<<else>>
<<set _result = "fall">>
<<Image "events/walkHome/falling.jpg">>
<p>Running in heels was a bad idea. You fall over after only a few meters.</p>
<<if $currentEvent.guy == "rapist">>
<p>
You feel a strong hand grabbing your upper arm.
You want to scream, but your attacker rams his other fist into your stomach, robbing your breath.
All you get out is a gasp, while your arm gets paiunfully twisted, forcing you on the ground.
</p>
<<Actions>>
[["..."|FollowedHomeNightRape]]
<</Actions>>
<<elseif $currentEvent.guy == "nice">>
<p>
The guy behind you just passes as you get back on your feet. He was no threat after all.
</p>
<<Actions>>
<<CContinue>>
<</Actions>>
<<else>>
<p>
There was nobody behind you. You wasted your breath and got yourself dirty for nothing.
</p>
<<Actions>>
<<CContinue>>
<</Actions>>
<</if>>
<</if>>
<</if>>
<<if _result == "run">>
<<set _succeeded = !(randomNumber(0,1) <= $currentEvent.grabChance)>>
<<if _succeeded>>
<<run TimePassSecondsRand(180)>>
<<if !_runImage>><<set _runImage = "events/walkHome/run.jpg">><</if>>
<<if !_runMessage>><<set _runMessage = "You run. You run for your life.">><</if>>
<<else>>
<<run TimePassSecondsRand(10)>>
<<set _result = "grabbed">>
<<Image "events/walkHome/pushedDown.jpg">>
<p>
You start running. But whoever is behind you is faster than you.
You feel a strong hand grabbing your upper arm.
You want to scream, but your attacker rams his other fist into your stomach, robbing your breath.
All you get out is a gasp, while your arm gets paiunfully twisted, forcing you on the ground.
</p>
<</if>>
<</if>>
<<switch _result>>
<<case "run">>
<<Image _runImage>>
<p>_runMessage. After what feels like an eternity you dare looking behind you. There is nobody there.</p>
<</switch>><<run TimePassSecondsRand(360)>>
<<set _npc to NPCs.generate("rapist",{gender:"m",age:randomInt(18,59),archetype:"rapist"})>>
<<set _penis = _npc.penis>>
<<set _penetration = Body.penetrate(_penis)>>
<<if $pc.body.makeup.strength > 0>>
<<set $pc.body.makeup.quality to -4>>
<</if>>
<<run statInc("hygiene",-30)>>
<<set SexHistory.rapeUnknown += 1>>
<<Image "events/walkHome/rape.jpg">>
<p>
It's like a nightmare, only worse. He undresses your lower body, then he pulls out his penis and begins raping you. <<PenisSizeComparison _penetration.girthDescription>>
There is nothing you could do. In reality, maybe a few minutes passed, but for you it feels like an eternity til he his finally finished with you.
</p>
<p>
He pulls himself out again and, without any word, vanishes into the night, leaving you behind shivering and sobbing.
</p>
<<MoodLost 150>>
<<Actions>>
<<ActionA "..." "ConnectionComplete">>
<<run NPCs.delete("rapist")>>
<</ActionA>>
<</Actions>><<run Body.consume("_familyBreakfast",{spendTime:false})>>
<<run TimePassSeconds(900)>>
<<set $daily.familyBreakfastHappened to true>>
<<Image "events/family/breakfast.jpg">>
<<set $pc.stats["hunger"].current to 100>>
<<set $pc.stats["thirst"].current to 100>>
<div class="actions">
[[Finish|$currentLocation.id]]
</div><<run Body.consume("_familyDinner",{spendTime:false})>>
<<run TimePassSeconds(1800)>>
<<set $daily.familyDinnerHappened to true>>
<<Image "events/family/dinner.jpg">>
<<set $pc.stats["hunger"].current to 100>>
<<set $pc.stats["thirst"].current to 100>>
<p>You sit down and start chatting with your father and your siblings.</p>
<p>Shortly after your mother serves dinner. It tastes as good as usual.</p>
<p>Your family discusses some of the events of the day while eating.</p>
<div class="actions">
[[Finish|$currentLocation.id]]
</div><<run $pc.experiences.push("highHeels")>>
<<Image "events/firsttime/highHeels.jpg">>
This is the first time you put on high heels. It feels rather unfamiliar to basically stand on your toes and have your weight shifted forward.
Your admire yourself in the mirror. Your posture looks way more feminine now.<br/>
You take a few steps. This will required some getting used to. There is no way your feet won't hurt after wearing these shoes for a while. But maybe it is worth it.<<set _id to $passageArguments.bookId>>
<<set _data to inventoryItem(_id)>>
<<Image _data.image>>
<p>_data.description</p>
<<set _currentPage = getVar(`books.${_id}.page`,0)>>
<p>
This book has _data.pages pages.
<<if _currentPage == 0>>
You didn't start reading it yet.
<<else>>
You are currently on page _currentPage.
<</if>>
</p>
<<set _readingSpeed = 60>>
<<Actions>>
<<set _pagesRemaining = _data.pages - _currentPage>>
<<set _time = _readingSpeed*_pagesRemaining>>
<<ActionA `"Read all remaining _pagesRemaining pages"` "BookRead" `{time:_time,timeDisplay:true,mood:{magnitude:1/120,type:"read"},arguments:{pages:_pagesRemaining}}`>><</ActionA>>
<<set _possiblePagesToRead = [5,10,25,50,100,250,500]>>
<<for _i, _pageOption range _possiblePagesToRead>>
<<if _pagesRemaining >= _pageOption>>
<<set _time = _readingSpeed*_pageOption>>
<<ActionA `"Read _pageOption pages"` "BookRead" `{time:_time,timeDisplay:true,mood:{magnitude:1/120,type:"read"},arguments:{pages:_pageOption}}`>><</ActionA>>
<</if>>
<</for>>
[[Back|$currentLocation.id]]
<</Actions>><<set _id to $passageArguments.bookId>>
<<set _data to inventoryItem(_id)>>
<<run incVar(`books.${_id}.page`,$passageArguments.pages)>>
<p>You open the book <b>_data.label</b> and read the next $passageArguments.pages pages.</p>
<<switch _data.group>>
<<case "zwielicht">>
<<switch randomInt(0,5)>>
<<case 0>>
<<Image "inventory/books/girl.jpg">>
<p>
It is about a girl who has to struggle with fitting in at her new school.
At the same time, her parents are getting a divorce.
Of course she is incredibly beautiful and not aware of this fact.
</p>
<<case 1>>
<<Image "inventory/books/goblet.jpg">>
<p>
The female protagonist has to find a goblet filled with human blood to save a loved one.
But first she has to solve an ancient mystery.
And who will be the one she rescues?
</p>
<<case 2>>
<<Image "inventory/books/koenigsberg.jpg">>
<p>
The protagonists have to travel to Königsberg, where the vampire ruler has his palace.
After some small-talk a wild chase starts, almost costing the heroine her life.
</p>
<<case 3>>
<<Image "inventory/books/teutons.jpg">>
<p>
A group of medieval looking teuton knights is after the protagonists.
They want to kill all vampires and don't care if any innocents get into the way.
</p>
<<case 4>>
<<Image "inventory/books/vampireGuy.jpg">>
<p>
The heroine has a difficult decision to make.
Does she want to be together with the handsome vampire Frederick? Or with his animalistic competitor Axel?
</p>
<<case 5>>
<<Image "inventory/books/werebear.jpg">>
<p>
The heroine has a difficult decision to make.
Does she want to be together with the sexy werebear Axel? Or with his vampiric competitor Frederick?
</p>
<</switch>>
<</switch>>
<<Actions>>
[[Back|$currentLocation.id]]
<</Actions>><svg width="626" height="394" xmlns="http://www.w3.org/2000/svg">
<image id="background" href="" height="100%" width="100%"/>
<image id="portrait" preserveAspectRatio="xMidYMid slice" height="70%" width="35%" x="5%" y="20%"/>
<text id="surname" x="50%" y="30%" style="font-family: Courier New;font-size: 1.25em;"></text>
<text id="firstname" x="50%" y="46%" style="font-family: Courier New;font-size: 1.25em;"></text>
<text id="dob" x="50%" y="58%" style="font-family: Courier New;font-size: 1.25em;"></text>
<text id="pob" x="50%" y="69%" style="font-family: Courier New;font-size: 1.25em;">Berlin</text>
<text id="valid" x="50%" y="81%" style="font-family: Courier New;font-size: 1.25em;">17.09.2011</text>
</svg>
<<done>>
<<script>>
$("#background").attr("href",mediaPath('inventory/id.jpg'));
$("#portrait").attr("href",mediaPath(State.variables.pc.body.image));
$("#surname").html(State.variables.pc.name.last);
$("#firstname").html(State.variables.pc.name.first);
$("#dob").html(TimeFormat(State.variables.pc.birthday,"DD.MM.YYYY"));
<</script>>
<</done>>
<<Actions>>
<<BackC>>
<</Actions>><<set _id to $passageArguments.magazineId>>
<<set _page to $passageArguments.magazinePage>>
<<set _data to inventoryItem(_id)>>
<<if _data.porn is true>>
<<run Arousal.arouse(10,{kinsey:_data.kinsey})>>
<</if>>
<<set _image to _data.pageTemplate.replace('#',_page)>>
<<Image _image>>
<<Actions>>
<<if _page +1 < _data.pages>>
<<ActionA "Next" "Magazine" `{arguments:{magazinePage:$passageArguments.magazinePage+1}}`>><</ActionA>>
<</if>>
<<if _page > 0>>
<<ActionA "Previous" "Magazine" `{arguments:{magazinePage:$passageArguments.magazinePage-1}}`>><</ActionA>>
<</if>>
[[Close|Purse]]
<</Actions>><div class="actions selectImages">
<<SelectImage "Mom" "NpcMotherCall" `NPCs.load("mother").image`>><</SelectImage>>
<<SelectImage "TAXI" "TaxiCall" "events/taxi/sign.jpg">><</SelectImage>>
<<set _datingNpcIds to DatingNpcIds()>>
<<for _i, _npcId range _datingNpcIds>>
<<capture _npcId>>
<<set _npc to NPCs.load(_npcId)>>
<<SelectImage _npc.nameUsed "CallDate" `_npc.image`>>
<<set NPCs.CID to _npcId>>
<</SelectImage>>
<</capture>>
<</for>>
</div>
<<for _i, _message range $phone.messages>>
<<if TimeIsEarlier(_message.time)>>
<<set _message.read to true>>
<<set _npc to NPCs.load(_message.npcId)>>
<div class="phoneMessage">
<div class="name">_npc.nameLegal</div>
<div class="time"><<print TimeFormat(_message.time,"DD.MM.YYYY hh:mm:ss")>></div>
<div class="text">_message.text</div>
</div>
<</if>>
<</for>>
<hr/>
<<Actions>>
<<ActionA "Play Game" "PhonePlay" `{time: [60,300,900,3600,10800]}`>><</ActionA>>
[[Back|$currentLocation.id]]
<</Actions>>You call the number but nobody answers.
<<TODO>>
Create dialogue for NPCs who can be called.
<</TODO>>
<<Actions>>
[[Hang up|$currentLocation.id]]
<</Actions>><<Image "events/phone/play(0).jpg">>
<<set _description to "You play with your phone for "+ int2time($passageArguments.timeConsumed)+".">>
<p>_description</p>
<<Actions>>
<<BackC>>
<</Actions>><<set $currentEvent to {id:"Purse"}>>
<<Event $currentEvent>>
<h2>Purse</h2>
<div id="itemDetails"></div>
<div class="inventoryItemList">
<<for _id,_itemCount range $pc.possessions>>
<<if _itemCount < 1>><<continue>><</if>>
<<if _id == "subway" and _itemCount.timed is null>><<continue>><</if>>
<<capture _id>>
<<set _itemData to inventoryItem(_id)>>
<<if _itemData.hidden is true>><<continue>><</if>>
<<set _markup to '<p class="label">'+_itemData.label+"</p>">>
<<if "image" in _itemData>>
<<set _markup += '<<Image "'+_itemData.image+'">>'>>
<</if>>
<<if _itemCount > 1 and _id != "cash">>
<<set _markup += '<p class="count">'+_itemCount+'x</p>'>>
<</if>>
<<link _markup>>
<<replace "#itemDetails">>
<<PurseItemDetails _id>>
<</replace>>
<</link>>
<</capture>>
<</for>>
</div>
<<if $settings.showDebugActions === true>>
<<textbox "_debugItemAdd" "">><<button "ADD">><<run inventoryInc(_debugItemAdd)>><<goto "Purse">><</button>>
<</if>>
You currently don't have a purse and therefore you are carrying your stuff around loosely in your pockets.
<div class="actions">
[[Back|$currentLocation.id]]
</div><<widget "PurseItemDetails">>
<<set _itemId to _args[0]>>
<<set _disposable to true>>
<<set _itemData to {}>>
<<if _itemId == "cash">>
<<set _disposable to false>>
Your Wallet. You currently have <<Money $pc.possessions.cash>> cash with you. Your [[ID|IDCard]] is also in there.
<<elseif _itemId == "items">>
<<set _disposable to false>>
Some clothes, shoes and other outfit items you might change into. Somehow you always know in advance what you might need before you leave the house. This way it almost feels as if you always have your whole wardrobe with you.
<<elseif _itemId == "subway">>
<<set _subwayValidtyLeft = ($pc.possessions.subway.timed.getTime()-$time.getTime())/1000>>
Your subway ticket.
<<if _subwayValidtyLeft > 0>>
It is still valid for <<print int2time(_subwayValidtyLeft)>>.
<<else>>
It is no longer valid.
<</if>>
<<else>>
<<set _itemData to inventoryItem(_itemId)>>
<<if "image" in _itemData>><<Image _itemData.image>><</if>>
<<if "description" in _itemData>><p>_itemData.description</p><</if>>
<</if>>
<<if "special" in _itemData>>
<<include _itemData.special>>
<</if>>
<<Actions>>
<<if "type" in _itemData>>
<<switch _itemData.type>>
<<case "book">>
<<ActionA "Read" "Book" `{arguments:{bookId:_itemId}}`>><</ActionA>>
<<case "consume">>
<<ActionA "Consume" "Consume" `{itemsDec:{id:_itemId,count:1}}`>><<set $currentConsumable to _itemId>><</ActionA>>
<<case "consumeSpecial">>
<<ActionA "Consume" "ConsumeSpecial" `{arguments:{consumable:_itemId},itemsDec:{id:_itemId,count:1}}`>><</ActionA>>
<<case "magazine">>
<<ActionA "Read" "Magazine" `{arguments:{magazineId:_itemId,magazinePage:0}}`>><</ActionA>>
<</switch>>
<</if>>
<<if _disposable === true>>
<<linkreplace "Throw away">>
<<link "Confirm" "Purse">>
<<run delete $pc.possessions[_itemId]>>
<</link>>
<</linkreplace>>
<</if>>
<</Actions>>
<hr/>
<</widget>><p><<checkbox "$misc.sandwich.autoeat" false true autocheck>> Eat sandwiches when you get hungry in public.</p>
<<Actions>>
<<ActionA "Eat" "Purse" `{itemsDec:{id:"sandwich",count:1}}`>>
<<run Body.consume("sandwich")>>
<</ActionA>>
<</Actions>><p>
Your water bottle.
<<if getVar("waterbottle.water",0) == 0>>
It is currently empty.
<<else>>
It is currently filled with water.
<</if>>
</p>
<p><<checkbox "$misc.waterbottle.autodrink" false true autocheck>> Drink from this bottle whenever you get thirsty in public.</p>
<<if getVar("waterbottle.water",0) > 0>>
<<Actions>>
<<link "Drink" "Purse">>
<<run Body.consume("water")>>
<<run setVar("waterbottle.water",0)>>
<</link>>
<</Actions>>
<</if>><<set _pcData to getVar("currentPC")>>
<<Image `"events/pc/pc_"+_pcData.id+".jpg"`>>
<div class="actions">
[[Webbrowser|PCWeb]]
[[Shut down|$currentLocation.id]]
</div><<Image "events/pc/fuudle.jpg">>
<div class="actions">
[[Watch Porn|PCWebPorn]]
[[Back|PC]]
</div><<set _timeToPass to 1200>>
<<run TimePassSeconds(_timeToPass)>>
<<set _subfolder to "events/pc/porn/">>
<<set _porn to randomInt(0,4)>>
<<if _porn == 0>>
/% FUCK %/
<<Image `_subfolder + "fuck_"+randomInt(0,3)+".gif"`>>
<<run Arousal.arouse(50)>>
<<elseif _porn == 1>>
/% BJ %/
<<Image `_subfolder + "bj_"+randomInt(0,0)+".gif"`>>
<<run Arousal.arouse(50)>>
<<elseif _porn == 2>>
/% Bondage %/
<<Image `_subfolder + "bondage_"+randomInt(0,0)+".gif"`>>
<<run Arousal.arouse(50)>>
<<elseif _porn == 3>>
/% Double Penetration %/
<<Image `_subfolder + "dp_"+randomInt(0,0)+".gif"`>>
<<run Arousal.arouse(50)>>
<<elseif _porn == 4>>
/% Lesbian %/
<<Image `_subfolder + "lesbian_"+randomInt(0,2)+".gif"`>>
<<run Arousal.arouse(50)>>
<</if>>
<p>You watch porn for <<print int2time(_timeToPass)>>.</p>
<<Actions>>
[[Continue watching porn|PCWebPorn]]
<<BackC>>
<</Actions>><<set _tvQuality to $passageArguments.tvQuality>>
<<set _tvImage = "events/tv/tv_q"+_tvQuality+".jpg">>
<<Image _tvImage>>
<<include "TV_Options">><<set _randomProgram to randomInt(0,10)>>
<<if _randomProgram == 0>>
<<set _tvProgramImage = "events/tv/program/action("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch an action movie with a strong male lead who knows all the quirky one-liners and saves the day in the end.</p>
<<elseif _randomProgram == 1>>
<<set _tvProgramImage = "events/tv/program/bigBrother("+randomInt(0,1)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a show where some people are locked in a house together.</p>
<<elseif _randomProgram == 2>>
<<set _tvProgramImage = "events/tv/program/gameshow("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a show where the contestants have to win a series of games in order to win a big prize.</p>
<<elseif _randomProgram == 3>>
<<set _tvProgramImage = "events/tv/program/historic("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a movie which depicts medieval times.</p>
<<elseif _randomProgram == 4>>
<<set _tvProgramImage = "events/tv/program/romance("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a romantic movie.</p>
<<elseif _randomProgram == 5>>
<<set _tvProgramImage = "events/tv/program/royalty("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch news about the European royalty.</p>
<<elseif _randomProgram == 6>>
<<set _tvProgramImage = "events/tv/program/scifi("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a Sci Fi-movie.</p>
<<elseif _randomProgram == 7>>
<<set _tvProgramImage = "events/tv/program/space("+randomInt(0,1)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a science show about space exploration.</p>
<<elseif _randomProgram == 8>>
<<set _tvProgramImage = "events/tv/program/spy("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a movie about a gentleman spy who has unusual gadgets and drinking habits and always gets the girl in the end.</p>
<<elseif _randomProgram == 9>>
<<set _tvProgramImage = "events/tv/program/teen("+randomInt(0,2)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch a movie about teens and their struggles with school, dating and growing up.</p>
<<elseif _randomProgram == 10>>
<<set _tvProgramImage = "events/tv/program/UESS("+randomInt(0,0)+").jpg">>
<<Image _tvProgramImage>>
<p>You watch news about the orbital space station that's currently under construction. Apparently the UESS (United Earth Space Services) will be able to complete its construction soon.</p>
<</if>>
<<include "TV_Options">><div class="actions">
<<ActionA "WatchTV" TV_Program `{time:[60,300,900,3600,10800],mood:{magnitude:1/120,type:"TV"}}`>><</ActionA>>
[[Turn TV off|$currentLocation.id]]
</div><<set _description to "You watch the world go by for "+ int2time($passageArguments.timeConsumed)+".">>
<<set _sunPosition to getSunposition(Now())>>
<<set _theme = ["idle","idle"].random()>>
<<switch _theme>>
<<case "idle">>
<<switch _sunPosition>>
<<case "day">>
<<Image `"events/watchWorld/day("+randomInt(0,3)+").jpg"`>>
<<case "night">>
<<Image `"events/watchWorld/night("+randomInt(0,3)+").jpg"`>>
<<case "sunrise">>
<<Image `"events/watchWorld/dusk("+randomInt(0,1)+").jpg"`>>
<<case "sunset">>
<<Image `"events/watchWorld/dusk("+randomInt(0,1)+").jpg"`>>
<</switch>>
<</switch>>
<p>_description</p>
<<Actions>>
<<BackC>>
<</Actions>><<set _monthOffset to getVar("scheduler.monthOffset",0)>>
<<set _month = BeginningOfMonth(Now(),_monthOffset)>>
<<set _firstDay = _month.getUTCDay()>>
<<if _firstDay == 0>><<set _firstDay = 7>><</if>>
<h2>
<<link "<<" "Scheduler">><<run incVar("scheduler.monthOffset",-1)>><</link>>
Scheduler: <<print TimeFormat(_month,"nnn YYYY")>>
<<link ">>" "Scheduler">><<run incVar("scheduler.monthOffset",1)>><</link>>
</h2>
<<if _monthOffset != 0>>
<p style="text-align: center">
<<link "Now" "Scheduler">><<run setVar("scheduler.monthOffset",0)>><</link>>
</p>
<</if>>
<div class="scheduler">
<<for _i = 1; _i <= 7; _i++>>
<div class="dayName"><<print weekDayName(_i).substring(0,3)>></div>
<</for>>
<<for _i = 1; true; _i++>>
<<set _currentDay to new Date(_month.getTime() + 86400000 * (_i - 1))>>
<<if _currentDay.getUTCDate() == 1 and _i > 1>>
<<break>>
<</if>>
<<if _i == 1>>
<<set _style = 'grid-column-start: '+_firstDay+';grid-column-end: '+(_firstDay+1)+';'>>
<<else>>
<<set _style = ''>>
<</if>>
<<set _classes = ["date"]>>
<<set _isSchoolDay to isSchoolDay(_currentDay)>>
<<if _isSchoolDay == 1>>
<<set _hasSchoolDay to true>>
<<run _classes.push("schoolDay")>>
<<elseif _isSchoolDay == -1>>
<<set _hasWeekend to true>>
<<run _classes.push("weekend")>>
<<elseif _isSchoolDay == -10>>
<<set _hasSummerVacations to true>>
<<run _classes.push("summerVacations")>>
<<elseif _isSchoolDay == -11 or _isSchoolDay == -12>>
<<set _hasWinterVacations to true>>
<<run _classes.push("winterVacations")>>
<</if>>
<<set _class=_classes.join(" ")>>
<div @style=_style @class=_class>
<<if sameDay(Now(),_currentDay) is true>>
<p class="number current">_i</p>
<<else>>
<p class="number">_i</p>
<</if>>
<div class="appointments">
<<for _j, _date range DatesAtDay(_currentDay)>>
<<run console.log(_date)>>
Date: <<print NPCs.load(_date.npcId).nameUsed>> (<<print TimeFormat(_date.time,"hh:mm")>>)
<</for>>
</div>
</div>
<</for>>
</div>
<div class="schedulerInfo">
<<if _hasSchoolDay is true>>
<div class="schoolDay">School Day</div>
<</if>>
<<if _hasSummerVacations is true>>
<div class="summerVacations">Summer Vacations</div>
<</if>>
<<if _hasWeekend is true>>
<div class="weekend">Weekend</div>
<</if>>
<<if _hasWinterVacations is true>>
<div class="winterVacations">Winter Vacations</div>
<</if>>
</div>
<<Actions>>
<<BackC>>
<</Actions>><h2>Skills</h2>
<div id="skillList">
<<for _skillId, _skillData range $pc.skills>>
<<set _label = _skillId>>
<<set _desciption = "">>
<<switch _skillId>>
<<case "cycle">>
<<set _label = "Female Cycle">>
<<set _desciption = "Knowledge about your own reproductive cycle. A decent skill will allow you to reckognize subtle signs of your period approaching.">>
<<case "cook">>
<<set _label = "Cooking">>
<<set _desciption = "Lets you create higher quality and better tasting meals.">>
<<case "heels">>
<<set _label = "High heels">>
<<set _desciption = "Reduces the amount of pain wearing high heels inflicts. Expert level is required to wear fetish heels.">>
<<case "makeup">>
<<set _label = "Makeup">>
<<set _desciption = "Improves the quality of the makeup you can apply both on yourself and on others.">>
<<case "sport">>
<<set _label = "Sport">>
<<set _desciption = "How effective you can perform workouts. An higher skill will reduce the amount of endurance you will lose during a workout.">>
<<case "test">>
<<set _label = "Test-Skill">>
<<set _desciption = "This skill is intended for testing only.">>
<</switch>>
<<set _levelName to "Untrained">>
<<if _skillData.level >= 100>>
<<set _levelName to "Legend">>
<<elseif _skillData.level >= 90>>
<<set _levelName to "Exceptional Grandmaster">>
<<elseif _skillData.level >= 80>>
<<set _levelName to "Grandmaster">>
<<elseif _skillData.level >= 70>>
<<set _levelName to "Master">>
<<elseif _skillData.level >= 60>>
<<set _levelName to "Professional Master">>
<<elseif _skillData.level >= 50>>
<<set _levelName to "Expert">>
<<elseif _skillData.level >= 40>>
<<set _levelName to "Proficient">>
<<elseif _skillData.level >= 30>>
<<set _levelName to "Competent">>
<<elseif _skillData.level >= 20>>
<<set _levelName to "Advanced Beginner">>
<<elseif _skillData.level >= 10>>
<<set _levelName to "Beginner">>
<<elseif _skillData.level >= 1>>
<<set _levelName to "Novice">>
<</if>>
<<set _stars = "">>
<<if _skillData.level >= 10>>
<<set _stars = "("+"★".repeat(Math.floor(_skillData.level / 20)) + "☆".repeat(Math.floor((_skillData.level % 20) / 10)) + ")">>
<</if>>
<<set _expThis = skillLevel2Exp(_skillData.level)>>
<<set _expNext = skillLevel2Exp(_skillData.level+1)>>
<<set _progress = (_skillData.exp - _expThis) / (_expNext - _expThis) * 100>>
<span>
_label
<<if _desciption>>
<<capture _desciption, _label>>
<<link "?">>
<<script>>
Dialog.setup(State.temporary.label);
Dialog.wiki(State.temporary.desciption);
Dialog.open();
<</script>>
<</link>>
<</capture>>
<</if>>
</span>
<span>_skillData.level _stars</span>
<<Progressbar _progress `{label:"_skillData.exp / _expNext"}`>>
<</for>>
</div><<Image "events/sports/home/supplies.jpg">>
<<SportsInRoomActions>><<set _enduranceUseModifier = skillModifier("sport","enduranceUse")>>
<<set _enduranceUse = 0.056>>
<<set _maxExerciseTime = Math.floor(statCurrent("endurance") / (_enduranceUse * _enduranceUseModifier))>>
<<set _exerciceTimeDesired = $passageArguments.exerciseLength>>
<<set _exerciceTime to Math.min(_exerciceTimeDesired,_maxExerciseTime)>>
<<run TimePassSeconds(_exerciceTime,"sport")>>
<<run statInc("endurance",-_exerciceTime * _enduranceUse * _enduranceUseModifier)>>
<<set _experienceGain to Math.floor(_exerciceTime / 60)>>
<<run skillExperienceInc("sport",_experienceGain)>>
<<set _images to ["ball.jpg","plank.jpg","stretch.jpg"] >>
<<set _image to _images.random()>>
<<set _image to "events/sports/home/"+_image>>
<<Image _image>>
You do exercices for <<print int2time(_exerciceTime)>>.
<<if _exerciceTime < _exerciceTimeDesired>>
You planed to exercise more, but there is no use in it. Your muscles don't play along.
<</if>>
<<Actions>>
<<BackC>>
<</Actions>><<widget "SportsInRoomActions">>
<<Actions>>
<<ActionA "Work out for 5 minutes" "SportsInRoomExcercise">>
<<set $passageArguments.exerciseLength to 300>>
<</ActionA>>
<<ActionA "Work out for 15 minutes" "SportsInRoomExcercise">>
<<set $passageArguments.exerciseLength to 900>>
<</ActionA>>
<<ActionA "Work out for 30 minutes" "SportsInRoomExcercise">>
<<set $passageArguments.exerciseLength to 1800>>
<</ActionA>>
<<ActionA "Work out for 60 minutes" "SportsInRoomExcercise">>
<<set $passageArguments.exerciseLength to 3600>>
<</ActionA>>
<<BackC>>
<</Actions>>
<</widget>><<Image "events/taxi/taxi.jpg">>
You call the Taxi hotline. Where would you like to travel?
<div class="actions">
<<ActionA "Home" $home `{priceCash:2990,time:1200}`>><</ActionA>>
<<ActionA "City Center" "CityCenter" `{priceCash:2990,time:1200}`>><</ActionA>>
[[Hang up|$currentLocation.id]]
</div><<if !$pc.possessions["hygiene"]>><<set $pc.possessions["hygiene"] = 0>><</if>>
<<if periodProtected() && !$pc.experiences.includes("tampon")>>
<<run $pc.experiences.push("tampon")>>
<<run TimePassSeconds(300)>>
<<Image "events/body/tamponUse.jpg">>
<p>
You unwrap one of the tampons.
Then you hesitate for a few seconds.
You will have to insert it inside of yourself.
There is no use in waiting any longer.
You do what has to be done.
And you know that getting it out there again will be even harder.
</p>
<<Actions>>
<<BackC>>
<</Actions>>
<<elseif !periodProtected()>>
<<Image "inventory/hygiene.jpg">>
<<set _productsDuringPeriodGuessed = 20>>
<<set _productsDuringPeriodActual = (State.variables.pc.cycle.bleedLength + 1) * 2>>
<<if !periodActive()>>
<<set _secondsTilPeriod = TimeDifference(nextPeriodStartTime())>>
<<set _productsTilPeriod = Math.ceil(_secondsTilPeriod/43200)>>
<<set _additionalProductsSinceMenAreStupid = randomInt(2,Math.max(_productsTilPeriod,10))>>
<<set _requiredProducts = _productsTilPeriod + _productsDuringPeriodGuessed + _additionalProductsSinceMenAreStupid>>
<<set _requiredActual = _productsDuringPeriodActual + _productsTilPeriod>>
<<else>>
<<set _requiredProducts = _productsDuringPeriodGuessed>>
<<set _secondsTilPeriodEnd = TimeDifference(nextPeriodStopTime())>>
<<set _productsTilPeriodEnd = Math.ceil(_secondsTilPeriodEnd/43200)>>
<<set _requiredActual = _productsTilPeriodEnd>>
<</if>>
<p>
You can start using sanitary products now.
You will replace them automatically twice a day.
Once your period is over you will stop using them automatically.
Surplus hygiene products will be reimbursed then.
You guess that you need _requiredProducts hygiene products. You currently have $pc.possessions["hygiene"].
</p>
<<Actions>>
<<ActionA "Start using sanitary products" "Hygiene" `{itemsDec:{id:"hygiene",count:_requiredProducts,msg:"You don't have enough sanitary products."}}`>>
<<set $pc.cycle.productsReimburs to _requiredProducts - _requiredActual>>
<<set $pc.cycle.protected to true>>
<</ActionA>>
<<BackC>>
<</Actions>>
<<else>>
<<Image "inventory/hygiene.jpg">>
<p>
You are currently using hygiene products and replacing them twice a day.
There is nothing more to do in this regard for now.
</p>
<<Actions>>
<<BackC>>
<</Actions>>
<</if>><h1>Apply Makeup</h1>
<<Image "events/bath/mirror_female.jpg">>
<p>You can apply makeup to enhance your facial appearance. Your makeup-skill determines the possible quality outcomes. Wearing a makeup of bad or terrible quality decreases your appearance.</p>
<p>You have <<print possessionCount("makeup")>> makeup left.</p>
<<if $pc.body.makeup.strength is 0>>
<<Actions>>
<<ActionA "Subtle Makeup (1x Makeup)" "MakeupApply" `{arguments:{"makeupStrength": 1},itemsDec:{id:"makeup",count:1},girliness:{value:"makeupSubtle",type:"makeup"}}`>><</ActionA>>
<<ActionA "Light Makeup (2x Makeup)" "MakeupApply" `{arguments:{"makeupStrength": 2},itemsDec:{id:"makeup",count:2},girliness:{value:"makeupLight",type:"makeup"}}`>><</ActionA>>
<<ActionA "Heavy Makeup (3x Makeup)" "MakeupApply" `{arguments:{"makeupStrength": 3},itemsDec:{id:"makeup",count:3},girliness:{value:"makeupHeavy",type:"makeup"}}`>><</ActionA>>
<<ActionA "Train Applying Makeup for 1 hour (5x Makeup)" "MakeupTrain" `{itemsDec:{id:"makeup",count:5},girliness:{value:"makeupSubtle",type:"makeup"}}`>><</ActionA>>
<</Actions>>
<<else>>
You are wearing
<<if $pc.body.makeup.strength is 1>>
subtle
<<elseif $pc.body.makeup.strength is 2>>
light
<<elseif $pc.body.makeup.strength is 3>>
heavy
<</if>>
makeup of
<<if $pc.body.makeup.quality is -4>>
smeared
<<elseif $pc.body.makeup.quality is -3>>
terrible
<<elseif $pc.body.makeup.quality is -2>>
bad
<<elseif $pc.body.makeup.quality is -1>>
below average
<<elseif $pc.body.makeup.quality is 0>>
average
<<elseif $pc.body.makeup.quality is 1>>
above average
<<elseif $pc.body.makeup.quality is 2>>
good
<<elseif $pc.body.makeup.quality is 3>>
very good
<<elseif $pc.body.makeup.quality is 4>>
professional
<</if>>
quality.
<<Actions>>
[[Remove Makeup|MakeupRemove]]
<</Actions>>
<</if>>
<hr/>
<<Actions>>
[[Back|$currentLocation.id]]
<</Actions>><h1>Apply Makeup</h1>
<<set _qualityWeight = [
skillModifier("makeup","qualityWeight_3"),
skillModifier("makeup","qualityWeight_2"),
skillModifier("makeup","qualityWeight_1"),
skillModifier("makeup","qualityWeight0"),
skillModifier("makeup","qualityWeight1"),
skillModifier("makeup","qualityWeight2"),
skillModifier("makeup","qualityWeight3")
]>>
<<set _qualityWeightTotal = _qualityWeight.reduce((previousValue, currentValue) => previousValue + currentValue)>>
<<run _random to randomInt(1,_qualityWeightTotal)>>
<<for _i = 0; _i < _qualityWeight.length; _i++>>
<<if _random <= _qualityWeight[_i]>>
<<set _quality = _i>>
<<break>>
<<else>>
<<set _random -= _qualityWeight[_i]>>
<</if>>
<</for>>
<<set _quality -= 3>>
<<set _makeupStrength to $passageArguments.makeupStrength>>
<<switch _makeupStrength>>
<<case 1>>
<<Image "events/bath/makeupApply1.jpg">>
<p>A little bit of foundation and then concealer to make your skin look smooth and some mascara to highlight your eyes: that has to suffice for now.</p>
<p>After about 5 minutes you are done applying a rather subtle makeup.</p>
<<set _timeToPass to 300>>
<<case 2>>
<<Image "events/bath/makeupApply2.jpg">>
<p>You start by applying a foundation, then concealer and then blush to make your skin look as healthy as possible. You use mascara and eyeliner to make your eyes look bigger and finish everything with lipstick that isn't too colorful.</p>
<p>After about 10 minutes you are done applying a rather light makeup.</p>
<<set _timeToPass to 600>>
<<case 3>>
<<Image "events/bath/makeupApply3.jpg">>
<p>Primer, foundation, concealer, powder: you use every trick in the book to make your sking look perfectly. Afterwards you put a great effort into applying an attention-grabbing eyeshadow. You finish everything by applying lipstick.</p>
<p>Putting this much care into your appearance is time-consuming. It takes you half an hour to finish your makeup.</p>
<<set _timeToPass to 1800>>
<</switch>>
<<switch _quality>>
<<case -3>>
<p>The end result is terrible. The colors you used don't match, and at the places you didn't use too little makeup you used too much.</p>
<<case -2>>
<p>The end result is really bad. The makeup you used doesn't suit your skin or facial features at all.</p>
<<case -1>>
<p>The end result is rather subpar.</p>
<<case 0>>
<p>The end result is rather average.</p>
<<case 1>>
<p>The end results quality is above average. You managed to highlight your best features a little bit while hiding your problem zones.</p>
<<case 2>>
<p>The end result is pretty good. You highlighted your eyes in a flattering way and created a natural yet endearing look.</p>
<<case 3>>
<p>The end result is very good. You look is almost perfect and you doubt that you could achieve an even better result without a professional assistant.</p>
<</switch>>
<<run TimePassSeconds(_timeToPass)>>
<<set _experienceGain to Math.floor(_timeToPass / 60)>>
<<run skillExperienceInc("makeup", _experienceGain)>>
<<set $pc.body.makeup.strength to _makeupStrength>>
<<set $pc.body.makeup.quality to _quality>>
<hr/>
<div class="actions">
[[Back|$currentLocation.id]]
</div><<set $pc.body.makeup.strength to 0>>
<<Image "events/bath/makeupRemove.jpg">>
<p>You take out your cosmetic supplies and start removing your makeup.</p>
<<set _makeupStrength to $pc.body.makeup.strength>>
<<switch _makeupStrength>>
<<case 1>>
<p>Since you're wearing subtle makeup removing it doesn't take long.</p>
<<run TimePassSeconds(120)>>
<<case 2>>
<p>It take about 5 minutes to remove all of it.</p>
<<run TimePassSeconds(300)>>
<<case 3>>
<p>It take about 5 minutes to remove all of it.</p>
<<run TimePassSeconds(300)>>
<</switch>>
<div class="actions">
[[Back|$currentLocation.id]]
</div><<set _experienceGainFactor to 2>>
<<set _timeToPass to 3600>>
<<run TimePassSeconds(_timeToPass)>>
<<set _experienceGain to Math.floor(_timeToPass / 60 * _experienceGainFactor)>>
<<run skillExperienceInc("makeup", _experienceGain)>>
<<Image "events/bath/makeupTrain.jpg">>
<p>You train applying makeup for one hour. You try out new products and colors and try to adapt some tipps you picked up lately.</p>
<<Actions>><<BackC>><</Actions>><<set _appearanceInfos to attractiveness(undefined,true)>>
<<run console.log(_appearanceInfo)>>
<<Image $pc.body.image>>
<p data-tool-tip="Your age does not influence your attractiveness. Most men who aren't at least a little older than you won't consider dating you though. The difference increases as you get older.">
<<set _age to getAge($pc.birthday)>>
<<set _apparentAge to getApparentAge()>>
You are a _age years old <<if _age < 30>>girl<<else>>woman<</if>>.
<<if _age != _apparentAge>>
You look as if you are _apparentAge years old.
<</if>>
You have a <<print window.lang.face[$pc.body.face]>> face.
</p>
<p data-tool-tip="Long hair is considered more attractive by most men. The longer the better. The color of your hair does not influence your attractiveness.">
<<HairColor>>
<<HairLength>>
</p>
<p data-tool-tip="Your height does not influence your attractiveness. Most men who aren't at least a little bit taller than you won't consider dating you though.">
You are <<print Math.round($pc.body.height)>> cm tall.
<<set _heightId to getHeightId($pc.body.height)>>
<<switch _heightId>>
<<case "vsmall">>
You are very small. The vast majority of women are taller than you and only a tiny minority of men are as small as you.
<<case "small">>
You are small. Most women are taller than you and almost all men are as well.
<<case "average">>
You are of average height. Most women are about your height and most men are taller than you.
<<case "tall">>
You are tall. Most women are smaller than you and many men have the same height as you.
<<case "vtall">>
You are very tall. Almost all women are smaller than you and the majority of men are as well.
<</switch>>
</p>
You weight <<print Math.round($pc.body.weight*10)/10>> kg.
<<set _bmi to Body.bmi>>
Your BMI is <<print Math.round(_bmi*10)/10>>.
<<set _bmiId to getBmiId(_bmi)>>
<<switch _bmiId>>
<<case "vunderweight">>
You are extremely underweight. You look very unhealthy.
<<case "underweight">>
You look unhealthyly unweight.
<<case "thin">>
You are a little underweight and look as thin as a fashion model. While not being healthy it makes you look attractive.
<<case "average">>
You have an healthy weight. The fat you carry around is at the right places.
<<case "healthy">>
You have an healthy weight. You could lose some weight and still be considered healthy though.
<<case "chubby">>
You carry around some extra weight.
<<case "obese">>
You are obese.
<</switch>>
<hr/>
Your current appearance is effected by your
<div style="display:grid; grid-template-columns:auto 1fr;" class="appearanceInfo">
<<for _appearanceInfoId, _appearanceInfoMagnitude range _appearanceInfos>>
<<if _appearanceInfoId == "total">><<continue>><</if>>
<<if _appearanceInfoMagnitude > 0>>
<<set _appearanceStyle = "positive">>
<<elseif _appearanceInfoMagnitude == 0>>
<<set _appearanceStyle = "neutral">>
<<elseif _appearanceInfoMagnitude < 0>>
<<set _appearanceStyle = "negative">>
<</if>>
<div @class="_appearanceStyle">
<<switch _appearanceInfoId>>
<<case "bmiMod">>
BMI
<<case "breastSizeMod">>
Breast size
<<case "faceMod">>
Your facial appearance
<<case "hairHeadMod">>
Hair length
<<case "hairLegsMod">>
Leg hair
<<case "hygieneMod">>
Hygiene
<<case "makeupMod">>
Make-up
<<case "outfitAndrogynous">>
Wearing an androgynous outfit
<<case "outfitQuality">>
Your outfits quality
<<case "outfitShoeHeight">>
Wearing high heels
<<case "period">>
Your clothes are soiled in blood
<</switch>>
:
</div>
<div @class="_appearanceStyle">
<<if _appearanceInfoMagnitude >= 0>>+<</if>>_appearanceInfoMagnitude
</div>
<</for>>
<div style="font-weight:bold">Total:</div>
<div style="font-weight:bold"><<if _appearanceInfos.total >= 0>>+<</if>>_appearanceInfos.total</div>
<div>
<<if _appearanceInfos.total >= 250>>
You are a 10/10. People oftentimes mistake you for a celebrety.
<<elseif _appearanceInfos.total >= 175>>
You are a 9/10. You are more attractive than almost all other women on the street. Most women want to be you and most men want to be with you.
<<elseif _appearanceInfos.total >= 120>>
You are a 8/10. Your looks are way above average. Men oftentimes turn their heads after you while you walk down the street.
<<elseif _appearanceInfos.total >= 80>>
You are a 7/10. Your looks are above average. Occisonally men turn their heads after you while you walk down the street.
<<elseif _appearanceInfos.total >= 50>>
You are a 6/10. Your looks are considered slightly above average.
<<elseif _appearanceInfos.total >= 20>>
You are a 5/10. Your looks are considered average.
<<elseif _appearanceInfos.total >= 0>>
You are a 4/10. Your looks are considered slightly below average.
<<elseif _appearanceInfos.total >= -20>>
You are a 3/10. Your looks are considered below average and most men are happy to ignore you.
<<elseif _appearanceInfos.total >= -50>>
You are a 2/10.
<<elseif _appearanceInfos.total >= -100>>
You are a 1/10.
<<else>>
You are a 0/10. Some people pity you.
<</if>>
</div>
</div>
<hr/>
<div class="actions">
[[Back|$currentLocation.id]]
</div><<widget "HairColor">>
You have $pc.body.hair.head.color hair.
<<if $pc.body.hair.head.color == $pc.body.hair.head.colorNatural>>
This is your natural hair color.
<<else>>
Your natural hair color is $pc.body.hair.head.colorNatural.
<</if>>
<</widget>>
<<widget "HairLength">>
<<set _hairHeadLengthState to Body.hairHeadState>>
<<switch _hairHeadLengthState>>
<<case "shaved">>
You have shaved your head. This hair style is a very unconventional choice for a woman.
<<case "buzz">>
Your hair is cut into a buzz cut. This hair style is a very unconventional choice for a woman.
<<case "vshort">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. This is a common length for men, but it is considered very short for women.
<<case "short">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. This is a common length for men, but it is considered rather short for women.
<<case "ear">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. It partly covery your ears. This is longer than most men wear their hair, but it is still shorter than most womens hair.
<<case "chin">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. It reaches your chin. This is the shortest length that could be considered usual for women.
<<case "shoulders">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. It reaches your shoulders. Most women wear their hair this long.
<<case "bra">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. It reaches your bra strap. This is a little longer than most women wear their hair.
<<case "back">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. It reaches your back. This is longer than most women wear their hair.
<<case "waist">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. It reaches your waist. This is way longer than most women wear their hair.
<<case "hips">>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long. It reaches your hips. You rarely see another woman with hair this long.
<<default>>
Your hair is about <<print Math.round(Body.hairHeadLength/10)>> cm long.
<</switch>>
<</widget>><<run console.log($pc.possessions)>>
<<Image "events/bath/shaving-products.jpg">>
<<set _hairLegState to getHairLength("legs")>>
<<switch _hairLegState>>
<<case "fresh">>
Your legs feel as smooth as silk.
<<case "rough">>
Your legs feel a little rough, but there are no visible hairs yet.
<<case "short">>
Your legs feel rough and if you look closely you can see the hair regrowing.
<<case "medium">>
Your legs feel rough and the regrowing hair is clearly visible from a short distance.
<<case "long">>
Your hair on your legs is clearly visible.
<<case "natural">>
Your hair on your legs has its natural length.
<</switch>>
You decided
<<switch $pc.body.hair.private.style>>
<<case "bushy">>
to not shave your private area and keep a natural bush.
<<case "smooth">>
to completely shave your private area and keep it smooth and soft.
<</switch>>
<<set _effectivePrivateStyle to getPrivatesStyle()>>
<<if _effectivePrivateStyle == $pc.body.hair.private.style>>
Your hair currently has this length.
<<else>>
Your hair is currently _effectivePrivateStyle.
<</if>>
<<if !$pc.possessions.razor>>
You don't have any razors.
<<else>>
You have $pc.possessions.razor razor(s).
<</if>>
<<linkreplace "Show shave options for privates">>
<div class="actions selectImages">
<<link `'<p>Smooth</p><img src="'+mediaPath("pc/hair_pubic_smooth.jpg")+'"/>'` "Shave">>
<<set $pc.body.hair.private.style to "smooth">>
<</link>>
<<link `'<p>Bushy</p><img src="'+mediaPath("pc/hair_pubic_bushy.jpg")+'"/>'` "Shave">>
<<set $pc.body.hair.private.style to "bushy">>
<</link>>
</div>
<</linkreplace>>
<<Actions>>
<<if _hairLegState == "fresh">>
<a class="disabled">Shave your legs<p class="disabledMessage">You can't shave your hair any shorter</p></a>
<<else>>
<<ActionA "Shave your legs" "ShaveLegs" `{itemsDec:{id:"razor",count:1,msg:"You don't have any razors."},girliness:"shaveLegs"}`>><</ActionA>>
<</if>>
<<set _desiredPrivateStyle to window.constant.character.body.hair.private.styles[$pc.body.hair.private.style]>>
<<if "lengthMin" in _desiredPrivateStyle>><<set _privateLengthMin to _desiredPrivateStyle.lengthMin>><<else>><<set _privateLengthMin to 0>><</if>>
<<if _effectivePrivateStyle == $pc.body.hair.private.style>>
<a class="disabled">Shave your privates<p class="disabledMessage">Your hair has the desired length.</p></a>
<<elseif $pc.body.hair.private.length < _privateLengthMin>>
<a class="disabled">Shave your privates<p class="disabledMessage">Your can't reach the desired length by shaving.</p></a>
<<else>>
<<ActionA "Shave your privates" "ShavePrivates" `{itemsDec:{id:"razor",count:1,msg:"You don't have any razors."},girliness:"shavePrivates"}`>><</ActionA>>
<</if>>
<<if Body.hairHeadLength < 5>>
<a class="disabled">Shave your head<p class="disabledMessage">Your head is already shaven.</p></a>
<<else>>
<<ActionA "Shave your head" "ShaveHead" `{itemsDec:{id:"razor",count:1,msg:"You don't have any razors."},girliness:"shaveHead",confirm:true}`>><</ActionA>>
<</if>>
<<BackC>>
<</Actions>><<run TimePassSeconds(2400)>>
<<set _image to "events/bath/shave_head("+randomInt(0,0) + ").jpg">>
<<Image _image>>
<<run Body.hairHeadCutToLength(0)>>
<div class="actions">
[[Back|Shave]]
</div><<run TimePassSeconds(1800)>>
<<set _image to "events/bath/shave_leg("+randomInt(0,1) + ").jpg">>
<<Image _image>>
<<set $pc.body.hair.legs.length to 0>>
<div class="actions">
[[Back|Shave]]
</div><<run TimePassSeconds(900)>>
<<set _image to "events/bath/shave_privates("+randomInt(0,0) + ").jpg">>
<<Image _image>>
<<set _desiredPrivateStyle to window.constant.character.body.hair.private.styles[$pc.body.hair.private.style]>>
<<if "lengthMin" in _desiredPrivateStyle>><<set _privateLengthMin to _desiredPrivateStyle.lengthMin>><<else>><<set _privateLengthMin to 0>><</if>>
<<set $pc.body.hair.private.length to _privateLengthMin>>
<div class="actions">
[[Back|Shave]]
</div><h1>Shower</h1>
<<Image "events/bath/shower_female(1).jpg">>
<<run TimePassSeconds(600)>>
<<run cleanBody()>>
<<Actions>>
<<BackC "Leave shower">>
<</Actions>><h1>Wardrobe</h1>
<<if periodActive() && !periodProtected() && Outfits.Current.itemIdBySlot("p")>>
<<Image "events/body/period.jpg">>
<p>
You contemplate putting on some panties.
But there is no sense in doing so.
They would be soiled by your blood immediately.
You should use some female hygiene products first.
</p>
<<run Outfits.Current.unwear("p")>>
<<Actions>>
[[Continue|Wardrobe]]
<</Actions>>
<<elseif Outfits.Current.style.shoeHeight > 3 && skillModifier("heels","fetishHeightEnabled") == false>>
<<Image "events/outfits/shoesTooHigh.jpg">>
<p>These shoes are way too high. You doubt that you could walk even a small distance in them. Maybe you should train with shoes which are not that high first.</p>
<<run Outfits.Current.unwear("shoes")>>
<div class="actions">
[[Continue|Wardrobe]]
</div>
<<elseif Outfits.Current.style.shoeHeight > 1 and !$pc.experiences.includes("highHeels")>>
<<include "FirstTimeHighHeels">>
<div class="actions">
[[Continue|Wardrobe]]
</div>
<<else>>
<<include "WardrobeRender">>
<</if>><<set $wardrobe.filter = {}>>
<<set _class="wardrobe">>
<<if Outfits.Current.slotsCombinedBraPanties>>
<<set _class += " braPantiesCombined">>
<</if>>
<div @class=_class>
<<set _slotIds to outfitSlots>>
<<for _i, _slotId range _slotIds>>
<<capture _slotId>>
<<set _item to Outfits.Current.itemBySlot(_slotId)>>
<<set _itemClass = "item "+window.outfitSlotsLabels[_slotId]>>
<a data-passage="WardrobeSelectItem" @slot="_slotId" onclick="wardrobeSetFilter("slot",this.getAttribute("slot"))" @class=_itemClass @style="'grid-area:'+ _slotId">
<<if _item is null or _item is undefined>>
<p class="itemLabel">No <<print window.outfitSlotsLabels[_slotId]>></p>
<<else>>
<<Image _item.image>>
<p class="itemLabel">_item.label</p>
<</if>>
</a>
<</capture>>
<</for>>
</div>
<<Actions>>
<<ActionA "I. Own. EVERYTHING" "Wardrobe" `{debug:true}`>>
<<for _itemId, _item range window.items>>
<<run OutfitInventory.add(_itemId)>>
<</for>>
<</ActionA>>
<</Actions>>
<hr/>
<<if Outfits.Current.style.coverage eq "underwear">>
You are only wearing underwear.
<<elseif Outfits.Current.style.coverage eq "topless">>
Your breasts are exposed.
<<elseif Outfits.Current.style.coverage eq "naked">>
You are naked.
<<elseif Outfits.Current.style.coverage eq "swim">>
You are wearing swimwear.
<<elseif Outfits.Current.style.coverage eq "nighty">>
You are wearing nightwear.
<</if>>
<<if Outfits.Current.style.school is true>>
You are wearing a school outfit.
<</if>>
<<if Outfits.Current.style.androgynous is true>>
This outfit can be worn by both men and women.
<</if>>
<<if Outfits.Current.style.barefeet eq true>>
You have not selected a pair of shoes to wear outside.
<</if>>
<hr/>
Save Current Outfit: <<textbox "$_newOutfitName" "">> <<button "Confirm">>
<<set $_newOutfitName to $_newOutfitName.trim()>>
<<if $_newOutfitName is "">>
<<replace "#textbox-error">>Please enter a name.<</replace>>
<<elseif Outfits.has($_newOutfitName)>>
<<if Outfits.load($_newOutfitName).protect is true>>
<<replace "#textbox-error">>The selected outfit name is reserved.<</replace>>
<<else>>
<<replace "#textbox-error">>
An outfit of this name already exists.
<<link "Overwrite" "Wardrobe">>
<<run Outfits.save($_newOutfitName)>>
<</link>>
<</replace>>
<</if>>
<<else>>
<<run Outfits.save($_newOutfitName)>>
<<goto "Wardrobe">>
<</if>>
<</button>>
<span id="textbox-error"></span>
<div id="outfitList">
<<for _outfitID, _outfit range $pc.outfits>>
<<capture _outfitID>>
<<if _outfit.hidden is true>>
<<else>>
<<ActionA _outfitID "Wardrobe" `{girliness:{outfit:_outfitID,type:"outfit"}}`>>
<<run Outfits.equip(_outfitID)>>
<</ActionA>>
<<link "Overwrite" "Wardrobe">>
<<run Outfits.save(_outfitID)>>
<</link>>
<<if _outfit.protected is true>>
<a></a>
<<else>>
<a data-passage="Wardrobe" @outfitID="_outfitID" onclick="Outfits.remove(this.getAttribute("outfitID"))">Remove</a>
<</if>>
<</if>>
<</capture>>
<</for>>
</div>
<hr/>
<div class="actions">
<<ActionA "Back" $currentLocation.id `{outfit:$passageArguments.outfitRequirement}`>>
<<set $passageArguments.outfitRequirement to {}>>
<</ActionA>>
</div><div id="wardrobeselectitem" class="fullHeight">
<div id="itemPreview"></div>
<div id="wardrobeCurrentlyWearing">
<<set _showCurrent to getVar("display.wardrobe.showCurrent",false)>>
<<if _showCurrent is true>>
<h3>Currently wearing:</h3>
<<set _currentItem = Outfits.Current.itemBySlot($wardrobe.filter.slot)>>
<<Image _currentItem.image>>
<<Actions>>
<<if _currentItem>>
<a data-passage="Wardrobe" @itemType="$wardrobe.filter.slot" onclick="Outfits.Current.unwear(this.getAttribute("itemType"))">Remove</a>
<</if>>
<<link "Hide" "WardrobeSelectItem">>
<<run setVar("display.wardrobe.showCurrent",false)>>
<</link>>
<</Actions>>
<<else>>
<<Actions>>
<<link "Show currently wearing" "WardrobeSelectItem">>
<<run setVar("display.wardrobe.showCurrent",true)>>
<</link>>
<</Actions>>
<</if>>
<hr/>
<div id="wardrobeErrors"></div>
</div>
<div id="wardrobeFilters">
<<if $wardrobe.filter.slot == "p" or $wardrobe.filter.slot == "b">>
<<button "Nighty">>
<<set $wardrobe.filter.type ="ni">>
<<goto "WardrobeSelectItem">>
<</button>>
<<button "Swimwear">>
<<set $wardrobe.filter.type ="sw">>
<<goto "WardrobeSelectItem">>
<</button>>
<<button "Underwear">>
<<set $wardrobe.filter.type=$wardrobe.filter.slot>>
<<goto "WardrobeSelectItem">>
<</button>>
<<button "Underwear Sets">>
<<set $wardrobe.filter.type="u">>
<<goto "WardrobeSelectItem">>
<</button>>
<</if>>
</div>
<div id="wardrobeItemList" class="selectImages">
<<set _currentSelectedItem to null>>
<<for _i, _item range OutfitInventory.itemsFilter($wardrobe.filter)>>
<<capture _item>>
<<SelectImage _item.label null _item.image>>
<<if _currentSelectedItem == _item.id>>
<<set _moodRequired to Girliness.moodRequiredTotal(Girliness.itemGirliness(_item),"outfit")>>
<<if _moodRequired == 0>>
<<run Outfits.Current.wear(_item.id)>>
<<run moodDec(_moodRequired)>>
<<goto "Wardrobe">>
<<else>>
<<replace "#wardrobeErrors">>
You can't quick-wear something that stresses you out.
<</replace>>
<<timed "3s">>
<<replace "#wardrobeErrors">>
<</replace>>
<</timed>>
<</if>>
<<else>>
<<set _currentSelectedItem to _item.id>>
<<replace "#itemPreview">>
<<WardrobeItemDetails _item.id>>
<</replace>>
<<timed 1s>>
<<set _currentSelectedItem to null>>
<</timed>>
<</if>>
<</SelectImage>>
<</capture>>
<</for>>
</div>
<div class="actions">
[[Back|Wardrobe]]
</div>
</div><<widget "WardrobeItemDetails">>
<<ItemInfo _args[0]>>
<<Actions>>
<<ActionA "Put on" "Wardrobe" `{girliness:{value:Girliness.itemGirliness(_item),type:"outfit"}}`>>
<<run Outfits.Current.wear(_args[0])>>
<</ActionA>>
<</Actions>>
<</widget>>
<<widget "ItemInfo">>
<<set _item to Items.load(_args[0])>>
<<Image _item.image>>
<h3>_item.label</h3>
<<set _displayType to _item.typeLabel>>
<p><<print ["Low","Medium","High","Very high"][_item.quality]>> quality _displayType</p>
<p>
Color: _item.color
<<linkreplace "?">>
<br/>
<<print capitalizeFirstLetter(_item.color)>> is the most prominent color of this item.<br/>
Some characters have preferences regarding the color of certain items. You can make them happier by meeting these preferences.
<</linkreplace>>
</p>
<<if _item.type =="c">>
<p>
Licentiousness: <<print ["Religious","Prudish","Conservative","Common","Attractive","Slutty","Whorish"][_item.lic]>>
<<linkreplace "?">>
<br/>
<<switch _item.lic>>
<<case 0>>
This outfit covers almost all of your skin.
It might be worn by believers of religions who cover their skin for religious reasons.
Wearing it is most uncommon for anybody else.
<<case 1>>
This outfit covers most of your skin. It is a good choice if you don't want to attract attention with your female appearnace.
<<case 2>>
This outfit is suitable for visiting church and formal events.
<<case 3>>
This outfit covers enough of your skin to be suitable for most everyday situations and activities.
You should wear something less revealing if you want to go to church or something sexier if you want to attract attention.
<<case 4>>
This outfit reveals enough of your skin and curves to be considered sexy, but not enough to be distasteful.
Picking an outfit like this is a good idea if you want to go partying, but you should not wear it to classy or formal events.
<<case 5>>
This outfit reveals much of your skin. It sends the clear message to anyone that you are here to have fun.
It is suitable for partying and can be used for whoring. It is considered offensive at formal and classy events.
<<case 6>>
This outfit tells everybody that you are for sale. You should only wear it in private or when you actually when to work as a prostitute.
<</switch>>
<</linkreplace>>
</p>
<<if _item.special.contains("androgynous")>>
<p>
Androgynous
<<linkreplace "?">>
<br/>
Some people might get the impression that you are not interested in men if you're wearing an androgynous outfit.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("maid")>>
<p>
Maid uniform
<<linkreplace "?">>
<br/>
This is a maids uniform. It is also a suitable costume for costume parties.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("school")>>
<p>
School uniform
<<linkreplace "?">>
<br/>
You need to be wearing a school uniform to school. It is also a suitable costume for costume parties.
<</linkreplace>>
</p>
<</if>>
<<elseif _item.type =="s">>
<p>
Height: <<print ["Flat","Low","Medium","High","Fetish"][_item.height]>>
<<linkreplace "?">>
<br/>
<<if _item.height == 0>>
These shoes are flat. This does nothing for your appearance, but they are more comfortable to walk in than shoes with heels.
<<elseif _item.height == 1>>
These shoes have short heels, a compromise between comfort and appearance.
<<elseif _item.height == 2>>
These shoes have medium heels. Walking in them for too long will be uncomfortable, but they give you a more feminine appearance.
<<elseif _item.height == 3>>
These shoes have high heels. Wearing them is challanging for most women, but they boost the feminine appearance greatly.
<<elseif _item.height == 4>>
These shoes have extremely high heels. Walking in them is impossible without much training. They have a big erotic appeal and are therefore not suited for most circumstances.
<</if>>
<</linkreplace>>
</p>
<<if _item.special.contains("lockable")>>
<p>
Lockable
<<linkreplace "?">>
<br/>
These shoes feature a locking mechanism.
If the lock is closed and the key removed, the wearer won't be able to put them off.
Be mindful who you give the keys to.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("androgynous")>>
<p>
Androgynous
<<linkreplace "?">>
<br/>
These shoes can be worn by both men and women.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("warm")>>
<p>
Warm
<<linkreplace "?">>
<br/>
These shoes keep your feet warm during cold temperatures.
<</linkreplace>>
</p>
<<else>>
<p>
NOT Warm
<<linkreplace "?">>
<br/>
These shoes do not keep your feet warm during cold temperatures.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("waterprotect")>>
<p>
Waterprotect
<<linkreplace "?">>
<br/>
These shoes keep your feet dry during rain and snow.
<</linkreplace>>
</p>
<<else>>
<p>
NOT Waterprotect
<<linkreplace "?">>
<br/>
These shoes do not keep your feet dry during rain and snow.
<</linkreplace>>
</p>
<</if>>
<</if>>
<<if ["p","b","u"].includes(_item.type)>>
<</if>>
<<if _item.special.contains("bnaked")>>
<p>
Exposed breasts
<<linkreplace "?">>
<br/>
Exposes enough of your breast for them to be considered not covered.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("noSupport")>>
<p>
No breast support
<<linkreplace "?">>
<br/>
As good as not wearing a bra. Depending on your breasts size, this might be uncomfortable.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("leather")>>
<p>
Leather
<<linkreplace "?">>
<br/>
It is mostly made out of leather.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("lingerie")>>
<p>
Lingerie
<<linkreplace "?">>
<br/>
Makes sex with you more fun.
<</linkreplace>>
</p>
<</if>>
<<if _item.special.contains("hosiery")>>
<p>
Hosiery
<<linkreplace "?">>
<br/>
Includes matching hosiery.
<</linkreplace>>
</p>
<</if>>
<<set _girliness = Girliness.itemGirliness(_item)>>
<<set _moodRequired = Girliness.moodRequired(_girliness)>>
<<if _moodRequired.girly == Infinity>>
<p>This is way too girly for you. There is no way you would be wearing it.</p>
<<elseif _moodRequired.girly > 10>>
<p>This is way more girly than you would be comfortable wearing. You might convince yourself to do so, though.</p>
<<elseif _moodRequired.girly > 0>>
<p>This is a little more girly than you would be comfortable wearing.</p>
<</if>>
<</widget>><<Actions>>
<<link [[Pass a day|$currentLocation.id]]>>
<<run TimePassSeconds(3600*24)>>
<</link>>
<<link [[Meet random dude|MeetRandomDude]]>>
<</link>>
[[DebugSun]]
<<link [[DebugItems|Shop]]>>
<<set $passageArguments.shopId to "ALL">>
<</link>>
<<link [[Start Period|Debug]]>>
<<run periodStart()>>
<</link>>
<</Actions>>
<<for _i, _npcRaw range $npcs>>
<<capture _i>>
<<set _npc to NPCs.load(_i)>>
<div class="entry">
<<Image _npc.image>>
<p class="name"><<link [[_npc.nameFormat()|DebugCharacter]]>><<set $debugCharacterId to _i>><</link>></p>
<p></p>
</div>
<</capture>>
<</for>>
<hr/>
<<Actions>>
[[Back|$currentLocation.id]]
<</Actions>><<set _npc to NPCs.load($debugCharacterId)>>
<<print JSON.stringify(_npc.rawData, null, '*').replace('*',' ')>>
<<if "dating" in _npc>>
<<link [["Date now"|DatePickup]]>>
<<run $dates.push({type:"datenight",npcId:$debugCharacterId,time:Now(),destination:"restaurant"})>>
<<set $passageArguments.dateId to $dates.length - 1>>
<</link>>
<</if>>
<<Actions>>
[[Debug]]
<</Actions>><<include "SVG_SUN">>
<<textbox "_time" $time>><br/>
<<link [["Change Date"|DebugSun]]>>
<<set $time to new Date(_time)>>
<</link>>
<hr/>
[[Back|$currentLocation.id]]<<set $itemImport to {path:recall("itemCreatePath","items"),index:0,items:{},itemsLeft:[]}>>
<h1>Item Create</h1>
<p>[[Guide|ItemCreateGuide]]</p>
<p>
The path must be relative to your media-folder.<br/>
Example: You want to add items from the folder <i>D:\Users\Lars\Dokumente\Development\Berlin\media\items\clothes\pants\YoungConservative</i>.
You would then enter the path <i>items\clothes\pants\YoungConservative</i> in the textbox below.
</p>
<p>Path: <<textbox "$itemImport.path" $itemImport.path>></p>
<<Actions>>
<<ActionA "Next" "ItemCreateLoadFiles">>
<<run memorize("itemCreatePath",$itemImport.path)>>
<</ActionA>>
<</Actions>><p style="font-size:1.5em">
Path: $itemImport.path
</p>
<p>
Use the dialog below and navigate to your chosen folder.
In the previous example that would be <i>D:\Users\Lars\Dokumente\Development\Berlin\media\items\clothes\pants\YoungConservative</i>.
Select all files you want to import and confirm.
Files already in the database will be skipped.
Please stay by while the script checks for duplicates.
It might take some time (depending on your machine and on how big the database already is).
</p>
<p>Load Files: <input type="file" multiple id="itemFiles" accept=".jpg"></p>
<<Actions>>
<<ActionA "Start" "ItemCreateOverview">>
<<set _files to $('#itemFiles')[0].files>>
<<for _i to 0; _i lt _files.length; _i++>>
<<set _file to _files[_i]>>
<<set _filePath to $itemImport.path +'/'+ _file.name>>
<<set _filePath = _filePath.replace(/\\/g,'/')>>
<<set _filePath = _filePath.replace('//','/')>>
<<if !!Items.idByImage(_filePath) is true>>
<<continue>>
<</if>>
<<run console.log(_filePath)>>
<<run $itemImport.itemsLeft.push(_filePath)>>
<</for>>
<</ActionA>>
<</Actions>><p>You will be importing the following items:</p>
<div class="itemList">
<<for _i,_path range $itemImport.itemsLeft>>
<div class="item">
<<Image _path>>
</div>
<</for>>
</div>
<p>
At the beginning of each iteration you have to option to Finish editing.
You will then be presented with the generated code.
Feel free to use the Back-Option (Top Left in the sidebar) if you changed your mind regard a selected option.
</p>
<<Actions>>
[[Confirm|ItemCreateImport]]
[[Start over|ItemCreate]]
<<BackC "Abort">>
<</Actions>><<set $currentItem to {path:$itemImport.itemsLeft[$itemImport.index]}>>
<div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link [["Outfit"|ItemConfigure]]>>
<<set $currentItem.type to "c">>
<<set $itemCreateQueue to ["OutfitType","Color","Lic","Quality","Store"]>>
<</link>>
<<link [["Shoes"|ItemConfigure]]>>
<<set $currentItem.type to "s">>
<<set $itemCreateQueue to ["ShoeType","Height","Color","Quality","Store"]>>
<</link>>
<<link [["Bra"|ItemConfigure]]>>
<<set $currentItem.type to "b">>
<<set $itemCreateQueue to ["BraType","Color","Quality","Store"]>>
<</link>>
<<link [["Panties"|ItemConfigure]]>>
<<set $currentItem.type to "p">>
<<set $itemCreateQueue to ["Color","Quality","Store"]>>
<</link>>
<<link [["Underwear Combination"|ItemConfigure]]>>
<<set $currentItem.type to "u">>
<<set $itemCreateQueue to ["CombinationStyle","Color","Quality","Store"]>>
<</link>>
<<link [["Nighty"|ItemConfigure]]>>
<<set $currentItem.type to "ni">>
<<set $itemCreateQueue to ["Color","Quality","Store"]>>
<</link>>
<<link [["Swimming"|ItemConfigure]]>>
<<set $currentItem.type to "sw">>
<<set $itemCreateQueue to ["SwimStyle","Color","Quality","Store"]>>
<</link>>
<div id="generalOptions">
<<link [[Skip|ItemCreateImport]]>>
<<set $itemImport.index+= 1>>
<</link>>
[[Finish|ItemCreateFinish]]
</div>
</div>
</div><p>Make sure to send all of the output below to one of the developers. Alternatively, if you know what you are doing, you can insert it in ./data/items.js to test it.</p>
<div id="itemcreation">
<div class="output">
<<for _i,_item range $itemImport.items>>
"_i":<<print JSON.stringify(_item).replace(/"([\w]+)":/g,(m,p)=>{return p+":";})>>,<br/>
<</for>>
</div>
</div>
<<Actions>>
[[Start over|ItemCreate]]
<<BackC "Return to game">>
<<ActionA "Return to game and add imported items<p>WARNING: They will only stay there until you reload the game-page</p>" $returnPassage>>
<<run window.items = Object.assign(window.items,$itemImport.items)>>
<</ActionA>>
<</Actions>><<if $itemCreateQueue.length > 0>>
<<set _stage to "ItemCreate"+$itemCreateQueue.shift()>>
<<include _stage>>
<<else>>
<<include "ItemCreateFinalize">>
<</if>><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link "Comfy<p>Comfortable to wear for most activities.</p>">>
<<set $currentItem.style to "comfy">>
<<goto "ItemConfigure">>
<</link>>
<<link "Lingerie<p>Nice to look at. Increases sexual enjoyment of partner.</p>">>
<<set $currentItem.style to "lingerie">>
<<goto "ItemConfigure">>
<</link>>
<<link "Sports<p>Supports breast during sports.</p>">>
<<set $currentItem.style to "sports">>
<<goto "ItemConfigure">>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link [["Dress"|ItemConfigure]]>>
<<set $currentItem.style to "dress">>
<</link>>
<<link [["Top + Skirt"|ItemConfigure]]>>
<<set $currentItem.style to "skirt">>
<</link>>
<<link [["Top + Pants"|ItemConfigure]]>>
<<set $currentItem.style to "pants">>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link [["Boots"|ItemConfigure]]>>
<<set $currentItem.style to "boots">>
<<run $itemCreateQueue.unshift("Shaft")>>
<</link>>
<<link [["Pumps"|ItemConfigure]]>>
<<set $currentItem.style to "pumps">>
<</link>>
<<link [["Sandals"|ItemConfigure]]>>
<<set $currentItem.style to "sandals">>
<</link>>
<<link [["Sneakers"|ItemConfigure]]>>
<<set $currentItem.style to "sneakers">>
<</link>>
<<link [["Sport Shoes"|ItemConfigure]]>>
<<set $currentItem.style to "sport">>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link [["Bra and Panties"|ItemConfigure]]>>
<<set $currentItem.style to "braAndPanties">>
<</link>>
<<link [["Strapshemd"|ItemConfigure]]>>
<<set $currentItem.style to "Strapshemd">>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link [["Bikini"|ItemConfigure]]>>
<<set $currentItem.swim to "bikini">>
<</link>>
<<link [["Swimsuit"|ItemConfigure]]>>
<<set $currentItem.swim to "suit">>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link [["Overknee"|ItemConfigure]]>>
<<set $currentItem.shaft to "overknee">>
<</link>>
<<link [["Slightly below knee"|ItemConfigure]]>>
<<set $currentItem.shaft to "underknee">>
<</link>>
<<link [["Ankle"|ItemConfigure]]>>
<<set $currentItem.shaft to "ankle">>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link [["Fetish"|ItemConfigure]]>>
<<set $currentItem.height to 4>>
<</link>>
<<link [["High"|ItemConfigure]]>>
<<set $currentItem.height to 3>>
<</link>>
<<link [["Medium"|ItemConfigure]]>>
<<set $currentItem.height to 2>>
<</link>>
<<link [["Low"|ItemConfigure]]>>
<<set $currentItem.height to 1>>
<</link>>
<<link [["Flat"|ItemConfigure]]>>
<<set $currentItem.height to 0>>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<p>Select the most prominent color. For clothes it is most likely the color of the top. Use coloful if there are three or more prominent colors.</p>
<<for _colorId, _colorName range window.constant.color>>
<<capture _colorId>>
<<if _colorName == "colorful">>
<<set _linkText to '<a style="background-image: linear-gradient(to right, red,orange,yellow,green,blue,indigo,violet);">'+_colorName+'</a>'>>
<<else>>
<<set _linkText to '<a style="background: '+_colorName+';">'+_colorName+'</a>'>>
<</if>>
<<link _linkText>>
<<set $currentItem.c to _colorId>><<goto "ItemConfigure">>
<</link>>
<</capture>>
<</for>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link "Religious<p>Covers nearly all of the body and the body for religious reasons.</p>">>
<<set $currentItem.lic to 0>>
<<goto "ItemConfigure">>
<</link>>
<<link "Prudish<p>Covers most of the legs and the arms and does not have cleavage.</p>">>
<<set $currentItem.lic to 1>>
<<goto "ItemConfigure">>
<</link>>
<<link "Conservative<p>Likely covers the knees and shoulders. Suitable for wearing at church.</p>">>
<<set $currentItem.lic to 2>>
<<goto "ItemConfigure">>
<</link>>
<<link "Common<p>Likely covers the shoulders and most of the upper legs. Might have a little bit of cleavage. Suitable for wearing at grandmas birthday.</p>">>
<<set $currentItem.lic to 3>>
<<goto "ItemConfigure">>
<</link>>
<<link "Attractive<p>Likely covers half of the upper legs. Attractive cleavage. Suitable for wearing at a party. Conservative parents might not let you leave the house dressed like this.</p>">>
<<set $currentItem.lic to 4>>
<<goto "ItemConfigure">>
<</link>>
<<link "Slutty<p>Covers only bit of the upper leg. Might have big cut outs. Sizeable cleavage. Suitable for drawing attention at parties.</p>">>
<<set $currentItem.lic to 5>>
<<goto "ItemConfigure">>
<</link>>
<<link "Whorish<p>Only covers a tiny bit of your body. Suitable for letting others know that you are for sale. Inappropriate at most places.</p>">>
<<set $currentItem.lic to 6>>
<<goto "ItemConfigure">>
<</link>>
</div>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<<link "Low<p>Mass produced. Cheap materials.</p>">>
<<set $currentItem.q to 0>>
<<goto "ItemConfigure">>
<</link>>
<<link "Medium<p>Medium quality.</p>">>
<<set $currentItem.q to 1>>
<<goto "ItemConfigure">>
<</link>>
<<link "High<p>Hand made. Good materials.</p>">>
<<set $currentItem.q to 2>>
<<goto "ItemConfigure">>
<</link>>
<<link "Very high<p>Hand made in a manufactury or by a master. Expensive materials.</p>">>
<<set $currentItem.q to 3>>
<<goto "ItemConfigure">>
<</link>>
</div><div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<p>The shop where this item can be bought.</p>
<<if $currentItem.type eq "c">>
<<link "FN<p>Attractive young adult fashion.</p>">>
<<set $currentItem.s to "FN">>
<<goto "ItemConfigure">>
<</link>>
<<link "HS<p>Conservative fashion.</p>">>
<<set $currentItem.s to "HS">>
<<goto "ItemConfigure">>
<</link>>
<<link "Hard Rock<p>Leather and Hard Rock fashion.</p>">>
<<set $currentItem.s to "HR">>
<<goto "ItemConfigure">>
<</link>>
<<link "Cherie<p>Expensive dresses.</p>">>
<<set $currentItem.s to "C">>
<<goto "ItemConfigure">>
<</link>>
<<link "Budget<p>Cheap clothes.</p>">>
<<set $currentItem.s to "BUD">>
<<goto "ItemConfigure">>
<</link>>
<<link "School<p>School supplies.</p>">>
<<set $currentItem.s to "S">>
<<goto "ItemConfigure">>
<</link>>
<<link "Sex<p>Outfits for stripping, prostitution and private fun.</p>">>
<<set $currentItem.s to "Sex">>
<<goto "ItemConfigure">>
<</link>>
<<elseif $currentItem.type eq "s">>
<<link "Shoe Central<p>Sneakers and cute high heels.</p>">>
<<set $currentItem.s to "SC">>
<<goto "ItemConfigure">>
<</link>>
<<link "Sex<p>Fetish-Shoes for stripping, prostitution and private fun.</p>">>
<<set $currentItem.s to "Sex">>
<<goto "ItemConfigure">>
<</link>>
<<link "Cherie<p>Expensive shoes.</p>">>
<<set $currentItem.s to "C">>
<<goto "ItemConfigure">>
<</link>>
<<elseif $currentItem.type eq "b" or $currentItem.type eq "p" or $currentItem.type eq "u" or $currentItem.type eq "ni">>
<<link "FN<p>Attractive young adult fashion.</p>">>
<<set $currentItem.s to "FN">>
<<goto "ItemConfigure">>
<</link>>
<<link "Engelen<p>Good quality sexy underwear.</p>">>
<<set $currentItem.s to "EN">>
<<goto "ItemConfigure">>
<</link>>
<<link "Vanessas Private Collection<p>Good quality sexy underwear.</p>">>
<<set $currentItem.s to "VPC">>
<<goto "ItemConfigure">>
<</link>>
<<link "Budget<p>low prices, low quality.</p>">>
<<set $currentItem.s to "BUD">>
<<goto "ItemConfigure">>
<</link>>
<<elseif $currentItem.type eq "sw">>
<<link "Sport Palast<p>Sport and swimming.</p>">>
<<set $currentItem.s to "sp">>
<<goto "ItemConfigure">>
<</link>>
<</if>>
<<link "Nowhere<p>This is a special item and can only be obtained in special events.</p>">>
<<set $currentItem.s to "-">>
<<goto "ItemConfigure">>
<</link>>
</div><<set _id to $currentItem.path>>
<<set _id to _id.substring(0, _id.length - 4)>>
<<if _id.substring(0,6) == "items/">><<set _id to _id.substring(6)>><</if>>
<<set _label to "AUTO">>
<div id="itemcreation">
<<Image $currentItem.path>>
<div id="outfitOptions">
<div id="finalOptions">
<label for="textbox--label">Label:</label><<textbox "_label" _label>>
<span>Extras:</span>
<<set _enabledExtras = {}>>
<<if $currentItem.type eq "c">>
<<set _enabledExtras = Object.assign({},_enabledExtras,
{
school: true,
costume: true,
sport: true,
androgynous: true,
leather:true
}
)>>
<</if>>
<<if $currentItem.type eq "b" or $currentItem.type eq "u">>
<<set _enabledExtras = Object.assign({},_enabledExtras,
{
lingerie: true,
noSupport: true,
androgynous: true,
leather:true,
bnaked:true
}
)>>
<</if>>
<<if $currentItem.type eq "p" or $currentItem.type eq "u">>
<<set _enabledExtras = Object.assign({},_enabledExtras,
{
lingerie: true,
androgynous: true,
leather:true,
hosiery:true
}
)>>
<</if>>
<<set _extras = {}>>
<ul>
<<for _extraId,_true range _enabledExtras>>
<<capture _extraId>>
<li>
<<set _extras[_extraId] = false>>
<<checkbox "_extras[_extraId]" false true autocheck>>
<<switch _extraId>>
<<case "androgynous">>
Androgynous (can be worn by both men and women)
<<case "bnaked">>
Does not cover the breasts.
<<case "costume">>
Costume (can be worn at costume parties)
<<case "hosiery">>
Hosiery (hosiery is included)
<<case "leather">>
Leather (the item is mainly made out of leather)
<<case "lingerie">>
Lingerie (Increases sexual enjoyment of partner)
<<case "noSupport">>
Does not support breasts.
<<case "school">>
School Uniform (also considered a costume outside of school context)
<<case "sport">>
Sport Outfit
<<default>>
_extraId
<</switch>>
</li>
<</capture>>
<</for>>
</ul>
<div class="actions" style="grid-column: 1 / 3;">
<<link [["Save"|ItemCreateImport]]>>
<<if _label != "AUTO">><<set $currentItem.label to _label>><</if>>
<<run delete $currentItem.path>>
<<set $currentItem.sp to []>>
<<for _extraId,_enabled range _extras>>
<<if _enabled>>
<<run $currentItem.sp.push(_extraId)>>
<</if>>
<</for>>
<<set $itemImport.items[_id] to $currentItem>>
<<run console.log($currentItem)>>
<<set $itemImport.index+= 1>>
<</link>>
<<link [[Discard and edit next item|ItemCreateImport]]>>
<<set $itemImport.index+= 1>>
<</link>>
</div>
</div>
</div>
</div><ul>
<<if $currentItem.type eq "shoes">>
<li>
<<checkbox "_school" false true autocheck>> School Shoes (should be black flats or pumps of med height max)
</li>
<li>
<<set _warm to false>>
<<if $currentItem.style eq "sneakers">><<set _warm to true>><</if>>
<<checkbox "_warm" false true autocheck>> Warm (will keep your feet warm enough during low temperatures)
</li>
<li>
<<set _waterprotect to false>>
<<if $currentItem.style eq "sneakers">><<set _waterprotect to true>><</if>>
<<checkbox "_waterprotect" false true autocheck>> Waterprotected (will keep your feet dry during rain)
</li>
<li>
<<set _lockable to false>>
<<checkbox "_lockable" false true autocheck>> Lockable (can be locked, effectively preventing the wearer from removing them)
</li>
<li>
<<set _androgynous to false>>
<<checkbox "_androgynous" false true autocheck>> Androgynous (can be worn by both men and women)
</li>
<</if>>
<<if $currentItem.type eq "bra" or ($currentItem.type eq "panties" and $currentItem.type eq "combination")>>
<li>
<<set _pushup to false>>
<<checkbox "_pushup" false true autocheck>> Push up (increases the wearers visible breast size by one size)
</li>
<</if>>
<<if $currentItem.type eq "panties">>
<</if>>
</ul>
</div>
</div>
</div><<Image "tools/itemCreate/01_folder.jpg">>
<p>Step 1: Locate the folder "media/items" in your file browser.</p>
<<Image "tools/itemCreate/02_folderCreate.jpg">>
<p>Step 2: Create a new folder (here or in one of the existing subfolders). Choose any name you like. In this example, it's "itemsByHighlandMaster".</p>
<<Image "tools/itemCreate/03_placeImages.jpg">>
<p>Step 3: Place the images of the items you want to create in your new folder.</p>
<<Image "tools/itemCreate/04_itemCreate.jpg">>
<p>Step 4: Start Berlin and enable Debug-Activities in settings. Then hit ItemCreate in the sidebar.</p>
<<Image "tools/itemCreate/05_correctPath.jpg">>
<p>Step 5: Type in the relative path of your folder.</p>
<<Image "tools/itemCreate/06_choseFiles.jpg">>
<p>Step 6: Click the button on the next window to "upload" your images. Select all images in your folder and confirm.</p>
<p>If you set up everything correctly, the next screen will give you an overview of the items you want to import.</p>
<p>Step 7-9: Click through the options. In the likely case, that an option you'd like to choose is missing, pick the closest option and write down which option you're missing in a seperate file.
<<Image "tools/itemCreate/10_finish.jpg">>
<p>Step 10: Once you have imported all images hit "Finish".</p>
<<Image "tools/itemCreate/11_code.jpg">>
<p>Step 11: Copy the displayed code and paste it in a text file (.txt works best). Zip this file, your new images folder and any other relevant information together and send it to a developer.</p>
<<Actions>>
[[Back|ItemCreate]]
<</Actions>>[[PortraitTest]]
<<set $portraitImport to {path:"npc/r",index:0,portraits:{},portraitsLeft:[]}>>
<h1>Portrait Create</h1>
<p>Path: <<textbox "$portraitImport.path" $portraitImport.path>></p>
<p>Load Files: <input type="file" multiple id="portraitFiles" accept=".jpg"></p>
<<button "Go">>
<<set _files to $('#portraitFiles')[0].files>>
<<for _i to 0; _i lt _files.length; _i++>>
<<set _file to _files[_i]>>
<<set _filePath to $portraitImport.path +'/'+ _file.name>>
<<set _filePath = _filePath.replace(/\\/g,'/')>>
<<set _filePath = _filePath.replace('//','/')>>
<<set _filePath = _filePath.split(".")[0]>>
<<if _filePath in window.portraits>>
<<continue>>
<</if>>
<<run $portraitImport.portraitsLeft.push(_filePath)>>
<</for>>
<<run console.log($portraitImport)>>
<<goto "PortraitCreateImport">>
<</button>><<button "Start Over">><<goto "PortraitCreate">><</button>>
<<set $currentPortrait to {path:$portraitImport.portraitsLeft[$portraitImport.index]}>>
<div id="portrait">
<<Image `$currentPortrait.path+".jpg"`>>
<div id="portraitOptions">
<div id="portraitSex">
<<button "Female">>
<<set $currentPortrait.s = 0>>
<<replace "#portraitSex">>Sex: Female<</replace>>
<<append "#portraitOptions">><<PortraitCreateAge>><</append>>
<</button>>
<<button "Male">>
<<set $currentPortrait.s = 1>>
<<replace "#portraitSex">>Sex: Male<</replace>>
<<append "#portraitOptions">><<PortraitCreateAge>><</append>>
<</button>>
</div>
</div>
</div>
<<button "Skip">>
<<set $portraitImport.index += 1>>
<<goto "PortraitCreateImport">>
<</button>>
<<button "Output">>
<<replace "#portraitOutput">>
<<set _output to JSON.stringify($portraitImport.portraits,null,4)>>
<<textarea "_output" _output>>
<</replace>>
<</button>>
<<button "Output portraits.js">>
<<replace "#portraitOutput">>
<<set _mergedObject = Object.assign({},$portraitImport.portraits,window.portraits)>>
<<set _mergedObject = objectSortByKeys(_mergedObject)>>
<<set _output = JSON.stringify(_mergedObject,null,4)>>
<<set _output = `window.portraits = ${_output}\n`>>
<<textarea "_output" _output>>
<</replace>>
<</button>>
<div id="portraitOutput"></div><<widget "PortraitCreateAge">>
<div id="portraitAge">
<<button "0-1 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 0 1>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "2-6 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 2 6>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "7-12 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 7 12>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "13-17 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 13 17>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "18-25 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 18 25>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "26-35 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 26 35>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "36-45 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 36 45>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "46-55 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 46 55>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "56-65 years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 56 65>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
<<button "66+ years">><<replace "#portraitAge">><<PortraitCreateAgeDetails 66 99>><</replace>><<append "#portraitOptions">><<PortraitCreateEthnicity>><</append>><</button>>
</div>
<</widget>>
<<widget "PortraitCreateAgeDetails">>
<<set $currentPortrait.an to _args[0]>>
<<set $currentPortrait.ax to _args[1]>>
Age Min: <<textbox "$currentPortrait.an" $currentPortrait.an>>
Max: <<textbox "$currentPortrait.ax" $currentPortrait.ax>>
<</widget>>
<<widget "PortraitCreateEthnicity">>
<div id="portraitEhtnicity">
<<button "Caucasian">><<set $currentPortrait.e to 0>><<replace "#portraitEhtnicity">>Ehtnicity: Caucasian<</replace>><<append "#portraitOptions">><<PortraitAttractiveness>><</append>><</button>>
<<button "African">><<set $currentPortrait.e to 1>><<replace "#portraitEhtnicity">>Ehtnicity: African<</replace>><<append "#portraitOptions">><<PortraitAttractiveness>><</append>><</button>>
<<button "Arab">><<set $currentPortrait.e to 2>><<replace "#portraitEhtnicity">>Ehtnicity: Arab<</replace>><<append "#portraitOptions">><<PortraitAttractiveness>><</append>><</button>>
<<button "Asia">><<set $currentPortrait.e to 3>><<replace "#portraitEhtnicity">>Ehtnicity: Asia<</replace>><<append "#portraitOptions">><<PortraitAttractiveness>><</append>><</button>>
<<button "Indian">><<set $currentPortrait.e to 4>><<replace "#portraitEhtnicity">>Ehtnicity: Indian<</replace>><<append "#portraitOptions">><<PortraitAttractiveness>><</append>><</button>>
<<button "Native American">><<set $currentPortrait.e to 5>><<replace "#portraitEhtnicity">>Ehtnicity: Native American<</replace>><<append "#portraitOptions">><<PortraitAttractiveness>><</append>><</button>>
</div>
<</widget>>
<<widget "PortraitAttractiveness">>
<div id="portraitAttractiveness">
<<button "Attractive">><<set $currentPortrait.at to 2>><<replace "#portraitAttractiveness">>Attractive<</replace>><<append "#portraitOptions">><<PortraitFinalize>><</append>><</button>>
<<button "Average">><<set $currentPortrait.at to 1>><<replace "#portraitAttractiveness">>Average Attractive<</replace>><<append "#portraitOptions">><<PortraitFinalize>><</append>><</button>>
<<button "Unattractive">><<set $currentPortrait.at to 0>><<replace "#portraitAttractiveness">>Unattractive<</replace>><<append "#portraitOptions">><<PortraitFinalize>><</append>><</button>>
</div>
<</widget>>
<<widget "PortraitFinalize">>
<<button "Finalize">>
<<set _portraitId to $currentPortrait.path.split('.')[0]>>
<<run delete $currentPortrait.path>>
<<set $portraitImport.portraits[_portraitId] = $currentPortrait>>
<<set $portraitImport.index += 1>>
<<run console.log($portraitImport)>>
<<goto "PortraitCreateImport">>
<</button>>
<</widget>><<set _portraitTest to {sex:0,age:20}>>
<p><<radiobutton "_portraitTest.sex" 0 autocheck>> Female <<radiobutton "_portraitTest.sex" 1 autocheck>> Male</p>
<p>Age: <<textbox "_portraitTest.age" _portraitTest.age>></p>
<<button "Go">>
<<replace "#portraitTestImage">>
<<set _portrait to portrait(_portraitTest.sex,_portraitTest.age,0)>>
<<set _imageFile to _portrait+".jpg">>
<h2>_imageFile</h2>
<<print JSON.stringify(window.portraits[_portrait])>>
<<Image _imageFile>>
<</replace>>
<</button>>
<div id="portraitTestImage">
</div><h1>Credits</h1>
<h2>Code</h2>
<ul>
<li>Lars Bauer (<a href="https://tfgames.site/phpbb3/memberlist.php?mode=viewprofile&u=206800">GermanWithSherman</a>)</li>
</ul>
<h2>Content</h2>
<ul>
<li>Lars Bauer (<a href="https://tfgames.site/phpbb3/memberlist.php?mode=viewprofile&u=206800">GermanWithSherman</a>)</li>
</ul>
<<Actions>>
<<BackC>>
<</Actions>><<Actions>>
<<BackC>>
<</Actions>>
<hr/>
<<button "Girliness">><<replace "#helpContents">><<include "HelpGirliness">><</replace>><</button>>
<<button "Skills">><<replace "#helpContents">><<include "HelpSkills">><</replace>><</button>>
<<button "Stats">><<replace "#helpContents">><<include "HelpStats">><</replace>><</button>>
<div id="helpContents">
<<include "HelpSkills">>
</div>
<<Actions>>
<<BackC>>
<</Actions>><h2>Girliness</h2>
Your girliness reflects as how female you perceive yourself.
Performing actions, which are more girly than you are, will increase your stress.
Increasing your girliness can be achieved by performing such actions.
Actions, which are way too girly for you, are disabled.
In the default start, you start with a girliness of 0.<h2>Skills</h2>
<h3>General</h3>
Time examples are for learning to cook with cooking 4 times a week.
<ul>
<li>0: Untrained</li>
<li>1-9: Novice</li>
<li>10-19: Beginner (usually takes 1 week of training)</li>
<li>20-29: Advanced Beginner (usually takes 3 weeks of training)</li>
<li>30-39: Competent (usually takes 9 weeks of training)</li>
<li>40-49: Proficient (usually takes 27 weeks of training)</li>
<li>50-59: Expert (usually takes 81 weeks of training)</li>
<li>60-69: Professional Master (usually takes 243 weeks of training)</li>
<li>70-79: Master (usually takes 729 weeks/14 years of training)</li>
<li>80-89: Grandmaster (usually takes 42 years of training)</li>
<li>90-99: Exceptional Grandmaster (usually takes a lifetime of training)</li>
<li>100: Legend (usually takes a several lifetimes of training)</li>
</ul><h2>Stats</h2>
<h3>Alcohol</h3>
Alcohol represents the amount of alcohol you consumed. It won't be displayed as long as you didn't drink alcohol.<br/>
A drink with alcohol has a alcohol-value which is calculated using the formular ml x (Vol.-%/100) x 0,8 g/cm3.<br/>
This value is transfered to a blood alcohol concentration. g/(body weight in kg x 55 %) = concentration.<br/>
The concentration is then skaled to 100 where 100 is a concentration of 0,1 * 48 (a concentration that requires 48 hours to be elimated by the body).<br/>
<ul>
<li>Tipsy: You drank a little bit (~0.2-0.6 ‰). Your mood temporarily increases by 1.</li>
<li>Drunk: You drank a little too much (~0.6-1.0 ‰). Your mood temporarily increases by 2.</li>
<li>Very drunk: You drank way too much (~1.0-2.0 ‰). Your mood temporarily increases by 2. You are intoxicated (not taking some stupid or risky options may reduce your mood).</li>
<li>Massively drunk: You drank way too much (~2.0-4.8 ‰).You are intoxicated. </li>
<li>Emergency: You drank so much that you need medical attention.</li>
</ul>
<h3>Distress</h3>
Distress is a measurement of the health of your body and mind. If it reaches a critical level and stays there for 24 hours the game is over.<br/>
Distress can increase by
<ul>
<li>having a very low mood</li>
<li>starving (depends on calories)</li>
<li>dying of thirst</li>
</ul>
Note that some conditions, such as having high hunger, don't affect your distress directly. But since they inflict a mood debuff they might inflict distress indirectly.
<h3>Hunger</h3>
You have to eat frequently. You can do so at any kitchen where you are considered a permanent resident and restaurants. Some actions, such as going to school, also include eating.
<ul>
<li>well-fed: You recently ate something and don't feel like doing it again. You eat up to this point whenever you eat a complete meal.</li>
<li>minor appetite: You feel like you could eat something. It's not unfomrtobale right now. You reach this point about 4 hours after you became completely sated.</li>
<li>appetite: You feel like you should eat something. It's a little unfomrtobale, but right now you can ignore the feeling easily. You reach this point about 6 hours after you became completely sated.</li>
<li>hunger: You feel like you must eat something. The feeling is hard to ignore. You reach this point about 8 hours after you became completely sated.</li>
<li>critical hunger: You can think of little thing but eating. You reach this point about 24 hours after you became completely sated.</li>
<li>starving: You feel like starving. You reach this point about 72 hours after you became completely sated. Note that this is the feeling only! Actual starving is determined by the calories system.</li>
</ul>
Eating increases your calories intake.<br/>
During sleep your hunger increases at half rate.<br/>
You will continue eating until your are completely sated. This only applies to meals and not to sweets (such as bonbons and cake).<br/>
You will always eat at least 50% of everything you want to eat. Therefore eating while you are not hungry is an easy way to increase you calories intake (and your weight).
<h3>Hygiene</h3>
Cleaning yourself will make sure you don't smell like a dumpster.
<ul>
<li>fresh: You recently took a shower or bath.</li>
<li>clean: You still feel clean. You reach this state after about 12 hours after you took your last bath or shower.</li>
<li>sweaty: You reach this state after about 24 hours after you took your last bath or shower.</li>
<li>smelly: People start to notice your smell. You really should take a bath or shower. You reach this state after about 48 hours after you took your last bath or shower.</li>
<li>stinky: You stink. You reach this state after about 96 hours after you took your last bath or shower.</li>
<li>disgusting: The worst kind of smell. You reach this state after about 7 days after you took your last bath or shower.</li>
</ul>
Doing sports and sex will decrease you hygiene way faster than other activities.
<h3>Mood</h3>
<p>When you do things you like your mood increases. If you do things you hate your mood decreases.</p>
<p>As default you have 10 points of mood. You can spend them on doing activities you have to convince yourself to perform, such:</p>
<ul>
<li>putting effort into school work</li>
<li>doing homework</li>
<li>ignoring pain</li>
</ul>
<p>You regain mood by doing things you like, such as:</p>
<ul>
<li>watching tv</li>
</ul>
<p>You also regain mood during sleep.</p>
<p>Your maximum amount of mood can be reduced by various effects. Enduring pain for example reduces your maximum mood.</p>
<p>Other effects, such as being drunk, provide you with free mood.</p>
<p>Performing an activity oftentimes might change how it influences your mood. If you become a good student for example performing well at school will be way less stressful.</p>
<p>On the other hand alcohol abuse can lead to an addiction which has to be satisfied unless you endure a mood debuff.</p>
<h3>Sleep</h3>
You can sleep in your bed. You can also drink coffee to get more awake.
<ul>
<li>rested: You can maximize your sleep stat by sleeping until you wake up by yourself. You can't sleep while being rested. A complete rest from nearly collapsing to being completely rested takes 12 hours.</li>
<li>awake: You are awake. You reach this condition 8 hours after your last complete rest.</li>
<li>tired: Your feel yourself tiring. But for now that doesn't have a negative impact on you. You reach this condition 12 hours after your last complete rest.</li>
<li>sleepy: Your eyes fall shut from time to time. You reach this condition 16 hours after your last complete rest.</li>
<li>exhausted: You have difficulties keeping yourself on your legs. You reach this condition 20 hours after your last complete rest.</li>
<li>collapsing: a technical condition. Usually results in an event. You reach this condition 24 hours after your last complete rest.</li>
</ul>
Sleeping 8 hours each night is balanced.<br/>
<h3>Thirst</h3>
You have to drink frequently. You can do so at any kitchen where you are considered a permanent resident and restaurants. Some actions, such as going to school, also include eating. Eating a meal also includes drinking oftentimes.
<ul>
<li>well-hydrated: You recently drank something and don't feel like doing it again. You drink up to this point whenever you drink something.</li>
<li>minor dryness: You feel like you could drink something. It's not unfomrtobale right now. You reach this point about 3 hours after you drank something.</li>
<li>dryness: You feel like you should drink something. It's a little unfomrtobale, but right now you can ignore the feeling easily. You reach this point about 4 hours after you drank something.</li>
<li>thirst: You feel like you must drink something. The feeling is hard to ignore. You reach this point about 6 hours after you drank something.</li>
<li>critical thirst: You can think of little thing but drinking. This increases your distress moderately. You reach this point about 16 hours after you drank something.</li>
<li>dying of thirst: You are starving. This increases your distress harshly. You reach this point about 48 hours after you drank something.</li>
</ul>
Depending on the drink drinking can increase your calories intake.<br/>
During sleep your thirst increases at half rate.<br/>
Some activities, such as sports, also increase your thirst.<br/>
You will continue drinking until you are well-hydrated. This applies to water, juices and lemonade. It does not apply to alcohol.
<h2>Critical Stats</h2>
<h3>Pain</h3>
Ever part of your body has its own pain statistic. The body parts are:
<ul class="flatList">
<li>Head</li>
<li>Throat</li>
<li>Chest</li>
<li>Butt</li>
<li>Genitals</li>
<li>Internal Organs</li>
<li>Arms</li>
<li>Hands</li>
<li>Legs</li>
<li>Feet</li>
</ul>
Every part of your body has a pain value. Values below 20 are considered unsignificant and won't cause discomfort.<br/>
Your total pain is calculated by adding the highest pain value, 50% of the second highest value and 25% of the third highest value (only if they are at least of value 20).<br/>
Example: Your feet hurts 30, your head 20, and your throat 10. Your pain value is then 30+0.5*20=40. Your throat is ignored because it is not at least of value 20.<br/>
<ul>
<li>0 <= Pain < 20 : Comfortable</li>
<li>20 <= Pain < 40 : Uncomfortable</li>
<li>40 <= Pain < 60 : Mild Pain</li>
<li>60 <= Pain < 80 : Heavy Pain</li>
<li>80 <= Pain < 100 : Severe Pain</li>
<li>100 <= Pain : Critical Pain</li>
</ul>
<h2>Hidden Stats</h2>
<h3>Calories</h3>
You have a required calories intake of 1500 calories each day.<br/>
Some activities, like doing sports, increase this number (only for the respective day).<br/>
You consume calories by eating and drinking (some drinks include more calories than others, water does include none).<br/>
<ul>
<li>Consuming 5-15% more calories than required increases your weight slightly.</li>
<li>Consuming 15-30% more calories than required increases your weight moderateley.</li>
<li>Consuming 30-60% more calories than required increases your weight greatly.</li>
<li>Consuming >60% more calories than required increases your weight harshly.</li>
<li>Consuming 15-30% less calories than required decreases your weight slightly.</li>
<li>Consuming 30-50% less calories than required decreases your weight moderateley.</li>
<li>Consuming >50% less calories than required decreases your weight greatly.</li>
<li>Consuming >70% less calories than required increases your distress (more on each consequitive starving day).</li>
</ul>
Your weight loss depends on your current weight. Losing weight while your have a normal weight are underweight is harder than losing it while you are overweight.<br/>
Gaining weight is easier when you are underweight.<<set $currentLocation to {
id: "CityCenterBank",
title:"City Center Bank",
image: "locations/citycenter/bankInterior.jpg",
conncetions:[
{
label:"Leave",
tooltip:"Leave the bank.",
image:"locations/citycenter/cityCenterDay0.jpg",
duration: 180,
destination:"CityCenter"
}
],
actions:[],
description:""
}>>
<<if $pc.possessions.giro is undefined>>
<<set $currentLocation.description += "You don't have a checking account.<br/>">>
<<else>>
<<set $currentLocation.description += "You have "+Money.format($pc.possessions.giro)+" in your checking account.<br/>">>
<</if>>
<<if $pc.possessions.savings is undefined>>
<<set $currentLocation.description += "You don't have a savings account.<br/>">>
<<else>>
<<set $currentLocation.description += "You have "+Money.format($pc.possessions.savings)+" in your savings account.<br/>">>
<</if>>
<<if $pc.possessions.giro is undefined or $pc.possessions.savings is undefined>>
<<run $currentLocation.actions.push({target:"BankOpenAccount",label:"Open Account"})>>
<</if>>
<<if !($pc.possessions.giro is undefined) or !($pc.possessions.savings is undefined)>>
<<run $currentLocation.actions.push({target:"BankCounter",label:"Go to counter"})>>
<</if>>
<<Location $currentLocation>><<Image "events/bank/counter.jpg">>
<div id="bankErrors"></div>
<<if $pc.possessions.giro is undefined>>
<p>You don't have a checking account.</p>
<<else>>
<<print "<p>You have "+Money.format($pc.possessions.giro)+" in your checking account.</p>">>
Deposit money: <<numberbox "_bankGriroDeposit" 0>> cents<br/>
Withdraw money: <<numberbox "_bankGriroWithdraw" 0>> cents
<</if>>
<<if $pc.possessions.savings is undefined>>
<p>You don't have a savings account.</p>
<<else>>
<<print "<p>You have "+Money.format($pc.possessions.savings)+" in your savings account.</p>">>
Deposit money: <<numberbox "_bankSaveDeposit" 0>> cents<br/>
Withdraw money: <<numberbox "_bankSaveWithdraw" 0>> cents
<</if>>
<div class="actions">
<<link "Confirm">>
<<replace "#bankErrors">><</replace>>
<<set _bankTransactionSuccess to true>>
<<if !($pc.possessions.giro is undefined)>>
<<set _bankGiroBalance to _bankGriroDeposit - _bankGriroWithdraw>>
<<if _bankGiroBalance > $pc.possessions.cash>>
<<replace "#bankErrors">>You don't have enough cash with you.<</replace>>
<<set _bankTransactionSuccess to false>>
<<elseif $pc.possessions.giro + _bankGiroBalance < -$pc.possessions.giroOverdraw and _bankGiroBalance < 0>>
<<replace "#bankErrors">>You can't overdraw your account this much.<</replace>>
<<set _bankTransactionSuccess to false>>
<<else>>
<<set $pc.possessions.cash -= _bankGiroBalance>>
<<set $pc.possessions.giro += _bankGiroBalance>>
<</if>>
<</if>>
<<if !($pc.possessions.savings is undefined)>>
<<set _bankSaveBalance to _bankSaveDeposit - _bankSaveWithdraw>>
<<if _bankSaveBalance > $pc.possessions.cash>>
<<replace "#bankErrors">>You don't have enough cash with you.<</replace>>
<<set _bankTransactionSuccess to false>>
<<elseif $pc.possessions.savings + _bankSaveBalance < 0>>
<<replace "#bankErrors">>You can't overdraw your savings account.<</replace>>
<<set _bankTransactionSuccess to false>>
<<else>>
<<set $pc.possessions.cash -= _bankSaveBalance>>
<<set $pc.possessions.savings += _bankSaveBalance>>
<</if>>
<</if>>
<<if _bankTransactionSuccess is true>>
<<goto $currentLocation.id>>
<</if>>
<</link>>
</div><<run TimePassSeconds(300)>>
<<Image "events/bank/openAccount.jpg">>
<p>It only takes a few minutes before one of the bank employees has time for you.</p>
<p>He explains to you the two different types of accounts the bank offers:</p>
<p><b>Checking account:</b> You can access your money any time at ATMs and you can use it to buy at most shops and many restaurants. You can overdraw your account by <<Money 100000>> and if you do so you need to pay 15% interest at the end of the month.</p>
<p><b>Savings account:</b> You can access your money only at the bank. You get 5% interest each month.</p>
<p>In both cases you need to visit the bank in order to deposit money.</p>
<<Actions>>
<<if Money.giroEnabled is false>>
<<link [[Open a Checking account|$currentLocation.id]]>>
<<set Money.giroEnabled to true>>
<</link>>
<<else>>
<a class="disabled">Open a Checking account<p class="disabledMessage">You allready have a checking account.</p></a>
<</if>>
<<if Money.savingsEnabled is false>>
<<link [[Open a Savings account|$currentLocation.id]]>>
<<set Money.savingsEnabled to true>>
<</link>>
<<else>>
<a class="disabled">Open a Savings account<p class="disabledMessage">You allready have a savings account.</p></a>
<</if>>
<<if Money.giroEnabled is false and Money.savingsEnabled is false>>
<<link [[Open both accounts|$currentLocation.id]]>>
<<set Money.giroEnabled to true>>
<<set Money.savingsEnabled to true>>
<</link>>
<</if>>
[[Change your mind|$currentLocation.id]]
<</Actions>><<set $currentLocation to {
id: "CityCenter",
title:"City Center",
image: {
day: "locations/citycenter/cityCenterDay0.jpg",
night: "locations/citycenter/cityCenterNight0.jpg"
},
outdoors: true,
public: true,
conncetions:[
{
label:"Subway",
image:"locations/subway/cityCenter.jpg",
duration: 60,
destination:"SubwayCityCenter"
},
{
label:"Residential",
tooltip:"Walk to the residential area.",
image:"locations/residential/residentialDay.jpg",
duration: 9000,
destination:"Residential"
},
{
label:"Mall",
tooltip:"Enter the mall.",
image:"locations/citycenter/cityCanterMall0.jpg",
duration: 180,
destination:"CityCenterMall",
opentime:{
hourOpen: 7,
hourClose: 22,
sundays: false
}
},
{
label:"Kabab House",
image:"locations/citycenter/kababExterior.jpg",
duration: 180,
destination:"KebapCityCenter",
opentime:{
hourOpen: 9,
hourClose: 4,
sundays: true
}
},
{
label:"Bank",
tooltip:"Enter the bank.",
image:"locations/citycenter/bankExterior.jpg",
duration: 180,
destination:"CityCenterBank",
opentime:{
hourOpen: 8,
hourClose: 20,
sundays: false
}
},
{
label:"Police Station",
tooltip:"Enter the police station.",
image:"locations/citycenter/policeExterior.jpg",
duration: 180,
destination:"CityCenterPolice"
},
{
label:"Plastic Surgeon",
image:"locations/healthservives/plasticsurgeon/exterior.jpg",
duration: 180,
destination:"PlasticSurgeon",
opentime:{
hourOpen: 10,
hourClose: 18
}
}
]
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "KebapCityCenter",
title:"Kabab House",
image: "locations/citycenter/kebabInterior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/citycenter/cityCenterDay0.jpg",
duration: 180,
destination:"CityCenter"
}
],
actions:[
{
"label":"Order from menu",
"target":"KebapCityCenterOrder"
}
],
description:""
}>>
<<Location $currentLocation>><<run setVar("currentRestaurant.offers",["kebap","water"])>>
<<include "Restaurant">><<set $currentLocation to {
id: "CityCenterMall",
title:"City Center Mall",
image: "locations/citycenter/cityCanterMallInterior.jpg",
conncetions:[
{
label:"Leave",
tooltip:"Leave the mall.",
image:"locations/citycenter/cityCenterDay0.jpg",
duration: 180,
destination:"CityCenter"
},
{
label:"Budget",
tooltip:"Clothes and shoes for low prices",
duration: 60,
destination:"Budget",
image: "locations/shop/budget.jpg"
},
{
label:"Cherie",
tooltip:"High quality clothes and shoes",
duration: 60,
destination:"Cherie",
image: "locations/shop/cherie.jpg"
},
{
label:"Engelen",
duration: 60,
destination:"Engelen",
image: "locations/shop/engelen.jpg"
},
{
label:"FN",
tooltip:"FN: Fashion for young adults.",
duration: 60,
destination:"FN",
image: "locations/shop/fn.jpg"
},
{
label:"Schoe Central",
tooltip:"",
duration: 60,
destination:"SchoeCentral",
image: "locations/shop/sc.jpg"
},
{
label:"Sportpalast",
tooltip:"",
duration: 60,
destination:"SportPalast",
image: "locations/shop/sp.jpg"
}/*,
{
label:"VPC",
tooltip:"High quality underwear for women",
duration: 60,
destination:"VPC",
image: "locations/shop/vpc.jpg"
}*/
]
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "CityCenterPolice",
title:"City Center Police Station",
image: "locations/citycenter/policeInterior.jpg",
conncetions:[
{
label:"Leave",
tooltip:"Leave the police station.",
image:"locations/citycenter/cityCenterDay0.jpg",
duration: 180,
destination:"CityCenter"
}
],
actions:[],
description:"You are not wanted and you don't feel like reporting a crime. Here is nothing for you to do."
}>>
<<Location $currentLocation>><<set $genericHome to {
entryRoom: "entry",
rooms:{
bath:{
image: "locations/home/bath.jpg",
label:"Bathroom",
connections:["entry"]
},
entry:{
image: {
day: "locations/home/hallway_day.jpg",
night: "locations/home/hallway_night.jpg"
},
label:"Hallway",
connections:["bath"]
}
}
}>>
<<include "GenericHomeEntry">><<set $genericHome.currentRoom to $genericHome.entryRoom>>
<<include "GenericHomeRoom">><<set _currentRoom = $genericHome.rooms[$genericHome.currentRoom]>>
<<set $currentLocation to {
id: "GenericHomeRoom",
title:"",
image: _currentRoom.image,
conncetions:[]
}>>
<<for _i, _connection range _currentRoom.connections>>
<<if typeof _connection == "string">>
<<set _connectionId to _connection>>
<<set _setter to "$genericHome.currentRoom to '" + _connectionId + "'">>
<<run $currentLocation.conncetions.push({
label:$genericHome.rooms[_connection].label,
image: $genericHome.rooms[_connection].image,
duration: 10,
destination:"GenericHomeRoom",
noShoes: true,
type:"private",
setter:_setter
})>>
<<else>>
<<set _dummy = {
label:"LABEL MISSING",
image: "",
duration: 10,
destination:"GenericHomeRoom",
noShoes: true,
type:"private"
}>>
<<if _connection.label.toLowerCase() == "leave" or _connection.type == "leave">>
<<set _dummy = Object.assign(_dummy, { noShoes:false })>>
<</if>>
<<set _dummy = Object.assign(_dummy, _connection)>>
<<run $currentLocation.conncetions.push(_dummy)>>
<</if>>
<</for>>
<<Location $currentLocation>><<set $currentLocation to {
id: "HomeSchoolChristian",
title:"Christians home",
description:"",
actions: [],
image: {
day: "locations/npchome/schoolChristian.jpg",
night: "locations/npchome/schoolChristianNight.jpg"
},
conncetions:[
{
label:"Leave",
tooltip:"Walk to the street.",
image:"locations/residential/nestrowDay.jpg",
duration: 120,
destination:"NesterowStreet"
}
],
actions:[],
description: ""
}>>
<<if NPCs.load("schoolChristian").get("home.modePP",false) === true>>
<<if $time.getUTCDay() == 4>>
<<if $time.getUTCHours() < 17>>
<<set $currentLocation.description += "You have been invited to play P&P today, but you are way too early. Nobody seems to be here right now. You should come back around 18:00.">>
<<elseif $time.getUTCHours() < 21>>
<<run $currentLocation.actions.push({
label: "Play P&P",
target: "PnPSession"
})>>
<</if>>
<</if>>
<</if>>
<<Location $currentLocation>><<set _sessions to getVar("school.groups.geeks.pnpsessions",0)>>
<<set _npc0 to NPCs.load("schoolChristian")>>
<<set _npc1 to NPCs.load("schoolGabriel")>>
<<set _npc2 to NPCs.load("schoolFabian")>>
<<set _npc3 to NPCs.load("schoolNora")>>
<p>
<<if _sessions == 0>>
You ring the door bell and a friendly woman in her early fifties opens the door and smiles at you.
She introduces herself as the mother _npc0.nameUsed.
She tells you that her son told her about you as she leads you down to the cellar and to the hobby room.
<<else>>
You ring the door bell and are greated by the mother of _npc0.nameUsed.
She chats a little with you as she leads you down to the hobby room.
<</if>>
</p>
<<Image "events/goupactivities/pnp/room.jpg">>
<<if $time.getUTCHours() < 18>>
<p>
Here you meet _npc0.nameUsed.
He smiles at you and tells you take a seat while he finishes his preparations.
_npc1.nameUsed, _npc2.nameUsed and _npc3.nameUsed arrive shortly after you.
</p>
<<elseif $time.getUTCHours() < 19>>
<p>
Here you meet _npc0.nameUsed and _npc2.nameUsed.
They are talking about some minor rules.
When they realize that you arrived they smile at you and _npc0.nameUsed tells you to take a seat.
_npc1.nameUsed and _npc3.nameUsed arrive shortly after you.
</p>
<<else>>
<p>
You are late, but the other four are happy to see you nevertheless.
_npc0.nameUsed smiles at you and tells you take a seat.
</p>
<</if>>
<<Actions>>
<<if _sessions == 0>>
[[Start Playing|PnPSession0]]
<<else>>
[[Start Playing|PnPSession1]]
<</if>>
<</Actions>><<set _npc0 to NPCs.load("schoolChristian")>>
<<set _npc1 to NPCs.load("schoolGabriel")>>
<<set _npc2 to NPCs.load("schoolFabian")>>
<<set _npc3 to NPCs.load("schoolNora")>>
<<Dialog "PnPSession0" "Root" `{participants:{1:"schoolChristian",2:"schoolGabriel",3:"schoolFabian",4:"schoolNora"}}`>>
<<Image "events/goupactivities/pnp/players.jpg">>
<<DialogTopic "Root">>
<<DialogLine 1>>Okay then. Welcome to Prisons and Paladins. We call it P&P.<</DialogLine>>
<<DialogLine -1>>_npc0.nameUsed hands you some papers.<</DialogLine>>
<<DialogLine 1>>
In this game you will play a mighty hero.
You can be a babarian, swinging a sword, a sneaky rogue or a powerful wizard.
I know that the choices might be overwhelming at first. That's why I prepared some characters for you in advance.
Feel free to pick one of them.
<</DialogLine>>
<<DialogLine 2>>
We really could use a new rogue.
Ever since Melhundiel the Singer got swallowed by a dragon we lack somebody who can avoid attention.
And I think we all agree that my Erevan will never fill this role satisfactionally.
<</DialogLine>>
<<DialogLine 4>>
No way! Kork the babarian would like to have a friend. How about a second babarian?! Double the smash!
<</DialogLine>>
<<DialogLine 3>>
That's some kind of logic... I guess. I think we need a wizard though.
Half of our fights are started by Kork and the other half could be avoided if somebody knew an invisibility spell.
Lorelly would definitely like to take less risks.
<</DialogLine>>
<<DialogLine 2>>
There will be no risks as long as Erevan stands strong.
He has sworn an holy vow to protect the innocent...
<</DialogLine>>
<<DialogLine 4>>
And Kork smashes all the monsters who might hurt Loly!
<</DialogLine>>
<<DialogLine 3>>
I remember that the next time I have to rescue the both of you!
<</DialogLine>>
<<DialogLine -1>>They all share a laugh.<</DialogLine>>
<<DialogOption "Play the Barbarian" "CharacterSelectBarbarian">>
<<DialogOptionA "Play the Rogue" "CharacterSelectRogue">><<run setVar("school.groups.geeks.pnpclass","rogue")>><</DialogOptionA>>
<<DialogOptionA "Play the Wizard" "CharacterSelectWizard">><<run setVar("school.groups.geeks.pnpclass","wizard")>><</DialogOptionA>>
<<DialogTopic "CharacterSelectBarbarian">>
<<run setVar("school.groups.geeks.pnpclass","barbarian")>>
<<DialogLine 0>>I think I will be a barbarian.<</DialogLine>>
<<DialogLine 4>>
Aha! A good choice! Wenches, beer and swords for everyone!
<</DialogLine>>
<<PnPSession0CharacterSelectionSex>>
<<DialogTopic "CharacterSelectRogue">>
<<run setVar("school.groups.geeks.pnpclass","rogue")>>
<<DialogLine 0>>I think I will be a rogue.<</DialogLine>>
<<DialogLine 2>>
Splendid. This is a wise choice indeed. You will be a very valuable addition to our group of famous heroes.
<</DialogLine>>
<<PnPSession0CharacterSelectionSex>>
<<DialogTopic "CharacterSelectWizard">>
<<run setVar("school.groups.geeks.pnpclass","wizard")>>
<<DialogLine 0>>I think I will be a wizard.<</DialogLine>>
<<DialogLine 3>>
Very good. Every group needs a wizard.
<</DialogLine>>
<<PnPSession0CharacterSelectionSex>>
<<DialogTopic "CharacterSelectFemale">>
<<run setVar("school.groups.geeks.pnpgender","f")>>
<<DialogLine 0>>She is a female <<print getVar("school.groups.geeks.pnpclass")>> and her name is...<</DialogLine>>
<<PnPSession0CharacterSelectionName>>
<<DialogTopic "CharacterSelectMale">>
<<run setVar("school.groups.geeks.pnpgender","m")>>
<<DialogLine 0>>He is a male <<print getVar("school.groups.geeks.pnpclass")>> and his name is...<</DialogLine>>
<<PnPSession0CharacterSelectionName>>
<<DialogTopic "CharacterDone">>
<<DialogLine 0>>... <<print getVar("school.groups.geeks.pnpname")>>.<</DialogLine>>
<<switch getVar("school.groups.geeks.pnpnamemode")>>
<<case "own">>
<<switch getVar("school.groups.geeks.pnpgender")>>
<<case "f">>
<<DialogLine 2>><<print getVar("school.groups.geeks.pnpname")>>? Okay... I think I've heard this name before...<</DialogLine>>
<<case "m">>
<<DialogLine 2>>Your MALE character is named <<print getVar("school.groups.geeks.pnpname")>>? Interesting...<</DialogLine>>
<</switch>>
<<DialogLine 4>>
Oh, come on, don't judge her. If that's the name she is most comfortable with we shouldn't question her.
<</DialogLine>>
<<case "fit">>
<<switch getVar("school.groups.geeks.pnpgender")>>
<<case "f">>
<<DialogLine 3>>
Welcome, dear Lady <<print getVar("school.groups.geeks.pnpname")>>.
May I introduce myself?
My name is Lorelly and I am happy to meet another female.
Don't get me wrong. The company of these brutes is quite entertaining, but ...
<</DialogLine>>
<<case "m">>
<<DialogLine 3>>
Welcome, <<print getVar("school.groups.geeks.pnpname")>>.
Finally a new face!
May I introduce myself?
My name is Lorelly and this is my company of brutes.
<</DialogLine>>
<</switch>>
<<DialogLine 4>>
Kork grunts.
<</DialogLine>>
<<case "ridiculous">>
<<DialogLine 2>>
Oh... okay.
I could give you a list of names if you need some time to come up with one...
<</DialogLine>>
<<DialogLine 4>>
Hey, I find this name interesting. I can't wait to figure out where it comes from.
<</DialogLine>>
<</switch>>
<<DialogOption "Start the adventure" "END:PnPSession1">>
<</Dialog>><<widget "PnPSession0CharacterSelectionSex">>
<<DialogLine 1>>
Now you have to pick your gender. As you might have noticed allready your character doesn't have to have the same gender as you.
<</DialogLine>>
<<DialogOption "Female" "CharacterSelectFemale">>
<<DialogOption "Male" "CharacterSelectMale">>
<</widget>>
<<widget "PnPSession0CharacterSelectionName">>
<<DialogOptionA $pc.name.first "CharacterDone">>
<<run setVar("school.groups.geeks.pnpname",$pc.name.first)>>
<<run setVar("school.groups.geeks.pnpnamemode","own")>>
<</DialogOptionA>>
<<DialogOptionA "A fitting fantasy name" "CharacterDone">>
<<switch getVar("school.groups.geeks.pnpgender")>>
<<case "f">>
<<run setVar("school.groups.geeks.pnpname","Eleriel")>>
<<case "m">>
<<run setVar("school.groups.geeks.pnpname","Melamur")>>
<</switch>>
<<run setVar("school.groups.geeks.pnpnamemode","fit")>>
<</DialogOptionA>>
<<DialogOptionA "A ridiculous name" "CharacterDone">>
<<switch getVar("school.groups.geeks.pnpgender")>>
<<case "f">>
<<run setVar("school.groups.geeks.pnpname","KillerLady")>>
<<case "m">>
<<run setVar("school.groups.geeks.pnpname","KillerDude")>>
<</switch>>
<<run setVar("school.groups.geeks.pnpnamemode","ridiculous")>>
<</DialogOptionA>>
<</widget>><<set _npc0 to NPCs.load("schoolChristian")>>
<<set _npc1 to NPCs.load("schoolGabriel")>>
<<set _npc2 to NPCs.load("schoolFabian")>>
<<set _npc3 to NPCs.load("schoolNora")>>
<<set _timePassed to SecondsTilTime({hour:22})>>
<<run moodInc(Math.floor(_timePassed/6))>>
<<run TimePassSeconds(_timePassed)>>
<<Image `"events/goupactivities/pnp/adventure("+randomInt(0,2)+").jpg"`>>
<p>
As _npc0.nameUsed provides the plot framework and the rules, you, _npc1.nameUsed, _npc2.nameUsed and _npc3.nameUsed decide your respective characters actions.
Kork runs head first into every combat, while Erevan stands back and makes sure your flanks are secured.
Lorelly provides buffs and healing.
<<switch getVar("school.groups.geeks.pnpclass")>>
<<case "barbarian">>
<<print getVar("school.groups.geeks.pnpname")>> the barbarian is always right next to Kork, slaying monsters and beating down enemies.
<<case "rogue">>
Meanwhile <<print getVar("school.groups.geeks.pnpname")>> the rogue sneaks behind enemy lines and attacks from behind.
<<case "wizard">>
<<print getVar("school.groups.geeks.pnpname")>> the wizard provides spells and wisdom and oftentimes manages to avoid fights alltogether.
<</switch>>
</p>
<p>
You play for a few hours.
Finally you arrive at a point from where you can continue next time.
The five of you chat a little bit, then you make your goodbyes.
</p>
<<run incVar("school.groups.geeks.pnpsessions")>>
<<Actions>>
[[Leave|HomeSchoolChristian]]
<</Actions>>
/%:: HomeSchoolChristianEnter[nobr]
<<set $genericHome to {
entryRoom: "entry",
rooms:{
bath:{
image: "locations/home/bath.jpg",
label:"Bathroom",
connections:["entry"]
},
entry:{
image: {
day: "locations/home/hallway_day.jpg",
night: "locations/home/hallway_night.jpg"
},
label:"Hallway",
connections:[{duration:60,destination:"HomeSchoolChristian",label:"Leave"},"bath"]
}
}
}>>
<<include "GenericHomeEntry">>%/<<set $currentLocation to {
id: "ParentsBathroom",
title:"Bathroom",
type:"home",
image: "locations/home/bath.jpg",
conncetions:[
{
label:"Hallway",
tooltip:"Leave the bathroom.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
actions:[
]
}>>
<<include "BathActivites">>
<<ParentsHomeAddShortcuts>>
<<Location $currentLocation>><<run $currentLocation.actions.push({
label:"Take a shower",
target:"Shower"
})>>
<<run $currentLocation.actions.push({
label:"Shave yourself",
target:"Shave"
})>>
<<if $pc.body.makeup.strength > 0>>
<<run $currentLocation.actions.push({
label:"Inspect Makeup",
target:"Makeup"
})>>
<<else>>
<<run $currentLocation.actions.push({
label:"Apply Makeup",
target:"Makeup"
})>>
<</if>>
<<if $pc.experiences.includes("period")>>
<<run $currentLocation.actions.push({
label:"Manage Hygiene",
target:"Hygiene"
})>>
<</if>>
<<run $currentLocation.actions.push({
label:"Inspect yourself in the mirror",
target:"Mirror"
})>><<if $time.getUTCHours() >= 7 && $time.getUTCHours() < 23>>
<<set $currentLocation to {
id: "ParentsBrother",
title:"Your brothers room.",
type:"home",
image: "locations/home/room_brother.jpg",
conncetions:[
{
label:"Hallway",
tooltip:"Leave to the hallway.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
actions:[],
npcs:[]
}>>
<<if $time.getUTCHours() >= 20 && $time.getUTCHours() < 23>>
<<set $currentLocation.description = "Your brother is playing on his computer.">>
<<set $currentLocation.npcs to ["brother"]>>
<</if>>
<<if !$currentLocation.npcs.includes("brother")>>
<<set $currentLocation.description = "Your brother is currently not here and his computer is unsupervised.">>
<<run $currentLocation.actions.push(
{
"label":"Use Computer",
"target":"BrotherPC"
}
)>>
<</if>>
<<else>>
<<set $currentLocation to {
id: "ParentsBrother",
title:"Your brothers room.",
type:"home",
image: "locations/home/door.jpg",
conncetions:[
{
label:"Hallway",
tooltip:"Leave to the hallway.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
description: "You brother is likely sleeping right now. You shouldn't disturb him now."
}>>
<</if>>
<<ParentsHomeAddShortcuts>>
<<Location $currentLocation>><<set _npc to NPCs.load('brother')>>
<<if "computerPin" in _npc>>
<<set _correctPin to _npc.computerPin>>
<<else>>
<<set $npcs.brother.computerPin to 1234>>
<<set _correctPin to $npcs.brother.computerPin>>
<</if>>
<<set _knowsPin to getVar("brother.knowPcPin",false)>>
<<Image "events/pc/pc_brother.jpg">>
<<TODO>>
<li>Smarter PIN</li>
<</TODO>>
<p>His PC his your brothers whole pride. He surely wouldn't appreciate you using it without his permission.</p>
<<if _knowsPin === true>>
<p>You know the PIN to unlock the PC.</p>
<<else>>
<<set _pcPin to 0>>
<p>You don't know the PIN to unlock the PC. <<linkreplace "But you could try.">>
<<numberbox "_pcPin" _pcPin>>
<<link "Try">>
<<run TimePassSeconds(10)>>
<<if _pcPin == _correctPin>>
<<updatebar>>
<<replace "#pinMessage">>
Correct Pin!
<</replace>>
<<run setVar("brother.knowPcPin",true)>>
<<timed 1s>>
<<goto "BrotherPC">>
<</timed>>
<<else>>
<<updatebar>>
<<replace "#pinMessage">>
Wrong Pin!
<</replace>>
<</if>>
<</link>>
<span id="pinMessage">
</span>
<</linkreplace>></p>
<</if>>
<div class="actions">
<<if _knowsPin === true>>
<<link [[Unlock|PC]]>>
<<run setVar("currentPC",{id:"brother"})>>
<</link>>
<</if>>
[[Back|$currentLocation.id]]
</div><<set $currentLocation to {
id: "ParentsGarden",
title:"Garden",
type:"home",
image: {
day: "locations/home/garden_day.jpg",
night: "locations/home/garden_night.jpg"
},
outdoors:true,
conncetions:[
{
label:"Front",
tooltip:"Go to the front side of the house.",
image:"locations/home/outside_day.jpg",
duration: 30,
destination:"ParentsOutside",
type:"private"
}
],
actions:[],
npcs:[],
description:""
}>>
<<set $currentLocation.description += "You could mow the lawn. This is usually your fathers job. He might be grateful if you help him out.">>
<<if TimeIsEarlier(getVar("parents.mowLawnCD",new Date(0)))>>
<<run $currentLocation.actions.push(
{
label:"Mow the lawn",
target:"ParentsGardenMow"
}
)>>
<<else>>
<<run $currentLocation.actions.push(
{
label:"Mow the lawn",
target:"ParentsGardenMow",
disabled: true,
message: "The grass is short enough already."
}
)>>
<</if>>
<<Location $currentLocation>><<Image `"events/work/mowLawn("+randomInt(0,2)+").jpg"`>>
<<run TimePassSeconds(7200)>>
<<run setVar("parents.mowLawnCD",TimeWithOffset(0,14))>>
<p>
It takes you two hours to mow all of the lawn.
Afterwards you feel a great deal of accomplishment.
The grass should be short enough now to make mowing unnecessary for the next two weeks.
And maybe your father will be grateful as well.
</p>
<<FavorEarned "father" 1>>
<<Actions>>
<<BackC "Finish">>
<</Actions>><<set $currentLocation to {
id: "ParentsHallway",
title:"Hallway",
type:"home",
image: {
day: "locations/home/hallway_day.jpg",
night: "locations/home/hallway_night.jpg"
},
actions:[
{
target: "ParentsHallway",
label: "Pass 30 Minutes",
onclick: "TimePassSeconds(1800)",
debug:true
},
{
target: "ParentsHallway",
label: "Pass 3 Hours",
onclick: "TimePassSeconds(10800)",
debug:true
}
],
conncetions:[
{
label:"Your Room",
tooltip:"Enter your room.",
image: "locations/home/room_pc_pink(0).jpg",
duration: 10,
destination:"ParentsPlayerRoom",
noShoes: true,
type:"private"
},
{
label:"Kitchen",
tooltip:"Fridge and oven.",
image: "locations/home/kitchen.jpg",
duration: 10,
destination:"ParentsKitchen",
noShoes: true,
type:"private"
},
{
label:"Living room",
tooltip:"Living room.",
image: "locations/home/living.jpg",
duration: 10,
destination:"ParentsLiving",
noShoes: true,
type:"private"
},
{
label:"Bathroom",
tooltip:"Toilet, bathtub and shower.",
image: "locations/home/bath.jpg",
duration: 10,
destination:"ParentsBathroom",
noShoes: true,
type:"private"
},
{
label:"Parents Room",
duration: 10,
image: "locations/home/room_parents.jpg",
destination:"ParentsParents",
noShoes: true,
type:"private"
},
{
label:"Sisters Room",
duration: 10,
image: "locations/home/room_sister.jpg",
destination:"ParentsSister",
noShoes: true,
type:"private"
},
{
label:"Brothers Room",
duration: 10,
image: "locations/home/room_brother.jpg",
destination:"ParentsBrother",
noShoes: true,
type:"private"
}
]
}>>
<<set _leaveConnection = {
label:"Leave",
tooltip:"Go outside.",
image:"locations/home/outside_day.jpg",
duration: 60,
destination:"ParentsOutside",
type:"private",
outfit:{coverage:"clothed",barefeet:false}
}>>
<<run $currentLocation.conncetions.unshift(_leaveConnection)>>
<<Location $currentLocation>><<set $currentLocation to {
id: "ParentsKitchen",
title:"Kitchen",
type:"home",
image: {
day: "locations/home/kitchen.jpg",
night: "locations/home/kitchen_night.jpg"
},
conncetions:[
{
label:"Hallway",
tooltip:"Leave the kitchen.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
actions:[]
}>>
<<if $time.getUTCHours() >= 7 && $time.getUTCHours() < 8>>
<<if $daily.familyBreakfastHappened !== true>>
<<set $currentLocation.description = "Your family is eating breakfast.">>
<<set $currentLocation.npcs to ["father","mother","brother","sister"]>>
<<run $currentLocation.actions.push({
label:"Eat breakfast with your family",
target:"FamilyBreakfast"
})>>
<<else>>
<<set $currentLocation.description = "Your mother is cleaning up after breakfast while your other family members are still sitting around the dinner table chatting with each other.">>
<<set $currentLocation.npcs to ["father","mother","brother","sister"]>>
<</if>>
<<elseif $time.getUTCHours() >= 18 && $time.getUTCHours() < 19>>
<<set $currentLocation.description = "Your mother is preparing dinner.">>
<<set $currentLocation.npcs to ["mother"]>>
<<run $currentLocation.actions.push(
{
label:"Help your mother",
target:"ParentsKitchenHelp"
}
)>>
<<elseif $time.getUTCHours() >= 19 && $time.getUTCHours() < 20>>
<<if $daily.familyDinnerHappened !== true>>
<<set $currentLocation.description = "Your family is eating dinner.">>
<<set $currentLocation.npcs to ["father","mother","brother","sister"]>>
<<run $currentLocation.actions.push({
label:"Eat dinner with your family",
target:"FamilyDinner"
})>>
<<else>>
<<set $currentLocation.description = "Your mother is cleaning up after dinner while your other family members are still sitting around the dinner table chatting with each other.">>
<<set $currentLocation.npcs to ["father","mother","brother","sister"]>>
<</if>>
<<else>>
<<set $currentLocation.description = "Your family usually eats breakfast at 07:00 and dinner at 19:00.">>
<</if>>
<<if Inventory.load("waterbottle").count > 0 && getVar("waterbottle.water",0) == 0>>
<<run $currentLocation.actions.push({
label:"Fill water bottle",
content:'<<run setVar("waterbottle.water",1)>>',
time: 60
})>>
<</if>>
<<if Inventory.load("sandwich").count == 0>>
<<run $currentLocation.actions.push({
label:"Make sandwich",
itemsInc:[{id:"sandwich"}],
time: 180,
content:'<<run setVar("sandwich.created",Now())>>'
})>>
<</if>>
<<ParentsHomeAddShortcuts>>
<<Location $currentLocation>>
<div class="actions">
[[Drink Water|Consume][$currentConsumable to "water"]]
[[Eat Pizza|Consume][$currentConsumable to "pizza"]]
<<ActionA "Eat Salad" "Consume" `{stress:10}`>><<set $currentConsumable to "salad">><</ActionA>>
</div><<run TimePassSeconds(3600)>>
<<run skillExperienceInc("cook",15)>>
<<Image `"events/work/cook("+randomInt(0,1)+").jpg"`>>
<p>You help your mother with the dinner preparation.</p>
<<FavorEarned "mother" 1>>
<<Actions>>
<<BackC "Finish">>
<</Actions>><<set $currentLocation to {
id: "ParentsLiving",
title:"Living room",
type:"home",
image: {
day: "locations/home/living.jpg",
night: "locations/home/living_night.jpg"
},
conncetions:[
{
label:"Hallway",
tooltip:"Leave to the hallway.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
actions:[
{
label: "Watch TV",
target: "TV",
arguments:{
tvQuality: 4
}
}
]
}>>
<<if $time.getUTCHours() >= 20 && $time.getUTCHours() < 22>>
<<set $currentLocation.description = "Your parents are watching tv.">>
<<set $currentLocation.npcs to ["father","mother"]>>
<</if>>
<<ParentsHomeAddShortcuts>>
<<Location $currentLocation>><<set $currentLocation to {
id: "ParentsOutside",
title:"Your families home",
description:"",
actions: [],
image: {
day: "locations/home/outside_day.jpg",
night: "locations/home/outside_night.jpg"
},
conncetions:[
{
label:"Leave",
tooltip:"Walk to the residential area.",
image:"locations/residential/residentialDay.jpg",
duration: 420,
destination:"Residential"
},
{
label:"Enter",
tooltip:"Go inside.",
image:"locations/home/outside_day.jpg",
duration: 60,
destination:"ParentsHallway",
noShoes: true,
type:"private"
},
{
label:"Garden",
image:"locations/home/garden_day.jpg",
duration: 30,
destination:"ParentsGarden",
type:"private"
},
{
label:"Nesterower Straße",
tooltip:"Walk to the street to visit the neighborhood.",
image:"locations/residential/nestrowDay.jpg",
duration: 120,
destination:"NesterowStreet"
},
]
}>>
<<for _i, _date range $dates>>
<<if _date.time.getUTCDate() == $time.getUTCDate()>>
<<set _secondsTilDate = TimeDifference(_date.time)>>
<<set _npc to NPCs.load(_date.npcId)>>
<<if _secondsTilDate <= 300 && _secondsTilDate >= -1800>>
<<set $currentLocation.description += _npc.nameUsed + " is waiting in front of the house to pick you up.<br/>">>
<<set _actionLabel to "Go on date with "+_npc.nameUsed>>
<<set _actionTarget to "ParentsParents">>
<<set _action to {target:"DatePickup",label:_actionLabel,arguments:{dateId: _i}}>>
<<run $currentLocation.actions.push(_action)>>
<<elseif _secondsTilDate <= 3600>>
<<run $currentLocation.actions.push({
label: "Wait til "+_npc.nameUsed+" arrives",
target: $currentLocation.id,
time:_secondsTilDate
})>>
<</if>>
<</if>>
<</for>>
<<Location $currentLocation>><<if $time.getUTCHours() >= 7 && $time.getUTCHours() < 22>>
<<set $currentLocation to {
id: "ParentsParents",
title:"Your parents room.",
type:"home",
image: "locations/home/room_parents.jpg",
conncetions:[
{
label:"Hallway",
tooltip:"Leave to the hallway.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
]
}>>
<<else>>
<<set $currentLocation to {
id: "ParentsParents",
title:"Your parents room.",
type:"home",
image: "locations/home/door.jpg",
conncetions:[
{
label:"Hallway",
tooltip:"Leave to the hallway.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
description:"Your parents are likely asleep. You shouldn't disturb them now."
}>>
<</if>>
<<ParentsHomeAddShortcuts>>
<<Location $currentLocation>><<if $time.getUTCHours() >= 7 && $time.getUTCHours() < 22>>
<<set $currentLocation to {
id: "ParentsSister",
title:"Your sisters room.",
type:"home",
image: "locations/home/room_sister.jpg",
conncetions:[
{
label:"Hallway",
tooltip:"Leave to the hallway.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
npcs:[],
actions:[]
}>>
<<if $time.getUTCHours() >= 20 && $time.getUTCHours() < 22>>
<<set $currentLocation.description = "Your sister is reading a book on her bed.">>
<<run $currentLocation.npcs.push("sister")>>
<</if>>
<<if !$currentLocation.npcs.includes("sister")>>
<<set $currentLocation.description = "Your sister isn't here right now. She certainly would not like it if you were snooping around in here.">>
<<run $currentLocation.actions.push(
{
"label":"Snoop through her panties drawer",
"target":"SisterDrawer"
}
)>>
<</if>>
<<else>>
<<set $currentLocation to {
id: "ParentsSister",
title:"Your sisters room.",
type:"home",
image: "locations/home/door.jpg",
conncetions:[
{
label:"Hallway",
tooltip:"Leave to the hallway.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
description: "You sister is likely sleeping right now. You shouldn't disturb her now."
}>>
<</if>>
<<ParentsHomeAddShortcuts>>
<<Location $currentLocation>><<run TimePassSeconds(30)>>
<<set _npc to NPCs.load("sister")>>
<<Image "locations/home/sisterPanties.jpg">>
Your sister has her panties stored in this drawer. Most of them have laces or made of silky fabric.
<div class="actions">
<<if !NPCs.load("sister").get("stolePanties",false)>>
[[Steal panties|SisterDrawerSteal]]
<</if>>
[[Back|$currentLocation.id]]
</div><<run TimePassSeconds(45)>>
<<run NPCs.load("sister").set("stolePanties",TimeWithOffset(0))>>
<<run OutfitInventory.add("panties/sister")>>
<<set _item to Items.load("panties/sister")>>
<<Image _item.image>>
You look through your sisters panties. You decide to grab the ones you like best.
<div class="actions">
<<link [[Sneak back to your room|ParentsPlayerRoom]]>>
<<run TimePassSeconds(30)>>
<</link>>
</div><<widget "ParentsHomeAddShortcuts">>
<<set _shortcuts to [{
label:"Your Room",
tooltip:"Enter your room.",
image: "locations/home/room_pc_pink(0).jpg",
duration: 20,
destination:"ParentsPlayerRoom",
noShoes: true,
type:"private"
},
{
label:"Kitchen",
tooltip:"Fridge and oven.",
image: "locations/home/kitchen.jpg",
duration: 20,
destination:"ParentsKitchen",
noShoes: true,
type:"private"
},
{
label:"Living room",
tooltip:"Living room.",
image: "locations/home/living.jpg",
duration: 20,
destination:"ParentsLiving",
noShoes: true,
type:"private"
},
{
label:"Bathroom",
tooltip:"Toilet, bathtub and shower.",
image: "locations/home/bath.jpg",
duration: 20,
destination:"ParentsBathroom",
noShoes: true,
type:"private"
}]>>
<<for _i, _shortcut range _shortcuts>>
<<if _shortcut.destination != $currentLocation.id>>
<<run $currentLocation.conncetions.push(_shortcut)>>
<</if>>
<</for>>
<</widget>><<set $currentLocation to {
id: "ParentsPlayerRoom",
title:"Your Room",
type:"home",
conncetions:[
{
label:"Leave",
tooltip:"Leave your room and go to the hallway of your parents apartment.",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"ParentsHallway",
noShoes: true,
type:"private"
}
],
actions:[
{
target: "Wardrobe"
},
{
target: "Bed"
},
{
target: "SportsInRoom",
label: "Sports"
}
]
}>>
<<set $currentLocation.image to ("locations/home/room_pc_"+$actions.home.pcBedroom.style+"("+$actions.home.pcBedroom.styleNumber+").jpg")>>
<<ParentsHomeAddShortcuts>>
<<if Outfits.Current.style.coverage eq "topless">>
<<for _i, _connection range $currentLocation.conncetions>>
<<set _connection.disabled to true>>
<<set _connection.tooltip to "You wouldn't feel comfortable to leave your room with your breasts exposed.">>
<</for>>
<<elseif Outfits.Current.style.coverage eq "naked">>
<<for _i, _connection range $currentLocation.conncetions>>
<<set _connection.disabled to true>>
<<set _connection.tooltip to "You wouldn't feel comfortable to leave your room naked.">>
<</for>>
<</if>>
<<Location $currentLocation>>
<<Actions>>
<<ActionA "Visit generic Home" "GenericHomeExample" `{debug:true}`>>
<</ActionA>>
<</Actions>>
<<TODO>>
<li>Buy and use a computer.</li>
<li>Redecorate.</li>
<li>Invite a friend.</li>
<</TODO>><<set $currentLocation to {
id: "Industrial",
title:"Industrial Region",
image: {
day: "locations/industrial/industrialDay.jpg",
night: "locations/industrial/industrialNight.jpg"
},
outdoors: true,
public: true,
conncetions:[
{
label:"Subway",
image:"locations/subway/industrial.jpg",
duration: 60,
destination:"SubwayIndustrial"
},
{
label:"Sex Shop",
image:"locations/shop/sex.jpg",
duration: 180,
destination:"SexShop"
}
],
actions:[],
description : ""
}>>
<<Location $currentLocation>>
<<Actions>>
<<ActionA "Prostitute yourself" "Prostitute" `{debug:true}`>><</ActionA>>
<</Actions>><<set $currentLocation to {
id: "NesterowStreet",
title:"Nesterower Straße",
description:"",
actions: [],
image:"locations/residential/nestrowDay.jpg",
conncetions:[
{
label:"Home",
tooltip:"Walk to your families home.",
image:"locations/home/outside_day.jpg",
duration: 120,
destination:"ParentsOutside"
},
{
label:"Residential Area",
tooltip:"Walk to the residential area.",
image:"locations/residential/residentialDay.jpg",
duration: 300,
destination:"Residential"
}
]
}>>
<<if NPCs.load("schoolChristian").get("home.enabled",false) === true>>
<<run $currentLocation.conncetions.push({
label:"Christians Home",
image:"locations/npchome/schoolChristian.jpg",
duration: 120,
destination:"HomeSchoolChristian"
})>>
<</if>>
<<Location $currentLocation>>
<<Actions>>
<<ActionA "Activate Christian" "NesterowStreet" `{debug:true}`>>
<<run NPCs.load("schoolChristian").set("home.enabled",true)>>
<</ActionA>>
<</Actions>><<set $currentLocation to {
id: "Residential",
title:"Residential Area",
image: "locations/residential/residentialDay.jpg",
outdoors: true,
public: true,
conncetions:[
{
label:"Home",
tooltip:"Walk to your families home directly.",
image:"locations/home/outside_day.jpg",
duration: 420,
destination:"ParentsOutside"
},
{
label:"Nesterower Straße",
tooltip:"The street your parents live in.",
image:"locations/residential/nestrowDay.jpg",
duration: 300,
destination:"NesterowStreet"
},
{
label:"Subway",
image:"locations/subway/residential.jpg",
duration: 60,
destination:"SubwayResidential"
},
{
label:"School",
tooltip:"",
image:"locations/school/ground.jpg",
duration: 120,
destination:"School"
},
{
label:"Bookshop",
image:"locations/shop/books.jpg",
duration: 120,
destination:"Bookshop",
opentime:{
hourOpen: 9,
hourClose: 19,
sundays: false
}
},
{
label:"Hairstylist",
image:"locations/hairstylist/outside.jpg",
duration: 120,
destination:"Hairstylist",
opentime:{
hourOpen: 9,
hourClose: 19,
sundays: false,
mondays: false
}
},
{
label:"Kaeda",
tooltip:"",
image:"locations/shop/kaedaWide.jpg",
duration: 120,
destination:"ResidentialKaeda",
opentime:{
hourOpen: 7,
hourClose: 22,
sundays: false
}
},
{
label:"Pharmacy",
image:"locations/shop/pharmacy.jpg",
duration: 120,
destination:"Pharmacy",
opentime:{
hourOpen: 8,
hourClose: 20,
sundays: false
}
},
{
label:"School Tailor",
image:"locations/shop/school.jpg",
duration: 120,
destination:"SchoolTailor",
opentime:{
hourOpen: 8,
hourClose: 18,
sundays: false
}
},
{
label:"City Center",
tooltip:"Walk to the City Center.",
image:"locations/citycenter/cityCenterDay0.jpg",
duration: 9000,
destination:"CityCenter"
}
],
actions:[
]
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "School",
title:"School",
image: {
day: "locations/school/ground.jpg",
night: "locations/school/ground_night.jpg"
},
conncetions:[
{
label:"Leave",
tooltip:"Walk to the residential area.",
image:"locations/residential/residentialDay.jpg",
duration: 120,
destination:"Residential"
}
],
actions:[],
description : ""
}>>
<<if !("school" in $pc.job)>>
<<set $currentLocation.description += "You are not enrolled in school.">>
<<elseif $daily.isSchoolDay == 0>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "School is closed today."
})>>
<<elseif $daily.isSchoolDay == -10>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "School is closed for the summer vacations."
})>>
<<run $currentLocation.description += "Summer vacations last until "+TimeFormat(schoolVacationTimes(-10).end,"DD.MM.")>>
<<elseif $daily.isSchoolDay == -11 or $daily.isSchoolDay == -12>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "School is closed for the christmas vacations."
})>>
<<elseif $daily.isSchoolDay == -1>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "School is closed for the weekend."
})>>
<<elseif $time.getUTCHours() >=14>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "It is too late. School ends at 2 pm."
})>>
<<elseif $time.getUTCHours() >=11>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "It is too late. School starts at 8 am any you have already missed too much of the school day."
})>>
<<elseif $time.getUTCHours() < 7>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "It is too early. School starts at 8 am and you can't enter the school building before 7 am."
})>>
<<else>>
<<if Outfits.Current.style.school is true>>
<<run $currentLocation.actions.push({
label: "Go to classes",
target: "SchoolBefore"
})>>
<<else>>
<<run $currentLocation.actions.push({
label: "Go to classes",
disabled: true,
message: "You need to be wearing a school outfit to go to classes."
})>>
<</if>>
<</if>>
<<Location $currentLocation>>
<<Actions>>
<<ActionA "Go to classes" "SchoolBefore" `{debug:true}`>><</ActionA>>
<</Actions>><<set _timeTilClasses to SecondsTil({hour:8})>>
<<if getVar("school.introduced",false) === false>>
<<run setVar("school.introduced",true)>>
<<run TimePassSeconds(600)>>
<<Image "events/school/Headmistress/headmistressIntro.jpg">>
<p>Since this is your first day at this school you are expected to report to the school director. You talk to her secretary and after a short while you are let into the directors office.</p>
<p class="passageSpeak femaleDominant">Welcome to our school, Miss $pc.name.last. I am Mrs. Kaiser and I am the headmaster of this nice school.</p>
<<if _timeTilClasses >= 180>>
<p class="passageSpeak femaleDominant">I am glad that you arrived here in time. I hope you keep this work ethic up.</p>
<<elseif _timeTilClasses >= 0>>
<p class="passageSpeak femaleDominant">You barely made it here in time. I hope that you won't get late to classes in the future. Remember that school starts at 08:00.</p>
<<else>>
<p class="passageSpeak femaleDominant">You are late. I hope that that won't happen again. Remember that school starts at 08:00.</p>
<</if>>
<<if $pc.job.school.daysMissed > 0>>
<p class="passageSpeak femaleDominant">You already missed $pc.job.school.daysMissed <<print sinplu($pc.job.school.daysMissed,"day","days")>> of school. I don't think I have to explain to you how bad this is. If you want to get your Abitur you must come to school regularly.</p>
<</if>>
<p>She takes a few papers out of her desk and hands them to you.</p>
<p class="passageSpeak femaleDominant">These are the school rules. Follow them and you might have a pleasant time here. Break them and you might get expelled.</p>
<p class="passageSpeak femaleDominant">Now... if you'd excute me. I have work to do and you have classes to attend. I hope you have a good time at our school.</p>
<p>She leads you out of her office.</p>
<hr/>
<p>Once outside you read the papers she handed to you. Most of the rules are common sense, such as bullying being forbidden.</p>
<p>Two passages get your attention:
<ol>
<li>Students have to attend school wearing a school uniform. Wearing a uniform of the opposite sex is permitted only if psychologist certifies that that is required for the students mental health.</li>
<li>Staff members are permitted to send stubborn students to the school director for punishment.</li>
</ol>
</p>
<<Actions>>
[[Go to classes|SchoolClassesIntro]]
<</Actions>>
<<else>>
<<if _timeTilClasses >= 180>>
<p>You arrive early enough to have a little chat with your classmates before school begins.</p>
<<Actions>>
[[Go to classes|SchoolClasses]]
<</Actions>>
<<elseif _timeTilClasses >= 0>>
<p>You arrive late but not too late. If you rush to the classroom you will make it there in time.</p>
<<Actions>>
[[Rush to classes|SchoolClasses]]
<</Actions>>
<<else>>
<p>You are too late. Classes have already started.</p>
<<Actions>>
[[Go to classes|SchoolClasses]]
<</Actions>>
<</if>>
<<TODO>>
<li>Add images.</li>
<li>Add random encounters.</li>
<</TODO>>
<</if>><<run TimePassSeconds(300)>>
<<Image "events/school/introduction.jpg">>
<p>You walk over to your new class room. You knock at the door and the teacher lets you in.</p>
<p class="passageSpeak maleDominant">Ah, you must be Miss $pc.name.last. My name is Mr. Steiner. Welcome to my class.</p>
<p>He turns to the class and explains that you are a new student and that he expects everybody to be nice to you. Then he points out your seat to you before continuing his class.</p>
<<Actions>>
[[Take your seat|SchoolClasses]]
<</Actions>><<set $daily.schoolPerformance to 0>>
<<Image "events/school/schedule.jpg">>
<<set $pc.job.school.performanceDecay = 2>>
<<if $pc.job.school.performance >= 90>> <<set _grade = "15 Points (A+)">> <<set $pc.job.school.performanceDecay = 3>>
<<elseif $pc.job.school.performance >= 80>> <<set _grade = "14 Points (A)">> <<set $pc.job.school.performanceDecay = 3>>
<<elseif $pc.job.school.performance >= 70>> <<set _grade = "13 Points (A-)">> <<set $pc.job.school.performanceDecay = 3>>
<<elseif $pc.job.school.performance >= 60>> <<set _grade = "12 Points (B+)">>
<<elseif $pc.job.school.performance >= 50>> <<set _grade = "11 Points (B)">>
<<elseif $pc.job.school.performance >= 40>> <<set _grade = "10 Points (B-)">>
<<elseif $pc.job.school.performance >= 30>> <<set _grade = "9 Points (C+)">>
<<elseif $pc.job.school.performance >= 20>> <<set _grade = "8 Points (C)">>
<<elseif $pc.job.school.performance >= 10>> <<set _grade = "7 Points (C-)">>
<<elseif $pc.job.school.performance >= 0>> <<set _grade = "6 Points (D+)">> <<set $pc.job.school.performanceDecay = 1>>
<<elseif $pc.job.school.performance >= -10>> <<set _grade = "5 Points (D)">> <<set $pc.job.school.performanceDecay = 1>>
<<elseif $pc.job.school.performance >= -20>> <<set _grade = "4 Points (D-)">> <<set $pc.job.school.performanceDecay = 1>>
<<elseif $pc.job.school.performance >= -34>> <<set _grade = "3 Points (E+)">> <<set $pc.job.school.performanceDecay = 1>>
<<elseif $pc.job.school.performance >= -46>> <<set _grade = "2 Points (E)">> <<set $pc.job.school.performanceDecay = 1>>
<<elseif $pc.job.school.performance >= -60>> <<set _grade = "1 Point (E-)">> <<set $pc.job.school.performanceDecay = 1>>
<<else>><<set _grade = "0 Points (F)">> <<set $pc.job.school.performanceDecay = 0>>
<</if>>
<p>
Your current grade is _grade.
<<if $pc.job.school.daysMissed > 0>>You missed $pc.job.school.daysMissed entire days of school.<</if>>
</p>
<p>How much effort would you like to put into your school performance today? Improving and keeping high grades requires more effort than improving low grades.</p>
<<Actions>>
<<ActionA "Start School Day (Maximum effort)" "SchoolClassesExecute" `{stress:40,arguments:{schoolEffort:4}}`>><</ActionA>>
<<ActionA "Start School Day (Big effort)" "SchoolClassesExecute" `{stress:30,arguments:{schoolEffort:3}}`>><</ActionA>>
<<ActionA "Start School Day (Medium effort)" "SchoolClassesExecute" `{stress:20,arguments:{schoolEffort:2}}`>><</ActionA>>
<<ActionA "Start School Day (Little effort)" "SchoolClassesExecute" `{stress:10,arguments:{schoolEffort:1}}`>><</ActionA>>
<<ActionA "Start School Day (No effort)" "SchoolClassesExecute" `{stress:0,arguments:{schoolEffort:0}}`>><</ActionA>>
<</Actions>><<set $pc.job.school.effort to $passageArguments.schoolEffort>>
<<set $daily.schoolPerformance += $pc.job.school.effort>>
<<Image `"events/school/participate_f_"+$pc.job.school.effort+".jpg"`>>
<<switch $pc.job.school.effort>>
<<case 4>>
<p>You make notes for everything the teachers mention, try to think ahead and ask questions when you need something to be clearified.</p>
<<case 3>>
<p>You actively listen to your teachers and make notes when they mention something important. You answer the teachers questions, but not volunteeringly.</p>
<<case 2>>
<p>You mostly listen to your teachers and make notes for the most important informations.</p>
<<case 1>>
<p>You don't pay much attention to your teachers but at least you can make a few notes so that this isn't a complete waste of time.</p>
<<case 0>>
<p>You don't pay attention at all. Therefore you don't learn anything.</p>
<</switch>>
<<Actions>>
[[Continue|SchoolBreak]]
<</Actions>><<set $pc.job.school.effort to $passageArguments.schoolEffort>>
<<set _effortImage to "events/school/schoolOut.jpg">>
<<Image _effortImage>>
<<set _performanceChange to $daily.schoolPerformance - $pc.job.school.performanceDecay>>
<<set $pc.job.school.performance += _performanceChange>>
<p>
School is out.
<<if _performanceChange > 0>>
Your grades slightly improved today.
<<elseif _performanceChange == 0>>
Your grades didn't change today.
<<else>>
Your grades slightly decreased today.
<</if>>
</p>
<<run _timeSchoolLunch = Now()>>
<<run _timeSchoolLunch.setUTCHours(12,0,0,0)>>
<<run _timeSchoolEnds = Now()>>
<<run _timeSchoolEnds.setUTCHours(14,0,0,0)>>
<<set _timeToPass = Math.ceil((_timeSchoolLunch-$time)/1000)>>
<<run TimePassSeconds(_timeToPass) >>
<<run Body.consume("_schoolMeal",{spendTime:false})>>
<<set _timeToPass = Math.ceil((_timeSchoolEnds-$time)/1000)>>
<<run TimePassSeconds(_timeToPass) >>
<<set $daily.schoolVisited to true>>
<<DEBUG>>
<p>Performancechange: _performanceChange</p>
<p>School-Object:</p>
<<Stringify $pc.job.school>>
<</DEBUG>>
<<Actions>>
[[Leave School|$currentLocation.id]]
<</Actions>><<Image "events/school/breakStart.jpg">>
<p>What would you like to do during the school breaks?</p>
<p>
You could hang out with your fellow students. As far as you understand the social dynamics here there are the following groups:
<ul>
<li><b>Chicks</b>: A group of girls who are mostly interested in fashion, make-up and attractive boys.</li>
<li><b>Geeks</b>: A group of P&P-players and computer-nerds.</li>
<li><b>Rich kids</b>: Spoiled kids. They like to show off the wealth of their parents. You can either be rich yourself or an accessoire if you want to join them.</li>
<li><b>Soccer-Team</b>: The soccer-team and their female fans.</li>
<li><b>Swots</b>: These students are already planning their careers and are mostly interested in achieving very good grades.</li>
</ul>
You could also hang out with one of the students who doesn't have any friends or mind your own business.
</p>
<<Actions>>
<<ActionA "Hang out with the Chicks" "SchoolBreakGroup" `{arguments:{id:"chicks"}}`>><</ActionA>>
<<ActionA "Hang out with the Geeks" "SchoolBreakGroup" `{arguments:{id:"geeks"}}`>><</ActionA>>
<<ActionA "Hang out with the Rich kids" "SchoolBreakGroup" `{arguments:{id:"rich"}}`>><</ActionA>>
<<ActionA "Hang out with the Soccer-Team" "SchoolBreakGroup" `{arguments:{id:"soccer"}}`>><</ActionA>>
<<ActionA "Hang out with the Swots" "SchoolBreakGroup" `{arguments:{id:"swots"}}`>><</ActionA>>
<<ActionA "Hang out with a loner" "SchoolBreakGroup" `{arguments:{id:"loner"}}`>><</ActionA>>
<<ActionA "Study in the library" "SchoolBreakStudy" `{stress:10}`>><</ActionA>>
<</Actions>><<set _groupId to $passageArguments.id>>
<<switch _groupId>>
<<case "chicks">>
<<Image `"events/school/groups/chicks("+randomInt(0,1)+").jpg"`>>
<p>
You find the girls at the toilets where they are redoing their make-up.
</p>
<p>
You feel like you don't fit in here. Maybe you should work on your make-up-skill and get a more fashionable school outfit.
</p>
<<case "geeks">>
<<Image `"events/school/groups/geeks.jpg"`>>
<<set _interactions to getVar("school.groups.geeks.interactions",0)>>
<<set _npc0 to NPCs.load("schoolGabriel")>>
<<set _npc1 to NPCs.load("schoolChristian")>>
<<set _npc2 to NPCs.load("schoolFabian")>>
<<set _npc3 to NPCs.load("schoolNora")>>
<p>
You find the geeks in an otherwise empty classroom.
</p>
<div class="npcList">
<<if _interactions == 0>>
<p>
They seem to be happy to see you and introduce themselves to you.
</p>
<p>
<<Image _npc0.image>>
_npc0.nameUsed is the leader of this group.
At least he sees himself this way.
He is charismatic and eloquent and enjoys being in the spotlight.
From time to time he makes a few subtle flirty remarks in your direction, but you don't know how serious he is, since he does pretty much the same with _npc3.nameUsed.
</p>
<p>
<<Image _npc1.image>>
_npc1.nameUsed likes thinking more than talking.
He enjoys listening to the others and only participates actively when he is directly adressed or really interested in a specific topic.
These topics include video games, his computational sciences classes and the P&P-nights of the groups, which he leads as the gamemaster.
</p>
<p>
<<Image _npc2.image>>
_npc2.nameUsed is a avid online player.
His favorite topics are all related to his favorite game "Universe of Battlecraft".
He even plays it in the morning hours and oftentimes comes too late to school because of that.
The rest of the group views this habit with amusement.
</p>
<p>
<<Image _npc3.image>>
_npc3.nameUsed is the only girl of this group.
She has a student job at a local bar which often includes working late in the evening.
Therefore she doesn't get a lot of sleep and drinks lots of coffee.
From time to time the others make some funny remarks about the coffee stains on her skirt but she doesn't mind that.
</p>
<p>You quickly connect with them and before you know it you are drawn into a discussion about goblins, network protocols and creating P&P-characters.</p>
<<elseif _interactions == 2>>
<<run NPCs.load("schoolChristian").set("home.enabled",true)>>
<<run NPCs.load("schoolChristian").set("home.modePP",true)>>
<p>
<<Image _npc1.image>>
Today the group discusses their next P&P-gamesession.
As they realize that you are not included in this discussion they invite you to join them.
They are playing at the home of _npc1.nameUsed, which isn't far from your parents home.
Just show up there any Thursday that's not an holliday at 18:00.
</p>
<<else>>
<<set _random = randomInt(0,3)>>
<<switch _random>>
<<case 0>>
<p>
<<Image _npc0.image>>
Today _npc0.nameUsed makes some ambiguous remarks about your appearance.
If you didn't know any better you would say that he is flirting with you.
Before you finish your thought he is allready talking to another random girl who passed by the room.
As you look over to _npc1.nameUsed you see him rolling his eyes.
</p>
<<case 1>>
<p>
<<Image _npc2.image>>
Today _npc2.nameUsed tries to convince you to start playing "Universe of Battlecraft".
He allready has some ideas prepared for you, such as playing a sexy white elven sorceress, a sexy black elven witch or a sexy green elven mage.
Ignoring your expression he details how you could use ingame-currencies to change the color of the ingame-outfits to match your elves skin.
Finally _npc3.nameUsed comes to your rescue. She explains, that the both of you have some girl-talk to do.
She then appologizes for _npc2.nameUsed.
He is just _npc2.nameUsed.
</p>
<<case 2>>
<p>
<<Image _npc1.image>>
Today you have a little chat with _npc1.nameUsed.
He seems to be genuinely intrested in what you have to say.
He lets you talk most of the time, only providing you with some buzzwords to advance the conversation.
</p>
<<case 3>>
<p>
<<Image _npc3.image>>
Today you have a little chat with _npc3.nameUsed.
She speaks very openly with you, telling you about her experiences with boys and men.
And she seems to have lots of those, which surprises you.
She usually acts way more innocent. Apparantly she is another _npc3.nameUsed after school.
Once she realizes that you are not as experienced in this regard as she is she starts to give you some well-meant advice.
She tells you that you are young only once and that you should have as much fun as possible.
</p>
<</switch>>
<</if>>
</div>
<<run setVar("school.groups.geeks.interactions",_interactions + 1) >>
<<case "rich">>
<<Image `"events/school/groups/rich.jpg"`>>
<p>
You find the rich kids near the auditorium.
</p>
<p>
You feel like you don't fit in here. They are all wearing expensive looking school outfits and accessoires and are clearly not interested in spending time with you.
</p>
<<case "soccer">>
<<Image `"events/school/groups/soccer.jpg"`>>
<<set _interactions to getVar("school.groups.soccer.interactions",0)>>
<<set _npc0 to NPCs.load("schoolJustin")>>
<<set _npc1 to NPCs.load("schoolLars")>>
<<set _npc2 to NPCs.load("schoolMichel")>>
<<set _npc3 to NPCs.load("schoolRoman")>>
<<set _npc4 to NPCs.load("schoolJanine")>>
<<set _npc5 to NPCs.load("schoolJulia")>>
<<set _npc6 to NPCs.load("schoolMelina")>>
<p>
You find the soccer team at the sports field, where students of various ages are playing together.
</p>
<<if _interactions == 0>>
<div class="npcList">
<p>
They seem to be happy to see you and introduce themselves to you.
</p>
<p>
<<Image _npc0.image>>
_npc0.nameUsed is the team leader.
He oftentimes dictates the game strategy and does so in a direct and commanding yet friendly voice.
Outside of the game he likes to discuss the new motor bike.
He also spends a decent time alone with his girlfriend _npc4.nameUsed.
</p>
<p>
<<Image _npc4.image>>
_npc4.nameUsed is the head cheerleader and uses much of her time training on the field and explaining new moves to the other cheerleaders.
When she isn't otherwise occupied she spends time with her boyfriend _npc0.nameUsed.
</p>
<p>
<<Image _npc1.image>>
_npc1.nameUsed is one of the forwards of the soccer-team.
He seems to be very good at the game.
The others tell you that he wants to become a professional soccer-player.
He talks very little and only greets you with a slight nod.
</p>
<p>
<<Image _npc2.image>>
_npc2.nameUsed is the goal keeper.
Outside of the field he is very kind, but during the game he loudly swears whenever the game doesn't go has he wants it to go and the teachers are out of hearing range.
</p>
<p>
<<Image _npc3.image>>
_npc3.nameUsed is one of the forwards of the soccer team.
He is not as good at this job as _npc1.nameUsed, but he doesn't mind that.
Outside of the field he likes to discuss recent political events.
The others oftentimes ask him where his girlfriend _npc6.nameUsed is.
He then answers, as annoyed as he can, that she is at the school toilet with her friends.
</p>
<p>
<<Image _npc5.image>>
_npc5.nameUsed just stands next to the field and watches the others playing.
You notice that she seems to have a crush on _npc2.nameUsed.
Whenever he starts complaining about something she does so as well.
</p>
</div>
<<else>>
<p>Time flies by as you discuss various topics with them.</p>
<</if>>
<<run setVar("school.groups.geeks.interactions",_interactions + 1) >>
<<case "swots">>
<<Image `"events/school/groups/swots.jpg"`>>
<p>
You find the swots in a common room where they are reading school books.
</p>
<p>
From time to time they discuss school topics.
Participating in their conversation is hard.
Most of the time you don't understand what they are talking about.
Maybe you should increase your school performance before hanging out with them.
</p>
<<case "loner">>
<<Image `"events/school/groups/loners.jpg"`>>
<p>
You try to connect with one of the loners.
Without success.
Maybe they want to be left alone?
</p>
<</switch>>
<<Actions>>
[[End the school day|SchoolDayEnd]]
<<ActionA "Another Break Action" "SchoolBreak" `{debug:true}`>><</ActionA>>
<</Actions>><<set $daily.schoolPerformance += 1>>
<<Image "events/school/study.jpg">>
<p>You spend your breaks in the library studying. It's not a social activity, but at least your school performance increases a little bit.</p>
<<Actions>>
[[End the school day|SchoolDayEnd]]
<</Actions>><<set $currentLocation to {
id: "Hairstylist",
title:"Hairstylist",
image: "locations/hairstylist/inside.jpg",
conncetions:[
{
label:"Leave",
image:"locations/residential/residentialDay.jpg",
duration: 120,
destination:"Residential"
}
],
actions:[
{
label:"Get your hair shortened or hair extensions",
target:"HairstylistCut"
},
{
label:"Get your hair dyed",
target:"HairstylistDye"
}
],
description:""
}>>
<<Location $currentLocation>><<Event `{id:"HairstylistCut"}`>>
<<if $passageArguments.hairCutImage is undefined>>
<<Image "locations/hairstylist/hairCutDefault.jpg">>
<<else>>
<<Image $passageArguments.hairCutImage>>
<</if>>
<<HairLength>>
<hr/>
<<set _currentLength to Body.hairHeadLength>>
<<if _currentLength >= 10>>
<h3>Cutting</h3>
<<set _shortenCost to 2990>>
<<set $actionArguments to {price:{cash:_shortenCost}}>>
<<Actions>>
<<for _label, _hairInfo range constant.character.body.hair.head.states>>
<<set _targetLength = _hairInfo.min>>
<<capture _targetLength>>
<<if _hairInfo.min >= _currentLength>><<continue>><</if>>
<<switch _label>>
<<case "shaved">>
<<continue>>
<<case "buzz">>
<<set _label = "Buzz Cut">>
<<case "vshort">>
<<set _label = "Very Short">>
<<case "short">>
<<default>>
<<set _label += " length">>
<</switch>>
<<set _label = (_hairInfo.min/10) +" cm: " + capitalizeFirstLetter(_label)>>
<<ActionA `_label` "HairStylistCutting" $actionArguments>>
<<run Body.hairHeadCutToLength(_targetLength)>>
<</ActionA>>
<</capture>>
<</for>>
<</Actions>>
<</if>>
<<set _extensionCost to 20000>>
<h3>Extensions</h3>
<<if Body.hairExtensions > 0>>
<p>You have <<print (Body.hairExtensions / 10)>> cm long extensions.</p>
<<Actions>>
<<ActionA "Remove Extensions" "HairStylistExtending" `{price:{cash:500}}`>>
<<set Body.hairExtensions = 0>>
<</ActionA>>
<<ActionA "Replace with 25cm Extensions" "HairStylistExtending" `{price:{either:_extensionCost}}`>>
<<set Body.hairExtensions = 250>>
<</ActionA>>
<</Actions>>
<<else>>
<<Actions>>
<<ActionA "Get 25 cm Extensions" "HairStylistExtending" `{price:{either:_extensionCost}}`>>
<<set Body.hairExtensions = 250>>
<</ActionA>>
<</Actions>>
<</if>>
<<Actions>>
<<link [[Back|$currentLocation.id]]>>
<<run delete $passageArguments.hairCutImage>>
<</link>>
<</Actions>><<run TimePassSecondsRand(1800)>>
<<Image "locations/hairstylist/hairCut.jpg">>
<p>The hair stylist starts cutting your hair. After about half an hour she is done.</p>
<<HairLength>>
<<Actions>>
[[Back|Hairstylist]]
<</Actions>><<run TimePassSecondsRand(7200)>>
<<Image "locations/hairstylist/hairExtension.jpg">>
<p>The hair stylist carfully applies a special glue to each strand of your hair and then attaches the hair extensions. After about 2 hours, your hair looks way longer.</p>
<<HairLength>>
<<Actions>>
[[Back|Hairstylist]]
<</Actions>><<Image "locations/hairstylist/hairDye.jpg">>
<<HairColor>>
<hr/>
Natural hair color:
<div class="actions">
<<HairstylistOptionsDye "black" 4990>>
<<HairstylistOptionsDye "brown" 4990>>
<<HairstylistOptionsDye "blond" 4990>>
<<HairstylistOptionsDye "red" 4990>>
</div>
Unnatural hair color:
<div class="actions">
<<HairstylistOptionsDye "blue" 5990>>
<<HairstylistOptionsDye "green" 5990>>
<<HairstylistOptionsDye "pink" 5990>>
<<HairstylistOptionsDye "yellow" 5990>>
<<HairstylistOptionsDye "white" 7990>>
</div>
<div class="actions">
[[Back|Hairstylist]]
</div><<widget "HairstylistOptionsDye">>
<<set _color to _args[0]>>
<<set _price to _args[1]>>
<<set _linkText to capitalizeFirstLetter(_color) + " ("+Money.format(_price)+")">>
<<if $pc.body.hair.head.color != _color>>
<<if $pc.possessions.cash >= _price>>
<<capture _color,_price>>
<<link [[_linkText|HairstylistDye]]>>
<<set $pc.possessions.cash -= _price>>
<<set $pc.body.hair.head.color = _color>>
<</link>>
<</capture>>
<<else>>
<a class="disabled">_linkText<p class="disabledMessage">You don't have enough cash.</p></a>
<</if>>
<<else>>
<a class="disabled">_linkText<p class="disabledMessage">This is your current hair color.</p></a>
<</if>>
<</widget>><<set $currentLocation to {
id: "Hospital",
title:"Hospital",
image: {
day: "locations/hospital/hospitalDay.jpg",
night: "locations/hospital/hospitalNight.jpg"
},
conncetions:[
{
label:"Leave",
image:"locations/residential/residentialDay.jpg",
duration: 300,
destination:"Residential"
},
{
label:"Emergency Dept.",
image:"locations/hospital/emergency.jpg",
duration: 90,
destination:"HospitalEmergengy",
disabled:true,
tooltip:"You have no reason to go there."
},
],
description: "This is the biggest hospital of the city and one of the biggest of the nations.<br/>Currently, nobody you know is a patient here and you don't need medical attention. There is no reason for you to enter the hospital building."
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "HospitalEmergengy",
title:"Hospital Emergency Department",
image: "locations/hospital/emergency.jpg",
conncetions:[
{
label:"Leave",
image:"locations/hospital/hospitalDay.jpg",
duration: 90,
destination:"Hospital"
}
]
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "HospitalPCPatient",
title:"Your patient room",
image: "locations/hospital/patientRoom.jpg",
conncetions:[
{
label:"Leave",
image:"locations/hospital/emergency.jpg",
duration: 90,
destination:"HospitalEmergengy",
outfit:{coverage:"clothed",barefeet:false}
}
],
actions:[
{
target: "Wardrobe",
label:"Change your clothes",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:""
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "Kiosk",
title:"Kiosk",
image: {
day: `locations/kiosk/kiosk(0).jpg`,
night: "locations/kiosk/kioskNight(0).jpg"
},
conncetions:[
{
label:"Leave",
duration: 120,
destination:"ZooPlaza",
image: "locations/zoo/plazaDay.jpg"
}
]
}>>
<<Location $currentLocation>>
<<set _inventoryProducts to [
{
id: "candy_boboty",
label: "Candy: Boboty",
image: "inventory/boboty.jpg",
description: "Chocolate candy with coconut.",
count: 1,
price: 99
},
{
id: "candy_lickers",
label: "Candy: Lickers",
image: "inventory/lickers.jpg",
description: "Chocolate candy with peanuts.",
count: 1,
price: 99
}
]>>
<<set _gameDude = magazinIssueCurrent("gamedude")>>
<<set _gameDude = Object.assign(_gameDude,{price: 599,count:1})>>
<<run _inventoryProducts.push(_gameDude)>>
<<InventoryShop _inventoryProducts>><<set $currentLocation to {
id: "PlasticSurgeon",
title:"Plastic Surgeon",
image:"locations/healthservives/plasticsurgeon/interior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/citycenter/cityCenterDay0.jpg",
duration: 180,
destination:"CityCenter"
}
],
actions:[
{
label:"Breast Augmentation",
target:"PlasticSurgeonBreasts"
},
{
label:"Face Augmentation",
target:"PlasticSurgeonFace"
}
]
}>>
<<Location $currentLocation>><<set _prize1Step = 400000>>
<<set _prize2Step = 600000>>
<<set _prizeRemove = 300000>>
<<if !("breastNatural" in $pc.body)>>
<<set $pc.body.breastNatural to $pc.body.breast>>
<</if>>
<<Image "locations/healthservives/plasticsurgeon/breast.jpg">>
<p>
<<if $pc.body.breastNatural === 0>>
You naturally don't have female breasts.
<<else>>
Your natural cup size is <<print window.lang.breastSize[$pc.body.breastNatural]>>.
<</if>>
<<if $pc.body.breastNatural == $pc.body.breast>>
Your breast currently have this size.
<<elseif $pc.body.breastNatural === 0>>
Your beasts have been removed.
<<else>>
Your breasts have been augmented and now have cup size <<print window.lang.breastSize[$pc.body.breast]>>.
<</if>>
</p>
<p>
The surgeon offers you the following options:
<ul>
<li>Get standard implants: This would cost you <<Money _prize1Step>> and increase your cup size to <<print window.lang.breastSize[($pc.body.breast+1)]>>.</li>
<li>Get big implants: This would cost you <<Money _prize2Step>> and increase your cup size to <<print window.lang.breastSize[($pc.body.breast+2)]>>.</li>
<<if $pc.body.breastNatural < $pc.body.breast>>
<li>Remove implants: This would cost you <<Money _prizeRemove>> and restore your natural cup size of <<print window.lang.breastSize[$pc.body.breastNatural]>>.</li>
<</if>>
</ul>
</p>
The surgeon only accepts money wired from your checking account. <<if $pc.possessions.giro is undefined>>You should open one at the bank.<</if>>
<<set _giroAvailable to Money.giroAvailable>>
<div class="actions">
<<if !($pc.possessions.giro is undefined)>>
<<if _giroAvailable >= _prize1Step>>
<<link [["Get standard implants"|PlasticSurgeonBreastsOperation]]>>
<<set $pc.body.breast += 1>>
<<set $pc.possessions.giro -= _prize1Step>>
<</link>>
<<else>>
<a class="disabled">Get standard implants<p class="disabledMessage">You can't afford this.</p></a>
<</if>>
<<if _giroAvailable >= _prize2Step>>
<<link [["Get big implants"|PlasticSurgeonBreastsOperation]]>>
<<set $pc.body.breast += 2>>
<<set $pc.possessions.giro -= _prize2Step>>
<</link>>
<<else>>
<a class="disabled">Get big implants<p class="disabledMessage">You can't afford this.</p></a>
<</if>>
<<if $pc.body.breastNatural < $pc.body.breast>>
<<if _giroAvailable >= _prizeRemove>>
<<link [["Remove implants"|PlasticSurgeonBreastsOperation]]>>
<<set $pc.body.breast = $pc.body.breastNatural>>
<<set $pc.possessions.giro -= _prizeRemove>>
<</link>>
<<else>>
<a class="disabled">Remove implants<p class="disabledMessage">You can't afford this.</p></a>
<</if>>
<</if>>
<</if>>
[[Back|PlasticSurgeon]]
</div><<set $pc.stats.hunger.current to 100>>
<<set $pc.stats.thirst.current to 100>>
<<run TimePassSeconds(3600*4,"sleep")>>
<<Image "locations/healthservives/plasticsurgeon/breastOperation.jpg">>
<p>The operation takes about 4 hours. You are put to sleep during this time, therefore you have no idea of what is happening.</p>
<div class="actions">
[[Continue|PlasticSurgeonBreastsAfter]]
</div><<Image "locations/healthservives/plasticsurgeon/breastAfter.jpg">>
<p>You wake up in a patient room. You feel a little confused, but the effect of the narcotics is quickly fading.</p>
<p>You don't have to wait long before the surgeon enters your room and gently unwraps the bandage around your chest.</p>
<p>He presents you with a mirror so that you can inspect your new breasts. You now have cup size <<print window.lang.breastSize[$pc.body.breast]>></p>
<div class="actions">
[[Leave|PlasticSurgeon]]
</div><<set _prize1Step = 500000>>
<<set _prize2Step = 1500000>>
<<set _prize1StepRF = _prize1Step*10>>
<<if !("faceNatural" in $pc.body)>>
<<set $pc.body.faceNatural to $pc.body.face>>
<</if>>
<<if !("faceOperationCounter" in $pc.body)>>
<<set $pc.body.faceOperationCounter to 0>>
<</if>>
<<Image "locations/healthservives/plasticsurgeon/face.jpg">>
<p>
Your face is naturally <<print window.lang.face[$pc.body.faceNatural]>>.
<<if $pc.body.faceNatural == $pc.body.face>>
<<if $pc.body.faceOperationCounter == 0>>
Since you didn't have any facial operations your face has its natural look.
<<else>>
Despite you having facial operations in the past your face has its natural look.
<</if>>
<<else>>
Your face has been augmented and is now considered <<print window.lang.face[$pc.body.face]>>.
<</if>>
</p>
<<if $pc.body.face == 10>>
<p>While he would be happy to take your money the surgeon also tells you that there is no way he could improve your current look further.</p>
<<Actions>>
[[Back|PlasticSurgeon]]
<</Actions>>
<<else>>
<p>
The surgeon offers you the following options:
<ul>
<li>Standard enhancement: This would cost you <<Money _prize1Step>> and enhance your facial appearance to <<print window.lang.face[($pc.body.face+1)]>>.</li>
<<if $pc.body.face < 9>>
<li>Premium enhancement: This would cost you <<Money _prize2Step>> and enhance your facial appearance to <<print window.lang.face[($pc.body.face+2)]>>.</li>
<</if>>
<<if $pc.body.faceOperationCounter > 0>>
<li>Standard enhancement (risk-free): This would cost you <<Money _prize1StepRF>> and enhance your facial appearance to <<print window.lang.face[($pc.body.face+1)]>>. There is no risk of complications.</li>
<</if>>
</ul>
</p>
<p>The surgeon only accepts money wired from your checking account. <<if $pc.possessions.giro is undefined>>You should open one at the bank.<</if>></p>
<p>
The surgeon also informs you that every successive facial operation increases the risk of producing the opposite of the intended effect.
<<if $pc.body.faceOperationCounter == 0>>
<<set _operationRisk to 0>>
Since this would be your first operation you don't have to worry about this for now.
<<else>>
<<set _operationRisk to Math.round(((1-Math.pow(0.5,$pc.body.faceOperationCounter)))*100)>>
Since you allready had $pc.body.faceOperationCounter facial operation(s) there would be a _operationRisk% risk of something going wrong.
<</if>>
</p>
<<Actions>>
<<ActionA "Get Standard enhancement" "PlasticSurgeonFaceOperation" `{price:{credit:_prize1Step}}`>>
<<set $pc.body.faceOperationCounter += 1>>
<<if randomInt(1,100) <= _operationRisk>>
<<set $pc.body.face = Math.max($pc.body.face-3,0)>>
<<set $temp_OperationBotched to true>>
<<else>>
<<set $pc.body.face = Math.min($pc.body.face+1,10)>>
<</if>>
<</ActionA>>
<<if $pc.body.face < 9>>
<<ActionA "Get Premium enhancement" "PlasticSurgeonFaceOperation" `{price:{credit:_prize2Step}}`>>
<<set $pc.body.faceOperationCounter += 1>>
<<if randomInt(1,100) <= _operationRisk>>
<<set $pc.body.face = Math.max($pc.body.face-3,0)>>
<<set $temp_OperationBotched to true>>
<<else>>
<<set $pc.body.face = Math.min($pc.body.face+2,10)>>
<</if>>
<</ActionA>>
<</if>>
<<if !($pc.possessions.giro is undefined) and $pc.body.face < 10>>
<<if $pc.body.faceOperationCounter > 0>>
<<ActionA "Get Standard enhancement (risk-free)" "PlasticSurgeonFaceOperation" `{price:{credit:_prize1StepRF}}`>>
<<set $pc.body.face += 1>>
<<set $pc.body.face = Math.min($pc.body.face+1,10)>>
<</ActionA>>
<</if>>
<</if>>
[[Back|PlasticSurgeon]]
<</Actions>>
<</if>><<set $pc.stats.hunger.current to 100>>
<<set $pc.stats.thirst.current to 100>>
<<run TimePassSeconds(3600*4,"sleep")>>
<<Image "locations/healthservives/plasticsurgeon/faceOperation.jpg">>
<p>The operation takes about 4 hours. You are put to sleep during this time, therefore you have no idea of what is happening.</p>
<div class="actions">
[[Continue|PlasticSurgeonFaceAfter]]
</div><<if $temp_OperationBotched === true>>
<<run delete $temp_OperationBotched>>
<<Image "locations/healthservives/plasticsurgeon/faceAfterBotched.jpg">>
<p>You wake up in a patient room. You feel a little confused, but the effect of the narcotics is quickly fading.</p>
<p>You don't have to wait long before the surgeon enters your room and gently unwraps the bandage around your head.</p>
<p>He apologizes to you and explains, that there where complications during the operation. Your face can now be considered <<print window.lang.face[$pc.body.face]>>.</p>
<<else>>
<<Image "locations/healthservives/plasticsurgeon/faceAfter.jpg">>
<p>You wake up in a patient room. You feel a little confused, but the effect of the narcotics is quickly fading.</p>
<p>You don't have to wait long before the surgeon enters your room and gently unwraps the bandage around your head.</p>
<p>He presents you with a mirror so that you can inspect your new face. Your face can now be considered <<print window.lang.face[$pc.body.face]>>.</p>
<</if>>
<div class="actions">
[[Leave|PlasticSurgeon]]
</div><<set $currentLocation to {
id: "Bookshop",
title:"Bookshop",
image: "locations/shop/booksInterior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/residential/residentialDay.jpg",
duration: 120,
destination:"Residential"
}
]
}>>
<<Location $currentLocation>>
<<set _inventoryProducts to [
{
id: "zwielicht_1"
}
]>>
<<InventoryShop _inventoryProducts>><<set $currentLocation to {
id: "Budget",
title:"Budget",
image: "locations/shop/budgetInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 60,
destination:"CityCenterMall",
image: "locations/citycenter/cityCanterMall1.jpg"
}
],
actions:[
/*{
target: "Shop",
label:"Shop (Bras)",
arguments:{
shopId:"BUD",
filter:{
type: "b"
}
}
},
{
target: "Shop",
label:"Shop (Panties)",
arguments:{
shopId:"BUD",
filter:{
type: "p"
}
}
},*/
{
target: "Shop",
label:"Shop (Dresses)",
arguments:{
shopId:"BUD",
filter:{
type: "c",
style:"dress"
}
}
},
{
target: "Shop",
label:"Shop (Pants)",
arguments:{
shopId:"BUD",
filter:{
type: "c",
style:"pants"
}
}
},
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:""
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "Cherie",
title:"Cherie",
image: "locations/shop/cherieInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 60,
destination:"CityCenterMall",
image: "locations/citycenter/cityCanterMall1.jpg"
}
],
actions:[
{
target: "Shop",
label:"Shop (Dress)",
arguments:{
shopId:"C",
filter:{
type: "c",
style:"dress"
}
}
},
{
target: "Shop",
label:"Shop (Shoes)",
arguments:{
shopId:"C",
filter:{
type: "s"
}
}
},
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:""
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "Engelen",
title:"Engelen",
image: "locations/shop/engelenInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 60,
destination:"CityCenterMall",
image: "locations/citycenter/cityCanterMall1.jpg"
}
],
actions:[
{
target: "Shop",
label:"Shop (Lingerie Sets)",
arguments:{
shopId:"EN",
filter:{
type: "u"
}
}
},
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:""
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "FN",
title:"FN",
image: "locations/shop/fnInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 60,
destination:"CityCenterMall",
image: "locations/citycenter/cityCanterMall1.jpg"
}
],
actions:[
{
target: "Shop",
label:"Shop (Dresses)",
arguments:{
shopId:"FN",
filter:{
type: "c",
style:"dress"
}
}
},
{
target: "Shop",
label:"Shop (Pants)",
arguments:{
shopId:"FN",
filter:{
type: "c",
style:"pants"
}
}
},
{
target: "Shop",
label:"Shop (Bras)",
arguments:{
shopId:"FN",
filter:{
type: "b"
}
}
},
{
target: "Shop",
label:"Shop (Panties)",
arguments:{
shopId:"FN",
filter:{
type: "p"
}
}
},
{
target: "Shop",
label:"Shop (Nighties)",
arguments:{
shopId:"FN",
filter:{
type: "ni"
}
}
},
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:"Forsberg and Nilsson is a Skandinavian clothing company headquartered in Copenhagen. It sells fast-fashion of reasonable quality for teenagers and young adults."
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "ResidentialKaeda",
title:"KAEDA",
image: "locations/shop/kaedaInterior.jpg",
conncetions:[
{
label:"Hygiene",
image:"locations/shop/kaedaHygiene.jpg",
duration: 30,
destination:"KaedaHygiene"
}
],
actions:[
]
}>>
<<run $currentLocation.conncetions.unshift({
label:"Leave",
image:"locations/residential/residentialDay.jpg",
duration: 120,
destination:"Residential"
})>>
<<Location $currentLocation>><<set $currentLocation to {
id: "KaedaHygiene",
title:"Hygiene Products",
image: "locations/shop/kaedaHygiene.jpg",
conncetions:[
{
label:"Groceries",
image:"locations/shop/kaedaInterior.jpg",
duration: 30,
destination:"ResidentialKaeda"
}
],
actions:[
]
}>>
<<Location $currentLocation>>
<<set _inventoryProducts to [
{
id: "hygiene",
count: 50,
price: 999
},
{
id: "makeup",
count: 50,
price: 1999
},
{
id: "razor",
count: 10,
price: 499
},
{
id: "sunblocker",
count: 50,
price: 799
}
]>>
<<InventoryShop _inventoryProducts>><<set $currentLocation to {
id: "Pharmacy",
title:"Pharmacy",
image: "locations/shop/pharmacyInterior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/residential/residentialDay.jpg",
duration: 120,
destination:"Residential"
}
]
}>>
<<Location $currentLocation>>
<div class="products">
<ul class="productList">
<li><<InventoryProduct "painkiller0" null null null 5 1990>></li>
<li><<InventoryProduct "antiAgingPills" null null null 20 4990>></li>
<li><<InventoryProduct "condom" null null null 20 1990>></li>
</ul>
<div id="productInfo">
</div>
</div><<set $currentLocation to {
id: "SchoeCentral",
title:"Schoe Central",
image: "locations/shop/scInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 60,
destination:"CityCenterMall",
image: "locations/citycenter/cityCanterMall1.jpg"
}
],
actions:[
{
target: "Shop",
label:"Shop (Sneakers)",
arguments:{
shopId:"SC",
filter:{
type: "s",
style:"sneakers"
}
}
},
{
target: "Shop",
label:"Shop (Boots)",
arguments:{
shopId:"SC",
filter:{
type: "s",
style:"boots"
}
}
},
{
target: "Shop",
label:"Shop (Pumps)",
arguments:{
shopId:"SC",
filter:{
type: "s",
style:"pumps"
}
}
},
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:""
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "SchoolTailor",
title:"Tailor",
image: "locations/shop/schoolInterior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/residential/residentialDay.jpg",
duration: 120,
destination:"Residential"
}
],
actions:[
{
target: "Shop",
label:"Shop",
arguments:{
shopId:"S"
}
}
],
description:"A small tailor shop that sells school uniforms."
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "SexShop",
title:"Sex Shop",
image: "locations/shop/sexInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 180,
destination:"Industrial",
image: "locations/industrial/industrialDay.jpg"
}
],
actions:[
{
target: "Shop",
label:"Shop (Dresses)",
arguments:{
shopId:"Sex",
filter:{
type: "c",
style:"dress"
}
}
},
{
target: "Shop",
label:"Shop (Shoes)",
arguments:{
shopId:"Sex",
filter:{
type: "s"
}
}
}
],
description:""
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "SportPalast",
title:"Sportpalast",
image: "locations/shop/spInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 60,
destination:"CityCenterMall",
image: "locations/citycenter/cityCanterMall1.jpg"
}
],
actions:[
{
target: "Shop",
label:"Shop (Swimwear)",
arguments:{
shopId:"sp",
filter:{
type: "sw"
}
}
},
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:""
}>>
<<Location $currentLocation>>
<<set _inventoryProducts to [
{
id: "waterbottle",
label: "Water bottle",
description: "Can be used as a water source when you are away from home.",
count: 1,
price: {either:3999}
},
{
id: "pepperSpray",
count: 1,
price: {either:4999}
}
]>>
<<InventoryShop _inventoryProducts>><<set $currentLocation to {
id: "VPC",
title:"Vanessa's Private Collection",
image: "locations/shop/vpcInterior.jpg",
conncetions:[
{
label:"Leave",
duration: 60,
destination:"CityCenterMall",
image: "locations/citycenter/cityCanterMall1.jpg"
}
],
actions:[
{
target: "Shop",
label:"Shop (Bras)",
arguments:{
shopId:"VPC",
filter:{
type: "bra"
}
}
},
{
target: "Shop",
label:"Shop (Panties)",
arguments:{
shopId:"VPC",
filter:{
type: "panties",
style: "panties"
}
}
},
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
barefeet: false,
coverage: "clothed"
}
}
}
],
description:""
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "Somewhere",
title:"Somewhere in Berlin",
image: {
sunrise: `locations/somewhere/dawn(${randomInt(0,1)}).jpg`,
day: `locations/somewhere/day(${randomInt(0,3)}).jpg`,
sunset: `locations/somewhere/dusk(${randomInt(0,2)}).jpg`,
night: `locations/somewhere/night(${randomInt(0,3)}).jpg`
},
outdoors: true,
public: true,
conncetions:[
{
label:"Subway",
image:"locations/somewhere/subway.jpg",
duration: 60,
destination:"SubwaySomewhere"
},
{
label:"Walk home",
image:"locations/somewhere/walkHome.jpg",
duration: 10800,
destination:$home
}
]
}>>
<<Location $currentLocation>><<set $currentLocation to {
id: "SubwayCityCenter",
title:"Subway",
image: "locations/subway/subway("+randomInt(0,8)+").jpg",
conncetions:[
{
label:"Leave",
image:"locations/citycenter/cityCenterDay0.jpg",
duration: 60,
destination:"CityCenter"
}
]
}>>
<<SubwayRender>><<set $currentLocation to {
id: "SubwayIndustrial",
title:"Subway",
image: "locations/subway/subway("+randomInt(0,8)+").jpg",
conncetions:[
{
label:"Leave",
image:"locations/industrial/industrialDay.jpg",
duration: 60,
destination:"Industrial"
}
]
}>>
<<SubwayRender>><<set $currentLocation to {
id: "SubwayResidential",
title:"Subway",
image: "locations/subway/subway("+randomInt(0,8)+").jpg",
conncetions:[
{
label:"Leave",
image:"locations/residential/residentialDay.jpg",
duration: 60,
destination:"Residential"
}
]
}>>
<<SubwayRender>><<set $currentLocation to {
id: "SubwaySomewhere",
title:"Subway",
image: "locations/subway/subway("+randomInt(0,8)+").jpg",
conncetions:[
{
label:"Leave",
image:"locations/subway/exit.jpg",
duration: 60,
destination:"Somewhere"
}
]
}>>
<<SubwayRender>><<set $currentLocation to {
id: "SubwayZoo",
title:"Subway",
image: "locations/subway/subway("+randomInt(0,8)+").jpg",
conncetions:[
{
label:"Leave",
image:"locations/zoo/plazaDay.jpg",
duration: 60,
destination:"ZooPlaza"
}
]
}>>
<<SubwayRender>><<widget "SubwayRender">>
<<SubwayInit>>
<<if !_subwayConnections>>
<<set _subwayConnections to []>>
<<set _subwayConnectionsTemp to [
{
label:"City Center",
duration: 2100,
destination:"SubwayCityCenter",
mode: "subway"
},
{
label:"Industrial",
duration: 2100,
destination:"SubwayIndustrial",
mode: "subway"
},
{
label:"Residential",
duration: 2100,
destination:"SubwayResidential",
mode: "subway"
},
{
label:"Zoo",
duration: 2100,
destination:"SubwayZoo",
mode: "subway"
}
]>>
<<for _i,_subwayConnection range _subwayConnectionsTemp>>
<<if _subwayConnection.destination != $currentLocation.id>>
<<set _subwayConnection.image to "locations/subway/subway("+randomInt(0,8)+").jpg">>
<<run _subwayConnections.push(_subwayConnection)>>
<</if>>
<</for>>
<</if>>
<<SubwayConnections _subwayConnections>>
<<set $currentLocation.conncetions to $currentLocation.conncetions.concat(_subwayConnections)>>
<<Location $currentLocation>>
<<SubwayOptions>>
<</widget>>
<<widget "SubwayConnections">>
<<set _subwayTicket to "NONE">>
<<if $pc.possessions.subway.timed !== null and $time.getTime() < $pc.possessions.subway.timed.getTime()>>
<<set _subwayTicket to "TIMED">>
<</if>>
<<for _i, _subwayConnection range _args[0]>>
<<if _subwayTicket == "NONE">>
<<set _subwayConnection.disabled to true>>
<<set _subwayConnection.tooltip to "You don't have a ticket.">>
<</if>>
<</for>>
<</widget>>
<<widget "SubwayInit">>
<<if $pc.possessions.subway === undefined>>
<<set $pc.possessions.subway to {
timed: null
}>>
<</if>>
<</widget>>
<<widget "SubwayOptions">>
<<if $pc.possessions.subway.timed !== null and $time.getTime() < $pc.possessions.subway.timed.getTime()>>
You have a ticket that is still valid for <<print int2time(($pc.possessions.subway.timed.getTime()-$time.getTime())/1000)>>.
<<else>>
<div class="actions">
<<SubwayOptionsTimedTicket "1-day" 1 1000>>
<<SubwayOptionsTimedTicket "3-days" 3 2500>>
<<SubwayOptionsTimedTicket "1-week" 7 5000>>
<<SubwayOptionsTimedTicket "1-month" 31 18000>>
<<SubwayOptionsTimedTicket "1-year" 365 150000>>
</div>
<</if>>
<</widget>>
<<widget "SubwayOptionsTimedTicket">>
<<set _time to _args[1]>>
<<set _price to _args[2]>>
<<set _linkText to "Buy "+_args[0]+" ticket ("+Money.format(_price)+")">>
<<if $pc.possessions.cash >= _price>>
<<capture _time,_price>>
<<link [[_linkText|$currentLocation.id]]>>
<<set $pc.possessions.subway.timed to TimeWithOffset(0,_args[1])>>
<<set $pc.possessions.cash -= _price>>
<</link>>
<</capture>>
<<else>>
<a class="disabled">_linkText<p class="disabledMessage">You don't have enough cash.</p></a>
<</if>>
<</widget>><<set $currentLocation to {
id: "Waterpark",
title:"Schwimmparadies",
image: "locations/waterpark/interior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/zoo/plazaDay.jpg",
duration: 600,
destination:"ZooPlaza",
outfit:{coverage:"clothed",barefeet:false}
}
],
description:"Schwimmparadies is the local waterpark. It is filled with people who are enjoying their time!",
actions:[
]
}>>
<<if $daily.waterParkTicket === true>>
<<WaterparkConnections>>
<<else>>
<<set $currentLocation.description += "<br/>You can buy a ticket to enter. In order to swim here you will need swimwear.">>
<</if>>
<<Location $currentLocation>>
<<Actions>>
<<if $daily.waterParkTicket !== true>>
<<ActionA "Buy a ticket" $currentLocation.id `{price:{cash:1990}}`>>
<<set $daily.waterParkTicket to true>>
<</ActionA>>
<<else>>
<<ActionA "Buy Swimwear" "Shop" `{arguments:{shopId:"SWIMPARK"}}`>>
<</ActionA>>
<</if>>
<</Actions>><<set $currentLocation to {
id: "WaterparkChanging",
title:"Changing Room",
image: "locations/waterpark/changing("+randomInt(0,1)+").jpg",
conncetions:[
],
description:"",
actions:[
{
target: "Wardrobe",
label:"Wardrobe",
arguments:{
outfitRequirement:{
coverage: ["clothed","swim"]
}
}
}
]
}>>
<<WaterparkConnections>>
<<Location $currentLocation>>
<<set _swimStyle = {coverage:"swim",barefeet:true}>>
<<run console.warn(Outfits.Current.style)>>
<<if !Outfits.Current.requirementFullfilled(_swimStyle).fullfilled>>
<<set _swimOutfit = Outfits.outfitByRequirement(_swimStyle)>>
<<if _swimOutfit>>
<<Actions>>
<<ActionA `"Put on outfit \""+_swimOutfit.id+"\""` "WaterparkChanging" `{girliness:{outfit:_swimOutfit.id,type:"outfit"}}`>>
<<run Outfits.equip(_swimOutfit.id)>>
<</ActionA>>
<</Actions>>
<</if>>
<</if>><<set $currentLocation to {
id: "WaterparkPool",
title:"Pool",
image: "locations/waterpark/pool.jpg",
conncetions:[
],
description:"",
actions:[
]
}>>
<<WaterparkConnections>>
<<Location $currentLocation>>
<<set _swimStyle = {coverage:"swim",barefeet:true}>>
<<Actions>>
<<ActionA "Swim" "WaterparkSwim" `{time: [300,900,1800,3600],outfit:_swimStyle}`>><</ActionA>>
<</Actions>><<set $currentLocation to {
id: "WaterparkSlides",
title:"Slides",
image: "locations/waterpark/slide.jpg",
conncetions:[
],
description:"",
actions:[
]
}>>
<<WaterparkConnections>>
<<Location $currentLocation>>
<<set _swimStyle = {coverage:"swim",barefeet:true}>>
<<Actions>>
<<ActionA "Slide" "WaterparkSlidesUse" `{time: [300,900,1800,3600],mood:{magnitude:1/120,type:"WPSlide"},outfit:_swimStyle}`}`>><</ActionA>>
<</Actions>><<run cleanBody()>>
<<Image `"locations/waterpark/sliding("+randomInt(0,1)+").jpg"`>>
<<set _description to "You climb up and slide down the water slides for "+ int2time($passageArguments.timeConsumed)+".">>
<p>_description</p>
<<Actions>>
<<BackC>>
<</Actions>><<set $currentLocation to {
id: "WaterparkSnacks",
title:"Snack Stand",
image: "locations/waterpark/snackStand.jpg",
conncetions:[
],
description:"The stand is currently closed",
actions:[
]
}>>
<<WaterparkConnections>>
<<Location $currentLocation>>
<<TODO>>
Open this thing
<</TODO>><<run cleanBody()>>
<<Image "locations/waterpark/swim.jpg">>
<<Actions>>
<<BackC>>
<</Actions>>
<<TODO>>
Make this a sport activity.
<</TODO>><<widget "WaterparkConnections">>
<<set _connections to [
{
label:"Leave",
image:"locations/waterpark/interior.jpg",
duration: 60,
destination:"Waterpark"
},
{
label:"Changing Room",
image:"locations/waterpark/changing(0).jpg",
duration: 60,
destination:"WaterparkChanging"
},
{
label:"Pool",
image:"locations/waterpark/poolEmpty.jpg",
duration: 60,
destination:"WaterparkPool"
},
{
label:"Slides",
image:"locations/waterpark/slide.jpg",
duration: 60,
destination:"WaterparkSlides"
},
{
label:"Snack Stand",
image:"locations/waterpark/snackStand.jpg",
duration: 60,
destination:"WaterparkSnacks"
}
]>>
<<for _i, _connection range _connections>>
<<if _connection.destination != $currentLocation.id>>
<<run $currentLocation.conncetions.push(_connection)>>
<</if>>
<</for>>
<</widget>><<set $currentLocation to {
id: "Hotel",
title:"Hotel",
image: "locations/hotel/hotelInterior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/zoo/plazaDay.jpg",
duration: 120,
destination:"ZooPlaza"
}
],
description:""
}>>
<<if !JobIsActive("hotelMaid")>>
<<set $currentLocation.description += "The hotel is always looking for minimum wage workers. During the office hours of the manager you could apply as a maid here.">>
<</if>>
<<set _roomRentedTil to getVar("hotel.room.rentedTil",new Date(0))>>
<<if TimeIsLater(_roomRentedTil)>>
<<set $currentLocation.description += "<br/>You rented a room til "+TimeFormat(_roomRentedTil,"DD.MM.YYYY hh:mm")+".">>
<<run $currentLocation.conncetions.push({
label:"Your room",
image:"locations/hotel/room_q2.jpg",
duration: 60,
destination:"HotelRoom",
noShoes: true,
type:"private"
})>>
<</if>>
<<Location $currentLocation>>
<div class="actions">
<<if JobIsActive("hotelMaid")>>
<<if $pc.job.hotelMaid.mode == "student">>
<<ActionA "Work as maid" "HotelMaidStart" `{times:{hours:{min:12,max:15}}}`>><</ActionA>>
<<ActionA "Work as maid" "HotelMaidStart" `{debug:true}`>><</ActionA>>
<</if>>
<<else>>
<<ActionA "Apply as maid" "HotelMaidApplyManager" `{times:{hours:{min:9,max:17}}}`>><</ActionA>>
<</if>>
[[Go to the reception|HotelReception]]
</div><<run TimePassSeconds(30)>>
<<if $time.getUTCHours() >= 6 and $time.getUTCHours() < 14>>
<<set _receptionist to "3">>
<<elseif $time.getUTCHours() >= 14 and $time.getUTCHours() < 22>>
<<set _receptionist to "2">>
<<else>>
<<set _receptionist to "1">>
<</if>>
<<Image `"locations/hotel/receptionist"+_receptionist+".jpg"`>>
<<if _receptionist == "1">>
<p>The receptionist who works here at night is a young woman wearing a red skirt and a white see-through white top.</p>
<p>She smiles at you and asks you what she can help you with.</p>
<<elseif _receptionist == "2">>
<p>The receptionist who works here on afternoons and in the evening is a young woman wearing a grey business outfit.</p>
<p>She smiles at you and asks you what she can help you with.</p>
<<elseif _receptionist == "3">>
<p>The receptionist who works here in the morning is woman in her 50s wearing a classy business outfit.</p>
<p>She smiles at you and asks you what she can help you with.</p>
<</if>>
<div class="actions">
<<set _roomRentedTil to getVar("hotel.room.rentedTil",new Date(0))>>
<<if !TimeIsLater(_roomRentedTil)>>
[[Rent a room|HotelReceptionRent]]
<</if>>
<<link [[Go back to the Lobby|Hotel]]>>
<<run TimePassSeconds(30)>>
<</link>>
</div><<set _pricePerNight = 8999>>
<<set _multiplier3Nights = 2.5>>
<<set _multiplier7Nights = 5>>
<<set _multiplier28Nights = 18>>
<<set _price1 to _pricePerNight>>
<<set _price3 to Math.round(_pricePerNight * _multiplier3Nights)>>
<<set _price7 to Math.round(_pricePerNight * _multiplier7Nights)>>
<<set _price28 to Math.round(_pricePerNight * _multiplier28Nights)>>
<<Image "locations/hotel/room_q2.jpg">>
<div class="actions">
<<ActionA "Rent for 1 night" "Hotel" `{priceCash:_price1}`>>
<<set _rentedTil to TimeWithOffset(0,1)>>
<<run _rentedTil.setUTCHours(12,0,0,0)>>
<<run setVar("hotel.room.rentedTil",_rentedTil)>>
<</ActionA>>
<<ActionA "Rent for 3 nights" "Hotel" `{priceCash:_price3}`>>
<<set _rentedTil to TimeWithOffset(0,3)>>
<<run _rentedTil.setUTCHours(12,0,0,0)>>
<<run setVar("hotel.room.rentedTil",_rentedTil)>>
<</ActionA>>
<<ActionA "Rent for 7 nights" "Hotel" `{priceCash:_price7}`>>
<<set _rentedTil to TimeWithOffset(0,7)>>
<<run _rentedTil.setUTCHours(12,0,0,0)>>
<<run setVar("hotel.room.rentedTil",_rentedTil)>>
<</ActionA>>
<<ActionA "Rent for 28 nights" "Hotel" `{priceCash:_price28}`>>
<<set _rentedTil to TimeWithOffset(0,28)>>
<<run _rentedTil.setUTCHours(12,0,0,0)>>
<<run setVar("hotel.room.rentedTil",_rentedTil)>>
<</ActionA>>
[[Back to the reception|HotelReception]]
</div><<set $currentLocation to {
id: "HotelRoom",
title:"Hotel Room",
image: "locations/hotel/room_q2.jpg",
conncetions:[
{
label:"Lobby",
image:"locations/hotel/hotelInterior.jpg",
duration: 60,
destination:"Hotel"
},
{
label:"Bathroom",
image:"locations/hotel/bath_q2.jpg",
duration: 10,
destination:"HotelBath",
noShoes: true,
type:"private"
}
],
description:"",
actions:[
{
target: "Wardrobe"
},
{
target: "Bed"
},
{
label: "Watch TV",
target: "TV",
arguments:{
tvQuality: 3
}
}
]
}>>
<<set _roomRentedTil to getVar("hotel.room.rentedTil",new Date(0))>>
<<if TimeIsLater(_roomRentedTil)>>
<<set $currentLocation.description += "You have rented this room til "+TimeFormat(_roomRentedTil,"DD.MM.YYYY hh:mm")+".">>
<<else>>
<<set $currentLocation.description += "You have to leave this room now.">>
<<set $currentLocation.actions = []>>
<</if>>
<<Location $currentLocation>><<set $currentLocation to {
id: "HotelBath",
title:"Hotel Room",
image: "locations/hotel/bath_q2.jpg",
conncetions:[
{
label:"Your room",
image:"locations/hotel/room_q2.jpg",
duration: 10,
destination:"HotelRoom",
noShoes: true,
type:"private"
}
],
actions:[]
}>>
<<include "BathActivites">>
<<Location $currentLocation>><<run TimePassSeconds(600)>>
<<set _disabledSchool = JobIsActive("school")>>
<<Image "locations/hotel/manager.jpg">>
<p>You ask about the maid job at the reception. The receptionist smiles at you and leads you to the office of the manager.</p>
<p>The manager is an attractive woman in her 30s wearing a business outfit. She asks you in and tells you to take a seat.</p>
She tells you that she would like to hire you as a maid and offers you three different options:
<ol>
<li><b>Weekdays</b>:You have to work from Monday to Friday each week. You have to work from 8:00 to 16:00 and you earn <<Money 1000>> each hour. You get 3 days vacation each month and your loan is transferred to you bank account at the first day of each month.
<<if _disabledSchool === true>>
<span style="color:red">You can't take this offer because you are still a student.</span>
<</if>>
</li>
<li><b>Weekends</b>:You have to work Saturday and Sunday each week. You have to work from 10:00 to 20:00 and you earn <<Money 1000>> each hour. You get 1 day vacation each month and your loan is transferred to you bank account at the first day of each month.
<<if _disabledSchool === true>>
<span style="color:red">You can't take this offer because you are still a student.</span>
<</if>>
</li>
<li><b>Student</b>:You can choose the days you want to work on spontaneously. You have to start working between 12:00 and 15:59 and work for 4 hours. You earn <<Money 800>> for each hour. You will be paid in cash.</li>
</ol>
<p>In any case the following rules have to be followed:</p>
<ul>
<li>You need to be wearing a maid outfit during work times. It will be provided to you in the changing rooms.</li>
<li>You can keep all tips.</li>
</ul>
<div class="actions">
<<link [["Become Student Maid"|HotelMaidApplyHired]]>>
<<set $pc.job.hotelMaid = {
loan: 800,
mode:"student",
started:Now()
}>>
<</link>>
[[Change your mind|Hotel]]
</div><<run TimePassSeconds(300)>>
<<Image "events/work/hired(0).jpg">>
You sign the contract the manager hands to you. Afterwards she smiles at you and welcomes you as the newest employee.
<div class="actions">
[[Go to lobby|Hotel]]
</div><<Image "events/work/maidLocker.jpg">>
<<set _jobDetails = $pc.job.hotelMaid>>
<<if !_jobDetails.workedDays>>
<<set _jobDetails.workedDays to 0>>
<p>
One of the other employees leads you to a locker room in the basement of the hotel.
She explains to you that the hotel doesn't have any uniform requirements beyond the uniform being reckognizable as such.
You could wear one of the comfortable outfits, but if you wear one of the sexy ones with high heels you might get extra tips.
</p>
<div style="height:300px" class="imageBox">
<<Image "events/work/maidDressDefault.jpg">>
<<Image "events/work/maidDressSexy.jpg">>
</div>
<</if>>
<<Actions>>
<<ActionA "Change into the comfortable outfit and start working" "HotelMaidWork">>
<<run Outfits.push()>>
<<set _jobDetails.outfit to "default">>
<<run Outfits.Current.wear("work/maidDressDefault")>>
<<run Outfits.Current.wear("work/maidShoes")>>
<</ActionA>>
<<ActionA "Change into the sexy outfit and start working" "HotelMaidWork" `{girliness:{item:"work/maidDressSexy"},painFeetSimulate:{time:4*3600,height:3,msg:"There is no way you could endure working in high heels for your entire work shift."}}`>>
<<run Outfits.push()>>
<<set _jobDetails.outfit to "sexy">>
<<run Outfits.Current.wear("work/maidDressSexy")>>
<<run Outfits.Current.wear("work/maidHeels")>>
<</ActionA>>
<<ActionA "Increase High Heels skill by 10" "HotelMaidStart" `{debug:true}`>>
<<run skillLevelInc("heels",10)>>
<</ActionA>>
<</Actions>><<set _workHours = 4>>
<<set _jobDetails = $pc.job.hotelMaid>>
<<set _jobDetails.workedDays += 1>>
<<set _loanCash to _jobDetails.loan * _workHours>>
<<run TimePassSeconds(_workHours * 3600)>>
<<run walkInShoesForSeconds(_workHours * 3600)>>
<<if _jobDetails.outfit == "sexy">>
<<Image `"events/work/maidWorkSexy("+randomInt(0,2)+").jpg"`>>
<<set _tips to randomInt(3,10)*500>>
You work for _workHours hours and earn <<Money _loanCash>> from the hotel and <<Money _tips>> in tips from guests.
Several times the guests gave you more tips because they were enticed by your outfit.
<<else>>
<<Image `"events/work/maidWorkDefault("+randomInt(0,4)+").jpg"`>>
<<set _tips to randomInt(1,3)*500>>
You work for _workHours hours and earn <<Money _loanCash>> from the hotel and <<Money _tips>> in tips from guests.
<</if>>
<<set $pc.possessions.cash += _loanCash + _tips>>
<<Actions>>
<<ActionA "Finish working" "Hotel">>
<<run Outfits.pop()>>
<</ActionA>>
<</Actions>><<set $currentLocation to {
id: "Nightclub",
title:"Nightclub",
image: "locations/hotel/hotelInterior.jpg",
conncetions:[
{
label:"Leave",
image:"locations/zoo/plazaDay.jpg",
duration: 120,
destination:"ZooPlaza"
}
],
description:"",
actions:[]
}>>
<<if $time.getUTCHours() >= 22 or $time.getUTCHours() < 1>>
<<set $currentLocation.description to "The line in front of the club is pretty long. Many people try to get in.">>
<<set $currentLocation.image to "events/nightclub/line.jpg">>
<<run $currentLocation.actions.push({
label: "Wait in line",
target: "NightclubLineWait",
stress: 10,
time: 900
})>>
<<run $currentLocation.actions.push({
label: "Buy a VIP ticket",
time: 60,
priceCash: 10000,
target: "NightclubEnter",
arguments:{nightclubVIP:true}
})>>
<<else>>
<<run $currentLocation.actions.push({
label: "Approach the bouncer",
target: "NightclubBouncer",
time: 30
})>>
<</if>>
<<Location $currentLocation>><<if ($time.getUTCHours() >= 22 or $time.getUTCHours() < 1) and randomInt(0,1) == 1>>
<<Image "events/nightclub/line.jpg">>
<p>The line moves a bit but you still won't get in.</p>
<<Actions>>
<<ActionA "Continue waiting" "NightclubLineWait" `{stress: 10, time: 900}`>><</ActionA>>
<<ActionA "Leave the line" "Nightclub">><</ActionA>>
<</Actions>>
<<else>>
<<goto "NightclubBouncer">>
<</if>><<set _passed to false>>
<<set _attractiveness to attractiveness()>>
<<Image "events/nightclub/bouncer.jpg">>
<p>You reach the bouncer.</p>
<p class="passageSpeak maleDominant">Good evening, Miss.</p>
<p>He looks you over.</p>
<<if _attractiveness >= 100>>
<<set _passed to true>>
<p class="passageSpeak maleDominant">You are 18, are you? Of course you are. Welcome.</p>
<<elseif _attractiveness >= 50>>
<<set _passed to true>>
<p class="passageSpeak maleDominant">May I see your ID, please?</p>
<p>You hand him your ID card and he inspects it briefly.</p>
<p class="passageSpeak maleDominant">Thank you. You may enter.</p>
<<else>>
<p class="passageSpeak maleDominant">Sorry, but I don't think you would fit into the concept of this place.</p>
<</if>>
<<Actions>>
<<if _passed === true>>
[[Go inside|NightclubEnter]]
<<else>>
<<ActionA "Bribe him" "NightclubEnter" `{priceCash: 5000}`>><</ActionA>>
[[Leave|Nightclub]]
<</if>>
<</Actions>><<set $currentLocation to {
id: "NightclubEnter",
title:"Nightclub",
image: "events/nightclub/enter.jpg",
conncetions:[{
label:"Leave",
image:"locations/zoo/plazaDay.jpg",
duration: 120,
destination:"ZooPlaza"
}],
description:"",
actions:[]
}>>
<<NightclubConnections>>
<<Location $currentLocation>><<set $currentLocation to {
id: "NightclubBar",
title:"Bar",
image: `events/nightclub/bar(${randomInt(0,4)}).jpg`,
conncetions:[],
description:"",
actions:[
{
"label":"Order a drink",
"target":"NightclubBarOrder"
}
]
}>>
<<NightclubConnections>>
<<Location $currentLocation>><<run setVar("currentRestaurant.offers",["beer","cocktailTS","wodkalemon","water"])>>
<<include "Restaurant">><<set $currentLocation to {
id: "NightclubDancefloor",
title:"Dancefloor",
image: `events/nightclub/dancefloor(${randomInt(0,3)}).jpg`,
conncetions:[],
description:"",
actions:[
{
label:"Dance",
target: "NightclubDancefloorDance",
time:1800,
timeMode:"dance",
painFeetDisable: true,
mood:{magnitude:1/60,type:"Dance"}
}
]
}>>
<<NightclubConnections>>
<<Location $currentLocation>><<set _imageFile to `events/nightclub/dance(${randomInt(0,3)}).jpg`>>
<<Image _imageFile>>
<<Actions>>
<<BackC>>
<</Actions>><<widget "NightclubConnections">>
<<set _connections to [
{
label:"Foyer",
image:"events/nightclub/enter.jpg",
duration: 30,
destination:"NightclubEnter"
},
{
label:"Dancefloor",
image:"events/nightclub/dancefloor(0).jpg",
duration: 30,
destination:"NightclubDancefloor"
},
{
label:"Bar",
image:"events/nightclub/barConnection.jpg",
duration: 30,
destination:"NightclubBar"
}
]>>
<<for _i, _connection range _connections>>
<<if _connection.destination != $currentLocation.id>>
<<run $currentLocation.conncetions.push(_connection)>>
<</if>>
<</for>>
<</widget>><<set $currentLocation to {
id: "ZooPlaza",
title:"Zoo Plaza",
image: {
day: "locations/zoo/plazaDay.jpg",
night: "locations/zoo/plazaNight.jpg"
},
outdoors: true,
public: true,
conncetions:[
{
label:"Subway",
image:"locations/subway/zoo.jpg",
duration: 60,
destination:"SubwayZoo"
},
{
label:"Hotel",
tooltip:"",
image:"locations/hotel/hotelExterior.jpg",
duration: 120,
destination:"Hotel"
},
{
label:"Kiosk",
tooltip:"",
image:"locations/kiosk/kiosk(0).jpg",
duration: 120,
destination:"Kiosk"
},
{
label:"Nightclub",
tooltip:"",
image:"locations/nightclub/entrance.jpg",
duration: 120,
destination:"Nightclub",
opentime:{
days:[0,5,6],
hourOpen: 22,
hourClose: 6
}
},
{
label:"Waterpark",
tooltip:"Walk to the waterpark.",
image:"locations/waterpark/interior.jpg",
duration: 600,
destination:"Waterpark",
opentime:{
hourOpen: 6,
hourClose: 20
}
}
]
}>>
<<Location $currentLocation>><<Dialog "NpcBrother" "Root" `{participants:{1:"brother"}}`>>
<<DialogLine 1>>Hello $pc.name.first.<</DialogLine>>
<<DialogTopic "Root">>
<<DialogOption "Ask him to allow you to use his PC" "AllowPC" null `{favorCost:{npc:"brother",cost:5}}`>>
<<DialogOption "Ask him to allow you to use his PC" "AllowPC" null `{debug:true}`>>
<<DialogOption "Chat with him" "Chat with him">>
<<DialogOption "Offer him assistance" "OfferAssistance">>
<<DialogOption "Bye" "END">>
<<DialogTopic "AllowPC" `{once:true}`>>
<<DialogLine 0>>May I use your PC? Please?<</DialogLine>>
<<DialogLine -1>>He hesitates for a few seconds.<</DialogLine>>
<<DialogLine 1>>Okay. But don't break anything. And don't look at my personal files.<</DialogLine>>
<<DialogLine -1>>He writes down the pin of his computer for you.<</DialogLine>>
<<run setVar("brother.knowPcPin",true)>>
<<DialogOption "Thank you" "Root" "#">>
<<DialogTopic "Chat with him">>
<<DialogOption "Talk about his love life" "LoveLife">>
<<DialogOption "Never mind" "Root">>
<<DialogTopic "LoveLife" `{oncePerConversation:true}`>>
<<DialogLine -1>>You ask him if there is somebody special in his life right now, but he evades the question. He doesn't seem to be comfortable discussing this matter with you.<</DialogLine>>
<<run TimePassSeconds(30)>>
<<DialogOption "Change the topic" "Root">>
<<DialogTopic "OfferAssistance">>
<<DialogLine 0>>Could I help you with something?<</DialogLine>>
<<set _carWashExp to NPCs.load("brother").get("assist.carwash.expires",new Date(0))>>
<<if TimeIsEarlier(_carWashExp)>>
<<DialogLine 1>>Actually there is something. You could clean my car for me.<</DialogLine>>
<<DialogOption "I will do it" "END:NpcBrotherCleanCar">>
<<DialogOption "Maybe another time" "Root" "#">>
<<else>>
<<DialogLine 1>>Not at the moment, but thanks for asking.<</DialogLine>>
<<DialogOption "Okay" "Root" "#">>
<</if>>
<</Dialog>><<run TimePassSeconds(3600)>>
<<run NPCs.load("brother").set("assist.carwash.expires",TimeWithOffset(0,7))>>
<<Image "events/family/brotherCarWash.jpg">>
<p>You take a sponge, cleaning products and a vacuum and start cleaning the car of your brother. It takes you about an hour to finish. Afterwards the car looks almost new.</p>
<p><<print NPCs.load("brother").nameUsed>> thanks you and hugs you.</p>
<<FavorEarned "brother" 1>>
<<Actions>>
[[Finish|ParentsOutside]]
<</Actions>><<Dialog "NpcFather" "Root" `{participants:{1:"father"}}`>>
<<DialogLine 1>>Hello my daughter.<</DialogLine>>
<<DialogTopic "Root">>
<<DialogOption "Ask for allowance" "Ask for allowance">>
<<DialogOption "Bye" "END">>
<<DialogTopic "Ask for allowance" `{oncePerConversation:true}`>>
<<DialogLine 0>>Dad, may I have my allowance?<</DialogLine>>
<<DialogLine 1>>You need to ask your mother. She handles these things.<</DialogLine>>
<<run TimePassSeconds(30)>>
<<DialogOption "Okay" "Root" "#">>
<</Dialog>><<set _npc to NPCs.load("mother")>>
<<Dialog "NpcMother" "Root" `{participants:{1:"mother"}}`>>
<<DialogLine 1>>Hello my daughter.<</DialogLine>>
<<DialogTopic "Root">>
<<DialogOption "Ask for allowance" "Ask for allowance">>
<<DialogOption "Ask for another school uniform" "Ask for another school uniform">>
<<DialogOption "Ask for new room decoration" "Ask for new room decoration">>
<<DialogOption "Bye" "END">>
<<DialogTopic "Ask for allowance">>
<<DialogLine 0>>Mum, may I have my allowance?<</DialogLine>>
<<if _npc.get("allowanceNext") is undefined or _npc.get("allowanceNext").getTime() <= $time.getTime()>>
<<set $pc.possessions.cash += 10000>>
<<run _npc.set("allowanceNext",BeginningOfMonth($time,1))>>
<<DialogLine 1>>Has it been one month again? Well, okay then.<</DialogLine>>
<<DialogLine -1>>She gets her purse and hands you <<Money 10000>>.<</DialogLine>>
<<run TimePassSeconds(90)>>
<<DialogOption "Thank you" "Root" "#">>
<<DialogOption "Ask for more money" "Ask for allowance+" null `{favorCost:{npc:"mother",cost:4}}`>>
<<else>>
<<DialogLine 1>>You allready got your allowance for this month. You need to wait for the next one.<</DialogLine>>
<<run TimePassSeconds(30)>>
<<DialogOption "Okay" "Root" "#">>
<<DialogOption "Ask for more money" "Ask for allowance+" null `{favorCost:{npc:"mother",cost:4}}`>>
<</if>>
<<DialogTopic "Ask for allowance+">>
<<set $pc.possessions.cash += 5000>>
<<DialogLine 0>>Could I have a little more, please? I really need that money.<</DialogLine>>
<<DialogLine 1>>$pc.name.first, you need to cope with the money you have. But I guess I could give you a little extra. This time. Just don't tell your siblings, okay?<</DialogLine>>
<<DialogLine -1>>She hands you <<Money 5000>>.<</DialogLine>>
<<run TimePassSeconds(90)>>
<<DialogOption "Thank you" "Root" "#">>
<<DialogTopic "Ask for another school uniform" `{once:true}`>>
<<DialogLine 0>>I don't feel comfortable wearing the uniform you bought me. May I have another one, please?<</DialogLine>>
<<DialogLine 1>>You don't like it? And I tried to buy you one I thought you would like. It is pretty similiar to the one you had in primary school, remember? You loved that one.<</DialogLine>>
<<DialogLine 0>>Sorry, but I'd really prefer wearing a different style. Maybe something with pants?<</DialogLine>>
<<DialogLine 1>>
Pants?! Really? Do you really want to stick out at your first day at school?
Well, I guess it wouldn't be against the rules. But you would have to buy it yourself.
With your own money. I won't buy you two dresses. There is a tailor who specializes in school uniforms in the residential area nearby.
Maybe you find what you're looking for there.
<</DialogLine>>
<<DialogOption "Okay" "Root" "#">>
<<DialogTopic "Ask for new room decoration" `{once:true}`>>
<<DialogLine 0>>I really don't like how my room looks right now. May I have some new furniture?<</DialogLine>>
<<DialogLine 1>>Sorry, $pc.name.first, but that's what you wished for, remember? If you want to redecorate, feel free to do so. But you have to pay it with your own money.<</DialogLine>>
<<DialogOption "Okay" "Root" "#">>
<</Dialog>><<Dialog "NpcMotherCall" "Root" `{participants:{1:"mother"}}`>>
<<if $time.getUTCHours() >= 22 or $time.getUTCHours() <= 5>>
<<DialogLine 1>>$pc.name.first? It is the middle of the night! Did something happen to you?<</DialogLine>>
<<elseif $daily.isSchoolDay == 1 and $time.getUTCHours() >= 8 and $time.getUTCHours() < 14>>
<<DialogLine 1>>$pc.name.first? Are you not to be supposed to be at school right now?<</DialogLine>>
<<else>>
<<DialogLine 1>>Hello $pc.name.first.<</DialogLine>>
<</if>>
<<DialogTopic "Root">>
<<DialogOption "Ask her to drive you home" "RequestPickup">>
<<DialogOption "Bye" "END">>
<<DialogTopic "RequestPickup" `{oncePerConversation:true}`>>
<<DialogLine 0>>Mum, could you please come here and bring me home?<</DialogLine>>
<<if $currentLocation.id.substring(0,7).toLowerCase() == "parents">>
<<DialogLine 1>>Is this a prank? I know for a fact that you are already home.<</DialogLine>>
<<DialogOption "Okay,sorry." "Root" "#">>
<<else>>
<<DialogLine 1>>Okay, just stay where you are. I'm on my way.<</DialogLine>>
<<DialogOption "Thank you" "END:NpcMotherPickup">>
<</if>>
<</Dialog>><<set _timePassed = distanceBetween($currentLocation.id,$home)>>
<<run TimePassSeconds(_timePassed)>>
<<Image `{day:"events/family/mumPickupDay.jpg",night:"events/family/mumPickupNight.jpg"}`>>
<p>Your mother arrive after about <<print int2time(_timePassed)>>. She tells you that she is glad that you are not harmed, right before she lectures you about her not being your personal TAXI. She afterwards drives you back home and you arrive there another <<print int2time(_timePassed)>> later.</p>
<<run TimePassSeconds(_timePassed)>>
<<Actions>>
[[Arrive at home|$home]]
<</Actions>><<Dialog "NpcSister" "Root" `{participants:{1:"sister"}}`>>
<<DialogLine 1>>Hello $pc.name.first.<</DialogLine>>
<<DialogTopic "Root">>
<<DialogOption "Chat with her" "Chat with her">>
<<if periodActive()>>
<<DialogOption "Ask her for some tampons" "Tampons" null `{favorCost:{npc:"sister",cost:1}}`>>
<</if>>
<<if $pc.experiences.includes("period")>>
<<DialogOption "Ask her for some advice concerning your period" "PeriodAdvice" null `{favorCost:{npc:"sister",cost:5}}`>>
<</if>>
<<DialogOption "Bye" "END">>
<<DialogTopic "Chat with her">>
<<DialogOption "Talk about the boys at school" "Boys">>
<<DialogOption "Never mind" "Root">>
<<DialogTopic "Boys" `{oncePerConversation:true}`>>
<<if $currentLocation.id == "ParentsKitchen">>
<<DialogLine -1>>You discretely ask her about the boys at her class. She redens a little, looks over to your mother and makes you understand, that she would like to discuss this matter with you, but not while your parents are in hearing distance.<</DialogLine>>
<<run TimePassSeconds(30)>>
<<DialogOption "Change the topic" "Root">>
<<else>>
<<DialogLine -1>>You make yourself comfortable while chatting with your sister about the boys at school. She is clearly fond a one specific boy but she doesn't mentions his name.<</DialogLine>>
<<run TimePassSeconds(1200)>>
<<DialogOption "Change the topic" "Root">>
<</if>>
<<DialogTopic "PeriodAdvice" `{once:true}`>>
<<run TimePassSeconds(1800)>>
<<run skillExperienceInc("cycle",500)>>
<<DialogLine 0>>Could you give me some tips? Concerning ... well, you know ... the period.<</DialogLine>>
<<DialogLine -1>>She looks at you in disbelieve.<</DialogLine>>
<<DialogLine 1>>Are you for real? You are <b>my</b> older sister. And an adult. You should be the one telling me everything about this topic. A few years ago.<</DialogLine>>
<<DialogLine 0>>Okay, forget that I asked.<</DialogLine>>
<<DialogLine 1>>No, come on. I see that this is important to you.<</DialogLine>>
<<DialogLine -1>>
The two of you sit down together and she tells you everything she knows. She still doesn't know why, but she is eager to help you.<br/>
Afterwards you feel that you know way more about your own body.
<</DialogLine>>
<<DialogOption "Thank you very much" "Root" "#">>
<<DialogTopic "Tampons" `{oncePerConversation:true}`>>
<<run inventoryInc("hygiene",20)>>
<<DialogLine 0>>Could you give me some tampons? Somehow I ran out of them.<</DialogLine>>
<<DialogLine 1>>Sure. I have a package in the bathroom that is half full. You can have it if you want.<</DialogLine>>
<<DialogOption "Thank you" "Root" "#">>
<</Dialog>><h2>Credits</h2>
<h3>Code</h3>
<ul>
<li>GermanWithSherman (GermanWithSherman@protonmail.com)</li>
</ul>
<h3>Story</h3>
<ul>
<li>GermanWithSherman (GermanWithSherman@protonmail.com)</li>
</ul>
<<Actions>>
[[Back|Start]]
<</Actions>><<set $characterCreation to {}>>
<h1>Character Creation</h1>
<div style="display: grid; grid-template-columns: auto 1fr">
<h2 style="grid-column-end: span 2;">Name</h2>
<p>First Name:</p>
<div>
<<textbox "$pc.name.first" $pc.name.first>>
<<button "Random">>
<<set $pc.name.first = names.female.random()>>
<<run $('#textbox-pcnamefirst').val(State.variables.pc.name.first)>>
<</button>>
</div>
<p>Last Name:</p>
<div>
<<textbox "$pc.name.last" $pc.name.last>>
<<button "Random">>
<<set $pc.name.last = names.last.random()>>
<<run $('#textbox-pcnamelast').val(State.variables.pc.name.last)>>
<</button>>
</div>
<h2 style="grid-column-end: span 2;">Structural</h2>
<p>Height:</p>
<div>
<<numberbox "$pc.body.height" $pc.body.height>> cm
<<button "very small">>
<<set $pc.body.height = 154>>
<<run $('#numberbox-pcbodyheight').val(State.variables.pc.body.height)>>
<</button>>
<<button "small">>
<<set $pc.body.height = 161>>
<<run $('#numberbox-pcbodyheight').val(State.variables.pc.body.height)>>
<</button>>
<<button "average">>
<<set $pc.body.height = 168>>
<<run $('#numberbox-pcbodyheight').val(State.variables.pc.body.height)>>
<</button>>
<<button "tall">>
<<set $pc.body.height = 175>>
<<run $('#numberbox-pcbodyheight').val(State.variables.pc.body.height)>>
<</button>>
<<button "very tall">>
<<set $pc.body.height = 182>>
<<run $('#numberbox-pcbodyheight').val(State.variables.pc.body.height)>>
<</button>>
</div>
<p>Weight:</p>
<div>
<<numberbox "$pc.body.weight" $pc.body.weight>> kg
<<button "underweight">>
<<set $pc.body.weight = 18 * $pc.body.height * $pc.body.height / 10000>>
<<run $('#numberbox-pcbodyweight').val(State.variables.pc.body.weight)>>
<</button>>
<<button "pleasingly slim">>
<<set $pc.body.weight = 19 * $pc.body.height * $pc.body.height / 10000>>
<<run $('#numberbox-pcbodyweight').val(State.variables.pc.body.weight)>>
<</button>>
<<button "healthy">>
<<set $pc.body.weight = 21 * $pc.body.height * $pc.body.height / 10000>>
<<run $('#numberbox-pcbodyweight').val(State.variables.pc.body.weight)>>
<</button>>
<<button "chubby">>
<<set $pc.body.weight = 24 * $pc.body.height * $pc.body.height / 10000>>
<<run $('#numberbox-pcbodyweight').val(State.variables.pc.body.weight)>>
<</button>>
<<button "overweight">>
<<set $pc.body.weight = 26 * $pc.body.height * $pc.body.height / 10000>>
<<run $('#numberbox-pcbodyweight').val(State.variables.pc.body.weight)>>
<</button>>
</div>
<h2 style="grid-column-end: span 2;">Head</h2>
<p>Image</p>
<a data-passage="CharacterCreationImageSelection"><<Image $pc.body.image>></a>
<p>Facial Attractiveness:</p>
<ul>
<li><label><<radiobutton "$pc.body.face" 3 autocheck>> Unsightly</label></li>
<li><label><<radiobutton "$pc.body.face" 4 autocheck>> Unattractive</label></li>
<li><label><<radiobutton "$pc.body.face" 5 autocheck>> Average</label></li>
<li><label><<radiobutton "$pc.body.face" 6 autocheck>> Attractive</label></li>
<li><label><<radiobutton "$pc.body.face" 7 autocheck>> Pretty</label></li>
</ul>
<p>Natural Hair Color:</p>
<ul>
<li><label><<radiobutton "$pc.body.hair.head.colorNatural" "black" autocheck>> Black</label></li>
<li><label><<radiobutton "$pc.body.hair.head.colorNatural" "blond" autocheck>> Blond</label></li>
<li><label><<radiobutton "$pc.body.hair.head.colorNatural" "brown" autocheck>> Brown</label></li>
<li><label><<radiobutton "$pc.body.hair.head.colorNatural" "red" autocheck>> Red</label></li>
</ul>
<h2 style="grid-column-end: span 2;">Upper Body</h2>
<p>Breast Size:</p>
<ul>
<li><label><<radiobutton "$pc.body.breast" 0 autocheck>> None</label></li>
<li><label><<radiobutton "$pc.body.breast" 1 autocheck>> A-Cup</label></li>
<li><label><<radiobutton "$pc.body.breast" 2 autocheck>> B-Cup</label></li>
<li><label><<radiobutton "$pc.body.breast" 3 autocheck>> C-Cup</label></li>
<li><label><<radiobutton "$pc.body.breast" 4 autocheck>> D-Cup</label></li>
</ul>
/%<h2 style="grid-column-end: span 2;">Lower Body</h2>%/
<h2 style="grid-column-end: span 2;">Mind</h2>
<p>Crossdresser:</p>
<p>
<<checkbox "$settings.disableGirliness" false true autocheck>>
You were a crossdresser before the current happenings.
You don't have any problem with adopting to your new reality of being a girl.
This won't change most of the written content of the game, but it disables the girliness-progression.
All activities are unlocked right from the start.
You can change this setting later, but while it is turned on you won't get any girlier.
</p>
<h2 style="grid-column-end: span 2;">Sexuality</h2>
<p style="grid-column-end: span 2;">
The following settings influence what kind of situations and activities increase your horniness.
</p>
<p>Kinsey scale:</p>
<ul>
<li><label><<radiobutton "$pc.sexuality.kinsey" 0 autocheck>> 0: Only sexually interested in women.</label></li>
<li><label><<radiobutton "$pc.sexuality.kinsey" 1 autocheck>> 1: Predominantly sexually interested in women, only incidentally interested in men.</label></li>
<li><label><<radiobutton "$pc.sexuality.kinsey" 2 autocheck>> 2: Predominantly sexually interested in women, more than incidentally interested in men.</label></li>
<li><label><<radiobutton "$pc.sexuality.kinsey" 3 autocheck>> 3: Equally sexually interested in women and men.</label></li>
<li><label><<radiobutton "$pc.sexuality.kinsey" 4 autocheck>> 4: Predominantly sexually interested in men, more than incidentally interested in women.</label></li>
<li><label><<radiobutton "$pc.sexuality.kinsey" 5 autocheck>> 5: Predominantly sexually interested in men, only incidentally interested in women.</label></li>
<li><label><<radiobutton "$pc.sexuality.kinsey" 6 autocheck>> 6: Only sexually interested in men.</label></li>
</ul>
<p>
Fluid sexuality:
</p>
<p>
<<checkbox "$pc.sexuality.fluid" false true autocheck>>
Your sexuality is fluid.
Getting exposed to heterosexual or gay content will increase your attraction to men.
Getting exposed to lesbian content will increase your attraction to women.
</p>
</div>
<hr/>
<<Actions>>
<<link [[Confirm|$returnEvent]]>>
<<run delete $characterCreation>>
<<run initializeFinalize()>>
<</link>>
<</Actions>><<if $pc.isAdopted === true>>
<p>The character has been adopted as an infant. All portraits are unlocked and intercourse with any family member won't be considered incesteous.</p>
<<else>>
<p>The character is the natural born child of her legal parents. Intercourse with any family member will be considered incesteous.</p>
<<if $characterCreation.allPortraitsUnlocked === true>>
<p>Nobody knows how exactly this happend, but there is only little family resemblance with the other members of your family. This won't be mentioned in game. ALL portraits are unlocked.</p>
<<else>>
<p>Due to the family resemblance with the other members of your family some portraits are locked.</p>
<</if>>
<</if>>
<<Actions>>
<<if !$pc.isAdopted>>
<<ActionA "Adopted" "CharacterCreationImageSelection">><<set $pc.isAdopted to true>><</ActionA>>
<</if>>
<<if $pc.isAdopted === true or $characterCreation.allPortraitsUnlocked === true>>
<<ActionA "Not adopted (disable additional images)" "CharacterCreationImageSelection">>
<<run delete $pc.isAdopted>>
<<set $characterCreation.allPortraitsUnlocked to false>>
<</ActionA>>
<</if>>
<<if $pc.isAdopted === true or !$characterCreation.allPortraitsUnlocked>>
<<ActionA "Not adopted (enable additional images)" "CharacterCreationImageSelection">>
<<run delete $pc.isAdopted>>
<<set $characterCreation.allPortraitsUnlocked to true>>
<</ActionA>>
<</if>>
[[Cutom Image|CharacterCreationImageCustom]]
<</Actions>>
<<for _i to 0; _i <= 9; _i++>>
<<set _imagePath = "pc/portrait/p("+_i+").jpg">>
<<set _onclick=function(imagepath){State.variables.pc.body.image = imagepath;}>>
<<Image _imagePath "CharacterCreation" _onclick _imagePath>>
<</for>>
<<if $pc.isAdopted === true or $characterCreation.allPortraitsUnlocked === true>>
<<for _i to 0; _i <= 4; _i++>>
<<set _imagePath = "pc/portrait/adopted/p("+_i+").jpg">>
<<set _onclick=function(imagepath){State.variables.pc.body.image = imagepath;}>>
<<Image _imagePath "CharacterCreation" _onclick _imagePath>>
<</for>>
<</if>><h2>Custom Character Portrait</h2>
<ol>
<li>Create a JPG-file with a resolution of 500x500.</li>
<li>Save the file as "pc.jpg" in your media-folder (the same location where imageMissing.jpg and underConstruction.jpg are).</li>
<li>Refresh this page (for example by hitting F5). You should see your portrait below.</li>
<li>Choose whether your character is adopted. Intercourse with any family member won't be considered incesteous if the chracter is adopted.</li>
</ol>
<<set _imagePath = "pc.jpg">>
<<set _onclick=function(imagepath){State.variables.pc.body.image = imagepath;}>>
<<Image "pc.jpg">>
<<Actions>>
<<ActionA "Confirm (not adopted)" "CharacterCreation">>
<<set $pc.body.image = "pc.jpg">>
<<run delete $pc.isAdopted>>
<</ActionA>>
<<ActionA "Confirm (adopted)" "CharacterCreation">>
<<set $pc.body.image = "pc.jpg">>
<<set $pc.isAdopted to true>>
<</ActionA>>
<</Actions>><<Image "start/newchance/drink.jpg">>
<p>
Bachelor party! One of your childhood friends gets married next week and tonight is his bachelor party.
The boys - at least that's how you still think of each other after all this time - meet up downtown in front of the bar where you spent so much time in your youth.
Along for the ride are the future groom, his brother and best man, your best friend, three other mutual friends, two guys the groom knows from work, and you.
</p>
<p>
The evening starts with a few beers.
Then the best man makes a toast, accompanied by a round of Scottish whiskey.
Then somebody else makes a toast. And more beer. Another toast.
And more alcohol. Then it is your turn. At this point, it is more about the camaraderie of drinking together than about the words.
</p>
<p>
The rest of the night is a blur. After the bar, you head to the club where you and the guys failed hilariously at picking up women way too many times to count.
Then comes the strip club. Maybe a little vulgar, but who would argue with traditions?
The party ends at 4 am. It was a great night and you hope that you will remember most of it tomorrow. And that you won't make a fool of yourself by falling over your own feet.
One of your friends will drive you home. He is sober. At least he claims so much.
</p>
<div class="actions">
[[Call Shotgun|IntroNewChanceDrive]]
</div><<Image "start/newchance/accident.jpg">>
<p>You take your seat as the co-driver. After playing a bit with the radio dials you turn on your favorite music and you, the driver, and the two guys on the back seat are on your way.</p>
<p>You don't know how much time has passed? You must have passed out, because a sudden noise of squeaking tires, a flash of light make you wide awake.</p>
<p>A car heading right for the car you are sitting in. A crash. A sudden pain. The events unfold too fast to comprehend them. The last thing is an incredible pain in your torso. Then there is only darkness.</p>
<div class="actions">
[[...|IntroNewChanceMorgue]]
</div><<Image "start/newchance/morgue.jpg">>
<p>
You open your eyes. At least you think you do. It doesn't really feel like it.
You take a look around. Steel doors. Apparently, you are in a morgue. Has anybody died? Why are you here?
</p>
<p>
There is a body lying on a slab.
You take a look at it. And you can't believe what you are seeing. Lying on the slab is your body!
Has the crash killed you? You call out for help... but you realize that you don't have a voice.
And now you realize that you don't have hands, feet, or, for that matter, a body either.
</p>
<p>
It takes some time for you to process the events... you really are dead. But why are you still here? Is there no afterlife? Clearly there isn't nothing.
Then you feel it. At first, it doesn't surprise you, but then you realize that you should not be feeling something without a body: a pull at your chest. You wonder whether you should resist, but then the pull gets way too strong anyways.
</p>
<div class="actions">
[[Get pulled|IntroNewChanceSuccubusMeeting]]
</div><<Image "start/newchance/succubus_0.jpg">>
<p>You suddenly find yourself in a big hall, richly decorated in red and golden colors.</p>
<p>On a throne in front of you, maybe 3m away, sits a dark-haired woman.</p>
<p><<Say "succubus">>Hello, lost soul. Fear not, for I don't wish to do you any harm.<</Say>></p>
<p>She speaks with a soft melodic voice. It sounds as if she tries to lure you.</p>
<div class="actions">
[[Who are you?|IntroNewChanceSuccubusIntro]]
</div><<Image "start/newchance/succubus_1.jpg">>
<p><<Say "succubus">>
My name does not matter. The only thing that matters is the reason why we are meeting.
You died. And way too young, may I add. But that you already know.
I am an entity that deals with souls. And I make things happen if I get offered a decent price.
One of your friends seems to feel responsible for your death. He offered his soul if only you could be alive again.
Surely he didn't know that he entered a binding agreement by saying these words. But he did nevertheless.
<</Say>></p>
<div class="actions">
[[What does that mean?|IntroNewChanceSuccubusDecision]]
</div><<Image "start/newchance/succubus_2.jpg">>
<p><<Say "succubus">>Well, I can't just snap my fingers and you rise from the dead. That's not how this works.<</Say>></p>
<p><<Say "succubus">>There are many planes of existence. And I can't revive you on one where you have died. But I can exchange your soul with another one I own from another plane.<</Say>></p>
<p><<Say "succubus">>This would come to no risk for you. You would keep your soul. But I would get possession of your friends' soul.<</Say>></p>
<p><<Say "succubus">>And of course, you would have to learn to live a new life in a world that is somewhat alien to you.<</Say>></p>
<p><<Say "succubus">>The other option is to just accept the end. But I would discourage you from doing so. From all I know about you, you won't make it to a nice afterlife.<</Say>></p>
<div class="actions">
[[Choose New life|IntroNewChanceTransfer]]
[[Choose Afterlife|IntroNewChanceHeaven]]
</div><<Image "start/newchance/death.jpg">>
<p>The woman must have lied to you because right after you decided to reject her offer you got transported to a place of peace and tranquility.</p>
<p>Your beloved older family members, who died before you, are around you and you experience eternity in everlasting bliss.</p>
<<ENDING "WON" "You won">><<Image "start/newchance/transfer.jpg">>
<p>
Right after you made your decision to accept the proposal you feel this pull again. Now you are sure that it is actually your soul being transported.
It seems as if you are flying through a tunnel. Colors, sounds, smells are flying by you just the same as thoughts, emotions and memories.
You feel like floating for an eternity. But at the same time you feel like no time has passed when you see a bright spot at the end of the tunnel.
It grows larger in size as you approach rapidly.
As you touch it you suddenly wake up.
</p>
<div class="actions">
[[Open your Eyes|IntroNewChanceWakingUp]]
</div><div id="mainStory">
<p>
Something isn't right. You feel an unfamiliar weight on your chest. You reach down there to find out what's there.
It's two soft balls resting on your chest. And what's even weirder is, that you don't only feel their touch on your hands. You feel them being touched as well!
You squeeze a little and sure enough, they are a part of your body!
What has happened here? What other changes happened to you?!
</p>
</div>
<div class="actions" id="mainStoryActions">
<<link "Inspect your private area">>
<<set $returnEvent = "IntroNewChanceMemories">>
<<append "#mainStory">>
<<Image "start/newchance/inspect.jpg">>
<p>
You reach down there ... and nothing! Your male pride has vanished! Your penis is gone!
</p>
<p>
But not only that. You feel something else. Something wet. It actually feels pretty nice touching it.
And then you realize it.You have a vagina now!
Another touch and yes, it seems to be very much functional!
</p>
<p>
You take a look around and see a mirror nearby.
</p>
<</append>>
<<replace "#mainStoryActions">>
<<link [[Inspect yourself in the mirror (character customization)|CharacterCreation]]>><<script>>initializeCharacter();<</script>><</link>>
<</replace>>
<</link>>
</div><div id="mainStory">
<p>
What a weird turn of events. Did this demon lady make a mistake by sending you here? Could you appeal this decision?
Or is this your life now? At least you are way younger than before.
</p>
<p>
You step away from the mirror.
As you do so your memories flash through your head. They must be memories of the girl who owned this body you know inhabit.
</p>
</div>
<div class="actions" id="mainStoryActions">
<<link "Remember">>
/%<<run $eventsPending.push({
destination: "IntroNewChanceFirstDream",
type: "sleepDream",
priority: 1000
})>>%/
<<append "#mainStory">>
<<Image "start/newchance/family.jpg">>
<p>
She ... (or rather you?) ... seems to have a loving family. She (you?) is living with her parents, her older brother, and her younger sister.
You (wait, her?) recently moved to a new house. You (no, wait...) still have summer vacations, but they will end soon. Afterward, you (...) will have to visit the school for your final year.
</p>
<p>
There are also some other memories, but it is hard for you to make sense of them right now.
You decide to ignore them for now and inspect your surroundings.
</p>
<</append>>
<<replace "#mainStoryActions">>
<<link [[Inspect your room|IntroNewChancePlayerRoomFirst]]>><</link>>
<</replace>>
<</link>>
</div><h2>Your room</h2>
<<Image `"locations/home/room_pc_"+$actions.home.pcBedroom.style+"("+$actions.home.pcBedroom.styleNumber+").jpg"`>>
<p>
So this is the room of your new you?
Pink roses on a white desk, pink wallpaper, pink fabric on the bed... this is very girl.
Too girly for your taste.
</p>
<p>
Do you have to live here? Maybe for the next few days.
Wait, no. You are an 18 years old girl with next to zero savings, for all you know. Moving out would be way too expensive.
Perhaps you could at least ask your new parents for a new decoration. Something a little less like the home of a pink princess?
</p>
<p>
Okay, lets ask them now. You reach for the door... and then you realize that you are still naked.
Better put on some clothes first.
</p>
<<Actions>>
[[Get dressed|IntroNewChanceDress]]
<</Actions>><<run TimePassSeconds(30)>>
<<Image "start/newchance/wardrobe.jpg">>
<p>
You open the wardrobe.
It's pretty empty. Apparently, the girl whose body you possess now as taken the opportunity when she moved here to toss all her old clothes. To make matters worse, most of the outfits you see in here are way too girly for your taste.
You see a pair of sneakers. Then some pants and a pullover. This should do for now. You contemplate putting on a bra and panties as well, but this would just feel too weird.
</p>
<<Actions>>
<<ActionA "Put androgynous outfit on" "IntroNewChancePlayerRoomDressed">>
<<run TimePassSeconds(120)>>
<</ActionA>>
<</Actions>><<set $currentLocation to {
id: "IntroNewChancePlayerRoomDressed",
title:"Your Room",
type:"home",
conncetions:[
{
label:"Leave",
image:"locations/home/hallway_day.jpg",
duration: 10,
destination:"IntroNewChanceMum",
noShoes: true,
type:"private"
}
],
image: "locations/home/room_pc_"+$actions.home.pcBedroom.style+"("+$actions.home.pcBedroom.styleNumber+").jpg",
description: "So far so good. There is no time like the present. You should leave this room of yours now and speak to your 'parents'."
}>>
<<Location $currentLocation>><<set _npc to NPCs.load("mother")>>
<<Dialog "IntroNewChanceMum" "Start" `{participants:{1:"mother"}}`>>
<<DialogTopic "Start">>
<<DialogLine -1>>Right after you open the door to your new room, you get approached by a middle-aged woman. You recognize her as your new mother.<</DialogLine>>
<<DialogLine 1>>
Good morning $pc.name.first, I was hoping that you were awake already. I have something to talk about with you.
<</DialogLine>>
<<DialogOption "Good morning" "Uniform" "#">>
<<DialogOption "I am not your daughter" "NotDaughter" "#">>
<<DialogTopic "NotDaughter" `{once:true}`>>
<<if $pc.isAdopted === true>>
<<DialogLine 1>>
I really don't know why you bring this up right now. We have been over this several times.
You know that your father and I love your regardless of who your birth-parents are.
<</DialogLine>>
<<else>>
<<DialogLine 1>>
And I am not your mother? What are we playing here?
<</DialogLine>>
<</if>>
<<DialogOption "Seriously" "NotDaughterSeriously">>
<<DialogOption "Nevermind" "Uniform" "#">>
<<DialogTopic "NotDaughterSeriously" `{once:true}`>>
<<DialogLine 0>>
No, I am serious! I really am a man. And I died. But then I became your daughter...
<</DialogLine>>
<<DialogLine 1>>
Enough of this nonsense! There is something we have to talk about.
<</DialogLine>>
<<DialogLine 0>>
But...
<</DialogLine>>
<<DialogLine 1>>
No butts!
<</DialogLine>>
<<DialogOption "Okay" "Uniform" "#">>
<<DialogTopic "Uniform">>
<<DialogLine 1>>
Well, you know that the summer vacations are almost over and school starts soon again.
I am sure that you fit right in at your new school. And I have a little surprise for you.
<</DialogLine>>
<<DialogLine -1>>
She hands you a package that was lying on a dresser.
<</DialogLine>>
<<DialogLine 1>>
This is your new school uniform. I hope you like it.
Try it out if you like. But hurry. Breakfast is almost over.
<</DialogLine>>
<<DialogLine -1>>
She gives you a kiss on the head and walks to the kitchen.
<</DialogLine>>
<<DialogOption "Inspect Uniform" "END:IntroNewChanceUniform" "#">>
<</Dialog>><<Image "events/firsttime/schoolUniform.jpg">>
<p>
You unpack the package your mother handed you.
And it's just like you expected: it's a girl's uniform. Of course, it is.
There is a skirt and a blouse, a jacket in a female cut.
Do you really want to wear this to school? It is so girly.
</p>
<<Actions>>
[[Put it in the wardrobe for now|ParentsPlayerRoom]]
<</Actions>>/% Disable til actual content is here %/
<<goto "Sleep">>
/% Will be triggered the first time the PC sleeps. %/
<div id="mainStory" class="fadeout" style="--duration:5s">
What a weird day... you slowly drift to sleep.
</div>
<<timed 6s>>
<<replace "#mainStory" t8n>>
<<goto "IntroNewChanceFirstDream2">>
<</replace>>
<</timed>><<Image "start/newchance/succubus_2.jpg">>
ContentPending<hr/>
<<Actions>>
[[Sleep]]
<</Actions>><<run initializeCharacter()>>
<<run initializeFinalize()>>
/%<<run $eventsPending.push({
destination: "IntroNewChanceFirstDream",
type: "sleepDream",
priority: 1000
})>>%/
<<goto "ParentsPlayerRoom">><<include "Quickstart">>
<<set $settings.showDebugActions to true>>
<<set $settings.showTodo to true>><section id="mainStory">
<h1><<print Story.title>></h1>
<div class="disclaimer">
<<linkreplace "Show Disclaimer">>
<p>This game is aimed at an adult audience. It must not be played by, shown to, or made available to anybody who has not reached legal adulthood.</p>
<p>This game contains scenes and adult topics not all audiences are comfortable with, such as feminization, BDSM, rape, sexual slavery, homo- and transsexual intercourse. It is your responsibility to ensure that you are legally permitted to consume content like this. You must not play this game if you are not comfortable with extreme sexual content.</p>
<p>It is strictly forbidden to alter the game code or data to enable content that is outlawed by German federal law or by the law applicable at your place.</p>
<p>The story, all names, characters, and incidents portrayed in this production are fictitious. No identification with actual persons (living or deceased), places, buildings, and products is intended or should be inferred.</p>
<p>No person or entity associated with this game received payment or anything of value, or entered into any agreement, in connection with the depiction of tobacco products.</p>
<p>The software is expressly provided “AS IS.” WE MAKE NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED, IN FACT OR ARISING BY OPERATION OF LAW, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT AND DATA ACCURACY. WE NEITHER REPRESENT NOR WARRANT THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT ANY DEFECTS WILL BE CORRECTED. WE DO NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF THE SOFTWARE OR THE RESULTS THEREOF, INCLUDING BUT NOT LIMITED TO THE CORRECTNESS, ACCURACY, RELIABILITY, OR USEFULNESS OF THE SOFTWARE.
You are solely responsible for determining the appropriateness of using and distributing the software and you assume all risks associated with its use, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and the unavailability or interruption of operation. This software is not intended to be used in any situation where a failure could cause risk of injury or damage to property.
</p>
<</linkreplace>>
<hr/>
<p style="font-size: 2em; font-weight: bold;">Under Construction</p>
<<Image "underConstruction.jpg">>
<p>The game is in a very early development state. Expect incomplete features, major changes, and incompatible savegames without announcements.</p>
</div>
<<Actions>>
<<link '<b style="font-size:1.5em;">Confirm</b><br/><i>I am a legal adult and I read, understand, and accept the disclaimer.</i>' "StorySelection">><</link>>
[[About]]
<</Actions>>
</section><h1>Select your story</h1>
<div id="storyOptions">
<a data-passage="IntroNewChance">
<h2>New Chance</h2>
<p>After a tragic turn of events you wake up in a new body, a new world and an entirely new life.</p>
</a>
<<link "<h2>Skip Intro</h2><p>Jump right to the character-customization.</p>" "CharacterCreation">>
<<set $returnEvent = "ParentsPlayerRoom">>
<<script>>initializeCharacter();<</script>>
<</link>>
<<link "<h2>Quickstart</h2><p>Skip the intro and the character-customization.</p>" "Quickstart">><</link>>
<a data-passage="QuickstartDebug">
<h2>Quickstart (Debug)</h2>
<p>Quickstart with debug-options enabled.</p>
</a>
</div><<if $initialized is true>>
<<set _distress to statState("distress")>>
<<if _distress > 0>>
<<addclass "body" `"distress"+_distress`>>
<</if>>
<<if $pc.body.intoxicated === true>>
<<addclass ".passage" "intoxicated">>
<</if>>
<<if $notifications.length > 0>>
<<prepend ".passage">><div class="notifications"><<for _i, _notification range $notifications>><p @class="_notification.severity">_notification.message</p><</for>></div><</prepend>>
<<set $notifications to []>>
<</if>>
<</if>><div id="uihelp">
<div id="uihelp-label">?</div>
<div id="uihelp-contents">
<<print mood2string(10,"stressInc")>> Reduces your mood if you're doing something exhausting or inappropriate.<br/>
<<print mood2string(10,"stressInc girliness")>> Reduces your mood if you're doing something that is too girly or too slutty for your taste. This effect is reduced for similar consecutive activities on the same day.<br/>
<<print mood2string(10,"stressInc manlyness")>> Reduces your mood if you're doing something that is too manly for your taste. This effect is reduced for similar consecutive activities on the same day.<br/>
<<print mood2string(10,"stressInc sexOrientation")>> Reduces your mood if you're doing something that opposes your sexual orientation. This effect is reduced for similar consecutive activities on the same day.<br/>
<<print mood2string(10,"stressInc disabledStress")>> This mood effect has been disabled temporarily by a previous action.<br/>
<<print mood2string(10,"moodInc")>> Increases your mood. This effect is reduced for similar consecutive activities on the next days.<br/>
</div>
</div><<if $initialized is true>>
<<run DateMissedMessageSend()>>
<<run statEffectsUpdate()>>
<<set $displayMode to "NONE">>
/% Drink from water bottle if thirsty %/
<<if statState("thirst") >= 3 && Inventory.load("waterbottle").count > 0 && getVar("waterbottle.autodrink",false) == true && getVar("waterbottle.water",0) > 0>>
<<run notify("You drank the water from your water bottle.")>>
<<run Body.consume("water")>>
<<run setVar("waterbottle.water",0)>>
<</if>>
/% Eat sandwich %/
<<if statState("hunger") >= 3 && Inventory.load("sandwich").count > 0 && getVar("sandwich.autoeat",false) == true>>
<<run notify("You ate your sandwich.")>>
<<run Body.consume("sandwich")>>
<<set Inventory.load("sandwich").count -= 1>>
<</if>>
<</if>><<if !$sidebarDisabled>>
<<if $initialized === true>>
<<set _display to {
sun:true,
stats:true,
time:true,
money:true}>>
<<if $displayMode == "EVENT">>
<<set _display to {
"debug":$settings.showDebugActions,
"help":true,
"settings":true,
sun:true,
stats:true,
time:true,
money:true
}>>
<<elseif $displayMode == "LOCATION">>
<<set _display to {
"debug":$settings.showDebugActions,
"help":true,
"phone":true,
"purse": true,
"settings":true,
"skills":true,
"scheduler":true,
sun:true,
stats:true,
time:true,
money:true
}>>
<<elseif $displayMode == "SUN_ONLY">>
<<set _display to {
"debug":false,
sun:true
}>>
<</if>>
<<if _display.sun === true>>
<<include "SVG_SUN">>
<</if>>
<<if periodActive() == true>>
<p class="period">You are having your period.</p>
<<elseif periodWarningActive() == true>>
<p class="periodWarning">You will have your period soon.</p>
<</if>>
<<if _display.time === true>>
<<if $daily.isSchoolDay == 1>>
<p>School Day</p>
<</if>>
<p id="currentTime"><span class="time"><<print TimeFormat($time,"hh:mm:ss")>></span><span class="date"><<print TimeFormat($time,"ddd DD.MM.YYYY")>></span></p>
<</if>>
<<if _display.money === true>>
<<Money $pc.possessions.cash>>
<</if>>
<<if _display.stats === true>>
<div id="pcStats">
<<set _hunger to statState("hunger")>>
<p @data-tool-tip="roundTo($pc.stats.hunger.current,2)">Hunger:
<<switch _hunger>>
<<case 0>>
<span class="perfect">well-fed</span>
<<case 1>>
<span class="good">minor appetite</span>
<<case 2>>
<span class="okay">appetite</span>
<<case 3>>
<span class="problem">hunger</span>
<<case 4>>
<span class="critical">critical hunger</span>
<<case 5>>
<span class="dying">starving</span>
<</switch>>
</p>
<<set _thirst to statState("thirst")>>
<p @data-tool-tip="roundTo($pc.stats.thirst.current,2)">Thirst:
<<switch _thirst>>
<<case 5>>
<span class="dying">dying of thirst</span>
<<case 4>>
<span class="critical">critical thirst</span>
<<case 3>>
<span class="problem">thirst</span>
<<case 2>>
<span class="okay">dryness</span>
<<case 1>>
<span class="good">minor dryness</span>
<<case 0>>
<span class="perfect">well-hydrated</span>
<</switch>>
</p>
<<set _sleep to statState("sleep")>>
<p @data-tool-tip="roundTo($pc.stats.sleep.current,2)">Sleep:
<<switch _sleep>>
<<case 5>>
<span class="dying">collapsing</span>
<<case 4>>
<span class="critical">exhausted</span>
<<case 3>>
<span class="problem">sleepy</span>
<<case 2>>
<span class="okay">tired</span>
<<case 1>>
<span class="good">awake</span>
<<case 0>>
<span class="perfect">rested</span>
<</switch>>
</p>
<<set _hygiene to statState("hygiene")>>
<p @data-tool-tip="roundTo($pc.stats.hygiene.current,2)">Hygiene:
<<switch _hygiene>>
<<case 5>>
<span class="dying">disgusting</span>
<<case 4>>
<span class="critical">stinky</span>
<<case 3>>
<span class="problem">smelly</span>
<<case 2>>
<span class="okay">sweaty</span>
<<case 1>>
<span class="good">clean</span>
<<case 0>>
<span class="perfect">fresh</span>
<</switch>>
</p>
<<set _endurance to statState("endurance")>>
<p @data-tool-tip="roundTo($pc.stats.endurance.current,2)">Endurance:
<<switch _endurance>>
<<case 4>>
<span class="critical">completely exhausted</span>
<<case 3>>
<span class="problem">utterly exhausted</span>
<<case 2>>
<span class="okay">exhausted</span>
<<case 1>>
<span class="good">fresh</span>
<<case 0>>
<span class="perfect">rested</span>
<</switch>>
</p>
<<set _alcohol to statState("alcohol")>>
<<if _alcohol > 0>>
<p @data-tool-tip="roundTo($pc.stats.alcohol.current,2)">Alcohol:
<<switch _alcohol>>
<<case 4>>
<span class="critical">massively drunk</span>
<<case 3>>
<span class="problem">very drunk</span>
<<case 2>>
<span class="okay">drunk</span>
<<case 1>>
<span class="good">tipsy</span>
<</switch>>
</p>
<</if>>
<<set _horniness to statState("horniness")>>
<<if _horniness > 0>>
<p @data-tool-tip="roundTo(Arousal.Current,2)">Horniness:
<<switch _horniness>>
<<case 5>>
<span class="horny">Extremely Lecherous</span>
<<case 4>>
<span class="horny">Lecherous</span>
<<case 3>>
<span class="horny">Lustful</span>
<<case 2>>
<span class="horny">Horny</span>
<<case 1>>
<span class="horny">Aroused</span>
<</switch>>
</p>
<</if>>
<<set _painToolTip = "">>
<<if $pc.body.pain.feet.current > 0>>
<<set _painToolTip += ("Feet: " + $pc.body.pain.feet.current)+"\n">>
<</if>>
<<if $pc.body.pain.head.current > 0>>
<<set _painToolTip += ("Head: " + $pc.body.pain.head.current)+"\n">>
<</if>>
<<if $pc.body.pain.uterus.current > 0>>
<<set _painToolTip += ("Uterus: " + $pc.body.pain.uterus.current)+"\n">>
<</if>>
<<if $pc.body.pain.vagina.current > 0>>
<<set _painToolTip += ("Vagina: " + $pc.body.pain.vagina.current)+"\n">>
<</if>>
<<if _painToolTip == "">>
<<set _painToolTip = "Nothing hurts.">>
<</if>>
<p @data-tool-tip="_painToolTip">Pain:
<<if $pc.body.pain.total >= 100>>
<span class="dying">critical Pain</span>
<<elseif $pc.body.pain.total >= 80>>
<span class="critical">severe Pain</span>
<<elseif $pc.body.pain.total >= 60>>
<span class="problem">heavy Pain</span>
<<elseif $pc.body.pain.total >= 40>>
<span class="okay">mild Pain</span>
<<elseif $pc.body.pain.total >= 20>>
<span class="good">uncomfortable</span>
<<else>>
<span class="perfect">comfortable</span>
<</if>>
</p>
<<set _distress to statState("distress")>>
<<if $pc.stats.distress.current < 100>>
<p @data-tool-tip="roundTo($pc.stats.distress.current,2)">Distress:
<<switch _distress>>
<<case 5>>
<span class="dying">system collapse</span>
<<case 4>>
<span class="dying">near system collapse</span>
<<case 3>>
<span class="dying">extreme danger</span>
<<case 2>>
<span class="dying">high danger</span>
<<case 1>>
<span class="dying">danger</span>
<</switch>>
</p>
<</if>>
<p @data-tool-tip="roundTo($pc.stats.stress.current,2)">
Mood:<br/>
<<set _disabledMoodDisplay = Math.floor(moodDisabled()/10)>>
<<set _availableMoodDisplay = Math.floor(moodAvailable()/10)>>
<<set _unavailableMoodDisplay = 10-_availableMoodDisplay-_disabledMoodDisplay>>
<<print "◯".repeat(_unavailableMoodDisplay)>><<print "⬤".repeat(_availableMoodDisplay)>><span style="color:red;"><<print "⬤".repeat(_disabledMoodDisplay)>></span>
</p>
</div>
<</if>>
<<for _i, _date range $dates>>
<<if _date.time.getUTCDate() == $time.getUTCDate()>>
<<if _date.type=="datenight">>
<<set _npc to NPCs.load(_date.npcId)>>
<p>_npc.nameUsed will pick you up for a date at your home at <<print TimeFormat(_date.time,"hh:mm")>>.
<<switch _date.destination>>
<<case "cinema">>
(Cinema)
<<case "restaurant">>
(Restaurant)
<</switch>>
</p>
<</if>>
<</if>>
<</for>>
<<if _display.skills === true>>
<p>
[[Character]]
</p>
<</if>>
<<if _display.purse === true>>
<p>
[[Purse]]
</p>
<</if>>
<<if _display.phone === true>>
<p>
[[Phone]]
<<set _unreadMessage to phoneUnreadMessages()>>
<<if _unreadMessage > 0>>
(_unreadMessage new Messages)
<</if>>
</p>
<</if>>
<<if _display.scheduler === true>>
<p>
[[Scheduler]]
</p>
<</if>>
<<if _display.debug === true>>
<p>[[Debug]]</p>
<p>[[ItemCreate]] [[PortraitCreate]]</p>
<p><<textbox "_debugGoto" "ParentsPlayerRoom">><<button "GoTo">><<goto _debugGoto>><</button>></p>
<p><<textbox "_debugWait" "1800">><<button "Wait">><<run TimePassSeconds(parseInt(_debugWait))>><<goto $currentLocation.id>><</button>></p>
<p><<button "Regenerate">><<run statsFill()>><<goto $currentLocation.id>><</button>></p>
<</if>>
<<if _display.settings === true>>
<p>[[Settings]]</p>
<</if>>
<<if _display.help === true>>
<p>[[Help]]</p>
<p>[[Credits]]</p>
<</if>>
<</if>>
<</if>><<script>>initializeBasics();<</script>><<print window.version.join(".")>><svg id="sun"></svg>
<<timed "50ms">>
<<script>>
const svgns = "http://www.w3.org/2000/svg";
const colorNight = [8, 24, 58];
const colorSunrise = [247, 205, 93];
const colorSunset = [253, 94, 83];
const colorSky = {
summer: [171,220,250]
};
const sunRiseSetOffset = 3600000;
let svg = document.createElementNS(svgns, "svg");
svg.setAttribute("viewBox", "0 0 800 400");
let time = State.getVar("$time");
let dawnTime = getDawnTime(time);
let duskTime = getDuskTime(time);
let sunriseTime = getSunriseTime(time);
let sunsetTime = getSunsetTime(time);
const sunPositionXMin = 20;
const sunPositionXMax = 80;
let dayProgress = (time.getTime() - sunriseTime.getTime()) / (sunsetTime.getTime() - sunriseTime.getTime());
let sunPositionX = sunPositionXMin + (dayProgress * (100 - sunPositionXMin - (100-sunPositionXMax)));
sunPositionX = Math.round(sunPositionX);
let relativeSunHeight = dayProgress * 2;
if(relativeSunHeight > 1)
relativeSunHeight = 2 - relativeSunHeight;
let yearProgress = getSolisticeProgress(time);
const sunRadius = 100;
const sunPositionYMin = 40 * 4;
const sunPositionYMax = 10 * 4;
let todaysSunPositionYMax = sunPositionYMax + yearProgress * (sunPositionYMin - sunPositionYMax);
let todaysSunPositionYMin = 70 * 4 + sunRadius;
let sunPositionY = todaysSunPositionYMin + (relativeSunHeight * (100 - todaysSunPositionYMin - (100-todaysSunPositionYMax)));
let dayState = getSunposition(time);
let colorSkyCurrent = "#FFFFFF";
if(dayState == "night"){
colorSkyCurrent = colorInterpolate(colorNight,colorNight,1);
}else if(dayState == "sunrise"){
let sunriseState = (time.getTime() - dawnTime.getTime())/(sunriseTime.getTime() - dawnTime.getTime());
colorSkyCurrent = colorInterpolate(colorNight,colorSunrise,sunriseState);
}else if(dayState == "sunset"){
let sunsetState = (time.getTime() - duskTime.getTime())/(sunsetTime.getTime() - duskTime.getTime());
colorSkyCurrent = colorInterpolate(colorNight,colorSunset,sunsetState);
}else{
if(time.getTime() - sunriseTime.getTime() < sunRiseSetOffset){
let sunriseWithOffset = sunriseTime.getTime() + sunRiseSetOffset;
let sunriseState = (time.getTime() - sunriseTime.getTime())/(sunriseWithOffset - sunriseTime.getTime());
colorSkyCurrent = colorInterpolate(colorSunrise,colorSky.summer,sunriseState);
console.log(sunriseState);
}else if(sunsetTime.getTime() - time.getTime() < sunRiseSetOffset){
let sunsetWithOffset = sunsetTime.getTime() - sunRiseSetOffset;
let sunsetState = (time.getTime() - sunsetWithOffset)/(sunsetTime.getTime() - sunsetWithOffset);
colorSkyCurrent = colorInterpolate(colorSky.summer,colorSunset,sunsetState);
console.log(sunsetState);
}else{
colorSkyCurrent = colorInterpolate(colorSky.summer,colorSky.summer,1);
}
}
let sky = document.createElementNS(svgns, "rect");
sky.setAttribute("x", "0");
sky.setAttribute("y", "0");
sky.setAttribute("width", "100%");
sky.setAttribute("height", "100%");
sky.setAttribute("fill", colorSkyCurrent);
let sun = document.createElementNS(svgns, "circle");
sun.setAttribute("cx", sunPositionX+"%");
sun.setAttribute("cy", `${sunPositionY}`);
sun.setAttribute("r", sunRadius);
sun.setAttribute("fill", "#F28C38");
let ground = document.createElementNS(svgns, "rect");
ground.setAttribute("x", "0");
ground.setAttribute("y", "70%");
ground.setAttribute("width", "100%");
ground.setAttribute("height", "50%");
ground.setAttribute("fill", "#8C6239");
svg.appendChild(sky);
svg.appendChild(sun);
svg.appendChild(ground);
document.getElementById("sun").replaceWith(svg);
<</script>>
<</timed>><<Image "bug.jpg">>
<p>
This passage being shown is a bug.
Please report it (including the information how you got here) to the development team.
</p>
<<set _destination = $connectionRemaing.destination>>
<<run delete $connectionRemaing.destination>>
<<Actions>>
[[Teleport to where you probably should have ended up (best guess, but maybe bugged as well)|_destination]]
[[Teleport Home|$home]]
<</Actions>><<set _offers = getVar("currentRestaurant.offers",[],true)>>
<div class="restaurantMenu">
<div id="consumableDetails"></div>
<div id="consumableList" class="actions">
<<for _i, _consumableId range _offers>>
<<set _consumeable to consumableLoad(_consumableId)>>
<<capture _consumeable>>
<<link `'<img src="'+mediaPath(_consumeable.image)+'"/><p>'+_consumeable.label+"</p>"`>>
<<replace "#consumableDetails">>
<<ConsumableDetails _consumeable>>
<</replace>>
<</link>>
<</capture>>
<</for>>
</div>
</div>
<div class="actions">
[[Back|$currentLocation.id]]
</div><<widget "ConsumableDetails">>
<<set _consumeable to _args[0]>>
<h2>_consumeable.label</h2>
<<if "image" in _consumeable>>
<<Image _consumeable.image>>
<</if>>
<<if "description" in _consumeable>>
<p id="description">_consumeable.description</p>
<</if>>
<div class="actions">
<<ActionA "Buy and consume" "Consume" `{priceCash:_consumeable.price}`>>
<<set $currentConsumable to _consumeable.id>>
<</ActionA>>
</div>
<</widget>><h2>Settings</h2>
<h3>Content</h3>
<p>Disable girliness: <<checkbox "$settings.disableGirliness" false true autocheck>></p>
<h3>Media</h3>
<p>Media Path: <<textbox "$imagePath" $imagePath>></p>
<h3>Development</h3>
<p>Show Debug-Activities: <<checkbox "$settings.showDebugActions" false true autocheck>></p>
<p>Show TODO-Messages: <<checkbox "$settings.showTodo" false true autocheck>></p>
<div class="actions">
<<ActionA "Back" $returnPassage>>
<<run memorize("imagePath",$imagePath)>>
<</ActionA>>
</div><div id="shopselectitem" class="fullHeight">
<div id="itemPreview">
</div>
<<set _shopId to $passageArguments.shopId>>
<<set _filter to $passageArguments.filter>>
<<if _filter === undefined or _filter === null>>
<<set $passageArguments.filter to {owned:false}>>
<<set _filter to $passageArguments.filter>>
<</if>>
<<run console.warn(_filter)>>
<<if "owned" in _filter>>
<<set _showOwned to _filter.owned>>
<<else>>
<<set _showOwned to false>>
<</if>>
<<set _shopItems = shopItemsAvailable(_shopId,_showOwned,_filter)>>
<div class="shopFilter">
<div class="filter">
<<set _filterOwnedLink = 'Owned Items <b>'>>
<<if _showOwned is true>>
<<set _filterOwnedLink += '(Shown)</b>'>>
<<else>>
<<set _filterOwnedLink += '(Hidden)</b>'>>
<</if>>
<<link _filterOwnedLink>>
<<set _filter.owned to !_filter.owned>>
<<goto "Shop">>
<</link>>
</div>
<hr/>
</div>
<div class="selectImages" id="shopItemList">
<<include "ShopItemList">>
</div>
<<Actions>>
<<ActionA "Back" $currentLocation.id>>
<<run delete $passageArguments.filter>>
<</ActionA>>
<</Actions>>
</div><<for _itemId, _item range _shopItems>>
<<capture _itemId>>
<<set _args to JSON.stringify({shopItemId:_itemId})>>
<<SelectImage _item.label null _item.image>>
<<replace "#itemPreview">>
<<ShopItemDetails _itemId>>
<</replace>>
<</SelectImage>>
<</capture>>
<</for>>
<<if Object.keys(_shopItems).length == 0>>
No Items.
<</if>><<widget "ShopItemDetails">>
<<set _itemId to _args[0]>>
<<set _item to Items.load(_itemId)>>
<<ItemInfo _itemId>>
<hr/>
<<set _price to _item.price>>
<<if $pc.possessions.items.includes(_itemId)>>
You already own this.
<<else>>
<<Actions>>
<<ActionA "Buy" "Shop" `{price:{either:_price}}`>>
<<run OutfitInventory.buy(_itemId)>>
<</ActionA>>
<</Actions>>
<</if>>
<</widget>>You try to pay, but your card gets declined. You should check your account balance.
<div class="actions">
[[Back|$passageArguments.eventReturnPoint]]
</div><<set _items = Object.assign({},window.items)>>
window.items = {<br/>
<<for _i,_itemId range Object.keys(window.items).sort()>>
<<set _item = _items[_itemId]>>
<<if "special" in _item && _item.special.length > 0>>
<<set _item.sp = _item.special>>
<<run delete _item.special>>
<</if>>
"_itemId":<<print JSON.stringify(_item).replace(/"([\w]+)":/g,(m,p)=>{return p+":";})>>,<br/>
<</for>>
}<<widget 'BackC'>>
<<set _label ="Back">>
<<if $args.length > 0>>
<<set _label to _args[0]>>
<</if>>
[[_label|$returnPassage]]
<</widget>>
<<widget 'CContinue'>>
<<set _label ="Continue">>
<<if $args.length > 0>>
<<set _label to _args[0]>>
<</if>>
[[_label|ConnectionComplete]]
<</widget>><<widget 'Appearance'>>
Appearance:
<</widget>><<widget "AttractionToNPC">>
<<if _args.length > 1>>
<<set _npc to NPCs.load(_args[0])>>
<<set _attraction to _args[1]>>
<<else>>
<<set _npc to NPCs.load()>>
<<set _attraction to _args[0]>>
<</if>>
You are
<<if _attraction.attraction.gender >= 0.8>>
very much
<<elseif _attraction.attraction.gender >= 0.6>>
<<elseif _attraction.attraction.gender >= 0.4>>
mostly
<<elseif _attraction.attraction.gender >= 0.2>>
mostly not
<<else>>
not
<</if>>
attracted to <<L "menwomen">>.
<</widget>>
<<widget "SexualPreferenceChange">>
<<set _kinseyTarget = _args[0]>>
<<set _magnitude = _args[1]>>
<<set _kinseyStart = Arousal.SexualityPreference>>
<<run Arousal.shiftSexualPreference(_magnitude,{kinsey:_kinseyTarget,personal:true});>>
<<set _kinseyEnd = Arousal.SexualityPreference>>
<<set _style = "--color:blue">>
<<if _kinseyStart > _kinseyEnd or _kinseyEnd == 6>>
<<set _style = "--color:red">>
<</if>>
<div class="sexPreferenceChange" @style="_style">
<<if _kinseyEnd == _kinseyStart>>
Your sexual preference didn't change.
You are exclusively attracted to
<<switch _kinseyEnd>>
<<case 0>>
women.
<<case 6>>
men.
<</switch>>
<<else>>
Your sexual preference changed to be
<<if _kinseyStart < 3>>
<<if _kinseyStart > _kinseyEnd>>
less
<<else>>
more
<</if>>
attracted to men.
<<else>>
<<if _kinseyStart < _kinseyEnd>>
less
<<else>>
more
<</if>>
attracted to women.
<</if>>
<</if>>
<<set _barStart = _kinseyStart / 6 * 100>>
<<set _barEnd = _kinseyEnd / 6 * 100>>
<<set _barStyle ="--start:"+_barStart+"%;--end:"+_barEnd+"%">>
<div class="progressMoving" @style="_barStyle">
<div class="startMarker"></div>
<div class="endMarker"></div>
<div class="movingMarker"></div>
</div>
</div>
<</widget>><<widget "DialogScrollToNewContent">>
<<done>>
<<run document.getElementById("newContentMarker").scrollIntoView()>>
<</done>>
<</widget>>
<<widget 'Say' container>>
<<set _color to NPCs.load(_args[0]).dialogColor>>
<<set _stlye to "color:"+_color.light >>
<span class="say" @style="_stlye">_contents</span>
<</widget>><<widget 'Event'>>
<<set _event = _args[0]>>
<<set $returnPassage to _event.id>>
<<set $displayMode to "EVENT">>
<</widget>>
<<widget 'ENDING'>>
<<set $sidebarDisabled = true>>
<<set _class to "">>
<<switch _args[0].toUpperCase()>>
<<case "DEAD">>
<<set _class to "dead">>
<<case "WON">>
<<set _class to "won">>
<</switch>>
<div class="gameEnding">
<p @class="_class">_args[1]</p>
</div>
<</widget>><<widget 'Image'>>
<<if _args[0] != null>>
<<set _imagePath =$imagePath+mediaBaseFile(_args[0])>>
<<switch $args.length>>
<<case 1>>
<img @src="_imagePath">
<<case 2>>
<<link [img[_imagePath][_args[1]]]>><</link>>
<<case 3>>
<<link [img[_imagePath][_args[1]]]>><<run _args[2]()>><</link>>
<<case 4>>
<<link [img[_imagePath][_args[1]]]>><<run _args[2](_args[3])>><</link>>
<</switch>>
<</if>>
<</widget>>
<<widget 'ImageRandom'>>
<<set _imgrndMin = _args[1]>>
<<set _imgrndMax = _args[2]>>
<<set _imgrndPath = _args[0].replace('#',randomInt(_imgrndMin,_imgrndMax))>>
<<Image _imgrndPath>>
<</widget>><<widget "InventoryProduct">>
<<set _id to _args[0]>>
<<set _itemData to inventoryItem(_id)>>
<<set _title to _args[1]>>
<<set _image to _args[2]>>
<<set _description to _args[3]>>
<<set _count to _args[4]>>
<<set _price to _args[5]>>
<<if !_title || !_description || !_image || !_count || !_price>>
<<if !_title>>
<<set _title to _itemData.label>>
<</if>>
<<if !_description>>
<<set _description to _itemData.description>>
<</if>>
<<if !_image>>
<<set _image to _itemData.image>>
<</if>>
<<if !_count>>
<<set _count to (("count" in _itemData) ? _itemData.count : 1)>>
<</if>>
<<if !_price>>
<<set _price to (("price" in _itemData) ? _itemData.price : 1)>>
<</if>>
<</if>>
<<capture _id, _title, _image, _description, _count, _price>>
<<link _title>>
<<replace "#productInfo">>
<strong>_title</strong>
<<if _image !== undefined and _image != "">>
<p><<Image _image>></p>
<</if>>
<p>_description</p>
<<if _id in $pc.possessions and $pc.possessions[_id] > 0>>
<p>You own $pc.possessions[_id].</p>
<</if>>
<<if _count > 1>>
<<set _label = `Buy _count`>>
<<else>>
<<set _label = "Buy">>
<</if>>
<<Actions>>
<<if "max" in _itemData && _count + Inventory.load(_id).count > _itemData.max>>
<<ActionA _label "" `{disabled:true,message:"You can carry _itemData.max at most."}`>><</ActionA>>
<<else>>
<<ActionA _label "" `{price:_price,itemsInc:[{id:_id,count:_count}]}`>><</ActionA>>
<</if>>
<</Actions>>
<</replace>>
<</link>>
<</capture>>
<</widget>>
<<widget "InventoryShop">>
<<set _products to _args[0]>>
<div class="products">
<ul class="productList">
<<for _i, _product range _products>>
<li><<InventoryProduct _product.id _product.label _product.image _product.description _product.count _product.price>></li>
<</for>>
</ul>
<div id="productInfo">
</div>
</div>
<</widget>><<widget 'Location'>>
<<set _location = _args[0]>>
<<set $returnPassage to _location.id>>
<<set $displayMode to "LOCATION">>
<div class="connections">
<<set _hasShoeConnection to false>>
<<set _highHeelSeverety to 0>>
<<if $pc.body.pain.feet.current >= 40 and Outfits.Current.style.shoeHeight neq 0 and $pc.body.pain.feet.ignoredTil < $time>>
<<set _highHeelSeverety to 1>>
<</if>>
<<for _i, _connection range _args[0].conncetions>>
<<if _connection.noShoes neq true>>
<<set _hasShoeConnection to true>>
<</if>>
<<Connection _connection>><</Connection>>
<</for>>
</div>
<<if _hasShoeConnection is true && _location.type != "home">>
<<if _highHeelSeverety == 1>>
<<set _stress=30>>
<<Actions>>
<<ActionA "Ignore Feet Pain for 30 Minutes" $currentLocation.id `{stress:30}`>>
<<set $pc.body.pain.feet.ignoredTil to TimeWithOffset(1800)>>
<</ActionA>>
<<link 'Take your shoes off and walk home barefeet (TODO)' $home>>
<<run Outfits.Current.unwear('shoes')>>
<<run TimePassSeconds(7200)>>
<</link>>
<</Actions>>
<</if>>
<</if>>
<h1>_args[0].title</h1>
<<Image _args[0].image>>
<<if "description" in _args[0] and _args[0].description != "">>
<div class="description">
_args[0].description
</div>
<</if>>
<<if "npcs" in _args[0]>>
<div class="npcPresentList">
<<for _i, _npcId range _args[0].npcs>>
<<set _npc = NPCs.load(_npcId)>>
<<ActionA `"<<Image _npc.image>><p><<print _npc.nameUsed>></p>"` _npc.get('passage')>><</ActionA>>
<</for>>
</div>
<</if>>
<<Actions>>
<<if "actions" in _args[0]>>
<<for _i, _action range _args[0].actions>>
<<ActionA _action.label _action.target _action>><</ActionA>>
<</for>>
<</if>>
<<if _args[0].outdoors === true and _args[0].public === true>>
<<ActionA "Watch world go by" "WatchWorldGoBy" `{time: [60,300,900,3600,10800],mood:{magnitude:1/240,type:"passtime"}}`>><</ActionA>>
<</if>>
<</Actions>>
<</widget>><<widget "MoodGain">>
<<set _moodGain to _args[0]>>
<<run moodInc(_moodGain)>>
<<set _moodGainLabel to "Your mood improved.">>
<<if _args.length > 1>>
<<set _moodGainLabel to _args[1]>>
<</if>>
<div class="moodGained">
<span class="big"><<print mood2string(_moodGain,"moodInc")>></span>
@@.description;
_moodGainLabel
@@
</div>
<</widget>>
<<widget "MoodLost">>
<<set _moodGain to _args[0]>>
<<run moodDec(_moodGain)>>
<<set _moodGainLabel to "Your mood decreased.">>
<<if _args.length > 1>>
<<set _moodGainLabel to _args[1]>>
<</if>>
<div class="moodGained lost">
<span class="big"><<print mood2string(_moodGain,"stressInc")>></span>
@@.description;
_moodGainLabel
@@
</div>
<</widget>><<set _npc to NPCs.load($currentNpcDialogId)>>
<div id="npcWindow">
<div id="npcInfo">
<<Image _npc.image>>
<h1>_npc.nameUsed</h1>
<p class="nameComplete">_npc.nameComplete</p>
<<set _age to _npc.age>>
<<if _age>>
<p>Age: _age</p>
<</if>>
<div class="favors">
<<set _favorsAvailable to _npc.favors>>
<<set _favorsUnavailable to _npc.favorsMax - _favorsAvailable>>
@@.available;<<print "★".repeat(_favorsAvailable)>>@@@@.unavailable;<<print "☆".repeat(_favorsUnavailable)>>@@
</div>
<ul>
<<for _i, _opinionModifier range _npc.opinionModifiers>>
<<set _opinionModifierData to opinionModifiers[_opinionModifier.id]>>
<li>_opinionModifierData.label</li>
<</for>>
</ul>
<<if _npc.relation >= 80>>
You have a great relation with <<Gender "him" _npc>>.
<<elseif _npc.relation >= 50>>
You have a good relation with <<Gender "him" _npc>>.
<<elseif _npc.relation >= 20>>
You have a decent relation with <<Gender "him" _npc>>.
<<elseif _npc.relation > -20>>
You have an average relation with <<Gender "him" _npc>>.
<<elseif _npc.relation > -50>>
You have a tense relation with <<Gender "him" _npc>>.
<<elseif _npc.relation > -80>>
You have a bad relation with <<Gender "him" _npc>>.
<<else>>
You have an awful relation with <<Gender "him" _npc>>.
<</if>>
</div>
</div><<widget "FavorEarned">>
<<set _favorEarnedNpcId to _args[0]>>
<<set _favorEarnedNpc to NPCs.load(_favorEarnedNpcId)>>
<<set _favorsToEarn to _args[1]>>
<<set _favorsAvailable to _favorEarnedNpc.favors>>
<<set _favorsUnavailable to _favorEarnedNpc.favorsMax - _favorsAvailable>>
<<set _favorsEarnedEffectively = Math.min(_favorsToEarn,_favorsUnavailable)>>
<<run _favorEarnedNpc.favors = _favorsAvailable+_favorsEarnedEffectively>>
<div class="favorEarned">
<span class="big"><<print "★".repeat(_favorsEarnedEffectively)>></span>
@@.description;
<<if _favorsToEarn > _favorsEarnedEffectively>>
You earned _favorsToEarn <<if _favorsToEarn==1>>Favor<<else>>Favors<</if>> with _favorEarnedNpc.nameUsed.<br/>
Because you reached the maximum of _favorEarnedNpc.favorsMax Favors with <<L "himher" _favorEarnedNpc>>, you earned _favorsEarnedEffectively <<if _favorsEarnedEffectively==1>>Favor<<else>>Favors<</if>> effectively.
<<else>>
You earned _favorsEarnedEffectively <<if _favorsEarnedEffectively==1>>Favor<<else>>Favors<</if>> with _favorEarnedNpc.nameUsed.
<</if>>
@@
</div>
<</widget>>
<<widget "FavorLost">>
<<set _favorEarnedNpcId to _args[0]>>
<<set _favorEarnedNpc to NPCs.load(_favorEarnedNpcId)>>
<<set _favorsToEarn to _args[1]>>
<<set _favorsAvailable to _favorEarnedNpc.favors>>
<<set _favorsEarnedEffectively = Math.min(_favorsToEarn,_favorsAvailable)>>
<<run _favorEarnedNpc.favors = _favorsAvailable-_favorsEarnedEffectively>>
<div class="favorEarned lost">
<span class="big"><<print "★".repeat(_favorsEarnedEffectively)>></span>
@@.description;
You lost _favorsEarnedEffectively <<if _favorsEarnedEffectively==1>>Favor<<else>>Favors<</if>> with _favorEarnedNpc.nameUsed.
@@
</div>
<</widget>>A boor has a rough and rude behavior.A generous character likes to spend his money for others.
<ul>
<li>You will receive more and more expensive gifts from a generous character.</li>
<li>A generous character doesn't mind you spending his money for your luxury.</li>
</ul>A stingy character doesn't like to spend his money.
<ul>
<li>You will receive less and cheaper gifts from a stingy character.</li>
<li>A stingy character dislikes you spending his money for your luxury.</li>
</ul><<widget Progressbar>>
<<set _value to Math.floor(_args[0])>>
<<set _label to _value+"%">>
<<set _styleClass = "progressBar">>
<<set _foregroundStyleClass = "progressBarForeground">>
<<set _change = 0>>
<<if _args.length > 1>>
<<if _args[1].rightAligned>>
<<set _styleClass += " rightAligned">>
<</if>>
<<if _args[1].change>>
<<set _change = _args[1].change>>
<</if>>
<<if _args[1].label != undefined>>
<<set _label to _args[1].label>>
<</if>>
<</if>>
<div @class="_styleClass">
<<set _color to (100-_value) * 2 + "," + _value * 2 + ",0">>
<div @class="_foregroundStyleClass" @style="'width:'+_value+'%; --pBbackground: rgb(' + _color +');' "> </div>
<<if _change>>
<<if _change < 0>>
<<set _change = _change*-1>>
<<set _foregroundStyleClass += " change negative">>
<<set _position = _value>>
<<else>>
<<set _foregroundStyleClass += " change positive">>
<<set _position = _value-_change>>
<</if>>
<div @class="_foregroundStyleClass" @style="'width:'+_change+'%;--pbcPosition:'+_position+'%'"></div>
<</if>>
<span>_label</span>
</div>
<</widget>><<widget "updatebar">><<silently>>
<<replace "#story-caption">><<display "StoryCaption">><</replace>>
<</silently>><</widget>>