Тема: створюю гру, занотовую прогрес (початківець)

привіт світ!

так сталося, що я рішуче почав створювати гру та занотовувати свій прогрес
бо давно хотів, багато цікавився, та постійно чогось бракувало
життя

про цей форум дізнався зовсім нещодавно, а тому вже маю деякий прогрес, який зараз тут і продублюю
може комусь буде цікаво, може хтось навіть щось порадить
хтось порегоче, може) теж непогано

отже, начасі мета створити якусь походову стратегію, можливо з елементами рольовки (але це не точно)
бо, авжеж, була така чудова серія ігор як Advance Wars :)

з інструментів: tiled, vs code, love 2d, деяке розуміння програмування та ентузіазм

сподіваюсь, буде весело

Подякували: Tarpan87, koala, MN3

2

Re: створюю гру, занотовую прогрес (початківець)

день перший

хз з чого почати) нашвидкоруч намалював карту, Tiled у поміч
завелика вдалась, не розрахував, і переробляти ліньки
хоча для прототипу норм
хіба що спрайти дрібні як блохи (бо ж на холяву з інету)
може спробую намалювати власні колись (але це не точно)

день другий

спробував пописати диз.доки, хз як їх роблять
опсав трохи статів для загонів і тайлів, щось ще
було натхнення, зникло натхнення) напсав трохи коду

написав трохи коду, щоб спрайти руцями не завантажувати
навіть з метатаблицями трохи розібрався, мабуть
тепер маю глобальну змінну Sprite:
і завантажує, і обробляє, і кадри повертає
ще й усе робиться однією функцією Sprite()
зручно :)

замислився над розрахунками тайлів (або чарунків, може)
прописати вартість для кожного загону окремо? і це для кожного окремого тайлу!
і сподіватися, що нічого ніде не прогавлю)
або задати вхідні дані та навантажити розрахунками
як проц, так і гравця...

зрозумів, що туплю (та не вмію добре планувати, шкода)
зробив вхідні дані, і щоб воно само розрахувало усю вартість
так вийшло більше клопоту з кодом, однак тепер меньше шансів на помилку з неуважності
ну а що гравцю показати — це вже потім вигадаю

помудохався з lua-кодом карти, наче працює
прописав маштабування, щоб карта завжди влізала в екран (тимчасовий костиль)
ще перемикач вікно / повноекранний режим на F4
зробив днів за два-три, хз — так захопився процесом, що занотовувати забув та й ліньки

і ще десь у цьому проміжку розписав код, що виводить і нумерує усі тайли
заскрінив та зберіг, щоб легше було прописувати
пишаюсь собою :)

помітив проблему:
шрифт втрачає зглажування, якщо у повноекранному режимі

намагався зібрати екзе’шник
затуп №1: зробив архів .7z замість .zip, недогледів
через це "картридж" (.love-файл) довго відкривався, а конвертуватися й взагалі не схтів
затуп №2: не можна конвертуватися в екзе, якщо у папці Program Files
довелося переміщатися у Мої док-и

дописав карту
тепр кожна чарунка — це не просто картинка, а готовий до роботи набір даних
дописав курсор миші — тепер відображає координату і назву чарунки під курсором
радість :)

збільшив у 4 рази, 64 пікселі спрайт, ніби непогано, прикріплю скрін
(або хочаб спробую)
на такий розмір і буду орієнтуватися

порахував, наче минуло десь днів п’ять
ну як днів: коли вечорів, коли ранків %)
щоб аж цілий день над кодом пріти — змоги немає, життя

https://replace.org.ua/extensions/om_images/img/630fd54229b44/true_story.jpg


день 6–7

накидав приблизну перезарядку дій
це щоб не можна було двічи за хід пересуватися, наприклад
або щоб можна було, побачимо)

підійшов до реалізації пошуку шляхів
маю декілька ідей, не маю достатньо часу
наразі лише розумію, що за хід буду прораховувати усі чарунки
заради інтерфейсу та Ш.І., ну типу Ш.І. :D

згадалася Tactics Ogre, там фіча була:
коли тайл заскладний для проходження, перс може його перестрибнути
тепер цікаво, як там було реалізовано пошук шляху
хоча, відволікся

що там ще? оновився по фреймворку до 11.4
переписав купу коду
здувся вести нотатки)


день 8

написав маленьку, але дуже корисну функцію
розраховує вартість входження

function getMapCost(unit, cell)
        local impass = 15
        if not cell.data.vartist[unit.move.id] then
                cell.data.vartist[unit.move.id] = unit.move.lvl > cell.data[unit.move.typ].lvl
                and math.max(1, cell.data[unit.move.typ].pass - unit.move.pass)
                or impass
        end
        local vartist = cell.data.vartist[unit.move.id]
        if cell.unit then
                vartist = unit.team == cell.unit.team and vartist or impass
        end
        return vartist
end

лишилося ще одну, приблизно таку

створю порожній масив на перевірку
додам туди стартову чарунку (місцезнаходження юніта)
і далі по циклу
якщо вартість входу сусідньої чарунки або відсутня, або має більше значення
у вартості шляху вказую розраховане значення, а чарунку додаю на перевірку

виглядає не складно
лишилося прописати

день 9

прописав, хоч і з помилками) основна маса з яких — невірно вказаний ключ до змінної
по пам’яті писати — таке собі, щоправда у vs code коментарі допомогають
тілько хз де цю тему прошарити

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

https://replace.org.ua/extensions/om_images/img/630fd54229b44/true_story_2.png

далі мабуть навчу юнітів ходити


день 10

трошки пописав коду на відображення поля пересування


день 11

трохи прошарив ту фіговину у vs code
називалося анотаціями, ось так просто)
дуууже корисна штука


день 12

етап: від розуміння до застосування
засрав увесь код анотаціями)
схоже, що доведеться усе переписувати


день 13 (23.8.2022)

засів за написання мета-файлів
цілу папку для цього виділив
планування перепланування


день 14 (24.8.2022)

шукав армію, може ще будівлі якісь
переглянув 2239 спрайтів, трохи очманів

за якістю було усе: від мікро-збочення до топ-класу
дещо навіть зберіг — на потім
на зараз — доведеться ставити плейсхолдери :(


день 15 (25.8.2022)

планування, структурування, переписування
голова обертом, треба відпочити від усього цього
декілька днів, може з тиждень)


день 16 (26.8.2022)

за тиждень інтенсив, дуркувати ніколи
переписав структуру коду


день 17 (27.8.2022)

почав переписувати код за новою структурою
не подобається
усе у смітник, разом із папкою мета-файлів
переписую знову
тепер ніби подобається


» день 18 (28.8.2022)

ще трохи переписав


» день 19 (29.8.2022)

і ще трішечки... зовсім трошки.... клята спека доканає (ні)
схоже, просто зникає ентузіазм, коли задачка вже розв’язана
взявся за юнітів, щоб не гаяти час

паралельно хтів розписати усіх юнітів, що будуть у грі
вийшло: просто повторив тих, що вже на спрайтах <_<
треба викинути спрайти з голови

код

мало бути ось так
https://replace.org.ua/extensions/om_images/img/630fd54229b44/true_story_3.jpg
(не код, чисто для наочності)

але так марную дофіга часу просто щоб вказати змінну
не хочу

краще буду писати ось так
https://replace.org.ua/extensions/om_images/img/630fd54229b44/true_story_4.jpg
(шматок готового коду)

ну так, трохи головняк бо в Lua немає жорсткої типізації даних
хоча там і свої плюси, я гадаю


» день 20 (30.8.2022)

шо по коду юнітів буде

поля:
- ім’я
- гравець
- команда (якщо спроможусь на мультиплеєр)
- початкові стати
- спрайти (або спрайт, бо на холяву анімація дзуськи)
- хітпоінти
- очки дій (1–2 для юнітів, будівлі — до 4-х)
- вартість найму
- черга (типу як в тактичних рпг’шках буває, ну а шо?)
- розмір (для транспортування)
- і може витривалість ще, але це не точно

дії:
- чекати (змінює чергу)
- відпочивати, щоб відновити здоров’я (але здебільшого витривалість, якщо буде)
- захищатись (баф захисту, може ще які фічі з прокачкою)
- рухатись
- атакувати
- звести будівлю (селяни та інженери)
- захопити будівлю (лише піхота)
- завантажитись (у транспорт)
- розвантажитись
- об’єднати (однотипні) загони

корочше, дофіга роботи прямо по курсу


далі буде

Подякували: Tarpan871

3

Re: створюю гру, занотовую прогрес (початківець)

Якщо все так, як ви кажете, то дайте посилання на репозиторій. Стек розробки мені подобається, сам таким послуговувався.

Подякували: leofun011

4

Re: створюю гру, занотовую прогрес (початківець)

Tarpan87 написав:

дайте посилання на репозиторій. Стек розробки мені подобається, сам таким послуговувався.

ем.... обов’язково дам, якщо розкажите що воно таке та як ним користуватися  *PARDON*
бо я з тих початківців, які за освітою навіть не програмісти, сорян

Подякували: Tarpan871

5

Re: створюю гру, занотовую прогрес (початківець)

Репозиторій це місце в мережі, де зберігаються джерельні коди. Найвідоміший сервіс для зберігання своїх джерельних кодів це https://github.com/ . Почитайте, це дуже зручна штука. Викладіть тут, будь ласка, джерельний код вашої гри, хочеться паралельно читати опис ходу розробки та зміни в самому джерельному коді. Так набагато цікавіше читати.

Подякували: Неосяжний, bebyk2

6

Re: створюю гру, занотовую прогрес (початківець)

Tarpan87 написав:

Репозиторій це місце в мережі, де зберігаються джерельні коди. Найвідоміший сервіс для зберігання своїх джерельних кодів це https://github.com/ . Почитайте, це дуже зручна штука. Викладіть тут, будь ласка, джерельний код вашої гри, хочеться паралельно читати опис ходу розробки та зміни в самому джерельному коді. Так набагато цікавіше читати.

а, здається, починаю розуміти
гаразд, на днях спробую розібратися і викласти

Подякували: Tarpan871

7

Re: створюю гру, занотовую прогрес (початківець)

» день 21 (31.8.2022)

на хвилиночку, минуло цілих три тижні з того дня, коли я дійсно почав щось робити
щодня по кроку до мети
it ain't much, but it's honest work :D

дозволив собі відпочинок)


» день 22 (1.9.2022)

якщо комусь цікаво, мої розширення під vs code:
https://replace.org.ua/extensions/om_images/img/631522ee10a75/true_story_5.jpg
Love2D щоб швидко тестувати п
і Sort Lines — працює трохи дивно (лише через мультикурсор, чи як його) але працює

здається, десь на днях трохи пописав камеру
хоча від камери там лише уявлення (та й те приблизне)

і взагалі не впевнений, чи треба?
паралакс не планую, а під координат миші вже є по функції

хіба що маштабування зробити, щоб змінювалось не миттєво, а поступово
а ще ж ui — отже треба


» день 23–25 (від 2.9.2022)

почався інтенсив = у мережі з’являтимуся рідше
через що і робота над грою сповільниться (але не зупиниться)

далі трохи роздумів про наболіле)

з’ясувалося, що реалізувати камеру складніше, аніж гадалося
тож спершу треба упорядкувати думки

чарунки, будівлі та юніти — усі мають (або матимуть) функцію draw()
усі (будуть) розкидані по своїх контейнерах, які будуть присобачені до Map
котра, у свою чергу, теж матиме функцію draw(), але дуже простеньку, по типу

for _, obj in pairs( якийсь контейнер) do
    obj:draw()
end

найбільша проблема: (тут була «найбільша проблема», але тепер вона здається настільки очевидною, що й не варта уваги)

отже, буде дві камери: одна для мапи, інша — для решти

наступна проблема: до якої камери притулити підсвчування об’єкту, на який наведено курсор?
адже такий об’єкт може бути як на одній, так і на іншій камері

найпростішим рішенням покищо здається: прикрутити на обидві
і зробити десь окрему змінну, щоб відображався лише один елемент, а не усі разом

(на цьому місці була ще купа нудних та незрозумілих питань, які теж не актуальні)

а для реалізації підсвічування можна

1) прикручувати до кожного об’єкту (або відкручувати) додаткову змінну-індикатор, та переписати draw() цього об’єкта, щоб розрізняв: відмальовувати по стандарту, чи під фокусом
хоча при цьому змінити відображення буде дуже складно, гадаю (та й взагалі купа мороки)

2) дописати нову функцію, яка буде окремо домальовувати фокус (що буде простіше, тож почну з цього)

переваривши написане (та повикидувавши купу непотрібу) дійшов таких висновків

важко, бо не з того боку почав :)
зпершу треба зібрати якусь подобу класу для керування грою
цей клас буде з’ясувати, чим гравець користується для гри
ну і підсвітка фокусу теж від нього буде залежати

нумс, якось так я і пишу цю гру)

8

Re: створюю гру, занотовую прогрес (початківець)

день 26 (10.9.2022)

десь днів три–чотири зжерла застуда — тепер маю наздоганяти інтенсив
але я нарешті створив репозиторій, хоча до кінця так і не розібрався, що і як воно там працює
https://github.com/red-rabbit-games/bemyfirst

Подякували: koala, leofun01, Tarpan873

9

Re: створюю гру, занотовую прогрес (початківець)

Виглядає гарно (люблю піксельоване 2Д). А в чому переваги Love2D над RPGMaker'ом?

10

Re: створюю гру, занотовую прогрес (початківець)

про всяк випадок повторюсь, що гарне піксельоване — то не моє, а на холяву з і-нету (звідси)


bebyk написав:

А в чому переваги Love2D над RPGMaker'ом?

обрав тому, що
- Lua
- безкоштовний
- не треба вчити графічний інтерфейс  :D

та й не впевнений, чи можна на ньому походову стратежку запилити (по типу Advance Wars, наприклад)
ну, принаймні, судячи з назви — бо я не цікавився, якщо чесно)

Подякували: bebyk, Tarpan872

11

Re: створюю гру, занотовую прогрес (початківець)

Особисто я ціную Love2d за мінімалізм в розробці, а безкоштовність йде бонусом.

Подякували: Неосяжний1

12

Re: створюю гру, занотовую прогрес (початківець)

шось я трохи випав з нету

день 27–38

день 27 (13.9.2022)
переписав Мапу — з рештою, там буде дофіга усього
функції, які покищо нема де притулити, кидатиму в окрему теку


день 28 (14.9.2022)
хто ж знав, що десь в інтернетах вже існує Red Rabbit Games? >__>
як і Grim Rabbit Games...

коротше, репозиторій відтепер буде за адресою
https://github.com/darkestinkgames/bemyfirst

трохи змінив принцип створення об’єктів для мапи
відтепер кожен дотичний клас сам знає, куди додавати об’єкт

підписав деякі поля


день 29 (17.9.2022)
збився з ритму, починаю губитися у власному коді) намагався прописати собі ТЗ
але схоже, що це якийсь окремий недосяжний вид мистецтва
краще буду прописувати детальні коментарі


день 30 (18.9.2022)
намагався трохи поліпшити процес (і знову анотації)

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

ще й енумерація: у першому випадку можна створити на місці, у другому — лише через окремий об’єкт


день 31 (19.9.2022)
згадав, що була проблема зі шрифтом, коли перемикаюсь у повноекранний режим
здається виправив (встановив фільтр на 'linear'), але не впевнений

трохи описав камеру, може збільшувати
трохи упорядкував файли


день 32 (20.9.2022)
ще трохи пописав камеру
колесико миші маштабує
wasd пересуває по декілька пікселів за натиск
але робить усе це покищо не достатньо гарно
доведеться ще попрацювати


день 33 (21.9.2022)
мав доробити камеру, ніби почало усе працювати як треба
але потім я подумав: а нащо мені окремий об’єкт? і так норм буде
коротше, з якогось дива зсув/маштаб більше не реагують взагалі...

https://replace.org.ua/extensions/om_images/img/6331f97857db4/true_story_6.jpeg

лише з купою print’ів нарешті з’ясував: що десь прогавив pushtimer’и

схоже, недосипи даються взнаки


день 34 (22.9.2022)
наступний затуп з камерою:

код для зсуву по клаві запхав у love.update(dt) і трохи змінив
через що Camera:addPosition(x, y) опинилася у постійному циклі
через що таймер пересування ніколи не обнулявся
і через що зламалося маштабування
хз скільки часу кумекав і обліплював код print’ами, доки не знайшов
біль =.=


день 35 (23.9.2022)
намагався переписати й потестити камеру, щоб працювала так, як мені треба

заплутався


день 36 (24.9.2022)
коротше, як можна було вже здогадатися, я підзабив на інтенсив і піднасів на гру
виявляється, на онлайн-уроках у сплячку хилить не гірше, аніж колись на звичайних

третя спроба зібрати камеру
серія затупів цього разу: забув, як та метатабл-я працює...
rawset і rawget, хай йому грець !! >_>

результатом страждань став новий клас Limits
що зберігає діапазон мін/макс значень та деякі фунції для роботи з ними
можна навіть додати значення у діапазон (а можна і не додавати)

загалом: здається, працює
лишилося зібрати


день 37 (25.9.2022)
переробляючи камеру зрозумів, що треба доробити клас Limits
тепер значення кожного атрибуту можна змінювати без додаткових обмежень


день 38 (26.9.2022)
мені не сподобалось, як воно (Limits)
бракує універсальності
викинув

змарновані час і сили)
натомість написав простенький (ні) та дуже вузькоспеціалізований клас CamVals

also, сьогодні дізнався, що по назвам верхнього рядку vs code можна клікати мишею
типу для швидкої навігації — зручніше за віконце outline

https://replace.org.ua/extensions/om_images/img/6331f97857db4/true_story_7.jpg

tl;dr
змінив ім’я на git (хто ж знав)
через що і репозиторій трохи переїхав: https://github.com/darkestinkgames/bemyfirst
пишу камеру, здебільшого побічний функціонал до неї
постійно туплю та плутаюсь)

13

Re: створюю гру, занотовую прогрес (початківець)

Tarpan87 написав:

Особисто я ціную Love2d за мінімалізм в розробці, а безкоштовність йде бонусом.

так, теж люблю мінімалізм
не люблю вчити дофіга функціоналу, котрий навіть не знадобиться)

хіба що математику доводиться згадувати)
ну, коли згадувати, коли вчити  %)

Подякували: Tarpan871