/* Banner */<<= G.VERSION >>[[Phone|phone]]
<br>
LunAttic Games@@#game-time; <<= G.player.timeToString()>>@@<br>
@@#player-vitals; <<Vitals>>@@<br>
Wait<br><<set _passage to passage()>>
[[15m|_passage][G.add_time({minutes: 15})]]
[[30m|_passage][G.add_time({minutes: 30})]]
[[60m|_passage][G.add_time({minutes: 60})]]<<if G.isDevVersion()>>
<<if !G.isDebugOn('ui')>>
<<link "Debug On">><<run G.debugOn()>><<Refresh>><</link>>
<</if>>
<</if>>
<<if G.isDebugOn('ui')>>
<<link "Debug Off">><<run G.debugOff()>><<Refresh>><</link>>
<</if>>
<<if G.isDebugOn('ui')>>[[Dev Area|dev_area]]<</if>><<LocationTitle "''Threads of Reality''">>
<<if $patreon>>
<<Card>>''Patreon Version''<</Card>>
<</if>>
<<Card justify>>
''Gameplay'' The goal is to have an adult open-ended rpg game with locations to visit, girls to meet, unexpected events,
quests to complete, skills to master, business to run, properties and items to buy ... Play the way you want.
<br><br>
Influenced by other Twine games like those listed below (and others) with a touch of renpy games. I've tried to balance
a mix of an openended game with short linear stories.
<br><br>
''Universe'' It isn't because it is an adult game that it can't have a lore. I've put a lot of effort creating a lore for the game
from a myth of creation, to realms, worlds, nations and history for them. As the project evolves it will be presented.
<br><br>
This game depicts a universe where people seek shelter from ill fortune associating to powerful men that provides for them in exchange
of their loyalty. <b>Like most adult games, it doesn't have the intent to simulate real relationships or sex.</b>
<br><br>
''Warning'' Keep in mind that this is an early version and far from complete.
<</Card>>
<<nobr>>
<span class="center-block">
[[Miss-adventures in Hollywood|https://verkniptegeest.itch.io/celebrity-cyoa-project]]
[[Successor|https://mopoga.com/successor]]
[[Patriarch|https://mopoga.com/patriarch]]
</span>
<</nobr>>
<span class="center-block">[[Continue|warning]]</span>/* :: StoryInterface[config] */
<!-- https://www.motoslave.net/sugarcube/2/docs/#special-passage-storyinterface -->
<!-- take note of 'data-init-passage' and 'data-passage' -->
/* <div id="interface">
<div id="menu" data-init-passage="menu">
O Titulo
</div>
<div id="notifications" data-passage="notifications"></div>
<!-- you must have one element with #id of 'passages' -->
<div id="passages"></div>
<div id="" data-passage=""></div>
</div> */<<set $version to 6>>
<<set $patreon to false>><<run setup.updateSave()>>@@.passage-header;
<<if passage() isnot 'StoryBegin'>>
<<Finances>>
<</if>>
<hr>
@@@@.passage-footer;
<hr>
/* <span>
<iconify-icon icon="mdi:lightning-bolt-circle"></iconify-icon>$player.energy |
<iconify-icon icon="tabler:health-recognition"></iconify-icon> $player.hygiene |
<iconify-icon icon="material-symbols:mood"></iconify-icon> $player.mood |
<iconify-icon icon="mdi:food-apple-outline"></iconify-icon> $player.food |
<iconify-icon icon="material-symbols:water-drop-rounded"></iconify-icon> $player.water
</span> */
<<if G.isDebugOn('ui')>>@@.passage-footer;<<= passage()>>@@<</if>>
@@<<LocationUI>><</LocationUI>>Testing<<CharUI>><</CharUI>><span id="template-anchor">
{% if meta.text != "" %}
<span class="message-anim">
<span id="spinner-text"></span>
</span>
{%endif%}
</span>
<<done>>
{% if meta.text != "" %}
<<timed 400ms>>
<<script>>
gsap.timeline()
.to(".message-anim", { duration: 2, width:"70%"})
.to("#spinner-text", { duration: 1.2, text: "{{meta.text}}"})
<</script>>
<<next 3.4s>>
<<append '#template-anchor' transition>><br><<ReturnButton>><</append>>
<</timed>>
{% else %}
<<timed 400ms>>
<<append '#template-anchor' transition>><br><<ReturnButton>><</append>>
<</timed>>
{%endif%}
<</done>>
<<LocationBg {{meta.profile}}>><<Scene>>
<<Page>><<SexScene null `previous()`>><</Page>>
<</Scene>><<Profiles eva>>
<<Speech>>
- Eva: Hey, <<= $player.name>>! Welcome to Hartford!
- Eva: How was the trip from Astoria?
- player: Hey Eva! Good to see you.
- player: I've slept most of the time so it was great.
- Eva: Ha ha ha!
- Eva: Still the same! But nice to hear that you enjoyed the trip.
- Eva: How long since we last met? A year?
- player: And a half I guess.
- Eva: It went so fast.
- Eva: Lets head to the car. I will drive you to your new home.
<</Speech>>
<<session-link [[15 minutes later ...|story-eva-intro-1]]>>
<<footer>><<Profiles eva>>
<<Speech>>
- Eva: So. Excited about your qualify?
- player: Yeah ... I mean ... I don't really have an option.
- Eva: You don't. But you know that the rewards are amazing.
- player: So is the punishment if I fail.
- player: Disinherited. Dishonored. And exiled.
- player: Have I forgotten anything?
- Eva: Nope ... But don't be so dramatic.
- Eva: I will be your mentor on your qualify.
- Eva: And, as you know, entering the qualify allows you to have servants.
- Eva: And they can help you.
<</Speech>>
<<session-link [[...|story-eva-intro-2]]>>
<<footer>><<Profiles eva>>
<<Speech>>
- player: Maybe I had that part forgotten.
- player: Servants were a distant reality for me.
- Eva: For you and for every one else that took the qualify for the past ...
- player: 2500 years ...
- Eva: Exactly. But now it is upon you. Half of the qualify is to see how you handle them ... us.
- player: And the other half?
- Eva: How you handle yourself ... And having lots of fun
- Eva: You start your harem in the qualify ...
- Eva: Ah! We arrived.
<</Speech>>
<<session-link [[You arrived|story-house-intro]]>>
<<footer>><<Scene coffee_land>>
<<Page>>
<<Profiles eva brea jackie>>
<<Card>>
As you enter the coffee shop you recognize 2 of 3 ladies in a table towards the back of the store.<br>
They are having what seems a serious conversation and don't realize that you are here.
<</Card>>
<br>
<</Page>>
<</Scene>><<set $gym_pass to 0>><<LocationUI>><</LocationUI>>
<<Card>>
Days left on your subscription: <<= $gym_pass>><br>
<</Card>>
<<Card>>
Buy more days: <<link "+7 days for 500">>
<<set $gym_pass to $gym_pass +=7>>
<<Pay 500 true>>
<</link>> |
<<link "+30 days for 2000">>
<<set $gym_pass to $gym_pass += 30>>
<<Pay 2000 true>>
<</link>>
<</Card>><<run g.abby.flags.set('daily.event.mighty_olympian-001')>>
<<run g.player.counters.inc('event.mighty_olympian-001')>>
<<Scene `$player.where`>>
<<Page>>
<<Speech>>
- abby: Hey, ?player! Ready to workout?
<</Speech>>
<<Decision>>
<<Option "Let's go!" yes>><</Option>>
<<Option No no>><</Option>>
<</Decision>>
<</Page>>
<<Page yes null true>>
<<set _scene_hide_controls to true>>
<<Speech>>
- player: Sure, always.
- abby: That is the spirit! Let's go!
<</Speech>>
@@.trader-text-center;
<<ActionButton action_gym_workout "Workout With Abby">>
<<IncStat player fitness 4 units>>
<<IncStat abby relationship 7 units>>
<</ActionButton>>
@@
<</Page>>
<<Page no>>
<<Profile abby>>
<<Speech>>
- abby: Looks like age is catching up to you ...
<</Speech>>
<</Page>>
<</Scene>><<include house_office>><<run g.jess.flags.set('daily.event.holding_office-001')>>
<<run g.player.counters.inc('event.holding_office-001')>>
<<Scene $transition.passage>>
<<Page>>
<<Profile jess>>
<<Speech>>
- jess: Sir, sorry to disturb. Do you need anything? Maybe a snack or a cup of coffee?
<</Speech>>
<<Decision>>
<<Option Yes yes>><</Option>>
<<Option No no>><</Option>>
<</Decision>>
<</Page>>
<<Page no null final>>
<<Card>>
Jess can't help feeling that she isn't doing enough to please her boss.
And she really needs the job.
<</Card>>
<<IncStat jess relationship 2 units>>
<</Page>>
<<Page yes>>
/* TODO: v0.0.2 - Add image */
<<Card>>
Some how she managed to put together a tasty snack.
Your relationship with Jess has improved.
<</Card>>
<<IncStat jess relationship 7 units>>
<<IncVitals 5 0 15 15 15>>
<</Page>>
<</Scene>><<run g.jess.flags.set('daily.event.holding_office-002')>>
<<run g.player.counters.inc('event.holding_office-002')>>
<<Scene $transition.passage>>
<<Page>>
<<Profile jess>>
<<Speech>>
- jess: Sir, sorry to disturb. Looks like you have a lot on your plate right. Can I do something to help?
<</Speech>>
<<Decision>>
<<Option Yes yes>><</Option>>
<<Option No no>><</Option>>
<</Decision>>
<</Page>>
<<Page no null final>>
<<Card>>
Jess can't help feeling that she isn't doing enough to please her boss.
And she really needs the job.
<</Card>>
<<IncStat jess relationship 2 units>>
<</Page>>
<<Page yes>>Something<</Page>>
<<Page>>Sex<</Page>>
<<Page>>Reward<</Page>>
<</Scene>><<LocationUI>><</LocationUI>>
<<if g.player.quests.get('intro-001') >= 4>><<Projects>><</if>><<run g.skie.flags.set('daily.event.estate-001')>>
<<run g.player.counters.inc('event.estate-001')>>
<<Scene house>>
<<Page>>
<<Card>>As you approach the Estate you see Skie coming on the opposite direction.<</Card>>
<<Image events/estate-skie/001.jpg>>
<</Page>>
<<Page>>
<<Speech>>
- skie: Hey, ?player. I am going to the shopping at Lowe Avenue. Wanna come?
- player: Not today.
- skie: It would be so cool if you could come. My friends would never believe!
- player: //Maybe when it is implemented.//
<</Speech>>
<</Page>>
<<Page>>
<<Card>>
Your relationship with Skie has improved.
<</Card>>
<<IncStat skie relationship 5 units>>
<</Page>>
<</Scene>><<run g.lindy.flags.set('daily.event.bathroom-001')>>
<<run g.player.counters.inc('event.bathroom-001')>>
<<Scene house_bathroom>>
<<Page>>
<<Image events/bathroom-lindy/001.jpg>>
<<Card>>
You arrive at the bathroom and find Lindy already doing her job cleaning it.
She is focused and don't see you coming.
<</Card>>
<</Page>>
<<Page>>
<<Image events/bathroom-lindy/002.jpg>>
<<Speech>>
- player: Morning, Lindy.
- Lindy: Oh, morning Mr. ?player. I will finish here in a moment.
- Player: No need to hurry, Lindy. I certainly have no problem watching your work.
<</Speech>>
<</Page>>
<<Page>>
<<if $lindy.stats.relationship >= 15 >>
<<SexScene lindy>>
<<else>>
<<Card>>
Your relationship with Lindy has improved.
<</Card>>
<</if>>
<<IncStat lindy relationship 7 units>>
<</Page>>
<</Scene>><<run g.adah.flags.set('daily.event.pool-001')>>
<<run g.player.counters.inc('event.pool-001')>>
<<Scene $transition.target>>
<<Profile adah/profile-pool>>
<<Speech>>
- Adah: Sir, I am sorry ... I forgot to ask if I could continue to use the pool. Do you mind if I do?
- player: Not at all ... Be my guest.
<</Speech>>
<<Card>>
Your relationship with Adah has improved.
<</Card>>
<</Scene>><<run g.skie.flags.set('weekly.event.house_living_room-001')>>
<<run g.player.counters.inc('event.house_living_room-001')>>
<<Scene $transition.passage>>
<<Page>>
<<Profile skie>>
<<Speech>>
- skie: Hey, ?player! There is something that I would like to talk to you.
- player: Ok. What is it?
- skie: I am going out with some friends later and ... Do you have a few bucks to spare?
<</Speech>>
<<Decision>>
<<Option Sure yes>><</Option>>
<<Option "Not today" no>><</Option>>
<</Decision>>
<</Page>>
<<Page yes null true>>
<<Speech>>
- player: Yeah, I do. Let's consider this an investment ...
- skie: I am sure I am the best investment you can possibly make!
<</Speech>><br>
<<Card>>
One can only hope so ...<br>
Your relationship with Skie has improved.
<</Card>>
<<IncStat skie relationship 7 units>>
<<Pay 1000 false>>
<</Page>>
<<Page no>>
<<Speech>>
- player: Not today, Skie.
- skie: Ah! Come on. You're a Robinson, man! Okay ...
<</Speech>><br>
<<Card>>
She was a little vexed for like 5 seconds. And then, nothing.
Looks like she is used to have no for answers. I would say she even liked it.
<</Card>>
<<IncStat skie relationship 2 units>>
<</Page>>
<</Scene>><<run g.adah.flags.set('daily.event.house_office-001')>>
<<run g.player.counters.inc('event.house_office-001')>>
<<Scene $transition.passage>>
<<Page>>
<<Profile adah>>
<<Speech>>
- adah: Sir, I just finished to bake a pie. Do you want some?
<</Speech>>
<<Decision>>
<<Option "Sure" "Yes">><</Option>>
<<Option "No, thank you" "No">><</Option>>
<</Decision>>
<</Page>>
<<Page "Yes" null true>>
<<Say player "How can someone possibly refuse some pie?">><br>
<<Card>>
Your relationship with Adah has improved.
<</Card>>
<<IncStat adah relationship 7 units>>
<<IncVitals 5 0 15 15 15>>
<</Page>>
<<Page "No" "Final">>
<<Say player "Not today, Adah. In a bit of a hurry here.">><br>
<<Card>>
Adah felt her attempt to please you backfired...
<</Card>>
<<IncStat adah relationship 2 units>>
<</Page>>
<</Scene>><<run g.gillian.flags.set('daily.event.house_office-002')>>
<<run g.player.counters.inc('event.house_office-002')>>
<<Scene $transition.passage>>
<<Page>>
<<Profile gillian>>
<<Speech>>
- gillian: Hey, Methos. Are you all right? Looks like you have a lot on your plate right. Can I do something to help?
<</Speech>>
<<Decision>>
<<Option "Sure" yes>><</Option>>
<<Option "Not now" no>><</Option>>
<</Decision>>
<</Page>>
<<Page no null final>>
<<Say player "Sorry, not now. I do have a bunch of stuff to finish.">>
<<IncStat jess relationship 2 units>>
<</Page>>
<<Page yes>>
/* TODO: v0.0.2 - Replace image with new profile category */
<<Profile gillian>>
<<Say gillian "Why don't you get a bit more comfortable?">>
<</Page>>
<<Page>><<SexScene gillian>><</Page>>
<<Page>>Reward<</Page>>
<</Scene>><<run g.eva.flags.set('daily.event.house_office-003')>>
<<run g.player.counters.inc('event.house_office-003')>>
<<Scene $transition.passage>>
<<Page>>
<<Profile eva>>
<<Speech>>
- eva: Still working, honey?
- player: Yeah, trying to keep up with the work Brea has sent me.
- eva: It is late. Can't you continue tomorrow?
<</Speech>>
<<Decision>>
<<Option "Yes" "Yes">><</Option>>
<<Option "No" "No">><</Option>>
<</Decision>>
<</Page>>
<<Page "Yes" null true>>
<<Say eva "Good. It is important to keep a good balance between pleasure and work.">><br>
<<Card>>
Your relationship with Eva has improved.
<</Card>>
<<IncStat eva relationship 7 units>>
<</Page>>
<<Page "No" "Final">>
<<Say eva "Maybe, just maybe, you should have planned your workload better.">><br>
<<Card>>
Eva is disappointed that you couldn't manage your workload better.
But she is also proud of your resolve to get the job done.
<</Card>>
<<IncStat eva relationship 2 units>>
<</Page>>
<</Scene>><<LocationTitle "Hall of Kings">>
<<Scene museum_entrance>>
<<Page>>
<br>
<<Card>>
This hall is a homage to the first king of Astoria: ''Kendrick Astor, the Eternal'' and shows a digital reconstruction of his
face and his weapon of choice.
<br><br>
<b>Many kings followed his footsteps and many more will but only one was the first.</b>
<</Card>>
<</Page>>
<<Page>>
<<Image locations/museum/pele.webp>>
<<Card>>
Kendrick Astor, the First and Forever King
<</Card>>
<</Page>>
<</Scene>>
<<LocationBg hall_of_kings>>Church of the Sublime Adoration of the Divine
<<LocationUI>><</LocationUI>><<run g.player.counters.inc('event.robinson_park_track-001')>>
<<Scene $transition.target>>
<<Page>>
<<Card>>
You can see a girl stretching nearby.
<</Card>>
<<Image events/event-track-001.jpg>>
<br>
<<Decision>>
<<Option "Talk to the girl" talk>><</Option>>
<<Option "Forget about her" forget>><</Option>>
<</Decision>>
<</Page>>
<<Page talk null true>>
<<Card>>
As I moved to talk to her she raced away.<br>
Looks like she is the shy sort.
<</Card>>
<</Page>>
<<Page forget>>
<<Card>>
I just ignored her and moved on.
<</Card>>
<</Page>>
<</Scene>><<StoreUI>>
<<StoreItem item_sunscreen>>
<<StoreItem item_whisky_ballance>>
<<StoreItem item_book_1>>
<<StoreItem item_magazine_1>>
<</StoreUI>>
<<ReturnButton>><<run g.ajay.set('daily.event.cocoa_dreams-001')>>
<<run g.player.counters.inc('event.cocoa_dreams-001')>>
<<Scene $transition.passage>>
<<Page>>
<<Profile ajay>>
<<Speech>>
- ajay: ?player!
- player: Hey, Ajay.
- ajay: Wanna join me? Please?! For once I would like to have company here.
<</Speech>>
<<Decision>>
<<Option Sure yes>><</Option>>
<<Option Sorry no>><</Option>>
<</Decision>>
<</Page>>
<<Page yes null true>>
<<Speech>>
- ajay: Come, have a sit.
- player: Come here often?
- ajay: A lot. I like everything they and often I get ideas for our restaurant.
<</Speech>><br>
<<Card>>
After few minutes of pleasant conversation and delicious biscuits will decided to move on.
Obviously, you paid the bill.
<</Card>>
<<IncStat ajay relationship 7 units>>
<<IncVitals 5 0 15 15 15>>
<<Time>><<Minutes 30>><</Time>>
<<Pay 500 false>>
<</Page>>
<<Page no>>
<<Say player "Sorry, Ajay. Not today. I am justing passing by.">><br>
<<Card>>
Ajay is disappointed that she will be alone once again ...
<</Card>>
<<IncStat ajay relationship 2 units>>
<</Page>>
<</Scene>><<nobr>>
<div class="phone-frame">
<div class="bar"><span><<=G.hour>></span><span>100%</span></div>
<div class="app" uk-tooltip="Changelog">[img[./Assets/Assets/icons/exchange.png][changelog]]</div>
<div class="app" uk-tooltip="Contacts">[img[./Assets/Assets/icons/contacts.png][contacts]]</div>
<div class="app wip" uk-tooltip="Mail">[img[./Assets/Assets/icons/gmail.png][app-wip]]</div>
<div class="app wip" uk-tooltip="Messages">[img[./Assets/Assets/icons/messages.png][app-wip]]</div>
<div class="app wip" uk-tooltip="Map">[img[./Assets/Assets/icons/map.png][app-wip]]</div>
<div class="app wip" uk-tooltip="Driver">[img[./Assets/Assets/icons/taxi.png][app-wip]]</div>
<div class="app wip" uk-tooltip="Journal">[img[./Assets/Assets/icons/journal.png][app-wip]]</div>
<div class="app wip" uk-tooltip="Finances">[img[./Assets/Assets/icons/money.png][app-wip]]</div>
<div class="app wip" uk-tooltip="Settings">[img[./Assets/Assets/icons/gear.png][app-wip]]</div>
<div class="app" uk-tooltip="Stats">[img[./Assets/Assets/icons/stats.png][app-stats]]</div>
<div class="app" uk-tooltip="Debug">[img[./Assets/Assets/icons/bug.png][app-debug]]</div>
<div class="app" uk-tooltip="Credits">[img[./Assets/Assets/icons/credits.png][app-credits]]</div>
</div>
<</nobr>><<Scene house_pool>>
<<Say player "That is a nice pool. Perhaps I should check with ''Gillian'' if she packed my swimsuit.">>
<</Scene>>
<<run g.player.quests.set('pool_actions_unlock', 1)>><<Scene `g.player.where`>>
<<Page>>
<<Speech>>
- player: Hey Gillian
- gillian: Hey, ?player
- player: Do you know if when you packed you brought my swimsuit?
- gillian: "//I may have forgotten ...//"
- player: You may have?
- gillian: Nothing that you can't help me remember ... You owe me something, right?
- player: I sure do ... I will call you tonight.
- gillian: Not too late ... Or I will be sleeping ...
- player: Of course, Your Highness.
- gillian: //Silly//
<</Speech>>
<<Card>>
''You can call her from your room from 7pm to 11pm.''
<</Card>>
<<run g.player.quests.set('pool_actions_unlock', 2)>>
<</Page>>
<</Scene>>
<<LocationBg `g.player.where`>><<Scene `g.player.where`>>
<<Page>>
/* TODO: Use sexy profile here */
<<Profile gillian>>
<<Speech>>
- gillian: Hi, ?player.
- player: Come in.
<</Speech>>
<</Page>>
<<Page>><<SexScene gillian>><</Page>>
<<Page>>
<<Speech>>
- gillian: Not that I want you to use it now ... But here is your swim shorts.
- player: Thank you .... Little imp.
- gillian: ";-)"
<</Speech>>
<<run g.player.quests.set('pool_actions_unlock', 3)>>
<<run g.player.flags.set('swim_shorts', true)>>
<</Page>>
<</Scene>>
<<LocationBg `g.player.where`>><span class='content'>
<<LocationTitle '<b>Warning!</b>'>><br>
<<Card>>
This is a work of fiction reserved for an adult audience. <br>
All characters in the game are fictional and over the legal age.<br>
If you are easily offended this game might not be for you.
<</Card>>
<br>
<<Card>>
''Are you of legal age in your country and agree with the conditions above ?''<br>
[[No, I can't stand that|StoryBegin]]<br>
[[Yes, let's go on|intro_basics]]
<</Card>>
</span><<Card>>
<<LocationTitle "<strong>Thank You!</strong>">>
Thank you for playing Threads of Reality!
Before we can start let me go through the basics quickly.
[[Continue|intro_basics_1]]
<</Card>>
<<LocationBg "./Assets/Assets/locations/intro/scenay/hall.jpg">><<Scene intro_scenay>>
<<Page>>
<<Card>>
<<LocationTitle Scenes>><br>
Sometimes there are small scenes like this one. This usually means that one of the pages will give
you stats or maybe a scene.
<br><br>
Though a skip is available ''I really don't recommend skipping'' ...
<</Card>>
<</Page>>
<<Page>>
<<Card>>
<<LocationTitle Skills>><br>
Since you decide to hear my advice I've granted a small bonus to your character.
<br><br>
Many actions in the game increase your skills but often the amount isn't enough to bump an entire level.
They work exactly like XP works in RPGs but per skill (some RPGs do work like that).
<br><br>
''Whenever you gain a new level in a skill you will see notifications like those.''
<</Card>>
<<run g.player.stats.inc('oral', { points: 3 })>>
<<run g.player.stats.inc('sex', { points: 3 })>>
<</Page>>
<<Page>>
<<Card>>
<<LocationTitle 'Other Character Skills'>><br>
''Same for girls'' but on the right side.
<br><br>
Abby and Gillian are two characters that you are about to meet.
But <b>one last thing</b> we need to chat about before meeting them.
<</Card>>
<<run g.abby.stats.inc('oral', { points: 3 })>>
<<run g.gillian.stats.inc('oral', { points: 3 })>>
<</Page>>
<<Page>>
<<Card>>
<<LocationTitle "Vitals">><br>
Those 5 horizontal bars to the left are your vitals.<br><br>
''Keep them above 0 and everything will be fine''.
<</Card>>
<</Page>>
<<Page>>
<<Card>>
<<LocationTitle "Fatigue">><br>
But if they drop below 0 a 6th bar (fatigue) will show.
<br>
Fatigue increases really fast and decays slowly if you keep all four vitals high.
<br><br>
''At 25 it is a game over.''
<br><br>
And that is it.
<</Card>>
<<set G.player.data.fatigue = 5; UIBar.update()>>
<</Page>>
<<Page>>
<<Card>>
<<LocationTitle "Thanks">><br>
That's all folks.
<</Card>>
<<set G.player.data.fatigue = 0; UIBar.update()>>
<</Page>>
<</Scene>>
<<LocationBg "./Assets/Assets/locations/intro/scenay/hall.jpg">><<Card>>
The bar on the top has your financial information.
For now, there is just how much money you have in your account.
<</Card>>
<<LocationBg "./Assets/Assets/locations/intro/scenay/hall.jpg">>
<<set G.player.data.fatigue = 5>><<Card>>
After a long day at work, you are about to get home.
[[Open the door|intro_scenay_1]]<br>
<</Card>>
<<LocationBg "./Assets/Assets/locations/intro/scenay/hall.jpg">><<Scene>>
<<Page>>
<<Card>>You open the door to find Eva and her daughters waiting for you.<</Card>>
<<Profiles eva abby gillian>>
<<Speech>>
- eva: Hey, honey. How was your day?
- player: Tiresome, but okay. And yours? And you two won't talk to me?
- gillian: Silly!
- abby: "No, I won't. XD"
<</Speech>>
<<Card justify>>
Eva and the girls are my servants. This means that I provide for them and they do what I tell them to do.
Technically, I am their boss, but Eva is the closest I have to a mom. She has been guiding me since I've come to study in Scenay.
Perhaps even earlier ... But I don't have many memories of that time.<br><br>
<b>Even if I think that it was really cute to have all three of them waiting for me here something is off.</b>
<</Card>>
<<Speech>>
- player: It was really cool to have the three of you waiting for me. But who is going to tell me what is happening here?
- abby: //Looks to Gillian and then to Eva.//
- gillian: //Looks to Abby and then to Eva.//
- eva: You make me proud! Your father sent me a message. ''We are to go back to New Haven immediately''.
- player: From my father? After all this time? And why in such a rush?
- eva: "I don't know ... But our flight departs in a couple hours at 8pm. We have taken care of everything.
I know you are at a loss here but we need to get moving. I will share what I know during the flight."
- player: "Ok. I will take a [[shower|intro_scenay_shower][G.add_time({ minutes: 5 })]] first. Call a transport, please."
- eva: Sure, honey.
<</Speech>>
<</Page>>
<</Scene>>
<<LocationBg "./Assets/Assets/locations/intro/scenay/apt.jpg">><<Scene intro_scenay_ready>>
<<Page>>
<<Card>>Before entering the bathroom Abby comes to you.<</Card>>
<</Page>>
<<Page>>
<<Speech>>
- abby: Do you need any help? ...
- player: Help? We can always use an extra hand ... and more.
<</Speech>>
<</Page>>
<<Page>>
<<SexScene abby>>
<</Page>>
/* <<Page>>
<<Speech>>
- abby: Come!
<</Speech>>
[img[./Assets/Assets/characters/abby/scenay-kitchen/scenay-kitchen-001.jpg]]
<</Page>>
<<Page>>[img[./Assets/Assets/characters/abby/scenay-kitchen/scenay-kitchen-002.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/abby/scenay-kitchen/scenay-kitchen-003.jpg]]<</Page>>
<<Page>>
<<Speech>>
- player: Come to the other room!
<</Speech>>
[img[./Assets/Assets/characters/abby/scenay-kitchen/scenay-kitchen-004.jpg]]
<</Page>>
<<Page>>[img[./Assets/Assets/characters/abby/scenay-kitchen/scenay-kitchen-006.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/abby/scenay-kitchen/scenay-kitchen-005.jpg]]<</Page>>
<<Page>>
[img[./Assets/Assets/characters/abby/scenay-kitchen/scenay-kitchen-007.jpg]]
<<Speech>>
- player: Thanks Abby! Amazing as always.
- abby: My pleasure! Better hurry on that shower before mom finds us here.
<</Speech>>
<<run G.add_time({ minutes: 50 })>>
<</Page>> */
<</Scene>><<Scene>>
<<Page>>
<<Card>>After a rather quick shower ...<</Card>>
<<Profiles eva gillian abby>>
<<Speech>>
- eva: You certainly took your time.
- player: Sorry, Eva. Too much to process.
- eva: I am sure Abby has never been too much for you to process ...
- abby: Hey!
- gillian: //Looking to Abby.// You!
- abby: ...
- eva: Let's go.
- gillian: //(Whispering to You)// You <b>owe me a very pleasant night</b> ...
<</Speech>>
@@.trader-text-center;[[Go to the Airport|intro_scenay_airport][G.add_time({ minutes: 50 })]]@@
<</Page>>
<</Scene>>
<<LocationBg "./Assets/Assets/locations/intro/scenay/apt.jpg">><<LocationBg "./Assets/Assets/screens/documents.jpg">>
<<Card>>Time is short. So we must hurry to the boarding gate. But first, forms and security protocols.
<</Card>>
Name:
<<textbox "$player.name" "Methos" intro_flight_newhaven autofocus>>
Age: 28 | Profession: Engineer
@@.trader-text-center;
<<button "Embark" "intro_flight_newhaven">>
<<Time>><<Minutes 45>><</Time>>
<</button>>
@@<<Scene>>
<<Page>>
<<Speech>>
- player: Eva, do you have any idea why we are going back to New Haven? And in such a rush? Any idea at all?
- eva: I don't know but I am guessing ... We won't find good news.
- player: Sorry, Eva. But I am still at a loss.
- eva: "?player, you are still your father's heir. The message I received wasn't exactly from your father but
from one of your stepmothers, Brea."
- player: Eva, you better than anyone knows that I don't care. Last time I saw my father was over 20 years ago. I barely have any memories of him ...
- eva: And that is my failure. If you really are about to become the head of the family ... You will soon realize things are not so simple.
- player: Do you know where we're staying?
- eva: "At your family's Estate. Brea will be waiting for us at the airport when we arrive. It is a long flight.
Try to get some [[sleep|new_havens_airport][G.add_time({hours: 11, minutes: 30}); $player.water += 60; $player.food += 30]] we will be there by the morning."
<</Speech>>
<</Page>>
<</Scene>>
<<run g.player.quests.set('intro-001', 0)>>
<<LocationBg "./Assets/Assets/locations/intro/airplane-734363_1280.jpg">><<Scene>>
<<Page>>
<<Profiles brea>>
<<Speech>>
- brea: Eva! You look gorgeous! Looks like you are getting younger by the day!
- eva: Brea! You are a charmer! And what is this shape? I would kill for this body of yours!
- brea: And I would kill for those pillows!
<</Speech>>
<</Page>>
<<Page>>
<<Profiles player gillian abby>>
<<Speech>>
- brea: Are those the kids? Oh my ...
- eva: "Those are Gillian and Abby. They are my daughters. This gentleman here is ?player."
- brea: "?player! I would never tell!"
- player: Nice to meet, you.
- brea: Meet? No, darling. We've met many years ago.
- player: Sorry, I don't remember. If you don't mind we are tired from the travel.
- brea: "Of course! Let's go [[home|house_living_room][G.add_time({ minutes: 30})]]."
<</Speech>>
<<IncStat brea relationship 15 points>>
<</Page>>
<</Scene>>
<<run g.player.quests.set('intro-001', 1)>>
<<LocationBg new_havens_airport>><<Scene house_living_room>>
<<Page>>
<<Speech>>
- brea: Voilà, ?player! Welcome home. Your home.
<</Speech>>
<</Page>>
<<Page>>
<<Speech>>
- brea: "''Girls''! ?player is home!"
<</Speech>>
<<Card>>
Two girls come down the stairs and another two from a corridor that leads to internal service areas.
<</Card>>
<</Page>>
<<Page>>
<<Profiles ajay skie>>
<<Speech>>
- brea: ?player, those are my daughters Ajay and Skie.
- ajay: Hi, ?player. Nice to meet you.
- skie: Hey, dude.
- ajay: //(Speaking to Skie)// Behave! Don't embarrass us.
- player: Nice to meet you two.
<</Speech>>
<<IncStat ajay relationship 15 points>>
<<IncStat skie relationship 15 points>>
<</Page>>
<<Page>>
<<Profiles adah lindy>>
<<Speech>>
- brea: Those wonderful ladies are Adah and Lindy.
- brea: They keep the house in order ... Despite the best efforts of my sweet daughters.
- adah: Nice to meet you, Mr. Robinson.
- lindy: Welcome home, Mr. Robinson.
- player: Just ?player, please.
- brea: "You must be tired. The girls will have the breakfast done in the dining room in a moment. Feel free to explore the house.
If you want to take a shower the bathroom is on the 2nd floor."
- brea: "''Meet me here'' when you are done. I am sure you still have questions."
<</Speech>>
<<IncStat adah relationship 15 points>>
<<IncStat lindy relationship 15 points>>
<</Page>>
<</Scene>>
<<LocationBg house_living_room>>
<<run g.player.quests.set('intro-001', 2)>><<Scene house_player_room>>
<<Page>>
<<Speech>>
- player: Brea, can we talk?
- brea: Sure, honey.
- player: Where is my father?
- brea: ?player, he is dead. Has been gone for a while now. A lot happened in the last 20 years.
- player: Eva told me to expect something like that. For how long?
- brea: Almost 7 years now.
- player: 7 years?! So why all this asap bullshit?!
- brea: "?player, please. Your father did nothing without a reason. That was the worst of him. He planned everything
steps ahead. Just to start looking for you took us almost 4 years. And another 2 and a half actually looking."
- player: Why?
- brea: "Do you remember anything about your mom?"
<</Speech>>
<</Page>>
<<Page>>
<<Speech>>
- player: "Nope. Flashes. I am not even sure if they are real memories."
- brea: "Your mother's death was a bit of a mystery. Your father always suspected murder. The police never confirmed."
- player: "I know that a bit after that I went to study abroad."
- brea: "Yes. In short, your father became obsessed with security. We had to go through all those years just to find out how
to try to reach you. It was incredibly frustrating for us all."
- player: Sorry, Brea but nothing seems to make much sense. As far as I can tell, in reasonable families, 6 years old orphans aren't sent abroad away
from the only family he has left! Nor people are told their parents are gone 7 years after their death. So forgive me if I am finding it all ...
fucking madness.
- brea: ?player ... Please, believe me when I say that everything would have been a lot easier for us with you here.
- player: "Sorry for my venting, Brea. I know it isn't your fault. I barely know you ... I have no reason to doubt what you say but
everything feels so odd, to say the least."
- brea: "I understand, ?player. There is much that you don't know yet. ''But you are now the head of this family''. Everything your
father had is now yours. Including his servants ... That includes me, Eva, our daughters, and a lot more. You can at least
enjoy that a bit ..."
- brea: ... if you let me help you
<</Speech>>
<</Page>>
<<Page>><<SexScene brea>><</Page>>
/* <<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/003.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/004.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/005.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/006.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/007.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/008.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/009.jpg]]<</Page>>
<<Page>>[img[./Assets/Assets/characters/brea/scene-room-intro/010.jpg]]<</Page>> */
<<Page>>
[img[./Assets/Assets/characters/brea/scene-room-intro/011.jpg]]
<<Speech>>
- brea: Feeling better?
- player: Yeah
- brea: When you have a break ''meet me downstairs''. I'll take you to the family Holding.
<</Speech>>
<</Page>>
<</Scene>>
<<LocationBg house_player_room>>
<<run g.player.quests.set('intro-001', 3)>><<Scene>>
<<Speech>>
- brea: This is the Robinson Center. The family holding is in this building. Everything in this area, including the building, belongs to the holding.
- player: And I own the holding?
- brea: Exactly. The center has seen better days but now that the family has a patriarch again I trust it will go back to its prime.
- player: I can't see myself being called a patriarch ...
- brea: How about Master Robinson? [[Let's go up|intro_holding]].
<</Speech>>
<</Scene>>
<<LocationBg robinson_center>><<Scene intro_holding_2>>
<<Page>>
<<Card>>
As you enter the holding room you immediately see a young woman right in front of you. Looks like she was already
waiting for you and Brea.
<</Card>>
<<Profile jess>>
<<Speech>>
- jess: Welcome to Robinson Holding, Mr. Robinson! I am Jess. It is a pleasure to meet you, sir.
- player: Likewise, Jess. I am ?player.
- brea: Hello, Jess. Is Laura here?
- jess: Yes, ma'am. She is in the Lobby.
- brea: Thank you, Jess. We will be there if you need us.
- jess: Mr. ?player, if there is anything I can help with just let me know.
- player: Will do. Thank you, Jess.
<</Speech>>
<</Page>>
<<Page>>
<<Speech>>
- brea: Jess was the last servant that your father brought in. She can be a bit silly sometimes but that is refreshing. She is a good girl.
- player: She seemed all right ...
- brea: Maybe you were checking the wrong parts ...
- player: I don't know what parts you are mentioning ... but she sure had very nice parts ...
<</Speech>>
<<IncStat jess relationship 5 points>>
<</Page>>
<</Scene>>
<<LocationBg holding_entrance>><<Scene intro_holding_3>>
<<Profile laura>>
<<Speech>>
- brea: Hi, Laura!
- laura: Brea! Is this Mr. ?player?
- player: Yes, I am ?player.
- laura: Sorry, sir. I am delighted to meet you. If you need anything just let me know.
- player: Pleased to meet you too, Laura.
- brea: ?player, let's go to the office. There are a bunch of details that we have to run through.
<</Speech>>
<<IncStat laura relationship 5 points>>
<</Scene>>
<<LocationBg holding_office_lobby>><<Scene holding_office>>
<<Page>>
<<Speech>>
- brea: First things first. ?player, this is your office. If you agree Laura will be your personal secretary. As such, you
will find her usually in the lobby just outside the office. Jess will stay at the entrance greeting guests and answering
phones ... that sort of thing. I will be your Chief of Staff. That is how we have been running the company.
- player: Sure, I don't see any reason to change that. At least for now.
- brea: Then I will try my best to select what issues need your attention and what we can figure out between us.
- player: Ok.
<</Speech>>
<</Page>>
<<Page>>
<<Speech>>
- brea: ?player, by your father's rules. You have to actually work at the company to get your full compensation.
- player: Well, it is my own company anyway. I wasn't planning on slacking.
- brea: As if I would expect someone raised by Eva to ever think of slacking.
- player: Ha ha ... I am sure she would just appear here out of nowhere with a whip.
<</Speech>>
<</Page>>
<<Page>>
<<Speech>>
- brea: Every monday I will select projects that needs your attention. <b>You will only get your full salary
if those are done before next monday.</b> Otherwise, your salary get slashed to about 15% of the full value, currently,
18.000 Crowns.
- player: Ok, so I must focus on those ''required'' projects.
- brea: Do not worry. It is usually around 20hrs a week give or take. You should have enough time to pursue other interests.
And you can work either from here or from your office at home.
<</Speech>>
<</Page>>
<</Scene>>
<<LocationBg holding_office>>
<<run g.player.quests.set('intro-001', 4)>>- brea: This is the master bedroom. Plenty of room for you and ... company.
Astoria isn't Scenay. A big house like that with a few pretty girls inside is a tempting prize for some people.
Even he didn't know where you were. We thought that his instructions would lead to your telephone number or your address
but we only found a way to try to contact Eva.
Your safety has always been his number one priority. That is the reason he sent you to Scenay in the first place.
<<Card>><</Card>>
<<Speech>><</Speech>>
<<Card>>My son, for the last 20 years it has saddened my heart to keep you far from home.
But it has finally arrived the day that we can see each other again.
I've sent this letter to Eva knowing that she would handle the details. I've also sent
<</Card>>
After 20 years of studying abroad, you are finally heading home. Now that you
are finally getting back home you realize that you don't even remember much
about your family.
Eva, Abby, and Gillian have been your family over those years. Abby and Gillian are Eva's daughters.
And they love you.
<p>
Welcome to the Kingdom of Astoria!
This is a story of a prince and his deeds. Do you know his name?
</p>
<b>Press Enter on the box to continue or click [[here|story-intro-1]].</b>
<p>
<<= $player.name>> was a prince of the glorious Kingdom of Astoria. As such, after your coming of age, you receive a few privileges
but they come with expectations.
Since you are now an adult you will have to provide for yourself and yours. You will be appointed to a position
somewhere in the country. And you will find out where soon enough.
Like any young man you fancy your chances of appointed to the military. "That would be sick!", you used to say.
But sometimes the king has different plans ...
</p>
@@.trader-text-center;[[Continue|story-eva-intro][G.add_time({ minutes: 15})]]@@
<<footer>>
I am really close to the girls.
Or rather, my father provides for us all.<<button Return>><<return>><</button>>
<<Scene>>
<<LocationTitle 0.0.1>>
<div id="changelog">
<ul>
<li>Done <a class="tag">.ol</a>
<ul>
<li><b>Characters</b>
<ul>
<li>New Character: Abby</li>
<li>New Character: Adah</li>
<li>New Character: Ajay</li>
<li>New Character: Brea</li>
<li>New Character: Eva</li>
<li>New Character: Gillian</li>
<li>New Character: Lindy</li>
<li>New Character: Skie</li>
<li>New Character: Jess</li>
<li>New Character: Laura</li>
</ul>
</li>
<li><b>Events</b>
<ul>
<li>New Event at Cocoa Dreams with Ajay</li>
<li>New Event at Coffeeland with Eva and Brea</li>
<li>New Event at Estate with Skie</li>
<li>New Event at Estate/Living with Skie</li>
<li>New Event at Estate/Pool with Adah</li>
<li>New Event at Estate/Bathroom with Lindy</li>
<li>New Event at Estate/Office with Adah</li>
<li>New Event at Estate/Office with Eva</li>
<li>New Event at Holding/Your Office with Jess</li>
<li>New Event at Mighty Olympian with Abby</li>
<li>New Event at Robinson Park/Track with random</li>
</ul>
</li>
<li><b>Locations</b>
<ul>
<li>New Location: Art & History Hall</li>
<li>New Location: Best Bites</li>
<li>New Location: Brea's Canteen</li>
<li>New Location: Cocoa Dreams</li>
<li>New Location: Coffeeland</li>
<li>New Location: Estate</li>
<li>New Location: Estate/Backyard</li>
<li>New Location: Estate/Balcony</li>
<li>New Location: Estate/Bathroom</li>
<li>New Location: Estate/Dining Room</li>
<li>New Location: Estate/Garden</li>
<li>New Location: Estate/Kitchen</li>
<li>New Location: Estate/Living</li>
<li>New Location: Estate/Master Bedroom</li>
<li>New Location: Estate/Office</li>
<li>New Location: Estate/Pool</li>
<li>New Location: Estate/Upstairs</li>
<li>New Location: Mighty Olympian</li>
<li>New Location: Holding/Conference</li>
<li>New Location: Holding/Lobby</li>
<li>New Location: Holding/Your Office</li>
<li>New Location: Robinson Park</li>
</ul>
</li>
<li><b>Quests</b>
<ul>
<li>New Quest: Quests/ToR/Unlock Pool Actions</li>
<li>New Quest: Story/ToR/Intro</li>
</ul>
</li>
<li><b>System</b>
<ul>
<li><i>Apps</i>
<ul>
<li>Interactive Sex</li>
</ul>
</li>
<li><i>UI</i>
<ul>
<li>Use current location background during character interaction</li>
<li>Add Stores</li>
<li>Improvement of Contact Page</li>
</ul>
</li>
<li><i>Database</i>
<ul>
<li>Embed Yaml files</li>
<li>Read model extensions from Yaml files</li>
<li>Allow effects on transitions from triggers</li>
</ul>
</li>
<li><i>Events</i>
<ul>
<li>Add timers to cooldown events (or transitions in general)</li>
</ul>
</li>
<li><i>Widgets</i>
<ul>
<li>Define widgets to change the flow of scenes</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<</Scene>><<Card>>
I gave you food, money, women, power ... More than any man could've hoped for.<br>
''And yet you disappoint me''.<br>
Luckily, I am forgiving ... And you get to try again.
<</Card>>
<br>
@@.trader-text-center;
<<button 'To the beginning'>><<run Engine.restart()>><</button>>
@@
<<LocationBg "./Assets/Assets/screens/gameover.jpg">><<LocationTitle 'Game Statistics'>>
<span class="stats">
<span class="stats-data">Templates<br><<= _.keys(G.templates).length>></span>
<span class="stats-data">Characters<br><<= G.girls.length>></span>
<span class="stats-data">Locations<br><<= G.locations.length>></span>
<span class="stats-data">Actions<br><<= G.actions.length>></span>
<span class="stats-data">Items<br><<= _.keys(G._items).length>></span>
<span class="stats-data">Projects<br><<= _.keys(G.projects).length>></span>
<span class="stats-data">Financial Assets<br><<= _.keys(g.player.data.finances).length>></span>
</span>
<hr>
<<LocationTitle 'Current Progress'>>
<span class="stats">
<span class="stats-data">
<<ProgressBar Events `_.keys($player.counter.event).length` `_.keys(sttdb.data.event).length`>>
</span>
<span class="stats-data">
<<ProgressBar 'Quests Started' `_.keys($player.quests).length` `_.keys(sttdb.data.quest).length`>>
</span>
<span class="stats-data">
<<ProgressBar 'Quests Completed' `setup.countQuestsDone()` `_.keys(sttdb.data.quest).length`>>
</span>
</span><<Scene>>
<<Card>>
<<LocationTitle 'Characters'>>
<table id='credits-characters'>
<<for _k, _v range G.girls.filter((el) => el.meta.name != 'You')>>
<tr>
<td><<=_k+1>>.</td>
<td><<=_v.name>></td>
<td><<=_v.meta.actress>></td>
<td>site</td>
</tr>
<</for>>
</table>
<</Card>>
<<Card>>
<<LocationTitle 'Images - Sex Scenes'>>
Most images comes from Whoremaster's Packs -- Specially from CaptC
https://www.pornpics.com/
https://babesource.com/
https://www.definebabe.com/
<</Card>>
<<Card>>
<<LocationTitle 'Images - Backgrounds'>>
https://www.pexels.com/
https://pixabay.com/
https://unsplash.com/
<</Card>>
/* <<Card>><</Card>> */
<<Card>>
<<LocationTitle 'Phone Apps Icons'>>
<a href="https://www.flaticon.com/free-icons/growth" title="growth icons">Growth icons created by Freepik - Flaticon</a>
<a href="https://www.flaticon.com/free-icons/debug" title="debug icons">Debug icons created by Freepik - Flaticon</a>
<a href="https://www.flaticon.com/free-icons/change" title="change icons">Change icons created by Freepik - Flaticon</a>
<a href="https://www.flaticon.com/free-icons/attribute" title="attribute icons">Attribute icons created by IYAHICON - Flaticon</a>
<a href="https://www.flaticon.com/free-icons/under-construction" title="under construction icons">Under construction icons created by wanicon - Flaticon</a>
<</Card>>
<</Scene>><<LocationTitle 'Debug'>>
<button id="btnDownload" class="macro-button">Download Game Data</button>
<<done>>
<<script>>
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
$('#btnDownload').on('click', () => download('tor-data-dump.yaml', G.dump({ variables: variables(), temporary: temporary()})))
<</script>>
<</done>><<Image icons/warning.png>>@@#details;@@
@@.contacts;
<<for _i, _g range G.girls>>
<<set _girl to _g.profile()>>
<<contact _g>>
<</for>>
@@<<widget contact>><<nobr>>
<<set _img to _args[0].dialog()>>
<<set _id to "card-"+_args[0].data.id>>
<span class='contact-card'>
<img @src="_img" />
<p><<= _args[0].name>></p>
<progress @value="_args[0].getStat('relationship')" max="100"/>
@@.contact-action;Call@@
<<link Details>>
<span></span>
<<replace "#details" t8n>><<contact-details _args[0]>><</replace>>
<</link>>
</span>
/* <span @id="_id" @style='`background-image: url("${_img}")`'>
</span> */
<</nobr>><</widget>>
<<widget "contact-details">><<nobr>>
<span><<= _args[0].name>></span>
<<set _img to _args[0].profile()>>
<img @src="_img" style="height: 200px">
<</nobr>><</widget>><<widget GroupEntry>>
<<set _condition to G.evaluate(_args[0])>>
<<if _condition>><<include _args[1]>><</if>>
<</widget>>
<<widget Group container>>
<<set _parsed_content to _contents.split(" ")>>
<<set _count to _parsed_content.length>>
<<if _count gt 0>>
<span class="widget-location">
<span class="menu-header"><<= _args[0] || "Events">></span>
<span class="widget-location-ul">
<<for _val range _parsed_content>>
<span class="widget-location-li">_val</span>
<</for>>
</span>
</span>
<</if>>
<</widget>><<widget "Finances">>
<span class="bar">
<<FinancesGroup "clarity:wallet-line" $player.finances.savings.amount>>
<<FinancesGroup "bi:credit-card" $player.finances.creditcard.amount $player.finances.creditcard.credit>>
<<FinancesGroup "clarity:coin-bag-line" $player.finances.investment.amount>>
/* <<FinancesGroup "fluent-mdl2:financial-solid" 0>> */
</span>
<</widget>>
<<widget "FinancesGroup">>
<<set _tooltip to `title: ${setup.humanize_long(_args[1])}; pos: bottom`>>
<span class="bar-group" @uk-tooltip="_tooltip">
<iconify-icon inline @icon="_args[0]"></iconify-icon>
<<= setup.humanize(_args[1])>>
<<if _args[2]>>/ <<= setup.humanize(_args[2])>><</if>>
</span>
<</widget>>
<<widget Pay _args[0]>>
<<run g.player.removeAsset('savings', _args[0])>>
<<if _args[1]>><<Refresh>><</if>>
<</widget>><<widget "Projects">>
<span class="location-menu">
<span class="menu-header"><<= _args[0] || "Projects">></span>
<<for _idx, _val range $player.projects>>
<<if _val.work != _val.workDone>>
<span class="menu-group">
<span @id='_val.id' @data-project-id="_val.id" style="cursor: pointer;">
_val.name | <strong>_val.type</strong> | _val.workDone/_val.work hs
</span>
</span>
<<else>>
<span class="menu-group">
<span @id='_val.id'>
_val.name | <strong>_val.type</strong> | Complete!
</span>
</span>
<</if>>
<</for>>
<<done>>
<<script>>
$("[data-project-id]").on("mousedown", (ev) => {
let id = $(ev.currentTarget).attr('data-project-id');
g.player.workOnProject(id);
G.doTransition(_.assign(
g.player.getAction('work_on_project'),
{ from: passage(), target: passage() }
));
Engine.play(passage(), true);
})
<</script>>
<</done>>
</span>
<</widget>>
<<widget "WorkOnProject">>
<<script>>
G.doTransition(G.property('work_on_project').meta)
<</script>>
<</widget>><<widget hImageSequence>><<nobr>>
<<set _img_array to _args[0]>>
@@#scene-title;
<<link "Next">>
<<if _sequence eq 0>>
<<script>>
$("#scene-img").attr("src", State.temporary.img_array[State.temporary.sequence]);
State.temporary.sequence++;
setTimeout(function () {
$(".passage").animate({
scrollTop: $(".passage").prop('scrollHeight') - $(".passage").height()
}, 'slow');
}, Engine.minDomActionDelay);
<</script>>
<<else>>
<<if _sequence eq _args[0].length -1>>
<<replace "#scene-title">>[[Finish|_args[1]]]<</replace>>
<</if>>
<<script>>
$("#scene-img")
.fadeOut({complete: () => {
console.log('done');
$("#scene-img").attr("src", State.temporary.img_array[State.temporary.sequence]);
State.temporary.sequence++
}})
.fadeIn()
<</script>>
<</if>>
<</link>>
<<set _sequence to 0>>
@@
@@.scene;<img id='scene-img' src />@@
<</nobr>><</widget>>
<<widget VSequence>><<nobr>>
@@#sequence-stage;@@
@@#verticalScene;@@
@@#scene-title;
<<button "Next">>
<<if _sequence lt _stage.length>>
<<run console.log('running')>>
<<run $('#verticalScene').wiki(_stage.eq(_sequence).html())>>
/* $("#scene-img")
.fadeOut({complete: () => {
console.log('done');
$("#scene-img").attr("src", State.temporary.img_array[State.temporary.sequence]);
}})
.fadeIn(); */
<<script>>
setTimeout(function () {
$(".passage").animate({
scrollTop: $(".passage").prop('scrollHeight') - $(".passage").height()
}, 'slow');
}, Engine.minDomActionDelay);
State.temporary.sequence++;
<</script>>
/* <<replace "#scene-counter">><<=`${_sequence}/${_stage.length}`>><</replace>> */
<<if _sequence eq _stage.length>><<replace "#scene-title">><</replace>><</if>>
<</if>>
<</button>>
<<if def _args[1]>><<GoButton "Skip" _args[1]>><</if>>
/* <span id="scene-counter"></span> */
@@
<<set _sequence to 1>>
<<done>>
<<if ndef _stage>>
<<set _stage to $('#sequence-stage').wiki(Story.get(_args[0]).processText()).find('.slide')>>
<<run $('#verticalScene').empty().wiki(_stage.eq(0).html())>>
<</if>>
<</done>>
<</nobr>><</widget>><<widget "Card" container>><<nobr>>
<<set _align to _args[0] || "center">>
<<set _guid to G.guid()>>
/* <<run console.log(_contents.trim())>> */
<div class='card'>
<div @id='_guid' class='card-body' @style='"text-align: "+_align'>
<<= _contents.trim()>>
</div>
</div>
<</nobr>><</widget>>
<<widget "Speech" container>><<nobr>>
<div class='speech'>
<<for _val range G.parse_speech(_contents.split('-').join('\n-'))>>
<span class="speech-line">
<img @src="_val.image" class="speech-image"/>
<div class="speech-text">_val.name<hr /><span>_val.text</span></div>
</span>
<</for>>
</div>
<</nobr>><</widget>>
<<widget Say>><<nobr>>
<<set _g to G.char(_args[0])>>
<div class="speech-line">
<img @src="_g.dialog()" class="speech-image"/>
<div class="speech-text">_g.name<hr /><span>_args[1]</span></div>
</div>
<</nobr>><</widget>><<widget IncStat>><<nobr>>
<<set _stat_delta to { [_args[3]]: _args[2] }>>
/* <<set _old_stat to G.char(_args[1]).getStat(_args[0])>>
<<run G.char(_args[1]).incStat(_args[0], _stat_delta)>>
<<if _old_stat != G.char(_args[1]).getStat(_args[0])>>
<span class='positive'>Stat <<=_args[0]>> increased!</span>
<<else>>
<span class='info'>You will get there! Keep up the good work!</span>
<</if>> */
<<run G.char(_args[0]).incStat(_args[1], _stat_delta)>>
<</nobr>><</widget>>
<<widget IncVitals >>
<<run G.updateResources($player,
{ energy: _args[0] || 0, hygiene: _args[1] || 0, mood: _args[2] || 0, food: _args[3] || 0, water: _args[4] || 0}
); UIBar.update()>>
<</widget>><<widget Time container>><<nobr>>
<<set _time to { minutes: 0, hours: 0 }>>
<<= _contents>>
<<run G.add_time(_time)>>
<</nobr>><</widget>>
<<widget Minutes>><<nobr>>
<<set _time.minutes to _time.minutes += _args[0]>>
<</nobr>><</widget>>
<<widget Hours>><<nobr>>
<<set _time.hours to _time.hours += _args[0]>>
<</nobr>><</widget>><<widget SetTriggers>>
<<for _location_event_id,_location_event_trigger range sttdb.data.event>>
<<set _location_event_trigger.tid to `event.${_location_event_id}`>>
<<SetTransition _location_event_trigger>>
<</for>>
<<for _quest_id, _quest_chain range sttdb.data.quest>>
<<for _quest_step,_quest_trigger range sttdb.data.quest[_quest_id] >>
<<set _quest_trigger.tid to `quest.${_quest_id}[${_quest_step}]`>>
<<SetTransition _quest_trigger>>
<</for>>
<</for>>
<</widget>>
<<widget SetTransition>>
<<set _trigger to _args[0]>>
<<if _trigger.passage == passage()>>
<<set _trigger.id to passage()>>
<<switch _trigger.type>>
<<case "Trigger">>
<<Trigger _trigger>>
<<case "Event">>
<<Event _trigger>>
<<case "Quest">>
<<Quest _trigger>>
<<case "Action">>
<<Action _trigger>>
<<default>>
<<run console.log('Unknown TransitionTrigger Type: '+_trigger.type)>>
<</switch>>
<</if>>
<</widget>>
<<widget Section container>>
<<if ndef _loc_section[_args[0]] >>
<<set _loc_section[_args[0]] to []>>
<</if>>
<<set _section to _loc_section[_args[0]]>>
<<= _contents>>
<</widget>>
<<widget SectionEntry>>
<<run _section.push({ name: _args[1], target: _args[2], condition: !!_args[0]})>>
<</widget>>
<<widget Event>>
/* <<run _loc_section['Events'].push({ name: _args[1], target: _args[2], condition: !!_args[0]})>> */
<<run _loc_section['Events'].push(_args[0])>>
<</widget>>
<<widget Quest>>
<<run _loc_section['Quests'].push(_args[0])>>
<</widget>>
<<widget Action>>
<<run _loc_section['Actions'].push(_args[0])>>
<</widget>>
<<widget Trigger>>
<<run _loc_triggers.push(_.assign(_args[0],{ triggerDisplay: _args[1] || 'internal' }))>>
<</widget>>
<<widget TransitionLoop>>
<<set _transitions to setup.isResourceAvailable(_args[1])>>
<<if _transitions.length > 0>>
<<if _args[0] == "">>
<span class="menu-group">
<<= setup.renderMenuItems(_transitions, _args[2] == true)>>
</span>
<<else>>
<span class="location-menu">
<span class="menu-header"><<= _args[0]>></span>
<span class="menu-group">
<<= setup.renderMenuItems(_transitions, _args[2] == true)>>
</span>
</span>
<</if>>
<</if>>
<</widget>><<widget ReturnButton>>
<<set _id to G.guid()>>
<span class='trader-text-center'>
<button @id='_id' class="uk-button uk-button-secondary">Return</button>
</span>
<<done>>
<<run $(`#${_id}`).one("click", () => { Engine.play(previous()); }) >>
<</done>>
<</widget>>
<<widget GoButton>>
<<set _id to G.guid()>>
<<set _target to _args[1] || previous()>>
<span class='trader-text-center'>
<button @id='_id' class="uk-button uk-button-secondary">_args[0]</button>
</span>
<<done>>
<<run $(`#${_id}`).one("click", () => { Engine.play(temporary().target); }) >>
<</done>>
<</widget>>
<<widget RefreshButton>><<nobr>>
<<set _id to G.guid()>>
<span class='trader-text-center'>
<button @id='_id' class="uk-button uk-button-secondary">Return</button>
</span>
<<done>>
<<run $(`#${_id}`).one("click", () => { Engine.show() }) >>
<</done>>
<</nobr>><</widget>>
<<widget ActionButton container>>
<<set _buttonAction to G.property(_args[0])>>
<<set _buttonHost to G.property(passage())>>
<<set _buttonTransition to _buttonHost.prepareTransition(_buttonAction.meta, "Action")>>
<<capture _buttonTransition>>
<<button _args[1] _buttonTransition.target>>
<<run G.doTransition(_buttonTransition)>>
_contents
<</button>>
<</capture>>
<</widget>><<widget CharUI container>>
<<set _loc to G.property(passage())>>
<<LocationTitle>>
<<set _loc_section to {}>>
<<set _loc_section['Quests'] to []>>
<<set _loc_section['Events'] to _loc.events || []>>
<<set _loc_section['Actions'] to _loc.actions || []>>
<<set _loc_section['Objects'] to _loc.objects || []>>
<<set _loc_section['Characters'] to _loc.characters || []>>
<<set _loc_triggers to []>>
<<= _contents>>
@@.profile;[Img[_loc.profile()]]@@
<<SetTriggers>>
<<if _loc_triggers.length > 0 >>
<<set _event to _.sample(_loc_triggers)>>
<<if _event.type == 'internal'>>
/* <div class="story"><<include `_event.target` >></div> */
<br>
<<include `_event.target` >>
<<elseif _event.type == 'external'>>
<<goto `_event.target`>>
<</if>>
<<else>>
<<for _k,_v range _loc_section>>
<<TransitionLoop _k _v>>
<</for>>
<</if>>
<<GoButton Return $player.where>>
<<LocationBg `G.property($player.where).profile()`>>
<</widget>><<set $dialog_inventory to Dialog.setup('Inventory', 'inventory')>><<widget LocationUI container>>
<<set _loc to G.property(passage())>>
<<LocationTitle>>
<<if ndef _img>><<set _img to _args[0]>><</if>>
<<set _loc_section to {}>>
<<set _loc_section['Quests'] to []>>
<<set _loc_section['Events'] to _loc.events || []>>
<<set _loc_section['Actions'] to _loc.actions || []>>
<<set _loc_section['Objects'] to _loc.objects || []>>
<<set _loc_section['Characters'] to _loc.characters || []>>
<<set _loc_triggers to []>>
<<= _contents>>
<<SetTriggers>>
<<set _event to _.sample(G.filter_available(_loc_triggers, { $: variables(), _: temporary()}))>>
<<if _event >>
<<Log 'Event Triggered:' _event.target _event>>
<<run G.doTransition(_event)>>
<<if _event.triggerDisplay == 'internal'>>
<div class="triggered-event"></div>
<<include `_event.target` >>
<<elseif _event.triggerDisplay == 'external'>>
<<goto `_event.target`>>
<</if>>
<<else>>
<<for _k,_v range _loc_section>>
<<TransitionLoop _k _v>>
<</for>>
<<set _loc_parents to _loc.parents.filter((el) => !["new_haven"].includes(el.target))>>
<<set _loc_connects to _loc.connects || []>>
<<set _loc_inners to _loc.inners || []>>
<<if _loc_inners.length > 0 || _loc_connects.length > 0 || _loc_parents.length > 0 >>
<span class="location-menu">
<span class="menu-header">Locations</span>
<<TransitionLoop "" _loc_parents true>>
<<TransitionLoop "" _loc_connects>>
<<TransitionLoop "" _loc_inners>>
</span>
<</if>>
<</if>>
<<LocationBg>>
<<run G.updateLocation(passage());>>
<</widget>>
<<widget LocationClass>>
<<script>>
$(document).one(":passagerender", () => $(`passage-${passage()}`).addClass(_args[0]));
$(document).one(":passageinit", () => $(`passage-${passage()}`).removeClass(_args[0]));
<</script>>
<</widget>>
<<widget LocationTitle>>
<p class="location-title"><<print _args[0] || _loc.name>></p>
<hr>
<</widget>>
<<widget LocationBg>>
<<if def _args[0]>>
<<if Story.has(_args[0])>>
<<set _bg_img to G.property(_args[0]).profile()>>
<<else>>
<<set _bg_img to _args[0]>>
<</if>>
<<else>>
<<set _bg_img to G.property(passage()).profile()>>
<</if>>
/* <<Log 'BG:' _bg_img>> */
<<script>>
$(document).one(":passagerender", () => {$("body").css("background-image",`url(${State.temporary.bg_img})`)});
$(document).one(":passageinit", () => $("body").css("background-image", ""));
<</script>>
<</widget>><<widget Profiles>>
@@.profile;
<<for _i to 0; _i lt _args.length; _i++>>
<<set _parts to _args[_i].split('/')>>
<<set _img to g[_parts[0]]>>
<<if _parts.length > 1 >>
<<set _tag to _parts[1] >>
<<else>>
<<set _tag to 'profile' >>
<</if>>
<<if def _img>>
<img @src='_img.getImage(_tag)'>
<</if>>
<</for>>
@@
<</widget>>
<<widget Profile>>
@@.profile;
<<set _parts to _args[0].split('/')>>
<<set _girl to g[_parts[0]]>>
<<if _parts.length > 1 >>
<<set _tag to _parts[1] >>
<<else>>
<<set _tag to 'profile' >>
<</if>>
<<if def _girl>>
<img @src='_girl.getImage(_tag)' class='profile'>
<</if>>
@@
<</widget>>
<<widget Image>>
<<if _args[1]>>
@@.profile;<<= `[img[_args[0]]]`>>@@
<<else>>
@@.profile;<<= `[img['./Assets/Assets/'+_args[0]]]`>>@@
<</if>>
<</widget>><<widget Scene container>>
<<set _scene_script to []>>
<<set _scene_idx to 0>>
<<set _scene_hide_controls to false>>
<<set _scene_target to _args[0]>>
<<set _id to G.chance.guid()>>
<span id='scene-container' class='scene-container'>
<span id='scene-details' class='scene-details'></span>
<span id='scene' class='scene'>
</span>
</span>
<span id='scene-controls' class='scene-controls'>
</span>
<<done>>
<<replace "#scene">>
<<= _contents>>
<<if _scene_script.length > 0>>
<<= _scene_script[0].content>>
<<else>>
<<Log `'Deprecated: Support to Scenes with no slides will be removed. ('+passage()+')'`>>
<</if>>
<</replace>>
<<if _scene_script.length > 1>>
<<replace '#scene-details' transition>><p><<= _scene_idx+1>>/<<=_scene_script.length>></p><</replace>>
<<if !_scene_hide_controls>>
<<replace '#scene-controls' transition>>
<<button Next>><<SceneGoTo _scene_script[_scene_idx].target>><</button>>
<<if _scene_target>><<button "Skip" _scene_target>><</button>><</if>>
<</replace>>
<</if>>
<<script>>
$("#scene-container").on(':scene-turn-page', function() {
$('#scene-controls button')[0].click();
})
<</script>>
<<else>>
<<if !_scene_hide_controls>>
<<replace '#scene-controls' transition>>
<<if _scene_target>><<button Finish _scene_target>><</button>><</if>>
<</replace>>
<</if>>
<</if>>
<</done>>
<</widget>>
<<widget SceneClass>>
<<addclass '#scene' _args[0]>>
<<set _scene_class to _args[0]>>
<<capture _scene_class>>
<<done>>
<<run $('#scene-container').one(":scene-next-page", () => { $('#scene').removeClass(_scene_class); })>>
<</done>>
<</capture>>
<</widget>>
<<widget Page container>>
<<run _scene_script.push({content: _contents, id: _args[0], target: _args[1], isFinal: _args[2] })>>
<</widget>>
<<widget Choose container>>
<<set _options to []>>
_contents
/* Assumes something like lodash is loaded. Old random code would work fine. */
<<= _.sample(_options)>>
<</widget>>
<<widget OptionSc container>>
<<run _options.push(_contents)>>
<</widget>>
<<widget Decision container>>
<<set _option to []>>
<<set _scene_hide_controls to true>>
@@.decisions;
<<= _contents>>
<<for _i,_idx range _option>>
<<capture _i, _idx>>
<<button _idx.text>><<SceneGoTo _option[_i].target>><</button>>
<</capture>>
<</for>>
@@
<</widget>>
<<widget Option container>>
<<run _option.push({ content: _contents, text: _args[0], target: _args[1] })>>
<</widget>>
<<widget SceneGoTo>>
<<set _scene_hide_controls to false>>
<<if _args[0]>>
<<set _scene_idx to _scene_script.findIndex((el) => el.id == _args[0])>>
<<else>>
<<set _scene_idx++>>
<</if>>
<<if _scene_idx == -1>>
<<Log `"Scene page |"+_args[0]+"| not found."`>>
<</if>>
<<run $('#scene-container')[0].dispatchEvent(new Event(':scene-next-page'))>>
<<replace '#scene-details' transition>><p><<= _scene_idx+1>>/<<=_scene_script.length>></p><</replace>>
<<replace '#scene' transition>>
<<= _scene_script[_scene_idx].content>>
<<run $("#scene-container")[0].scrollTo(0,0)>>
<</replace>>
<<if !_scene_hide_controls>>
<<if _scene_idx == _scene_script.length - 1 || _scene_script[_scene_idx].isFinal>>
<<replace '#scene-controls' transition>>
<<if _scene_target>><<button Finish _scene_target>><</button>><</if>>
<</replace>>
<<else>>
<<replace '#scene-controls' transition>>
<<button Next>><<SceneGoTo _scene_script[_scene_idx].target>><</button>>
<<if _scene_target>><<button "Skip" _scene_target>><</button>><</if>>
<</replace>>
<</if>>
<</if>>
<</widget>><<widget SexScene>>
<<set _girl to G.property(_args[0] || previous())>>
<<set _sex_scene_target to _args[1]>>
<span class='sex-scene'>
@@.profile;<img id='scene-img' @src="_girl.profile()" />@@
<div id="app"></div>
</span>
<<SceneClass "sex-scene-mod">>
<<done>>
<<script>>
let app = G.apps.runApp('sex_scene');
app.mount('#app');
$("#app").one(":sex-scene-ended", function (ev) {
let target = temporary().sex_scene_target;
if(target) {
app.unmount();
Engine.play(target);
} else {
$("#scene-container")[0].dispatchEvent(new Event(":scene-turn-page"))
}
});
$("#scene-container").one(":scene-next-page", function (ev) {
app.unmount();
});
<</script>>
<</done>>
<</widget>><<widget "StoreUI" container>>
<<set _items to []>>
<<= _contents>>
<<set _items to _items.map((el) => G._items[el])>>
<div id="app-store"></div>
<<done>>
<<script>>
let app = G.apps.runApp('store');
app.provide('items', temporary().items);
app.mount('#app-store');
<</script>>
<</done>>
<</widget>>
<<widget "StoreItem">>
<<run _items.push(_args[0])>>
<</widget>><<widget Vitals>>
<div class="vitals">
<span class="vitals-header">Energy</span>
<span class="vitals-progress">
<span class="vitals-label"><<= Math.floor($player.energy)>></span>
<progress @value="g.player.data.energy" max="100"></progress>
</span>
<span class="vitals-header">Hygiene</span>
<span class="vitals-progress">
<span class="vitals-label"><<= Math.floor($player.hygiene)>></span>
<progress @value="g.player.data.hygiene" max="100"></progress>
</span>
<span class="vitals-header">Mood</span>
<span class="vitals-progress">
<span class="vitals-label"><<= Math.floor($player.mood)>></span>
<progress @value="$player.mood" max="100"></progress>
</span>
<span class="vitals-header">Food</span>
<span class="vitals-progress">
<span class="vitals-label"><<= Math.floor($player.food)>></span>
<progress @value="g.player.data.food" max="100"></progress>
</span>
<span class="vitals-header">Water</span>
<span class="vitals-progress">
<span class="vitals-label"><<= Math.floor($player.water)>></span>
<progress @value="g.player.data.water" max="100"></progress>
</span>
<<if $player.fatigue > 0>>
<span class="vitals-header">Fatigue</span>
<span class="vitals-progress">
<span class="vitals-label"><<= Math.floor($player.fatigue)>></span>
<progress @value="g.player.data.fatigue" max="25"></progress>
</span>
<</if>>
</div>
<<link Inventory>>
<<run Dialog.wiki(setup.renderInventory()).open($dialog_inventory)>>
<</link>>: <<= g.player.getStackCount()>>
<</widget>>
<<widget ProgressBar>>
<span class="vitals-header">_args[0]</span>
<span class="vitals-progress">
<span class="vitals-label"><<= Math.floor(_args[1])>></span>
<progress @value="_args[1]" @max="_args[2] || 100"></progress>
</span>
<</widget>><<widget footer>>
----
<<done>><<scrolldown>><</done>>
<</widget>>
<<widget session-link>>@@.trader-break-link;<<link _args[0] _args[1]>><</link>>@@<</widget>>
<<widget config>><<include "config">><</widget>>
<<widget Refresh>>
<<run Engine.show()>>
<</widget>>
<<widget Log>>
<<script>>
G.getLogger('ui')(...temporary().args)
<</script>>
<</widget>><div class="links">
[[Text|dev_area_text]]
[[Stats|dev_area_stats]]
[[Progress Bar|dev_progress_bar]]
</div><span class="positive">Positive Text</span>
<span class="info">InfoText</span>
This uses Nunjucks templates:
<<Teste>><<tEvent event_intro_brea>><</Teste>>
<<Say brea "Ahoy, Mate!">><<IncStat player fitness 2 units>><<script>>
Meter.add('healthBar', { height: '20px', label: 'Vital', text: 'width', full: 'blue', back: 'black'}, 0);
<</script>>
<<set $health to 0>>
<div class="links">
<<button dec>>
<<set $health to $health -= 0.1>>
<<run console.log($health)>>
<<updatemeter 'healthBar' $health>>
<</button>>
<<showmeter 'healthBar'>>
<<button inc>>
<<set $health to $health += 0.1>>
<<run console.log($health)>>
<<updatemeter 'healthBar' $health>>
<</button>>
</div><<widget Location container>>
<<set _loc to { connect: [], inner: [] }>>
<<= _contents>>
<<run G.createLocations(_loc)>>
<</widget>>
<<widget Name>>
<<set _loc.name to _args[0]>>
<</widget>>
<<widget Connect>>
<<run _loc.connect.push(_args[0])>>
<</widget>>
<<widget Inner>>
<<run _loc.inner.push(_args[0])>>
<</widget>>
<<widget LocationYAML container>>
<<run G.createLocations(G.parse(_contents))>>
<</widget>>