ultratears
Unofficial native Windows port of Tears of the Kingdom 1.4.3 using static recompilation. Builds locally from the player's own extracted game dump; no game files included.
3D-игра «Профессии в Банке»: операционист, кредитный эксперт, финансовый консультант, инкассатор, специалист по финансовой безопасности, HR-специалист и DevOps-инженер — по 5 смен в каждой.
Translation pending
GamesJavaScript · CSSGitHub @PrintHiEgProgOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗3D-игра от первого лица для детей и подростков (7–15 лет). Игрок проводит неделю стажёром в банке: гуляет по холлу, выбирает кабинет и пробует профессию изнутри. 7 профессий × 5 смен = 35 смен, в каждой — своя сторона профессии: операционист, кредитный эксперт, финансовый консультант, инкассатор, специалист по финансовой безопасности, HR-специалист и DevOps-инженер (с заданиями DevSecOps — безопасной разработки). Все кабинеты связывает один сюжет: на этой неделе мошенники атакуют клиентов банка, а люди, которым игрок помог в одном кабинете, приходят в другие.
Игра работает прямо в браузере, на компьютере и телефоне. Регистрация не нужна, игра спрашивает только никнейм.
Игра — статический сайт без сборки. Её нужно открыть через любой веб-сервер: при открытии index.html как файла
браузер заблокирует ES-модули.
python3 -m http.server 8000
# открыть http://localhost:8000
Игра — статический сайт, сборка не нужна. В корне уже лежат vercel.json (кэш для Three.js, заголовки безопасности,
прокси /api/cbr для курсов ЦБ) и .vercelignore (тесты и скриншоты в деплой не попадают).
Через сайт (2 минуты):
. (корень). Deploy.https://<проект>.vercel.app. Каждый git push обновляет её сам.Через консоль:
npm i -g vercel
cd center-invest-game
vercel # первый раз: войти и создать проект
vercel --prod # выложить в продакшен
После деплоя сделай два QR-кода для презентации: на ссылку игры и на репозиторий.
Статистика для HR: Vercel → Storage → Create Database → Neon (Postgres) → Connect → Redeploy. Дальше —
дашборд Superset одной командой, см. analytics/README.md.
Запасной вариант — GitHub Pages: Settings → Pages → Source: Deploy from a branch, ветка main, папка / (root).
Three.js лежит в vendor/, поэтому игра не зависит от CDN.
Наставник — Галина Сергеевна, управляющая отделением. 25 лет назад она пришла сюда стажёром-операционистом (живой пример карьеры в банке). Встречает игрока в первый день, рассказывает новости отделения после каждой смены (как решения игрока изменили жизнь клиентов) и в конце недели вручает сертификат с итогами.
Холл — настоящее отделение банка, по которому можно ходить и всё рассматривать: операционный зал с тремя окнами за стеклом и табло очереди, столы консультантов, зона банкоматов 24/7, табло курсов валют, охранник у входа, стойка с буклетами (советы по финансовой грамотности), плакат против мошенников, кулер, «Стена благодарностей» и напротив неё — карьерный стенд с профилем стажёра. Над окнами — световой короб с логотипом банка, на стенах табло курсов ЦБ, бегущая строка и часы. Люди в холле живые: замечают игрока, поворачивают к нему голову, моргают; наставник, охранник и гости поворачиваются к тебе целиком. По стенам — семь дверей кабинетов с подсветкой цвета профессии и звёздами прогресса. Холл вытянут вглубь: у входа — клиентская зона, дальше под указателем «← HR · DevOps →» — двери офиса банка, в самом конце — операционный зал и «Финансовая безопасность». Все двери открыты сразу. Можно подойти к двери или взять талон в терминале электронной очереди.
Кабинет — у каждой профессии своя 3D-комната: окно кассы, стол кредитного эксперта, уютный кабинет консультанта, гараж инкассации с броневиком, офис безопасности, светлый кабинет HR с круглым столом для собеседований и тёмная «серверная» DevOps со стеной мониторинга и мигающими стойками. В кабинете — карта 5 смен и карточка «А в жизни»: что делает специалист, какие качества нужны, где учиться.
Смена = заставка → задания в 3D-комнате (подойти к предмету, нажать) → разбор: звёзды, последствия решений, «🧵 Сюжет недели», новые карточки знаний, «профессия по кусочкам». Ошибки не наказываются сразу: они возвращаются «через пару дней», «месяц спустя» или «в новостях города».
Антагонист недели — сеть мошенников с «куратором» во главе. Её следы есть в каждом кабинете, а вычисляют куратора в финале отдела безопасности. Персонажи переходят из профессии в профессию, и исход в одном кабинете меняет другой. Кабинеты можно проходить в любом порядке: каждая реплика проверяет, что игрок уже видел, и либо вспоминает прошлое, либо намекает на будущее.
| Персонаж | Где появляется | Как связано |
|---|---|---|
| 👵 Валентина Петровна, 72 | Операционист (смена 1) → Безопасность (смены 1, 4, 5) | У окна кассы её уговаривают перевести всё на «безопасный счёт». Если игрок её спас, ночью в звонке она узнаёт его голос: +15 доверия и плашка «Она тебя знает» |
| 🕵️ Максим и «друг» Руслан | Кредитный эксперт (смена 1) → Безопасность (смена 5) | Подставной заёмщик. «Друзья» вербуют молодёжь на ту же сеть, что и дропы в расследовании |
| 📱 Артём, 19 | Операционист (смена 1) → Консультант (смена 4) → Кредитный эксперт (смена 4) | Платит штраф, хочет айфон в кредит, а потом приходит за кредитом на электровелосипед. Робот-скоринг ему отказывает, но игрок видит его накопления |
| 🥐 Пекарня «Каравай» | Инкассатор (смена 1) ↔ Кредитный эксперт (смена 5) | Хозяйка пекарни говорит с инкассатором по-разному: мечтает о новой печи, благодарит за кредит или сдаёт выручку «вам, хоть кредит дали другие» |
| 🚘 Серый седан А 777 МР | Инкассатор (смена 1) → Безопасность | Хвост за броневиком работает на ту же сеть |
| 🚲 Миша, 11 | Консультант (смена 1) | «Удвоим деньги» в игре рассылают те же мошенники |
| 🕵️ Руслан — инсайдер | Кредитный эксперт (смена 1) → HR (смена 1) → DevOps (смена 4) | Тот самый «друг» Максима пытается устроиться в банк операционистом по поддельному диплому. Если HR его возьмёт, в «Доступах» DevOps он уже выгружает базу клиентов |
| 🎒 Маша, 18 | Безопасность (смена 5) → HR (смена 5) → DevOps (смена 4) | Внучка Валентины Петровны выходит стажёркой. Заявка HR на её доступы приходит DevOps-инженеру — лишнее придётся отозвать |
| 🔐 Аккаунт Валентины Петровны | DevOps (смена 3) | Та же сеть подбирает пароли клиентов мобильного банка — и уже вошла в её приложение |
Где виден сюжет: новости наставника в холле, блок «🧵 Сюжет недели» в разборе каждой смены и итоги недели в сертификате.
Первая смена каждой профессии построена вокруг её главного момента, чтобы игрока сразу затянуло:
| Профессия | Кульминация первой смены |
|---|---|
| 🧾 Операционист | Последней к окну подходит Валентина Петровна с телефоном у уха: «переведите всё на безопасный счёт!». Тревожная музыка и сердцебиение, разговор со шкалой доверия, экран «180 000 ₽ спасено» |
| 📝 Кредитный эксперт | Максим приходит с «другом», который отвечает за него на все вопросы. Поговорить наедине и спасти парня от чужого долга в 500 000 ₽, а через месяц увидеть, чем всё кончилось |
| 📈 Консультант | Велосипед Миши собирается по деталям, пока растёт копилка. Посреди перемотки «удвоители» из игры предлагают перевести 1 000 ₽. В финале Миша уезжает на велосипеде |
| 🚚 Инкассатор | По дороге в зеркале заднего вида снова и снова появляется серый седан. Заметить хвост, сообщить диспетчеру и уехать к полиции. Хозяйка «Каравая» выносит сумку |
| 🛡 Безопасность | Счётчик рассылки растёт в реальном времени, пока игрок разбирает фишинг. Финал «Атака отбита» и первое упоминание Валентины Петровны |
| 🤝 HR | Весь цикл найма за смену: убрать дискриминацию из вакансии, собеседовать трёх кандидатов (запретные вопросы — ловушки), проверка с согласия, давление начальника «возьми помоложе». Кульминация: идеальный кандидат Руслан — поддельный диплом и номер из дела о мошенниках |
| ⚙️ DevOps | Собрать конвейер CI/CD из станций проверки под реальный список изменений, разобрать находки (ключ платёжного сервиса в коде, Log4Shell, ложные тревоги) и выкатить релиз к 18:00. Кульминация: «утро после релиза» — что случилось бы с каждой пропущенной дырой |
Главный вопрос игры — «какая работа в банке подходит мне?». Ответ появляется не через 35 смен, а как только игрок сыграл хотя бы одну смену в любых 5 кабинетах из 7 (обычно это первые смены — самые яркие). Наставник сама показывает профиль, а потом он всегда доступен на карьерном стенде в холле и из пропуска (кнопка с аватаром).
Профиль складывается из игры, отдельного теста нет:
В режиме для жюри (ссылка «Смены» на титульном экране) профиль показывается предварительно уже после первой смены.
Игра пишет анонимные события (без имён, IP и регистрации): какие профессии открывают и проходят, ответ «Как тебе эта
работа?», что посоветовал профиль стажёра, переход на страницу «Карьера» банка. Цепочка: игра → функция Vercel
api/events.js → Postgres → дашборд Apache Superset «Профессии в Банке — HR-аналитика» (12 графиков: главные цифры,
выбор профессий, «понравилось», воронка до страницы стажировки, рекомендации профиля, возраст × профессия, по дням,
устройства). Дашборд собирается одной командой analytics/superset/bootstrap.py; проверен на Superset 4.1.2 с Postgres 16.
Superset живёт отдельно от Vercel — на своём сервере с доменом (setup-vps.sh: Docker + HTTPS), на ноутбуке или у банка; варианты — в analytics/README.md.
Статистику можно выключить на титульном экране, а при «Не отслеживать» в браузере она не отправляется. Подробно —
analytics/README.md.
В папке brand/ два варианта фирменного знака «Центр-инвеста» — с прозрачным фоном, в фирменном зелёном:
logo.png — широкий баннер (знак + «Банк Центр-инвест») для больших мест: световой короб над окнами
операционистов (виден сразу от входа), ролл-ап «Неделя стажёра», карьерный стенд, титульный экран, профиль,
сертификат, карточка для друзей;emblem.png — только знак для маленьких мест: табло над входом в «Финансовую безопасность», банкоматы,
коврик «Добро пожаловать» у входа.В 3D логотип лежит на светлой плашке чуть темнее чисто-белого: так он не попадает под эффект свечения (bloom), который «засвечивал» зелёный на белом. Нет файлов (или вместо них заглушки 1×1) — игра работает без логотипа.
cbr-xml-daily.ru
(официальный XML ЦБ браузер с чужого сайта прочитать не даёт): на Vercel запрос идёт через свой адрес /api/cbr
(прокси в vercel.json), локально — напрямую; ответ кешируется на 6 часов. Нет связи — табло честно пишет
«примерные».| Смена | Навык | Что делает игрок |
|---|---|---|
| 1. Первый день | Платежи | Понимает запрос «по-человечески», переносит реквизиты из квитанции, выдаёт сдачу. Кульминация: Валентина Петровна и «безопасный счёт» |
| 2. Касса | Наличные | Пересчитывает купюры, проверяет УФ-лампой, находит подделку и недостачу |
| 3. Новый клиент | Открытие счетов | Сверяет фото в паспорте с лицом, вежливо отказывает 12-летнему, подбирает продукт под цель |
| 4. Переводы | Переводы | Проверяет каждую цифру в реквизитах, торопливый бизнесмен, звонок «следователя»: «внук в беде» |
| 5. Сверка кассы | Валюта и сверка | Курс покупки/продажи, срочная блокировка карты, сверка кассы в конце дня |
| Смена | Навык | Что делает игрок |
|---|---|---|
| 1. Первые заявки | Нагрузка на бюджет | Правило «платёж ≤ ⅓ дохода», мягкое решение (дольше срок). Кульминация: Максим и «друг», который отвечает за него |
| 2. Не сходится | Проверка документов | Как в Papers, Please: отмечает два факта, которые не сходятся, ищет поддельную справку |
| 3. Собеседование | Собеседование | Задаёт вопросы и сверяет ответы с документами: скрытые кредиты, честный, но перегруженный заёмщик |
| 4. Скоринг | Скоринг и залог | Робот советует, решает игрок: чужой паспорт при высоком скоринге, Артём с накоплениями при низком; кредит не больше цены залога |
| 5. Пекарня | Кредиты бизнесу | Пекарня «Каравай»: читает график выручки, предлагает страховку; итог — портфель «полгода спустя» |
После каждой смены календарь перелистывается: карточки заёмщиков горят зелёным, жёлтым или красным.
Главная фишка — перемотка времени: игрок составляет план, месяцы летят, падают соблазны, подарки и беды, и жизнь проверяет план. В финале каждой истории — короткая сценка.
| Смена | Клиент и цель | Механика |
|---|---|---|
| 1. Велосипед | Миша, 11 лет: велосипед | Трубы денежного потока: краны можно закрыть или прикрутить наполовину, «нужное» не режется. Велосипед собирается по деталям, «удвоители» из игры, финал — Миша уезжает на велосипеде |
| 2. Подушка | Катя, студентка: ноутбук | Подушка безопасности. В перемотке разбивается телефон: без запаса придётся брать из цели или брать микрозайм с переплатой |
| 3. Отпуск | Семья Петровых: море | Выбор продукта: копилка, накопительный счёт или вклад. Инфляция дважды поднимает цену путёвки, а вклад нельзя снять раньше срока |
| 4. Айфон в кредит? | Артём, 19, и его бабушка | Посчитать переплату по рекламе «всего 6 300 ₽/мес», объяснить каждому на его языке, а в перемотке накопленные деньги соревнуются с кредитом |
| 5. Пирамида | Олег: учёба дочки через 5 лет | Найти признаки пирамиды в листовке, отговорить в разговоре, построить план на 5 лет — «снежный ком» процентов. Пирамида рушится на 4-м месяце. Финал — «сарафанное радио» от клиентов недели |
Во всех сменах есть шкала доверия: если объяснил неудачно или резал нужное, клиент может не послушать совета в момент соблазна.
Никакой стрельбы и погонь: герой — тот, кто заметил угрозу и действовал по протоколу. Каждая смена — три фазы: карта маршрута → выезд на броневике → сдача в хранилище.
| Смена | Навык | Что делает игрок |
|---|---|---|
| 1. Первый маршрут | Маршрут | Строит маршрут с окнами времени (пекарня закрывает кассу в 9:45), проверяет пломбы. Кульминация: серый седан в зеркале — сообщить и уехать к полиции |
| 2. Хранилище | Процедуры | Маршрут не должен совпадать со вчерашним (он показан пунктиром). Напарник зовёт за кофе с деньгами в машине. В хранилище — порядок действий и сверка с ведомостью |
| 3. Хвост | Бдительность | Серых седанов теперь два: нужно сверять номера в зеркале. У отделения — учебная проверка службы безопасности |
| 4. Банкоматы | Банкоматы | Пятница, пробки в центре: какой банкомат опустеет первым? Раскладывает пачки по кассетам: номинал к номиналу. Ошибки попадают в «новости города» |
| 5. Снегопад | Старший бригады | Полный цикл: снег замедляет, распределение ролей в бригаде, перекрытая улица и объезд, «водитель, сбегай за сумкой», не так, как вчера |
Оценка безопасности — главная: нарушение правил снижает её, даже если ничего плохого не случилось.
| Смена | Навык | Что делает игрок |
|---|---|---|
| 1. Рассылка | Распознавание фишинга | Тапает по уликам в СМС и письмах, пока счётчик рассылки растёт. Финал «Атака отбита» |
| 2. Поток | Мониторинг операций | Свайпает платежи: пропустить или заблокировать |
| 3. Правило | Антифрод-система | Собирает правило и проверяет его на вчерашних операциях |
| 4. Безопасный счёт | Работа с клиентами | Звонок пенсионерке, пока «майор ФСБ» на второй линии |
| 5. След денег | Расследование | Доска с нитями: дропы, транзитная карта, куратор |
Всё — по Трудовому кодексу (ст. 3, 64, 65, 70, 86 ТК РФ) и закону о занятости (565-ФЗ, ст. 53): игра учит не только находить людей, но и не нарушать их права. После каждой смены календарь «испытательный срок» показывает, кем человек оказался через 1–3 месяца.
| Смена | Навык | Что делает игрок |
|---|---|---|
| 1. Первая вакансия | Подбор без дискриминации | Вычёркивает из вакансии «девушка 20–30 лет», «славянской внешности», «прописка», «без детей» (риск штрафа до 15 000 ₽); собеседует трёх кандидатов — три вопроса на каждого, запретные вопросы про детей, возраст и веру — ловушки; проверка только с согласия (справку о несудимости для операциониста требовать нельзя); начальник давит «возьми молодого». Кульминация: Руслан — поддельный диплом, несуществующая фирма, номер из дела о мошенниках |
| 2. Поток резюме | Отбор резюме | 10 откликов на стажировку: отсеять только по обязательным требованиям, «слепой режим» прячет имя, возраст и фото. Мама троих детей, пробел в стаже, кандидат на коляске, пенсионер-учитель — подходят; резюме «21 год, 10 лет топ-менеджером» — нет |
| 3. Собеседование | Метод STAR | Уточняет ситуацию, задачу, действие и результат: «мы всей командой» и «в целом по отделу» — туман, конкретные цифры — факты. Эффект ореола: красный диплом против реального опыта |
| 4. Проверка | Проверка кандидатов | Вакансия инкассатора: тут справка о несудимости и медкомиссия нужны по закону. Согласие кандидатов, затем досье СБ: в порядке / обсудить / закон запрещает / учитывать нельзя (погашенная судимость, судимость отца, брат-полицейский, профсоюз) |
| 5. Первый день | Адаптация | Стажёрка Маша: план первого дня (без «сразу одна на кассу»), заявка на доступы по минимуму, вечерний разговор со шкалой доверия — останется ли она в банке |
Проверки безопасности встроены прямо в конвейер выпуска — как в ГОСТ Р 56939-2024 «Разработка безопасного ПО» и требованиях Банка России к ПО для банковских операций (683-П). Термины объясняются на языке подростка.
| Смена | Навык | Что делает игрок |
|---|---|---|
| 1. Первый релиз | Конвейер CI/CD | Читает список изменений и собирает конвейер из станций (поиск секретов, SCA, автотесты, SAST, сканер контейнера, подпись) в пределах времени до 18:00. Разбирает находки: ключ платёжного сервиса в коде (стереть мало — надо сменить), Log4Shell (CVE-2021-44228), ошибка комиссии, ложные тревоги. Утром — последствия каждой пропущенной дыры |
| 2. Ночное дежурство | Мониторинг и аварии | Живые графики в 3 часа ночи: сломался релиз → откат, логи съели диск → ротация, трафик ×50 → анти-DDoS. Неверные действия стоят минут, а клиенты не могут войти. Утром — разбор без поиска виноватых |
| 3. Атака | Логи и защита входа | Поток логов входа: найти адрес, который подбирает пароли, взломанный аккаунт Валентины Петровны и вход бывшего подрядчика; не принять за атаку Мишу, забывшего пароль. Меры: лимит попыток, второй фактор, а «выключить вход всем» бьёт по честным клиентам |
| 4. Доступы | Минимум прав | Таблица доступов: стажёру — только нужное (заявка из смены HR), разработчику — без админки боевых серверов, подрядчику с закончившимся договором — ничего, роботу сборки — узкая роль |
| 5. Большой релиз | Канареечный релиз | Конвейер с подменённым пакетом «reqeusts», неподписанной сборкой и SQL-инъекцией, затем выкатка по шагам 1% → 10% → 50% → 100%: на 10% новая версия падает на Android — откатить или выключить функцию флагом |
Профессия — это данные, а не правка движка. HR и DevOps добавлены именно так:
js/data/professions.js: название, цвет, «А в жизни», 5 смен; шаг смены — run: 'файл:функция'.js/episodes/<файл>.js (функция получает ctx и смену, возвращает звёзды и последствия) и тексты в js/data/<файл>.js.js/rooms/<id>.js и дверь в DOORS холла (js/rooms/lobby.js); карточки знаний с префиксом.js/data/career.js), id в js/save.js и в белом списке аналитики (api/events.js, analytics/views.sql).| Лёгкая (7–10) | Средняя (11–13) | Сложная (14+) | |
|---|---|---|---|
| Подсказки | Подсвечено лишнее, светофор нагрузки, цвета купюр и кассет | Часть подсказок | Без подсказок |
| Расчёты | Игра считает сама | Показан пример расчёта | Срок, переплату и сдачу считает игрок |
| Объём | Меньше клиентов и точек | Полный | Полный + обманки (похожий седан, перемешанные кассеты) |
Игра сохраняется автоматически: в начале смены, после каждого задания и в конце. Данные лежат в localStorage.
На титульном экране — «Продолжить», в каждом кабинете — карта смен со звёздами, любую открытую смену можно переиграть.
После всех 35 смен наставник вручает сертификат: какая профессия получилась лучше всего и как прошла неделя.
Режим жюри: на титульном экране кнопка «Смены: по порядку / все открыты». В режиме жюри все 35 смен доступны сразу.
Папка tests/: сценарии на Playwright, которые сами играют в смены. Запуск: поднять сервер в папке игры
(python3 -m http.server 8765), затем cd tests && npm i && npx playwright install chromium && node advisor.mjs 1 normal good.
Скриншоты прогона складываются в tests/shots/.
advisor.mjs, cash.mjs — «умный игрок» проходит любую смену консультанта и инкассатора правильно (good) или с ошибками (bad) на любой сложности, на компьютере и телефоне (390 844)hr.mjs, devops.mjs — то же для HR и DevOps (node hr.mjs 1 normal good); devops.mjs 4 normal good 1 1366 768 insider — сюжетный вариант, когда HR взял Русланаnewui.mjs — общие экраны с семью профессиями: титул, терминал очереди, пропуск, профиль, карточка для друзей, альбомfirsts.mjs — первые смены и сквозной сюжет: операционист → холл → кредит → холл → безопасность (смены 1 и 4)monkey.mjs — «обезьянка» жмёт случайные кнопки в любой профессии и ловит ошибки JavaScriptsmoke.mjs — быстрый запуск: титульный экран, холл, первый кабинетbrokensave.mjs — повреждённое сохранение и ошибка внутри кабинета: окно восстановления вместо пустого окна;
gfxauto.mjs, slowgpu.mjs — автовыбор графики и переключение на «быструю» при медленных кадрахcomfort.mjs — удобство: обучения пяти смен безопасности, «💡 Подсказка» после ошибок и штраф в итогах, «↻ Переиграть»,
УФ-лампа, пауза с настройками и крупный текст (node comfort.mjs flow|rules|call|trace|teller2|pause [ширина высота])screens.mjs — все экраны вне смен (титул, приветствие, холл, терминал, двери, наставник, стена благодарностей,
пропуск, альбом, пауза, кабинет, заставка, подсказки) на любом размере экранаlock.mjs — управление на ПК: захват мыши, прицел, действие по Ejoy.mjs — телефон: джойстик справа, подпись в обучении и в меню паузыdevserver.mjs — локальный сервер «как на Vercel» (игра + api/events → Postgres); prodpath.mjs — игра на
«боевом» домене сама шлёт статистику; superset-shot.mjs — снимок дашборда Superset и проверка, что графики не упалиsuperset-https.mjs — Superset за HTTPS-прокси (Caddy, как на сервере): гость видит дашборд без логина, admin входит по формеbrand.mjs — логотипы на высокой графике (со свечением), табло курсов ЦБ (с подставным ответом API и без сети),
бегущая строка, часы, коврикprofile.mjs — профиль стажёра: карьерный стенд, закрытый профиль, автопоказ после любых 5 профессий из 7, карточка для друзей
(рисуется и скачивается), логотип на нейтральной заглушке, двери вблизи, люди поворачиваются к игрокуПеред сдачей все 35 смен прогнаны автотестами: консультант, инкассатор, HR и DevOps — «умным игроком» правильно и с ошибками, на компьютере и телефоне; операционист, кредит и безопасность — «обезьянкой» и сценарием первых смен на трёх сложностях. Аудит интерфейса (AUDIT=1) проверяет, что ничего не вылезает за экран и в окнах нет «сломанного» текста вроде undefined. Ни одной ошибки JavaScript в консоли.
| Компьютер | Телефон | |
|---|---|---|
| Осмотреться | Кликнуть по экрану — камера следует за мышью (без зажатия), в центре прицел | Вести пальцем |
| Ходить | WASD / стрелки, Shift — бег | Джойстик внизу — слева или справа (настройка «Джойстик» в меню и на титуле) |
| Действие | E (или клик) по тому, что в прицеле. Далёкий предмет: «🚶 подойди ближе» | Тап по предмету |
| Отпустить мышь | Esc (второй Esc — пауза) | — |
| Найти цель | Стрелка у края экрана или клик по «Задаче» | То же |
Если браузер не разрешает захват мыши (например, игра открыта внутри чужой страницы), включается запасной режим: зажать мышь и вести.
Принципы: учим делом, а не текстом; подсказка — прямо перед тем, как она нужна; коротко; всё можно пропустить и повторить.
js/data/hints.js.manifest.webmanifest, значки
в brand/icon-*.png).backdrop-filter) — на слабых компьютерах именно оно сильнее
всего тормозит поверх 3D.dvh у всех окон есть запасная высота в vh.Опирались на исследования и практику игровой индустрии: эмоции рождают и механика, и история; персонажи должны быть последовательными и узнаваемыми; мир должен реагировать на решения игрока.
index.html титульный экран, HUD, пауза
css/style.css интерфейс всех профессий и адаптив под телефон
js/main.js холл → кабинет → смены, сохранения, взаимодействие
js/story.js сквозной сюжет недели: наставник, новости, связи между кабинетами, гости холла, записки
js/tours.js обучение: что подсветить и что сказать в каждой механике
js/profile.js профиль стажёра и карточка результата (PNG на canvas)
js/data/career.js профориентация: стороны стиля, чему учит каждая смена, что нужно профессии, путь в банк
js/brand.js логотип банка: баннер и знак из brand/, плашки без «засветки»
js/rates.js курсы ЦБ РФ для табло и бегущей строки: прокси Vercel → зеркало → примерные, кеш
js/analytics.js анонимная статистика: события игры без имён → /api/events
api/events.js функция Vercel: проверяет события по белому списку и пишет в Postgres
analytics/ SQL-представления, дашборд Superset (bootstrap.py, docker-compose), демо-данные
js/screens.js карточки кабинетов, заставки, разбор, итоги, сертификат, альбом
js/world.js 3D-движок и офис финансовой безопасности
js/rooms/ lobby (холл), teller, credit, advisor, cash, hr, devops + kit (строительные блоки)
js/episodes/ механики: teller, credit, advisor, cash, hr, devops, dialog (разговор) + phishing, flow, rules, call, trace
js/data/professions.js реестр профессий: смены, «а в жизни», карточки знаний
js/data/teller.js … контент каждой профессии: клиенты, документы, маршруты, события (hr.js — кандидаты и закон, devops.js — конвейер и аварии)
vendor/three/ Three.js (MIT)
Как добавить смену или профессию: контент лежит в js/data/*.js отдельно от механик. Новый клиент консультанта —
объект в ADVISOR_SHIFTS (доходы, расходы, цель, события перемотки). Новый маршрут инкассатора — точки с окнами
времени в CASH_SHIFTS. Новая профессия — объект в PROFESSIONS, файл комнаты в js/rooms/ и механика в js/episodes/
(шаг смены run: 'файл:функция' подключается сам — см. «Как добавить профессию»).
screenshots/: титул с выбором стажёра (00), холл и наставник (01–02), кабинет (03),
отделение банка, обучение, прицел, стена благодарностей, пропуск, подсказки (04–09), операционист (10–12),
кредитный эксперт (20–22), консультант (30–33), инкассатор (40–44), безопасность (50–52 и 60-…), телефон (70–72),
профиль стажёра, карточка для друзей, карьерный стенд, живые люди, вопрос «Как тебе эта работа?» (80–86),
логотип банка в холле, табло курсов ЦБ, бегущая строка, часы, коврик у входа (87–92), дашборд Superset
на демо-данных (93), холл с указателем и дверями офиса (100–101), HR-специалист: вакансия, проверка со службой
безопасности, давление начальника, испытательный срок, STAR, досье, первый день стажёрки, кабинет (102–109),
DevOps-инженер: кабинет, конвейер, находка в коде, утро после релиза, ночной DDoS, логи, доступы, канареечный релиз,
телефон (110–118), профиль с пятью сторонами (119).Все персонажи, клиенты, компании из сюжета, номера карт и сайты в игре вымышлены. «Центр-инвест» — банк, автор кейса хакатона; сведения о стажировке взяты с его страницы «Карьера».
audit.inc.mjs — аудит интерфейса (с AUDIT=1 работает во всех тестах): что выходит за экран, торчит из окна,
обрезано без прокрутки, кнопки HUD наезжают на окна. Проверено на 360×740, 390×844, 844×390 (телефон лёжа),
768×1024, 1024×768, 1280×720 и 1366×768