sundwell.dev | Хроники инди-разработки – Telegram
sundwell.dev | Хроники инди-разработки
694 subscribers
224 photos
105 videos
136 links
Всё про инди от реального человека - девлоги, процесс маркетинга, геймдизайн, разработка и пиксель-арт
Download Telegram
День 10

Пост за вчера (снова) 🥲

Фактически занимался обучением 2.5 часа, где половину времени добавлял мелочи в игру про рыцаря, добавил двойной прыжок, возможность делать кувырок в воздухе, сразу же исправил баг, где можно было делать кувырок => двойной прыжок => кувырок => ... и так бесконечно

Разобрался, где хранить данные типа "can_user_jump" или "can_user_roll", потому что они нужны в разных местах, и я думал, где централизовать хранение всего этого. Ответ — в главном скрипте player.gd, и можно спокойно в другом скрипте/файле искать Player на сцене и вызывать у него функции типа player.jump(), player.move(), player.can_roll и так далее, потому что я сначала думал, что это плохая практика. Ещё добавил музыку из тех ассетов, что дал Brackeys. Прикреплю небольшое видео того, что есть сейчас

Потом посмотрел How to program in Godot про язык GDScript, которым я пользуюсь уже десятый день. Всё правильно — сначала пишем предложения, потом учимся, как писать буквы, жизнь меня ничему не учит 😅

Не помню, говорил ли об этом, но в игровом движке Godot официально поддерживаются GDScript, C# и C++. Так как Godot полностью бесплатный и опенсорсный — для него делают плагины, и можно писать хоть на JS, но я не рискую, мне на работе его хватает 😢

Также перед тем, как начать учиться, меня прям накрыла прокрастинация и нежелание начинать. Мне даже стало немного страшно — как так, мне же это нравится. Но потом я понял, почему так было — из-за "больших" задач

Когда передо мной стоит большая и, главное, непонятная задача, на которую я не знаю, сколько уйдёт времени и как её делать — я откладываю это до последнего. Я знаю решение этой проблемы:
- Разбить задачу на подзадачи
- Начать делать, просто начать и понять, что не всё так сложно и "страшно", а дальше оно само пойдёт

Реально, самое трудное — это начать что-то делать, а дальше уже нормально идёт. Я уверен, что так у большинства, просто (ага, просто) нужна дисциплина и нужно немного переступить через себя, мне в этом помогает этот канал, я чувствую ответственность 😅

Также я написал планы на улучшение игры про рыцаря, чтобы максимально прокачаться и чтобы игра была "игрой", а не просто какой-то чел бегал и прыгал бесконечно. О планах я напишу в следующем посте, скорее всего это будет сегодня, хочу попробовать всё это "визуализировать

P.S. постоянно сохраняю в "Посмотреть позже" на YouTube видосы про Pixel Art, очень хочу начать рисовать, но распыляться нельзя, надо закончить рыцаря, а потом уже двигаться дальше

А, и ещё — то, сколько времени я трачу на геймдев — это чисто время на обучение и практику. То есть, если я смотрю какие-то видео, которые больше развлекательные и весёлые — я это время не трекаю, хочу точно знать, чему я научился за 10, 100, ... N часов, думаю, это будет интересно не только мне

#godot #разработка
🔥21
День 11

Сегодня был очень загруженный день, но под вечер всё-таки удалось немного накидать план доработок для рыцаря, посидел примерно час

1. Полоса здоровья и логика здоровья, без мгновенной смерти
2. Летающие очки урона/лечения
3. Лечение фруктами
4. Убивать врага при падении (как в Марио)
5. Кадры неуязвимости во время кувырка
6. Падение фруктов/монет с врага
7. Босс
7.1 2 типа атак
- Прыжок на персонажа
- Подготовка и рывок к персонажу
7.2 Немного проработанная арена
7.3 Специальная полоса здоровья (health bar) для босса

Это всё было ещё вчера, а сегодня я почти всё визуализировал, чтобы выглядело более-менее интересно и наглядно

Я всё это делал на miro.com, так что мой прогресс можно посмотреть вот здесь, прикреплю пару скринов оттуда, чтобы вас заинтересовать 👀

Если у вас есть какие-то предложения по тому, что добавить в игру про рыцаря, буду рад выслушать и, если это реально, добавить в игру 👀

Я дал всем возможность комментировать
доску с планом, так что можете писать прямо туда (или в комментариях под этим постом), она удалилась, потому что я вышел из команды... длинная история, та за шо

Как только доделаю рыцаря, буду в основном заниматься пиксель-артом и потихоньку продумывать следующую игру, чтобы разработать её с полного нуля — логика, графика, музыка и звуки, как говорил ранее, скорее всего это будет капибара-рембо, которая будет стрелять по врагам 🔫
🔥3
День 12

Вчера разобрался, как сделать полосу здоровья и саму систему здоровья, но сделать её не успел, так что сегодня планирую сделать как минимум следующие вещи:
- Реализовать фичу здоровья — полоса, система и возможность повторного использования для врагов
- Реализовать нормальную смерть персонажа

Про полосу здоровья — это не так уж сложно, эти и эти видео, думаю, почти полностью покрыли всё, что нужно знать про health bar

Вчера вышло около часа на всё

У меня довольно часто возникают вопросы по поводу "правильности" и архитектуры, чтобы я сразу учился максимально правильно. За 5 лет у меня уже появилась "чуйка", если я пишу что-то, что вроде работает, но точно потом вылезет боком. К счастью, есть чат про Godot, где я могу задавать вопросы... к сожалению, в таких чатах не всегда отвечают. А я понимаю, что если сейчас буду делать неправильно и привыкну к этому, то потом придётся переучиваться, и такие вещи будут накапливаться, что может потом вылезти боком

Поэтому я решил найти ментора, которому мог бы задавать вопросы и который направлял бы меня в правильное русло, так сказать. Я неприхотливый, всё делаю сам, но вопросы типа "Какое сверло тут использовать? У меня их десять, и в принципе все подходят... как выбрать?" мне, как новичку, абсолютно непонятны, но кому-то, кто уже набил шишки, это очевидно. Так что скоро у меня впервые в жизни будет ментор — посмотрим, как это будет
🔥3
День 13

Сегодня был продуктивный день — всё, что планировал, сделал, а именно систему здоровья, полосу здоровья, "нормальную" смерть персонажа

Прикреплю пару видео, одно короткое с фактическим результатом, а другое подлиннее, больше про "процесс" с моими комментариями здесь и там

Я уже чувствую, как начинаю реально понимать, что и где могу использовать, как сделать какую-то фичу (пусть даже через костыли), и это очень приятное ощущение, а я ведь занимаюсь геймдевом всего 22 часа. Вот сейчас ещё подумал разделить потраченное время на разработку и на другие направления — арт-дизайн и саунд-дизайн, так будет максимально наглядно следить за прогрессом условно "по часам"

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

Как я говорил выше в посте, пока мне нужны только ответы на вопросы и "направление" в правильное русло, чтобы я не копал и не делал то, что не нужно. Ну и, конечно, ревью моих проектов — их структуры, архитектуры и качества кода

Например, один из советов: "Пока кто-то пишет идеальный код, другой зарабатывает деньги", и ещё он привёл примеры людей, которые хейтили и сильно критиковали код какой-то игры, которая уже приносит немалые деньги, а сами ни одной игры не написали. Конечно, не нужно писать "говнокод", но и загоняться тоже не стоит, если надо пару раз нарушить какой-то принцип или что-то в этом духе

Например, я слышал шутку про невероятно классную игру Undertale, что там прямо "спагетти-код" и миллион вложенных if-else друг в друга. Ну, я посмотрел — и правда так (если верить, то вот исходный код игры), но игра заработала невероятные деньги, и в ней есть самое главное — душа. Играть и погружаться в неё — это прекрасно, всем рекомендую. Прикреплю скриншот их кода для диалогов

#godot #разработка
🔥2
День 14

Вчера удалось поработать около 2 часов, хочется больше уделять этому времени, потому что есть много свободного времени, но даже если удаётся поработать всего 15-30 минут — это уже хорошо. Самое главное — не корить себя за то, что недостаточно что-то делаешь, потому что ты уже начал это делать, и уже есть прогресс, ведь "1% больше, чем 0%", нужно всегда это помнить

Если говоришь себе: "Вот завтра я начну делать то и это по 4+ часа в день...", то будет очень сложно начать, потому что перед тобой стоит некая стена ответственности, которая мешает начать, ведь "нужно аж 4 часа...". Поэтому не нужно корить себя за то, что получилось мало поучиться или позаниматься чем-то. Раньше я постоянно себя корил (сейчас тоже, но не так сильно 😅) и часто бросал начатое из-за слишком высоких требований. А вот когда я решал делать хотя бы по 15 минут в день — с каждым днём становилось намного легче начинать заниматься этим и уделять больше времени

Это всё, конечно, хорошо, отмазку написал, почему по несколько часов работаю в выходные, теперь к сути 🌚

Добавил систему здоровья для врагов, и теперь их можно убивать, урон наносится, когда персонаж падает на врага, прямо как в Марио

Сегодня добавлю состояние "Умирает (Dying)" и "Оглушён (Stunned)". Враг будет переходить в состояние Stunned, когда получает урон, планирую сделать его немного краснее на это время и чтобы он не двигался в этот момент. А в состоянии Dying просто добавлю анимацию смерти и уберу его Hitbox (часть врага, которая наносит урон персонажу)

Сделал эти вещи за пару часов... но реалистично мог бы сделать за минут 40, потому что возникает много вопросов: "А как правильно? А как лучше?", так что я решил пока делать как получается, но оставлять комментарии в коде или записывать свои вопросы в заметки, чтобы потом уточнить у ментора

Пока что у меня следующие вопросы:
- owner — что, как и зачем?
- Hitbox — как правильно настроить? Как правильно наносить/получать урон, кто должен это вызывать и т.п.
- timers — когда нужно создавать отдельный узел, а когда просто вызывать SceneTree.create_timer?
- Почему не использовать просто rectangle collision вместо RayCast? (вопрос по поводу этого видео). P.S. я сделал через rectangle collision
- Как правильно доставать главную ноду в сцене (враг или персонаж)? Потому что сейчас использую костыль типа slime = get_parent().get_parent() или player = get_tree().get_first_node_in_group('Player'), насчёт последнего не уверен, что это костыль — но выглядит не очень

Также прикреплю небольшое видео с результатом

Хотел также смонтировать видео побольше с моими комментариями и мыслями, но OBS заглючил на макбуке и снимал экран одной вкладки в хроме все два часа 🫠

#godot #разработка
2🔥2
День 15

Сделал себе выходной от учёбы, так что фактического прогресса вчера не было

Я просто думал об идее для игры, которую буду делать после того, как закончу с рыцарем

Последние дни играю в Archvale, очень нравится идея игры, это такая себе ARPG с разными видами оружия (ближний бой, дальний бой и магия — фактически просто посохи и книги). Ходишь по миру, рубишь монстров с очень приятными анимациями и звуками, крафтишь и прокачиваешь оружие и броню (или выбиваешь с врагов или из сундуков), ещё и графика очень прикольная, но есть свои минусы: чувствую нехватку контента и очень высокую повторяемость и монотонность. Особенно интересно играть первые ~3-5 часов, дальше идёт гринд, и нужно стать "перекачем", чтобы пройти один особо сложный уровень-арену (или стать мастером уклонений, но это не про меня). А, и главное — там есть bullet hell, интересно, как его интегрировали

Ещё мне на YouTube случайно попалось видео девлога того разработчика из TikTok, о котором я говорил ранее, что мне нравится его стиль, а тут ещё и полноценные видео есть, очень интересно, будет что посмотреть в свободное время

В общем, идея будет о top-down ARPG (типа Diablo-клон), где в главной роли будет капибара с оружием. То есть делать я буду не платформер, как с рыцарем, а немного другое
🔥2
День 16

Вчера был день теории и изучения многих вещей от ментора, почти две часа переписывались, и я слушал его ответы на свои вопросы из этого поста

Почти всё разобрали, осталось только пару моментов, которые, скорее всего, уже сегодня доразберём

Узнал о хитбоксах и хартбоксах

Как правильно настроить? Как правильно наносить/получать урон? Кто должен это вызывать и т.п.

За это должны отвечать только Area2D, а не коллизия, потому что сейчас у персонажа у меня коллизия отвечает за взаимодействие с миром (чтобы не падать) и за получение урона, а так неправильно. Потому что если я захочу сделать персонажа неуязвимым — мне придётся отключать правильные слои коллизии у персонажа, иначе он провалится или будут баги. А если делать правильно — коллизия отвечает только за "прикосновение" с миром, а Area2D отвечает за "если сюда ударят, получи урон", то можно отключить только Area2D, и никаких багов не будет

Наносить и получать (здесь я ещё не полностью уверен) урон должен скрипт персонажа. У врагов не должно быть в скриптах ничего такого:

var player = somehow_get_player()

...

player.take_damage(...)


Всё это должно быть в скрипте игрока. У него проверяется, с кем он соприкоснулся, и в зависимости от этого уже что-то делается в его скрипте. У врагов только настраивается их поведение — когда они прыгают, куда идут, когда стоят

Когда нужно создавать отдельный узел, а когда просто один раз создать через код?


Здесь было очень интересно — создание узлов это одно из самых затратных действий в игровом движке. Поэтому лучше всегда создавать узлы заранее, которые всегда есть. Они могут быть неактивными, но они созданы и в любой момент готовы к использованию

Ментор рассказал очень классный пример с патронами — есть пул патронов, пусть будет 30, и когда персонаж стреляет, патроны не создаются, а просто становятся видимыми и получают скорость. А когда они "исчезают", неважно, попали ли в врага или вышли за экран, они деактивируются и возвращаются на начальную позицию, но не удаляются. Очень интересно было это узнать

Сегодня уже начал дорабатывать игру, так что, может быть, пост напишу не завтра, а сегодня вечером 👀

#godot #разработка
🔥2
День 17

Вчера сделал состояния "Dying" и "Stunned" для врагов и добавил звук при нанесении урона, теперь выглядит намного лучше, но появился баг, который я пока не пофиксил — почему-то при большой скорости падения персонажу наносится урон, сегодня нужно разобраться с этим

Также сегодня добавлю летающие цифры урона, как раз уже знаю, как это сделать, в этом видео всё прекрасно показали

До конца этой недели точно закончу с рыцарем и приступлю к следующей игре, как раз ментор ещё раз подчеркнул, что лучше делать небольшие игры с несколькими механиками, не нужно сразу гнаться за "игрой мечты", потому что так почти никто не доходит до релиза, вырезают много контента, и получается какая-то мини-игра, которую можно было сделать намного быстрее

Так как я смотрю в сторону разработки top-down ARPG игр, то я буду дальше делать их. Для "обкатки" механик я буду делать разные игры по 3-4 недели (именно разработки, всё остальное не считаем)

Я ещё точно не определился с порядком, нужно ещё выписать механики, с которыми нужно попрактиковаться, но, скорее всего, следующая игра будет про такие механики:
- Система урона и атаки
- Враги
- Система прокачки персонажа, то есть опыт и основные атрибуты, такие как сила, ловкость и интеллект
- Переходы между уровнями, сделать минимум 2 уровня и "логическое" завершение игры, а не как сейчас в рыцаре

#godot #разработка
🔥2
Media is too big
VIEW IN TELEGRAM
День 18

Поигрался я с RayCast2D, чтобы пофиксить баг с получением урона при падении на врага (так не должно быть), но всё равно иногда проскакивает, спрошу у других разработчиков и у ментора, что там не так 🤔

Также сделал летающие цифры урона и лечения, конечно, системы лечения пока нет, но цифры уже готовы 😅

Сегодня очень свободный день от работы, поэтому смогу много времени уделить разработке, на сегодня такие планы:
- Добавить фрукты и возможность лечиться ими. Будет 2-3 вариации фруктов, и каждая вариация будет лечить на 15-20-25 соответственно
- Добавить выпадение монетки или фрукта с врагов с вероятностью 50/50, что-то будет выпадать всегда
- Добавить неуязвимость при кувырке

И останется только добавить меню и босса

#godot #разработка
🔥2
Media is too big
VIEW IN TELEGRAM
День 19-20

Впервые делаю пост сразу за два дня, потому что постоянно на день отставал 😅

Сделал фрукты и лечение ими, добавил разные типы фруктов — на 15, 20 и 25 лечения

Также сделал, чтобы с врагов выпадала монетка или случайный фрукт

И наконец-то пофиксил баг со скачком и нанесением урона, это называется Tunneling, если я не ошибаюсь

Ох... сколько же багов у меня постоянно вылазит... это просто невероятно, и я просто не понимаю, как они возникают, то ли я "гений", то ли движок так специфично работает, завтра спрошу у ментора, что это такое

Одна из проблем далее:
Я хотел сделать так, чтобы с врага выпадал какой-то лут — монетка или фрукт. Для этого я создал сцену EnemyDrop, и в ней уже брал сцены coin и fruit и спавнил их (добавлял в игру), но почему-то там никак не добавлялись спрайты (всё было просто невидимым), то вообще ничего не было, а иногда выскакивало, что %GameManager не найден, хотя он должен быть всегда доступен, так как это уникальная переменная. Решил это костылём — сделал GameManager глобальным, чтобы мог обращаться к нему из любого места, но решение не очень, это я точно знаю

Также много чего нельзя/нежелательно делать "прямо сейчас", а нужно ждать конца физических расчётов. То есть я не могу просто сказать "в этот момент отключай коллизию с миром и падай вниз", я должен делать следующим образом: "отключай коллизию с миром в конце физического фрейма"

В коде это что-то вроде:
hitbox.collision.disabled = true

hitbox.collision.set_deferred('disabled', true)

С этим тоже возникают некоторые проблемы, но об этом уже в другой раз

Всё-таки планирую закончить игру за субботу и воскресенье и начать двигаться дальше — в направлении top-down ARPG

Осталось сделать следующие вещи:
- неуязвимость при кувырке (очень легко, пара секунд)
- босс — не уверен, но тоже не должно быть сложно и долго
- меню — возможно будут проблемы (не хочу проблем 🥲)

Завтра расскажу о планах на следующие игры и что именно планирую делать после завершения игры про рыцаря, если я об этом ещё не говорил (уже не помню 😅)

#godot #разработка
🔥2
День 21

Сегодня много чего разобрал с ментором по своему проекту и просто по общей логике игры, многие моменты у меня встали на свои места

Фактически сегодня сделал неуязвимость во время переката (если честно, это были просто две строчки кода) и переписал много чего, ещё есть место для улучшений, но эту игру я полировать не буду, потому что нужно двигаться дальше. Видео с перекатом прикреплю к посту, надо же хоть что-то более-менее интересное показывать, также второе видео с багом, который я только что нашёл 👀

Также пофиксил некоторые баги:
- Когда перекат заканчивался прямо во враге, персонаж не получал урон
- Фрукты, которые выпадали с врагов, всегда были одинаковыми

Что касается "дальше" — сегодня, то есть в воскресенье, как и планировал, закончу полностью игру, а для этого нужно сделать меню и босса. Уверен, что всё получится сделать вовремя и начать дальше заниматься тем, чем уже действительно пора

С понедельника я начну читать документацию по самому Godot, смотреть видео по этому движку, как можно что-то оптимизировать, как структурировать проект, посмотрю стримы/плейлисты, как другие делают игры — это будет невероятно полезно. Конечно, у меня есть материалы, которые я хочу посмотреть, что-то абстрактное — это не про прогресс, нужно всегда ставить реальные цели и дедлайны, иначе будешь прокрастинировать (как я 👀)

Небольшой список материалов (далеко не полный):

YouTube
- Я бы хотел это знать перед началом разработки на Godot
- Godot 4, 4 разработчика делают 4 игры за 44 часа
- Как сделать ближнюю атаку, хитбоксы и хартбоксы
- Взаимодействие с объектами в Godot (будет особенно полезно, так как я буду делать что-то типа Diablo)
- Посмотреть следующих ютуберов: GDQuest, Heartbeast, Miziziziz, Godotneers. Их рекомендуют многие
- 11 часов введения в Godot 4 (сам не верю, что смогу это посмотреть, но я правда постараюсь)

Читать
- Конечно, документацию с самого начала, обязательно пройти разделы About, Getting Started и Manual
- Рецепты Godot — kidscancode, меня заверили, что "не дай названию сайта обмануть тебя, там очень много полезных материалов"
- Портал gdquest.com, его хвалят, поэтому тоже посмотрю
- Язык GDScript, уже пора точно посмотреть его синтаксис и как с ним правильно работать

Но есть одно "но" — следующая неделя будет посвящена в большинстве своём именно Pixel Art и "размышлениям" по поводу следующих игр, у меня уже есть реальные идеи, чтобы это было интересно, прикольно и полезно, но нужно это всё ещё обдумать, обязательно напишу в одном из следующих постов

Так что с понедельника я активно начну учиться делать пиксель-арт, маленькая цель — за неделю сделать дизайн для капибары и несколько анимаций для неё (бег и стояние на месте)

#godot #разработка
🔥2