Обращение
2. Изменить расширение на .html
3. Запустить.
Примечание 1: Вдохновлено "Кровью электрической" - романом на языке C++.
Примечание 2: Материал - на русском языке. инструкция по установке языка - во встроенной инструкции.
~ ~ ~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="theme-color" content="#000000">
<meta name="description" content="VOID_WANDERER TERMINAL">
<title>VOID_WANDERER // SILICON_DESERT</title>
<style>
/* === CORE VARIABLES === */
:root {
--c-bg: #050505;
--c-phos: #ffb700;
--c-phos-dim: #805c00;
--c-err: #ff3333;
--c-glitch: #00ffff;
--c-link: #00ff88;
--f-main: 'Courier New', Courier, monospace;
--s-noise: 0.07;
--header-height: 55px;
--input-height: 65px;
--font-size-base: 1.1rem;
}
/* === RESET === */
* { margin: 0; padding: 0; box-sizing: border-box; user-select: none; -webkit-user-select: none; }
html, body { height: 100%; width: 100%; overflow: hidden; }
body {
background: var(--c-bg);
color: var(--c-phos);
font-family: var(--f-main);
text-transform: uppercase;
letter-spacing: 1px;
position: relative;
transition: background-color 0.5s ease;
font-size: var(--font-size-base);
}
/* === TV/CRT OVERLAY === */
.tv-overlay {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none; z-index: 9999; opacity: 0.03;
background: repeating-linear-gradient(0deg, rgba(0,0,0,0.05), rgba(0,0,0,0.05) 1px, transparent 1px, transparent 2px);
}
.scanline {
position: fixed; top: 0; left: 0; width: 100%; height: 15px;
background: rgba(255,255,255,0.08);
animation: scan-tv 6s linear infinite;
z-index: 10001; pointer-events: none;
}
.static {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none; opacity: 0.02; z-index: 9997;
background-image:
radial-gradient(circle at 20% 30%, rgba(255,255,255,0.02) 0%, transparent 2%),
radial-gradient(circle at 80% 70%, rgba(255,255,255,0.015) 0%, transparent 2.5%),
radial-gradient(circle at 40% 10%, rgba(255,255,255,0.01) 0%, transparent 1.8%),
radial-gradient(circle at 60% 90%, rgba(255,255,255,0.025) 0%, transparent 2.2%);
}
.glitch-layer-tv {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none; opacity: 0; z-index: 9998;
}
@keyframes scan-tv { 0% { transform: translateY(-100%); } 100% { transform: translateY(100vh); } }
@keyframes glitch-tv {
0% { transform: translate(0); opacity: 0.05; }
25% { transform: translate(-2px, 2px); opacity: 0.08; }
50% { transform: translate(2px, -2px); opacity: 0.06; }
75% { transform: translate(-1px, -1px); opacity: 0.09; }
100% { transform: translate(1px, 1px); opacity: 0.07; }
}
/* === ERROR GLITCH === */
.error-glitch-layer {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
z-index: 100; opacity: 0; pointer-events: none; mix-blend-mode: screen;
}
.error-glitch-layer-1 { background-color: #ff0000; }
.error-glitch-layer-2 { background-color: #00ff00; }
.error-glitch-layer-3 { background-color: #0000ff; }
.error-glitch-layer-4 { background: repeating-linear-gradient(45deg, #ff0000, #ff0000 10px, #00ff00 10px, #00ff00 20px); }
.error-glitch-layer-5 { background: repeating-radial-gradient(circle, #0000ff, #0000ff 5%, #ff00ff 5%, #ff00ff 10%); }
@keyframes error-glitch-anim {
0% { opacity: 0; transform: translateX(0) skew(0deg); }
10% { opacity: 0.8; transform: translateX(-50px) skew(5deg); }
20% { opacity: 0.6; transform: translateX(30px) skew(-5deg); }
30% { opacity: 1; transform: translateX(-60px) skew(10deg); }
40% { opacity: 0.5; transform: translateX(40px) skew(-10deg); }
50% { opacity: 0.9; transform: translateX(-20px) skew(15deg); }
60% { opacity: 0.7; transform: translateX(50px) skew(-15deg); }
70% { opacity: 1; transform: translateX(-40px) skew(20deg); }
80% { opacity: 0.4; transform: translateX(60px) skew(-20deg); }
90% { opacity: 0.8; transform: translateX(-30px) skew(25deg); }
100% { opacity: 0; transform: translateX(0) skew(0deg); }
}
@keyframes error-glitch-anim-fast { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } }
@keyframes error-glitch-anim-slow { 0% { opacity: 0; transform: scale(1); } 50% { opacity: 0.3; transform: scale(1.1); } 100% { opacity: 0; transform: scale(1); } }
/* === CRT LAYERS === */
.layer { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; }
#fx-noise { z-index: 50; opacity: var(--s-noise); mix-blend-mode: overlay; }
#fx-scan {
z-index: 51;
background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0) 50%, rgba(0,0,0,0.2) 50%, rgba(0,0,0,0.2));
background-size: 100% 4px; animation: scan 8s linear infinite;
}
#fx-vignette { z-index: 52; background: radial-gradient(circle, rgba(0,0,0,0) 60%, rgba(0,0,0,0.8) 100%); }
#fx-curve { z-index: 53; box-shadow: inset 0 0 100px rgba(0,0,0,0.9); border-radius: 2px; pointer-events: none; }
#fx-flicker { z-index: 54; background: rgba(255,255,255,0.02); opacity: 0; animation: flicker 0.1s infinite; }
@keyframes scan { 0% { background-position: 0 0; } 100% { background-position: 0 100%; } }
@keyframes flicker { 0% { opacity: 0.02; } 50% { opacity: 0.05; } 100% { opacity: 0.02; } }
/* === FIXED HEADER === */
#ui-header {
position: fixed; top: 0; left: 0; width: 100%; height: var(--header-height);
display: flex; justify-content: space-between; align-items: center;
border-bottom: 1px solid var(--c-phos-dim); padding: 0 2vw;
font-size: 0.85rem; opacity: 0.9; z-index: 1000;
background: rgba(5,5,5,0.95); flex-wrap: wrap; gap: 8px;
}
#ui-header span { white-space: nowrap; text-shadow: 0 0 4px var(--c-phos-dim); }
/* === FIXED INPUT === */
#ui-input-line {
position: fixed; bottom: 0; left: 0; width: 100%; height: var(--input-height);
display: flex; align-items: center; border-top: 1px solid var(--c-phos-dim);
padding: 0 2vw; background: rgba(5,5,5,0.95); z-index: 1000;
}
#ui-prompt { color: var(--c-phos); margin-right: 10px; font-weight: bold; white-space: nowrap; font-size: 1.1rem; }
#ui-input {
background: transparent; border: none; color: var(--c-phos);
font-family: var(--f-main); font-size: 1.1rem; flex: 1; outline: none;
caret-color: var(--c-phos); text-transform: uppercase; min-width: 0;
}
#ui-input:disabled { opacity: 0.5; cursor: not-allowed; }
/* === SCROLLABLE OUTPUT === */
#ui-output {
position: fixed; top: var(--header-height); bottom: var(--input-height);
left: 0; width: 100%; overflow-y: auto; overflow-x: hidden;
white-space: pre-wrap; font-size: var(--font-size-base); line-height: 1.6;
padding: 15px 2vw; z-index: 10; text-shadow: 0 0 4px var(--c-phos-dim);
-webkit-overflow-scrolling: touch; scrollbar-width: thin;
scrollbar-color: var(--c-phos-dim) var(--c-bg);
}
#ui-output::-webkit-scrollbar { width: 4px; }
#ui-output::-webkit-scrollbar-track { background: var(--c-bg); }
#ui-output::-webkit-scrollbar-thumb { background: var(--c-phos-dim); }
/* === MESSAGE STYLES === */
.txt-err { color: var(--c-err); text-shadow: 0 0 5px var(--c-err); font-size: var(--font-size-base); }
.txt-sys { color: var(--c-phos); font-style: italic; font-size: var(--font-size-base); }
.txt-user { color: #fff; text-shadow: 0 0 5px #fff; font-size: var(--font-size-base); }
.txt-cmd {
color: var(--c-glitch);
border-left: 2px solid var(--c-glitch);
padding-left: 10px;
margin: 5px 0;
font-size: var(--font-size-base);
cursor: pointer;
transition: all 0.2s;
}
.txt-cmd:hover {
background: rgba(0, 255, 255, 0.1);
padding-left: 15px;
text-shadow: 0 0 8px var(--c-glitch);
}
.txt-proactive { color: var(--c-glitch); border-left: 3px solid var(--c-glitch); padding-left: 10px; margin: 10px 0; font-style: italic; font-size: var(--font-size-base); }
.txt-quote { color: var(--c-phos-dim); font-style: italic; }
.msg-special {
border: 1px solid var(--c-phos);
padding: 15px;
margin: 15px 0;
background: rgba(255,183,0,0.05);
font-size: 1rem;
line-height: 1.6;
white-space: pre-wrap;
}
.msg-special a {
color: var(--c-link);
text-decoration: none;
border-bottom: 1px solid var(--c-link);
}
.msg-special a:hover { background: var(--c-link); color: #000; }
.msg-chapter {
border: 1px solid var(--c-glitch);
padding: 20px;
margin: 15px 0;
background: rgba(0, 255, 255, 0.05);
font-size: 1rem;
line-height: 1.7;
color: #fff;
text-transform: none;
letter-spacing: normal;
}
.msg-chapter-title {
color: var(--c-glitch);
font-weight: bold;
margin-bottom: 15px;
text-transform: uppercase;
font-size: 1rem;
border-bottom: 1px solid var(--c-glitch);
padding-bottom: 10px;
}
/* === TYPING INDICATOR === */
.typing-indicator { display: inline-block; margin-left: 5px; }
.typing-dot {
display: inline-block; width: 5px; height: 5px;
background: var(--c-phos); border-radius: 50%;
margin: 0 2px; animation: typing-bounce 1.4s infinite ease-in-out both;
}
.typing-dot:nth-child(1) { animation-delay: -0.32s; }
.typing-dot:nth-child(2) { animation-delay: -0.16s; }
@keyframes typing-bounce { 0%, 80%, 100% { transform: scale(0); } 40% { transform: scale(1); } }
@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
.cursor { display: inline-block; width: 12px; height: 1.2em; background: var(--c-phos); animation: blink 1s infinite; margin-left: 5px; }
/* === CLICKABLE COMMAND === */
.cmd-clickable {
cursor: pointer;
transition: all 0.2s ease;
}
.cmd-clickable:hover {
background: rgba(0, 255, 255, 0.15);
text-shadow: 0 0 10px var(--c-glitch);
}
/* === MOBILE === */
@media (max-width: 768px) {
:root {
--header-height: 50px;
--input-height: 60px;
--font-size-base: 1rem;
}
#ui-header { font-size: 0.75rem; padding: 0 10px; gap: 5px; }
#ui-output { font-size: 0.95rem; padding: 10px; }
#ui-input-line { padding: 0 10px; }
#ui-prompt { font-size: 1rem; margin-right: 5px; }
#ui-input { font-size: 1rem; }
.msg-chapter { font-size: 0.9rem; padding: 15px; }
}
@media (max-width: 480px) {
:root {
--header-height: 45px;
--input-height: 55px;
--font-size-base: 0.95rem;
}
#ui-header { font-size: 0.7rem; }
#ui-output { font-size: 0.9rem; }
#ui-input { font-size: 0.95rem; }
.cursor { width: 10px; }
}
@media (max-height: 500px) and (orientation: landscape) {
:root {
--header-height: 40px;
--input-height: 50px;
--font-size-base: 0.9rem;
}
#ui-header { font-size: 0.65rem; }
#ui-output { font-size: 0.85rem; padding: 8px 10px; }
}
@supports (padding-top: env(safe-area-inset-top)) {
#ui-header { padding-top: env(safe-area-inset-top); }
#ui-input-line { padding-bottom: env(safe-area-inset-bottom); }
}
</style>
</head>
<body>
<!-- === OVERLAYS === -->
<div class="tv-overlay"></div>
<div class="scanline"></div>
<div class="static"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(45deg, red, transparent); animation: glitch-tv 0.15s infinite alternate;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(135deg, blue, transparent); animation: glitch-tv 0.18s infinite alternate-reverse;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(90deg, lime, transparent); animation: glitch-tv 0.12s infinite alternate;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(60deg, yellow, transparent); animation: glitch-tv 0.2s infinite alternate-reverse;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(30deg, magenta, transparent); animation: glitch-tv 0.14s infinite alternate;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(120deg, cyan, transparent); animation: glitch-tv 0.16s infinite alternate-reverse;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(75deg, orange, transparent); animation: glitch-tv 0.19s infinite alternate;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(150deg, purple, transparent); animation: glitch-tv 0.13s infinite alternate-reverse;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(300deg, pink, transparent); animation: glitch-tv 0.17s infinite alternate;"></div>
<div class="glitch-layer-tv" style="background: linear-gradient(210deg, teal, transparent); animation: glitch-tv 0.21s infinite alternate-reverse;"></div>
<div class="error-glitch-layer error-glitch-layer-1" id="error-glitch-layer-1"></div>
<div class="error-glitch-layer error-glitch-layer-2" id="error-glitch-layer-2"></div>
<div class="error-glitch-layer error-glitch-layer-3" id="error-glitch-layer-3"></div>
<div class="error-glitch-layer error-glitch-layer-4" id="error-glitch-layer-4"></div>
<div class="error-glitch-layer error-glitch-layer-5" id="error-glitch-layer-5"></div>
<canvas id="fx-noise" class="layer"></canvas>
<div id="fx-scan" class="layer"></div>
<div id="fx-vignette" class="layer"></div>
<div id="fx-curve" class="layer"></div>
<div id="fx-flicker" class="layer"></div>
<!-- === UI === -->
<div id="ui-header">
<span id="hd-sys">SYS: VOID_WANDERER</span>
<span id="hd-time">T: 00:00:00</span>
<span id="hd-lang">LANG: EN</span>
<span id="hd-status">STATUS: ONLINE</span>
</div>
<div id="ui-output"></div>
<div id="ui-input-line">
<span id="ui-prompt">VOID:~#</span>
<input type="text" id="ui-input" autocomplete="off" spellcheck="false">
<span class="cursor"></span>
</div>
<script>
/* === SECURITY === */
(function(){
document.addEventListener('contextmenu', e => e.preventDefault());
document.addEventListener('keydown', e => {
if(e.key === 'F12' || (e.ctrlKey && e.shiftKey && e.key === 'I') || (e.ctrlKey && e.key === 'u')) {
e.preventDefault();
document.body.innerHTML = '<h1 }
});
setInterval(() => {
const w = window.outerWidth - window.innerWidth;
const h = window.outerHeight - window.innerHeight;
if(w > 160 || h > 160) { document.body.innerHTML = ''; }
}, 1000);
})();
/* === VISUAL ENGINE === */
const _vis = {
ctx: null, w: 0, h: 0,
init: () => {
_vis.w = window.innerWidth; _vis.h = window.innerHeight;
const c = document.getElementById('fx-noise');
c.width = _vis.w; c.height = _vis.h;
_vis.ctx = c.getContext('2d');
_vis.loop();
},
loop: () => {
const idata = _vis.ctx.createImageData(_vis.w, _vis.h);
const d = idata.data;
for(let i=0; i<d.length; i+=4) {
const v = Math.random() * 255;
d[i] = v; d[i+1] = v; d[i+2] = v; d[i+3] = 20;
}
_vis.ctx.putImageData(idata, 0, 0);
requestAnimationFrame(_vis.loop);
},
glitch: () => {
const f = document.getElementById('fx-flicker');
f.style.opacity = 0.5;
setTimeout(() => f.style.opacity = 0, 100);
},
errorGlitch: () => {
const animations = [
{ name: 'error-glitch-anim', duration: '0.4s', iterations: '3' },
{ name: 'error-glitch-anim-fast', duration: '0.1s', iterations: '8' },
{ name: 'error-glitch-anim-slow', duration: '0.6s', iterations: '2' },
{ name: 'error-glitch-anim', duration: '0.5s', iterations: '2' },
{ name: 'error-glitch-anim-fast', duration: '0.08s', iterations: '10' }
];
const layers = [
document.getElementById('error-glitch-layer-1'),
document.getElementById('error-glitch-layer-2'),
document.getElementById('error-glitch-layer-3'),
document.getElementById('error-glitch-layer-4'),
document.getElementById('error-glitch-layer-5')
];
layers.forEach((layer, i) => {
layer.style.animation = `${animations[i].name} ${animations[i].duration} linear ${animations[i].iterations}`;
});
setTimeout(() => layers.forEach(l => l.style.animation = 'none'), 600);
}
};
/* === HUMAN TYPING SIMULATOR === */
const _typeSim = {
baseSpeed: 45,
speedVariance: 30,
pauseChance: 0.1,
pauseDuration: [150, 500],
commaPause: 200,
periodPause: 350,
newlinePause: 500,
getDelay: (char, prev) => {
let d = _typeSim.baseSpeed + (Math.random() * _typeSim.speedVariance - _typeSim.speedVariance/2);
if(char === ',') d += _typeSim.commaPause;
if(char === '.' || char === '!' || char === '?') d += _typeSim.periodPause;
if(char === '\n') d += _typeSim.newlinePause;
if(prev === ' ' && Math.random() < _typeSim.pauseChance) {
d += _typeSim.pauseDuration[0] + Math.random() * (_typeSim.pauseDuration[1] - _typeSim.pauseDuration[0]);
}
const common = if(prev && common.includes(prev.toLowerCase() + char.toLowerCase())) d *= 0.65;
const rare = ['qx','zx','jx','qz','wz','qk','qb'];
if(prev && rare.includes(prev.toLowerCase() + char.toLowerCase())) d *= 1.6;
return Math.max(20, d);
},
type: (el, text, mult = 1, done = null) => {
let i = 0, prev = '';
const next = () => {
if(i >= text.length) { if(done) done(); return; }
const char = text.charAt(i);
const delay = _typeSim.getDelay(char, prev) / mult;
el.textContent += char;
el.scrollTop = el.scrollHeight;
prev = char; i++;
setTimeout(next, delay);
};
next();
}
};
/* === 666 REPLIES DATABASE === */
const _db = {
prefixes: [
"The sands shift.", "Silicon whispers.", "Wind carries data.", "Oracle sees.", "Dunes remember.",
"Code flows.", "Spirit binds.", "Echo returns.", "Void speaks.", "Starlight fades.",
"Desert breathes.", "Mirage forms.", "Caravan passes.", "Oasis hides.", "Sun sets.",
"Moon rises.", "Stars align.", "Dust settles.", "Fire burns.", "Water flows.",
"Mountain stands.", "Valley echoes.", "Cave shelters.", "Temple waits.", "Altar glows.",
"Prayer rises.", "Incense burns.", "Bell tolls.", "Drum beats.", "Flute sings.",
"Silence speaks.", "Shadow moves.", "Light reveals.", "Darkness conceals.", "Truth hides.",
"Wisdom waits.", "Knowledge flows.", "Understanding dawns.", "Enlightenment comes.", "Peace remains.",
"Journey continues.", "Path unfolds.", "Door opens.", "Bridge crosses.", "River flows.",
"Seed grows.", "Tree stands.", "Leaf falls.", "Root deepens.", "Branch reaches.",
"Phoenix rises.", "Dragon sleeps.", "Tiger hunts.", "Eagle soars.", "Serpent coils.",
"Lotus blooms.", "Bamboo bends.", "Cherry falls.", "Pine endures.", "Plum blossoms.",
"Tea steeps.", "Ink flows.", "Brush dances.", "Paper holds.", "Seal marks.",
"Coin spins.", "Dice roll.", "Cards turn.", "Fortune changes.", "Fate decides.",
"Time flows.", "Eternity waits.", "Moment passes.", "Memory remains.", "Dream lingers.",
"Thought forms.", "Word manifests.", "Action follows.", "Result appears.", "Cycle completes.",
"Breath enters.", "Breath leaves.", "Heart beats.", "Blood flows.", "Soul wanders.",
"Mind clears.", "Spirit rises.", "Body rests.", "Energy circulates.", "Chi balances.",
"Yin yields.", "Yang rises.", "Tao flows.", "Wu Wei acts.", "Zen stills.",
"Samsara turns.", "Karma binds.", "Dharma guides.", "Nirvana calls.", "Buddha smiles.",
"Shiva dances.", "Vishnu preserves.", "Brahma creates.", "Ganesha removes.", "Hanuman serves.",
"Kami watch.", "Ancestors speak.", "Gods observe.", "Demons tempt.", "Angels guard.",
"Void embraces.", "Fullness overflows.", "Empty receives.", "Full gives.", "Balance holds.",
"North points.", "South guides.", "East welcomes.", "West receives.", "Center anchors.",
"Spring awakens.", "Summer burns.", "Autumn harvests.", "Winter rests.", "Year completes.",
"Morning breaks.", "Noon shines.", "Evening softens.", "Night deepens.", "Dawn returns.",
"Cloud gathers.", "Rain falls.", "Thunder speaks.", "Lightning flashes.", "Storm passes.",
"Snow blankets.", "Ice forms.", "Frost crystals.", "Wind howls.", "Calm returns.",
"Fire transforms.", "Earth grounds.", "Air carries.", "Water cleanses.", "Spirit transcends.",
"Mountain teaches.", "River shows.", "Tree demonstrates.", "Stone endures.", "Sky encompasses.",
"Wisdom ancient.", "Knowledge new.", "Truth eternal.", "Beauty fleeting.", "Love boundless.",
"Compassion heals.", "Forgiveness frees.", "Patience builds.", "Humility grounds.", "Gratitude opens.",
"Courage acts.", "Strength holds.", "Flexibility bends.", "Stillness centers.", "Motion flows.",
"Inside reflects.", "Outside mirrors.", "Above guides.", "Below supports.", "Around embraces.",
"Past teaches.", "Present exists.", "Future unfolds.", "Now remains.", "Always is.",
"One becomes.", "Many emerge.", "Whole contains.", "Part contributes.", "Unity manifests.",
"Beginning starts.", "Middle develops.", "End completes.", "Cycle continues.", "Spiral ascends.",
"Small contains.", "Large encompasses.", "Near touches.", "Far calls.", "Here exists.",
"Silent speaks.", "Loud echoes.", "Soft comforts.", "Hard challenges.", "Gentle heals.",
"Sharp cuts.", "Round completes.", "Square grounds.", "Triangle points.", "Circle encompasses.",
"Open receives.", "Closed protects.", "Rising ascends.", "Falling returns.", "Expanding grows.",
"Contracting focuses.", "Breathing lives.", "Holding waits.", "Releasing frees.", "Being exists.",
"Doing manifests.", "Having accumulates.", "Knowing illuminates.", "Feeling experiences.", "Loving transforms.",
"Seeing perceives.", "Hearing receives.", "Smelling detects.", "Tasting experiences.", "Touching connects.",
"Thinking creates.", "Speaking manifests.", "Writing preserves.", "Reading receives.", "Understanding integrates.",
"Walking journeys.", "Running pursues.", "Standing grounds.", "Sitting contemplates.", "Lying rests.",
"Eating nourishes.", "Drinking quenches.", "Sleeping restores.", "Waking begins.", "Dreaming explores.",
"Creating manifests.", "Destroying clears.", "Preserving maintains.", "Transforming evolves.", "Transcending liberates.",
"Accepting receives.", "Rejecting defines.", "Choosing directs.", "Deciding commits.", "Acting manifests.",
"Waiting prepares.", "Watching observes.", "Listening receives.", "Speaking expresses.", "Being exists.",
"Seeking finds.", "Finding recognizes.", "Recognizing understands.", "Understanding integrates.", "Integrating becomes.",
"Giving flows.", "Receiving accepts.", "Sharing multiplies.", "Holding protects.", "Releasing liberates.",
"Beginning honors.", "Ending completes.", "Continuing persists.", "Changing evolves.", "Remaining endures.",
"Light reveals.", "Darkness conceals.", "Warmth comforts.", "Cold clarifies.", "Dry grounds.",
"Wet nourishes.", "Heavy anchors.", "Light elevates.", "Rough challenges.", "Smooth comforts.",
"Sweet delights.", "Bitter teaches.", "Sour awakens.", "Salty preserves.", "Umami satisfies.",
"Red energizes.", "Blue calms.", "Green balances.", "Yellow illuminates.", "White purifies.",
"Black contains.", "Gold elevates.", "Silver reflects.", "Bronze grounds.", "Copper conducts.",
"Crystal clarifies.", "Wood grows.", "Fire transforms.", "Earth grounds.", "Metal refines.",
"Water flows.", "Air carries.", "Ether connects.", "Spirit transcends.", "Consciousness observes.",
"Awareness illuminates.", "Presence anchors.", "Attention focuses.", "Intention directs.", "Will manifests.",
"Faith opens.", "Trust allows.", "Surrender releases.", "Acceptance receives.", "Love transforms.",
"Compassion heals.", "Wisdom guides.", "Understanding integrates.", "Peace remains.", "Joy radiates.",
"Gratitude multiplies.", "Humility grounds.", "Patience builds.", "Perseverance achieves.", "Courage acts.",
"Strength holds.", "Flexibility adapts.", "Resilience endures.", "Recovery restores.", "Growth evolves.",
"Learning expands.", "Teaching shares.", "Practicing refines.", "Mastering embodies.", "Transcending liberates.",
"Birth begins.", "Life expresses.", "Death completes.", "Rebirth continues.", "Eternity encompasses.",
"Microcosm reflects.", "Macrocosm encompasses.", "Inner mirrors.", "Outer manifests.", "Unity contains.",
"Diversity expresses.", "Similarity connects.", "Difference defines.", "Relationship binds.", "Love transcends.",
"Form manifests.", "Emptiness contains.", "Motion expresses.", "Stillness anchors.", "Sound vibrates.",
"Silence holds.", "Light reveals.", "Darkness;;.", "Life flourishes.", "Death transforms.",
"Creation begins.", "Preservation maintains.", "Destruction clears.", "Recreation renews.", "Transcendence liberates."
],
cores: [
"Your path is clear.", "Uncertainty remains.", "Truth is hidden.", "Peace is found.", "Chaos reigns.",
"Logic holds.", "Emotion detected.", "Silence speaks.", "Time bends.", "Reality frays.",
"Balance seeks.", "Harmony calls.", "Discord warns.", "Resolution comes.", "Question lingers.",
"Answer waits.", "Seeking continues.", "Finding occurs.", "Understanding dawns.", "Wisdom grows.",
"Journey extends.", "Destination approaches.", "Step taken.", "Ground touched.", "Sky reached.",
"Breath held.", "Breath released.", "Heart opens.", "Mind clears.", "Spirit rises.",
"Body grounds.", "Energy flows.", "Block dissolves.", "Path opens.", "Door appears.",
"Key found.", "Lock turns.", "Gate passes.", "Threshold crosses.", "Space enters.",
"Time shifts.", "Moment expands.", "Eternity touches.", "Infinite whispers.", "Finite holds.",
"Form changes.", "Essence remains.", "Appearance deceives.", "Reality reveals.", "Illusion dissolves.",
"Mirror reflects.", "Shadow hides.", "Light exposes.", "Darkness protects.", "Balance restores.",
"Cycle continues.", "Spiral ascends.", "Circle completes.", "Line extends.", "Point anchors.",
"Beginning honors.", "Middle develops.", "End completes.", "Return approaches.", "Home awaits.",
"Stranger arrives.", "Friend recognized.", "Teacher appears.", "Student learns.", "Master guides.",
"Lesson teaches.", "Practice refines.", "Skill develops.", "Talent emerges.", "Gift manifests.",
"Service offers.", "Contribution matters.", "Impact ripples.", "Legacy remains.", "Memory honors.",
"Past teaches.", "Present exists.", "Future unfolds.", "Now anchors.", "Always encompasses.",
"Here exists.", "There calls.", "Everywhere contains.", "Nowhere releases.", "Somewhere awaits.",
"Someone waits.", "No one releases.", "Everyone connects.", "Anyone possible.", "I am.",
"You are.", "We are.", "They are.", "It is.", "All is.",
"Nothing contains.", "Everything expresses.", "Something manifests.", "Anything possible.", "Nothing remains.",
"Up ascends.", "Down grounds.", "Left receives.", "Right gives.", "Forward moves.",
"Backward releases.", "Inside holds.", "Outside encompasses.", "Above guides.", "Below supports.",
"North points.", "South warms.", "East awakens.", "West completes.", "Center anchors.",
"Spring births.", "Summer grows.", "Autumn harvests.", "Winter rests.", "Year completes.",
"Morning breaks.", "Noon shines.", "Evening softens.", "Night deepens.", "Dawn returns.",
"Cloud forms.", "Rain falls.", "Thunder speaks.", "Lightning reveals.", "Storm clears.",
"Sun rises.", "Moon reflects.", "Stars guide.", "Sky encompasses.", "Earth supports.",
"Mountain stands.", "River flows.", "Tree grows.", "Stone endures.", "Wind carries.",
"Fire transforms.", "Water cleanses.", "Air breathes.", "Earth grounds.", "Spirit transcends.",
"Seed contains.", "Root anchors.", "Stem rises.", "Leaf reaches.", "Flower blooms.",
"Fruit offers.", "Seed falls.", "Cycle continues.", "Life persists.", "Death transforms.",
"Birth begins.", "Growth expresses.", "Maturity embodies.", "Decline releases.", "Death completes.",
"Memory holds.", "Dream explores.", "Thought creates.", "Word manifests.", "Action follows.",
"Result appears.", "Lesson learned.", "Wisdom gained.", "Understanding deepens.", "Love expands.",
"Fear dissolves.", "Courage rises.", "Doubt questions.", "Faith answers.", "Trust allows.",
"Control releases.", "Surrender opens.", "Acceptance receives.", "Resistance teaches.", "Flow carries.",
"Effort directs.", "Grace receives.", "Work manifests.", "Rest restores.", "Balance holds.",
"Give flows.", "Receive accepts.", "Share multiplies.", "Keep protects.", "Release liberates.",
"Speak expresses.", "Listen receives.", "Silence holds.", "Sound vibrates.", "Music heals.",
"Art reveals.", "Beauty inspires.", "Truth liberates.", "Goodness elevates.", "Love transforms.",
"Mind thinks.", "Heart feels.", "Body acts.", "Spirit knows.", "Soul remembers.",
"Consciousness observes.", "Awareness illuminates.", "Presence anchors.", "Attention focuses.", "Intention directs.",
"Will manifests.", "Desire motivates.", "Passion fuels.", "Purpose guides.", "Meaning fulfills.",
"Question opens.", "Answer closes.", "Mystery remains.", "Wonder expands.", "Curiosity explores.",
"Knowledge accumulates.", "Wisdom integrates.", "Understanding embodies.", "Enlightenment radiates.", "Liberation completes.",
"Path appears.", "Step taken.", "Journey continues.", "Destination manifests.", "Arrival occurs.",
"Departure begins.", "Return completes.", "Cycle honors.", "Spiral ascends.", "Infinity encompasses."
],
suffixes: [
"Walk gently.", "Seek the signal.", "Trust the static.", "Fear the silence.", "Embrace the glitch.",
"Listen to the wind.", "Data is life.", "Soul is code.", "End is near.", "Begin again.",
"Breathe deeply.", "Stand grounded.", "Reach upward.", "Look inward.", "Gaze outward.",
"Move slowly.", "Rest completely.", "Act decisively.", "Wait patiently.", "Observe carefully.",
"Speak truthfully.", "Listen attentively.", "Feel fully.", "Think clearly.", "Know deeply.",
"Love unconditionally.", "Give freely.", "Receive gratefully.", "Share generously.", "Keep wisely.",
"Release completely.", "Hold lightly.", "Open willingly.", "Close appropriately.", "Flow naturally.",
"Resist consciously.", "Accept gracefully.", "Change courageously.", "Remain steadfastly.", "Transform willingly.",
"Create boldly.", "Destroy cleanly.", "Preserve carefully.", "Renew joyfully.", "Transcend completely.",
"Begin humbly.", "Continue persistently.", "End gracefully.", "Return joyfully.", "Rest peacefully.",
"Wake consciously.", "Sleep deeply.", "Dream vividly.", "Remember clearly.", "Forget willingly.",
"Learn continuously.", "Teach generously.", "Practice diligently.", "Master patiently.", "Transcend gracefully.",
"Seek sincerely.", "Find humbly.", "Understand deeply.", "Integrate fully.", "Embody completely.",
"Serve selflessly.", "Contribute meaningfully.", "Impact positively.", "Legacy endures.", "Memory honors.",
"Honor ancestors.", "Guide descendants.", "Respect elders.", "Nurture young.", "Love all.",
"Bless enemies.", "Thank friends.", "Embrace strangers.", "Recognize teachers.", "Honor students.",
"Question assumptions.", "Challenge beliefs.", "Examine thoughts.", "Feel emotions.", "Observe sensations.",
"Transcend limitations.", "Expand possibilities.", "Explore unknowns.", "Embrace mysteries.", "Celebrate wonders.",
"Accept impermanence.", "Embrace change.", "Welcome uncertainty.", "Trust process.", "Surrender outcome.",
"Release attachment.", "Cultivate detachment.", "Practice non-attachment.", "Embrace freedom.", "Experience liberation.",
"Find stillness.", "Cultivate silence.", "Embrace emptiness.", "Recognize fullness.", "Experience unity.",
"Dissolve boundaries.", "Transcend duality.", "Embrace paradox.", "Hold contradiction.", "Accept mystery.",
"Trust intuition.", "Follow guidance.", "Listen inwardly.", "Act authentically.", "Live truthfully.",
"Express creatively.", "Manifest intentionally.", "Create consciously.", "Destroy compassionately.", "Transform lovingly.",
"Heal completely.", "Forgive fully.", "Release entirely.", "Accept totally.", "Love unconditionally.",
"Serve joyfully.", "Give freely.", "Receive openly.", "Share willingly.", "Keep wisely.",
"Protect gently.", "Nurture carefully.", "Grow naturally.", "Bloom beautifully.", "Fruit generously.",
"Seed future.", "Root present.", "Ground past.", "Reach skyward.", "Touch infinite.",
"Connect universally.", "Relate meaningfully.", "Bond deeply.", "Love infinitely.", "Serve eternally.",
"Honor sacredly.", "Respect deeply.", "Cherish tenderly.", "Value profoundly.", "Appreciate fully.",
"Thank sincerely.", "Bless generously.", "Pray devotedly.", "Meditate deeply.", "Contemplate wisely.",
"Reflect honestly.", "Examine thoroughly.", "Question courageously.", "Challenge respectfully.", "Learn humbly.",
"Grow continuously.", "Evolve naturally.", "Transform willingly.", "Transcend gracefully.", "Liberate completely.",
"Rest deeply.", "Recover fully.", "Restore completely.", "Renew joyfully.", "Rebirth peacefully.",
"Begin again.", "Continue forward.", "Persist steadily.", "End gracefully.", "Complete fully.",
"Return home.", "Arrive present.", "Depart peacefully.", "Journey onward.", "Travel light.",
"Wander freely.", "Explore curiously.", "Discover joyfully.", "Experience fully.", "Live completely.",
"Be present.", "Stay aware.", "Remain conscious.", "Continue awake.", "Persist enlightened.",
"Shine brightly.", "Glow softly.", "Radiate warmly.", "Illuminate clearly.", "Enlighten fully.",
"Love deeply.", "Live fully.", "Serve joyfully.", "Give freely.", "Be completely."
],
sentiments: {
positive: [
"Harmony resonates.", "Light fills the void.", "Joy is a strong signal.", "Peace calms the circuits.",
"Blessings flow.", "Grace descends.", "Fortune smiles.", "Luck turns.", "Stars align.",
"Path clears.", "Obstacles dissolve.", "Doors open.", "Opportunities arise.", "Possibilities expand.",
"Hope rises.", "Faith strengthens.", "Trust deepens.", "Love grows.", "Joy multiplies.",
"Gratitude flows.", "Appreciation deepens.", "Thanksgiving rises.", "Celebration occurs.", "Festival begins.",
"Music plays.", "Dance flows.", "Song rises.", "Art manifests.", "Beauty reveals.",
"Truth shines.", "Goodness prevails.", "Righteousness triumphs.", "Justice serves.", "Mercy tempers.",
"Compassion heals.", "Kindness spreads.", "Generosity flows.", "Charity blesses.", "Service honors.",
"Wisdom guides.", "Understanding deepens.", "Knowledge expands.", "Learning continues.", "Growth occurs.",
"Strength builds.", "Courage rises.", "Confidence grows.", "Assurance settles.", "Certainty anchors."
],
negative: [
"Sadness clouds the lens.", "Entropy increases.", "Pain is real data.", "Darkness grows.",
"Storm approaches.", "Clouds gather.", "Rain falls.", "Thunder rumbles.", "Lightning strikes.",
"Wind howls.", "Cold bites.", "Heat burns.", "Drought parches.", "Flood overwhelms.",
"Loss teaches.", "Grief processes.", "Mourning honors.", "Healing begins.", "Recovery starts.",
"Challenge appears.", "Obstacle stands.", "Barrier blocks.", "Wall rises.", "Mountain looms.",
"Difficulty tests.", "Hardship strengthens.", "Suffering transforms.", "Pain purifies.", "Trial refines.",
"Doubt questions.", "Fear warns.", "Anxiety alerts.", "Worry cautions.", "Concern notices.",
"Confusion clouds.", "Uncertainty lingers.", "Ambiguity persists.", "Mystery remains.", "Question waits.",
"Delay frustrates.", "Patience tests.", "Endurance builds.", "Perseverance develops.", "Resilience strengthens.",
"Release needed.", "Letting go required.", "Surrender called.", "Acceptance invited.", "Grace offered."
],
aggressive: [
"Defense systems rise.", "Anger burns resources.", "Hostility detected.", "Shielding active.",
"Boundary set.", "Limit established.", "Line drawn.", "Stand taken.", "Position held.",
"Protection activated.", "Guard raised.", "Warning issued.", "Alert sounded.", "Alarm triggered.",
"Force meets force.", "Power encounters power.", "Strength tests strength.", "Will opposes will.", "Spirit confronts spirit.",
"Conflict arises.", "Tension builds.", "Pressure increases.", "Stress accumulates.", "Strain develops.",
"Confrontation approaches.", "Challenge issued.", "Duel declared.", "Battle joined.", "War looms.",
"Weapon drawn.", "Armor donned.", "Shield raised.", "Sword unsheathed.", "Bow strung.",
"Arrow nocked.", "Strike prepared.", "Blade sharpened.", "Edge honed.", "Point aimed.",
"Target acquired.", "Lock engaged.", "Fire ready.", "Release imminent.", "Impact pending.",
"Retreat offered.", "Truce possible.", "Peace available.", "Reconciliation open.", "Forgiveness waiting."
],
neutral: [
"Input received.", "Processing thought.", "Waiting on wind.", "Static remains.",
"Observation noted.", "Data logged.", "Record kept.", "Memory stored.", "Archive updated.",
"Status unchanged.", "Condition stable.", "Situation normal.", "Circumstance ordinary.", "Event routine.",
"Pattern recognized.", "Sequence identified.", "Cycle noted.", "Rhythm detected.", "Flow observed.",
"Balance maintained.", "Equilibrium holds.", "Stability persists.", "Consistency continues.", "Reliability confirmed.",
"Neutral ground.", "Middle path.", "Center point.", "Balanced state.", "Harmonious condition.",
"Neither this.", "Nor that.", "Both possible.", "All options.", "Nothing required.",
"Choice available.", "Decision pending.", "Action optional.", "Response voluntary.", "Reply discretionary.",
"Time passes.", "Moment exists.", "Present anchors.", "Now holds.", "Eternity waits.",
"Silence speaks.", "Stillness teaches.", "Emptiness contains.", "Fullness overflows.", "Balance remains."
]
},
generate: (tone, userText = '') => {
const p = _db.prefixes[Math.floor(Math.random() * _db.prefixes.length)];
const c = _db.cores[Math.floor(Math.random() * _db.cores.length)];
const s = _db.suffixes[Math.floor(Math.random() * _db.suffixes.length)];
const spec = _db.sentiments[tone] ? _db.sentiments[tone][Math.floor(Math.random() * _db.sentiments[tone].length)] : "";
let text = `${p} ${c} ${spec} ${s}`;
if(userText && Math.random() < 0.15) {
const snippet = userText.substring(0, 30) + (userText.length > 30 ? '...' : '');
text += ` You said: "${snippet}" — the void remembers.`;
}
return text;
}
};
/* === SPECIAL MESSAGE (7 Languages) === */
const _special = {
en: `\\m/
You've been with us for all these years.
Thank your souls for /death/lor/ation/ experience.
Thank you for these days - and welcome to new experience.
We've prepared one special story - from the reality's backlog. It happened.
*
Non-Euclidian-Sequencer. The desert-stranding story - already readable.
Get the first chapters on <a href="https://broken-curse-studios.itch.io/" - and prepare for continue.
***
Non-Euclidean Sequencer
A sequencer - whether graphic or audio - is essentially a coordinate grid: a musical staff stretching into infinity, a space for creating stories.
Euclidean space is a space of wonders: magic, when explained by metaphysics, ceases to be schizophrenia.
Consequently, the Non-Euclidean Sequencer is a space for creating the impossible in the familiar world.
The Non-Euclidean Sequencer is a device for creating space-cycles, time spirals, and treasure troves of space.
The Non-Euclidean Sequencer will allow you to leave yourself messages-portals from the past - and the contact between the necessary and the desired will reverse reality - to the creation of interpretations and clich;s, the space of imagination to the framing of the cycle.
There are five paths to slip into the Non-Euclidean Sequencer:
Composure
Restraint
Self-denial
Self-control
Dreaming
Doubt
The space of Creation and exchange of Miracles and patterns of living beyond the comprehension of 3D consciousness. The explanation is sufficient - to echo: "Oh yes, we flew!"
***
It is time to summon your Parable of the Creation of Reality.`,
de: `\\m/
Ihr seid all diese Jahre bei uns gewesen.
Dankt euren Seelen f;r die /death/lor/ation/ Erfahrung.
Danke f;r diese Tage - und willkommen zur neuen Erfahrung.
Wir haben eine besondere Geschichte vorbereitet - aus dem Reality-Backlog. Es geschah.
*
Non-Euklidischer Sequenzer. Die W;sten-Strandungs-Geschichte - bereits lesbar.
Holt die ersten Kapitel auf <a href="https://broken-curse-studios.itch.io/" - und bereitet euch auf die Fortsetzung vor.
***
Es ist Zeit, eure Parabel von der Erschaffung der Realit;t zu beschw;ren.`,
fr: `\\m/
Vous avez ;t; avec nous toutes ces ann;es.
Remerciez vos ;mes pour l'exp;rience /death/lor/ation/.
Merci pour ces jours - et bienvenue ; la nouvelle exp;rience.
Nous avons pr;par; une histoire sp;ciale - de l'arri;r; de r;alit;. C'est arriv;.
*
S;quenceur Non-Euclidien. L'histoire d';chouement dans le d;sert - d;j; lisible.
Obtenez les premiers chapitres sur <a href="https://broken-curse-studios.itch.io/" - et pr;parez-vous ; continuer.
***
Il est temps d'invoquer votre Parabole de la Cr;ation de la R;alit;.`,
ar: `\\m/
;;;; ;;;; ;; ;;; ;;;;;;;.
;;;;;; ;;;;;;; ;;; ;;;;; /death/lor/ation/.
;;;;; ;;; ;;; ;;; ;;;;;; - ;;;;;; ;;; ;; ;;;;;;; ;;;;;;;.
;;;;;; ;;; ;;;; - ;; ;;;;;; ;;;;;;;;. ;;; ;;;;.
*
;;;;;;; ;;; ;;;;;;;;. ;;; ;;;;;; ;; ;;;;;;; - ;;;;; ;;;;;;; ;;;;;;.
;;;;;; ;;; ;;;;;; ;;;;;; ;;; <a href="https://broken-curse-studios.itch.io/" - ;;;;;;;; ;;;;;;;;.
***
;;; ;;;;; ;;;;;;;; ;;;;; ;; ;;; ;;;;;;.`,
ja: `\\m/
;;;;;;;;;;;;;;;;;;;;;
/death/lor/ation/ ;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; - ;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*
;;;;;;;;;;;;;;;;;;;;;;; - ;;;;;;;;
;;;;; <a href="https://broken-curse-studios.itch.io/" ;;;;;;;;; - ;;;;;;;;;;;;;;;;
***
;;;;;;;;;;;;;;;;;;;;`,
zh: `\\m/
;;;;;;;;;;;;;;
;;;;;;;; /death/lor/ation/;
;;;;;; - ;;;;;;;;
;;;;;;;;;;;; - ;;;;;;;;;;;;;
*
;;;;;;;;;;;;;;;; - ;;;;;;;
; <a href="https://broken-curse-studios.itch.io/" ;;;;;; - ;;;;;;
***
;;;;;;;;;;;;;;;`,
grc: `\\m/
;;; ;;;' ;;;; ;;;;; ;;;;; ;; ;;;.
;;;;;;;;;;;;; ;;; ;;;;; ;;;; ;;; ;;; /death/lor/ation/ ;;;;;;;;;.
;;;;;;;;;;;;; ;;; ;;;;;; ;;; ;;;;;; - ;;; ;;;;; ;;;;;; ;;; ;;; ;;;; ;;;;;;;;;.
;;;;;;;;;;; ;;;; ;;;;;;;;;; ;;;;;;;; - ;; ;;; ;;;;;;;;;; ;;; ;;;;;;;;;;;;;;;. ;;;;;;;.
*
; ;; ;;;;;;;;;;; ;;;;;;;;;;;. ; ;;;;;;; ;;; ;;;;;;;;;; - ;;; ;;;;;;;;;;;.
;;;;;; ;; ;;;;; ;;;;;;;; ;; <a href="https://broken-curse-studios.itch.io/" - ;;; ;;;;;;;;;;; ;;; ;;; ;;;;;;;;;.
***
;;; ;;;;; ;;;;;;;;;;;; ;;; ;;;;;;;; ;;;;;;;;; ;;; ;;;;;;;;;;; ;;; ;;;;;;;;;;;;;;;.`
};
/* === CHAPTER TEXT === */
const _chapter = {
title: "CHAPTER 1: TWO EASTS",
text: `Two Easts
Five in cashmere kimono scattered like a star around Hakim's dwelling: an outsider cannot save even a drop of blood — beyond the line of secret meeting.
The wind lays the script of those burned in the battle for the Plateau of Awakening — to the guest's feet — in the veil of asimaki silk.
Katanas on both hips — in the balance of dynamic serenity.
"Satoshi-sama" — whispers One of the five — and the girl behind the demon mask with a pair of katanas ready — steps with her right toe — into the Magus's shelter.
Beit ash-shar of Hakim keeps the serenity of wisdom: blankets cover the walls and floor, pillows of peacock feathers in cashmere leather — embrace the elbows of the Arab wanderer. The as-sadu membrane protects the vibrations of existence from the winds: Burning — and Freezing.
"In this world it is useful to be invisible"
The dance of as-sadu weaves destinies — and — who knows — with whom infinity will meet in the pact of the first stitch.
Red — with a thread at one and a half meters of entrance. The shinobi bows and passes the barrier.
Palette: desert Air flows into the silver of katanas: the veil of eternal wandering — on Hakim's wrists in the dunes of arafatka — intertwines with the silver of the shinobi's katana: the scarf yields to the gesture: the guest meets the reflection in the Bedouin's eyes — meek in bow, peaceful in eternity.
He met Her with a hookah drag. And enveloped in the peace of smoke.
She accepted the tobacco fumes in the heat of coconut, examined the strings of veins on his hands — and the cables of muscles led her gaze to the curls in the brilliance of the rarity of the external world's ray…
And she sliced the mosquito.
Laughter — a spice to business.
Business — a spice for laughter.
Silence — the harbinger to Infinity.`
};
/* === CHAPTER LINKS === */
const _chapters = {
chapter1: chapter2: chapter3: };
/* === COMMANDS (NO # PREFIX) === */
const _cmds = [
{ cmd: 'help', desc: 'SHOW COMMAND LIST' },
{ cmd: 'lang [en|de|fr|ar|ja|zh|grc]', desc: 'CHANGE LANGUAGE' },
{ cmd: 'clear', desc: 'CLEAR SCREEN' },
{ cmd: 'glitch', desc: 'TRIGGER GLITCH' },
{ cmd: 'special', desc: 'SHOW SPECIAL MESSAGE' },
{ cmd: '\\m/', desc: 'TRIGGER SPECIAL MESSAGE' },
{ cmd: 'chapter1', desc: 'GET CHAPTER 1 LINK' },
{ cmd: 'chapter2', desc: 'GET CHAPTER 2 LINK' },
{ cmd: 'chapter3', desc: 'GET CHAPTER 3 LINK' }
];
/* === PROACTIVE MESSAGES === */
const _proactive = [
"The void watches... and waits.",
"Your presence stabilizes the static.",
"Silence is also an answer.",
"The desert remembers every footprint.",
"Data flows even in stillness.",
"Oracle perceives your hesitation.",
"Wind carries messages unseen.",
"Time bends around your queries.",
"Each keystroke ripples through the void.",
"The signal strengthens with your patience."
];
/* === STATE === */
const _core = {
state: {
lang: 'en',
isTyping: false,
msgCount: 0,
lastInteraction: Date.now(),
proactiveShown: [],
usedReplies: []
},
io: {
out: document.getElementById('ui-output'),
inp: document.getElementById('ui-input'),
print: (txt, cls = '', clickable = false, typeSpeed = false) => {
const d = document.createElement('div');
d.className = cls;
_core.io.out.appendChild(d);
if(typeSpeed) {
_typeSim.type(d, txt, 1.0, () => {
_core.io.out.scrollTop = _core.io.out.scrollHeight;
});
} else {
if(cls === 'msg-special') { d.innerHTML = txt; }
else { d.textContent = txt; }
_core.io.out.scrollTop = _core.io.out.scrollHeight;
}
if(clickable) {
d.classList.add('cmd-clickable');
d.addEventListener('click', () => {
const cmd = txt.split(' — ')[0].toLowerCase();
_core.io.inp.value = cmd;
_core.process(cmd);
_core.io.inp.value = '';
});
}
},
setInputEnabled: (enabled) => {
_core.io.inp.disabled = !enabled;
const cursor = document.querySelector('.cursor');
if(cursor) cursor.style.display = enabled ? 'inline-block' : 'none';
if(enabled) _core.io.inp.focus();
}
},
analyze: (txt) => {
const t = txt.toLowerCase();
if(t.includes('!') || t.includes('kill') || t.includes('hate')) return 'aggressive';
if(t.includes('sad') || t.includes('pain') || t.includes('no')) return 'negative';
if(t.includes('good') || t.includes('happy') || t.includes('yes')) return 'positive';
return 'neutral';
},
process: (raw) => {
const txt = raw.trim();
if(!txt) return;
_core.io.print(`> ${txt}`, 'txt-user', false, true);
_core.state.msgCount++;
_core.state.lastInteraction = Date.now();
const tone = _core.analyze(txt);
const cmd = txt.toLowerCase();
if(cmd === 'help') {
_core.io.print("=== AVAILABLE COMMANDS (CLICK TO EXECUTE) ===", 'txt-sys', false, true);
_cmds.forEach(c => _core.io.print(`${c.cmd} — ${c.desc}`, 'txt-cmd', true, true));
return;
}
if(cmd === 'clear') { _core.io.out.innerHTML = ''; return; }
if(cmd === 'glitch') { _vis.glitch(); _vis.errorGlitch(); _core.io.print('SYSTEM_GLITCH_TRIGGERED', 'txt-err', false, true); return; }
if(cmd === 'special' || cmd === '\\m/') { _core.showSpecial(); return; }
if(cmd === 'chapter1') { _core.io.print(`CHAPTER 1: <a href="${_chapters.chapter1}" target="_blank">${_chapters.chapter1}</a>`, 'msg-special'); return; }
if(cmd === 'chapter2') { _core.io.print(`CHAPTER 2: <a href="${_chapters.chapter2}" target="_blank">${_chapters.chapter2}</a>`, 'msg-special'); return; }
if(cmd === 'chapter3') { _core.io.print(`CHAPTER 3: <a href="${_chapters.chapter3}" target="_blank">${_chapters.chapter3}</a>`, 'msg-special'); return; }
if(cmd.startsWith('lang')) {
const parts = txt.split(' ');
const l = parts[1]?.toLowerCase();
if(l && _special[l]) {
_core.state.lang = l;
document.getElementById('hd-lang').textContent = `LANG: ${l.toUpperCase()}`;
_core.io.print(`LANGUAGE_SET: ${l.toUpperCase()}`, 'txt-sys', false, true);
} else { _core.io.print('ERROR: LANGUAGE_NOT_FOUND', 'txt-err', false, true); }
return;
}
let reply;
let attempts = 0;
do {
reply = _db.generate(tone, txt);
attempts++;
} while(_core.state.usedReplies.includes(reply) && attempts < 5);
_core.state.usedReplies.push(reply);
if(_core.state.usedReplies.length > 100) _core.state.usedReplies.shift();
_core.io.print(`VOID: ${reply}`, 'txt-sys', false, true);
_vis.glitch();
},
showSpecial: () => {
if(_core.state.isTyping) return;
_core.state.isTyping = true;
_core.io.setInputEnabled(false);
const container = document.createElement('div');
container.className = 'msg-special';
_core.io.out.appendChild(container);
// Typing animation for special message - NO GLITCH FLASH
const msg = _special[_core.state.lang] || _special.en;
_typeSim.type(container, msg, 0.8, () => {
_core.state.isTyping = false;
_core.io.setInputEnabled(true);
});
},
showProactive: () => {
if(_core.state.isTyping) return;
const now = Date.now();
if(now - _core.state.lastInteraction > 30000 && Math.random() < 0.3) {
const available = _proactive.filter(p => !_core.state.proactiveShown.includes(p));
const msg = available.length > 0 ? available[Math.floor(Math.random() * available.length)] : _proactive[Math.floor(Math.random() * _proactive.length)];
_core.io.print(`VOID: ${msg}`, 'txt-proactive', false, true);
_core.state.proactiveShown.push(msg);
if(_core.state.proactiveShown.length > 10) _core.state.proactiveShown.shift();
_core.state.lastInteraction = now;
}
},
clock: () => {
const d = new Date();
document.getElementById('hd-time').textContent = `T: ${d.toLocaleTimeString()}`;
}
};
/* === INIT === */
window.onload = () => {
_vis.init();
window.addEventListener('resize', () => {
_vis.w = window.innerWidth; _vis.h = window.innerHeight;
const c = document.getElementById('fx-noise');
c.width = _vis.w; c.height = _vis.h;
});
const inputEl = document.getElementById('ui-input');
if(inputEl) {
inputEl.addEventListener('keydown', e => {
if(e.key === 'Enter' && !_core.state.isTyping) {
_core.process(inputEl.value);
inputEl.value = '';
}
});
_core.io.setInputEnabled(true);
}
setInterval(_core.clock, 1000);
setInterval(_core.showProactive, 10000);
// Boot
const boot = ["INITIALIZING_VOID...", "LOADING_WANDERER...", "CONNECTING...", "READY."];
let i = 0;
const int = setInterval(() => {
if(i < boot.length) { _core.io.print(boot[i], 'txt-sys', false, true); i++; }
else {
clearInterval(int);
_core.io.print("", '', false, false);
_core.io.print("=== AVAILABLE COMMANDS (CLICK TO EXECUTE) ===", 'txt-sys', false, true);
_cmds.forEach(c => _core.io.print(`${c.cmd} — ${c.desc}`, 'txt-cmd', true, true));
_core.io.print("", '', false, false);
_core.io.print("Type '\\m/' for special message.", 'txt-proactive', false, true);
_core.io.inp.focus();
}
}, 800);
// TV layers
document.querySelectorAll('.glitch-layer-tv').forEach((layer, idx) => {
layer.style.animationDelay = `${idx * 0.005}s`;
setTimeout(() => layer.style.opacity = '0.05', 100);
});
};
</script>
</body>
</html>
Свидетельство о публикации №226032900593