CYOA 2ch game

CYOA 2ch game
 avatar
unknown
html
2 days ago
71 kB
12
Indexable
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Межмировой Астральный Бур</title>
    <style>
        :root {
            --primary-color: #2c3e50;
            --secondary-color: #3498db;
            --accent-color: #e74c3c;
            --background-color: #ecf0f1;
            --text-color: #2c3e50;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background-color: var(--background-color);
            color: var(--text-color);
            line-height: 1.6;
        }

        .container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }

        #powers-section {
            width: 90%;
            max-width: 1800px;
            margin: 0 auto 2rem auto;
            padding: 2rem;
            background-color: white;
            border-radius: 10px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }

        #powers-section .options-grid {
            display: grid;
            grid-template-columns: repeat(6, 1fr);
            gap: 1rem;
        }

        #powers-section .option-card {
            min-width: 180px;
        }

        @media (max-width: 1800px) {
            #powers-section .options-grid {
                grid-template-columns: repeat(4, 1fr);
            }
        }

        @media (max-width: 1200px) {
            #powers-section {
                width: 95%;
            }
            #powers-section .options-grid {
                grid-template-columns: repeat(3, 1fr);
            }
        }

        @media (max-width: 900px) {
            #powers-section .options-grid {
                grid-template-columns: repeat(2, 1fr);
            }
        }

        @media (max-width: 600px) {
            #powers-section {
                width: 100%;
                padding: 1rem;
            }
            #powers-section .options-grid {
                grid-template-columns: 1fr;
            }
        }

        .header {
            text-align: center;
            padding: 2rem 0;
            background-color: var(--primary-color);
            color: white;
            margin-bottom: 2rem;
        }

        .points-display {
            position: fixed;
            top: 20px;
            left: 50%;
            transform: translateX(-50%);
            background-color: var(--secondary-color);
            color: white;
            padding: 10px 20px;
            border-radius: 5px;
            font-size: 1.2rem;
            font-weight: bold;
        }

        .section {
            background-color: white;
            border-radius: 10px;
            padding: 2rem;
            margin-bottom: 2rem;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }

        .section-title {
            color: var(--primary-color);
            margin-bottom: 1.5rem;
            font-size: 1.8rem;
        }

        .section-description {
            margin-bottom: 1.5rem;
            font-size: 1.1rem;
            color: var(--text-color);
            line-height: 1.5;
        }

        .quest-info {
            margin-bottom: 1.5rem;
            padding: 1rem;
            background-color: var(--background-color);
            border-radius: 8px;
            font-weight: bold;
            color: var(--primary-color);
        }

        .options-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
            gap: 1.5rem;
        }

        .option-card {
            background-color: var(--background-color);
            border-radius: 8px;
            padding: 1.5rem;
            cursor: pointer;
            transition: transform 0.2s, box-shadow 0.2s;
            text-align: center;
            display: flex;
            flex-direction: column;
            justify-content: center;
            min-height: 150px;
        }

        .option-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 5px 15px rgba(0,0,0,0.1);
        }

        .option-card.selected {
            background-color: var(--secondary-color);
            color: white;
        }

        .option-card.disabled {
            opacity: 0.5;
            cursor: not-allowed;
        }

        .option-card h3 {
            font-size: 1.3rem;
            margin-bottom: 0.5rem;
        }

        .option-card .points {
            font-weight: bold;
            margin-top: 0.5rem;
        }

        .option-card .description {
            font-size: 1.2rem;
            margin: 0.5rem 0;
            font-style: italic;
            color: #333;
            line-height: 1.4;
        }

        .navigation-buttons {
            display: flex;
            justify-content: space-between;
            margin-top: 2rem;
        }

        .btn {
            padding: 10px 20px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-size: 1rem;
            transition: background-color 0.2s;
        }

        .btn-primary {
            background-color: var(--secondary-color);
            color: white;
        }

        .btn-secondary {
            background-color: var(--accent-color);
            color: white;
        }

        .btn:disabled {
            opacity: 0.5;
            cursor: not-allowed;
        }

        .subsection-title {
            color: var(--secondary-color);
            margin: 1.5rem 0 1rem 0;
            font-size: 1.4rem;
            border-bottom: 1px solid var(--background-color);
            padding-bottom: 0.5rem;
        }
        
        #appearance-grid {
            margin-top: 1.5rem;
            margin-bottom: 1rem;
        }
        
        #gender-grid {
            margin-bottom: 1.5rem;
        }

        #body-section {
            width: 90%;
            max-width: 1800px;
            margin: 0 auto 2rem auto;
        }

        #body-section .options-grid {
            display: grid;
            grid-template-columns: repeat(5, 1fr);
            gap: 1rem;
        }

        #body-section .option-card {
            min-width: 180px;
        }

        @media (max-width: 1200px) {
            #body-section .options-grid {
                grid-template-columns: repeat(3, 1fr);
            }
        }

        @media (max-width: 768px) {
            #body-section .options-grid {
                grid-template-columns: repeat(2, 1fr);
            }
        }

        @media (max-width: 480px) {
            #body-section .options-grid {
                grid-template-columns: 1fr;
            }
        }

        #perks-section {
            width: 90%;
            max-width: 1800px;
            margin: 0 auto 2rem auto;
            padding: 2rem;
            background-color: white;
            border-radius: 10px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }

        #perks-section .options-grid {
            display: grid;
            grid-template-columns: repeat(6, 1fr);
            gap: 1rem;
        }

        #perks-section .option-card {
            min-width: 180px;
        }

        @media (max-width: 1800px) {
            #perks-section .options-grid {
                grid-template-columns: repeat(4, 1fr);
            }
        }

        @media (max-width: 1200px) {
            #perks-section .options-grid {
                grid-template-columns: repeat(3, 1fr);
            }
        }

        @media (max-width: 900px) {
            #perks-section .options-grid {
                grid-template-columns: repeat(2, 1fr);
            }
        }

        @media (max-width: 600px) {
            #perks-section {
                width: 100%;
                padding: 1rem;
            }
            #perks-section .options-grid {
                grid-template-columns: 1fr;
            }
        }

        #drawbacks-section {
            width: 90%;
            max-width: 1800px;
            margin: 0 auto 2rem auto;
            padding: 2rem;
            background-color: white;
            border-radius: 10px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }

        #drawbacks-section .options-grid {
            display: grid;
            grid-template-columns: repeat(6, 1fr);
            gap: 1rem;
        }

        #drawbacks-section .option-card {
            min-width: 180px;
        }

        @media (max-width: 1800px) {
            #drawbacks-section .options-grid {
                grid-template-columns: repeat(4, 1fr);
            }
        }

        @media (max-width: 1200px) {
            #drawbacks-section .options-grid {
                grid-template-columns: repeat(3, 1fr);
            }
        }

        @media (max-width: 900px) {
            #drawbacks-section .options-grid {
                grid-template-columns: repeat(2, 1fr);
            }
        }

        @media (max-width: 600px) {
            #drawbacks-section {
                width: 100%;
                padding: 1rem;
            }
            #drawbacks-section .options-grid {
                grid-template-columns: 1fr;
            }
        }
    </style>
</head>
<body>
    <div class="header">
        <h1>Межмировой Астральный Бур CYOA</h1>
    </div>

    <div class="points-display">
        Очки: <span id="total-points">0</span>
    </div>

    <div id="powers-section" class="section" style="display: none;">
        <h2 class="section-title">Выберите Ваши Силы</h2>
        <div class="options-grid" id="powers-grid"></div>
    </div>

    <div id="perks-section" class="section" style="display: none;">
        <h2 class="section-title">Выберите Ваши Перки</h2>
        <div class="options-grid" id="perks-grid"></div>
    </div>

    <div id="drawbacks-section" class="section" style="display: none;">
        <h2 class="section-title">Выберите Ваши Недостатки</h2>
        <div class="options-grid" id="drawbacks-grid"></div>
    </div>

    <div class="container">
        <div id="worlds-section" class="section">
            <h2 class="section-title">Выберите Ваш Мир</h2>
            <div class="options-grid" id="worlds-grid"></div>
        </div>

        <div id="body-section" class="section" style="display: none;">
            <h2 class="section-title">Выберите Ваше Тело</h2>
            
            <h3 class="subsection-title">Пол</h3>
            <div class="options-grid" id="gender-grid"></div>
            
            <h3 class="subsection-title">Внешность</h3>
            <div class="options-grid" id="appearance-grid"></div>
            
            <h3 class="subsection-title">Рост</h3>
            <div class="options-grid" id="height-grid"></div>
            
            <h3 class="subsection-title" id="penis-size-title" style="display: none;">Размер Пениса</h3>
            <div class="options-grid" id="penis-size-grid" style="display: none;"></div>
            
            <h3 class="subsection-title" id="breast-size-title" style="display: none;">Размер Груди</h3>
            <div class="options-grid" id="breast-size-grid" style="display: none;"></div>
        </div>

        <div class="navigation-buttons">
            <button id="prev-btn" class="btn btn-secondary" disabled>Назад</button>
            <button id="next-btn" class="btn btn-primary">Далее</button>
        </div>
    </div>

    <script>
        // Game state
        let currentSection = 0;
        let totalPoints = 0;
        let selectedWorlds = [];
        let selectedGender = null;
        let selectedAppearance = null;
        let selectedPenisSize = null;
        let selectedBreastSize = null;
        let selectedHeight = null;
        let selectedPowers = [];
        let selectedPerks = [];
        let selectedDrawbacks = [];

        // Game data
        const gameData = {
            worlds: [
                { name: 'Warhammer 40k', points: 30 },
                { name: 'Киновселенная Marvel', points: 22 },
                { name: 'Warhammer Fantasy', points: 22 },
                { name: 'Фейрун (Dungeons and Dragons)', points: 22 },
                { name: 'Наруто', points: 22 },
                { name: 'Warcraft', points: 22 },
                { name: 'The Elder Scrolls', points: 18 },
                { name: 'Ведьмак', points: 14 },
                { name: 'Блич', points: 16 },
                { name: 'DXD High School', points: 12 },
                { name: 'Fallout', points: 14 },
                { name: 'Человек-Бензопила', points: 12 },
                { name: 'Аватар', points: 14 },
                { name: 'Коносуба', points: 10 },
                { name: 'Гарри Поттер', points: 12 },
                { name: 'Песнь Льда и Огня', points: 10 },
                { name: 'Звездные Войны', points: 14 },
                { name: 'Киберпанк 2077', points: 12 },
                { name: 'Средиземье', points: 12 },
                { name: 'Youjo Senki', points: 10 },
                { name: 'Mushoku Tensei', points: 14 },
                { name: 'One Piece', points: 14 },
                { name: 'JoJo', points: 10 },
                { name: 'Gantz', points: 10 },
                { name: 'Star Trek', points: 6 },
                { name: 'Мир Тьмы (Vampire: The Masquerade)', points: 12 },
                { name: 'Бесконечное лето', points: 4 },
                { name: 'MiSide', points: 4 }
            ],
            genders: [
                { name: 'Мужик', points: -1 },
                { name: 'Тянока', points: 1 },
                { name: 'Футанари', points: 2 }
            ],
            appearances: [
                { name: 'Урод/уродка', points: 3 },
                { name: 'Невзрачный/невзрачная', points: 1 },
                { name: 'Средне-кун/тян', points: 0 },
                { name: 'Красавчик/красавица', points: -1 },
                { name: 'Гига-чад/богиня', points: -3 }
            ],
            penisSizes: [
                { name: 'Микро 3-5 см', points: 4 },
                { name: 'Маленький 5-12см', points: 2 },
                { name: 'Нормальный 13-17 см', points: 0 },
                { name: 'Большой 18-22 см', points: -2 },
                { name: 'Огромный 23-30 см', points: -4 }
            ],
            breastSizes: [
                { name: '1-й размер', points: 3 },
                { name: '2-й размер', points: 1 },
                { name: '3-й размер', points: 0 },
                { name: '4-й размер', points: -1 },
                { name: '5-й размер', points: -3 }
            ],
            heights: [
                { name: 'Очень низкий (до 150 см)', points: 2 },
                { name: 'Низкий (150-169 см)', points: 1 },
                { name: 'Средний (170-179 см)', points: 0 },
                { name: 'Высокий (180-200 см)', points: -1 },
                { name: 'Очень высокий (200+ см)', points: -2 }
            ],
            powers: [
                { name: 'Регенерация I', points: -2, description: 'Раны заживают за сутки, новая конечность за неделю. Вирусы и бактерии более не страшны.' },
                { name: 'Регенерация II', points: -3, requires: 'Регенерация I', description: 'Раны заживают за минуты, новая конечность за часы' },
                { name: 'Регенерация III', points: -4, requires: 'Регенерация II', description: 'Возможно восстановление после смертельных ран, включая мозг и сердце за секунды, новая конечность вырастает за несколько минут' },
                { name: 'Улучшенная физиология I', points: -2, description: 'Сила, выносливость и рефлексы на уровне пикового человека. Ты способен поднять 500 кг, бежать со скоростью 30 км/ч и прыгать на 3 метра в высоту.' },
                { name: 'Улучшенная физиология II', points: -3, requires: 'Улучшенная физиология I', description: 'Сверхчеловеческие сила и выносливость, позволяющие поднимать до трех тонн, бежать со скоростью 80 км/ч и прыгать на 7 метров в высоту.' },
                { name: 'Улучшенная физиология III', points: -4, requires: 'Улучшенная физиология II', description: 'Титаническая сила и выносливость, позволяющие сравниться с сильнейшими существами. Десятки тонн, скорость бега 160 км/ч, прыжки на 10 и более метров в высоту.' },
                { name: 'Сопротивление магии', points: -4, description: 'Высокий уровень сопротивления любой магии и магическим эффектам либо их аналогам (варп, чакра, реацу)' },
                { name: 'Долголетие I', points: -3, description: 'Ты гарантированно проживешь 200 лет, старея в замедленном темпе. В 100 лет ты будешь выглядеть как 40-летний.' },
                { name: 'Долголетие II', points: -3, requires: 'Долголетие I', description: 'Ты гарантированно проживешь 1000 лет. В 700 лет, ты будешь выглядеть как 40-летний.' },
                { name: 'Долголетие III', points: -3, requires: 'Долголетие II', description: 'Ты никогда не умрешь от старости. Будешь вечно молодым, не старше 25 лет на вид.' },
                { name: 'Местная система силы I', points: -3, description: 'Базовый доступ к магической системе выбранного мира, средний уровень например как у выпускника хогвартса, среднего псайкера или чунина из Наруто' },
                { name: 'Местная система силы II', points: -4, requires: 'Местная система силы I', description: 'Высокий уровень доступа к магической системе выбранного мира, например как у Волдеморта, Какаши или мага 20 уровня из D&D ' },
                { name: 'Местная система силы III', points: -5, requires: 'Местная система силы II', description: 'Высочайший уровень владения магией для смертных, изначально, ты будешь равен по силам, а потенциально и превзойдешь Мерлина, Бога-императора Человечества, Мудреца Шести Путей или другого топового смертного человека' },
                { name: 'Защита разума', points: -3, description: 'Иммунитет к ментальным воздействиям и чтению мыслей, включая гендзюцу, воздействие варпа' },
                { name: 'Неподвластная реальности душа', points: -3, description: 'Душа неуязвима для любых воздействий и манипуляций. Авада-кевада не подействует, Пейн не сможет вытянуть из тебя душу риннеганом' },
                { name: 'Быстрая регенерация энергии', points: -5, description: 'Твоя мана/чакра/реяцу восстанавливается в три раза быстрее ' },
                { name: 'Система геймера', points: -4, requires: ['Инвентарь', 'Защита разума'], description: 'Взаимодействие с миром как в манхве Геймер с интерфейсом, статистикой и уровнями. Аукциона, ачивок, данжей нет.' },
                { name: 'Телепортация', points: -4, description: 'Мгновенное перемещение в любую точку вселенной силой мысли.' },
                { name: 'Порталы', points: -4, requires: 'Телепортация', description: 'Создание стабильных порталов для перемещения себя и других.' },
                { name: 'Старшая кровь', points: -4, requires: 'Порталы', description: 'Ты обладаешь силой превосходящей силу Цири, ты можешь открывать порталы в другие миры и времена. К тому же, твои магические способности становятся сильнее на уровень.' },
                { name: 'Интеллект I', points: -2, description: 'Ты на уровне Эйнштейна, Аристотеля и лучших умов человечества.' },
                { name: 'Интеллект II', points: -2, requires: 'Интеллект I', description: 'Сверхчеловеческий интеллект, твой IQ выше 300' },
                { name: 'Интеллект III', points: -2, requires: 'Интеллект II', description: 'Ты по сути живой компьютер, обладаешь способностью ментата, можешь обрабатывать огромные объемы информации за секунды.' },
                { name: 'Полет', points: -3, description: 'Ты умеешь летать как супермен на дозвуковых скоростях.' }
            ],
            perks: [
                { name: 'Полиглот', points: -1, description: 'Быстрое освоение любых языков.' },
                { name: 'Феромоны', points: -1, description: 'Твой запах привлекает и возбуждает противоположный пол.' },
                { name: 'Харизматичный', points: -1, description: 'Ты харизматичен как суперзвезда.' },
                { name: 'Мастер холодного оружия', points: -1, description: 'Врожденный талант к владению холодным оружием.' },
                { name: 'Мастер огнестрельного оружия', points: -1, description: 'Превосходная точность и навыки стрельбы.' },
                { name: 'Мастер алхимик', points: -2, description: 'Талант к созданию зелий и эликсиров. Если мир не магический, то ты обладаешь знаниями прикладной химии.' },
                { name: 'Мастер ремесленник', points: -2, description: 'Искусное создание предметов и инструментов на технологическом уровне твоего мира' },
                { name: 'Мастер стратег', points: -2, description: 'Тактический гений, способность планировать на несколько шагов вперед.' },
                { name: 'Как вчера', points: -2, description: 'У тебя идеальная фотографическая память, ты никогда ничего не забываешь' },
                { name: 'Мастер рукопашного боя', points: -1, description: 'Природный талант к боевым искусствам и рукопашному бою.' },
                { name: 'Мастер маг', points: -3, description: 'Ты получаешь знания  о местной магии на профессорском уровне, но только знания, сами способности не включены в этот перк. ' },
                { name: 'Быстрый ученик', points: -3, description: 'Способность осваивать новые навыки в несколько раз быстрее обычного. Ты можешь освоить программу бакалавра топового вуза за 2-3 месяца.' },
                { name: 'Местный', points: -1, description: 'Во всех базах правительства есть информация о тебе, а так же у тебя есть набор документов для легального проживания в мире и стране.' },
                { name: 'Мастер Камасутры', points: -1, description: 'Исключительное мастерство в искусстве любви. Ты подсознательно знаешь как удолетворить тяночку или кунчика.' },
                { name: 'Бессонный', points: -2, description: 'Сон больше тебе не нужен.' },
                { name: 'Мастер учитель', points: -1, description: 'Умение эффективно передавать знания и навыки другим.' },
                { name: 'Креативный', points: -1, description: 'Выбери творческую деятельность - музыка, рисование, скульптура, пение, писательство, программирование и ты будешь на уровне суперзвезд этой отрасли. Ты будешь творцом уровня Фреди Меркьюри, Микелянджело, Стивен Кинг.' },
                { name: 'Атлет', points: -1, description: 'Твое тело становится на уровне хорошего спортсмена. Ты можешь пробежать марафон, сделать жим лежа в 250 кг и так далее.' },
                { name: 'ТНУС', points: -1, description: 'Тебе не нужно срать и ссать.' },
                { name: 'Гаремник', points: -1, description: 'Все твои сексуальные партнерши или партнеры не против того, чтобы ты завел отношения с другими. Но одноразовые связи все равно считаются изменой.' },
                { name: 'Открытые отношения', points: -1, description: 'Твои партнеры или партнерши не против одноразовых половых связей, пока уверенны в том, что ты их единственный постоянный партнер. Но романтические связи заставят их чувствовать себя преданными. Если взять с перком гаремник, то это ограничение снимается, трахайся сколько влезет.' },
                { name: 'Гига-чад', points: -1, description: 'Ты становишься образцом мужественности и уверенности в себе. Ты ничего не боишься и тебе все по плечу.' },
                { name: 'Супер-ебарь/супер-шлюха', points: -1, description: 'У тебя бесконечная сексуальная выносливость. У тебя иммунитет к ЗПП. Ты готов(а) ебаться сутками без перерыва' },
                { name: 'Стартовый капитал I', points: -1, description: 'У тебя есть сумма местных денег в эквиваленте $10,000 по ППС.' },
                { name: 'Стартовый капитал II', points: -1, requires: 'Стартовый капитал I', description: 'У тебя есть сумма местных денег в эквиваленте $150,000 по ППС.' },
                { name: 'Стартовый капитал III', points: -1, requires: 'Стартовый капитал II', description: 'У тебя есть сумма местных денег в эквиваленте $1,000,000 по ППС.' },
                { name: 'Ловкий', points: -2, description: 'Ты становишься амбидекстером, твоя скорость реакции, координация тела выходят на уровень слегка превыщающий пиковый для человека.' },
                { name: 'Стартовый Набор', points: -1, description: 'Дает вам набор характерный для целевого мира - местную одежду, броню, набор для выживания, какое-то оружие. Если это современный мир, то набор будет состоять из простой местной одежды, бронежилета и пистолета glock с запасной обоймой и рюкзаком где будут сухпайки на трое суток, палатка, компас, фляга, спальный мешок, аптечка.' },
            ],
            drawbacks: [
                { name: 'Утроенное либидо', points: 1, description: 'Твое либидо в три раза выше обычного, практически нимфомания, но ты все таки можешь получать удовольствие от секса.' },
                { name: 'Высокий метаболизм', points: 1, description: 'Требуется в три раза больше пищи, чем обычно. Придется сьедать по 10-20 бигмаков в день' },
                { name: 'Чухан', points: 2, description: 'От вас исходит стойкий неприятный запах, отталкивающий окружающих.' },
                { name: 'Жиробас', points: 3, description: 'Ты страдаешь ожирением. Похудеть не получится.' },
                { name: 'Плохое зрение', points: 3, description: 'Сильная близорукость или дальнозоркость без возможности коррекции. Придется носить очки или линзы, или вставить импланты.' },
                { name: 'Сабмиссив', points: 2, description: 'Ты подсознательно хочешь подчиняться в сексе и в отношениях. Ты не хочешь быть лидером. Ты будешь хотеть быть традиционной женой если ты девушка, или подкаблучником если ты мужик.' },
                { name: 'Мазохист', points: 1, description: 'Ты кайфуешь от боли и унижения, как конченный мазохист. У тебя появляются фантазии о том, чтобы быть изнасилованной(ым)' },
                { name: 'Вслепую', points: 3, description: 'Ты забываешь всю информацию о мире, куда попадешь.' },
                { name: 'Плодовитый', points: 2, description: '100% вероятность зачатия при сексуальном контакте, контрацепция не работает. Придется заходить через черный ход.' },
                { name: 'Супер плодовитый', points: 2, requires: 'Плодовитый', description: 'Ты или твои партнерши всегда рожают минимум двойню, а то и три-четыре ребенка' },
                { name: 'В розыске', points: 4, description: 'Вы разыскиваетесь властями за тяжкое преступление, которого не совершали - убийство, ересь, крупная кража.' },
                { name: 'Рабство', points: 4, description: 'Вы начинаете как раб/рабыня, со всеми вытекающими последствиями.' },
                { name: 'Немой', points: 5, description: 'Полная неспособность говорить или издавать звуки. Исправить не получиться.' },
                { name: 'Невезучий', points: 5, description: 'Ты ходячая катастрофа, тебя постоянно преследуют неудачи и провалы, как и всех окружающих включая врагов.' },
                { name: 'Амнезия', points: 5, description: 'Полная потеря памяти о прошлой жизни, мире и личности, но у тебя останутся знания о мире, а так же общие знания, например что надо мыть руки перед едой.' },
                { name: 'Кукич', points: 2, description: 'Твоя ЕОТ или ЕОК будут тебе изменять, и что интересно, тебе это будет нравится. Если у тебя гарем, то это условие распространяется на всех его членов. Плохо влияет на репутацию.' },
                { name: 'Омежка', points: 3, incompatible: ['Харизматичный', 'Гига-чад'], description: 'Думал в сказку попал? Ты типичный битард омежка, как и в жизни. Неуверенный в себе и тревожный.' },
                { name: 'Причина тряски?', points: 2, description: 'Ты трус, и этим все сказано.' },
                { name: 'Титан Одиночества', points: 4, description: 'Ты никогда никого не полюбишь, и тебя никто ниогда не полюбит. Даже если ты будешь платить за это, ты все равно будешь чувствовать фальш. Ты форевер алоун.' },
                { name: 'Дискриминация', points: 3, description: 'Ты принадлежишь к дискриминируемой группе. Например ты мутант/нелюдь в мире Warhammer или грязнокровка в мире Поттера, представитель племени изгоев в Скайриме. Так или иначе всюду будешь ты сталкиваться с предрассудками и дискриминацией.' },
                { name: 'Без вкуса и запаха', points: 3, description: 'Ты как будто заболел ковидом, у тебя пропало чувство вкуса и обоняние и вернуть фих никак нельзя.' },
                { name: 'Приступы Гнева I', points: 2, description: 'Ты раздражителен. Раз в неделю у тебя случается приступ неконтролируемого гнева, во время которого ты можешь наговорить грубостей или оскорбить окружающих.' },
                { name: 'Приступы Гнева II', points: 2, requires: 'Приступы Гнева I', description: 'Твоя ярость усиливается. Приступы случаются два-три раза в неделю, и во время них ты можешь сломать вещи или ударить кого-то.' },
                { name: 'Приступы Гнева III', points: 3, requires: 'Приступы Гнева II', description: 'Ты берсерк. Два-три раза в неделю у тебя бывают моменты, когда ты впадаешь в состояние бешеной ярости и можешь серьезно навредить окружающим. В таком состоянии ты не различаешь друзей и врагов.' },
                { name: 'Гендерсвап', points: 3, description: 'Твой пол меняется на противоположный и ничто во вселенной не сможет изменить его, ни боги ни даже магия.' },
                { name: 'Аддикция', points: 3, description: 'У тебя появляется сильная вредная привычка, например ты куришь по две пачки в день, алкоголик или наркоман. Вылечиться не получится.' },
                { name: 'Беды с Башкой', points: 5, description: 'У тебя появляется психическое расстройство на выбор. Полностью вылечиться не получится, лекарства лишь облегчают состояние.' },
                { name: 'Комплекс Героя', points: 4, description: 'У тебя появляется сильное чувство справедливости, эмпатии и сострадания. Ты не можешь бросить никого в беде, даже если ситуация безнадежная.' },
                { name: 'Бесплодие', points: 3, incompatible: ['Плодовитый', 'Супер плодовитый'], description: 'Ты не можешь иметь детей, и ни что во вселенной не исправит этого.' },
                { name: 'Нофап', points: 2, description: 'Вы не можете удолетворить сам себя.' },
                { name: 'Маньяк', points: 5, description: 'ВЫ ЛЮБИТЕ УБИВАТЬ, УБИВАТЬ НАХУЙ, БЛЯЯЯДЬ, УБИВАААТАЬ, ОН ЛЮБИТ УБИВАТЬ!!! КРОВЬ КИШКИ РАСПИДОРАСИЛО!' },
                { name: 'Правдоруб', points: 3, description: 'Вы не можете лгать.' },
                { name: 'Плохая Репутация', points: 2, description: 'Гарантируется событие которое оставит несмываемое пятно на вашей репутации. Как например Геральт стал мясником из Блавикена.' },
                { name: 'Дурак/Дура', points: 2, description: 'Ты глупый(ая), твой IQ снижается на 20 пунктов, но не ниже 88' },
                { name: 'Слабоумие', points: 4, requires: 'Дурак/Дура', description: 'Ты почти дебилен, твой IQ не выше 75' },
                { name: 'Какой еще тред?', points: 2, description: 'Ты забываешь о том, что играл в какую-то игру на дваче, и какие выборы ты сделал.' }
            ]
        };

        // Update points display
        function updatePoints() {
            document.getElementById('total-points').textContent = totalPoints;
        }

        // Create option cards
        function createOptionCard(option, section) {
            const card = document.createElement('div');
            card.className = 'option-card';
            
            let cardContent = '';
            
            // Для сил, перков и недостатков добавляем описания
            if (section === 'powers' || section === 'perks' || section === 'drawbacks') {
                let description = option.description || "";
                
                // Add requirement info if applicable
                if (option.requires) {
                    if (Array.isArray(option.requires)) {
                        description += ` (Требуется: ${option.requires.join(', ')})`;
                    } else {
                        description += ` (Требуется: ${option.requires})`;
                    }
                }
                
                // Add incompatibility info if applicable
                if (option.incompatible) {
                    description += ` (Несовместимо с: ${Array.isArray(option.incompatible) ? option.incompatible.join(', ') : option.incompatible})`;
                }
                
                cardContent = `
                    <h3>${option.name}</h3>
                    <div class="description">${description}</div>
                    <div class="points">${option.points > 0 ? '+' : ''}${option.points} очков</div>
                `;
            } else {
                cardContent = `
                    <h3>${option.name}</h3>
                    <div class="points">${option.points > 0 ? '+' : ''}${option.points} очков</div>
                `;
            }
            
            card.innerHTML = cardContent;

            card.addEventListener('click', () => {
                if (section === 'worlds') {
                    handleWorldSelection(option);
                } else if (section === 'gender') {
                    handleGenderSelection(option);
                } else if (section === 'appearance') {
                    handleAppearanceSelection(option);
                } else if (section === 'height') {
                    handleHeightSelection(option);
                } else if (section === 'penisSize') {
                    handlePenisSizeSelection(option);
                } else if (section === 'breastSize') {
                    handleBreastSizeSelection(option);
                } else if (section === 'powers') {
                    handlePowerSelection(option);
                } else if (section === 'perks') {
                    handlePerkSelection(option);
                } else if (section === 'drawbacks') {
                    handleDrawbackSelection(option);
                }
            });

            return card;
        }
        
        // Helper function to get colors for sections
        function getColorForSection(section) {
            switch (section) {
                case 'worlds':
                    return '#2c3e50';
                case 'gender':
                    return '#3498db';
                case 'appearance':
                    return '#f1c40f';
                case 'penisSize':
                    return '#95a5a6';
                case 'breastSize':
                    return '#e74c3c';
                case 'powers':
                    return '#2ecc71';
                case 'perks':
                    return '#9b59b6';
                case 'drawbacks':
                    return '#e67e22';
                case 'quests':
                    return '#9b59b6';
                default:
                    return '#bdc3c7';
            }
        }

        // Handle selections
        function handleWorldSelection(option) {
            // If there's already a selected world, deselect it
            if (selectedWorlds.length > 0) {
                const previousWorld = selectedWorlds[0];
                totalPoints -= previousWorld.points;
                selectedWorlds = [];
            }
            
            // Select the new world
            selectedWorlds.push(option);
            totalPoints += option.points;
            
            updatePoints();
            updateWorldsGrid();
        }

        function handleGenderSelection(option) {
            if (selectedGender) {
                totalPoints -= selectedGender.points;
            }
            selectedGender = option;
            totalPoints += option.points;
            updatePoints();
            updateGenderGrid();
            
            // Show/hide penis size and breast size sections based on gender
            const penisSizeTitle = document.getElementById('penis-size-title');
            const penisSizeGrid = document.getElementById('penis-size-grid');
            const breastSizeTitle = document.getElementById('breast-size-title');
            const breastSizeGrid = document.getElementById('breast-size-grid');
            
            // Reset selections when gender changes
            if (selectedPenisSize) {
                totalPoints -= selectedPenisSize.points;
                selectedPenisSize = null;
            }
            
            if (selectedBreastSize) {
                totalPoints -= selectedBreastSize.points;
                selectedBreastSize = null;
            }
            
            // Show/hide based on gender
            if (option.name === 'Мужик' || option.name === 'Футанари') {
                penisSizeTitle.style.display = 'block';
                penisSizeGrid.style.display = 'grid';
                updatePenisSizeGrid();
            } else {
                penisSizeTitle.style.display = 'none';
                penisSizeGrid.style.display = 'none';
            }
            
            if (option.name === 'Тянока' || option.name === 'Футанари') {
                breastSizeTitle.style.display = 'block';
                breastSizeGrid.style.display = 'grid';
                updateBreastSizeGrid();
            } else {
                breastSizeTitle.style.display = 'none';
                breastSizeGrid.style.display = 'none';
            }
            
            updatePoints();
        }

        function handleAppearanceSelection(option) {
            if (selectedAppearance) {
                totalPoints -= selectedAppearance.points;
            }
            selectedAppearance = option;
            totalPoints += option.points;
            updatePoints();
            updateAppearanceGrid();
        }
        
        function handleHeightSelection(option) {
            if (selectedHeight) {
                totalPoints -= selectedHeight.points;
            }
            selectedHeight = option;
            totalPoints += option.points;
            updatePoints();
            updateHeightGrid();
        }
        
        function handlePenisSizeSelection(option) {
            if (selectedPenisSize) {
                totalPoints -= selectedPenisSize.points;
            }
            selectedPenisSize = option;
            totalPoints += option.points;
            updatePoints();
            updatePenisSizeGrid();
        }
        
        function handleBreastSizeSelection(option) {
            if (selectedBreastSize) {
                totalPoints -= selectedBreastSize.points;
            }
            selectedBreastSize = option;
            totalPoints += option.points;
            updatePoints();
            updateBreastSizeGrid();
        }

        function handlePowerSelection(option) {
            const index = selectedPowers.findIndex(p => p.name === option.name);
            if (index === -1) {
                if (canSelectPower(option)) {
                    selectedPowers.push(option);
                    totalPoints += option.points;
                    updatePoints();
                    updatePowersGrid();
                }
            } else {
                selectedPowers.splice(index, 1);
                totalPoints -= option.points;
                updatePoints();
                updatePowersGrid();
            }
        }

        function handlePerkSelection(option) {
            const index = selectedPerks.findIndex(p => p.name === option.name);
            if (index === -1) {
                // Проверка требований перед выбором
                if (canSelectPerk(option)) {
                    selectedPerks.push(option);
                    totalPoints += option.points;
                    updatePoints();
                    updatePerksGrid();
                }
            } else {
                // Проверка, не является ли этот перк требованием для других выбранных перков
                const isRequired = selectedPerks.some(p => {
                    if (typeof p.requires === 'string') {
                        return p.requires === option.name;
                    } else if (Array.isArray(p.requires)) {
                        return p.requires.includes(option.name);
                    }
                    return false;
                });
                
                if (isRequired) {
                    return; // Нельзя отменить выбор, если перк требуется для других
                }
                
                selectedPerks.splice(index, 1);
                totalPoints -= option.points;
                updatePoints();
                updatePerksGrid();
            }
        }

        // Проверка, можно ли выбрать перк
        function canSelectPerk(perk) {
            if (!perk.requires) return true;
            
            // Обработка массива требований (несколько предварительных условий)
            if (Array.isArray(perk.requires)) {
                return perk.requires.every(req => 
                    selectedPerks.some(p => p.name === req)
                );
            }
            
            // Обработка одного требования
            return selectedPerks.some(p => p.name === perk.requires);
        }

        function handleDrawbackSelection(option) {
            const index = selectedDrawbacks.findIndex(d => d.name === option.name);
            if (index === -1) {
                // Check if this drawback has requirements that are met
                if (option.requires && !selectedDrawbacks.some(d => d.name === option.requires)) {
                    return; // Can't select a drawback if its requirement isn't met
                }
                
                // Check if this drawback is incompatible with any selected powers
                if (option.incompatible) {
                    const hasIncompatiblePower = option.incompatible.some(incompatiblePower => 
                        selectedPowers.some(p => p.name === incompatiblePower)
                    );
                    
                    if (hasIncompatiblePower) {
                        return; // Can't select if there's an incompatible power
                    }
                }
                
                selectedDrawbacks.push(option);
                totalPoints += option.points;
                updatePoints();
                updateDrawbacksGrid();
            } else {
                // Check if any other selected drawback requires this one
                const isRequired = selectedDrawbacks.some(d => d.requires === option.name);
                if (isRequired) {
                    return; // Can't deselect if another drawback requires it
                }
                
                selectedDrawbacks.splice(index, 1);
                totalPoints -= option.points;
                updatePoints();
                updateDrawbacksGrid();
            }
        }

        // Check if a power can be selected
        function canSelectPower(power) {
            if (!power.requires) return true;
            
            // Handle array of requirements (multiple prerequisites)
            if (Array.isArray(power.requires)) {
                return power.requires.every(req => 
                    selectedPowers.some(p => p.name === req)
                );
            }
            
            // Handle single requirement
            return selectedPowers.some(p => p.name === power.requires);
        }

        // Update grids
        function updateWorldsGrid() {
            const grid = document.getElementById('worlds-grid');
            grid.innerHTML = '';
            
            // Сортировка миров по поинтам (от большего к меньшему)
            const sortedWorlds = [...gameData.worlds].sort((a, b) => b.points - a.points);
            
            sortedWorlds.forEach(world => {
                const card = createOptionCard(world, 'worlds');
                card.style.borderLeft = '4px solid var(--primary-color)';
                if (selectedWorlds.some(w => w.name === world.name)) {
                    card.classList.add('selected');
                }
                grid.appendChild(card);
            });
        }

        function updateGenderGrid() {
            const grid = document.getElementById('gender-grid');
            grid.innerHTML = '';
            gameData.genders.forEach((gender, index) => {
                const card = createOptionCard(gender, 'gender');
                const colors = ['#3498db', '#e74c3c', '#9b59b6'];
                card.style.borderLeft = `4px solid ${colors[index]}`;
                if (selectedGender && selectedGender.name === gender.name) {
                    card.classList.add('selected');
                }
                grid.appendChild(card);
            });
        }

        function updateAppearanceGrid() {
            const grid = document.getElementById('appearance-grid');
            grid.innerHTML = '';
            gameData.appearances.forEach((appearance, index) => {
                const card = createOptionCard(appearance, 'appearance');
                const colors = ['#95a5a6', '#bdc3c7', '#d5dbdb', '#f1c40f', '#f39c12'];
                card.style.borderLeft = `4px solid ${colors[index]}`;
                if (selectedAppearance && selectedAppearance.name === appearance.name) {
                    card.classList.add('selected');
                }
                grid.appendChild(card);
            });
        }
        
        function updateHeightGrid() {
            const grid = document.getElementById('height-grid');
            grid.innerHTML = '';
            gameData.heights.forEach((height, index) => {
                const card = createOptionCard(height, 'height');
                const colors = ['#95a5a6', '#bdc3c7', '#d5dbdb', '#f1c40f', '#f39c12'];
                card.style.borderLeft = `4px solid ${colors[index]}`;
                if (selectedHeight && selectedHeight.name === height.name) {
                    card.classList.add('selected');
                }
                grid.appendChild(card);
            });
        }
        
        function updatePenisSizeGrid() {
            const grid = document.getElementById('penis-size-grid');
            grid.innerHTML = '';
            gameData.penisSizes.forEach((penisSize, index) => {
                const card = createOptionCard(penisSize, 'penisSize');
                const colors = ['#95a5a6', '#bdc3c7', '#d5dbdb', '#f1c40f', '#f39c12'];
                card.style.borderLeft = `4px solid ${colors[index]}`;
                if (selectedPenisSize && selectedPenisSize.name === penisSize.name) {
                    card.classList.add('selected');
                }
                grid.appendChild(card);
            });
        }
        
        function updateBreastSizeGrid() {
            const grid = document.getElementById('breast-size-grid');
            grid.innerHTML = '';
            gameData.breastSizes.forEach((breastSize, index) => {
                const card = createOptionCard(breastSize, 'breastSize');
                const colors = ['#95a5a6', '#bdc3c7', '#d5dbdb', '#f1c40f', '#f39c12'];
                card.style.borderLeft = `4px solid ${colors[index]}`;
                if (selectedBreastSize && selectedBreastSize.name === breastSize.name) {
                    card.classList.add('selected');
                }
                grid.appendChild(card);
            });
        }

        function updatePowersGrid() {
            const grid = document.getElementById('powers-grid');
            grid.innerHTML = '';
            gameData.powers.forEach(power => {
                const card = createOptionCard(power, 'powers');
                // Color coding based on power type
                if (power.name.includes('Регенерация')) {
                    card.style.borderLeft = '4px solid #2ecc71';
                } else if (power.name.includes('Физиология')) {
                    card.style.borderLeft = '4px solid #e67e22';
                } else if (power.name.includes('Система силы')) {
                    card.style.borderLeft = '4px solid #8e44ad';
                } else if (power.name.includes('Телепортация') || power.name.includes('Порталы')) {
                    card.style.borderLeft = '4px solid #1abc9c';
                } else if (power.name.includes('Интеллект')) {
                    card.style.borderLeft = '4px solid #3498db'; 
                } else if (power.name.includes('Защита разума') || power.name.includes('Душа')) {
                    card.style.borderLeft = '4px solid #9b59b6';
                } else if (power.name.includes('Инвентарь') || power.name.includes('Геймер')) {
                    card.style.borderLeft = '4px solid #2ecc71';
                } else if (power.name.includes('Древняя кровь')) {
                    card.style.borderLeft = '4px solid #147d6e';
                } else {
                    card.style.borderLeft = '4px solid #3498db';
                }
                
                if (selectedPowers.some(p => p.name === power.name)) {
                    card.classList.add('selected');
                }
                if (!canSelectPower(power)) {
                    card.classList.add('disabled');
                }
                grid.appendChild(card);
            });
        }

        function updatePerksGrid() {
            const grid = document.getElementById('perks-grid');
            grid.innerHTML = '';
            
            // Группируем связанные перки и сортируем их
            const sortedPerks = sortRelatedItems(gameData.perks, false);
            
            sortedPerks.forEach(perk => {
                const card = createOptionCard(perk, 'perks');
                card.style.borderLeft = '4px solid #3498db';
                
                if (selectedPerks.some(p => p.name === perk.name)) {
                    card.classList.add('selected');
                }
                
                // Отключаем карточку, если требования не выполнены
                if (!canSelectPerk(perk)) {
                    card.classList.add('disabled');
                }
                
                grid.appendChild(card);
            });
        }

        function updateDrawbacksGrid() {
            const grid = document.getElementById('drawbacks-grid');
            grid.innerHTML = '';
            
            // Группируем связанные недостатки и сортируем их
            const sortedDrawbacks = sortRelatedItems(gameData.drawbacks, true);
            
            sortedDrawbacks.forEach(drawback => {
                const card = createOptionCard(drawback, 'drawbacks');
                // Color based on severity
                if (drawback.points === 5) {
                    card.style.borderLeft = '4px solid #34495e';
                } else if (drawback.points === 4) {
                    card.style.borderLeft = '4px solid #8e44ad';
                } else if (drawback.points === 3) {
                    card.style.borderLeft = '4px solid #c0392b';
                } else if (drawback.points === 2) {
                    card.style.borderLeft = '4px solid #e74c3c';
                } else {
                    card.style.borderLeft = '4px solid #f39c12';
                }
                
                if (selectedDrawbacks.some(d => d.name === drawback.name)) {
                    card.classList.add('selected');
                }
                
                // Check if this drawback has requirements
                if (drawback.requires && !selectedDrawbacks.some(d => d.name === drawback.requires)) {
                    card.classList.add('disabled');
                }
                
                // Check if this drawback is incompatible with any selected powers
                if (drawback.incompatible) {
                    const hasIncompatiblePower = drawback.incompatible.some(incompatiblePower => 
                        selectedPowers.some(p => p.name === incompatiblePower)
                    );
                    
                    if (hasIncompatiblePower) {
                        card.classList.add('disabled');
                    }
                }
                
                grid.appendChild(card);
            });
        }

        // Navigation
        const sections = ['worlds', 'body', 'powers', 'perks', 'drawbacks'];
        const sectionElements = sections.map(section => document.getElementById(`${section}-section`));

        function showSection(index) {
            sectionElements.forEach((section, i) => {
                section.style.display = i === index ? 'block' : 'none';
            });
            currentSection = index;
            updateNavigationButtons();
            
            // If we're showing the body section, check if we need to show penis/breast size sections
            if (index === 1 && selectedGender) { // Body section is now index 1
                // Show/hide penis size and breast size sections based on gender
                const penisSizeTitle = document.getElementById('penis-size-title');
                const penisSizeGrid = document.getElementById('penis-size-grid');
                const breastSizeTitle = document.getElementById('breast-size-title');
                const breastSizeGrid = document.getElementById('breast-size-grid');
                
                if (selectedGender.name === 'Мужик' || selectedGender.name === 'Футанари') {
                    penisSizeTitle.style.display = 'block';
                    penisSizeGrid.style.display = 'grid';
                    updatePenisSizeGrid();
                } else {
                    penisSizeTitle.style.display = 'none';
                    penisSizeGrid.style.display = 'none';
                }
                
                if (selectedGender.name === 'Тянока' || selectedGender.name === 'Футанари') {
                    breastSizeTitle.style.display = 'block';
                    breastSizeGrid.style.display = 'grid';
                    updateBreastSizeGrid();
                } else {
                    breastSizeTitle.style.display = 'none';
                    breastSizeGrid.style.display = 'none';
                }
            }
        }

        function updateNavigationButtons() {
            document.getElementById('prev-btn').disabled = currentSection === 0;
            document.getElementById('next-btn').disabled = currentSection === sections.length - 1;
        }

        document.getElementById('prev-btn').addEventListener('click', () => {
            if (currentSection > 0) {
                showSection(currentSection - 1);
            }
        });

        document.getElementById('next-btn').addEventListener('click', () => {
            if (currentSection < sections.length - 1) {
                showSection(currentSection + 1);
            }
        });

        // Initialize the game
        function initGame() {
            updateWorldsGrid();
            updateGenderGrid();
            updateAppearanceGrid();
            updateHeightGrid();
            updatePenisSizeGrid();
            updateBreastSizeGrid();
            updatePowersGrid();
            updatePerksGrid();
            updateDrawbacksGrid();
            updatePoints();
            showSection(0);
            
            // Initially hide penis and breast size sections
            document.getElementById('penis-size-title').style.display = 'none';
            document.getElementById('penis-size-grid').style.display = 'none';
            document.getElementById('breast-size-title').style.display = 'none';
            document.getElementById('breast-size-grid').style.display = 'none';
        }

        // Функция для сортировки связанных элементов (перков/недостатков)
        function sortRelatedItems(items, isDrawbacks) {
            // Копируем массив для работы с ним
            const allItems = [...items];
            const result = [];
            const processed = new Set();
            
            // Находим все группы связанных элементов
            const groups = [];
            
            // Функция для нахождения корневого элемента и всех его зависимых
            function findRelatedGroup(item, group = []) {
                if (processed.has(item.name)) return group;
                
                group.push(item);
                processed.add(item.name);
                
                // Находим все элементы, которые требуют текущий элемент
                const dependents = allItems.filter(i => {
                    if (Array.isArray(i.requires)) {
                        return i.requires.includes(item.name);
                    }
                    return i.requires === item.name;
                });
                
                // Рекурсивно добавляем зависимые элементы в группу
                dependents.forEach(dep => findRelatedGroup(dep, group));
                
                return group;
            }
            
            // Находим корневые элементы (которые ничего не требуют)
            const rootItems = allItems.filter(item => !item.requires);
            
            // Для каждого корневого элемента находим его группу
            rootItems.forEach(rootItem => {
                const group = findRelatedGroup(rootItem);
                if (group.length > 0) {
                    groups.push(group);
                }
            });
            
            // Проверяем, остались ли непроверенные элементы (могут быть циклические зависимости)
            allItems.forEach(item => {
                if (!processed.has(item.name)) {
                    const group = findRelatedGroup(item);
                    if (group.length > 0) {
                        groups.push(group);
                    }
                }
            });
            
            // Сортируем группы по наивысшему значению points
            groups.sort((groupA, groupB) => {
                // Для drawbacks сортировка от большего к меньшему
                // Для perks сортировка от меньшего (более отрицательного) к большему
                if (isDrawbacks) {
                    const maxPointsA = Math.max(...groupA.map(i => i.points));
                    const maxPointsB = Math.max(...groupB.map(i => i.points));
                    return maxPointsB - maxPointsA;
                } else {
                    const minPointsA = Math.min(...groupA.map(i => i.points));
                    const minPointsB = Math.min(...groupB.map(i => i.points));
                    return minPointsA - minPointsB;
                }
            });
            
            // Добавляем все элементы из групп в результирующий массив
            groups.forEach(group => {
                result.push(...group);
            });
            
            return result;
        }

        initGame();
    </script>
</body>
</html>

Editor is loading...
Leave a Comment