Це девлог — чесна розповідь про те, як я створюю гру Business Empire Idle. Idle-гра, де ви будуєте бізнес-імперію від лимонадного кіоску до міжпланетної торгівлі. Розробка ще триває, але я хочу зафіксувати процес, поки він свіжий.

Business Empire Idle — скріншот гри: панель керування, квести, стартові набори

Чому idle-гра? Тому що це ідеальний полігон: реактивний стейт, складна математика, система прогресії, анімації, PWA. І головне — зробити гру, в яку самому хочеться грати.

13
бізнесів
23
досягнення
71
тест
14
компонентів

Стек і чому саме такий

Гра побудована на SvelteKit 2 з Svelte 5 (Runes). Не React, не Vue — Svelte. Ось чому:

  • Реактивність без зусиль$state, $derived, $effect замість useState/useEffect. Немає stale closures, немає ре-рендерів
  • Маленький бандл — Svelte компілюється в чистий JS, без рантайм-бібліотеки
  • Вбудовані анімаціїtweened для плавного лічильника грошей, spring для пружинного ефекту кнопки
  • Static adapter — деплой на GitHub Pages однією командою

TypeScript у strict mode з першого дня. Vitest для тестів. Vite для збірки. Мінімум залежностей — все працює на стандартних інструментах.

Архітектура: один стор на все

Серце гри — файл store.svelte.ts на 650+ рядків. Це єдине джерело правди для всього ігрового стану: гроші, бізнеси, апгрейди, досягнення, престиж.

Ключове рішення — розділити дані і логіку. Конфігурації бізнесів, апгрейдів, досягнень лежать окремо в src/lib/data/. Стор тільки маніпулює станом. Це дозволяє змінювати баланс гри без правок логіки.

Технічна деталь: totalIncomePerSecond — це один $derived.by(), який автоматично перераховується, коли змінюються бізнеси, синергії, перки або денні події. Жодного ручного інвалідування. Svelte 5 Runes — це магія.

13 бізнесів: від $10 до $5 млрд

Прогресія — серце idle-гри. Гравець починає з лимонадного кіоску за $10 і поступово відкриває нові бізнеси аж до міжпланетної торгівлі за $5 000 000 000. Кожен наступний бізнес коштує в тисячі разів більше, але й приносить відповідно.

Кожен бізнес має 3 тіри: базовий (1 одиниця), масштабований (10 одиниць, бонус ×2–2.5) і максимальний (25 одиниць, бонус ×4–20). Тіри — це причина продовжувати купувати один бізнес, а не тільки розблоковувати нові.

Система синергій

8 пар бізнесів дають бонуси, коли працюють разом. Лимонад + Кава = «Caffeine Hustle» (+20%). IT + Медіа = «Digital Empire» (+30%). Космічний видобуток + Міжпланетна торгівля = «Galactic Corp» (+40%). Це підштовхує гравця розвивати бізнеси парами, а не тільки найприбутковіший.

Клік-система з комбо

Idle-гра без кліків — це просто числа на екрані. Тому я додав комбо-систему: 5 кліків за 3 секунди — множник ×2, 10 кліків — множник ×5. Візуально це підкріплюється SVG-кільцем, яке заповнюється навколо кнопки, і «floating numbers», що вилітають з кожного кліку.

Кнопка «WORK» еволюціонує разом з гравцем: від «Hustle Hard» до «Run Operations», «Command Empire» і, нарешті, «Dominate Galaxy». Маленька деталь, але вона створює відчуття прогресії навіть без нових механік.

Prestige: скидаємо все, але стаємо сильнішими

Коли гравець заробив $1M за всю гру, відкривається можливість «престижу» — скинути гроші та бізнеси, але отримати Reputation Points (RP). Формула: floor(sqrt(totalEarned / 1_000_000)). Тобто чим більше заробив — тим більше RP, але з diminishing returns.

RP витрачаються в престиж-магазині на перманентні бонуси: +25% до доходу, стартовий капітал $25K, автоматичний менеджер, який скуповує найдешевший бізнес кожні 30 секунд. Ці бонуси зберігаються між прогонами — і кожен новий прогон стає швидшим.

Баланс: спочатку престиж-бонуси були мультиплікативними (×1.75 × ×1.5 = ×2.625). Це зламало прогресію — після 3 престижів гравець проходив все за хвилини. Перейшов на адитивну систему (+75%, +50% = +125%). Тепер баланс відчувається правильно.

Juiciness: як зробити числа відчутними

Це була окрема фаза розробки — «juiciness». Ціль: зробити так, щоб кожна дія давала тактильний фідбек.

  • Tweened money counter — гроші не стрибають з 1000 до 2000, а плавно наростають
  • Spring-анімація кнопки — кнопка «стискається» при натисканні і «відскакує» назад
  • Конфетті — 80 Canvas-частинок на кожен milestone ($1K, $10K, $100K, $1M, $1B)
  • Screen shake — 500ms тремтіння екрану при великих покупках
  • Тоасти синергій — коли активується синергія, спливає повідомлення з назвою та бонусом
  • Epoch backgrounds — фон змінюється з гаража на корпоративний офіс і далі на пентхаус. З плавним fade-переходом за 1.2 секунди

Без цього гра технічно працювала. Але відчувалась як Excel-таблиця. Після «juiciness»-фази — як гра, в яку хочеться повертатись.

Денні події та контракти

Щодня (за UTC) гра генерує випадкову подію: +50% до доходу всіх бізнесів, або -25% до вартості покупок, або бонус конкретній категорії. Рандом — детермінований через Math.sin(dayIndex). Тобто всі гравці бачать одну й ту саму подію в один день — без серверу.

Плюс 3 денні контракти: заробити X грошей, зробити Y кліків, купити Z бізнесів. Цілі масштабуються з престижем — на рівні 0 це «заробити $2K», на рівні 5 — «заробити $200K».

71 тест і 6 знайдених багів

Я написав тести не «бо так треба», а тому що баланс idle-гри — це математика, і одна помилка в формулі ламає всю прогресію. Ось реальні баги, які знайшли тести:

  • Денні модифікатори не застосовувались — подія казала «+50% до ресторанів», але дохід не змінювався
  • Offline-дохід ігнорував тір-бонуси — гравець повертався через 8 годин і отримував в 5 разів менше, ніж мав
  • Click power не зберігався через престиж — після скидання клік-сила повертались до базової, навіть якщо в магазині були куплені бонуси
  • Контракти не платили нагороду — прогрес-бар заповнювався, анімація грала, але гроші не нараховувались
  • Night Owl ачівка перевіряла не ту змінну — дивилась на апгрейди замість престиж-магазину
  • Cost Freeze подія збільшувала ціни замість зменшення — множник був > 1 замість < 1

Кожен з цих багів зламав би гру для реального гравця. Тести — це не бюрократія, це страховка.

AI-згенеровані сцени

Кожен бізнес має реалістичне зображення, згенероване через Midjourney: лимонадний кіоск, кав'ярня, IT-офіс, космічна станція. 13 унікальних сцен. Гравець може переглянути їх, натиснувши іконку ока на картці бізнесу.

Це не впливає на геймплей, але створює емоційний зв'язок. Коли бачиш свою «кав'ярню» — вона відчувається більш реальною, ніж рядок тексту.

Що далі

Гра живе, розробка продовжується. В планах:

  • Нові бізнеси та рівні прогресії
  • Розширення престиж-магазину
  • Соціальні фічі — порівняння з друзями
  • Більше «wow-моментів» і візуального фідбеку
  • Мобільна оптимізація та покращення PWA
Далі буде. Цей девлог — перший із серії. Слідкуйте за оновленнями — наступний буде про конкретні технічні рішення та балансування idle-прогресії.

Чому це важливо для моїх клієнтів

Може здатись, що idle-гра не має стосунку до бізнес-сайтів. Але подивіться на список технологій: SvelteKit, TypeScript, анімації, PWA, тестування, деплой на GitHub Pages. Це ті самі інструменти і підходи, які я використовую в комерційних проєктах.

Різниця в тому, що гру я роблю для себе — і можу дозволити собі експериментувати. А потім кращі рішення потрапляють у ваші проєкти. Вашому ресторану точно не потрібна система престижу. Але анімації, реактивний стейт і архітектура — потрібні.