<<fadein 3s 0s>>
<p class="dead_end"> Dead End </p>
<</fadein>>
<<fadein 2s 3s>>
The story ends here. <<br>>
<</fadein>>
<<fadein 2s 5s>>
Not every tale has a happy ending, huh? <<br>>
<</fadein>>
<<fadein 2s 7s>>
But maybe this one has it. <<br>>
<</fadein>>
<<fadein 2s 9s>>
So let's try again, shall we? <<br>>
<</fadein>>
<<fadein 1s 11s>>
<<br 4>>
<div class="link-system">
[[Return back|previous()][$interface.menu_all = 1]]
</div>
<</fadein>><h2>Disclaimer</h2>
<<br>>
This game contains adult content intended for mature audiences only. <<br>>
By proceeding, you confirm that you are at least 18 years old (or the legal age of majority in your jurisdiction) <<br>>
and understand that the game may include explicit language, sexual content and other mature themes. <<br>>
See [[Additional game information|Info_Additional][[$temp.intro_page = 'menu']]] for planned genres and excluded content. <<br 2>>
All characters featured in romantic or sexual content are fictional adults aged 18 or older. <<br 2>>
The content of this game is purely fictional and meant for entertainment purposes. <<br>>
It does not depict or encourage real-life behavior. <<br>>
Player discretion is advised. <<br 2>>
Scene images are illustrated or AI-generated fiction and do not depict real people. <<br>>
Placeholder builds may include temporary third-party placeholder images planned to be replaced. <<br 2>>
The game is free to play. No payment is required. <<br>>
Optional supporter accounts on donation platforms are and will be added for supporting only in the future. <<br>>
Such builds will not include exclusive story content. They will be released one version ahead of public builds <<br>>
and will not include third-party placeholder media. <<br 2>>
If you are uncomfortable with such material, please do not proceed. <<br>>
The creator is not responsible for any distress that may arise from playing. <<br>>
If you have questions or believe your rights have been violated, contact the author via the social links on the index page. <<br 3>>
If you agree to the terms above and wish to proceed, click the button below: <<br 2>>
<div class="link-system">
[[Confirm and proceed|Menu_Settings][$temp.from_disclaimer = 1]]
</div><<fadein 2s>>
<p class="eoc-prologue ">END of the Version v0.3</p>
<</fadein>>
<div class="eoc-thanks-block ">
<<fadein 2s 2s>>
<p style="margin-bottom: 15px; margin-top: -10px;">Thank you for playing!</p>
<</fadein>>
<<fadein 2s 4s>>
<p>I hope you liked the new update.</p>
<p style="margin-bottom: 15px;">Yet, this is still an early version, so more is up to come!</p>
<p>Stay tuned for updates and more content soon!</p>
<</fadein>>
<<br>>
</div>
<<fadein 2s 6s>>
<div class="eoc-restart">
<button class="eoc-restart__button eoc-back-button" type="button">Back</button>
<button class="eoc-restart__button eoc-restart-button" type="button">Restart</button>
</div>
<</fadein>><<if $temp.intro_page == 'menu'>>
<h2> Dev notes: </h2> <<br>>
<div class="link-system">
<<link "General plans for the game" "Info_Additional">> <<set $temp.intro_page = 'plans'>> <</link>>
/*<<link "Love Interests" "Info_Additional">> <<set $temp.intro_page = 'li'>> <</link>> */
<<link "Genres" "Info_Additional">> <<set $temp.intro_page = 'genres'>> <</link>>
<<link "Media & Patreon" "Info_Additional">> <<set $temp.intro_page = 'media'>> <</link>>
<<link "About Builds" "Info_Additional">> <<set $temp.intro_page = 'builds'>> <</link>>
/* <<link "Mechanics" "Info_Additional">> <<set $temp.intro_page = 'mechanics'>> <</link>> */
</div>
<<br 5>>
<div class="link-system">
[[Return|index]]
</div>
<</if>>
<<if $temp.intro_page == 'plans'>>
<h2> Plans for the game: </h2>
This is planned as a story-driven, multi-choice game with skippable mini-games and some free roaming. <<br>>
All the major and most minor characters would have explicit scenes. <<br>>
Though a few scenes may be of fan-service or just voyeurism nature,
most of intimate scenes would exist as a support of the story-line, making it more spicy and edgy. <<br>>
So if you expect just a parade of explicit content, then this game is not for you. <<br>>
I want main characters to have their own stories and personalities, not just be meat dolls. <<br>>
<<br 2>>
<div class="link-system">
[[Back|Info_Additional][$temp.intro_page = 'menu']]
</div>
<</if>>
<<if $temp.intro_page == 'li'>>
<h2> Plans for Love Interests (LI) in the game </h2><<br>>
<b>Major love interests</b>: <<br>>
<b>Minor love interests</b>: <<br>>
<<br>>
All LI routes will be optional. You don't have to date anyone. <<br>>
Certain non-major characters may have intimate scenes with MC and not be LI, other characters may have scenes only without MC or may not have scenes at all.
<<br 3>>
<<br 2>>
<div class="link-system">
[[Back|Info_Additional][$temp.intro_page = 'menu']]
</div>
<</if>>
<<if $temp.intro_page == 'genres'>>
<h2> Plans for genres in the game </h2> <<br>>
<b>Genres currently relevant</b>: <<br>>
Male Protagonist, Text Based, Fantasy, Teasing, Vaginal Sex
<<br 2>>
<b>Genres planned to be added soon</b><i style="font-size: 0.8em;">(to some extent)</i>: <<br>>
Adventure, Romance, Spanking, Masturbation, Handjob, Virgin
<<br 2>>
<b>Genres that definitely won't be featured in the future</b>: <<br>>
Incest, Bestiality, Furry, Lactation, Necrophilia, Scat, Urination, Vore, No Sexual Content <<br 2>>
<b>Headpats, handholding and hugs - WILL NOT BE OPTIONAL(!)</b> <<br 2>>
<<br 2>>
<div class="link-system">
[[Back|Info_Additional][$temp.intro_page = 'menu']]
</div>
<</if>>
<<if $temp.intro_page == 'media'>>
Unfortunately I have zero talent for design and art. <<br>>
I honestly tried, and more than once. <<br 2>>
And for proper level of AI art, it would take too much time to set up everything and learn.<<br>>
I was deeply unsatisfied with the quality of AI images from version 0.1. And even that quality took too much time already to make them. <<br>>
I've tried a new approach, but the result is still not good enough for me and it took even more time. <<br 2>>
Also I've discovered that non-AI, 3rd party media is pretty risky to have as your main media in the project. <<br 2>>
So I've decided that I would need to try to hire someone who can do it better, or pay for decent AI tools, or both. <<br>>
Thus, I added a Patreon account 😐. <<br>>
I know I'm too early in the releases, but I've been working on the game for quite some time,
I just made a lot of reworks until I felt it was ready enough to start releasing. <<br>>
For now, I'll count added media as placeholders to be replaced by arts later and generated AI images as the default option. <<br>>
In case you don't want to fund, then just don't.<<br 2>>
So, to sum it up, I decided three things:<<br>>
<ul>
<li>First, <strong style="text-decoration: underline;">I will treat current media as placeholders</strong>. <<br>>
(I'll still try to add some for the previous game parts as well, as it looks too empty without any media.) <<br>></li>
<li>Second, <strong style="text-decoration: underline;">I'm starting a Patreon account</strong>. <br>
In case someone would be willing to fund, I will use those resources to improve the game. </li>
<li>Third,<i style="font-size: 0.8em;"> I'm not sure about this one completely</i>, but
<strong style="text-decoration: underline;">I will try to learn to do good AI arts anyway</strong>
<i style="font-size: 0.9em;">(preferably animations variants)</i>, but I guess it will closer to the later states of the game. <<br>></li>
</ul> <<br>>
I would be very glad and welcome anyone who could be willing to help me with: <<br>>
<ul>
<li>detailed workflows for generating good AI images, </li>
<li>AI generation for in-game scenes, </li>
<li>donated artwork, </li>
<li>bug testing, </li>
<li>text proofreading,</li>
<li>or paid/unpaid design and art work funded through Patreon.</li>
</ul>
You can contact me via published social links on the index page.
<<br 3>>
<div class="link-system">
[[Back|Info_Additional][$temp.intro_page = 'menu']]
</div>
<</if>>
<<if $temp.intro_page == 'builds'>>
<strong style="text-decoration: underline;">Placeholder builds</strong> could use temporary third-party placeholder media while I search for better long-term solutions. <<br>>
Because rights and platform rules can be strict, the public release will avoid third-party placeholder media and use only media I can safely distribute.<<br 2>>
<strong style="text-decoration: underline;">The Public Build</strong> is the main version intended for supported platforms. <<br>>
Its visuals use AI-assisted fictional/illustrated media and I will disclose AI-assisted media where required. <<br>>
Adult content will be labeled, age-gated or paywalled where a platform requires it. <<br>>
It will not use sexualized real-person photos, AI images meant to imitate real people, or media I do not have the right to share.<<br 2>>
A separate Placeholder Build may continue to exist only for places where that kind of temporary media is allowed. <<br>>
If there is any rights concern, or if a platform does not allow it, that build will be removed or kept unavailable there. <<br 2>>
AI media will remain part of the game. If I manage to create better AI visuals, I will replace older ones; if not, the current ones will stay. <<br>>
The goal is to keep the public version safe, transparent and platform-compatible. <<br 2>>
<strong style="text-decoration: underline;">Eartly Access</strong> builds will not include exclusive story content. <<br>>
They will be released one version ahead of public builds and will not include third-party placeholder media. <<br 2>>
Also I'm currently trying to find a sustainable way to release something every month. <<br>>
Creating a new Story Day means writing more than just the main route.
I also need to account for player choices and optional content such as
Penny's dates, Nancy's route, the Administration job, Sensei's training, bath scenes, marketplace events and other future story paths.
Preparing media for scenes also takes a lot time. <<br 2>>
Because of that, a major content update every month probably isn't realistic right now - but alternating between content and maintenance releases might be. <<br 2>>
This <strong style="text-decoration: underline;"> Maintenance Build </strong> would be like an update to previous released build. <<br>>
It could have things like:
dialogue improvements, text corrections, updates of media from image to animation, new media additing to existing scenes, small UI/UX improvements or fixes,
functionality fixes, migration fixes, files size reduction, media quality enhancments and small gameplay usability improvements. <<br>>
This is still an experiment, not a firm promise. I need to check my ability to provide and feedback for players before setting it as obligatory release structure.
<<br 3>>
<div class="link-system">
[[Back|Info_Additional][$temp.intro_page = 'menu']]
</div>
<</if>>
<<if $temp.intro_page == 'mechanics'>>
Describe mechanics, like 'inventory', 'mc alignment', 'mc behaviour', 'mini-games'
<<br 3>>
<div class="link-system">
[[Back|Info_Additional][$temp.intro_page = 'menu']]
</div>
<</if>><h2><i>Info </i></h2>
<<br>>
<<characters_cards>>
<<br 2>>
<div class="link-system">
[[Return back|$temp.previous]]
</div><h2><i>Inventory </i></h2>
<<br>>
<<showInventory>>
<<br 3>>
<div class="link-system">
[[Return back|$temp.previous]]
</div><h2><i>Objectives </i></h2>
<<br>>
<<showObjectives>>
<<br 3>>
<div class="link-system">
[[Return back|$temp.previous]]
</div><h2><i>Settings Menu </i></h2>
<<br>>
<p> Please select mode of media displaying: </p>
<<media_mode_selector>>
<p style="margin:0; height: 15px;">Please choose if you want to see shadowing:</p>
<span class="tip-small">(Shadowing is a black shadow that appears at the end of the passages when scroll)</span> <<br>>
<<listbox "$settings.shadowing" autoselect>>
<<option "No" 0>>
<<option "Yes" 1>>
<</listbox>> <<br 2>>
<<if $interface.debug_mode == 1>>
<<br 2>>
<<link 'Debug' 'Test_Room'>><</link>>
<</if>>
<<br 6>>
<<if $temp.from_disclaimer>>
<div class="link-system">
[[Apply and start|ScenePassage][$temp.from_disclaimer = 0; $temp.cur_scene = 'prologue.page1'; $interface.menu_settings = 1;]]
</div>
<<else>>
<div class="link-system">
[[Return back|$temp.previous]]
</div>
<</if>><div class="links-wrapper"><<show_dyn_links>></div>
<div id="shade"></div>
<div class="notification-container"></div><div class="commentary-wrapper">
<div id="commentary"></div>
</div>
<div id="game-modal" class="modal"></div>
<<if tags().includes("location")>>
<<if !tags().includes("special_passage")>>
<<location_img>>
<</if>>
<<= setup.getScene('location_dialogs__'+passage())>>
<</if>><div id="travelArea"></div>
<<script>>
renderRegionTravel("trade_road", "wagon");
<</script>><<= setup.getScene($temp.cur_scene)>><img class="game-logo sidebar-width--enlarge-1" src="media/icons/logo.png" alt="Hero's companion" title="Hero's companion logo"/><<if $interface.debug_mode == 1>>
<p style="word-break: break-word; margin-bottom: 8px;">
Cur. page:
<<if passage() !== "ScenePassage">>
"<<= passage()>>"
<<else>>
"$temp.cur_scene"
<</if>>
</p>
<</if>>
<<if $interface.training_day == 1>>
<p class="sidebar-row">Training day: <<= $counters.training_day >></p>
<</if>>
<<if $interface.timing == 1>>
<p class="sidebar-row"><<= $lists.time_naming[$time.period]>>
<<if $interface.debug_mode == 1>>
[<<= ($time.period)>>]
<</if>>
</p>
<</if>>
<<if $interface.money == 1>>
<p class="sidebar-row">
<img src="media/icons/money.png" class="sidebar_money" alt="money" title="Money"/> :
<<= $player.money >>
</p>
<</if>>
<<if $interface.training_day !== 1>><<br>><</if>>
<<if $interface.timing !== 1>><<br>><</if>>
<<if $interface.money !== 1>><<br 2>><</if>>
<<br>>
/* Leveling block */
<<if $interface.debug_mode == 1>>
<<run setup.drawLevelingDisplaying()>>
<<run setup.drawStatDisplaying()>>
<</if>>
<<br 5>>
<<set $interface.menu_all = ($interface.menu_inventory || $interface.menu_info == 1 || $interface.menu_settings == 1) ? 1 : 0>>
<<if $interface.menu_all == 1>>
<<if $interface.menu_info !== 1>><<br 2>><</if>>
<<if $interface.menu_settings !== 1>><<br 1>><</if>>
<nav id="menu" role="navigation">
<ul id="menu-core" class="menu-core-custom">
<<if $interface.menu_info == 1>>
<li data-menu="info"> <<link "Info" "Menu_Info">> <</link>> </li>
<</if>>
<<if $interface.menu_settings == 1>>
<li data-menu="settings"> <<link "Settings" "Menu_Settings">> <</link>> </li>
<</if>>
<<if $interface.menu_debug == 1>>
<li data-menu="debug"> <<link "Debug" "Test_Room">> <</link>> </li>
<</if>>
</ul>
</nav>
<<else>>
<<br 4>>
<</if>><<run setup.storyInit()>>[[Refresh|Test_Room]]
[[index page|index]]
<<link 'Tryout Paperwork' 'Tryout'>> <<run setup.runTryout('paperwork')>> <</link>>
<<link 'Tryout Archery' 'Tryout'>> <<run setup.runTryout('archery')>> <</link>>
<<link 'Tryout Beer' 'Tryout'>> <<run setup.runTryout('beer')>> <</link>>
<<link 'Tryout TBA' 'Tryout'>> <<run setup.runTryout('tba')>> <</link>>
<<link 'Add 450 xp' 'Test_Room'>> <<run setup.addXp(450)>> <</link>>
<<link 'Add 250 xp' 'Test_Room'>> <<run setup.addXp(250)>> <</link>>
<<link 'Add 100 xp' 'Test_Room'>> <<run setup.addXp(100)>> <</link>>
<<link 'Add 50 xp' 'Test_Room'>> <<run setup.addXp(50)>> <</link>>
<<link 'Add 30 xp' 'Test_Room'>> <<run setup.addXp(30)>> <</link>>
<<link 'Add 35 coin' 'Test_Room'>> <<run setup.changeProtectedValue('money', 35, 'add')>> <</link>>
<<link 'Add 3500 coin' 'Test_Room'>> <<run setup.changeProtectedValue('money', 3500, 'add')>> <</link>>
<<link 'recalculateLevelsT' 'Test_Room'>> <<run setup.recalculateLevels()>> <</link>>
<<link 'Region_Travel' 'Region_Travel'>> <</link>>
<<print setup.drawShop('mystery')>>
<<print setup.drawShop('gifts')>>
<<print setup.drawShop('potions')>><div id="tryout-root"></div>/* <div id="menu">
<label>Mod: <select id="mod">
<option value="medieval" selected>Fantasy</option>
<option value="apocalypse">Apocalypse</option>
<option value="modern">Modern</option>
</select></label>
<!-- Player controls (unchanged) -->
<label>Difficulty:
<select id="player-difficulty">
<option value="easy">Easy (45s + tip)</option>
<option value="normal" selected>Normal (30s + tip)</option>
<option value="hard">Hard (20s, no tip)</option>
</select>
</label>
<button id="start-btn">Start Game</button>
</div>
<div id="paperwork-game">
<div id="score">Score: 0</div>
<div id="timer">Time Left: 30s</div>
<div class="stamp-palette" id="stamp-palette"></div>
<div class="document-box" id="document-box"><div id="doc-text">Loading…</div></div>
<div id="result-message"></div>
<button id="continue-btn" onclick="Engine.play('NextPassage')">Continue</button>
</div> */<<widget 'narration'>> <<nobr>>
<div class="narration-block">
<img class="narration-icon narration-icon--hidden" alt="Narration" title="Narration">
<p class="narration-text" title="Narration">_args[0]</p>
</div>
<</nobr>> <</widget>>
<<widget 'narration_break'>> <<nobr>>
<div class="narration-break-block">
<p class="narration-break-text" title="Narration Break">_args[0]</p>
</div>
<</nobr>> <</widget>>
<<widget 'thought'>> <<nobr>>
<div class="thought-block">
<img src="media/icons/thought.png" class="thought-icon" alt="Thought" title="Thought"/>
<p class="thought-text">_args[0]</p>
</div>
<</nobr>> <</widget>>
<<widget 'system_note'>> <<nobr>>
<div class="system_note-block">
<h4 class="system_note-title">System Note: </h4>
<p class="system_note-text">_args[0]</p>
</div>
<</nobr>> <</widget>>
<<widget 'speech'>> <<nobr>>
<!-- args -->
<<set _id_name = _args[0]>>
<<set _text = _args[1]>>
<<set _alt_key = _args[2]>>
/* <<set _uppercase_name = _id_name.charAt(0).toUpperCase() + _id_name.slice(1)>> */
<<set _uppercase_devided_name = _id_name.split('_').map(p => p.charAt(0).toUpperCase() + p.slice(1)).join(' ')>>
<!-- 1) Determine display name -->
<<set _name = ''>>
<<if _id_name === $player.id_name && _alt_key && $player.alt_name?.[_alt_key]>>
<<set _name = $player.alt_name[_alt_key]>>
<<elseif _alt_key && $characters[_id_name]?.alt_name?.[_alt_key]>>
<<set _name = $characters[_id_name].alt_name[_alt_key]>>
<<elseif _id_name === $player.id_name>>
<<set _name = $player.name>>
<<elseif $characters[_id_name]?.name>>
<<set _name = $characters[_id_name].name>>
<<else>>
<<set _name = _uppercase_devided_name>>
<</if>>
<!-- 2) Build image filename -->
<<set _img_name = _alt_key
? (_id_name + '_' + _alt_key)
: _id_name
>>
<!-- only append portrait_type if this is the player and no _alt_key -->
<<if _id_name === $player.id_name && !_alt_key>>
<<set _img_name += $player.portrait_type>>
<</if>>
<!-- 3) Render HTML -->
<div
@class="'speech-block character ' + _id_name"
>
<img
@src="'media/portraits/' + _img_name + '.png'"
@class="'speech-img ' + _id_name"
@alt="_name"
/>
<div @class="'speech-content character ' + _id_name">
<div class="text-content">
<span @class="'speech-name character ' + _id_name">
<<= _name>>
</span>
<span class="speech-text">
_text
</span>
</div>
</div>
</div>
<</nobr>><</widget>>
<<widget 'br'>> <<nobr>>
<<set _br_num = $args[0] ?? 1>>
<<for _b=0; _b < _br_num; _b++>>
<br>
<</for>>
<</nobr>> <</widget>>
<<widget "relation_notification">> <<nobr>>
<<set _char = _args[0]>>
<<set _sign = _args[1]>>
<<set _amount = _args[2]>>
<<set _type = _args[3]>>
<<= setup.ntfy(_char, _sign, _amount, _type)>>
<</nobr>> <</widget>>
<<widget "toggle">> <<nobr>>
<<if $args[2] is true>>
<label class="toggle-button">
<<checkbox $args[1] false true checked>>
<span>$args[0]</span>
</label>
<<else>>
<label class="toggle-button">
<<checkbox $args[1] false true>>
<span>$args[0]</span>
</label>
<</if>>
<</nobr>> <</widget>>
<<widget "updatebar">>
<<silently>>
<<replace "#story-caption">>
<<include "StoryCaption">>
<</replace>>
<</silently>>
<</widget>>
<<widget "getTalk">>
<<nobr>>
<<fadein 1s>>
<<set _talk_idn = $args[0]>>
<<set $cur_talk = setup.getTalk(_talk_idn)>>
<<print $cur_talk>>
<</fadein>>
<</nobr>>
<</widget>>
<<widget "scene_event_link">> <<nobr>>
<<set _scene_text = _args[0]>>
<<set _scene = _args[1]>>
<<set _once = !!_args[2] ?? false>>
<<set _is_peek = !!_args[3] ?? false>>
<<set _event_group = ((passage() == 'ScenePassage' && $temp.cur_scene) ? $temp.cur_scene : passage()) + '#' + State.turns>>
<<set _class = 'link_event '>>
<<if _once>> <<set _class += 'link_event--once'>><</if>>
<<set _is_seen = setup.isSceneSeen(_scene)>>
<<if !($lists.event_links_appeared.includes(_scene))>>
<<set $lists.event_links_appeared.push(_scene)>>
<<if $temp.event_link_max_group != _event_group>>
<<set $counters.max_events_appeared += 1>>
<<set $temp.event_link_max_group = _event_group>>
<</if>>
<<if _is_peek && $temp.peek_link_max_group != _event_group>>
<<set $counters.peek_times_max += 1>>
<<set $temp.peek_link_max_group = _event_group>>
<</if>>
<</if>>
<<if !(_once && _is_seen)>>
<div @class=_class title="Event">
<img src="media\icons\scene.png" class="link_event__image link_event__image--non-hover">
<img src="media\icons\scene_hover.png" class="link_event__image link_event__image--hover">
<<capture _scene>>
<<link _scene_text 'ScenePassage'>>
<<set $temp.last_scene = $temp.cur_scene >>
<<set $temp.cur_scene = _scene>>
<<set $counters.events_seen +=1>>
<<if _is_peek>><<set $counters.peek_times += 1>><</if>>
<</link>>
<</capture>>
</div>
<</if>>
<</nobr>> <</widget>>
<<widget "scene_event_passage_link">> <<nobr>>
<<set _scene = _args[0]>>
<<set _scene_text = _args[1]>>
<<set _once = !!_args[2] ?? false>>
<<set _is_peek = !!_args[3] ?? false>>
<<set _event_group = ((passage() == 'ScenePassage' && $temp.cur_scene) ? $temp.cur_scene : passage()) + '#' + State.turns>>
<<set _is_seen = setup.isSceneSeen(_scene)>>
<<if _is_peek && !($lists.event_links_appeared.includes(_scene))>>
<<set $lists.event_links_appeared.push(_scene)>>
<<if $temp.peek_link_max_group != _event_group>>
<<set $counters.peek_times_max += 1>>
<<set $temp.peek_link_max_group = _event_group>>
<</if>>
<</if>>
<<if !(_once && _is_seen)>>
<<capture _scene>>
<<link _scene_text 'ScenePassage'>>
<<set $temp.last_scene = $temp.cur_scene >>
<<set $temp.cur_scene = _scene>>
<<if _is_peek>><<set $counters.peek_times += 1>><</if>>
/* <<set $lists.scenes_seen.push(_scene)>> */
<</link>>
<</capture>>
<</if>>
<</nobr>> <</widget>>
<<widget "show_dialog">> <<nobr>>
<<set _scene = _args[0]>>
<<set _once = !!_args[1] ?? false>>
<<set _is_seen = setup.isSceneSeen(_scene)>>
<<if !(_once && _is_seen)>>
<<capture _scene>>
<<= setup.getScene(_scene)>>
/* <<set $lists.scenes_seen.push(_scene)>> */
<</capture>>
<</if>>
<</nobr>> <</widget>>
<<widget 'portrait'>> <<nobr>>
<<set _character = _args[0]>>
<<set _desc = _args[1]>>
<<set _name = _args[2] ?? State.variables.characters[_character]?.name>>
<<set _alt_name = _args[3] ?? false>>
<<set _character_image = !(_alt_name) ? _character : _character+'_'+_alt_name >>
<div class="portrait__character-wrapper">
<p class="portrait__character">
<span @class="'portrait__character-name character '+_character">_name</span> <<if _desc >><span class="portrait__character-title"> – _desc</span><</if>>
</p> <<br>>
<img @src="'media/portraits/' + _character_image + '.png'" class="portrait-img" alt=_character title=_name>
</div>
<</nobr>> <</widget>>
<<widget 'player_portrait_picker'>> <<nobr>>
<<set _options_amount = _args[0] ?? 6>>
<div class="player-portrait-picker">
<img @src="'media/portraits/corin' + $player.portrait_type + '.png'" class="portrait-img player-portrait-picker__image" data-portrait-image="current" @alt="$player.name" @title="$player.name">
<div class="player-portrait-picker__thumbs">
<<for _i = 1; _i <= _options_amount; _i++>>
<button type="button" @class="'player-portrait-picker__thumb' + ($player.portrait_type == _i ? ' is-selected' : '')" @data-portrait-pick="_i" @data-portrait-value="_i">
<img @src="'media/portraits/corin' + _i + '.png'" class="player-portrait-picker__thumb-image" @alt="'Portrait ' + _i">
</button>
<</for>>
</div>
</div>
<</nobr>> <</widget>>
<<widget 'characters_cards'>> <<nobr>>
<div class="characters-wrapper">
<<for _char_id range Object.keys($characters)>>
<<set _char = $characters[_char_id]>>
<<if _char.orbed === 1>>
<<character_card _char>>
<</if>>
<</for>>
</div> <<br>>
<</nobr>> <</widget>>
<<nobr>><<widget 'location_img'>>
<<set _style = State.getVar('$settings.style_location_img')>>
<<if _style == 0>>
<!-- style 0 = off: no banner shown -->
<<else>>
<<set _location = passage()>>
<<set _time_of_day_style_list = {
0: "morning",
1: "morning",
2: "day",
3: "day",
4: "day",
5: "day",
6: "evening",
7: "evening",
8: "night"
}>>
<<set _time_of_day_style = _time_of_day_style_list[$time.period]>>
<<set _img_modifier = "">>
<<if _style == 2>><<set _img_modifier = "location-img--zoom-in">><</if>>
<<if _style == 3>><<set _img_modifier = "location-img--zoom-out">><</if>>
<<set _img_classes = `location-img location-time--${_time_of_day_style}` + (_img_modifier ? ` ${_img_modifier}` : ``)>>
<<set _banner_modifier = (_style == 2 || _style == 3) ? "location-banner--zoom" : "">>
<<set _banner_classes = "location-banner" + (_banner_modifier ? ` ${_banner_modifier}` : ``)>>
<div @class="_banner_classes">
<img
@src="`media/locations/${_location}.jfif`"
@class="_img_classes"
/>
</div>
<</if>>
<</widget>><</nobr>>
<<nobr>><<widget 'baths_scene_random'>>
<<fadein 3s 8s>>
<<set _scene_count = 3>> <!-- total number of possible scenes -->
<<set _all_scenes = []>>
<<for _i = 1; _i <= _scene_count; _i++>>
<<set _all_scenes.push('sensei_baths.scene_random.option' + _i)>>
<</for>>
<<set _unseen_scenes = _all_scenes.filter(s => !setup.isSceneSeen(s))>>
<<if _unseen_scenes.length > 0>>
<<set _bath_scene_to_show = _unseen_scenes.random()>>
<<else>>
<<set _bath_scene_to_show = 'sensei_baths.scene_random.option1'>> <!-- fallback -->
<</if>>
<<show_dialog _bath_scene_to_show>>
<</fadein>>
<</widget>><</nobr>>
<<nobr>><<widget 'media_mode_selector'>>
<<if $settings.media_mode > 1>><<set $settings.media_mode = 1>><</if>>
<<listbox "$settings.media_mode" autoselect>>
<<option "No media" 0>>
<<option "AI media" 1>>
<</listbox>> <<br 2>>
<</widget>><</nobr>><h1 id="index-title">Hero's companion</h1>
<i class="index-tagline">A story about trials, loyalty, doubts and getting exiled from the Hero's party... probably.</i>
<h3 class="index-section">Premise</h3>
<p>A young man stands at a crossroads, with trials of will and passion ahead that will test both him and the hero's party.</p>
<p class="index-premise-gap">The destiny of many may lie in his hands. What will become of them at the end of the journey?</p>
<p>Take control and make choices that will shape the path of their fates and determine how the story unfolds!</p>
<<br>>
<h3 class="index-section">Game Info</h3>
<p>Current Version: 0.3</p>
<ul class="index-list">
<li>Main Story: Day 1</li>
<li>Free-roam city and tavern navigation</li>
<li>Time-of-day activity flow</li>
<li>Choice tracking about MC behavior stat feature</li>
</ul>
<p>Next Update:</p>
<ul class="index-list index-list--compact">
<li>Main Story: Day 2</li>
<li>UI/UX updates</li>
<li>Tryout system</li>
</ul>
<h3 class="index-section">Release Notes</h3>
<details class="index-release-notes">
<summary>
<span class="index-release-notes__arrow"></span>
<span class="index-release-notes__title">Version 0.3</span>
<span class="index-release-notes__hint">Click to expand</span>
</summary>
<div class="index-release-notes__body">
<p><strong>Moto</strong></p>
<p>Explore Still Waters on your first training day: <<br>>
meet Penny, visit Administration, begin Sensei's examinations and deal with party tension. <<br>>
New free-roam navigation, time-of-day and choice-tracking systems. <<br>>
Inventory, shops, gifting, objectives and mini-games coming in future updates.</p> <<br>>
<p><strong>Story / Content</strong></p>
<ul class="index-list">
<li>Added the full Day 1 story path.</li>
<li>Added the start of the tavern side route with Nancy.</li>
</ul>
<p><strong>Locations</strong></p>
<ul class="index-list">
<li>Added Tavern locations: Bedroom, Hall, Corridor and Outside.</li>
<li>Added City locations: Entrance, Center, Road, Marketplace, Marketplace Shops, Westroad Street, Parchment Lane and Administration.</li>
<li>Added Penny's Shop locations: Entrance, Inside and Backrooms.</li>
<li>Added Sensei Mansion locations: Entrance, Yard, Headroom, Archery Grounds, Combat Room and Baths.</li>
</ul>
<p><strong>UI / UX</strong></p>
<ul class="index-list">
<li>Added blocked links: unavailable choices show MC's inner reaction instead of dead links.</li>
</ul>
<p><strong>Technical / Gameplay</strong></p>
<ul class="index-list">
<li>Added free-roam navigation with dynamic links.</li>
<li>Added a time-of-day system where activities consume periods.</li>
<li>Added MC behavior stats: confidence, team spirit, cautiousness and related traits tracked from choices (influence certain dialogues and choices).</li>
</ul>
</div>
</details>
/* <h3 class="index-section">Game Info</h3>
<p>Current Version: 0.2</p>
<p><strong>Update Summary</strong></p>
<ul class="index-list">
<li>Prologue update</li>
<li>UI/UX updates</li>
<li>Event tracking feature</li>
<li>Prepared foundations for future gameplay systems</li>
</ul>
<p>Next Update:</p>
<ul class="index-list index-list--compact">
<li>Main Story: Day 1</li>
<li>Free-roam city and tavern navigation</li>
<li>Time-of-day activity flow</li>
<li>Choice tracking about MC behavior stat feature</li>
</ul>
<h3 class="index-section">Release Notes</h3>
<details class="index-release-notes">
<summary>
<span class="index-release-notes__arrow"></span>
<span class="index-release-notes__title">Version 0.2</span>
<span class="index-release-notes__hint">Click to expand</span>
</summary>
<div class="index-release-notes__body">
<p><strong>Story / Content</strong></p>
<ul class="index-list">
<li>Updated the Prologue with revised dialogue, character introductions and scene flow.</li>
<li>Introduced Nancy as a new character planned for a separate optional branch.</li>
<li>Prepared images for main locations.</li>
<li>Added location banners to key Prologue moments.</li>
<li>Added pages with additional game information (to be updated with new releases).</li>
</ul>
<p><strong>UI / UX</strong></p>
<ul class="index-list">
<li>Added inline portrait selection during character creation.</li>
<li>Redesigned speech, narration, thought and system-note widgets.</li>
<li>Styled links replaced old plain link blocks.</li>
<li>Made small adjustments to Twine-native components.</li>
</ul>
<p><strong>Technical / Gameplay</strong></p>
<ul class="index-list">
<li>Added scene and event tracking: seen scenes, peek counters and one-time events (can influence certain dialogues).</li>
<li>Added save versioning with the current save version set to 0.1 and a migration scaffold in compatibility functions.</li>
<li>Updated relation notifications and the party relations screen with fixes and small updates.</li>
<li>Added error catching and validation (for easier bug catching and player support).</li>
<li>Systematized scene naming.</li>
<li>Improved fading functionality (required for future UX updates).</li>
<li>Added encapsulation for important variables (protecting them from direct SugarCube State manipulation through the console).</li>
<li>Prepared foundations for future features: inventory, shops, gifting, tryouts, sound system, objectives and more.</li>
</ul>
</div>
</details> */
<<br>>
<h3 class="index-section">📢 Join the Community</h3>
<p class="company-intro">
I am <span class="company-intro__name">keksX4<img src="media/icons/company_logo.svg" class="company-intro__logo" alt="Company logo" title="keksX4"/></span>,
the developer. Your thoughts and feedback shape this game's future.
</p>
<p class="index-discord">💬 <a href="https://discord.gg/TEy6n3A5gE" target="_blank">Join our Discord</a> - Share feedback, discuss your ideas and opinions.</p>
/* <a href="https://keksx4.itch.io" target="_blank">Play on Itch.io</a> - Follow for new public releases and patch notes. */
<p>Your feedback is very welcome!</p>
<<br>>
<p>[[Additional game information|Info_Additional][[$temp.intro_page = 'menu']]] - plans, genres and more.</p>
<<br>>
<div class="link-system index-proceed">
[[Proceed|Disclaimer]]
</div>