English secondary version is available in the project as a draft/reference translation. See the English draft at README_EN.md. The project itself is Ukrainian and all current documentation remains in Ukrainian as the primary language.
Космічний платформер про пошук себе, гравітацію, простір і неочевидні правила світу.
Лінійний платформер Gravity Shift
Це гра про подорожі та головоломки у забутих світах.
Ти — гравець, набутий унікальних сил. Подорожуєш по світах в надії на роз'яснення. Чому ти тут? З чого ти складаєшся? Хто тебе створив? Де правда взагалі?
Гра насичена багатьма фішками та функціями, з яких створено її всесвіт.
Дрібні деталі, такі як розгін та зупинка, плавність камери, математична текстуризація простору, дають лише найменшу краплю в деталях, які тільки можуть бути у цій грі.
Невідома речовина. В залежності від неї вирішуються його фішки.
Має гравітаційні властивості, міняє гравітацію при доторку до свого матеріалу іншої полярності — це є портали.
Здатен скорочуватися при падінні, обходячи гравітацію.
Має систему ривків (спринту), що допомагає долати великі відстані або зупиняти падіння, якщо це потрібно.
Унікальні простори з фокусом на можливості та зручність розробки.
Кожен світ має власний main.py, objects.json, Resources (музика, картинки, звуки) та особистий файл-згруповувач (усе має міститися у ньому).
Всі авторські деталі можна додати у main.
Стиль класичного Pygame з додаваннями класичної космічної тематики, із урахуванням продуманості опцій та підтримкою власних витворів (модинг).
У грі будуть інфо-панелі, що розбиті на категорії:
- Користувача
- Розробника
- Підказки
- Регулювання
- Розмова (у майбутньому)
Завжди унікальні текстурки реалізовані математикою. Лише головні об'єкти уваги задіяні як зображення.
___________________________
├───────Gravy Shift───────┤
├── core_v#/
│ ├── __init__.py
│ ├── classes.py
│ ├── lighting.py
│ └── save.json
│
├── 1_world/
│ ├── Resources/
│ │ ├── Music/...
│ │ ├── Picture/...
│ │ └── Sounds/...
│ ├── main.py
│ └── objects.json
│
├── 2_world/ (якщо є)
│ ├── Resources/
│ │ ├── Music/...
│ │ ├── Picture/...
│ │ └── Sounds/...
│ ├── main.py
│ └── objects.json
│
├── docs
│ ├── LICENSE
│ ├── notes.txt
│ ├── README_EN.md
│ ├── README.md
│ └── requirements.txt
│
├── START_HERE.py
└─────────────────────────┘
Переконайтеся, що структура файлу належна.
Перед запуском необхідно встановити додаткові Python-пакети.
Потрібні бібліотеки:
pythonpygamecoloramamodernglnumpy
Для комфорту рекомендовано використовувати pip і файл requirements.txt:
cd docs
pip install -r requirements.txt- Windows 10/11 або сумісна ОС.
- Python (ver 3.8+, ver printed game 3.13.7 also 3.13.14).
- Оновлені драйвери відеокарти з підтримкою OpenGL (для
moderngl). - Аудіо може працювати через стандартні звукові драйвери Windows.
Почати гру можна завдяки START_HERE.py (головне меню та навігація)
або ручним методом виклику потрібного main.py файлу.
Правила та фактура гри знаходиться в папці core_v#/classes.py (основні класи гравця, об'єктів, сцени), lighting.py (освітлення) та save.json (збереження).
Логіка конкретного світу розміщується в кожному власному модулі світу, наприклад MARS_world/, і має свій main.py та objects.json.
Через START_HERE.py можна завантажувати main.py світу, почавши гру.
У коді main.py підключається список об'єктів з objects.json і активуються потрібні модулі з classes.py — вони дають готову логіку існуючих об'єктів, камери та текстур.
Система задумана модульно: додати новий світ — створити папку з main.py, objects.json і Resources/ (музика, картинки, звуки). Рушій автоматично підхопить стандартні файли за конвенцією. Та намалює нову планету у головному меню, готову до запуску.
Код наповнений нотатками та історією по будові. У місцях інтерему будуть роз'яснення дії рядків. Для більшості головних класів та функцій створені заголовки.
Створіть папку NAME_world/ (обов'язково залиште у назві _world для авторозпізнання) поруч з іншими світами і додайте:
main.py— точка входу і логіка рівня (в ньому додайте всі свої нові фішки та правила та активовуйте ігровий цикл);objects.json— опис усіх об'єктів (позиції, типи, властивості);Resources/→Music/,Picture/,Sounds/— медіафайли для рівня.
У main.py підключайте потрібні класи напряму, наприклад:
from core_v1.classes import Player, Platform, TunnelPortal, JumpPad, Campfire, FinishВизначайте власні правила у main.py (наприклад, нестандартну гравітацію, режими переміщення) і обробляйте їх у своєму коді замість зміни ядра.
Для збереження стану використовуйте save_full_progress() та standart_progress() або робіть власні виклики до save.json відповідно до конвенції про формат.
DEV_MODE: у ядро вбудовано режим розробника для покращення досвіду, аналітика та інші корисні фішки.- Під час розробки увімкніть
DEV_MODE, щоб:- бачити позиції сутностей в реальному часі;
- перевіряти різні змінні (вимикаючи або перемикаючи);
- використовувати мишу для розмітки та видобовування об'єктів;
- мати привілеї у грі (між керуванням та зором).
- Під час розробки увімкніть
- JSON-система завантаження рівнів: завантаження через
objects.jsonдає зручну, декларативну модель рівнів — легко версіонувати та редагувати контент зовнішніми інструментами. А автонумерація за index дасть не загубитися у кількості. - ModernGL та GLSL (SDF-based): якщо
ModernGLі власні GLSL шейдери інтегровані в ядро, використовуйте їх для розвантаження рендерингу й візуальних ефектів — це підвищує продуктивність і дає доступ до сучасних графічних технік. (Розділяючи обов'язки між CPU та GPU)
Мій комп'ютер також не один з потужних, тому мій код з самого початку мав фокус на якість. Ось що вже зроблено і можна ще підкреслити:
- Розмір ігрового вікна прямо впливає на кількість видимого простору та кількість обрахунків процесору;
- У файлі
lighting.pyрядокself.downscaleвпливає на пропорційну обрахунок пікселів (4рази для1600x900=400x225, це1 440 000проти90 000пікселів!); - Плашки інфо-панелей вимальовуються тільки коли з'являються і коли є нові відомості (ніяких 60 разів на секунду, тільки накладання);
DEV_MODEдодає допоміжні елементи і діагностику, але також збільшує витрати — для звичайної гри тримайте його вимкненим.
- Зменшіть роздільність вікна або запустіть гру в меншому вікні;
- Вимкність інфо-панелі (
F9), якщо вам потрібна суха гра без відомостей; - Тримайте вимкненим режим розробника та інші налаштування для відладки (ці панелі оновлюються періодично);
- Використовуйте простіші моди з меншою кількістю активних об'єктів і логіки;
- А для самих модерів, намагайтеся уникати надлишкової кількості об'єктів у світі. Де можна обійтися одним або менше.
- Якщо потрібно зробити старт швидшим на вашому ПК, можна попередньо скомпілювати Python-код у байткод (
.pyc-кеш). Це не єexe-збіркою і не дає приросту в FPS, але може зменшити час ініціалізації на повторних запусків:
python -m compileall -f core_v1 MARS_world START_HERE.pyЦе корисно як підготовка до повторного старту в тому ж середовищі, а не як перемикання гри у формат настільного виконуваного файлу.
(Недописаний пункт)
Для створення об'єктів, що на поверхні та під тінню, використовуйте
"indoor": trueу словникуplatforms, щоб штучно прибрати засвіт від сонця.
(Тут буде ще більше пунктів)
Цей проект, його ядро (core_v#/) та вся базова архітектура розроблені та захищені авторськими правами:
- Автор гри: Moorzik Kin / Ніколаєць Богдан
Виконання коду гравцем — це використання, дозволене у межах однієї інсталяції гри.
- ✓ Може запускати гру та грати у неї;
- ✓ Може досліджувати код для навчання;
- ✗ Не може напряму копіювати фрагменти коду й виставляти проект як власний;
- ✗ Не може розповсюджувати модифіковане ядро як окремий продукт.
Користувач матиме авторство на модифікації, що створює особисто. Він може змінювати та розширювати тільки:
main.py(логіка та правила власного світу);objects.json(конфігурація об'єктів);Resources/(музика, картинки, звуки власного світу);- Персональний файл-згруповувач (папка розташування вище переліченого).
Моди можуть бути поширені окремо як доповнення до Gravity Shift, за умови:
- вказання авторства модифікації;
- збереження оригінальної гри Gravity Shift окремим продуктом;
- відсутності розповсюдження ядра
core_v#/чи базового коду як частини моду.
Моди самі по собі можуть не запускатися без оригінальної гри. Це нормально для доповнень — вони мають працювати разом із Gravity Shift, але не бути повноцінною самостійною грою.
Детальніше про авторство, обмеження ядра, права користувача та правила модингу описано в окремому юридично-описовому документі LICENSE. Там зафіксовано, що оригінальний рушій і базова логіка гри залишаються під авторським контролем, а власний
_worldконтент може розвиватися як авторська модифікація.