JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
<div class="about-page"> <div class="about-header"> <h2>About the Game</h2> <li>"Corpse City 2037" is a browser adventure game about survival in a post-apocalyptic world. After years of isolation in your house bunker, you finally emerge to face the new reality. The world has plunged into anarchy. The remnants of civilization are scattered settlements of surviving women trying to survive among the ruins of the former world. As one of the few remaining men, you occupy a unique position in this new society. Game features:</li> <li>Open world - explore city ruins, abandoned complexes, and wild territories Survival system - gather resources, create shelter, and fight for your place in this new world Branching plot - your decisions will affect the development of the story and relationships with different factions Relationship system - build connections with characters you meet, from hostility to alliance Character development - improve your hero's skills and abilities as you progress through the game</li> <li>Uncover the secrets of this world and decide what role you want to play in humanity's future. Will you become the savior of civilization, a ruthless ruler, or simply try to survive day by day? Warning: the game is intended exclusively for adult audiences (18+) and contains content of an appropriate nature.</li> <a class="back-button" data-passage="MainMenu"> <span class="back-icon">←</span> Return to Menu </a> </div> </div>
<style> body { background: #121212; color: #e0e0e0; font-family: 'Courier New', monospace; line-height: 1.6; text-shadow: 0 0 5px rgba(255, 255, 255, 0.3); } .dialogue { background: #1e1a24; border-left: 4px solid #9922cc; padding: 10px; margin: 10px 0; border-radius: 5px; box-shadow: 0 2px 10px rgba(153, 34, 204, 0.4); } .dialogue span { display: block; margin: 5px 0; } .choice-container { display: flex; justify-content: center; gap: 15px; margin: 20px 0; } .choice-container .button { padding: 10px 20px; background: #2a1e33 !important; color: #ffffff !important; text-decoration: none; border: 2px solid #9922cc !important; border-radius: 5px; transition: all 0.3s; box-shadow: 0 0 8px rgba(153, 34, 204, 0.4); text-shadow: 0 0 3px rgba(255, 255, 255, 0.5); } .choice-container .button:hover { background: #3d2854 !important; transform: scale(1.05); box-shadow: 0 0 15px rgba(153, 34, 204, 0.7), 0 0 30px rgba(153, 34, 204, 0.4); text-shadow: 0 0 5px #ffffff; } .reward { color: #22ff88; font-weight: bold; text-shadow: 0 0 8px rgba(34, 255, 136, 0.6); animation: glow 3s infinite; } @keyframes glow { 0% { text-shadow: 0 0 5px rgba(34, 255, 136, 0.6); } 50% { text-shadow: 0 0 15px rgba(34, 255, 136, 0.8), 0 0 30px rgba(34, 255, 136, 0.4); } 100% { text-shadow: 0 0 5px rgba(34, 255, 136, 0.6); } } </style> <img src="assets/NPC/valerie/valerie.png" alt="Valerie" class="character-image"> <<if !$player.met_valerie>> <<set $player.met_valerie = true>> <<set $player.valerie_dialogue_state = "initial">> <div class="dialogue"> <span>*You enter the administration building. A stern woman, Valerie, leader of this settlement, eyes you sharply.*</span> <span>"New face, huh? I'm Valerie. We survive here, but it’s tough. Got anything to offer?"</span> </div> <div class="choice-container"> <a class="button" onclick="SugarCube.State.variables.player.valerie_dialogue_state = 'ask_work'; SugarCube.Engine.show()">Ask for work</a> <a class="button" data-passage="Settlement">Leave</a> </div> <<elseif $player.valerie_dialogue_state is "ask_work">> <div class="dialogue"> <span>*Valerie leans forward.*</span> <span>"Work, huh? We always need fresh meat to feed the settlement and slaves to keep things running. Interested?"</span> </div> <<if !$player.meat_quest_active>> <div class="dialogue"> <span>"Quest: Bring 20 units of raw meat. Reward: 100 caps."</span> <span> <a class="button" onclick="SugarCube.State.variables.player.meat_quest_active = true; SugarCube.State.variables.player.quests.push('Bring 20 Meat'); SugarCube.Engine.show()">Accept Meat Quest</a> </span> </div> <</if>> <<if !$player.slave_quest_active and $SlaveQuest_done == 0>> <div class="dialogue"> <span>"Quest: Capture and deliver two slaves. Reward: 500 caps and a shotgun."</span> <span> <a class="button" onclick="SugarCube.State.variables.player.slave_quest_active = true; SugarCube.State.variables.player.quests.push('Capture 2 Slaves'); SugarCube.Engine.show()">Accept Slave Quest</a> </span> </div> <</if>> <div class="choice-container"> <a class="button" onclick="SugarCube.State.variables.player.valerie_dialogue_state = 'initial'; SugarCube.Engine.show()">Back to Valerie</a> <a class="button" data-passage="Settlement">Leave</a> </div> <<elseif $player.meat_quest_active or $player.slave_quest_active>> <div class="dialogue"> <span>*Valerie looks at you expectantly.*</span> <span>"Back already? Got what I asked for?"</span> </div> <<if $player.meat_quest_active and $player.Raw_meat gte 20>> <div class="dialogue"> <span>*You hand over 20 units of raw meat.*</span> <span>"Good haul. This’ll feed us for a while." *Valerie hands you 100 caps.*</span> <span class="reward">*Received 100 caps.*</span> <<set $player.Raw_meat -= 20>> <<set $player.Caps += 100>> <<set $player.meat_quest_active = false>> <<set $player.quests = $player.quests.filter(quest => quest !== "Bring 20 Meat")>> </div> <<elseif $player.meat_quest_active>> <div class="dialogue"> <span>"Still need that meat. At least 20 units. Keep hunting."</span> </div> <</if>> <<if $player.slave_quest_active and $player.slaves gte 2>> <div class="dialogue"> <span>*You deliver two captured slaves to Valerie.*</span> <span>"Impressive work. They’ll serve the settlement well." *She hands you a bag of caps and a shotgun.*</span> <span class="reward">*Received 500 caps and a Shotgun.*</span> <<set $player.slaves -= 2>> <<set $player.Caps += 500>> <<set $player.Shotgun +=1>> <<set $player.slave_quest_active = false>> <<set $SlaveQuest_done = 1>> <<set $player.quests = $player.quests.filter(quest => quest !== "Capture 2 Slaves")>> </div> <<elseif $player.slave_quest_active>> <div class="dialogue"> <span>"Where are the slaves? I need two. Don’t waste my time."</span> </div> <</if>> <div class="choice-container"> <a class="button" onclick="SugarCube.State.variables.player.valerie_dialogue_state = 'ask_work'; SugarCube.Engine.show()">Ask for more work</a> <a class="button" data-passage="Settlement">Leave</a> </div> <<else>> <div class="dialogue"> <span>*Valerie nods as you approach.*</span> <span>"Got business? We’re always looking for capable hands."</span> </div> <div class="choice-container"> <a class="button" onclick="SugarCube.State.variables.player.valerie_dialogue_state = 'ask_work'; SugarCube.Engine.show()">Ask for work</a> <a class="button" data-passage="Settlement">Leave</a> </div> <</if>>
<div class="scene-content"> <div class="scene-text"> <h2>Accepting Alex</h2> <<set $player.alex_status = "ally">> <<set $player.survivors_met ++>> <p> You agree to take her with you. Alex smiles gratefully and promises to be helpful. </p> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return home</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p>You recall Alex from her task. She is now available for other interactions.</p> <<set $player.alex_work = "none">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<<include "Dialoque_style">> <div class="scene-content"> <div class="scene-text"> <div class="character-description"> <div class="character-info-block"> Alex is a new survivor, desperate and ready to do anything for survival, now facing a new reality under your control. </div> </div> </div> <div class="scene-dialogue"> <<set $player.alex_status = "slave">> <<set $player.survivors_met ++>> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Alex)</span> (hopefully) I will do anything you say, just help me. I am ready to do anything to survive. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> (smiling) Good. You will be my slave, and you will obey all my commands. If you comply, I may show you mercy. But if you try to escape or disobey, you will face my wrath. You are mine now, and you will serve me if you want to survive in this world. I've seen many like you without me, you will die on your first outing. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Alex)</span> (crying) I'm just trying to survive... </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> Your wishes no longer matter. You are in my power, and you will do as I say. You are my slave now, and you must obey. If you comply, I may provide you with food and protection. But if you rebel, you will face my wrath. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Alex)</span> (crying) Please, give me a chance. I will do everything you say, I am sufficiently disciplined. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> I'm glad you understand your situation, but be ready for the fact that from now on your life is in my hands and it will be as I say, understood? </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Alex)</span> (confidently and disciplined) Yes, I understand everything. This world is broken, and I can no longer survive here alone, no shelter, no hope, every day is the last, fights with mutants and bandits for a piece of rotten meat. I will do everything you want for shelter and peace. </div> </div> </div> <div class="choice-container"> <h3>What will you do next?</h3> <div style="display: block; width: 100%;"> <a class="button dark-choice" data-passage="House_Life">Return home</a> </div> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Encounter with Alex</h2> <p> Deep in the supermarket, you find a young girl trapped between the shelves. She looks exhausted and frightened. </p> <p> "Please, help me! I haven't eaten or drunk anything for two days... I'll do anything, just get me out of here!" </p> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Alex_Enslave">Offer to make her a slave</a> <a class="button" data-passage="Alex_Help">Help her</a> <a class="button" data-passage="Alex_Leave">Leave her to die</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <p class="narrator-text">Alex pauses for a moment, searching for the right words.</p> <div class="alex-dialog"> <<if $player.alex_status == "enslaved">> <p>"Honestly? I never thought I would end up in this position. But... it's strange to admit, I feel a certain... safety. Although the price for it is high. At least I know I'll survive until tomorrow."</p> <<else>> <p>"I need time to recover from everything that has happened. Losing my group was hard... But I'm grateful for your help and shelter. I hope I can be useful."</p> <</if>> </div> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="Alex_Talk_Menu">Return to the conversation</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Helping Alex</h2> <p> You help the girl get free. She introduces herself as Alex and explains that she lost her group a few days ago. </p> <p> "I... I'm not sure I can survive on my own. Can... can I come with you?" </p> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Alex_Accept">Accept her</a> <a class="button" data-passage="Alex_Reject">Refuse</a> </div> </div>
<div class="scene-content"> <img src="assets/alex/alex.png" alt="Alex" class="character-image"> </div> <div class="character-info"> <h3>Alex</h3> <p>Status: <<if $player.alex_status == "slave">>Slave<<else>>Ally<</if>></p> <<if $player.alex_work == "scavenging">> <p class="work-status">Current task: Scavenging for supplies</p> <</if>> <div class="interaction-menu"> <a class="button light-choice" data-passage="Alex_Talk_Menu">Talk</a> <<if $player.alex_status == "slave" && $player.alex_work != "scavenging">> <a class="button dark-choice" data-passage="Alex_Service">Have sex</a> <</if>> <a class="button neutral-choice" data-passage="Alex_Work">Assign a task</a> <a class="button back-btn" data-passage="House_Life">← Back</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Fate of Alex</h2> <<set $player.alex_status = "dead">> <p> You decide to leave her to her fate. Her cries for help gradually fade into the distance... </p> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return home</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <p class="narrator-text">Alex takes a deep breath, gathering her thoughts.</p> <div class="alex-dialog"> <p>"I worked in the police, I was a detective. When the epidemic started, we tried to maintain order, help people... But the system quickly fell apart. My colleagues became fewer and fewer."</p> <p>"In the last few months, I was part of a group of survivors. We stuck together, protected each other. But a week ago, we were attacked by bandits. I was the only one who managed to escape... And if it weren't for you, I wouldn't have survived in that supermarket."</p> </div> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="Alex_Talk_Menu">Return to the conversation</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Rejecting Alex</h2> <<set $player.alex_status = "rejected">> <p> You refuse her. Alex looks heartbroken but nods in understanding and walks away. </p> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return home</a> </div> </div>
<<if $player.stamina < 10>> <div class="scene-content"> <div class="warning-message">You do not have enough stamina for sexual actions!</div> <div class="choice-container"> <a class="button back-btn" data-passage="Alex_Interact">← Back</a> </div> </div> <<else>> <div class="scene-content"> <div class="scene-text"> <p> Alex obediently waits for your orders, ready to fulfill any of your desires. </p> </div> <div class="video-container"> <video id="alexServiceVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/alex/blowjob (1).webm" type="video/webm"> </video> </div> <div class="service-menu"> <div class="menu-title">Choose an action:</div> <div class="service-buttons"> <center> <a class="service-btn" id="alexBlowjobBtn">Blowjob</a> <a class="service-btn" id="alexVaginalBtn">Vaginal</a> <a class="service-btn" id="alexAnalBtn">Anal</a> <a class="service-btn" id="alexCumBtn">Finish</a> </center> </div> <a class="button back-btn" data-passage="Alex_Interact">← Back</a> </div> </div> <<script>> $(document).ready(function() { const alexVideos = { blowjob: [ 'assets/alex/blowjob (1).webm', 'assets/alex/blowjob (4).webm', 'assets/alex/blowjob (5).webm', 'assets/alex/blowjob (6).webm', 'assets/alex/blowjob (7).webm', 'assets/alex/blowjob (8).webm' ], vaginal: [ 'assets/alex/vaginal (1).webm', 'assets/alex/vaginal (4).webm', 'assets/alex/vaginal (5).webm', 'assets/alex/vaginal (6).webm', 'assets/alex/vaginal (7).webm', 'assets/alex/vaginal (8).webm', 'assets/alex/vaginal (9).webm', 'assets/alex/vaginal (10).webm' ], anal: [ 'assets/alex/anal (1).webm', 'assets/alex/anal (3).webm', 'assets/alex/anal (4).webm' ], cum: [ 'assets/alex/cum.webm', 'assets/alex/cum (1).webm', 'assets/alex/cum (2).webm', 'assets/alex/cum (3).webm', 'assets/alex/cum (4).webm', 'assets/alex/cum (5).webm', 'assets/alex/cum (6).webm' ] }; function getRandomVideo(category) { const videos = alexVideos[category]; return videos[Math.floor(Math.random() * videos.length)]; } function changeVideo(type) { const video = document.getElementById('alexServiceVideo'); if (video) { const newSrc = getRandomVideo(type); if (video.src !== newSrc) { video.src = newSrc; video.play().catch(function(error) { console.log("Autoplay error:", error); }); } } // Update player stats with minimum check State.variables.player.stamina = Math.max(0, State.variables.player.stamina - 10); // Refresh stats display $(document).trigger(':refresh'); } // Add event handlers for buttons $('#alexBlowjobBtn').on('click', function() { changeVideo('blowjob'); }); $('#alexVaginalBtn').on('click', function() { changeVideo('vaginal'); }); $('#alexAnalBtn').on('click', function() { changeVideo('anal'); }); $('#alexCumBtn').on('click', function() { changeVideo('cum'); }); // Add click handler for video to toggle mute $('#alexServiceVideo').on('click', function() { this.muted = !this.muted; }); }); <</script>> <</if>>
<div class="scene-content"> <div class="scene-text"> <p>You send Alex to scavenge for supplies in the city. It's a dangerous task, but necessary for survival.</p> <<set $player.alex_work = "scavenging">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <<if $player.alex_status == "ally">> <p class="narrator-text">Alex looks at you with gratitude and a hint of concern.</p> <div class="alex-dialog"> <p>"Really? What do you want to know?"</p> </div> <<elseif $player.alex_status == "slave">> <p class="narrator-text">Alex looks down when you look at her</p> <div class="alex-dialog"> <p>"Yes, master?"</p> </div> <</if>> <div class="dialog-options"> <a class="button light-choice" data-passage="Alex_Past">Ask about her past</a> <a class="button light-choice" data-passage="Alex_Feelings">Ask about her feelings</a> <a class="button neutral-choice" data-passage="Alex_Interact">End the conversation</a> </div> </div> </div>
<div class="scene-content"> <div class="work-menu"> <h3>Choose a task for Alex:</h3> <<if $player.alex_work != "none">> <div class="current-task"> <p>Current task: <<print $player.alex_work>></p> <a class="button danger-choice" data-passage="Alex_Cancel_Work">Cancel task</a> </div> <<else>> <div class="work-options"> <a class="button neutral-choice" data-passage="Alex_Start_Scavenging">Start scavenging</a> </div> <div class="work-options"> <a class="button neutral-choice" data-passage="Alex_Сooks">Cooking</a> </div> <</if>> <a class="button" data-passage="Alex_Interact">Return</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p>Alex tries to cook something edible.</p> <<set $player.alex_work = "Cooking">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="location-title">Bar Matriarch</div> <img src="assets/Location/matriarch/matriarch.png" alt="mistral_living_room" class="big-image"> <div class="location-description"> <div class="description-block"> The interior of "Matriarch" blends rugged functionality with feminine aesthetics. Tables are crafted from salvaged machine parts, and chairs from recycled plastic and metal. Behind the bar, a long slab of polished bulletproof glass, sits Severina, a stern but fair woman with a tattoo. Her presence commands respect in this sanctuary of survival. Walls display trophies: parts of destroyed drones, daggers, and embroidered tapestries bearing the names of fallen sisters—a reminder of survival's cost. Lighting comes from a mix of kerosene lamps and homemade neon signs flickering in pink and purple hues. In the corner, an old jukebox plays only songs by female voices, from gritty blues ballads to electronic anthems crafted by local tech women. </div> </div> <div class="scene-dialogue"> <<if $player.severina_status == "unknown">> <a class="button" data-passage="Severina_First_dialog">Talk with Severina</a> <<elseif $player.severina_status == "Familiar">> <a class="button" data-passage="Severina_Talk_Menu">Talk</a> <</if>> <a class="button" data-passage="Settlement">← Return</a> </div> </div> </div>
<<set $player.stamina -=10>> <div class="scene-content"> <div class="scene-text"> <h2>Abandoned Bunker</h2> <p> The bunker's massive metal doors stand slightly ajar, revealing only darkness within. This appears to be a military facility abandoned in haste. While it could contain valuable resources, unknown dangers might lurk inside. </p> <p> A cold draft from the dark entrance makes you shiver. Without proper equipment or weapons, exploring this place could be extremely risky. </p> </div> <div class="choice-container"> <<if $bunker_quest_progress == "Phase 1">> <a class="button" data-passage="MistralMansion">Go to Mistral mansion</a> <</if>> <a class="button" data-passage="Outside">Return</a> </div> </div>
<<if $player.Caps >= 400>> <<set $player.Caps -= 400>> <<set $player.slaves += 1>> <<goto "Slave_Market">> <<else>> <<goto "Slave_Market">> <</if>>
<div class="changelog-page"> <div class="changelog-header"> <h1>Changelog</h1> <a class="back-button" data-passage="MainMenu"> <span class="back-icon">←</span> Return to Menu </a> <div class="choice-container"> <a class="button" data-passage="Changelog_2">Next Changelog</a> </div> </div> <div class="changelog-content"> <div class="changelog-entry"> <div class="version-header"> <h2>Version 0.1 Alpha (Old)</h2> <span class="date">03.21.2025</span> </div> <div class="changes-list"> <h3>Added:</h3> <ul> <li>Created basic game structure</li> <li>Developed main menu with 18+ warning</li> <li>Added basic styles and animations</li> <li>Created changelog system</li> <li>Added 3 NPCs and sex scenes with them</li> <li>Added main locations and some interactions with them</li> <li>Added combat system and basic mechanics</li> </ul> <h3>Settings:</h3> <ul> <li>Established basic variables for CSS</li> <li>Configured fonts and color scheme</li> <li>Added responsive design</li> <li>Fixed menu element alignment</li> </ul> <h3>Fixes:</h3> <ul> <li>Fixed left-shifting of elements</li> <li>Improved content centering</li> </ul> <h3>Known Issues:</h3> <ul> <li>Needs testing on different browsers</li> </ul> <h3>Author's Note:</h3> <ul> <li>The game is only in the early stages of development, no element of the game is 100% permanent</li> </ul> </div> </div> </div> </div> <style> /* Стилі для сторінки журналу змін */ .changelog-page { margin-top: var(--space-large); padding: var(--space-large); background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; box-shadow: var(--shadow-medium), var(--glow-red); } .changelog-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-large); } .changelog-header h1 { font-family: var(--font-mono); color: var(--accent-highlight); font-size: 2rem; text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .back-button { display: flex; align-items: center; gap: var(--space-small); color: var(--text-light); text-decoration: none; font-family: var(--font-mono); font-size: 1rem; padding: 8px 16px; border: 2px solid var(--accent-primary); border-radius: 6px; transition: background-color var(--transition-fast), transform var(--transition-fast); box-shadow: var(--shadow-subtle); } .back-button:hover { background: #6b3e3c; transform: scale(1.05); box-shadow: var(--shadow-medium), var(--glow-red); } .back-icon { font-size: 1.2rem; } .changelog-content { background: var(--bg-light); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-medium); box-shadow: var(--shadow-subtle); } .version-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-medium); } .version-header h2 { font-family: var(--font-mono); color: var(--accent-highlight); text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .version-header .date { color: var(--text-medium); font-family: var(--font-mono); } .changelog-list h3 { color: var(--accent-gold); font-family: var(--font-mono); margin-top: var(--space-medium); margin-bottom: var(--space-small); text-shadow: 0 0 4px rgba(212, 160, 23, 0.5); } .changelog-list ul { list-style-type: disc; margin-left: var(--space-medium); color: var(--text-light); } .changelog-list li { margin-bottom: var(--space-small); } /* Анімація появи */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .changelog-page, .changelog-content { animation: fadeIn var(--transition-slow); } </style>
<div class="changelog-page"> <div class="changelog-header"> <h1>Changelog</h1> <div class="choice-container"> <a class="button" data-passage="Changelog_3">Next Changelog</a> </div> </div> <div class="changelog-content"> <div class="changelog-entry"> <div class="version-header"> <h2>Version 0.2 alpha (old)</h2> <span class="date">04/19/2025</span> </div> <div class="changelog list"> <h3>Added:</h3> <ul> <li>More locations</li> <li>New NPC with sex scenes (Maru)</li> <li>Added 1 NPC without sex scenes (Bartender Severina)</li> <li>Added more locations and locations for interaction</li> <li>A trading system has been created, now the player can trade with the settlement</li> <li>A weapon system has been added (Wrench, knife, pistol, shotgun)</li> </ul> <h3>Settings:</h3> <ul> <li>Reconfigured CSS variables</li> </ul> <h3>Bugs:</h3> <ul> <li>Fixed numerous bugs (not 100% all but everything I found has been fixed)</li> <li>Changed and improved the styles of most locations and interaction points</li> </ul> <h3>Reworked:</h3> <ul> <li>Completely rewritten from scratch the inverter system and its functionality, now it works properly</li> </ul> <h3>Known issues:</h3> <ul> <li></li> </ul> <h3>Author's Note:</h3> <ul> <li>The game is still in its early stages of development, no element of the game is 100% permanent and I am constantly reworking everything</li> </ul> </div> </div> </div> </div> <style> /* Стилі для сторінки журналу змін */ .changelog-page { margin-top: var(--space-large); padding: var(--space-large); background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; box-shadow: var(--shadow-medium), var(--glow-red); } .changelog-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-large); } .changelog-header h1 { font-family: var(--font-mono); color: var(--accent-highlight); font-size: 2rem; text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .back-button { display: flex; align-items: center; gap: var(--space-small); color: var(--text-light); text-decoration: none; font-family: var(--font-mono); font-size: 1rem; padding: 8px 16px; border: 2px solid var(--accent-primary); border-radius: 6px; transition: background-color var(--transition-fast), transform var(--transition-fast); box-shadow: var(--shadow-subtle); } .back-button:hover { background: #6b3e3c; transform: scale(1.05); box-shadow: var(--shadow-medium), var(--glow-red); } .back-icon { font-size: 1.2rem; } .changelog-content { background: var(--bg-light); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-medium); box-shadow: var(--shadow-subtle); } .version-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-medium); } .version-header h2 { font-family: var(--font-mono); color: var(--accent-highlight); text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .version-header .date { color: var(--text-medium); font-family: var(--font-mono); } .changelog-list h3 { color: var(--accent-gold); font-family: var(--font-mono); margin-top: var(--space-medium); margin-bottom: var(--space-small); text-shadow: 0 0 4px rgba(212, 160, 23, 0.5); } .changelog-list ul { list-style-type: disc; margin-left: var(--space-medium); color: var(--text-light); } .changelog-list li { margin-bottom: var(--space-small); } /* Анімація появи */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .changelog-page, .changelog-content { animation: fadeIn var(--transition-slow); } </style>
<div class="changelog-page"> <div class="changelog-header"> <h1>Changelog</h1> <div class="choice-container"> <a class="button" data-passage="Changelog_last">Next Changelog</a> </div> </div> <div class="changelog-content"> <div class="changelog-entry"> <div class="version-header"> <h2>Version 0.2.1 Alpha Global Overhaul (current)</h2> <span class="date">04/26/2025</span> </div> <div class="changelog list"> <h3>Added:</h3> <ul> <li>Added a character name function.</li> <li>Added some sex scenes for Dominica and added sex scenes for slaves</li> <li>Added or moved to the sidebar: Character name and Caps, health and energy bars, shelter population (Slaves do not yet consume food, only named characters).</li> <li>Hunger system for named characters "Residents": each resident now consumes 1 food per day. If there isn’t enough food, the character enters an inactive mode, and you won’t be able to interact with them until you secure a food supply.</li> <li>More locations.</li> <li>Raider encounters in the City Center location with a 30% chance of occurring. After winning, you can either kill them for loot or take them as slaves.</li> <li>Slave Market where you can buy/sell slaves (Non-named characters only!)</li> <li>Forest location where you can hunt to obtain raw meat, or if it’s a mutant raider, get caps (Mutant Raider - a man who has lost almost all humanity but managed to survive). Added hunting mechanics (not the same as combat!). I separated them so players don’t grind but actually play the game. Hunting is an automated process: Hunt > Fight > Reward or Death. Also, to reduce damage taken, you’ll need better weapons—the better the weapon, the less damage you’ll take.</li> <li>Added the Cook job for named characters: one cook produces 2 food from one raw meat.</li> <li>A slave room (for non-named characters) has been added to your shelter.</li> <li>Added music to the game and corresponding settings sections in "Settings".</li> </ul> <h3>Settings:</h3> <ul> <li>Reconfigured CSS variables.</li> </ul> <h3>Bug Fixes:</h3> <ul> <li>Fixed all bugs reported by players and resolved all inconsistencies I found. At least, I didn’t find any new ones during testing, but if you do, please let me know in the comments.</li> <li>Fixed style errors that caused UI elements to display incorrectly.</li> </ul> <h3>Reworked:</h3> <ul> <li>The inventory system underwent another major overhaul. It took a lot of development time, but I think it now looks more or less like a stable, finished version and might make it to the release in this form—though that’s not guaranteed since I tend to rework everything.</li> <li>Reworked many locations, from UI element placement to core mechanics.</li> </ul> <h3>Known Issues:</h3> <ul> <li></li> </ul> <h3>Author's Note:</h3> <ul> <li>The game is still in its early development stage. No element of the game is 100% final, and I’m constantly reworking everything.</li> </ul> </div> </div> </div> </div> <style> /* Стилі для сторінки журналу змін */ .changelog-page { margin-top: var(--space-large); padding: var(--space-large); background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; box-shadow: var(--shadow-medium), var(--glow-red); } .changelog-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-large); } .changelog-header h1 { font-family: var(--font-mono); color: var(--accent-highlight); font-size: 2rem; text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .back-button { display: flex; align-items: center; gap: var(--space-small); color: var(--text-light); text-decoration: none; font-family: var(--font-mono); font-size: 1rem; padding: 8px 16px; border: 2px solid var(--accent-primary); border-radius: 6px; transition: background-color var(--transition-fast), transform var(--transition-fast); box-shadow: var(--shadow-subtle); } .back-button:hover { background: #6b3e3c; transform: scale(1.05); box-shadow: var(--shadow-medium), var(--glow-red); } .back-icon { font-size: 1.2rem; } .changelog-content { background: var(--bg-light); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-medium); box-shadow: var(--shadow-subtle); } .version-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-medium); } .version-header h2 { font-family: var(--font-mono); color: var(--accent-highlight); text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .version-header .date { color: var(--text-medium); font-family: var(--font-mono); } .changelog-list h3 { color: var(--accent-gold); font-family: var(--font-mono); margin-top: var(--space-medium); margin-bottom: var(--space-small); text-shadow: 0 0 4px rgba(212, 160, 23, 0.5); } .changelog-list ul { list-style-type: disc; margin-left: var(--space-medium); color: var(--text-light); } .changelog-list li { margin-bottom: var(--space-small); } /* Анімація появи */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .changelog-page, .changelog-content { animation: fadeIn var(--transition-slow); } </style>
<div class="scene-content"> <div class="scene-text"> <h2>Identity in the Ashes</h2> <p>The city lies broken around you, a scarred landscape of crumbling concrete and rusted metal. 90 days since the world stopped making sense. 90 days of survival in this new reality they call Corpse City.</p> <p>Your past feels like a distant memory, but your name... your name is something they can't take from you.</p> <<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="player-character"> <h2 class="character-name glow-effect">Enter Your Name</h2> <div class="character-description"> <div class="description-block"> Who are you in this wasteland? Choose a name to begin your journey. </div> <input type="text" id="playerName" value="Alex" class="player-input"> </div> </div> <div class="choice-container"> <a class="button" onclick="setPlayerName()">Confirm Name</a> </div> </div> </div> <<script>> window.setPlayerName = function() { try { const input = document.getElementById("playerName"); let name = input && input.value ? input.value.trim() : "Alex"; if (name === "") { name = "Alex"; } State.variables.player = State.variables.player || {}; State.variables.player.name = name; State.variables.player.game_status = 1; if (Story.has("Intro")) { Engine.play("Intro"); } else { console.error("Passage 'Intro' does not exist."); alert("Error: The story cannot continue. Please check the passage configuration."); } } catch (error) { console.error("Error in setPlayerName:", error); alert("An error occurred. Please try again or check the console for details."); } }; <</script>> <p class="warning-message">Choose a name and wear it with pride =)</p> </div> </div>
<<set $player.current_location = "City_Center">> <<set $player.stamina -=10>> <div class="scene-content"> <div class="scene-text"> <h2>City Center</h2> <p> The city center is the most dangerous area, but also potentially the richest in resources. Tall buildings tower into the sky, many damaged by fires and looting. The streets are cluttered with abandoned cars and debris. </p> <p> The center contains stores, pharmacies, banks and other establishments that might hold valuable resources. However, it's also where bandit groups are most concentrated, hunting for lone survivors. </p> <<if $discovered_dominika == false or $player.dominika_status == "unknown">> <<set $discovered_dominika = true>> <div class="encounter"> <p class="danger">Suddenly, you hear footsteps behind you...</p> <a class="button danger-choice" data-passage="Dominika_Encounter">Turn around</a> </div> <<else>> <<set _chance = random(0, 99)>> <div class="choice-container"> <<if _chance > 66>> <a class="button" data-passage="Raider_Encounter">Looking for slaves</a> <</if>> </div> <div class="choice-container"> <a class="button" data-passage="Outside">Return</a> </div> <</if>> </div> </div>
<<if $combat.turn == "player">> <<set $combat.enemy_health = Math.max(0, $combat.enemy_health - $combat.player_damage)>> <<set $combat.turn = "enemy">> <<if $combat.enemy_health <= 0>> <<goto "Combat_Victory">> <<else>> <<goto "Combat_Enemy_Turn">> <</if>> <<else>> <<goto "Combat_Enemy_Turn">> <</if>> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } .dominika-dialog { color: #ff5252; font-style: italic; margin: 10px 0; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } </style>
<div class="scene-content"> <<if $combat.enemy_name = "Dominika">> <div class="combat-result defeat"> <h2>Defeat...</h2> <p>You have lost.</p> </div> <</if>> <div class="game-over"> <h3>GAME OVER</h3> </div> </div> <style> .game-over { text-align: center; margin-top: 30px; } .game-over h3 { color: var(--accent-secondary); font-size: 1.5em; margin: 0 0 15px 0; } </style>
<<if $combat.turn == "player">> <<set $combat.is_defending = true>> <<set $combat.turn = "enemy">> <<goto "Combat_Enemy_Turn">> <<else>> <<goto "Combat_Enemy_Turn">> <</if>> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } .dominika-dialog { color: #ff5252; font-style: italic; margin: 10px 0; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } </style>
<<set $combat = { enemy_name: "Dominika", enemy_health: 70, enemy_max_health: 70, enemy_damage: 10, player_damage: $player.Weapon_damage, turn: "player" }>> <div class="scene-content"> <div class="combat-container"> <div class="combat-header"> <h2>Battle with Dominika</h2> </div> <div class="combatants"> <div class="combatant player"> <div class="combatant-info"> <h3><span class="player-name">You</span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($player.health/$player.max_health*100)>>%"></div> </div> <div class="health-text"><<print $player.health>>/<<print $player.max_health>></div> </div> </div> </div> <div class="combat-vs">VS</div> <div class="combatant enemy"> <div class="combatant-info"> <h3><span class="enemy-name"><<print $combat.enemy_name>></span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($combat.enemy_health/$combat.enemy_max_health*100)>>%"></div> </div> <div class="health-text"><<print $combat.enemy_health>>/<<print $combat.enemy_max_health>></div> </div> </div> </div> </div> <div class="combat-log"> <p>The battle has begun! You stand face to face with Dominika.</p> <p>What will you do?</p> </div> <div class="combat-controls"> <a class="combat-btn attack" data-passage="Combat_Attack">Attack</a> <a class="combat-btn defend" data-passage="Combat_Defend">Defend</a> <<if $player.Medkit > 0>> <a class="combat-btn heal" data-passage="Combat_Heal">Use Medkit</a> <<else>> <a class="combat-btn heal disabled">Medkit (none)</a> <</if>> </div> </div> </div> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } .dominika-dialog { color: #ff5252; font-style: italic; margin: 10px 0; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } </style>
<div class="scene-content"> <div class="combat-container"> <div class="combat-header"> <h2>Battle</h2> </div> <div class="combatants"> <div class="combatant player"> <div class="combatant-info"> <h3><span class="player-name">You</span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($player.health/$player.max_health*100)>>%"></div> </div> <div class="health-text"><<print $player.health>>/<<print $player.max_health>></div> </div> </div> </div> <div class="combat-vs">VS</div> <div class="combatant enemy"> <div class="combatant-info"> <h3><span class="enemy-name"><<print $combat.enemy_name>></span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($combat.enemy_health/$combat.enemy_max_health*100)>>%"></div> </div> <div class="health-text"><<print $combat.enemy_health>>/<<print $combat.enemy_max_health>></div> </div> </div> </div> </div> <div class="combat-log"> <<if $combat.turn == "enemy">> <<if $combat.is_defending>> <<set _damage = Math.floor($combat.enemy_damage / 2)>> <<set $player.health = Math.max(0, $player.health - _damage)>> <<set $combat.is_defending = false>> <p>You defend! Enemy deals <<print _damage>> damage.</p> <<else>> <<set $player.health = Math.max(0, $player.health - $combat.enemy_damage)>> <p>Enemy attacks and deals <<print $combat.enemy_damage>> damage!</p> <</if>> <<if $player.health <= 0>> <p>Critical hit! You can no longer continue the fight...</p> <<else>> <p>Now it's your turn.</p> <</if>> <</if>> </div> <<if $player.health <= 0>> <div class="combat-controls"> <a class="combat-btn attack" data-passage="Combat_Defeat">Continue</a> </div> <<else>> <<set $combat.turn = "player">> <div class="combat-controls"> <a class="combat-btn attack" data-passage="Combat_Attack">Attack</a> <a class="combat-btn defend" data-passage="Combat_Defend">Defend</a> <<if $player.Medkit > 0>> <a class="combat-btn heal" data-passage="Combat_Heal">Use Medkit</a> <<else>> <a class="combat-btn heal disabled">Medkit (none)</a> <</if>> </div> <</if>> </div> </div> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } .dominika-dialog { color: #ff5252; font-style: italic; margin: 10px 0; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } </style>
<<if $player.game_status == 1>> <div class="status-container"> <h3 class="text-center">$player.name</h3> <<if $player.Caps >= 0>> <ul class="inventory-list"> <li class="inventory-image"> <img src="assets/icons/caps.png" alt="Caps"> <span>x <<print $player.Caps>></span> </li> </ul> <</if>> <h3 class="text-center">Population</h3> <<if $player.survivors_met >= 0>> <ul class="inventory-list"> <li class="inventory-image"> <img src="assets/icons/population.png" alt="Population"> <span>x <<print $player.survivors_met>></span> </li> </ul> <</if>> <ul> <li class="health-bar"> <span class="stat-label">Health:</span> <div class="health-bar-container"> <div class="bar-fill <<if ($player.health / $player.max_health) >= 0.7>>high<<elseif ($player.health / $player.max_health) >= 0.3>>medium<<else>>low<</if>>" style="width: <<print ($player.health / $player.max_health * 100)>>%"></div> <span class="bar-text"><<print $player.health>>/<<print $player.max_health>></span> </div> </li> <li class="stamina-bar"> <span class="stat-label">Stamina:</span> <div class="stamina-bar-container"> <div class="bar-fill <<if ($player.stamina / $player.max_stamina) >= 0.7>>high<<elseif ($player.stamina / $player.max_stamina) >= 0.3>>medium<<else>>low<</if>>" style="width: <<print ($player.stamina / $player.max_stamina * 100)>>%"></div> <span class="bar-text"><<print $player.stamina>>/<<print $player.max_stamina>></span> </div> </li> </ul> </div> <</if>> <div class="combat-controls"> <a class="combat-btn attack" data-passage="Combat_Attack">Attack</a> <a class="combat-btn defend" data-passage="Combat_Defend">Defend</a> <<if $player.Medkit > 0>> <a class="combat-btn heal" data-passage="Combat_Heal">Use Medkit</a> <<else>> <a class="combat-btn heal disabled">Medkit (none)</a> <</if>> </div> <<if $combat.turn == "player">> <<if $player.Medkit > 0>> <<set $player.Medkit -= 1>> <<set $player.health = Math.min($player.max_health, $player.health + 50)>> <<set $combat.turn = "enemy">> <<goto "Combat_Enemy_Turn">> <<elseif $combat.enemy_name == "Dominika">> <<goto "Combat_Dominika">> <<elseif $combat.enemy_name == "Raider">> <<goto "Combat_Raider">> <</if>> <<else>> <<goto "Combat_Enemy_Turn">> <</if>> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } .dominika-dialog { color: #ff5252; font-style: italic; margin: 10px 0; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } </style>
<<set $combat = { enemy_name: "Raider", enemy_health: 100, enemy_max_health: 100, enemy_damage: 10, player_damage: $player.Weapon_damage, turn: "player" }>> <div class="scene-content"> <div class="combat-container"> <div class="combat-header"> <h2>Battle with Raider</h2> </div> <div class="combatants"> <div class="combatant player"> <div class="combatant-info"> <h3><span class="player-name">You</span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($player.health/$player.max_health*100)>>%"></div> </div> <div class="health-text"><<print $player.health>>/<<print $player.max_health>></div> </div> </div> </div> <div class="combat-vs">VS</div> <div class="combatant enemy"> <div class="combatant-info"> <h3><span class="enemy-name"><<print $combat.enemy_name>></span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($combat.enemy_health/$combat.enemy_max_health*100)>>%"></div> </div> <div class="health-text"><<print $combat.enemy_health>>/<<print $combat.enemy_max_health>></div> </div> </div> </div> </div> <div class="combat-log"> <p>The battle has begun! You stand face to face with Raider.</p> <p>What will you do?</p> </div> <div class="combat-controls"> <a class="combat-btn attack" data-passage="Combat_Attack">Attack</a> <a class="combat-btn defend" data-passage="Combat_Defend">Defend</a> <<if $player.Medkit > 0>> <a class="combat-btn heal" data-passage="Combat_Heal">Use Medkit</a> <<else>> <a class="combat-btn heal disabled">Medkit (none)</a> <</if>> </div> </div> </div> </div> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } </style>
<div class="scene-content"> <<if $combat.enemy_name == "Dominika">> <div class="combat-result victory"> <h2>Victory!</h2> <p>You have defeated Dominika. She lies before you, breathing heavily. Her weapon is cast aside, and she no longer poses a threat.</p> <p>What will you do with her?</p> <div class="choice-container"> <a class="button dark-choice" data-passage="Dominika_Enslave">Make her a slave</a> <a class="button danger-choice" data-passage="Dominika_Kill">Kill her</a> </div> </div> <</if>> <<if $combat.enemy_name == "Raider">> <div class="combat-result victory"> <h2>Victory!</h2> <p>You have won and now the defeated raider is your trophy.</p> <p>What will you do with her?</p> <div class="choice-container"> <a class="button dark-choice" data-passage="Raider_Enslave">Make her a slave</a> <a class="button danger-choice" data-passage="Raider_Kill">Kill her</a> </div> </div> <</if>> <<if $combat.enemy_name == "Zombie">> <div class="combat-result victory"> <h2>Victory!</h2> <p>You have defeated this creature.</p> <p>What will you do</p> <div class="choice-container"> <a class="button danger-choice" data-passage="Zombie_Kill">Kill him</a> </div> </div> <</if>> <<if $combat.enemy_name == "Scarbourg">> <div class="combat-result victory"> <h2>Victory!</h2> <p>You have defeated this creature.</p> <p>What will you do</p> <div class="choice-container"> <a class="button danger-choice" data-passage="Scarbourg_Kill">Kill him</a> </div> </div> <</if>> </div> <style> .combat-result { padding: 20px; border-radius: 8px; background-color: rgba(0, 0, 0, 0.7); margin-bottom: 20px; } .combat-result.victory { border: 2px solid #4CAF50; } .combat-result.defeat { border: 2px solid #F44336; } .combat-result h2 { text-align: center; margin-top: 0; } .victory h2 { color: #4CAF50; } .defeat h2 { color: #F44336; } </style>
<div class="scene-content"> <div class="scene-text"> <p>You recall Dominika from her task. She is now available for other interactions.</p> <<set $player.dominika_work = "none">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<div class="scene-content"> <div class="encounter-header"> <h2>Dangerous Encounter</h2> </div> <div class="character-encounter"> <div class="encounter-image"> <img src="assets/dominika/dominika.png" alt="Dominika" class="character-image"> </div> <div class="encounter-text"> <p>A tall woman stands before you with a cold gaze and a weapon in hand. Her posture reveals military experience, and her eyes reflect cruelty.</p> <div class="dialog"> <p class="dominika-dialog">"Another lone wolf... Nice prey. You'll be useful in my camp."</p> </div> <p>She aims her weapon at you. Her intentions are clear - to take you as a slave. In this situation, you have no choice - you must fight.</p> </div> </div> <div class="choice-container"> <a class="button danger-choice" data-passage="Combat_Dominika">Fight</a> <a class="button" data-passage="Outside">Try to escape</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Subjugating Dominika</h2> <p> "Kneel," you command, weapon at the ready. Dominika weakly falls to her knees, looking at you with hatred and helplessness. </p> <<set $player.dominika_status = "slave">> <<set $player.survivors_met ++>> <p> "Now you are my slave," you say, binding her hands. "And you will believe your own fate..." </p> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Dominika_Service">Secure the subjugation</a> <a class="button" data-passage="House_Life">Take her home</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <p class="narrator-text">Dominika pauses for a moment, searching for the right words.</p> <div class="dominika-dialog"> <<if $player.dominika_status == "enslaved">> <p>"Honestly, I never expected to be in this position. Yet, oddly enough, I feel a certain... safety. You are far stronger than I am, and I accept my role as your slave; it’s not the worst fate I could have."</p> <</if>> </div> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="Dominika_Talk_Menu">Return to the conversation</a> </div> </div>
<div class="scene-content"> <img src="assets/dominika/dominika.png" alt="Dominika" class="character-image"> </div> <div class="character-info"> <h3>Dominika</h3> <p>Status: <<if $player.dominika_status == "slave">>Slave<<else>>Ally<</if>></p> <<if $player.dominika_work == "scavenging">> <p class="work-status">Current task: Scavenging for supplies</p> <</if>> <div class="interaction-menu"> <a class="button light-choice" data-passage="Dominika_Talk_Menu">Talk</a> <<if $player.dominika_status == "slave" && $player.dominika_work != "scavenging">> <a class="button dark-choice" data-passage="Dominika_Service">Have sex</a> <</if>> <a class="button neutral-choice" data-passage="Dominika_Work">Assign a task</a> <a class="button back-btn" data-passage="House_Life">← Back</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Execution of Dominika</h2> <p> You decide not to give her a chance. In this world, there is no place for mercy. A quick, decisive strike - and it's all over. </p> <<set $player.dominika_status = "dead_outside">> <p> You search her belongings and find some useful supplies. </p> <div class="loot"> <h3>Found:</h3> <ul> <<set $player.Canned_Food += 5>> <<set $player.Medkit ++>> <<set $player.Knife ++>> <li>Canned food (5 unit)</li> <li>Medkit (2 unit)</li> <li>Knife (1 unit)</li> </ul> </div> </div> <div class="choice-container"> <<if $player.current_location == "City_Center">> <a class="button" data-passage="City_Center">Return</a> <</if>> </div> </div> <style> .loot { background: rgba(0, 0, 0, 0.5); border: 1px solid var(--accent-gold); border-radius: 6px; padding: 10px; margin: 15px 0; } .loot h3 { color: var(--accent-gold); margin-top: 0; margin-bottom: 10px; font-size: 1em; } .loot ul { margin: 0; padding-left: 20px; } .loot li { color: #ffffff; margin-bottom: 5px; } </style>
<div class="scene-content"> <div class="dialog-container"> <p class="narrator-text">Dominika takes a deep breath, gathering her thoughts.</p> <div class="dominika-dialog"> <p>"I sought out slaves for settlement, captured them, and sold them, but I seem to have overestimated my strength."</p> </div> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="Dominika_Talk_Menu">Return to the conversation</a> </div> </div>
<<if $player.stamina < 10>> <div class="scene-content"> <div class="warning-message">You do not have enough stamina for sexual actions!</div> <div class="choice-container"> <a class="button back-btn" data-passage="Dominika_Interact">← Back</a> </div> </div> <<else>> <div class="scene-content"> <div class="scene-text"> <p> Dominique obediently waits for your orders, ready to fulfill any of your desires. </p> </div> <div class="video-container"> <video id="dominikaServiceVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/dominika/blowjob (1).webm" type="video/webm"> </video> </div> <div class="service-menu"> <div class="menu-title">Choose an action:</div> <div class="service-buttons"> <center> <a class="service-btn" id="dominikaBlowjobBtn">Blowjob</a> <a class="service-btn" id="dominikaVaginalBtn">Vaginal</a> <a class="service-btn" id="dominikaAnalBtn">Anal</a> <a class="service-btn" id="dominikaCumBtn">Finish</a> </center> </div> <a class="button back-btn" data-passage="House_Life">← Finish</a> </div> <<script>> $(document).ready(function() { const dominikaVideos = { blowjob: [ 'assets/dominika/blowjob (1).webm', 'assets/dominika/blowjob (2).webm', 'assets/dominika/blowjob (3).webm', 'assets/dominika/blowjob (4).webm', 'assets/dominika/blowjob (5).webm', 'assets/dominika/blowjob (6).webm', 'assets/dominika/blowjob (7).webm', 'assets/dominika/blowjob (8).webm', 'assets/dominika/blowjob (9).webm' ], vaginal: [ 'assets/dominika/vaginal (1).webm', 'assets/dominika/vaginal (2).webm', 'assets/dominika/vaginal (3).webm', 'assets/dominika/vaginal (4).webm', 'assets/dominika/vaginal (5).webm', 'assets/dominika/vaginal (6).webm', 'assets/dominika/vaginal (7).webm', 'assets/dominika/vaginal (8).webm', 'assets/dominika/vaginal (9).webm', 'assets/dominika/vaginal (10).webm', 'assets/dominika/vaginal (11).webm', 'assets/dominika/vaginal (12).webm' ], anal: [ 'assets/dominika/anal (1).webm', 'assets/dominika/anal (2).webm' ], cum: [ 'assets/dominika/cum.webm' ] }; function getRandomVideo(category) { const videos = dominikaVideos[category]; return videos[Math.floor(Math.random() * videos.length)]; } function changeVideo(type) { const video = document.getElementById('dominikaServiceVideo'); if (video) { const newSrc = getRandomVideo(type); if (video.src !== newSrc) { video.src = newSrc; video.play().catch(function(error) { console.log("Autoplay error:", error); }); } } // Update player stats with minimum check State.variables.player.stamina = Math.max(0, State.variables.player.stamina - 10); // Refresh stats display $(document).trigger(':refresh'); } // Add event handlers for buttons $('#dominikaBlowjobBtn').on('click', function() { changeVideo('blowjob'); }); $('#dominikaVaginalBtn').on('click', function() { changeVideo('vaginal'); }); $('#dominikaAnalBtn').on('click', function() { changeVideo('anal'); }); $('#dominikaCumBtn').on('click', function() { changeVideo('cum'); }); // Add click handler for video to toggle mute $('#dominikaServiceVideo').on('click', function() { this.muted = !this.muted; }); }); <</script>> <</if>>
<div class="scene-content"> <div class="scene-text"> <p>You send Dominika to scavenge for supplies in the city. It's a dangerous task, but necessary for survival.</p> <<set $player.dominika_work = "scavenging">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <p class="narrator-text">Dominika looks at you humbly, as if she sees you as a strong leader.</p> <div class="dominika-dialog"> <p>"Yes, master?"</p> </div> <div class="dialog-options"> <a class="button light-choice" data-passage="Dominika_Past">Ask about her past</a> <a class="button light-choice" data-passage="Dominika_Feelings">Ask about her feelings</a> <a class="button neutral-choice" data-passage="Dominika_Interact">End the conversation</a> </div> </div> </div>
<div class="scene-content"> <div class="work-menu"> <h3>Choose a task for Dominique:</h3> <<if $player.dominika_work != "none">> <div class="current-task"> <p>Current task: <<print $player.dominika_work>></p> <a class="button danger-choice" data-passage="Dominika_Cancel_Work">Cancel task</a> </div> <<else>> <div class="work-options"> <a class="button neutral-choice" data-passage="Dominika_Start_Scavenging">Start scavenging</a> </div> <div class="work-options"> <a class="button neutral-choice" data-passage="Dominika_Сooks">Cooking</a> </div> <</if>> <a class="button" data-passage="Dominika_Interact">Return</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p>Dominika tries to cook something edible.</p> <<set $player.dominika_work = "Cooking">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Area Reconnaissance</h2> <<set $player.stamina = Math.max(0, $player.stamina - 20)>> <p> You decide to explore the surroundings in search of useful locations. It's dangerous, but could prove beneficial. </p> <<if $discovered_bunker == false or $discovered_farm == false or $discovered_city_center == false or $discovered_settlement == false or $discovered_forest == false or $discovered_mistral_mansion == false>> <<set _explore_chance = random(1, 100)>> <<if _explore_chance <= 50>> <<set _location_type = random(1, 5)>> <<if $discovered_bunker == false>> <<set $discovered_bunker = true>> <p class="success">You found something interesting! An abandoned bunker stands among the ruins.</p> <a class="button light-choice" data-passage="Bunker">Explore the bunker</a> <<elseif $discovered_farm == false>> <<set $discovered_farm = true>> <p class="success">You found something interesting! An old farm is visible outside the city.</p> <a class="button light-choice" data-passage="Farm">Explore the farm</a> <<elseif $discovered_city_center == false>> <<set $discovered_city_center = true>> <p class="success">You discovered a safe route to the city center!</p> <a class="button light-choice" data-passage="City_Center">Go to the center</a> <<elseif $discovered_settlement == false>> <<set $discovered_settlement = true>> <p class="success">You spot a small settlement of survivors in the distance!</p> <a class="button light-choice" data-passage="Settlement">Approach the settlement</a> <<elseif $discovered_forest == false>> <<set $discovered_forest = true>> <p class="success">You have a view of the endless forest.</p> <a class="button light-choice" data-passage="Forest">Enter the forest</a> <</if>> <</if>> <<else>> <p>Unfortunately, you didn't find anything interesting today. Maybe you should try a different direction.</p> <</if>> </div> <div class="choice-container"> <a class="button" data-passage="Outside">Return</a> </div> </div>
<<set $player.stamina -=10>> <div class="scene-content"> <div class="scene-text"> <h2>The Old Farm</h2> <p> Outside the city lies an abandoned farm with vast fields and several outbuildings. The main structure appears sturdy despite needing repairs. The surrounding land looks fertile and could yield crops with proper care. </p> <p> Someone already tried settling here - you can see attempts to reinforce the fence and clear part of the field. This place could potentially make a good survival base with some work. </p> </div> <div class="choice-container"> <a class="button" data-passage="Outside">Return</a> </div> </div>
<<set $player.stamina -=10>> <div class="scene-content"> <div class="scene-text"> <h2>Forest</h2> <p> What was once a thriving forest is now a grotesque monument to bioengineered destruction. The trees stand, but not as they once did—their bark blistered with unnatural growths, their leaves replaced by jagged, spore-laden tendrils that twitch in the wind. The air hums with the drone of oversized insects, their chitinous bodies warped into predatory shapes. </p> <p> This is clearly a dangerous place that has claimed many desperate people. </p> </div> <<if $player.stamina >= 20>> <div class="choice-container"> <a class="button" data-passage="Forest_Hunt">Go hunt</a> </div> <<else>> <center><h2>*You tired!*</h2></center> <</if>> <a class="button" data-passage="Outside">Return</a> </div>
<style> body { background: #121212; color: #e0e0e0; font-family: 'Courier New', monospace; line-height: 1.6; text-shadow: 0 0 5px rgba(255, 255, 255, 0.3); } .hunt-message { background: #1e1a24; border-left: 4px solid #9922cc; padding: 10px; margin: 10px 0; border-radius: 5px; box-shadow: 0 2px 10px rgba(153, 34, 204, 0.4); } .hunt-message span { display: block; margin: 5px 0; } .hunt-message .damage { color: #ff3399; font-weight: bold; text-shadow: 0 0 8px rgba(255, 51, 153, 0.6); animation: pulse 2s infinite; } .hunt-message .reward { color: #22ff88; font-weight: bold; text-shadow: 0 0 8px rgba(34, 255, 136, 0.6); animation: glow 3s infinite; } .tired-message { color: #ffffff; text-align: center; font-size: 1.5em; margin: 20px 0; text-shadow: 0 0 10px rgba(255, 255, 255, 0.8); animation: flicker 4s infinite; } .choice-container { display: flex; justify-content: center; gap: 15px; margin: 20px 0; } .choice-container .button { padding: 10px 20px; background: #2a1e33; color: #ffffff; text-decoration: none; border: 2px solid #9922cc; border-radius: 5px; transition: all 0.3s; box-shadow: 0 0 8px rgba(153, 34, 204, 0.4); } .choice-container .button:hover { background: #3d2854; transform: scale(1.05); box-shadow: 0 0 15px rgba(153, 34, 204, 0.7), 0 0 30px rgba(153, 34, 204, 0.4); text-shadow: 0 0 5px #ffffff; } .game-over { color: #ff3399; text-align: center; font-size: 1.2em; margin: 20px 0; text-shadow: 0 0 10px rgba(255, 51, 153, 0.8); animation: fadeInOut 2s infinite; } @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.7; } 100% { opacity: 1; } } @keyframes glow { 0% { text-shadow: 0 0 5px rgba(34, 255, 136, 0.6); } 50% { text-shadow: 0 0 15px rgba(34, 255, 136, 0.8), 0 0 30px rgba(34, 255, 136, 0.4); } 100% { text-shadow: 0 0 5px rgba(34, 255, 136, 0.6); } } @keyframes flicker { 0% { opacity: 1; } 3% { opacity: 0.8; } 6% { opacity: 1; } 9% { opacity: 0.9; } 12% { opacity: 1; } 70% { opacity: 1; } 73% { opacity: 0.7; } 76% { opacity: 1; } 100% { opacity: 1; } } @keyframes fadeInOut { 0% { opacity: 0.7; } 50% { opacity: 1; } 100% { opacity: 0.7; } } </style> <<if $player.stamina gte 20>> <<set _event to random(1,4)>> <<set _damage_reduce to $player.Weapon_status is "Wrench" ? 0.1 : $player.Weapon_status is "Knife" ? 0.2 : $player.Weapon_status is "Pistol" ? 0.4 : $player.Weapon_status is "Shotgun" ? 0.6 : 0>> <<set _loot_multiplier to $player.Weapon_status is "none" ? 0.5 : $player.Weapon_status is "Wrench" ? 1 : $player.Weapon_status is "Knife" ? 1.2 : $player.Weapon_status is "Pistol" ? 1.3 : 1.5>> <<set _escaped to false>> <!-- Initialize escape flag --> <<if _event is 1>> <<set _damage to Math.max(1, Math.floor(($player.wolf_mutant_damage + random(10,30)) * (1 - _damage_reduce)))>> <<if $player.health - _damage lte 0>> <<set _escaped to true>> <<set $player.stamina = 0>> <!-- Drain all stamina --> <div class="hunt-message"> <img src="assets/Hunt/wolf_mutant.png" alt="Wolf Mutant"> <span>*A mutant wolf lunges from the brush!*</span> <span class="damage">*You have <<= $player.health>> health, but this attack would deal <<= _damage>> damage!*</span> </div> <div class="choice-container"> <a class="button" data-passage="Forest">Escape to Forest</a> </div> <<else>> <<set $player.health to Math.max(0, $player.health - _damage)>> <<set _meat to Math.floor(random(2,6) * _loot_multiplier)>> <<set $player.Raw_meat += _meat>> <<set $player.stamina -= 20>> <div class="hunt-message"> <img src="assets/Hunt/wolf_mutant.png" alt="Wolf Mutant"> <span>*A mutant wolf lunges from the brush!*</span> <span class="damage">*You kill it, but lose <<= _damage>> health.*</span> <span class="reward">*Gained <<= _meat>> mutant meat.*</span> <span>*Spent 20 stamina.*</span> </div> <</if>> <<elseif _event is 2>> <<set _damage to Math.max(1, Math.floor(($player.rat_mutant_damage + random(5,20)) * (1 - _damage_reduce)))>> <<if $player.health - _damage lte 0>> <<set _escaped to true>> <<set $player.stamina = 0>> <!-- Drain all stamina --> <div class="hunt-message"> <img src="assets/Hunt/rat_mutant.png" alt="Rat Mutant Swarm"> <span>*Mutant rats swarm from the ground!*</span> <span class="damage">*You have <<= $player.health>> health, but this attack would deal <<= _damage>> damage!*</span> </div> <div class="choice-container"> <a class="button" data-passage="Forest">Escape to Forest</a> </div> <<else>> <<set $player.health to Math.max(0, $player.health - _damage)>> <<set _meat to Math.floor(random(1,2) * _loot_multiplier)>> <<set $player.Raw_meat += _meat>> <<set $player.stamina -= 20>> <div class="hunt-message"> <img src="assets/Hunt/rat_mutant.png" alt="Rat Mutant Swarm"> <span>*Mutant rats swarm from the ground!*</span> <span class="damage">*You fend them off, but lose <<= _damage>> health.*</span> <span class="reward">*Gained <<= _meat>> meat.*</span> <span>*Spent 20 stamina.*</span> </div> <</if>> <<elseif _event is 3>> <<set $player.raider_damage = $player.raider_damage ?? 15>> <!-- Default if undefined --> <<set _damage to Math.max(1, Math.floor(($player.raider_damage + random(10,40)) * (1 - _damage_reduce)))>> <<if $player.health - _damage lte 0>> <<set _escaped to true>> <<set $player.stamina = 0>> <!-- Drain all stamina --> <div class="hunt-message"> <img src="assets/Hunt/raider_mutant.png" alt="Raider Ambush"> <span>*Spore-sick raiders ambush you!*</span> <span class="damage">*You have <<= $player.health>> health, but this attack would deal <<= _damage>> damage!*</span> </div> <div class="choice-container"> <a class="button" data-passage="Forest">Escape to Forest</a> </div> <<else>> <<set $player.health to Math.max(0, $player.health - _damage)>> <<set _caps to Math.floor(random(5,50) * _loot_multiplier)>> <<set $player.Caps += _caps>> <<set $player.stamina -= 20>> <div class="hunt-message"> <img src="assets/Hunt/raider_mutant.png" alt="Raider Ambush"> <span>*Spore-sick raiders ambush you!*</span> <span class="damage">*You survive, but lose <<= _damage>> health.*</span> <span class="reward">*Found <<= _caps>> caps.*</span> <span>*Spent 20 stamina.*</span> </div> <</if>> <<else>> <<set $player.stamina -= 20>> <div class="hunt-message"> <span>*The forest is empty, nothing found.*</span> <span>*Spent 20 stamina.*</span> </div> <</if>> <<if $player.health lte 0>> <<set $player.health to 0>> <<set $player.game_status to 0>> <div class="game-over">*You’re mortally wounded... The world fades...*</div> <div class="choice-container"> <a class="button" data-passage="Game_Over">Game Over</a> </div> <<elseif not _escaped>> <!-- Only show Hunt Again/Return if not escaped --> <div class="choice-container"> <a class="button" data-passage="Forest_Hunt">Hunt Again</a> <a class="button" data-passage="Forest">Return to Forest</a> </div> <</if>> <<else>> <div class="tired-message">*You’re too exhausted to hunt!*</div> <div class="choice-container"> <a class="button" data-passage="Forest">Return to Forest</a> </div> <</if>>
<div class="choice-container"> <<set $player.Caps -= 10>> <<if $player.stamina < 10>> <div class="scene-content"> <div class="warning-message">You do not have enough stamina for sexual actions!</div> <div class="choice-container"> <a class="button back-btn" data-passage="Mary">← Back</a> </div> </div> <<else>> <div class="scene-content"> <div class="scene-text"> <p> Maria has taken the caps and is following your instructions. </p> </div> <div class="video-container"> <video id="maryServiceVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/NPC/mary/blowjob (1).mp4" type="video/mp4"> </video> </div> <div class="service-menu"> <div class="menu-title">Choose an action:</div> <div class="service-buttons"> <a class="service-btn" id="maryBlowjobBtn">Blowjob</a> <a class="service-btn" id="maryVaginalBtn">Vaginal</a> <a class="service-btn" id="maryAnalBtn">Anal</a> <a class="service-btn" id="maryCumBtn">Finish</a> </div> <a class="button back-btn" data-passage="Mary">← Back</a> </div> </div> <<script>> $(document).ready(function() { const maryVideos = { blowjob: [ 'assets/NPC/mary/blowjob (1).mp4', 'assets/NPC/mary/blowjob (2).mp4', 'assets/NPC/mary/blowjob (3).mp4' ], vaginal: [ 'assets/NPC/mary/vaginal (1).webm', 'assets/NPC/mary/vaginal (2).webm', 'assets/NPC/mary/vaginal (3).webm', 'assets/NPC/mary/vaginal (4).webm', 'assets/NPC/mary/vaginal (5).webm' ], anal: [ 'assets/NPC/mary/anal.mp4', 'assets/NPC/mary/anal (1).mp4', 'assets/NPC/mary/anal (2).mp4', 'assets/NPC/mary/anal.webm' ], cum: [ 'assets/NPC/mary/cum.mp4', 'assets/NPC/mary/cum.webm' ] }; function getRandomVideo(category) { const videos = maryVideos[category]; return videos[Math.floor(Math.random() * videos.length)]; } function changeVideo(type) { const video = document.getElementById('maryServiceVideo'); if (video) { const newSrc = getRandomVideo(type); if (video.src !== newSrc) { video.src = newSrc; video.play().catch(function(error) { console.log("Autoplay error:", error); }); } } // Update player stats with minimum check State.variables.player.stamina = Math.max(0, State.variables.player.stamina - 10); // Refresh stats display $(document).trigger(':refresh'); } // Add event handlers for buttons $('#maryBlowjobBtn').on('click', function() { changeVideo('blowjob'); }); $('#maryVaginalBtn').on('click', function() { changeVideo('vaginal'); }); $('#maryAnalBtn').on('click', function() { changeVideo('anal'); }); $('#maryCumBtn').on('click', function() { changeVideo('cum'); }); // Add click handler for video to toggle mute $('#maryServiceVideo').on('click', function() { this.muted = !this.muted; }); }); <</script>> <</if>>
<p><div class="scene-text"><center><H1>GAME OVER</H1></center></div></p> <p><H2><<<<<<- CLICK RESTART GAME</H2></p>
<div class="scene-content"> <div class="scene-text"> <div class="date-display"> <span class="day">Day: <<print $player.days_survived>></span> <span class="month">Month: <<print $player.current_month>></span> <span class="year">Year: <<print $player.current_year>></span> </div> <h2>Your Safehouse</h2> <div class="residents-container"> <h3 class="text-center">Residents</h3> <div class="characters-grid"> <<if $player.luna_status == "slave">> <div class="mini-character-card"> <img src="assets/luna/luna.png" alt="Luna" class="mini-portrait"> <div class="mini-info"> <span class="char-name">Luna</span> <span class="char-status">Slave</span> <a class="mini-btn" data-passage="Luna_Interact">Interact</a> </div> </div> <<elseif $player.luna_status == "ally">> <div class="mini-character-card"> <img src="assets/luna/luna.png" alt="Luna" class="mini-portrait"> <div class="mini-info"> <span class="char-name">Luna</span> <span class="char-status">Ally</span> <a class="mini-btn" data-passage="Luna_Interact">Interact</a> </div> </div> <</if>> <<if $player.alex_status == "slave">> <div class="mini-character-card"> <img src="assets/alex/alex.png" alt="Alex" class="mini-portrait"> <div class="mini-info"> <span class="char-name">Alex</span> <span class="char-status">Slave</span> <a class="mini-btn" data-passage="Alex_Interact">Interact</a> </div> </div> <<elseif $player.alex_status == "ally">> <div class="mini-character-card"> <img src="assets/alex/alex.png" alt="Alex" class="mini-portrait"> <div class="mini-info"> <span class="char-name">Alex</span> <span class="char-status">Ally</span> <a class="mini-btn" data-passage="Alex_Interact">Interact</a> </div> </div> <<elseif $player.alex_status == "dead">> <div class="status-message dark"> A dark stain on the floor reminds you of Alex's fate... </div> <</if>> <<if $player.dominika_status == "slave">> <div class="mini-character-card"> <img src="assets/dominika/dominika.png" alt="Dominika" class="mini-portrait"> <div class="mini-info"> <span class="char-name">Dominika</span> <span class="char-status">Slave</span> <a class="mini-btn" data-passage="Dominika_Interact">Interact</a> </div> </div> <<elseif $player.dominika_status == "ally">> <div class="mini-character-card"> <img src="assets/dominika/dominika.png" alt="Dominika" class="mini-portrait"> <div class="mini-info"> <span class="char-name">Dominika</span> <span class="char-status">Ally</span> <a class="mini-btn" data-passage="Dominika_Interact">Interact</a> </div> </div> <<elseif $player.dominika_status == "dead">> <div class="status-message dark"> A dark stain on the floor reminds you of Dominika's fate... </div> <</if>> </div> </div> </div> <div class="actions-container"> <div class="choice-container"> <<if $player.stamina <= 0>> <div class="warning-message">You're too exhausted to go outside!</div> <a class="button dark-choice disabled" data-passage="House_Life">Go Outside</a> <<else>> <a class="button dark-choice" data-passage="Outside">Go Outside</a> <</if>> <a class="button dark-choice" data-passage="Slave">Slave room</a> <a class="button dark-choice" data-passage="Rest">Rest</a> </div> </div> </div> <style> /* Стиль для відображення дати в неоновому зеленому стилі */ .date-display { display: flex; justify-content: space-between; background: var(--bg-medium); /* Темніший фон для контрасту */ padding: var(--space-small); border-radius: 6px; margin-bottom: var(--space-medium); border: 2px solid var(--accent-highlight); /* Зелена рамка */ box-shadow: 0 0 6px rgba(0, 255, 0, 0.5); /* Неонове світіння */ } .day, .month, .year { color: #00FF00; /* Неоновий зелений (можна замінити на var(--accent-highlight), якщо це вже зелений) */ font-family: var(--font-mono); font-size: 1.1rem; font-weight: bold; text-shadow: 0 0 4px rgba(0, 255, 0, 0.7), 0 0 8px rgba(0, 255, 0, 0.5); /* Неонове світіння тексту */ transition: text-shadow var(--transition-fast); } .day:hover, .month:hover, .year:hover { text-shadow: 0 0 6px rgba(0, 255, 0, 0.9), 0 0 12px rgba(0, 255, 0, 0.7); /* Посилене світіння при наведенні */ } /* Контейнери і + */ .actions-container { background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-medium); margin-top: var(--space-large); box-shadow: var(--shadow-subtle), var(--glow-red); } .choice-container { display: flex; flex-wrap: wrap; gap: var(--space-small); justify-content: center; } .scene-content { margin-top: var(--space-large); padding: var(--space-large); background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; box-shadow: var(--shadow-medium), var(--glow-red); } .scene-text h2 { font-family: var(--font-mono); color: var(--accent-highlight); text-transform: none; letter-spacing: normal; margin-bottom: var(--space-small); font-size: 1.8rem; text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .residents-container { background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-medium); margin: var(--space-large) 0; box-shadow: var(--shadow-subtle), var(--glow-red); } .residents-container h3 { color: var(--accent-gold); font-family: var(--font-mono); margin-bottom: var(--space-medium); text-shadow: 0 0 4px rgba(212, 160, 23, 0.5); } .characters-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-small); justify-items: center; } .mini-character-card { background: var(--bg-light); border: 1px solid var(--accent-primary); border-radius: 6px; padding: var(--space-small); display: flex; align-items: center; gap: var(--space-small); box-shadow: var(--shadow-subtle); transition: transform var(--transition-fast); } .mini-character-card:hover { transform: scale(1.03); box-shadow: var(--shadow-medium), var(--glow-red); } .mini-info { display: flex; flex-direction: column; gap: 4px; } .char-name { font-weight: bold; color: var(--text-light); font-size: 1.1rem; } .char-status { color: var(--text-medium); font-size: 0.9rem; } .mini-btn { background: var(--accent-blue); color: var(--text-light); padding: 6px 12px; border: 2px solid var(--accent-primary); border-radius: 6px; text-decoration: none; font-size: 0.9rem; transition: background-color var(--transition-fast), transform var(--transition-fast); box-shadow: var(--shadow-subtle); } .mini-btn:hover { background: #6b3e3c; transform: scale(1.05); box-shadow: var(--shadow-medium), var(--glow-red); } .status-message.dark { background: var(--bg-light); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-small); color: var(--text-dark); text-align: center; margin: var(--space-small) 0; box-shadow: var(--shadow-subtle); } .warning-message { background: var(--bg-light); border: 2px solid var(--accent-secondary); border-radius: 6px; padding: var(--space-small); color: var(--accent-secondary); text-align: center; margin-bottom: var(--space-medium); box-shadow: var(--glow-red); } /* Анімація появи */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .scene-content, .residents-container, .actions-container { animation: fadeIn var(--transition-slow); } </style>
<div class="scene-content"> <div class="scene-text"> <h2>Ignoring the Scream</h2> <<set $player.alex_status = "ignored">> <p> You decide not to take the risk and ignore the scream. Who knows what it could have been... </p> </div> <div class="choice-container"> <a class="button" data-passage="Outside">Return</a> </div> </div>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="character-description"> <div class="character-info-block"> Luna is a young woman with long, dark hair cascading in waves, often glimpsed from afar as you watch the neighborhood from your bunker. Her movements reveal a certain grace, yet also a nervous tension, as if she fears being caught. </div> </div> </div> <div class="scene-dialogue"> <div class="narrative-block"> The night has enveloped the world in its mysterious shroud. You sit in the thick darkness of your house, tensely listening to the sounds drifting from outside. Suddenly, you hear quiet, cautious footsteps on the first floor. Someone moves with great care, as if striving to avoid any noise that might betray their presence. </div> <div class="narrative-block"> Gradually, with a mix of fear and curiosity, you descend the stairs, holding your breath. Your eyes catch a graceful female figure rummaging through your supplies. The pale glow of moonlight filtering through the window illuminates her long, dark hair that falls in waves. It is Luna—a young woman you have often noticed from a distance while observing the surroundings from your bunker. Her movements suggest both elegance and nervousness, as if she dreads being discovered. </div> <div class="narrative-block"> She is unaware of your presence. You hold the advantage of surprise, and this is your chance. With a swift motion, you lunge forward, grasping her firmly and pressing your palm over her mouth to muffle any potential scream. Luna begins to struggle, her body tensing as she tries to break free from your embrace, but you hold her with unyielding strength, feeling her heart beat with fear and despair. </div> <div class="narrative-block"> The surrounding silence grows oppressively heavy, and the moonlight casts long shadows across the walls, lending the scene an eerie, haunting tint. You realize that this moment could change everything—your fate and her future hinge on your next decision. </div> <div class="scene-dialogue"> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> "Now your fate is in my hands..." </div> </div> <div class="npc-character"> <h2 class="character-name glow-effect">Luna</h2> <img src="assets/luna/Luna_keep.png" alt="Luna" class="character-image"> <div class="choice-container"> <h3>What will you do with her?</h3> <div style="display: block; width: 100%;"> <a class="button dark-choice" data-passage="Luna_Enslave">Subdue her by force and make her your slave</a> </div> <div style="display: block; width: 100%;"> <a class="button neutral-choice" data-passage="Luna_Dominate">Dominate her and compel her to work off what she stole</a> </div> <div style="display: block; width: 100%;"> <a class="button light-choice" data-passage="Luna_Talk">Attempt to converse with her</a> </div> </div> </div> </div>
<div class="inventory-panel"> <h2>Inventory</h2> <ul class="inventory-list"> <<if $player.Caps > 0>> <li class="inventory-image"> <img src="assets/icons/caps.png" alt="Caps"> Caps <span>x <<= $player.Caps >></span> </li> <</if>> <<if $player.Raw_meat > 0>> <li class="inventory-image"> <img src="assets/icons/Raw_meat.png" alt="Raw_meat"> Raw meat <span>x <<= $player.Raw_meat >></span> </li> <</if>> <<if $player.Canned_Food > 0>> <li class="inventory-image"> <img src="assets/icons/canned_food.png" alt="Canned Food"> Canned Food <span>x <<= $player.Canned_Food >></span> </li> <</if>> <<if $player.Medkit > 0>> <li class="inventory-image"> <img src="assets/icons/medkit.png" alt="Medkit"> Medkit <span>x <<= $player.Medkit >></span> <<if $player.health < $player.max_health>> <<link "Use (+50 HP)" "Inventory">> <<set $player.Medkit -= 1>> <<set $player.health = Math.min($player.max_health, $player.health + 50)>> <</link>> <<else>> <span style="color: var(--text-dark); font-style: italic; margin-left: 10px;">[Max health]</span> <</if>> </li> <</if>> <<if $player.Pistol > 0>> <li class="inventory-image"> <img src="assets/icons/pistol.png" alt="Pistol"> Pistol <span>x <<= $player.Pistol >></span> <<link "Equip">> <<if $player.Weapon_status != "Pistol">> <<if $player.Weapon_status != "none">> <<set $player[$player.Weapon_status] += 1>> <</if>> <<set $player.Pistol -= 1>> <</if>> <<set $player.Weapon_status = "Pistol">> <<set $player.Weapon_damage = 10>> <<goto "Inventory">> <</link>> </li> <</if>> <<if $player.Shotgun > 0>> <li class="inventory-image"> <img src="assets/icons/shotgun.png" alt="Shotgun"> Shotgun <span>x <<= $player.Shotgun >></span> <<link "Equip">> <<if $player.Weapon_status != "Shotgun">> <<if $player.Weapon_status != "none">> <<set $player[$player.Weapon_status] += 1>> <</if>> <<set $player.Shotgun -= 1>> <</if>> <<set $player.Weapon_status = "Shotgun">> <<set $player.Weapon_damage = 30>> <<goto "Inventory">> <</link>> </li> <</if>> <<if $player.Wrench > 0>> <li class="inventory-image"> <img src="assets/icons/wrench.png" alt="Wrench"> Wrench <span>x <<= $player.Wrench >></span> <<link "Equip">> <<if $player.Weapon_status != "Wrench">> <<if $player.Weapon_status != "none">> <<set $player[$player.Weapon_status] += 1>> <</if>> <<set $player.Wrench -= 1>> <</if>> <<set $player.Weapon_status = "Wrench">> <<set $player.Weapon_damage = 4>> <<goto "Inventory">> <</link>> </li> <</if>> <<if $player.Knife > 0>> <li class="inventory-image"> <img src="assets/icons/knife.png" alt="Knife"> Knife <span>x <<= $player.Knife >></span> <<link "Equip">> <<if $player.Weapon_status != "Knife">> <<if $player.Weapon_status != "none">> <<set $player[$player.Weapon_status] += 1>> <</if>> <<set $player.Knife -= 1>> <</if>> <<set $player.Weapon_status = "Knife">> <<set $player.Weapon_damage = 8>> <<goto "Inventory">> <</link>> </li> <</if>> </ul> <div class="inventory-weapon" style="margin-top: 2.5rem; padding: 1.5rem; border-top: 5px solid var(--accent-primary); text-align: center;"> <<if $player.Weapon_status == "Pistol">> <img src="assets/icons/pistol.png" alt="Equipped Weapon"> <br> <strong>Equipped Weapon:</strong> Pistol<br> <strong>Damage:</strong> 10 <<elseif $player.Weapon_status == "Shotgun">> <img src="assets/icons/shotgun.png" alt="Equipped Weapon"> <br> <strong>Equipped Weapon:</strong> Shotgun<br> <strong>Damage:</strong> 30 <<elseif $player.Weapon_status == "Wrench">> <img src="assets/icons/wrench.png" alt="Equipped Weapon"> <br> <strong>Equipped Weapon:</strong> Wrench<br> <strong>Damage:</strong> 4 <<elseif $player.Weapon_status == "Knife">> <img src="assets/icons/knife.png" alt="Equipped Weapon"> <br> <strong>Equipped Weapon:</strong> Knife<br> <strong>Damage:</strong> 8 <<else>> <strong>No weapon equipped.</strong> <</if>> </div> </div> <<if $lastPassage != "Inventory">> <<button "Close" $lastPassage>> /* Використовуємо існуючий стиль кнопки */ <</button>> <</if>>
<div class="scene-content"> <div class="scene-text"> <p> You decide to give her a chance. Tears of gratitude well up in her eyes. "Thank you... I won't let you down," she whispers. </p> <<set $player.luna_status = "ally">> <<set $player.survivors_met ++>> </div> <div class="choice-container"> <a class="button light-choice" data-passage="House_Life">Show her the safehouse</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p> Luna is now under your complete authority. She must obey your commands, her fate entirely in your hands. </p> <div class="status-update"> <h3>Status Updated:</h3> <ul> <li>Luna has joined your household</li> <li>New interaction options unlocked</li> <li>Try interacting with her at home</li> </ul> </div> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="House_Life">Return home</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p> You decide to banish Luna. "Get out and don't come back," you say coldly. She trembles but quickly gathers her things and rushes out of the house. </p> <<set $player.luna_status = "banished">> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="House_Life">Return to your affairs</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p>You recall Luna from her task. She returns home with relief.</p> <<set $player.luna_work = "none">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<<include "Dialoque_style">> <div class="scene-content"> <div class="character-description"> <div class="character-info-block"> Luna is a young woman with long, dark hair cascading in waves, now in a state of apprehension and uncertainty. </div> </div> <div class="scene-dialogue"> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> You broke into my home, and for that, you must atone. But I don't want to be harsh. If you work for me and help me survive, I may forgive you. But remember, you must be honest and fulfill your duties. You must help me now, and we can survive together. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Luna)</span> (with hope in her voice) I was only looking for food. I had no intention of causing harm. I will do everything you say, just give me a chance. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> I believe you can be useful. But you must fulfill your duties. You will help me gather supplies, prepare food, and maintain the home. If you are honest and hardworking, I may forgive you and provide you with protection. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Luna)</span> (with gratitude) Thank you. I will do everything you say. I just want to survive and help you. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> Good. Now you must show that you are worthy of my trust. We will survive together in this world, but you must be honest and hardworking. (with a hint) And remember, survival in this world requires sacrifices. I can protect you, but you must be ready for all the challenges that may arise. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Luna)</span> (with uncertainty) I understand. I will do everything you say to survive. (with a hint) But I'm not sure if I can fulfill all your desires. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> (with a smile) You will learn quickly. Survival is not just about food and shelter. You must be ready for all aspects of life that may arise. (leaning in) And I will be honest with you: you will have to fulfill all my desires if you want to remain safe. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Luna)</span> (with anxiety) I... I understand. I will do everything you say. (with tears) Just give me a chance to survive. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> (satisfied) Good. You are starting to understand. We will survive together, but you must be ready for all challenges. (with a hint) And remember, I will expect your full devotion. </div> </div> </div> <div class="npc-character"> <h2 class="character-name glow-effect">Luna</h2> <img src="assets/luna/Luna_keep.png" alt="Luna" class="character-image"> <div class="choice-container"> <a class="button dark-choice" data-passage="Luna_Enslave">Assert control</a> <a class="button neutral-choice" data-passage="Luna_Banish">Send her away</a> <a class="button danger-choice" data-passage="Luna_Kill">End the threat</a> </div> </div>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="character-description"> <div class="character-info-block"> Luna is a young woman with long, dark hair cascading in waves, now caught in a moment of submission and fear. </div> </div> </div> <div class="scene-dialogue"> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> Now you are mine and you will obey me whore, you are my slave and you will accept your fate. From now on, you will do everything I say and live the way I say. You should be grateful that I am giving you a chance to survive. And your first duty will be to repay me for it. </div> </div> <<set $player.luna_status = "slave">> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Luna)</span> (crying) I will do everything you say. Just tell me what I should do. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> (with a hint) You know how to show your gratitude. I want you to show how grateful you are to me for giving you a chance to survive. (approaching her) You know what I'm talking about. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Luna)</span> (With humility) I will do anything you want, I am at your mercy, but please don't send me away, I can't wander around looking for food and in fear of constant death... </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> (Powerfully) I saw from the windows what a clumsy survivalist you are and how you go hungry almost every day, don't worry, now I will think for you, but in return your life belongs to me now, and I will decide for you what will happen to it, now kneel down whore and show your gratitude. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Luna)</span> (humbly and submissively) I will do everything you say... I will be the most submissive slave you have ever seen... (begins to follow your command) </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> (satisfied) Good, good. You are beginning to understand how things work. You are my slave, and you must fulfill all my desires. If you obey, I can be merciful to you. But if you try to escape or disobey, you will feel my wrath. </div> </div> </div> <div class="npc-character"> <h2 class="character-name glow-effect">Luna</h2> <img src="assets/luna/Luna_keep.png" alt="Luna" class="character-image"> </div> </div> <div class="video-container" style="text-align: center; margin: 20px 0;"> <video id="sceneVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/luna/blowjob_dominance.webm" type="video/webm"> </video> </div> <div class="choice-container"> <h3>What will you do next?</h3> <div style="display: block; width: 100%;"> <a class="button dark-choice" data-passage="Luna_Final">Claim your dominance</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <div class="luna-dialog"> <<if $player.luna_status == "slave">> <p class="narrator-text">Luna nervously fidgets with the hem of her clothing.</p> <p>"I... I've accepted my fate. Maybe this is better than starving or being killed by bandits. At least here I have a roof over my head and food. And... and you, master."</p> <p>"Thank you for giving me shelter. I'm still afraid that one day I'll wake up and find this was all a dream. That I'm back alone on the city streets. But for now... for now I feel safe."</p> <<elseif $player.luna_status == "ally">> <p class="narrator-text">Luna replies in a calm tone.</p> <p>"I'm okay, I'm glad you didn't kill me, that's usually what most survivors do when they have uninvited guests in their shelter, so I guess I'm just grateful to you and I think together we have a better chance of surviving."</p> <</if>> </div> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="Luna_Talk_Menu">Return to conversation</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p> Luna submits completely, her body still trembling from the experience. You feel absolute dominance over the situation. </p> <<set $player.stamina -= 30>> <<set $player.luna_status = "slave">> <<set $player.survivors_met ++>> </div> <div class="video-container"> <video id="aftermathVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/luna/cum.webm" type="video/webm"> </video> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Luna_AfterMath">Continue</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p> You finish on Luna, demonstrating your dominance. Luna now completely belongs to you. </p> <<set $player.stamina -= 30>> <<set $player.luna_status = "enslaved">> </div> <div class="video-container"> <video id="cumVideo" class="scene-video" controls preload="auto" width="100%" loop> <source src="assets/luna/cum.mp4" type="video/mp4"> <source src="assets/luna/cum.webm" type="video/webm"> </video> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Luna_AfterMath">Continue</a> </div> </div>
<div class="scene-content"> <img src="assets/luna/luna.png" alt="Luna" class="character-image"> </div> <div class="character-info"> <h3>Luna</h3> <p>Status: <<if $player.luna_status == "slave">>Slave<<else>>Ally<</if>></p> <<if $player.luna_work == "scavenging">> <p class="work-status">Current task: Scavenging for supplies</p> <</if>> <div class="interaction-menu"> <a class="button light-choice" data-passage="Luna_Talk_Menu">Talk</a> <<if $player.luna_work != "scavenging">> <a class="button dark-choice" data-passage="Luna_Service">Have sex</a> <</if>> <a class="button neutral-choice" data-passage="Luna_Work">Assign a task</a> <a class="button back-btn" data-passage="House_Life">← Back</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p> Without hesitation, you slit her throat. In this new world, there is no place for the weak. Her body falls to the floor, blood spreading across the wooden boards. </p> <<set $player.luna_status = "dead">> </div> <div class="choice-container"> <a class="button danger-choice" data-passage="House_Life">Clean up the body</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <<if $player.luna_status == "slave">> <p class="narrator-text">Luna lowers her gaze, her voice trembling with memories.</p> <</if>> <div class="luna-dialog"> <p>"Before the apocalypse, I was a medical student. I dreamed of becoming a surgeon... I had a family, friends, plans for the future. But when the epidemic started, everything changed. My father was among the first to die, and my mother... she couldn't bear it and took her own life."</p> <p>"I was left alone. I had to learn to survive, to steal, to hide. For three months I wandered the city, searching for a safe place. And now... now I'm here."</p> </div> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="Luna_Talk_Menu">Return to conversation</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p> "Get out and don't come back," you say coldly. Sobbing, Luna quickly disappears into the night's darkness. </p> <<set $player.luna_status = "rejected">> </div> <div class="choice-container"> <a class="button neutral-choice" data-passage="House_Life">Return to your business</a> </div> </div>
<<if $player.stamina < 10>> <div class="scene-content"> <div class="warning-message">You do not have enough stamina for sexual actions!</div> <div class="choice-container"> <a class="button back-btn" data-passage="Luna_Interact">← Back</a> </div> </div> <<else>> <div class="scene-content"> <div class="scene-text"> <p> <<if $player.luna_status == "slave">> Luna obediently waits for your orders, ready to fulfill any of your desires. <<elseif $player.luna_status == "ally">> Luna is happy to please her saviors. <</if>> </p> </div> <div class="video-container"> <video id="lunaServiceVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/luna/blowjob.webm" type="video/webm"> </video> </div> <div class="service-menu"> <div class="menu-title">Choose an action:</div> <div class="service-buttons"> <center> <a class="service-btn" id="lunaBlowjobBtn">Blowjob</a> <a class="service-btn" id="lunaVaginalBtn">Vaginal</a> <a class="service-btn" id="lunaAnalBtn">Anal</a> <a class="service-btn" id="lunaCumBtn">Finish</a> </center> </div> <a class="button back-btn" data-passage="Luna_Interact">← Back</a> </div> </div> <<script>> $(document).ready(function() { const lunaVideos = { blowjob: [ 'assets/luna/blowjob.webm', 'assets/luna/blowjob_2.webm', 'assets/luna/blowjob_3.webm', 'assets/luna/blowjob_4.webm', 'assets/luna/blowjob_5.webm', 'assets/luna/blowjob_6.webm', 'assets/luna/blowjob_7.webm', 'assets/luna/blowjob_8.webm', 'assets/luna/blowjob_dominance.webm' ], vaginal: [ 'assets/luna/vaginal (1).webm', 'assets/luna/vaginal (2).webm', 'assets/luna/vaginal (3).webm', 'assets/luna/vaginal (4).webm', 'assets/luna/vaginal (5).webm', 'assets/luna/vaginal (6).webm', 'assets/luna/vaginal (7).webm', 'assets/luna/vaginal (8).webm', 'assets/luna/vaginal (9).webm', 'assets/luna/vaginal (10).webm' ], anal: [ 'assets/luna/anal (1).webm', 'assets/luna/anal (2).webm' ], cum: [ 'assets/luna/cum.webm' ] }; function getRandomVideo(category) { const videos = lunaVideos[category]; return videos[Math.floor(Math.random() * videos.length)]; } function changeVideo(type) { const video = document.getElementById('lunaServiceVideo'); if (video) { const newSrc = getRandomVideo(type); if (video.src !== newSrc) { video.src = newSrc; video.play().catch(function(error) { console.log("Autoplay error:", error); }); } } // Update player stats with minimum check State.variables.player.stamina = Math.max(0, State.variables.player.stamina - 10); // Refresh stats display $(document).trigger(':refresh'); } // Add event handlers for buttons $('#lunaBlowjobBtn').on('click', function() { changeVideo('blowjob'); }); $('#lunaVaginalBtn').on('click', function() { changeVideo('vaginal'); }); $('#lunaAnalBtn').on('click', function() { changeVideo('anal'); }); $('#lunaCumBtn').on('click', function() { changeVideo('cum'); }); // Add click handler for video to toggle mute $('#lunaServiceVideo').on('click', function() { this.muted = !this.muted; }); }); <</script>> <</if>>
<div class="scene-content"> <div class="video-container"> <video id="sexVideo" class="scene-video" controls preload="auto" width="100%" loop> <source src="assets/luna/sex.mp4" type="video/mp4"> <source src="assets/luna/sex.webm" type="video/webm"> </video> </div> <<set $player.stamina -= 20>> <div class="choice-container"> <a class="button dark-choice" data-passage="Luna_Final">Finish the scene</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p>You send Luna to scavenge for supplies in the city. You see fear in her eyes, but she does not dare to refuse.</p> <<set $player.luna_work = "scavenging">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<div class="scene-content"> <p> You cautiously release Luna but remain on guard. She turns to face you, revealing an exhausted, broken young woman. </p> <div class="dialog"> <p class="luna-dialog"> "I... I can't keep living like this. Every day is just a struggle to survive. Please, let me stay. I'll make myself useful..." </p> </div> <div class="choice-container"> <a class="button light-choice" data-passage="Luna_Accept">Accept her offer</a> <a class="button neutral-choice" data-passage="Luna_Reject">Refuse</a> </div> </div>
<div class="scene-content"> <div class="dialog-container"> <<if $player.luna_status == "slave">> <p class="narrator-text">Luna looks at you with a mix of fear and submission.</p> <div class="luna-dialog"> <p>"Yes... master? What would you like to know?"</p> </div> <<elseif $player.luna_status == "ally">> <p class="narrator-text">Luna looks at you with grateful eyes, but you do not see fear in her eyes, only gratitude"</p> <div class="luna-dialog"> <p>"Hi, I was just cleaning up, what's new?"</p> </div> <</if>> <div class="dialog-options"> <a class="button light-choice" data-passage="Luna_Past">Ask about her past</a> <a class="button light-choice" data-passage="Luna_Feelings">Ask how she's feeling</a> <a class="button neutral-choice" data-passage="Luna_Interact">End conversation</a> </div> </div> </div>
<div class="scene-content"> <div class="work-menu"> <h3>Choose a task for Luna:</h3> <<if $player.luna_work == "scavenging">> <div class="current-task"> <p>Current task: Scavenging for supplies</p> <a class="button danger-choice" data-passage="Luna_Cancel_Work">Cancel task</a> </div> <<else>> <div class="work-options"> <a class="button neutral-choice" data-passage="Luna_Start_Scavenging">Start scavenging</a> </div> <</if>> <a class="button" data-passage="Luna_Interact">Return</a> </div> </div>
<div class="scene-content"> <div class="work-menu"> <h3>Choose a task for Luna:</h3> <<if $player.luna_work != "none">> <div class="current-task"> <p>Current task: <<print $player.luna_work>></p> <a class="button danger-choice" data-passage="Luna_Cancel_Work">Cancel task</a> </div> <<else>> <div class="work-options"> <a class="button neutral-choice" data-passage="Luna_Start_Scavenging">Start scavenging</a> </div> <div class="work-options"> <a class="button neutral-choice" data-passage="Luna_Сooks">Cooking</a> </div> <</if>> <a class="button" data-passage="Luna_Interact">Return</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <p>Luna tries to cook something edible.</p> <<set $player.luna_work = "Cooking">> </div> <div class="choice-container"> <a class="button" data-passage="House_Life">Return to the house</a> </div> </div>
<div class="main-menu"> <div class="menu-content"> <div class="logo-container"> <h1 class="game-logo">Corpse City</h1> <div class="logo-subtitle">2037: The World After the Fall</div> </div> <div class="menu-warning"> <div class="warning-icon">⚠</div> <p>WARNING! This game contains adult content (21+).<br> Sexual content, elements of dominance, violence, and brutality.<br> By continuing, you confirm that you are at least 18 years old.</p> </div> <nav class="menu-buttons"> <a class="button start-button" data-passage="Play"> <span class="button-inner">New Game</span> </a> <a class="button" data-passage="Settings"> <span class="button-inner">Settings</span> </a> <a class="button" data-passage="About"> <span class="button-inner">About</span> </a> </nav> <div class="world-info"> <div class="info-title">World of 2037</div> <div class="info-text"> After a biological catastrophe that wiped out 80% of the male population, the world descended into chaos. You are one of the few who survived. Now your fate is to decide the future of this world. </div> </div> <div class="version-info"> <span class="version">Version 0.2.2 Alpha</span> <span class="separator">|</span> <span class="engine">SugarCube 2.36.1</span> <span class="separator">|</span> <a class="changelog-link" data-passage="Changelog">Changelog</a> <a class="changelog-link" data-passage="Test_Basic">TEST</a> </div> </div>
<div class="choice-container"> <<silently>> /* Simple item prices setup */ <<set $prices = { "Canned_Food": [5, 2], "Raw_meat": [5, 2], "Medkit": [50, 25], "Pistol": [200, 100], "Shotgun": [1000, 500], "Wrench": [30, 15], "Knife": [70, 35] }>> /* Initialize player inventory if not exists */ <<if not $player.hasOwnProperty("Canned_Food")>><<set $player.Canned_Food = 0>><</if>> <<if not $player.hasOwnProperty("Raw_meat")>><<set $player.Raw_meat = 0>><</if>> <<if not $player.hasOwnProperty("Medkit")>><<set $player.Medkit = 0>><</if>> <<if not $player.hasOwnProperty("Pistol")>><<set $player.Pistol = 0>><</if>> <<if not $player.hasOwnProperty("Shotgun")>><<set $player.Shotgun = 0>><</if>> <<if not $player.hasOwnProperty("Wrench")>><<set $player.Wrench = 0>><</if>> <<if not $player.hasOwnProperty("Knife")>><<set $player.Knife = 0>><</if>> <<if not $player.hasOwnProperty("Caps")>><<set $player.Caps = 0>><</if>> <</silently>> <div class="shop-container"> <h1>Trader</h1> <div class="player-info"> <div>Name: $player.name</div> <div>Health: $player.health/$player.max_health</div> <div>Stamina: $player.stamina/$player.max_stamina</div> <div>Days Survived: $player.days_survived</div> <div class="caps-display">Caps: $player.Caps</div> </div> <div class="shop-section"> <h2>Buy Items</h2> <<for _item range Object.keys($prices)>> <div class="item-row"> <span class="item-name"><<print _item.replace("_", " ")>></span> <span class="item-price">$prices[_item][0] caps</span> <!-- Buy 1 --> <<if $player.Caps >= $prices[_item][0]>> <<capture _item>> <<button "Buy" class="buy-btn">> <<set $player.Caps -= $prices[_item][0]>> <<set $player[_item] += 1>> <<goto "Market">> <</button>> <</capture>> <<else>> <span class="disabled">[Not enough caps]</span> <</if>> <!-- Buy 10 --> <<set _cost10 = $prices[_item][0] * 10>> <<if $player.Caps >= _cost10>> <<capture _item>> <<button "Buy 10" class="buy-btn">> <<set $player.Caps -= $prices[_item][0] * 10>> <<set $player[_item] += 10>> <<goto "Market">> <</button>> <</capture>> <<else>> <span class="disabled">[Not enough caps]</span> <</if>> <!-- Buy Max --> <<set _maxBuy = Math.floor($player.Caps / $prices[_item][0])>> <<if _maxBuy > 0>> <<capture _item, _maxBuy>> <<button "Buy Max" class="buy-btn">> <<set $player.Caps -= _maxBuy * $prices[_item][0]>> <<set $player[_item] += _maxBuy>> <<goto "Market">> <</button>> <</capture>> <<else>> <span class="disabled">[Not enough caps]</span> <</if>> </div> <</for>> </div> <div class="shop-section"> <h2>Sell Items</h2> <<for _item range Object.keys($prices)>> <div class="item-row"> <span class="item-name"><<print _item.replace("_", " ")>></span> <span class="item-price">$prices[_item][1] caps</span> <span class="item-count">(you have: $player[_item])</span> <!-- Sell 1 --> <<if $player[_item] > 0>> <<capture _item>> <<button "Sell" class="sell-btn">> <<set $player.Caps += $prices[_item][1]>> <<set $player[_item] -= 1>> <<goto "Market">> <</button>> <</capture>> <<else>> <span class="disabled">[No items]</span> <</if>> <!-- Sell 10 --> <<set _sell10 = Math.min(10, $player[_item])>> <<if _sell10 > 0>> <<capture _item, _sell10>> <<button "Sell 10" class="sell-btn">> <<set $player.Caps += _sell10 * $prices[_item][1]>> <<set $player[_item] -= _sell10>> <<goto "Market">> <</button>> <</capture>> <<else>> <span class="disabled">[No items]</span> <</if>> <!-- Sell All --> <<set _sellAll = $player[_item]>> <<if _sellAll > 0>> <<capture _item, _sellAll>> <<button "Sell All" class="sell-btn">> <<set $player.Caps += _sellAll * $prices[_item][1]>> <<set $player[_item] = 0>> <<goto "Market">> <</button>> <</capture>> <<else>> <span class="disabled">[No items]</span> <</if>> </div> <</for>> </div> <div id="transaction-message" class="transaction-message"></div> <div class="inventory-section"> <h2>Your Inventory</h2> <div class="inventory-grid"> <<for _item range Object.keys($prices)>> <div class="inventory-item"> <div><<print _item.replace("_", " ")>></div> <div class="inventory-count">$player[_item]</div> </div> <</for>> </div> </div> <a class="button back-btn" data-passage="Settlement">← Return</a> </div> </div> <style> /* Стилі для кнопок магазину */ .buy-btn, .sell-btn { /* Структура та розміри */ display: inline-flex; align-items: center; justify-content: center; min-width: 80px; height: 36px; padding: 6px 12px; margin: 0 4px; position: relative; overflow: visible; /* Фон та рамки */ background: linear-gradient(135deg, var(--bg-light), var(--bg-medium)); border: 1px solid var(--accent-secondary); border-radius: 4px; /* Світіння та ефекти */ box-shadow: var(--glow-red); /* Текст */ color: var(--accent-highlight); font-family: var(--font-mono); font-size: 0.9rem; font-weight: 500; letter-spacing: 0.5px; text-shadow: 0 0 5px rgba(255, 0, 255, 0.8); text-align: center; text-transform: uppercase; /* Анімація та переходи */ transition: all 0.25s ease-out; cursor: pointer; /* Додатковий декор */ clip-path: polygon( 0% 10%, 5px 0%, calc(100% - 5px) 0%, 100% 10%, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0% calc(100% - 5px) ); } /* Спеціальні стилі для кнопок купівлі */ .buy-btn { background: linear-gradient(135deg, var(--accent-blue), var(--bg-medium)); border-color: var(--accent-primary); box-shadow: var(--glow-neon-blue); } /* Спеціальні стилі для кнопок продажу */ .sell-btn { background: linear-gradient(135deg, var(--accent-primary), var(--bg-medium)); border-color: var(--accent-secondary); box-shadow: var(--glow-neon-pink); } /* Ефект наведення для всіх кнопок */ .buy-btn:hover, .sell-btn:hover { transform: scale(1.05); box-shadow: var(--glow-neon-white); border-color: var(--accent-highlight); } /* Ефект натискання */ .buy-btn:active, .sell-btn:active { transform: scale(0.98) translateY(1px); box-shadow: 0 0 8px rgba(214, 0, 255, 0.7), inset 0 0 15px rgba(214, 0, 255, 0.4); } /* Стилі для неактивних кнопок */ .buy-btn:disabled, .sell-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; } /* Стилі для тексту "Not enough caps" та "No items" */ .disabled { color: var(--text-dark); font-style: italic; padding: 6px 12px; opacity: 0.7; } /* Анімація пульсації для кнопок */ @keyframes buttonPulse { 0% { box-shadow: var(--glow-red); } 50% { box-shadow: var(--glow-neon-pink); } 100% { box-shadow: var(--glow-red); } } .buy-btn, .sell-btn { animation: buttonPulse 2s infinite; } /* Стилі для контейнера з кнопками */ .item-row { display: flex; align-items: center; gap: 10px; padding: 8px; background: var(--bg-medium); border-radius: 4px; margin-bottom: 4px; transition: all 0.3s ease; } .item-row:hover { background: var(--bg-light); box-shadow: var(--glow-neon-blue); } /* Стилі для назви предмета */ .item-name { flex: 2; color: var(--text-light); font-weight: bold; text-shadow: 0 0 3px rgba(255, 0, 255, 0.4); } /* Стилі для ціни */ .item-price { flex: 1; color: var(--accent-gold); text-shadow: 0 0 3px rgba(240, 196, 32, 0.4); } /* Стилі для кількості */ .item-count { flex: 1; color: var(--text-medium); font-style: italic; } </style>
<div class="choice-container"> <div class="scene-text"> <div class="character-card"> <img src="assets/NPC/mary/mary.png" alt="Luna" class="character-image"> <h2>Mary</h2> <p> You see a beautiful girl with a poster saying “I sell my body” Sex with a woman - 20 caps Sex with a man - 10 caps </p> <p> Wow, a real man. It's been a long time since I had a real man. </p> <<if $player.Caps > 9>> <a class="button dark-choice" data-passage="Fuck_Mary">Fuck Mary (10 caps)</a> <</if>> <a class="button back-btn" data-passage="Settlement">← Return</a> </div>
<<if $musicEnabled>> <<link "Turn Off">> <<set $musicEnabled = false>> <<replace "#music-status">>Off<</replace>> <<replace "#music-toggle">> <<link "Turn On">> <<set $musicEnabled = true>> <<replace "#music-status">>On<</replace>> <<replace "#music-toggle">><<include "MusicToggle">><</replace>> <<run document.getElementById('bg-music').play()>> <</link>> <</replace>> <<run document.getElementById('bg-music').pause()>> <</link>> <<else>> <<link "Turn On">> <<set $musicEnabled = true>> <<replace "#music-status">>On<</replace>> <<replace "#music-toggle">> <<link "Turn Off">> <<set $musicEnabled = false>> <<replace "#music-status">>Off<</replace>> <<replace "#music-toggle">><<include "MusicToggle">><</replace>> <<run document.getElementById('bg-music').pause()>> <</link>> <</replace>> <<run document.getElementById('bg-music').play()>> <</link>> <</if>>
<div class="scene-content"> <div class="scene-text"> <h2>Outside</h2> <p>You stand in the middle of a devastated city. Broken windows and abandoned cars serve as reminders of the catastrophe that occurred. The air is heavy with the smell of decay and dust.</p> </div> <!-- Локації --> <div class="locations-section"> <h3>Locations</h3> <div class="locations-grid"> <<if $discovered_bunker>><a class="location-btn" data-passage="Bunker"><span class="location-icon">🔒</span><span>Bunker</span></a><</if>> <<if $discovered_mistral_mansion>><a class="location-btn" data-passage="MistralMansion"><span class="location-icon">🏰</span><span>Mistral Mansion</span></a><</if>> <<if $discovered_city_center>><a class="location-btn" data-passage="City_Center"><span class="location-icon">🏙️</span><span>City center</span></a><</if>> <<if $discovered_farm>><a class="location-btn" data-passage="Farm"><span class="location-icon">🌾</span><span>Farm</span></a><</if>> <<if $discovered_settlement>><a class="location-btn" data-passage="Settlement"><span class="location-icon">🏚️</span><span>Settlement</span></a><</if>> <<if $discovered_forest>><a class="location-btn" data-passage="Forest"><span class="location-icon">🌲</span><span>Forest</span></a><</if>> </div> </div> <!-- Дії --> <div class="actions-section"> <div class="choice-container"> <<if $player.alex_status == "unknown">><a class="button dark-choice enabled" data-passage="Search_Supplies">Scream</a><</if>> <<if $player.stamina lt 20>> <span class="warning-message">You don't have enough energy!</span> <<else>> <<if !$player.first_search>> <<set $player.first_search = true>><<set $found_food = true>><<set $found_meds = random(1, 100) lte 5>> <a class="button dark-choice" data-passage="Search_Result">Search for supplies</a> <<else>> <<set $found_food = random(1, 100) lte 50>><<set $found_meds = random(1, 100) lte 5>> <a class="button dark-choice" data-passage="Search_Result">Search for supplies</a> <</if>> <</if>> <<if $player.stamina lt 20>> <span class="warning-message">You don't have enough energy!</span> <<else>> <a class="button dark-choice" data-passage="Explore_Area">Explore area</a> <</if>> <a class="button back-btn" data-passage="House_Life">Return home</a> </div> </div> </div>
<<if !$ignorePassages.includes(State.passage)>> <<set $lastPassage = State.passage>> <</if>>
<div class="start-container"> <div class="start-content"> <h1>Start New Game</h1> <p>Are you ready to dive into the post-apocalyptic world?</p> <nav class="menu-buttons"> <a class="button start-button" data-passage="Choose_Name"> <span class="button-inner">Begin Story</span> </a> <a class="button" data-passage="MainMenu"> <span class="button-inner">Return to Menu</span> </a> </nav> </div> </div> <<script>> $(document).ready(function() { // Container styles $('.start-container').css({ 'max-width': '800px', 'margin': '0 auto', 'background': 'rgba(0, 0, 0, 0.8)', 'padding': '40px', 'border-radius': '10px', 'box-shadow': '0 0 20px rgba(0, 0, 0, 0.5)', 'text-align': 'center' }); $('.start-content h1').css({ 'color': '#fff', 'font-size': '2.5em', 'margin-bottom': '20px', 'text-shadow': '0 0 10px rgba(156, 14, 54, 0.7)' }); $('.start-content p').css({ 'color': '#ccc', 'font-size': '1.2em', 'margin-bottom': '30px' }); }); <</script>>
<div class="scene-content"> <div class="encounter-header"> <h2>Dangerous Encounter</h2> </div> <img src="assets/NPC/Raider/raider.png" alt="Raider" class="character-image"> </div> <div class="encounter-text"> <p>A woman with a gun and a cold look is standing in front of you, and she is clearly not going to back down.</p> <div class="dialog"> <p class="raider-dialog">"Are you a real man? You're worth a fortune, surrender and I'll take care of you."</p> </div> <p>She aims her weapon at you. Her intentions are clear - to take you as a slave. In this situation, you have no choice - you must fight.</p> <div class="choice-container"> <a class="button danger-choice" data-passage="Combat_Raider">Fight</a> <a class="button" data-passage="Outside">Try to escape</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Subjugating Raider</h2> <p> "Now get on your knees, whore, you're my property now. Now show me your submission." </p> <<set $player.slaves += 1>> <p> "Now you are my slave," you say, binding her hands. "And you will believe your own fate..." </p> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Slaves_Service">Secure the subjugation</a> <a class="button" data-passage="House_Life">Take her home</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Execution of Raider</h2> <p> You decide not to give her a chance. In this world, there is no place for mercy. A quick, decisive strike - and it's all over. You search her belongings and find some useful supplies. </p> <div class="loot"> <h3>Found:</h3> <ul> <<set $player.Canned_Food += 5>> <<set $player.Medkit ++>> <<set $player.Pistol ++>> <li>Canned food (5 unit)</li> <li>Medkit (2 unit)</li> <li>Pistol (1 unit)</li> </ul> </div> </div> <div class="choice-container"> <<if $player.current_location == "City_Center">> <a class="button" data-passage="City_Center">Return</a> <</if>> </div> </div> <style> .loot { background: rgba(0, 0, 0, 0.5); border: 1px solid var(--accent-gold); border-radius: 6px; padding: 10px; margin: 15px 0; } .loot h3 { color: var(--accent-gold); margin-top: 0; margin-bottom: 10px; font-size: 1em; } .loot ul { margin: 0; padding-left: 20px; } .loot li { color: #ffffff; margin-bottom: 5px; } </style>
<div class="choice-container"> <div class="scene-text"> <h2>Residential area</h2> You're standing in the middle of a residential neighborhood, and these buildings can hardly be called homes. There are signs with the ownership of each house. <div class="choice-container"> <div class="locations-grid"> <a class="location-btn" data-passage="Baika"> <div class="location-icon">👩</div> <span>Baika</span> </a> </div> </div> <div class="choice-container"> <a class="button back-btn" data-passage="Settlement">← Return</a> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Rest</h2> <p> You decide to rest and recover your strength. The day comes to an end... </p> <<set $player.stamina = $player.max_stamina>> <<set $player.health = $player.max_health>> <<set $player.days_survived += 1>> <div class="status-update"> <h3>Status Update:</h3> <ul> <li class="success">Energy fully restored!</li> <li class="success">Health fully restored!</li> <!-- COOKING WORK --> <<set _cooking = 0>> <<if $player.luna_work == "Cooking" and $player.Raw_meat > 0 >> <<set $player.Raw_meat -= 1>> <<set _cooking += 2>> <</if>> <<if $player.alex_work == "Cooking" and $player.Raw_meat > 0 >> <<set $player.Raw_meat -= 1>> <<set _cooking += 2>> <</if>> <<if $player.dominika_work == "Cooking" and $player.Raw_meat > 0 >> <<set $player.Raw_meat -= 1>> <<set _cooking += 2>> <</if>> <<if _cooking > 0>> <li>Cooks produce: <<print _cooking>> food.</li> <<set $player.Canned_Food += _cooking>> <</if>> <<set $player.Food_consumed = Math.min($player.survivors_met, $player.Canned_Food)>> <<set $player.Canned_Food -= $player.Food_consumed>> <li>Food consumed: <<print $player.Food_consumed>> <<if $player.Canned_Food < 0>><<set $player.Canned_Food = 0>><</if>></li> <<if $player.luna_status == "starving">><h4>Luna is starving!</h4> <</if>> <<if $player.alex_status == "starving">><h4>Alex is starving!</h4> <</if>> <<if $player.dominika_status == "starving">><h4>Dominika is starving!</h4> <</if>> <li>Another day has passed...</li> <<if $player.alex_work == "scavenging">> <<set _chance = random(1, 100)>> <<if _chance <= 25>> <<set $player.Canned_Food = ($player.Canned_Food || 0) + 1>> <li class="success">Alex found some canned food!</li> <</if>> <<if _chance <= 5>> <<set $player.Medkit = ($player.Medkit || 0) + 1>> <li class="success">Alex found medical supplies!</li> <</if>> <</if>> <<if $player.luna_work == "scavenging">> <<set _chance_luna = random(1, 100)>> <<if _chance_luna <= 25>> <<set $player.Canned_Food = ($player.Canned_Food || 0) + 1>> <li class="success">Luna found some canned food!</li> <</if>> <<if _chance_luna <= 5>> <<set $player.Medkit = ($player.Medkit || 0) + 1>> <li class="success">Luna found medical supplies!</li> <</if>> <</if>> <<if $player.dominika_work == "scavenging">> <<set _chance = random(1, 100)>> <<if _chance <= 25>> <<set $player.Canned_Food = ($player.Canned_Food || 0) + 1>> <li class="success">Dominika found some canned food!</li> <</if>> <<if _chance <= 5>> <<set $player.Medkit = ($player.Medkit || 0) + 1>> <li class="success">Dominika found medical supplies!</li> <</if>> <</if>> </ul> </div> </div> <!-- STARVATION SYSTEM --> <<if $player.survivors_met > 0>> <<if $player.Canned_Food < $player.survivors_met>> <!-- Збереження початкових статусів при першому голодуванні --> <<if !$player.has_starving_status>> <<set $player.has_starving_status = true>> <<set $player.luna_status_before = ($player.luna_status == "ally" ? "ally" : "slave")>> <<set $player.alex_status_before = ($player.alex_status == "ally" ? "ally" : "slave")>> <<set $player.dominika_status_before = ($player.dominika_status == "ally" ? "ally" : "slave")>> <</if>> <!-- Переведення в стан голодування --> <<if $player.survivors_met > $player.Canned_Food and $player.luna_status == "slave" or $player.luna_status == "ally">> <<set $player.luna_status = "starving">> <</if>> <<if $player.survivors_met > $player.Canned_Food and $player.alex_status == "slave" or $player.alex_status == "ally">> <<set $player.alex_status = "starving">> <</if>> <<if $player.survivors_met > $player.Canned_Food and $player.dominika_status == "slave" or $player.dominika_status == "ally">> <<set $player.dominika_status = "starving">> <</if>> <<else>> <!-- Відновлення статусів (тільки slave або ally) --> <<if $player.has_starving_status>> <<if $player.luna_status == "starving">> <<set $player.luna_status = $player.luna_status_before>> <</if>> <<if $player.alex_status == "starving">> <<set $player.alex_status = $player.alex_status_before>> <</if>> <<if $player.dominika_status == "starving">> <<set $player.dominika_status = $player.dominika_status_before>> <</if>> <<set $player.has_starving_status = false>> <</if>> <</if>> <</if>> <div class="choice-container"> <a class="button dark-choice" data-passage="House_Life">Wake Up</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Search Results</h2> <<set $player.stamina = Math.max(0, $player.stamina - 20)>> <<if $found_food>> <<set $food_found = random(1, 4)>> <p class="success">You found <<print $food_found>> can<<print $food_found === 1 ? "" : "s">> of food!</p> <<set $player.Canned_Food += $food_found>> <<run console.log("Added food. Total now:", $player.Canned_Food)>> <</if>> <<if $found_meds>> <<set $meds_found = random(0, 2)>> <<if $meds_found gt 0>> <p class="success">You found <<print $meds_found>> first aid kit<<print $meds_found === 1 ? "" : "s">>!</p> <<set $player.Medkit += $meds_found>> <<run console.log("Added medkits. Total now:", $player.Medkit)>> <<else>> <p>You found an empty first aid kit.</p> <</if>> <</if>> <<if !$found_food and !$found_meds>> <p>Unfortunately, you didn't find anything this time.</p> <</if>> </div> <div class="choice-container"> <a class="button" data-passage="Outside">Return</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Scavenging for Supplies</h2> <<set $player.first_search = true>> <<set $player.stamina = Math.max(0, $player.stamina - 20)>> <p> Suddenly, you hear a cry for help coming from the direction of an abandoned supermarket. </p> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Alex_Event">Investigate the scream</a> <a class="button" data-passage="Ignore_Scream">Ignore it</a> </div> </div>
<<if $player.slaves > 0>> <<set $player.Caps += 200>> <<set $player.slaves -= 1>> <<goto "Slave_Market">> <<else>> <<goto "Slave_Market">> <</if>>
<<set $soundVolume = $soundVolume ?? (localStorage.getItem('soundVolume') ? Number(localStorage.getItem('soundVolume')) : 50)>> <<set $musicVolume = $musicVolume ?? (localStorage.getItem('musicVolume') ? Number(localStorage.getItem('musicVolume')) : 50)>> <<set $musicEnabled = $musicEnabled ?? (localStorage.getItem('musicEnabled') ? JSON.parse(localStorage.getItem('musicEnabled')) : true)>> <<set $currentTrackIndex = $currentTrackIndex ?? 0>> <!-- Індекс поточного треку --> <div class="settings-page"> <div class="settings-header"> <h1>Settings</h1> <a class="back-button" data-passage="MainMenu"> <span class="back-icon">←</span> Return to menu </a> </div> <div class="settings-section"> <h3>Sound Volume: <span id="sound-volume-display"><<print $soundVolume>></span></h3> <div class="volume-controls"> <<link "-">> <<set $soundVolume = Math.max(0, $soundVolume - 10)>> <<replace "#sound-volume-display">><<print $soundVolume>><</replace>> <<run localStorage.setItem('soundVolume', $soundVolume)>> <</link>> <<link "+">> <<set $soundVolume = Math.min(100, $soundVolume + 10)>> <<replace "#sound-volume-display">><<print $soundVolume>><</replace>> <<run localStorage.setItem('soundVolume', $soundVolume)>> <</link>> </div> </div> <div class="settings-section"> <h3>Music Volume: <span id="music-volume-display"><<print $musicVolume>></span></h3> <div class="volume-controls"> <<link "-">> <<set $musicVolume = Math.max(0, $musicVolume - 10)>> <<replace "#music-volume-display">><<print $musicVolume>><</replace>> <<run localStorage.setItem('musicVolume', $musicVolume)>> <<run document.getElementById('bg-music').volume = $musicVolume / 100>> <</link>> <<link "+">> <<set $musicVolume = Math.min(100, $musicVolume + 10)>> <<replace "#music-volume-display">><<print $musicVolume>><</replace>> <<run localStorage.setItem('musicVolume', $musicVolume)>> <<run document.getElementById('bg-music').volume = $musicVolume / 100>> <</link>> </div> </div> <div class="settings-section"> <h3>Music: <span id="music-status"><<if $musicEnabled>>On<<else>>Off<</if>></span></h3> <div class="toggle-controls" id="music-toggle"> <<if $musicEnabled>> <<link "Turn Off">> <<set $musicEnabled = false>> <<replace "#music-status">>Off<</replace>> <<replace "#music-toggle">> <<link "Turn On">> <<set $musicEnabled = true>> <<replace "#music-status">>On<</replace>> <<replace "#music-toggle">><<include "MusicToggle">><</replace>> <<run localStorage.setItem('musicEnabled', JSON.stringify($musicEnabled))>> <<run document.getElementById('bg-music').play()>> <</link>> <</replace>> <<run localStorage.setItem('musicEnabled', JSON.stringify($musicEnabled))>> <<run document.getElementById('bg-music').pause()>> <</link>> <<else>> <<link "Turn On">> <<set $musicEnabled = true>> <<replace "#music-status">>On<</replace>> <<replace "#music-toggle">> <<link "Turn Off">> <<set $musicEnabled = false>> <<replace "#music-status">>Off<</replace>> <<replace "#music-toggle">><<include "MusicToggle">><</replace>> <<run localStorage.setItem('musicEnabled', JSON.stringify($musicEnabled))>> <<run document.getElementById('bg-music').pause()>> <</link>> <</replace>> <<run localStorage.setItem('musicEnabled', JSON.stringify($musicEnabled))>> <<run document.getElementById('bg-music').play()>> <</link>> <</if>> </div> </div> <div class="settings-section"> <h3>Current Track: <span id="current-track-display">Track <<print $currentTrackIndex + 1>></span></h3> <div class="volume-controls"> <<link "Previous">> <<set $currentTrackIndex = Math.max(0, $currentTrackIndex - 1)>> <<run updateTrack()>> <<replace "#current-track-display">>Track <<print $currentTrackIndex + 1>><</replace>> <</link>> <<link "Next">> <<set $currentTrackIndex = Math.min(2, $currentTrackIndex + 1)>> <<run updateTrack()>> <<replace "#current-track-display">>Track <<print $currentTrackIndex + 1>><</replace>> <</link>> </div> </div> <!-- Аудіо елемент для музики --> <<script>> // Load persisted settings var soundVolume = Number(localStorage.getItem('soundVolume')) || 50; var musicVolume = Number(localStorage.getItem('musicVolume')) || 50; var musicEnabled = JSON.parse(localStorage.getItem('musicEnabled')) ?? true; var currentTrackIndex = State.variables.currentTrackIndex || 0; // Update SugarCube state State.variables.soundVolume = soundVolume; State.variables.musicVolume = musicVolume; State.variables.musicEnabled = musicEnabled; State.variables.currentTrackIndex = currentTrackIndex; // Масив треків var tracks = [ "assets/Music/menu1.mp3", "assets/Music/menu2.mp3", "assets/Music/menu3.mp3" ]; // Глобальна функція для оновлення треку window.updateTrack = function() { var audio = document.getElementById('bg-music'); if (!audio) { audio = document.createElement('audio'); audio.id = 'bg-music'; document.body.appendChild(audio); } audio.src = tracks[State.variables.currentTrackIndex]; audio.volume = State.variables.musicVolume / 100; if (State.variables.musicEnabled) { audio.play().catch(function(error) { console.log("Autoplay blocked: ", error); document.body.addEventListener('click', function startMusic() { audio.play().catch(function() {}); document.body.removeEventListener('click', startMusic); }, { once: true }); }); } else { audio.pause(); } // Додаємо подію для автоматичного переключення на наступний трек audio.onended = function() { State.variables.currentTrackIndex = (State.variables.currentTrackIndex + 1) % tracks.length; window.updateTrack(); }; }; // Ініціалізація першого треку window.updateTrack(); <</script>> </div> <style> /* CSS Custom Properties for consistency */ :root { --space-xs: 0.5rem; --space-small: 0.75rem; --space-medium: 1rem; --space-large: 1.5rem; --transition-fast: 0.2s ease; --transition-slow: 0.5s ease; --shadow-subtle: 0 2px 4px rgba(0, 0, 0, 0.1); --shadow-medium: 0 4px 8px rgba(0, 0, 0, 0.15); --glow-red: 0 0 6px rgba(214, 0, 255, 0.6), 0 0 12px rgba(214, 0, 255, 0.3); --glow-green: 0 0 6px rgba(0, 255, 102, 0.7), 0 0 12px rgba(0, 255, 102, 0.4); --glow-neon-blue: 0 0 8px rgba(159, 0, 255, 0.7), 0 0 16px rgba(159, 0, 255, 0.4); --glow-neon-pink: 0 0 8px rgba(255, 0, 255, 0.7), 0 0 16px rgba(255, 0, 255, 0.4); --font-mono: 'Fira Code', 'Consolas', monospace; --bg-dark: #0e0320; --bg-medium: #1a0735; --bg-light: #2c0f4a; --text-light: #e5d9ff; --text-medium: #b69adb; --text-dark: #6b4c9e; --accent-primary: #800080; --accent-secondary: #d600ff; --accent-highlight: #ff00ff; --accent-gold: #f0c420; --accent-blue: #4b0082; --accent-green: #00ff66; --accent-white: #ffffff; } /* Settings page container */ .settings-page { margin: var(--space-large) auto; padding: var(--space-large); max-width: 800px; background: linear-gradient(145deg, var(--bg-medium), var(--bg-dark)); border: 2px solid var(--accent-primary); border-radius: 8px; box-shadow: var(--shadow-medium), var(--glow-red); animation: fadeIn var(--transition-slow); } /* Header styling */ .settings-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-large); flex-wrap: wrap; gap: var(--space-medium); } .settings-header h1 { font-family: var(--font-mono); color: var(--accent-highlight); font-size: clamp(1.5rem, 5vw, 2rem); text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); margin: 0; } /* Back button */ .back-button { display: inline-flex; align-items: center; gap: var(--space-xs); color: var(--text-light); text-decoration: none; font-family: var(--font-mono); font-size: 1rem; padding: var(--space-small) var(--space-medium); border: 2px solid var(--accent-secondary); border-radius: 6px; background: var(--bg-dark); transition: all var(--transition-fast); box-shadow: var(--shadow-subtle), var(--glow-neon-blue); text-shadow: 0 0 2px rgba(0, 0, 0, 0.5); } .back-button:hover, .back-button:focus-visible { background: var(--bg-medium); color: var(--accent-white); transform: translateY(-2px); box-shadow: var(--shadow-medium), var(--glow-neon-pink); text-shadow: 0 0 4px rgba(0, 0, 0, 0.7); outline: none; } .back-icon { font-size: 1.2rem; transition: transform var(--transition-fast); } .back-button:hover .back-icon, .back-button:focus-visible .back-icon { transform: translateX(-2px); } /* Settings section */ .settings-section { background: var(--bg-light); border: 2px solid var(--accent-secondary); border-radius: 6px; padding: var(--space-medium); margin-bottom: var(--space-large); box-shadow: var(--shadow-subtle), var(--glow-neon-blue); transition: transform var(--transition-fast); } .settings-section:hover { transform: translateY(-2px); } .settings-section h3 { color: var(--accent-highlight); font-family: var(--font-mono); font-size: 1.25rem; margin-bottom: var(--space-small); text-shadow: var(--glow-neon-pink); } /* Control groups */ .volume-controls, .toggle-controls { display: flex; flex-wrap: wrap; gap: var(--space-small); justify-content: center; margin: var(--space-small) 0; } .volume-controls a, .toggle-controls a { display: inline-flex; align-items: center; justify-content: center; padding: var(--space-small) var(--space-medium); border-radius: 6px; font-family: var(--font-mono); font-size: 1rem; text-decoration: none; transition: all var(--transition-fast); cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.5); } /* Volume controls */ .volume-controls a { background: var(--bg-dark); color: var(--text-light); border: 2px solid var(--accent-secondary); box-shadow: var(--shadow-subtle), var(--glow-neon-blue); } .volume-controls a:hover, .volume-controls a:focus-visible { background: var(--bg-medium); color: var(--accent-white); transform: translateY(-2px); box-shadow: var(--shadow-medium), var(--glow-neon-pink); text-shadow: 0 0 4px rgba(0, 0, 0, 0.7); outline: none; } /* Toggle controls */ .toggle-controls a { background: var(--bg-dark); color: var(--text-light); border: 2px solid var(--accent-green); box-shadow: var(--shadow-subtle), var(--glow-neon-green); } .toggle-controls a:hover, .toggle-controls a:focus-visible { background: var(--bg-medium); color: var(--accent-white); transform: translateY(-2px); box-shadow: var(--shadow-medium), var(--glow-neon-green); text-shadow: 0 0 4px rgba(0, 0, 0, 0.7); outline: none; } /* Fade-in animation */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Responsive design */ @media (max-width: 600px) { .settings-page { margin: var(--space-medium); padding: var(--space-medium); } .settings-header { flex-direction: column; align-items: flex-start; } .volume-controls, .toggle-controls { flex-direction: column; align-items: center; } } /* High contrast mode for accessibility */ @media (prefers-contrast: high) { .settings-page { background: var(--bg-dark); border-color: var(--accent-white); } .settings-section { background: var(--bg-medium); border-color: var(--accent-white); } .back-button, .volume-controls a, .toggle-controls a { border-color: var(--accent-white); color: var(--accent-white); } } /* Reduced motion for accessibility */ @media (prefers-reduced-motion: reduce) { .settings-page, .settings-section, .back-button, .volume-controls a, .toggle-controls a { animation: none; transition: none; } } </style>
<div class="scene-content"> <div class="scene-text"> <h2>Survivor Settlement</h2> <p> On the outskirts of the city, a small settlement of several dozen people has formed. They've built defensive structures from scavenged materials and organized a survival system. From a distance, you can spot guards stationed on makeshift watchtowers. </p> <p> It's unclear whether they'll be friendly to newcomers. Some similar communities trade with travelers, while others shoot strangers on sight. You should be cautious. </p> </div> <div class="choice-container"> <div class="locations-grid"> <a class="location-btn" data-passage="Market"> <div class="location-icon">🛒</div> <span>Market</span> </a> <a class="location-btn" data-passage="Slave_Market"> <div class="location-icon">⛓️</div> <span>Slave Market</span> </a> <a class="location-btn" data-passage="Bar"> <div class="location-icon">🍻</div> <span>Bar</span> </a> <a class="location-btn" data-passage="Administration"> <div class="location-icon">🏛️</div> <span>Administration</span> </a> <a class="location-btn" data-passage="Mary"> <div class="location-icon">👩</div> <span>Mary's Place</span> </a> <a class="location-btn" data-passage="ResidentialDistrict"> <div class="location-icon">🏘️</div> <span>Residential District</span> </a> </div> </div> <div class="choice-container"> <a class="button back-btn" data-passage="Outside">← Return</a> </div> </div>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/NPC/severina/severina.png" alt="Severina" class="character-image"> <div class="character-name glow-effect">Severina</div> <div class="character-description"> <div class="character-info-block"> Severina is the owner of the Matriarch bar, a strict but fair bartender who is trusted in the settlement. She is about 30+. She has unevenly cut hair that is as red as fire. She has tattoos in the form of flowers that wrap around her. She wears light clothes and always carries a homemade pistol and knife on her belt. </div> </div> </div> <div class="scene-dialogue"> <div class="narrative-block"> You walk into the Matriarch bar. Severina behind the bar looks up, and her eyes widen in surprise. Her smile sparkles slightly in the neon light as she slowly sets down the glass she's been wiping. Conversations in the bar quiet down, and several women look at each other. Severina shakes her head, a wry but warm smile appears on her face, and her voice sounds husky, tinged with genuine surprise: </div> <div class="dialogue-line"> <span class="speaker-label">(Severina)</span> A man? You've got to be kidding! She laughs softly, looking at you curiously. "Identify yourself, miracle of the apocalypse, and tell us how you managed to survive the damn virus. We rarely have guests like you, so your story better be worth a drink." She leans on the counter, her hand relaxed on the knife, but her eyes glow with warmth. "Come on, what are you doing alone?" </div> <div class="narrative-block"> She waits, clearly intrigued, and there is a slight buzz in the bar, as if everyone wants to hear your answer. </div> </div> <div class="scene-dialogue"> <a class="button" data-passage="Severina_Tell_Story">Tell her</a> <a class="button" data-passage="Bar" <<set $player.severina_status = "Familiar">Refuse</a> </div> </div> </div>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/NPC/severina/severina.png" alt="Severina" class="character-image"> <div class="character-name glow-effect">Severina</div> <div class="character-description"> <div class="character-info-block"> Severina is the owner of the Matriarch bar, a strict but fair bartender who is trusted in the settlement. She is about 30+. She has unevenly cut hair that is as red as fire. She has tattoos in the form of flowers that wrap around her. She wears light clothes and always carries a homemade pistol and knife on her belt. </div> </div> </div> <div class="scene-dialogue"> <div class="narrative-block"> You approach the bar, and Severina glances up from polishing a glass, her fiery red hair catching the dim light. The faint hum of conversations fills the Matriarch bar as she tilts her head, sizing you up with a knowing smirk. </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Severina)</span> Hello, decided to wet your throat a little? She says with a teasing edge, leaning slightly on the counter, her hand resting near her knife but her posture relaxed. </div> </div> <div class="narrative-block"> Her eyes flicker with curiosity, waiting for your response as the bar's atmosphere hums softly around you. </div> </div> <div class="choice-container"> <a class="button back-btn" data-passage="Severina_bunker_dialog">Ask about the bunker</a> <a class="button back-btn" data-passage="Bar">← Return</a> </div> </div> </div>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/NPC/severina/severina.png" alt="Severina" class="character-image"> <div class="character-name glow-effect">Severina</div> <div class="character-description"> <div class="character-info-block"> Severina is the owner of the Matriarch bar, a strict but fair bartender who is trusted in the settlement. She is about 30+. She has unevenly cut hair that is as red as fire. She has tattoos in the form of flowers that wrap around her. She wears light clothes and always carries a homemade pistol and knife on her belt. </div> </div> </div> <div class="player-character"> <div class="character-name glow-effect">$player.name</div> <div class="character-description"> <div class="character-info-block"> A survivor of the apocalypse, hardened by the wastelands and seeking a new purpose. </div> </div> </div> <div class="scene-dialogue"> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> All I remember is green clouds covering the sky, a burning pain in my head and darkness. When I woke up, I saw hundreds of dead people, their bodies lying like abandoned dolls in the middle of the destroyed city. I was terrified, I did not understand what was happening. Pain throbbed in my chest, as if something was trying to destroy me from the inside. I wandered the wastelands, avoiding gangs of marauders who robbed everyone indiscriminately. To survive, I pretended to be a wounded refugee, hiding my gender under my rags. One day I joined a gang, but when they slaughtered an entire camp for a few tins of food, I couldn't stand it. At night, I slit the throat of their leader, took the supplies and went to seek my fate. Now I'm trying to take control of my life again, maybe I'll go into the slave trade or another profitable business, I haven't decided yet. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Severina)</span> Wow, that's a cool story, but now men are worth their weight in gold, so you're in a good position. After all, if you need the first money in the settlement, you can find the administration there, and there's always some work, and we also have a slave market where you can sell or buy several slaves to work. There is also a market where you can sell unnecessary things and buy something useful for yourself, even weapons. By the way, if you don't have any, I advise you to buy at least something because they say that there is a crazy bitch Dominika running around the city who hunts travelers and sells them into slavery, so be careful. </div> </div> </div> <<set $player.severina_status = "Familiar">> <div class="choice-container"> <a class="button back-btn" data-passage="Bar">← Return</a> </div> </div> </div>
<div class="inventory-panel"> <h2>Slaves</h2> <ul class="inventory-list"> <li class="inventory-image"> <img src="assets/NPC/slave/slave.png" alt="Slave"> <span>x <<print $player.slaves>></span> </li> </ul> <<if $player.slaves > 0>> <a class="button" data-passage="Slaves_Service">Sex with slaves</a> <<else>> <span class="text-dark">No slaves available.</span> <</if>> </div> <div class="scene-content"> <a class="button" data-passage="House_Life">Return</a> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Slave Market</h2> <div class="inventory-panel"> <h3>Your Resources</h3> <ul class="inventory-list"> <li class="inventory-image"> <img src="assets/icons/caps.png" alt="Caps"> <span>x <<print $player.Caps>></span> </li> <li class="inventory-image"> <img src="assets/NPC/slave/slave.png" alt="Slave"> <span>x <<print $player.slaves>></span> </li> </ul> </div> <div class="market-actions"> <h3 class="text-center">Market Options</h3> <div class="choice-container"> <<if $player.Caps >= 400>> <a class="button market-btn buy" data-passage="Bye_Slave">Bye Slave (400 Caps)</a> <<else>> <a class="button market-btn buy disabled">Buy Slave (400 Caps) - Not Enough Caps</a> <</if>> <<if $player.slaves > 0>> <a class="button market-btn sell" data-passage="Sell_Slave">Sell Slave (200 Caps)</a> <<else>> <a class="button market-btn sell disabled">Sell Slave (200 Caps) - No Slaves</a> <</if>> </div> </div> <div class="choice-container"> <a class="button dark-choice" data-passage="Settlement">Return to Safehouse</a> </div> </div> </div> <style> :root { --bg-dark: #0e0320; --bg-medium: #1a0735; --bg-light: #2c0f4a; --text-light: #e5d9ff; --text-medium: #b69adb; --text-dark: #6b4c9e; --accent-primary: #800080; --accent-secondary: #d600ff; --accent-highlight: #ff00ff; --accent-gold: #f0c420; --accent-blue: #4b0082; --accent-green: #00ff66; --accent-white: #ffffff; --font-main: 'Courier New', monospace; --font-mono: 'Courier New', monospace; --space-small: 0.5rem; --space-medium: 1rem; --space-large: 2rem; --shadow-subtle: 0 3px 6px rgba(0, 0, 0, 0.5); --shadow-medium: 0 4px 8px rgba(0, 0, 0, 0.7); --glow-red: 0 0 6px rgba(214, 0, 255, 0.6), 0 0 12px rgba(214, 0, 255, 0.3); --glow-gold: 0 0 6px rgba(240, 196, 32, 0.6), 0 0 12px rgba(240, 196, 32, 0.3); --glow-green: 0 0 6px rgba(0, 255, 102, 0.7), 0 0 12px rgba(0, 255, 102, 0.4); --glow-white: 0 0 6px rgba(255, 255, 255, 0.8), 0 0 12px rgba(255, 255, 255, 0.4); --transition-fast: 0.3s ease; --transition-slow: 0.5s ease; --glow-neon-blue: 0 0 8px rgba(159, 0, 255, 0.7), 0 0 16px rgba(159, 0, 255, 0.4); --glow-neon-pink: 0 0 8px rgba(255, 0, 255, 0.7), 0 0 16px rgba(255, 0, 255, 0.4); --glow-neon-green: 0 0 8px rgba(0, 255, 102, 0.7), 0 0 16px rgba(0, 255, 102, 0.4); --glow-neon-white: 0 0 8px rgba(255, 255, 255, 0.7), 0 0 16px rgba(255, 255, 255, 0.4); --container-width: 1200px; } body { background: var(--bg-dark); color: var(--text-light); font-family: var(--font-main); line-height: 1.6; text-shadow: 0 0 5px rgba(255, 255, 255, 0.3); } /* Стилі для ринку рабів */ .market-actions { background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-medium); margin: var(--space-large) 0; box-shadow: var(--shadow-subtle), var(--glow-red); } .market-actions h3 { color: var(--accent-gold); font-family: var(--font-mono); margin-bottom: var(--space-medium); text-shadow: var(--glow-gold); animation: pulse 3s infinite; } .market-btn { display: inline-flex; align-items: center; justify-content: center; padding: 12px 24px; border-radius: 6px; font-family: var(--font-mono); font-size: 1.1rem; text-decoration: none; transition: background-color var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast); min-width: 180px; text-align: center; } .market-btn.buy { background: var(--accent-highlight); color: #000; border: 2px solid var(--accent-highlight); box-shadow: var(--glow-green); font-weight: bold; text-shadow: 0 0 2px rgba(255,255,255,0.7); } .market-btn.buy:hover { background: var(--bg-light); color: var(--accent-highlight); transform: scale(1.05); box-shadow: var(--shadow-medium), 0 0 15px rgba(34, 255, 136, 0.7); } .market-btn.sell { background: var(--accent-secondary); color: #fff; border: 2px solid var(--accent-secondary); box-shadow: var(--glow-red); font-weight: bold; text-shadow: 0 0 2px rgba(0,0,0,0.7); } .market-btn.sell:hover { background: var(--bg-light); color: var(--accent-secondary); transform: scale(1.05); box-shadow: var(--shadow-medium), 0 0 15px rgba(255, 51, 153, 0.7); } .market-btn.disabled { pointer-events: none; opacity: 0.8; background: var(--bg-light); color: var(--text-dark); border: 2px solid var(--text-dark); box-shadow: none; font-weight: bold; text-shadow: 0 0 2px rgba(255,255,255,0.3); cursor: not-allowed; } /* Попередні стилі для сцени, інвентарю тощо */ .scene-content { margin-top: var(--space-large); padding: var(--space-large); background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; box-shadow: var(--shadow-medium), var(--glow-red); } .scene-text h2 { font-family: var(--font-mono); color: var(--accent-white); text-transform: none; letter-spacing: normal; margin-bottom: var(--space-small); font-size: 1.8rem; text-shadow: var(--glow-neon-white); animation: glow 3s infinite; } .inventory-panel { background: var(--bg-medium); border: 2px solid var(--accent-secondary); border-radius: 6px; padding: var(--space-medium); margin: var(--space-large) 0; box-shadow: var(--shadow-medium), var(--glow-neon-blue); } .inventory-panel h3 { color: var(--accent-gold); font-family: var(--font-mono); margin-bottom: var(--space-medium); text-shadow: var(--glow-gold); animation: pulse 3s infinite; } .inventory-list { display: flex; flex-wrap: wrap; gap: var(--space-medium); justify-content: center; } .inventory-image { display: flex; align-items: center; gap: var(--space-small); } .inventory-image img { width: 60px; height: 60px; filter: drop-shadow(0 0 8px var(--accent-highlight)); transition: filter var(--transition-fast); } .inventory-image:hover img { filter: drop-shadow(0 0 12px var(--accent-highlight)); } .choice-container { display: flex; flex-wrap: wrap; gap: var(--space-small); justify-content: center; margin-top: var(--space-large); } .choice-container .button { padding: 10px 20px; background: var(--bg-light); color: var(--text-light); text-decoration: none; border: 2px solid var(--accent-primary); border-radius: 5px; transition: all 0.3s; box-shadow: var(--shadow-subtle), var(--glow-red); min-width: 150px; text-align: center; } .choice-container .button:hover { background: var(--accent-primary); transform: scale(1.05); box-shadow: var(--shadow-medium), 0 0 15px rgba(153, 34, 204, 0.7); text-shadow: 0 0 5px #ffffff; } .hunt-message { background: var(--bg-medium); border-left: 4px solid var(--accent-primary); padding: 10px; margin: 10px 0; border-radius: 5px; box-shadow: var(--shadow-subtle), var(--glow-red); } .hunt-message span { display: block; margin: 5px 0; } .hunt-message .damage { color: var(--accent-secondary); font-weight: bold; text-shadow: 0 0 8px rgba(255, 51, 153, 0.6); animation: pulse 2s infinite; } .hunt-message .reward { color: var(--accent-highlight); font-weight: bold; text-shadow: 0 0 8px rgba(34, 255, 136, 0.6); animation: glow 3s infinite; } .tired-message { color: #ffffff; text-align: center; font-size: 1.5em; margin: 20px 0; text-shadow: var(--glow-white); animation: flicker 4s infinite; } .game-over { color: var(--accent-secondary); text-align: center; font-size: 1.2em; margin: 20px 0; text-shadow: 0 0 10px rgba(255, 51, 153, 0.8); animation: fadeInOut 2s infinite; } /* Анімація появи */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.7; } 100% { opacity: 1; } } @keyframes glow { 0% { text-shadow: 0 0 5px rgba(34, 255, 136, 0.6); } 50% { text-shadow: 0 0 15px rgba(34, 255, 136, 0.8), 0 0 30px rgba(34, 255, 136, 0.4); } 100% { text-shadow: 0 0 5px rgba(34, 255, 136, 0.6); } } @keyframes flicker { 0% { opacity: 1; } 3% { opacity: 0.8; } 6% { opacity: 1; } 9% { opacity: 0.9; } 12% { opacity: 1; } 70% { opacity: 1; } 73% { opacity: 0.7; } 76% { opacity: 1; } 100% { opacity: 1; } } @keyframes fadeInOut { 0% { opacity: 0.7; } 50% { opacity: 1; } 100% { opacity: 0.7; } } .scene-content, .market-actions { animation: fadeIn var(--transition-slow); } /* Оновлені стилі для кнопок купівлі/продажу */ .buy-btn, .sell-btn { /* Структура та розміри */ display: inline-flex; align-items: center; justify-content: center; min-width: 80px; height: 36px; padding: 6px 12px; margin: 0 4px; position: relative; overflow: visible; /* Текст */ color: var(--accent-highlight); font-family: var(--font-mono); font-size: 0.9rem; font-weight: 500; letter-spacing: 0.5px; text-shadow: 0 0 2px rgba(255, 0, 255, 0.8); text-align: center; text-transform: uppercase; /* Анімація та переходи */ transition: all 0.25s ease-out; cursor: pointer; /* Додатковий декор */ clip-path: polygon( 0% 10%, 5px 0%, calc(100% - 5px) 0%, 100% 10%, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0% calc(100% - 5px) ); } .buy-btn { background: linear-gradient(135deg, var(--accent-blue), var(--bg-medium)); border: 1px solid var(--accent-primary); box-shadow: var(--glow-neon-blue); } .buy-btn:hover { background: linear-gradient(135deg, #6b00b6, var(--bg-medium)); box-shadow: var(--glow-neon-pink); border-color: var(--accent-highlight); color: var(--accent-white); text-shadow: 0 0 2px rgba(255, 255, 255, 0.9); transform: scale(1.05); } .sell-btn { background: linear-gradient(135deg, var(--accent-primary), var(--bg-medium)); border: 1px solid var(--accent-secondary); box-shadow: var(--glow-neon-pink); } .sell-btn:hover { background: linear-gradient(135deg, #6b00b6, var(--bg-medium)); box-shadow: var(--glow-neon-pink); border-color: var(--accent-highlight); color: var(--accent-white); text-shadow: 0 0 2px rgba(255, 255, 255, 0.9); transform: scale(1.05); } /* Стилі для неактивних кнопок */ .buy-btn:disabled, .sell-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; animation: none; color: var(--text-dark); text-shadow: none; } /* Стилі для тексту "Not enough caps" та "No items" */ .disabled { color: var(--text-dark); font-style: italic; padding: 6px 12px; opacity: 0.7; text-shadow: none; } /* Анімації для ефектів */ @keyframes pulseNeon { 0% { box-shadow: 0 0 10px rgba(214, 0, 255, 0.6), 0 0 20px rgba(214, 0, 255, 0.3), inset 0 0 8px rgba(214, 0, 255, 0.2); } 50% { box-shadow: 0 0 12px rgba(0, 255, 102, 0.7), 0 0 24px rgba(0, 255, 102, 0.4), inset 0 0 10px rgba(0, 255, 102, 0.3); } 100% { box-shadow: 0 0 12px rgba(214, 0, 255, 0.7), 0 0 24px rgba(214, 0, 255, 0.4), inset 0 0 10px rgba(214, 0, 255, 0.3); } } @keyframes scanline { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } </style>
<<if $player.stamina < 10>> <div class="scene-content"> <div class="warning-message">You do not have enough stamina for sexual actions!</div> <div class="choice-container"> <a class="button back-btn" data-passage="Slave">← Back</a> </div> </div> <<else>> <div class="scene-content"> <div class="scene-text"> <p> Slave obediently waits for your orders, ready to fulfill any of your desires. </p> </div> <div class="video-container"> <video id="slaveServiceVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/NPC/slave/blowjob (1).webm" type="video/webm"> </video> </div> <div class="service-menu"> <div class="menu-title">Choose an action:</div> <div class="service-buttons"> <center> <a class="service-btn" id="slaveBlowjobBtn">Blowjob</a> <a class="service-btn" id="slaveVaginalBtn">Vaginal</a> <a class="service-btn" id="slaveAnalBtn">Anal</a> <a class="service-btn" id="slaveCumBtn">Finish</a> </center> </div> <a class="button back-btn" data-passage="House_Life">← Finish</a> </div> <<script>> $(document).ready(function() { const slaveVideos = { blowjob: [ 'assets/NPC/slave/blowjob (1).webm', 'assets/NPC/slave/blowjob (2).webm', 'assets/NPC/slave/blowjob (3).webm', 'assets/NPC/slave/blowjob (4).webm', 'assets/NPC/slave/blowjob (5).webm', 'assets/NPC/slave/blowjob (6).webm', 'assets/NPC/slave/blowjob (7).webm', 'assets/NPC/slave/blowjob (8).webm', 'assets/NPC/slave/blowjob (9).webm', 'assets/NPC/slave/blowjob (10).webm', 'assets/NPC/slave/blowjob (11).webm' ], vaginal: [ 'assets/NPC/slave/vaginal (1).webm', 'assets/NPC/slave/vaginal (2).webm', 'assets/NPC/slave/vaginal (3).webm', 'assets/NPC/slave/vaginal (4).webm', 'assets/NPC/slave/vaginal (5).webm', 'assets/NPC/slave/vaginal (6).webm', 'assets/NPC/slave/vaginal (7).webm', 'assets/NPC/slave/vaginal (8).webm', 'assets/NPC/slave/vaginal (9).webm', 'assets/NPC/slave/vaginal (10).webm', 'assets/NPC/slave/vaginal (11).webm' ], anal: [ 'assets/NPC/slave/anal (1).webm', 'assets/NPC/slave/anal (2).webm', 'assets/NPC/slave/anal (3).webm', 'assets/NPC/slave/anal (4).webm', ], cum: [ 'assets/NPC/slave/cum (1).webm', 'assets/NPC/slave/cum (2).webm', 'assets/NPC/slave/cum (3).webm', 'assets/NPC/slave/cum (4).webm', ] }; function getRandomVideo(category) { const videos = slaveVideos[category]; return videos[Math.floor(Math.random() * videos.length)]; } function changeVideo(type) { const video = document.getElementById('slaveServiceVideo'); if (video) { const newSrc = getRandomVideo(type); if (video.src !== newSrc) { video.src = newSrc; video.play().catch(function(error) { console.log("Autoplay error:", error); }); } } // Update player stats with minimum check State.variables.player.stamina = Math.max(0, State.variables.player.stamina - 10); // Refresh stats display $(document).trigger(':refresh'); } // Add event handlers for buttons $('#slaveBlowjobBtn').on('click', function() { changeVideo('blowjob'); }); $('#slaveVaginalBtn').on('click', function() { changeVideo('vaginal'); }); $('#slaveAnalBtn').on('click', function() { changeVideo('anal'); }); $('#slaveCumBtn').on('click', function() { changeVideo('cum'); }); // Add click handler for video to toggle mute $('#slaveServiceVideo').on('click', function() { this.muted = !this.muted; }); }); <</script>> <</if>>
<<if $player.game_status == 1>> <div class="status-container"> <h3 class="text-center">$player.name</h3> <div class="status-row"> <span class="status-item"> <img src="assets/icons/caps.png" alt="Caps" class="status-icon"> <span><<print $player.Caps>></span> </span> <span class="status-item"> <img src="assets/icons/population.png" alt="Population" class="status-icon"> <span><<print $player.survivors_met>></span> </span> </div> <div class="bars-container"> <div class="status-row"> <span class="stat-label">❤️</span> <div class="bar-wrapper"> <progress id="playerHealthBar" @value="$player.health" @max="$player.max_health"></progress> </div> </div> <div class="status-row"> <span class="stat-label">⚡</span> <div class="bar-wrapper"> <progress id="playerStaminaBar" @value="$player.stamina" @max="$player.max_stamina"></progress> </div> </div> </div> </div> <</if>>
<<set $player = { name: "Alex", health: 100, max_health: 100, stamina: 100, max_stamina: 100, current_month: "March", current_year: 2037, days_survived: 90, inventory: [], Canned_Food: 10, Raw_meat: 0, Medkit: 1, Caps: 100, Pistol: 0, Shotgun: 0, Wrench: 1, Knife: 0, slaves: 0, Weapon_status: "none", Weapon_damage: 2, Weapon_icon: "none", game_status: 0, survivors_met: 1, Food_consumed: 1, luna_status: "unknown", alex_status: "unknown", dominika_status: "unknown", severina_status: "unknown", baika_status: "unknown", luna_work: "none", alex_work: "none", dominika_work: "none", wolf_mutant_damage: 25, rat_mutant_damage: 10, met_valerie: false, quests: [], meat_quest_active: false, slave_quest_active: false, valerie_dialogue_state: "initial", current_location: "" }>> <<set $SlaveQuest_done = 0>> <<set $bunker_quest_progress = "none">> <<set $mistral = { Mistral_Basement: 3, Mistral_Living_room: 1, Mistral_Door_Kitchen: 2, Mistral_Door_Kitchen_loot: 1, Mistral_Stairs_2nd_floor: 6 }>> <<set $discovered_bunker = false>> <<set $discovered_mistral_mansion = false>> <<set $discovered_farm = false>> <<set $discovered_city_center = false>> <<set $discovered_settlement = false>> <<set $discovered_forest = false>> <<set $discovered_dominika = false>> <<set $lastPassage = "House_Life">> <<set $ignorePassages = ["Inventory","Zombie_Kill", "Combat_Victory","Combat_Attack","Combat_Enemy", "Combat_Defend","Combat_Heal", "Combat_Defeat","Zombie_Kill","Combat_Victory","Raider_Kill","Dominika_Kill"]>>
<<if $player.game_status == 1>> [[Inventory]] <</if>>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/NPC/severina/severina.png" alt="Severina" class="character-image"> <div class="character-name glow-effect">Severina</div> <div class="character-description"> <div class="character-info-block"> Severina is the owner of the Matriarch bar, a strict but fair bartender who is trusted in the settlement. She is about 30+. She has unevenly cut hair that is as red as fire. She has tattoos in the form of flowers that wrap around her. She wears light clothes and always carries a homemade pistol and knife on her belt. </div> </div> </div> <div class="scene-dialogue"> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Severina)</span> You mean the one near the city? My girls have tried to get in, but so far without success. The hatch probably weighs several tons, so you can't get in without special equipment, or you'll somehow find out the code. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">(You)</span> Who else could know more about it? </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">(Severina)</span> Listen, I know a lot of things, but I'm not an information bureau. Ask someone in a residential neighborhood, maybe they know more. </div> </div> </div> <<set $bunker_quest_progress = "Phase 1">> <div class="choice-container"> <a class="button back-btn" data-passage="Bar">← Return</a> </div> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Mistral mansion</h2> <p> You see an abandoned but gigantic mansion in front of you. </p> <p> There are a lot of corpses near the gate, some already decomposed and others still waiting for the same fate, it seems that nothing good awaits the living inside. </p> </div> <div class="choice-container"> <a class="button" data-passage="MistralEntered">enter</a> <a class="button" data-passage="Bunker">Return</a> </div> </div>
<style> body { background: linear-gradient(135deg, #0a0015, #1a0033); font-family: 'Arial', sans-serif; min-height: 100vh; } .choice-container { max-width: 900px; margin: 0 auto; background: rgba(20, 0, 40, 0.8); border: 2px solid #8B00FF; border-radius: 20px; padding: 30px; box-shadow: 0 0 30px rgba(139, 0, 255, 0.5), inset 0 0 30px rgba(139, 0, 255, 0.1); backdrop-filter: blur(10px); } .scene-text { text-align: center; color: #E6E6FA; } /* Стиль для NPC персонажів */ .npc-character { margin-bottom: 20px; } .npc-character .character-image { width: 225px; height: 225px; border-radius: 50%; border: 3px solid #9932CC; box-shadow: 0 0 20px rgba(153, 50, 204, 0.7); filter: drop-shadow(0 0 10px rgba(153, 50, 204, 0.8)); } .npc-character .character-name { color: #DA70D6; font-size: 2.5em; margin: 15px 0; text-shadow: 0 0 10px #DA70D6, 0 0 20px #DA70D6, 0 0 30px #DA70D6; font-weight: bold; } .npc-character .character-description { text-align: left; background: rgba(25, 0, 50, 0.6); padding: 25px; border-radius: 15px; border: 1px solid rgba(139, 0, 255, 0.3); box-shadow: inset 0 0 20px rgba(139, 0, 255, 0.1); color: #E6E6FA; } .npc-character .dialogue-line { margin: 15px 0; padding: 12px 20px; border-radius: 10px; background: linear-gradient(135deg, rgba(139, 0, 255, 0.2), rgba(153, 50, 204, 0.2)); border-left: 4px solid #8B00FF; color: #E6E6FA; } /* Стиль для персонажа гравця */ .player-character { margin-bottom: 20px; } .player-character .character-image { width: 225px; height: 225px; border-radius: 50%; border: 3px solid #00BFFF; box-shadow: 0 0 20px rgba(0, 191, 255, 0.7); filter: drop-shadow(0 0 10px rgba(0, 191, 255, 0.8)); } .player-character .character-name { color: #00BFFF; font-size: 2.5em; margin: 15px 0; text-shadow: 0 0 10px #00BFFF, 0 0 20px #00BFFF, 0 0 30px #00BFFF; font-weight: bold; } .player-character .character-description { text-align: left; background: rgba(0, 25, 50, 0.6); padding: 25px; border-radius: 15px; border: 1px solid rgba(0, 191, 255, 0.3); box-shadow: inset 0 0 20px rgba(0, 191, 255, 0.1); color: #E6F3FF; } .player-character .dialogue-line { margin: 15px 0; padding: 12px 20px; border-radius: 10px; background: linear-gradient(135deg, rgba(0, 191, 255, 0.2), rgba(30, 144, 255, 0.2)); border-left: 4px solid #00BFFF; color: #E6F3FF; margin-left: 20px; } .speaker-label { font-weight: bold; margin-bottom: 5px; display: block; } .npc-character .speaker-label { color: #DA70D6; text-shadow: 0 0 5px #DA70D6; } .player-character .speaker-label { color: #00BFFF; text-shadow: 0 0 5px #00BFFF; } .coordinates-received { color: #00FF7F; text-shadow: 0 0 10px #00FF7F, 0 0 20px #00FF7F; font-weight: bold; text-align: center; margin: 20px 0; padding: 15px; background: rgba(0, 255, 127, 0.1); border: 1px solid rgba(0, 255, 127, 0.3); border-radius: 10px; } .glow-effect { animation: pulse 2s infinite; } @keyframes pulse { 0% { text-shadow: 0 0 5px #DA70D6; } 50% { text-shadow: 0 0 20px #DA70D6, 0 0 30px #DA70D6; } 100% { text-shadow: 0 0 5px #DA70D6; } } /* Стилі для локацій */ .location-title { color: #DA70D6; font-size: 2.8em; margin: 20px 0 30px 0; text-shadow: 0 0 10px #DA70D6, 0 0 20px #DA70D6, 0 0 30px #DA70D6; font-weight: bold; text-align: center; } .location-description { text-align: left; margin: 25px 0; background: rgba(25, 0, 50, 0.4); padding: 20px; border-radius: 15px; border: 1px solid rgba(139, 0, 255, 0.2); } .description-block { margin: 18px 0; padding: 15px; background: linear-gradient(135deg, rgba(139, 0, 255, 0.1), rgba(153, 50, 204, 0.1)); border-left: 3px solid #8B00FF; border-radius: 8px; color: #E6E6FA; line-height: 1.7; font-size: 1.05em; } .description-block:hover { background: linear-gradient(135deg, rgba(139, 0, 255, 0.15), rgba(153, 50, 204, 0.15)); box-shadow: 0 0 10px rgba(139, 0, 255, 0.3); transition: all 0.3s ease; } /* Стилі для опису персонажа */ .character-info-block { margin: 18px 0; padding: 18px; background: linear-gradient(135deg, rgba(139, 0, 255, 0.15), rgba(153, 50, 204, 0.15)); border: 1px solid rgba(139, 0, 255, 0.3); border-radius: 12px; color: #E6E6FA; line-height: 1.7; font-size: 1.05em; font-style: italic; text-align: center; } /* Стилі для сцени діалогу */ .scene-dialogue { margin: 25px 0; background: rgba(25, 0, 50, 0.4); padding: 20px; border-radius: 15px; border: 1px solid rgba(139, 0, 255, 0.2); } .narrative-block { margin: 18px 0; padding: 15px; background: linear-gradient(135deg, rgba(75, 0, 130, 0.2), rgba(106, 90, 205, 0.2)); border-left: 3px solid #6A5ACD; border-radius: 8px; color: #DDA0DD; line-height: 1.7; font-size: 1.05em; font-style: italic; } </style>
<<include "Dialoque_style">> <div class="choice-container"> <div class="scene-text"> <div class="character-card"> <img src="assets/NPC/baika/baika.png" alt="Baika" class="character-image"> </div> <h2 class="character-name">Baika</h2> <div class="character-description"> You approach one of the houses and knock on the door You approach one of the houses and knock on the door, the door opens and you see a slender, beautiful girl in a leather bra and wide round sunglasses. <div class="choice-container"> <a class="button" data-passage="Baika_talk">Talk</a> <a class="button back-btn" data-passage="ResidentialDistrict">← Return</a> </div> </div>
<<if $bunker_quest_progress == "END">> <<goto "Quest_bunker_complete">> <</if>> <<include "Dialoque_style">> <<set $player.baika_status = "Familiar">> <div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/NPC/baika/baika.png" alt="Baika" class="character-image"> <h2 class="character-name glow-effect">Baika</h2> </div> <div class="scene-dialogue"> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">Baika:</span> Wow! The first man who came to the settlement and immediately to me, what do I owe this luck to? I'm sorry I didn't introduce myself, my name is Baika, I'm a scout for the settlement, sometimes I work part-time for Severina. </div> </div> <div class="choice-container"> <<if $bunker_quest_progress == "none">> <a class="button" data-passage="Baika_bunker">Ask about the bunker</a> <</if>> <a class="button" data-passage="Baika">← Return</a> <<if $bunker_quest_progress == "Complete">> <a class="button dark-choice" data-passage="Baika_sex">Have sex</a> <</if>> </div> </div> </div>
<<include "Dialoque_style">> <<set $player.baika_status = "Familiar">> <div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/NPC/baika/baika.png" alt="Baika" class="character-image"> <h2 class="character-name glow-effect">Baika</h2> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">You:</span> Tell me about the bunker. </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">Baika:</span> Hmmm, if you want to get there, it's not an easy task, I've tried thousands of combinations and nothing worked, and to physically open it you probably need special equipment or a bazooka hehe. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">You:</span> So there's no way to get there? </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">Baika:</span> Well, I didn't say that... maybe the code is in the Mistral estate, but I have no idea where exactly, I've looked in places that were relatively safe, but there are vile creatures everywhere that want to bite a piece of your ass, so I've given up on that idea for now. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">You:</span> Mistral estate? </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">Baika:</span> Yes, this is the estate of the owner of the bunker, he is some kind of billionaire in the past, they say that he survived because he hid in the bunker before the disaster, or even he was involved in all this, but I don't know what is true. </div> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">You:</span> Wow, that's really unexpected, but if I help you deal with the threats in his estate, can you get the code? </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">Baika:</span> It's just a guess that he might be there, don't get your hopes up, but yes, if you clear the place out, I'll try to get some information. Here are the coordinates of his mansion, but damn it, if you go in there, be careful, there's a horde of them. </div> </div> <div class="coordinates-received"> ✦ You have received the coordinates of the Mistral estate. ✦ </div> </div> <<set $bunker_quest_progress = "Phase 1">> <div class="choice-container"> <a class="button" data-passage="Baika">← Return</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Mistral mansion</h2> <p> You are inside a huge and perhaps, if not for the disaster, very beautiful mansion, now there are expensive but destroyed by nature decorative elements and furniture, cracked walls and unknown dangers waiting for safe travelers. </p> <p> You see a lot of doors, but most of them are filled in after numerous collapses. </p> </div> <div class="choice-container"> <a class="button" data-passage="Mistral_Living_room">Door “Living room”</a> <a class="button" data-passage="Mistral_Door_Kitchen">Door “Kitchen”</a> <a class="button" data-passage="Mistral_Basement">Door “Basement”</a> <a class="button" data-passage="Mistral_Stairs_2nd floor">Stairs “2nd floor”</a> <a class="button" data-passage="MistralMansion">Return</a> </div> </div>
<<set $player.current_location = "Mistral_Living_room">> <<if $mistral.Mistral_Living_room > 0>> <<goto "Scarbourg_Encounter">> <</if>> <<set $bunker_quest_progress = "END">> <div class="scene-content"> <div class="scene-text"> <h2>Mistral Mansion</h2> <p> On the wall you see the inscription “A2B4C977” </p> </div> <img src="assets/Location/mistral/mistral_living_room.png" alt="mistral_living_room" class="big-image"> <div class="choice-container"> <a class="button" data-passage="MistralEntered">Return</a> </div> </div>
<div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/Other/indevelopment.png" alt="Severina" class="character-image"> <div class="character-name glow-effect">Work in progress...</div> <a class="button" data-passage="MistralEntered">Return</a>
<<include "Link CSS">> <<set $player.current_location = "Mistral_Door_Kitchen">> <<silently>> <<if not $mistral>> <<set $mistral = {}>> <</if>> <<if not $mistral.hasOwnProperty("Mistral_Door_Kitchen")>> <<set $mistral.Mistral_Door_Kitchen = 0>> <</if>> <<if not $mistral.hasOwnProperty("Mistral_Door_Kitchen_loot")>> <<set $mistral.Mistral_Door_Kitchen_loot = 1>> <</if>> <<if not $player.hasOwnProperty("Canned_Food")>> <<set $player.Canned_Food = 0>> <</if>> <</silently>> <<if $mistral.Mistral_Door_Kitchen > 0>> <<goto "Zombie_Encounter">> <</if>> <div class="scene-content"> <div class="scene-text"> <h2>Mistral Mansion - Kitchen</h2> <p> A very spacious and very neglected rich man's kitchen. Dust covers the marble countertops, and cobwebs hang from the ornate light fixtures. Despite the decay, you can see this was once a place of luxury and fine dining. </p> </div> <div class="choice-container"> <<if $mistral.Mistral_Door_Kitchen_loot > 0>> <<link "Search the kitchen cabinets" "Mistral_Door_Kitchen">> <<set $player.Canned_Food += 10>> <<set $mistral.Mistral_Door_Kitchen_loot -= 1>> <</link>> <</if>> <a class="button back-btn" data-passage="MistralEntered">← Return to Mansion</a> </div> </div>
<<set $player.current_location = "Mistral_Basement">> <<if $mistral.Mistral_Basement > 0>> <<goto "Zombie_Encounter">> <</if>> <div class="scene-content"> <div class="scene-text"> <h2>Mistral mansion</h2> <p> In front of you is a large basement that has obviously already been looted before you. </p> </div> <div class="choice-container"> <a class="button" data-passage="MistralEntered">Return</a> </div> </div>
<div class="scene-content"> <div class="encounter-header"> <h2>Dangerous Encounter</h2> </div> <img src="assets/Mutant/Zombie.png" alt="Zombie" class="character-image"> </div> <div class="encounter-text"> <p>You are looking at a creature that was once a human being and is now a mindless body in search of a carrier of its virus.</p> <div class="dialog"> <p class="zombie-dialog">"Grrr."</p> </div> <p>A zombie is heading towards you to attack, there is no doubt that he is not going to just hug you.</p> <div class="choice-container"> <a class="button danger-choice" data-passage="Combat_Zombie">Fight</a> <a class="button" data-passage="Outside">Try to escape</a> </div> </div>
<<set $combat = { enemy_name: "Zombie", enemy_health: 120, enemy_max_health: 120, enemy_damage: 5, player_damage: $player.Weapon_damage, turn: "player" }>> <div class="scene-content"> <div class="combat-container"> <div class="combat-header"> <h2>Battle with Zombie</h2> </div> <div class="combatants"> <div class="combatant player"> <div class="combatant-info"> <h3><span class="player-name">You</span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($player.health/$player.max_health*100)>>%"></div> </div> <div class="health-text"><<print $player.health>>/<<print $player.max_health>></div> </div> </div> </div> <div class="combat-vs">VS</div> <div class="combatant enemy"> <div class="combatant-info"> <h3><span class="enemy-name"><<print $combat.enemy_name>></span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($combat.enemy_health/$combat.enemy_max_health*100)>>%"></div> </div> <div class="health-text"><<print $combat.enemy_health>>/<<print $combat.enemy_max_health>></div> </div> </div> </div> </div> <div class="combat-log"> <p>The battle has begun! You stand face to face with Zombie.</p> <p>What will you do?</p> </div> <div class="combat-controls"> <a class="combat-btn attack" data-passage="Combat_Attack">Attack</a> <a class="combat-btn defend" data-passage="Combat_Defend">Defend</a> <<if $player.Medkit > 0>> <a class="combat-btn heal" data-passage="Combat_Heal">Use Medkit</a> <<else>> <a class="combat-btn heal disabled">Medkit (none)</a> <</if>> </div> </div> </div> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } </style>
<div class="scene-content"> <div class="scene-text"> <h2>Execution of Zombie</h2> <p> You kill the creature. </p> </div> <div class="choice-container"> <<if $player.current_location == "Mistral_Basement">> <<set $mistral.Mistral_Basement -= 1>> <a class="button" data-passage="Mistral_Basement">Return</a> <</if>> <<if $player.current_location == "Mistral_Door_Kitchen">> <<set $mistral.Mistral_Door_Kitchen -= 1>> <a class="button" data-passage="Mistral_Door_Kitchen">Return</a> <</if>> </div> </div> <style> .loot { background: rgba(0, 0, 0, 0.5); border: 1px solid var(--accent-gold); border-radius: 6px; padding: 10px; margin: 15px 0; } .loot h3 { color: var(--accent-gold); margin-top: 0; margin-bottom: 10px; font-size: 1em; } .loot ul { margin: 0; padding-left: 20px; } .loot li { color: #ffffff; margin-bottom: 5px; } </style>
<<set $combat = { enemy_name: "Scarbourg", enemy_health: 350, enemy_max_health: 350, enemy_damage: 25, player_damage: $player.Weapon_damage, turn: "player" }>> <div class="scene-content"> <div class="combat-container"> <div class="combat-header"> <h2>Battle with Scarbourg</h2> </div> <div class="combatants"> <div class="combatant player"> <div class="combatant-info"> <h3><span class="player-name">You</span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($player.health/$player.max_health*100)>>%"></div> </div> <div class="health-text"><<print $player.health>>/<<print $player.max_health>></div> </div> </div> </div> <div class="combat-vs">VS</div> <div class="combatant enemy"> <div class="combatant-info"> <h3><span class="enemy-name"><<print $combat.enemy_name>></span></h3> <div class="health-container"> <div class="health-bar-wrapper"> <div class="health-bar-fill" style="width: <<print Math.floor($combat.enemy_health/$combat.enemy_max_health*100)>>%"></div> </div> <div class="health-text"><<print $combat.enemy_health>>/<<print $combat.enemy_max_health>></div> </div> </div> </div> </div> <div class="combat-log"> <p>The battle has begun! You stand face to face with Scarbourg.</p> <p>What will you do?</p> </div> <div class="combat-controls"> <a class="combat-btn attack" data-passage="Combat_Attack">Attack</a> <a class="combat-btn defend" data-passage="Combat_Defend">Defend</a> <<if $player.Medkit > 0>> <a class="combat-btn heal" data-passage="Combat_Heal">Use Medkit</a> <<else>> <a class="combat-btn heal disabled">Medkit (none)</a> <</if>> </div> </div> </div> <style> .combat-container { background: rgba(0, 0, 0, 0.7); border: 1px solid var(--accent-gold); border-radius: 8px; padding: 15px; } .combat-header { text-align: center; margin-bottom: 20px; } .combat-header h2 { color: var(--accent-gold); text-shadow: 0 0 5px rgba(198, 168, 97, 0.5); margin: 0; } .combatants { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .combatant { width: 40%; } .combat-vs { font-size: 1.5em; color: var(--accent-gold); font-weight: bold; } .combatant-info h3 { text-align: center; margin: 0 0 10px 0; } .player-name { color: #4CAF50; } .enemy-name { color: #F44336; } .health-container { margin-bottom: 10px; } .health-bar-wrapper { height: 15px; background-color: rgba(0, 0, 0, 0.5); border-radius: 4px; overflow: hidden; margin-bottom: 5px; } .health-bar-fill { height: 100%; background: linear-gradient(90deg, #9c0e36, #d91a4d); transition: width 0.3s ease; } .health-text { text-align: center; font-size: 0.8em; color: var(--text-medium); } .combat-log { background: rgba(0, 0, 0, 0.5); border-radius: 6px; padding: 10px; margin-bottom: 20px; max-height: 120px; overflow-y: auto; } .combat-log p { margin: 5px 0; font-size: 0.9em; } .combat-controls { display: flex; justify-content: space-between; gap: 10px; } .combat-btn { flex: 1; padding: 8px 15px; border-radius: 4px; text-align: center; cursor: pointer; font-weight: bold; transition: all 0.2s ease; text-decoration: none; color: white; } .combat-btn.attack { background: linear-gradient(45deg, #d32f2f, #f44336); } .combat-btn.attack:hover { background: linear-gradient(45deg, #f44336, #ff5252); transform: translateY(-2px); } .combat-btn.defend { background: linear-gradient(45deg, #1976d2, #2196f3); } .combat-btn.defend:hover { background: linear-gradient(45deg, #2196f3, #42a5f5); transform: translateY(-2px); } .combat-btn.heal { background: linear-gradient(45deg, #388e3c, #4caf50); } .combat-btn.heal:hover { background: linear-gradient(45deg, #4caf50, #66bb6a); transform: translateY(-2px); } .combat-btn.disabled { background: #616161; cursor: not-allowed; opacity: 0.5; } .combat-btn.disabled:hover { transform: none; } .encounter { margin-top: 15px; padding: 10px; background: rgba(156, 14, 54, 0.1); border-radius: 6px; border-left: 3px solid var(--accent-primary); } p.danger { color: #f44336; font-weight: bold; } .character-encounter { display: flex; margin-bottom: 20px; background: rgba(0, 0, 0, 0.5); border-radius: 8px; padding: 15px; } .encounter-image { width: 120px; margin-right: 15px; } .encounter-image img { width: 100%; border-radius: 4px; } .encounter-text { flex: 1; } </style>
<div class="scene-content"> <div class="encounter-header"> <h2>Dangerous Encounter</h2> </div> <img src="assets/Mutant/Scarbourg.png" alt="Scarbourg" class="character-image"> </div> <div class="encounter-text"> <p>You see in front of you a huge ferocious creature that seems to be able to tear a person into 2 with one blow, it is not known what it is but it is clearly dangerous.</p> <div class="dialog"> <p class="Scarbourg-dialog">"(Furious growling)"</p> </div> <p>It's moving quickly toward you with the most ferocity, and you have to do something before it spills your guts.</p> <div class="choice-container"> <a class="button danger-choice" data-passage="Combat_Scarbourg">Fight</a> <a class="button" data-passage="Outside">Try to escape</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Execution of Scarbourg</h2> <p> You killed this devilish creature! Unbelievable. </p> </div> <div class="choice-container"> <<if $player.current_location == "Mistral_Living_room">> <<set $mistral.Mistral_Living_room -= 1>> <a class="button" data-passage="Mistral_Living_room">Return</a> <</if>> </div> </div> <style> .loot { background: rgba(0, 0, 0, 0.5); border: 1px solid var(--accent-gold); border-radius: 6px; padding: 10px; margin: 15px 0; } .loot h3 { color: var(--accent-gold); margin-top: 0; margin-bottom: 10px; font-size: 1em; } .loot ul { margin: 0; padding-left: 20px; } .loot li { color: #ffffff; margin-bottom: 5px; } </style>
<style> /* === Стилі для лінків у Corpse City === */ /* Базовий стиль для всіх лінків */ a { /* Структура та розміри */ display: inline-block; padding: 6px 12px; margin: 4px 2px; position: relative; /* Фон та рамки */ background: linear-gradient(135deg, var(--bg-light), var(--bg-medium)); border: 1px solid var(--accent-primary); border-radius: 3px; /* Світіння та ефекти */ box-shadow: var(--glow-neon-blue); /* Текст */ color: var(--accent-highlight); font-family: 'Share Tech Mono', monospace; font-size: 1.1rem; font-weight: 400; letter-spacing: 0.3px; text-shadow: 0 0 4px rgba(255, 0, 255, 0.6); text-decoration: none; text-transform: none; /* Анімація та переходи */ transition: all 0.3s ease-out; cursor: pointer; /* Легкий скошений ефект */ clip-path: polygon( 0% 5%, 5px 0%, calc(100% - 5px) 0%, 100% 5%, 100% calc(100% - 5px), calc(100% - 5px) 100%, 5px 100%, 0% calc(100% - 5px) ); } /* Декоративний скан-лайн ефект */ a::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(45deg, transparent 70%, rgba(214, 0, 255, 0.15) 80%, transparent 90%); background-size: 150% 150%; animation: scanlineLink 2s linear infinite; pointer-events: none; z-index: 1; } /* Hover ефект */ a:hover { color: var(--accent-white); border-color: var(--accent-secondary); box-shadow: var(--glow-neon-pink); text-shadow: 0 0 6px rgba(255, 255, 255, 0.8); transform: translateY(-1px); background: linear-gradient(135deg, var(--accent-primary), var(--bg-light)); } /* Active (натиснутий) ефект */ a:active { transform: translateY(0px); box-shadow: var(--glow-green); color: var(--accent-green); border-color: var(--accent-green); } /* Visited (відвіданий) ефект */ a:visited { color: var(--text-medium); border-color: var(--text-dark); box-shadow: 0 0 4px rgba(107, 76, 158, 0.5); } /* Focus ефект для доступності */ a:focus { outline: none; box-shadow: var(--glow-white); border-color: var(--accent-white); } /* Анімація скан-лайну для лінків */ @keyframes scanlineLink { 0% { background-position: -150% -150%; } 100% { background-position: 150% 150%; } } /* Спеціальні класи для різних типів лінків */ /* Важливі лінки */ a.important-link { border-color: var(--accent-gold); color: var(--accent-gold); box-shadow: var(--glow-gold); text-shadow: 0 0 5px rgba(240, 196, 32, 0.7); } a.important-link:hover { color: var(--accent-white); box-shadow: var(--glow-white); } /* Небезпечні лінки */ a.danger-link { border-color: #ff0066; color: #ff0066; box-shadow: 0 0 6px rgba(255, 0, 102, 0.6); text-shadow: 0 0 4px rgba(255, 0, 102, 0.6); } a.danger-link:hover { color: var(--accent-white); box-shadow: 0 0 8px rgba(255, 0, 102, 0.8); } /* Лінки у тексті (менші, без фону) */ a.inline-link { padding: 2px 4px; background: transparent; border: none; box-shadow: none; clip-path: none; color: var(--accent-secondary); text-decoration: underline; text-decoration-color: var(--accent-secondary); font-size: inherit; } a.inline-link:hover { color: var(--accent-highlight); text-decoration-color: var(--accent-highlight); text-shadow: 0 0 3px rgba(255, 0, 255, 0.5); transform: none; background: transparent; } </style>
<<if $player.stamina < 10>> <div class="scene-content"> <div class="warning-message">You do not have enough stamina for sexual actions!</div> <div class="choice-container"> <a class="button back-btn" data-passage="Baika_talk">← Back</a> </div> </div> <<else>> <div class="scene-content"> <div class="scene-text"> <p> Baika is horny and wants your cock more than anything. </p> </div> <div class="video-container"> <video id="baikaServiceVideo" class="scene-video" autoplay muted loop playsinline> <source src="assets/NPC/baika/blowjob.mp4" type="video/mp4"> </video> </div> <div class="service-menu"> <div class="menu-title">Choose an action:</div> <div class="service-buttons"> <center> <a class="service-btn" id="baikaBlowjobBtn">Blowjob</a> <a class="service-btn" id="baikaVaginalBtn">Vaginal</a> <a class="service-btn" id="baikaCumBtn">Finish</a> </center> </div> <a class="button back-btn" data-passage="Baika">← Finish</a> </div> <<script>> $(document).ready(function() { const baikaVideos = { blowjob: [ 'assets/NPC/baika/blowjob.mp4', 'assets/NPC/baika/blowjob_2.mp4', 'assets/NPC/baika/blowjob_3.mp4', 'assets/NPC/baika/blowjob_4.mp4', 'assets/NPC/baika/blowjob_5.mp4' ], vaginal: [ 'assets/NPC/baika/vaginal.mp4', 'assets/NPC/baika/vaginal_2.mp4', 'assets/NPC/baika/vaginal_3.mp4', 'assets/NPC/baika/vaginal_4.mp4', 'assets/NPC/baika/vaginal_5.mp4', 'assets/NPC/baika/vaginal_6.mp4', 'assets/NPC/baika/vaginal_7.mp4', 'assets/NPC/baika/vaginal_8.mp4', 'assets/NPC/baika/vaginal_9.mp4' ], cum: [ 'assets/NPC/baika/cum.mp4' ] }; function getRandomVideo(category) { const videos = baikaVideos[category]; return videos[Math.floor(Math.random() * videos.length)]; } function changeVideo(type) { const video = document.getElementById('baikaServiceVideo'); if (video) { const newSrc = getRandomVideo(type); if (video.src !== newSrc) { video.src = newSrc; video.play().catch(function(error) { console.log("Autoplay error:", error); }); } } // Update player stats with minimum check State.variables.player.stamina = Math.max(0, State.variables.player.stamina - 10); // Refresh stats display $(document).trigger(':refresh'); } // Add event handlers for buttons $('#baikaBlowjobBtn').on('click', function() { changeVideo('blowjob'); }); $('#baikaVaginalBtn').on('click', function() { changeVideo('vaginal'); }); $('#baikaCumBtn').on('click', function() { changeVideo('cum'); }); // Add click handler for video to toggle mute $('#baikaServiceVideo').on('click', function() { this.muted = !this.muted; }); }); <</script>> <</if>>
<<set $bunker_quest_progress = "Complete">> <<include "Dialoque_style">> <<set $player.baika_status = "Familiar">> <div class="choice-container"> <div class="scene-text"> <div class="npc-character"> <img src="assets/NPC/baika/baika.png" alt="Baika" class="character-image"> <h2 class="character-name glow-effect">Baika</h2> </div> <div class="player-character"> <div class="dialogue-line"> <span class="speaker-label">You:</span> Hi, I'm... </div> </div> <div class="npc-character"> <div class="dialogue-line"> <span class="speaker-label">Baika:</span> You... You're a monster! I love you! You just took out that bastard, you killed that big bastard, and now we have the code. All that's left is to power up the bunker lock, because for some reason it doesn't work, but that's not the point, I owe you one, so come to me now or whenever you want, I'll be a very, very obedient pussy for you... </div> </div> <div class="coordinates-received"> ✦ The Bunker quest is over. ✦ </div> </div> <div class="choice-container"> <a class="button" data-passage="Baika">← Return</a> </div> </div>
<div class="scene-content"> <div class="scene-text"> <h2>Version 0.2.2 Alpha (current)</h2> <span class="date">06/26/2025</span> </div> <div class="changelog list"> <h3>Added:</h3> <ul> <li>Switching tracks in the settings.</li> <li>New music (The old music is still in the folder, if you want to return it, just replace the new tracks with the old ones from the Music - old music folder)</li> <li>New location Administration where you can get one recurring and one one-time task (for a one-time task you can get something very useful).</li> <li>The new interactive location Mistral Estate is connected with a bunker</li> <li>New enemies “Zombies” and “Scarbourg”</li> <li>By popular demand, we have added the ability to buy and sell not 1 item at a time, but x10 and bye/sell all</li> </ul> <h3>Settings:</h3> <ul> <li></li> </ul> <h3>Bug Fixes:</h3> <ul> <li>I fixed all the bugs that players wrote about, but taking into account the new content, I think that new bugs have emerged somewhere, I ask everyone to report bugs and I will fix them.</li> </ul> <h3>Reworked:</h3> <ul> <li>Once again, I completely redesigned the Game Style and now I finally like it visually, I put a lot of effort and work into it, I hope you will appreciate it.</li> <li>I reworked and rewrote some mechanics, nothing changed visually, but the code became at least a little cleaner.</li> <li>I redesigned the dialog style, created it separately so that the dialog finally looked like a dialog and not a long, uninteresting text.</li> <li>Finally, I fixed a bug that annoyed absolutely everyone, including me, when there was a lot of free space between buttons and other interface elements, now everything is super organized and doesn't look like a cat's poo.</li> <li>The first images of the locations have been added, I'm working on the rest, in the next few updates I think I'll be able to bring all the locations to life, I also have plans to bring to life with images some situations that I have already tried in the opening scene with Luna, I think it looks good.</li> </ul> <h3>Known Issues:</h3> <ul> <li><li>There are still a lot of changes and it's hard for me to even remember everything, play and comment, development continues, I work to the best of my ability and most importantly 80% of my time is spent on my work, so sorry if the progress is very slow.</li></li> </ul> <h3>Author's Note:</h3> <ul> <li>The game is still in its early development stage. No element of the game is 100% final, and I’m constantly reworking everything.</li> </ul> </div> </div> <style> /* Стилі для сторінки журналу змін */ .changelog-page { margin-top: var(--space-large); padding: var(--space-large); background: var(--bg-medium); border: 2px solid var(--accent-primary); border-radius: 6px; box-shadow: var(--shadow-medium), var(--glow-red); } .changelog-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-large); } .changelog-header h1 { font-family: var(--font-mono); color: var(--accent-highlight); font-size: 2rem; text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .back-button { display: flex; align-items: center; gap: var(--space-small); color: var(--text-light); text-decoration: none; font-family: var(--font-mono); font-size: 1rem; padding: 8px 16px; border: 2px solid var(--accent-primary); border-radius: 6px; transition: background-color var(--transition-fast), transform var(--transition-fast); box-shadow: var(--shadow-subtle); } .back-button:hover { background: #6b3e3c; transform: scale(1.05); box-shadow: var(--shadow-medium), var(--glow-red); } .back-icon { font-size: 1.2rem; } .changelog-content { background: var(--bg-light); border: 2px solid var(--accent-primary); border-radius: 6px; padding: var(--space-medium); box-shadow: var(--shadow-subtle); } .version-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-medium); } .version-header h2 { font-family: var(--font-mono); color: var(--accent-highlight); text-shadow: 0 0 4px rgba(64, 255, 64, 0.5); } .version-header .date { color: var(--text-medium); font-family: var(--font-mono); } .changelog-list h3 { color: var(--accent-gold); font-family: var(--font-mono); margin-top: var(--space-medium); margin-bottom: var(--space-small); text-shadow: 0 0 4px rgba(212, 160, 23, 0.5); } .changelog-list ul { list-style-type: disc; margin-left: var(--space-medium); color: var(--text-light); } .changelog-list li { margin-bottom: var(--space-small); } /* Анімація появи */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .changelog-page, .changelog-content { animation: fadeIn var(--transition-slow); } </style>