rasshirennyy-geymdizayn-doku/index.html

1203 lines
35 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>НЕ ОТКРЫВАЙ: ЭТАЖ 7 | Психологический хоррор</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--bg-dark: #0a0a0f;
--bg-secondary: #121218;
--accent-red: #c41e3a;
--accent-orange: #d4a017;
--text-primary: #f0f0f5;
--text-secondary: #a0a0b0;
--door-wood: #3d2817;
--static-gray: #2a2a35;
}
body {
font-family: 'Courier New', monospace;
background: var(--bg-dark);
color: var(--text-primary);
overflow-x: hidden;
line-height: 1.6;
}
/* CRT Scanline Effect */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: repeating-linear-gradient(
0deg,
rgba(0, 0, 0, 0.1),
rgba(0, 0, 0, 0.1) 1px,
transparent 1px,
transparent 2px
);
pointer-events: none;
z-index: 9999;
}
/* Noise Overlay */
.noise {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 9998;
opacity: 0.03;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
}
/* Hero Section */
.hero {
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: linear-gradient(180deg, var(--bg-dark) 0%, var(--bg-secondary) 100%);
position: relative;
padding: 2rem;
}
.hero-title {
font-size: clamp(2rem, 8vw, 5rem);
font-weight: bold;
text-transform: uppercase;
letter-spacing: 0.3em;
color: var(--accent-red);
text-shadow: 0 0 30px rgba(196, 30, 58, 0.5);
animation: flicker 4s infinite;
text-align: center;
margin-bottom: 1rem;
}
.hero-subtitle {
font-size: clamp(1rem, 3vw, 1.5rem);
color: var(--text-secondary);
letter-spacing: 0.2em;
text-transform: uppercase;
margin-bottom: 2rem;
text-align: center;
}
.hero-tagline {
font-size: clamp(0.9rem, 2vw, 1.2rem);
color: var(--text-secondary);
max-width: 600px;
text-align: center;
margin-bottom: 3rem;
opacity: 0.8;
}
.cta-button {
background: transparent;
border: 2px solid var(--accent-red);
color: var(--accent-red);
padding: 1rem 3rem;
font-size: 1.1rem;
font-family: inherit;
text-transform: uppercase;
letter-spacing: 0.2em;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.cta-button:hover {
background: var(--accent-red);
color: var(--bg-dark);
box-shadow: 0 0 40px rgba(196, 30, 58, 0.6);
}
/* Floor Indicator */
.floor-indicator {
position: absolute;
bottom: 2rem;
right: 2rem;
font-size: 4rem;
font-weight: bold;
color: var(--static-gray);
opacity: 0.3;
}
.floor-number {
display: block;
animation: floorGlich 3s infinite;
}
/* Sections */
section {
padding: 5rem 2rem;
max-width: 1200px;
margin: 0 auto;
}
.section-title {
font-size: clamp(1.5rem, 4vw, 2.5rem);
color: var(--accent-orange);
text-transform: uppercase;
letter-spacing: 0.2em;
margin-bottom: 3rem;
text-align: center;
position: relative;
}
.section-title::after {
content: '';
display: block;
width: 100px;
height: 2px;
background: var(--accent-red);
margin: 1rem auto 0;
}
/* Story Section */
.story-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.story-card {
background: var(--bg-secondary);
border: 1px solid var(--static-gray);
padding: 2rem;
position: relative;
transition: transform 0.3s ease;
}
.story-card:hover {
transform: translateY(-5px);
border-color: var(--accent-red);
}
.story-card h3 {
color: var(--accent-red);
margin-bottom: 1rem;
font-size: 1.3rem;
text-transform: uppercase;
letter-spacing: 0.1em;
}
.story-card p {
color: var(--text-secondary);
line-height: 1.8;
}
/* Characters Section */
.characters-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
}
.character-card {
background: linear-gradient(180deg, var(--bg-secondary) 0%, var(--bg-dark) 100%);
border: 1px solid var(--static-gray);
padding: 2rem;
text-align: center;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.character-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 3px;
background: var(--accent-red);
transform: scaleX(0);
transition: transform 0.3s ease;
}
.character-card:hover::before {
transform: scaleX(1);
}
.character-card:hover {
border-color: var(--accent-red);
box-shadow: 0 10px 30px rgba(196, 30, 58, 0.2);
}
.character-avatar {
width: 120px;
height: 120px;
border-radius: 50%;
background: var(--static-gray);
margin: 0 auto 1.5rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
border: 3px solid var(--accent-red);
}
.character-name {
font-size: 1.5rem;
color: var(--text-primary);
margin-bottom: 0.5rem;
text-transform: uppercase;
letter-spacing: 0.1em;
}
.character-role {
color: var(--accent-orange);
font-size: 0.9rem;
margin-bottom: 1rem;
text-transform: uppercase;
}
.character-desc {
color: var(--text-secondary);
font-size: 0.95rem;
line-height: 1.6;
}
/* Mechanics Section */
.mechanics-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.mechanic-item {
background: var(--bg-secondary);
border-left: 4px solid var(--accent-red);
padding: 2rem;
position: relative;
}
.mechanic-icon {
font-size: 2.5rem;
margin-bottom: 1rem;
}
.mechanic-item h3 {
color: var(--text-primary);
margin-bottom: 1rem;
font-size: 1.2rem;
text-transform: uppercase;
}
.mechanic-item p {
color: var(--text-secondary);
line-height: 1.7;
}
/* Interactive Demo Section */
.demo-section {
background: linear-gradient(180deg, var(--bg-dark) 0%, #1a0a0f 100%);
border: 2px solid var(--static-gray);
padding: 3rem;
margin: 3rem 0;
position: relative;
overflow: hidden;
}
.demo-section::before {
content: 'ДЕМО-ВЕРСИЯ';
position: absolute;
top: 1rem;
right: 1rem;
font-size: 0.8rem;
color: var(--accent-red);
border: 1px solid var(--accent-red);
padding: 0.3rem 0.8rem;
text-transform: uppercase;
}
.demo-title {
text-align: center;
color: var(--accent-red);
margin-bottom: 2rem;
font-size: 1.8rem;
text-transform: uppercase;
}
.paranoia-container {
max-width: 600px;
margin: 0 auto 2rem;
}
.paranoia-label {
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
color: var(--text-secondary);
}
.paranoia-bar {
height: 20px;
background: var(--static-gray);
border-radius: 10px;
overflow: hidden;
position: relative;
}
.paranoia-fill {
height: 100%;
background: linear-gradient(90deg, #2ecc71 0%, #f1c40f 50%, #e74c3c 100%);
width: 30%;
transition: width 0.5s ease;
border-radius: 10px;
}
.door-scene {
background: var(--door-wood);
border: 8px solid #2a1810;
border-radius: 5px;
padding: 3rem;
text-align: center;
position: relative;
margin: 2rem 0;
min-height: 300px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.peephole {
width: 80px;
height: 80px;
background: #000;
border-radius: 50%;
margin: 0 auto 2rem;
border: 4px solid #4a3a2a;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
position: relative;
}
.peephole:hover {
box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
}
.peephole-view {
width: 100%;
height: 100%;
border-radius: 50%;
display: none;
align-items: center;
justify-content: center;
font-size: 3rem;
background: radial-gradient(circle, #333 0%, #000 100%);
}
.peephole.active .peephole-view {
display: flex;
}
.peephole-text {
color: var(--text-secondary);
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.1em;
}
.demo-controls {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
margin-top: 2rem;
}
.demo-btn {
background: transparent;
border: 2px solid var(--text-secondary);
color: var(--text-secondary);
padding: 0.8rem 2rem;
font-family: inherit;
font-size: 0.9rem;
text-transform: uppercase;
cursor: pointer;
transition: all 0.3s ease;
}
.demo-btn:hover {
border-color: var(--accent-red);
color: var(--accent-red);
}
.demo-btn.danger {
border-color: var(--accent-red);
color: var(--accent-red);
}
.demo-btn.danger:hover {
background: var(--accent-red);
color: var(--bg-dark);
}
.message-log {
background: #000;
border: 1px solid var(--static-gray);
padding: 1.5rem;
margin-top: 2rem;
max-height: 200px;
overflow-y: auto;
font-family: 'Courier New', monospace;
font-size: 0.9rem;
}
.message {
margin-bottom: 0.8rem;
padding: 0.5rem;
border-left: 2px solid var(--accent-red);
padding-left: 1rem;
animation: fadeIn 0.3s ease;
}
.message.system {
border-left-color: var(--accent-orange);
color: var(--accent-orange);
}
.message.user {
border-left-color: #3498db;
color: #3498db;
}
.message.threat {
border-left-color: var(--accent-red);
color: var(--accent-red);
}
/* Chapters Timeline */
.timeline {
position: relative;
padding: 2rem 0;
}
.timeline::before {
content: '';
position: absolute;
left: 50%;
transform: translateX(-50%);
width: 2px;
height: 100%;
background: var(--accent-red);
}
.chapter {
display: flex;
justify-content: flex-end;
padding: 1.5rem;
position: relative;
margin-bottom: 2rem;
width: 50%;
}
.chapter:nth-child(even) {
justify-content: flex-start;
margin-left: auto;
}
.chapter::after {
content: '';
position: absolute;
width: 20px;
height: 20px;
background: var(--accent-red);
border-radius: 50%;
top: 50%;
transform: translateY(-50%);
}
.chapter:nth-child(odd)::after {
right: -10px;
}
.chapter:nth-child(even)::after {
left: -10px;
}
.chapter-content {
background: var(--bg-secondary);
border: 1px solid var(--static-gray);
padding: 1.5rem;
max-width: 400px;
transition: all 0.3s ease;
}
.chapter-content:hover {
border-color: var(--accent-red);
transform: scale(1.05);
}
.chapter-title {
color: var(--accent-orange);
font-size: 1.1rem;
margin-bottom: 0.5rem;
text-transform: uppercase;
}
.chapter-time {
color: var(--text-secondary);
font-size: 0.85rem;
margin-bottom: 1rem;
}
.chapter-desc {
color: var(--text-secondary);
font-size: 0.9rem;
line-height: 1.6;
}
/* Footer */
footer {
background: var(--bg-secondary);
padding: 3rem 2rem;
text-align: center;
border-top: 2px solid var(--static-gray);
}
.footer-text {
color: var(--text-secondary);
margin-bottom: 1rem;
}
.download-btn {
display: inline-block;
background: var(--accent-red);
color: var(--text-primary);
padding: 1rem 2.5rem;
text-decoration: none;
text-transform: uppercase;
letter-spacing: 0.2em;
border-radius: 5px;
transition: all 0.3s ease;
margin-top: 1rem;
border: none;
cursor: pointer;
font-family: inherit;
font-size: 1rem;
}
.download-btn:hover {
background: #a01830;
box-shadow: 0 0 30px rgba(196, 30, 58, 0.5);
transform: translateY(-2px);
}
/* Animations */
@keyframes flicker {
0%, 19%, 21%, 23%, 25%, 54%, 56%, 100% {
opacity: 1;
text-shadow: 0 0 30px rgba(196, 30, 58, 0.5);
}
20%, 24%, 55% {
opacity: 0.5;
text-shadow: none;
}
}
@keyframes floorGlich {
0%, 90%, 100% {
content: '7';
color: var(--static-gray);
}
91%, 95% {
content: '6';
color: var(--accent-red);
}
96%, 98% {
content: 'Ж';
color: var(--accent-red);
}
99% {
content: '∞';
color: var(--accent-red);
}
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateX(-10px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
/* Responsive */
@media (max-width: 768px) {
.timeline::before {
left: 20px;
}
.chapter {
width: 100%;
padding-left: 50px;
}
.chapter:nth-child(even) {
margin-left: 0;
}
.chapter::after {
left: 10px !important;
right: auto !important;
}
.demo-section {
padding: 1.5rem;
}
}
/* Static Effect */
.static-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 9997;
opacity: 0;
background: #fff;
mix-blend-mode: overlay;
}
.static-active .static-overlay {
animation: staticFlash 0.1s infinite;
opacity: 0.05;
}
@keyframes staticFlash {
0%, 100% { opacity: 0; }
50% { opacity: 0.1; }
}
/* Scroll indicator */
.scroll-indicator {
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
animation: bounce 2s infinite;
opacity: 0.5;
}
.scroll-indicator span {
display: block;
width: 20px;
height: 30px;
border: 2px solid var(--text-secondary);
border-radius: 10px;
position: relative;
}
.scroll-indicator span::before {
content: '';
position: absolute;
top: 5px;
left: 50%;
transform: translateX(-50%);
width: 4px;
height: 8px;
background: var(--text-secondary);
border-radius: 2px;
animation: scroll 2s infinite;
}
@keyframes scroll {
0%, 100% { opacity: 0; top: 5px; }
50% { opacity: 1; top: 15px; }
}
@keyframes bounce {
0%, 100% { transform: translateX(-50%) translateY(0); }
50% { transform: translateX(-50%) translateY(10px); }
}
</style>
</head>
<body>
<div class="noise"></div>
<div class="static-overlay"></div>
<!-- Hero Section -->
<section class="hero">
<h1 class="hero-title">НЕ ОТКРЫВАЙ:<br>ЭТАЖ 7</h1>
<p class="hero-subtitle">DO NOT OPEN: FLOOR 7</p>
<p class="hero-tagline">
Психологический хоррор-детектив в изоляции.<br>
Твоя квартира — твоя ловушка. Доверься тем, кто за дверью — и ты мёртв.
</p>
<button class="cta-button" onclick="scrollToDemo()">Начать демо</button>
<div class="floor-indicator">
<span class="floor-number">7</span>
</div>
<div class="scroll-indicator">
<span></span>
</div>
</section>
<!-- Story Section -->
<section id="story">
<h2 class="section-title">История</h2>
<div class="story-grid">
<div class="story-card">
<h3>📜 НИИ «СпецСвязь»</h3>
<p>
В 1982 году под типовой панельной девятиэтажкой началось строительство секретной лаборатории.
Там изучали передачу цифрового сигнала через биологические структуры.
</p>
</div>
<div class="story-card">
<h3>📟 Жила</h3>
<p>
В 1989 произошла утечка. Информационное поле лаборатории — «Жила» — вступило в резонанс
с бетоном и арматурой дома. Это не вирус. Это живой лабиринт, питающийся памятью и страхами.
</p>
</div>
<div class="story-card">
<h3>👤 Имитаторы</h3>
<p>
Жила создаёт цифровые копии людей. У них нет разума — только шаблоны из чужих воспоминаний.
Их цель — заставить тебя добровольно открыть дверь.
</p>
</div>
</div>
</section>
<!-- Chapters Section -->
<section id="chapters">
<h2 class="section-title">Главы</h2>
<div class="timeline">
<div class="chapter">
<div class="chapter-content">
<h3 class="chapter-title">🟢 Глава 1: Призраки 2000-х</h3>
<p class="chapter-time">00:00 — 01:30</p>
<p class="chapter-desc">
Потеря связи, первое знакомство с Мессенджером, Лёха у двери.
Первое правило: не верь тому, что видишь в глазок.
</p>
</div>
</div>
<div class="chapter">
<div class="chapter-content">
<h3 class="chapter-title">🟡 Глава 2: Анатомия Сомнения</h3>
<p class="chapter-time">01:30 — 03:00</p>
<p class="chapter-desc">
Детективная дуэль с Лёхой, поиск записок, открытие форума.
Кассетный плеер под дверью хранит правду.
</p>
</div>
</div>
<div class="chapter">
<div class="chapter-content">
<h3 class="chapter-title">🟠 Глава 3: Субъекты с 7-го</h3>
<p class="chapter-time">03:00 — 04:30</p>
<p class="chapter-desc">
Валя «Президент» проводит перепись выживших.
Дядя Слава из вентиляции просит найти дозиметр.
</p>
</div>
</div>
<div class="chapter">
<div class="chapter-content">
<h3 class="chapter-title">🔴 Глава 4: Цифровой Морок</h3>
<p class="chapter-time">04:30 — 05:30</p>
<p class="chapter-desc">
Квартира «плавится». Видеозвонок от Лёхи показывает комнату со стороны двери.
Он уже внутри?
</p>
</div>
</div>
<div class="chapter">
<div class="chapter-content">
<h3 class="chapter-title">☠️ Глава 5: 06:00 Не Наступит</h3>
<p class="chapter-time">05:30 — 05:60+</p>
<p class="chapter-desc">
Время застыло на 05:59. Имитаторы штурмуют квартиру.
Единственный выход — прыжок в шахту лифта.
</p>
</div>
</div>
</div>
</section>
<!-- Characters Section -->
<section id="characters">
<h2 class="section-title">Персонажи</h2>
<div class="characters-grid">
<div class="character-card">
<div class="character-avatar">👤</div>
<h3 class="character-name">Данил</h3>
<p class="character-role">Протагонист</p>
<p class="character-desc">
Щуплый подросток в синем худи. Физически слаб, полагается на внимательность,
смартфон и контроль ресурсов квартиры.
</p>
</div>
<div class="character-card">
<div class="character-avatar">👻</div>
<h3 class="character-name">«Лёха»</h3>
<p class="character-role">Главная Аномалия</p>
<p class="character-desc">
Нулевой Цифровой Фантом. Использует эмпатию игрока,
подделывает детские воспоминания. За дверью стоит не он.
</p>
</div>
<div class="character-card">
<div class="character-avatar">📱</div>
<h3 class="character-name">Кристина</h3>
<p class="character-role">Оператор</p>
<p class="character-desc">
Связь через мессенджер. Поставляет кадры с камер,
но её информация может запаздывать или искажаться Жилой.
</p>
</div>
<div class="character-card">
<div class="character-avatar">🔫</div>
<h3 class="character-name">Валя</h3>
<p class="character-role">Охотник</p>
<p class="character-desc">
В идеальном пиджаке, с револьвером. Контролирует коридор.
Может убить Данила, если посчитает его заражённым.
</p>
</div>
<div class="character-card">
<div class="character-avatar">🔧</div>
<h3 class="character-name">Дядя Слава</h3>
<p class="character-role">Техник-параноик</p>
<p class="character-desc">
Передвигается по шахтам вентиляции.
Снабжает ресурсами для ремонта квартиры.
</p>
</div>
</div>
</section>
<!-- Mechanics Section -->
<section id="mechanics">
<h2 class="section-title">Механики</h2>
<div class="mechanics-list">
<div class="mechanic-item">
<div class="mechanic-icon">🚪</div>
<h3>Дверной глазок и замки</h3>
<p>
4 уровня защиты: ключ, защёлка, цепочка, засов.
Проверяй симметрию лица, движение глаз, тень — имитаторы выдают себя деталями.
</p>
</div>
<div class="mechanic-item">
<div class="mechanic-icon">🧠</div>
<h3>Шкала паранойи</h3>
<p>
Не полоска здоровья, а состояние восприятия.
На 70%+ начинаются галлюцинации, зеркала врут, двери открываются сами.
</p>
</div>
<div class="mechanic-item">
<div class="mechanic-icon">🏠</div>
<h3>Обслуживание квартиры</h3>
<p>
Меняй предохранители в щитке, зашторивай окна, выключай радио.
Квартира — физический объект, требующий контроля.
</p>
</div>
<div class="mechanic-item">
<div class="mechanic-icon">🤖</div>
<h3>Адаптивный ИИ</h3>
<p>
ИИ изучает твой стиль. Слишком долго смотришь в глазок?
Ударят по нему. Верить голосовым? ИИ начнёт подделывать их идеально.
</p>
</div>
<div class="mechanic-item">
<div class="mechanic-icon">📱</div>
<h3>Смартфон с трещиной</h3>
<p>
Мессенджер «СЕТЬ_111-90» — единственный канал связи.
Трещина на экране скрывает важные детали в СМС.
</p>
</div>
<div class="mechanic-item">
<div class="mechanic-icon">🔊</div>
<h3>Бинауральный звук</h3>
<p>
Нет саундтрека. Только микро-акустика: бетон, коврик, металлический порог.
Приближение сущности — тишина.
</p>
</div>
</div>
</section>
<!-- Interactive Demo Section -->
<section id="demo">
<h2 class="section-title">Демо-версия</h2>
<div class="demo-section">
<h3 class="demo-title">🚪 Сцена у двери</h3>
<p style="text-align: center; color: var(--text-secondary); margin-bottom: 2rem;">
01:02 ночи. Стук в дверь. Кто-то стоит снаружи.
</p>
<div class="paranoia-container">
<div class="paranoia-label">
<span>Уровень паранойи</span>
<span id="paranoia-value">30%</span>
</div>
<div class="paranoia-bar">
<div class="paranoia-fill" id="paranoia-fill"></div>
</div>
</div>
<div class="door-scene">
<div class="peephole" id="peephole" onclick="lookThroughPeephole()">
<span class="peephole-text">Нажми, чтобы посмотреть</span>
<div class="peephole-view" id="peephole-view">👁️</div>
</div>
<div id="door-message" style="color: var(--text-secondary); font-style: italic;">
За дверью тихо...
</div>
</div>
<div class="demo-controls">
<button class="demo-btn" onclick="addLock()">🔒 Затворить замок</button>
<button class="demo-btn" onclick="checkPhone()">📱 Проверить телефон</button>
<button class="demo-btn danger" onclick="openDoor()">🚪 Открыть дверь</button>
</div>
<div class="message-log" id="message-log">
<div class="message system">Система: Демо-версия загружена. Сейчас 01:02 ночи.</div>
</div>
</div>
</section>
<!-- Footer -->
<footer>
<p class="footer-text">
НЕ ОТКРЫВАЙ: ЭТАЖ 7 — психологический хоррор на Unreal Engine 5<br>
Часть 1 из 3 | Ожидаемое время прохождения: 10–14 часов
</p>
<button class="download-btn" onclick="downloadPage()">📥 Скачать страницу</button>
<p style="margin-top: 2rem; color: var(--text-secondary); font-size: 0.85rem;">
© 2026 Do Not Open: Floor 7. Все права защищены.<br>
Этот сайт является фан-презентацией по материалам GDD.
</p>
</footer>
<script>
// Game State
let paranoia = 30;
let locks = 0;
let lookedThrough = false;
let gameOver = false;
// Messages
const messages = {
knock: [
"Тук-тук-тук... Тихий, неуверенный стук.",
"Кто-то стоит за дверью. Дыхание слышно?",
"Ещё один стук. Теперь громче."
],
lexa: [
"Дань, открой, это я, Лёха!",
"Я застрял между этажами, мне нужна помощь...",
"Ты слышишь меня? Открой, пожалуйста!",
"Дань, я вижу тебя в глазок. Не прячься."
],
kristina: [
"СЕТЬ_111-90: Кристина — Не открывай!",
"СЕТЬ_111-90: Кристина — Это не Лёха. Он не поднимался.",
"СЕТЬ_111-90: Кристина — Я вижу его на камере 6 этажа."
],
static: [
"Шшшшш... Помехи в голове...",
"Кажется, кто-то шепчет в вентиляции...",
"Часы тикают слишком громко..."
]
};
function scrollToDemo() {
document.getElementById('demo').scrollIntoView({ behavior: 'smooth' });
}
function updateParanoia(amount) {
paranoia = Math.max(0, Math.min(100, paranoia + amount));
document.getElementById('paranoia-fill').style.width = paranoia + '%';
document.getElementById('paranoia-value').textContent = paranoia + '%';
if (paranoia >= 70 && paranoia < 100) {
addMessage('Высокая параноя: начинаются галлюцинации...', 'system');
}
if (paranoia >= 100) {
addMessage('ПСИХОЗ: Данил теряет связь с реальностью...', 'threat');
triggerStatic();
}
}
function addMessage(text, type = 'user') {
const log = document.getElementById('message-log');
const msg = document.createElement('div');
msg.className = 'message ' + type;
msg.textContent = text;
log.appendChild(msg);
log.scrollTop = log.scrollHeight;
}
function lookThroughPeephole() {
if (gameOver) return;
lookedThrough = true;
const peephole = document.getElementById('peephole');
const view = document.getElementById('peephole-view');
peephole.classList.add('active');
setTimeout(() => {
const events = [
{ emoji: '👤', text: 'За дверью стоит Лёха. Он улыбается. Слишком широко.' },
{ emoji: '👁️', text: 'Глаз смотрит в ответ. Не моргает.' },
{ emoji: '🌑', text: 'Темнота. Никого нет? Стук продолжается...' },
{ emoji: '😐', text: 'Лицо без эмоций. Симметричное. Слишком симметричное.' }
];
const event = events[Math.floor(Math.random() * events.length)];
view.textContent = event.emoji;
document.getElementById('door-message').textContent = event.text;
updateParanoia(10);
addMessage('Вы посмотрели в глазок. Что-то не так...', 'user');
setTimeout(() => {
peephole.classList.remove('active');
view.textContent = '👁️';
}, 2000);
}, 500);
}
function addLock() {
if (gameOver) return;
locks++;
const lockMessages = [
'Верхний замок закрыт.',
'Нижний замок закрыт.',
'Цепочка на месте.',
'Деревянный засов установлен.'
];
if (locks <= 4) {
addMessage(lockMessages[locks - 1], 'system');
updateParanoia(-5);
} else {
addMessage('Все замки уже закрыты!', 'system');
}
}
function checkPhone() {
if (gameOver) return;
const phoneMessages = [
...messages.kristina,
...messages.lexa,
...messages.static
];
const msg = phoneMessages[Math.floor(Math.random() * phoneMessages.length)];
addMessage(msg, msg.includes('Кристина') ? 'system' : 'user');
if (msg.includes('Не открывай')) {
updateParanoia(-10);
} else if (msg.includes('Лёха')) {
updateParanoia(15);
}
}
function openDoor() {
if (gameOver) return;
gameOver = true;
if (locks < 2) {
addMessage('Вы открыли дверь...', 'threat');
setTimeout(() => {
addMessage('Лёха стоит в проеме. Его улыбка достигает ушей.', 'threat');
setTimeout(() => {
addMessage('☠️ ПЛОХАЯ КОНЦОВКА: Доверие убивает.', 'threat');
triggerStatic();
}, 1500);
}, 1000);
} else {
addMessage('Вы смотрите в глазок. Лёха исчез.', 'system');
addMessage('На полу лежит кассетный плеер...', 'system');
updateParanoia(20);
gameOver = false;
}
}
function triggerStatic() {
document.body.classList.add('static-active');
setTimeout(() => {
document.body.classList.remove('static-active');
}, 3000);
}
// Random events
setInterval(() => {
if (!gameOver && Math.random() < 0.3) {
const events = [
() => addMessage('Тук-тук-тук...', 'user'),
() => addMessage('Скрип пола за дверью...', 'system'),
() => {
document.getElementById('door-message').textContent = 'Кто-то дышит у двери...';
updateParanoia(5);
}
];
events[Math.floor(Math.random() * events.length)]();
}
}, 8000);
// Download functionality
function downloadPage() {
const html = document.documentElement.outerHTML;
const blob = new Blob([html], { type: 'text/html' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'ne-otkryvay-etazh-7.html';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
addMessage('Страница скачана! Открой файл в браузере.', 'system');
}
// Initialize
updateParanoia(0);
</script>
</body>
</html>