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

Вчера занимался в основном графикой (так уж получилось) и немного разработкой

Очень хочеться сделать игру "сочной", но.. я пока что объективно не могу, надо сосредоточиться на геймплее, а не над визуалом (к слову он и так +- норм)

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

Еще сделал.. пистолет, поначалу вообще не получалось, ну абсолютно никак, зато потом как я глянул референсы сразу пошло, копировал не точь-в-точь, но копирование присутствовало, мне результат очень понравился. Вместил пистолет в 16х16px спрайт, но для анимации места мало было, поэтому я перенес пистолет на 32х32px холст

Может возникнуть резонный вопрос - почему я помешан именно на 8х8, 16х16, 32х32 размерах, а не на 20x24px или 13x7px - мне так намного проще и в принципе все привыкли к таким размерам. Еще есть некоторые технические проблемы связанные с некоторыми движками, которые просто требуют чтобы текстура/спрайт был размером с любой степени двойки (2, 4, 8, 16 ...), но в Godot и Юнити насколько я знаю эту проблему решили и они там как-то сами преобразуют в итоге все спрайты в подходящий размер если нужно. Например OpenGL 2.0 имеет некоторые ограничения для необычных спрайтов, то же можно сказать и про iOS, нагуглил что iOS не реализовал поддержку PVRTC2 алгоритма сжатия текстур (как обычно - Apple впереди планеты всей)

Поэтому я всегда буду стараться делать текстуры именно размером со степени двойки, чтобы не было никаких проблем возможных (тем более это не сложно так делать). И это абсолютно не проблема, если условная пуля занимает 4х4 пикселя, а я её помещу в 128х128, хитбокс я могу обвести вокруг тех 4 пикселей и все будет четко работать

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

Сделал чтобы оружие смотрело в сторону курсора и чтобы его текстура переворачивалась если оно находится слева от персонажа (т.е. от 90° до 270° поворота)

Сегодня думаю закончить смотреть видео от GDQuest и закончить кое-как игру, потом приступлю к другому гайду побольше с плейлистом, а после - к курсу на Udemy (мне он понравился, так что решил взять и пройти)

#pixelart #godot #разработка #ritkarampage
🔥2
Кому интересно наблюдать более подробно за процессом - то буду рад видеть вас на моём ютуб-канале

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

Постоянно пытаюсь улучшать качество контента, не только в телеграмме но и на ютубе, буду рад любой критике, т.к. со стороны виднее

Ссылка на видео с скриншота - клик
🔥3
День 44

Вчера день был загруженный по работе и по.. монтажу. Я ж всю учебу свою стараюсь записывать на видео, чтобы потом было с чего видео делать и там на память/на будущее. В общем пересматривал свои видео, искал какую-то музыку для заднего фона, обрезал ненужные части, экспериментировал, ушло часа 2-3 на просмотр всех заснятых видео за последние несколько дней и монтаж их в несколько ускоренных значительно поменьше, обычно получается 1.5 часа уместить в 3-5 минут с ускорением х10 и иногда убирать ускорение если нужно

Так же экспериментировал с генерацией картинок с помощью DALL-E 3 ChatGPT-4o. Когда-то подниму локально ИИшку для генерации картинок, но пока что и так норм. Я пытался сгенерировать заставку для ютуб видео для игры R.I.T.K.A. Rampage (я над ней щас работаю), и я прям офигел насколько классно все получилось в итоге, прикреплю пару промежуточных и одно финальное изображение

Сегодня день полностью свободный, так что я уже занимаюсь разработкой. Вероятно, сегодня даже получится досмотреть тот видос от GDQuest (остался час) и потом доделать игру

Всем советую учиться по видео вот именно по подходу "Сначала посмотрел, потом попытался повторить, если не получилось - пересмотри нужную часть полностью, и попробуй снова". Т.к. если повторять за преподом точь-в-точь каждую секунду вы не уловите сути урока и будете перематывать постоянно видео, что еще ухудшит восприятие информации. А если посмотреть, а потом самостоятельно повторять (необязательно такое же) - то это сразу дает минимум х2 по эффективности обучения
🔥2
Media is too big
VIEW IN TELEGRAM
День 45

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

Уже прошло 6 дней с начала работы над R.I.T.K.A. Rampage и скорость моей разработки и рисования уже на абсолютно другом уровне, чем была пару недель назад

За вчера прояснились многие вещи:
[1] Я понял, как наносить и получать урон правильно
[2] Узнал про удобное построение очередей анимации с AnimationPlayer. Например у врага есть 2 анимации - получение урона и бег. Когда заканчивается анимация получения урона должна начинаться анимация "бег", и AnimationPlayer можно это все сделать очередью, вместо полностью ручного управления. То есть до этого я делал как-то так:
animation_player.play('hurt')

func animation_finished():
if animation_player.animation_name == 'hurt':
animation_player.play('run')


Сейчас это уже выглядело бы как-то так:
animation_player.play('hurt')
animation_player.queue('run')

[3] Использование кастомных сигналов, теперь я понимаю как делать ачивки и отслеживать прогресс персонажа в одном месте
[4] Разобрался как офигенно настроить Y sorting спрайтов (до этого было немного некорректно) - классное видео и короткое видео очень помогло

В игру добавил следующие вещи:
- Механика стрельбы, пули
- Нанесение урона врагам и их убийство
- Система здоровья и healthbar для персонажа
- Game Over экран с кнопкой "Restart"
- Моя гордость - случайный спавн мобов на арене. Была проблема в том, что моб мог заспавниться прям В персонаже или ну очень рядом, я хотел сделать минимальное расстояние, на котором может спавниться моб от персонажа - и у меня получилось, вот кусок кода, отвечающий за выбор точки для спавна моба:
# Get random point at least 50px 
func get_random_point():
var x = randf_range(area_rect.position.x, area_rect.position.x + area_rect.size.x)
var y = randf_range(area_rect.position.y, area_rect.position.y + area_rect.size.y)

var random_point = global_position + Vector2(x, y)

var player_position = player.global_position

var x_distance = abs(random_point.x - player_position.x)
var y_distance = abs(random_point.y - player_position.y)
var is_point_near_player = (x_distance + y_distance) <= MIN_SPAWN_DISTANCE_FROM_PLAYER

if is_point_near_player:
return get_random_point()


return random_point


Второй раз в жизни использовал рекурсию, прикольно

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

Но в любом случае видео самого результата я могу без проблем записать и прикрепить, так что так и сделаю

#godot #разработка #ritkarampage
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
День 46

Сегодня я доделал очень важную деталь в игре - движение кроликов, а точнее их прыжки, как я и хотел. Получилось ну вот прям идеально, точь-в-точь как я и хотел, я был очень рад (в видео вставлю момент с этим). Теперь кролики прыгают в сторону персонажа с некоторой задержкой. Сначала они "готовятся" к прыжку 3 кадра, а потом 2 кадра спрайтов для самого прыжка (фактически один, но все же), на видео будет намного лучше понятно о чем я говорю

А что может быть лучше, чем видео? Правильно - поиграть самому! Я успешно экспортировал и загрузил текущую версию R.I.T.K.A. Rampage на itch.io и абсолютно каждый теперь может в неё поиграть и следить за прогрессом разработки еще и как полноценный игрок 🔥

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

Пока что работает конечно же только с мышкой и компьютером, управление на WASD, левый клик мыши - стрельба, вот ссылка на игру https://sundwell.itch.io/ritka-rampage

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

Еще я поигрался с VFX (visual effects), а точнее с Particle System и добавил простейший "взрыв" крови от кроликов, когда они получают урон. Еще я добавил эффект "хвоста" для пули, который следует за ней, эдакий дым, что-то похожее на след от самолета

Полное видео с прогрессом за сегодня можете глянуть тут

#godot #разработка #ritkarampage
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
День 47

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

Поэтому я решил уделить вчерашний день на так называемый брейншторминг (придумывание идей) и структурирование всей информации, что у меня есть и будет

Прикреплю пару скринов и небольшое видео (потому что там гифка 🥳) моих результатов

И вкратце что я на данный момент обдумал:

Сессии
Каждая игра будет длится 10-15 минут, улучшения будут сохранятся только во время сессии, т.е. если вы умерли - все заново начинается (типичный подход в roguelike/roguelite играх), но, вероятно, я добавлю постоянные улучшения

Мутации (aka улучшения)
Из врагов будут выпадать апельсины (тот же опыт) и по достижению нового уровня будет возможность выбирать 1 из 3 мутаций, которые будут так или иначе влиять на игровой процесс. Это будет начало для "Апельсиновой Энергии", про которую я рассказывал в посте про мою целевую игру

Локации
Будет несколько локаций. На каждой будет:
- Как минимум 2 обычных врага со следующими характеристиками:
- Низко-средний уровень здоровья (HP), средняя скорость, низкий урон, ближний бой.
- Низкий уровень здоровья (HP), высокая скорость, атака роем, низкий урон, ближний бой.

- Как минимум 2 необычных врага со следующими характеристиками:
- Низкий уровень здоровья (HP), средняя скорость, высокий урон, взрывной.
- Высокий уровень здоровья (HP), медленная скорость, средний урон, специальная атака, ближний бой.
- Средний уровень здоровья (HP), средняя скорость, средний урон, специальная атака, дальний бой.

- Как минимум 1 редкий враг:
- Средний уровень здоровья (HP), высокая/средняя скорость, средне-высокий урон, специальная атака, особая способность, дальний бой / ближний бой.

- Босс каждые 5 минут:
- Высокий уровень здоровья (HP), средняя скорость, высокий урон, 2 специальные атаки, особая способность (возможно, призывает своих миньонов).

В локации я хочу воплотить идею из моей целевой игры, т.е. сначало все было мило-красочно (Луг, зайчики, коровы, милые животные, все зелено и ярко), потом Mr. Barashek подорвал станцию и все стало плохо (Радиационная локация, мутировавшие враги, все загрязнено и в темных тонах)

#ritkarampage
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
День 48

Вчера начал смотреть плейлист от Branno по клону Vampire Survivors, пока что особо ничего полезного не почерпнул, т.к. только начало, но я надеюсь увидеть что-то очень полезное именно с точки зрения улучшений, левелинга, опыта и увеличивающейся сложности по ходу игры

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

Вот будет улучшение "двойные пули" (чисто теоретически) и возникают следующие вопросы/мысли:
- получается пуль будет в 2 раза больше и урон собственно тоже в 2 раза больше. Ок, тут можно сделать "пуль в два раза больше, урон от каждой х0.7", в итоге урон будет х1.4, что в принципе обычная вещь, а дальше?
- Пуль будет в 2 раза больше, получается что если кролик умирает от первой пули, то вторая пуля летит дальше и это уже совсем другой разговор, сейчас объясню

Есть два врага, у каждого по 1 ХП, и есть персонаж с оружием, предположим есть такие ситуации:

№1 Урон оружия равен 2 ХП, пуля одна и не проходит насквозь - получается первый враг умирает, а второй идет дальше и толпа будет душить персонажа, даже если у него 999 урона с выстрела

№2 Урон оружия равен 1 ХП, пули две и они не проходят насквозь - получается два врага умирает, и эффективность оружия становится в два раза больше, а эффективность первого оружия остается такая же

Казалось бы все норм, один вариант для жирных врагов, второй - для толп. Но теперь вопрос как правильно сбалансировать врагов, когда и по сколько их спавнить? Какие типы врагов спавнить? И так далее

Короче вопросов по разработке и по pixel art'у нету, зато теперь миллиард вопросов по геймдизайну

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

#ritkarampage
🔥2
Media is too big
VIEW IN TELEGRAM
День 49

Вчера занимался тремя вещами

Глянул несколько видео от Branno с того плейлиста, сейчас я на 10 видео - оно про опыт, как раз то, что нужно. На самом деле качество всех видео в его плейлисте просто.. ужаснейшее, он почти ничего не объясняет, качество картинки - ужас, качество звука - ужас, скорость разговора и подача материала - абсолютно неуместно быстрая, качество кода - просто ужаснейшее.. Ну, ничего не поделать. Сейчас я досмотрю этот плейлист, а потом продолжу с тем курсом с Udemy про 2D Survivors Like Game. Я просто повелся на комментарии под первым видео (прикрепил скрин), ну и теперь смотрю каждый видос на х2 скорости + перемотка, чтобы дойти до полезного. Конечно я уже больше знаю чем большинство смотрящих тот плейлист, но.. курс объективно не очень, автору естественно спасибо, что-то полезное я почерпнул точно, но смотреть больно, а еще больнее знать, что много будущих разработчиков будут так же говнокодить и усложнять на ровном месте

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

И, самое главное - разработка. Теперь камера не выходит за границы арены, а сама арена теперь больше примерно в 2-3 раза. Наконец-то сделал ходьбу во время стрельбы, раньше можно было только стоять и стрелять, а при беге оружие пряталось, теперь же есть что-то среднее - медленная ходьба с возможностью стрельбы. Ну и собственно последнее изменение - границы арены, теперь за арену выйти нельзя, так что никто не увидит этой серой зоны без графики 👀

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

#pixelart #godot #разработка #ritkarampage
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1
День 50

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

Но, в любом случае, немного я почитаю про него, нашел пару ресурсов полезных так или иначе на первый взгляд

Аусхестов геймдизайн - дофига материала и, вроде как, очень полезного. Особенно мне будет полезны главы "Теория" и "Баланс"
GDCuffs.com - как устроены игры и их разработка, особенное внимание приделяется геймдизайну, для меня будет очень полезно "Баланс" и "Экономика"

Ну и на будущее сохранил несколько книг, мало ли когда-то возьмусь более серьёзно за это, вот названия:

1. Разработка игр и теория развлечений
2. Геймдизайн. Как создать игру, в которую будут играть все

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

Планирую сделать следующим образом - у меня будет спавнер мобов, в который я закину настройки. То есть я распишу на каждую минуту то, какие мобы будут спавниться, сколько и т.д. Спавнер будет принимать массив настроек, т.к. если на каждую минуту расписывать, то это уже минимум 10 настроек нужно, так что массив тут нужен

Настройки будут примерно следующие:
1. Начальное время
2. Конечное время
3. Кол-во
4. Уровень
5. Враг
6. Задержка спавна

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

Начальное время - с этого времени будут появляться враги
Конечное время - с этого времени эти враги не будут появляться
Кол-во - кол-во врагов, которые будут появляться за раз
Уровень - уровень врагов, которые будут появляться
Враг - собственно сам враг, который будет спавниться
Задержка спавна - скорость, с которой будут спавниться мобы, например 0.1 секунда задержки это 10 врагов в секунду

#gamedesign #ritkarampage
🔥2
День 51

Я НАШЕЛ.. правильный вариант как делать архитектуру проектов в играх, в особенности в Godot - композиция. Я откладывал уже пару недель видео "Using Composition to Make More Scalable Games in Godot" (да-да, прокрастинация, я с вами). Вы не представляете насколько я рад, меня этот вопрос мучал почти два месяца, с самого начала разработки и тут.. это видео как манна небесная, камень с плеч

Если говорить более в абстрактном техническом плане - это композиция aka Single Responsibility Principle из принципов программирования SOLID. Очень полезно придерживаться, но только когда в этом есть смысл (приходит с опытом)

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

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

Я писал про то, что буду проходить дальше курс на юдеми про 2D Vampire Survivors like game, он у меня уже куплен был и все такое.. вы не поверите, это курс от того чела с видео на ютубе (в первом абзаце про это писал), и он там все четко делает, просто идеальную архитектуру с заделом на будущее, мотивации теперь у меня хоть отбавляй 🔥

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

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

P.S. Пост как обычно, за вчера

#godot #разработка #ritkarampage
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
День 52

Вчера продолжил смотреть курс на юдеми.. не могу нарадоваться ему, просто глаза открываются каждые 10 минут

Он показал интересную вещь - автотайлинг, т.е. настраиваемое автоматическое создание игровой местности (пол, кусты и т.д.), вот тут показывают как +- этим пользоваться, очень полезная функция. Можно настроить вероятность появления того или иного блока, например у нас есть три спрайта для земли - Пустая земля, земля с камушками и земля с кактусом

Для пустой земли мы даём probability (вероятность) 20, земле с камушками даём probability 4, а земле с кактусом - 1. И теперь когда мы рисуем нашу местность с помощью тайлмапа, то у нас вероятность 20/25 (80%) что будет нарисована пустая земля, 4/25 (16%) что будут камушки на земле и 1/25 (4%) что будет кактус, и это просто нереально удобно

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

Еще я начал разбирать очень необычную и, пока что, непонятную для меня вещь - разную работу с векторами и немного формул с математики. Например вчера я сделал камеру плавной с помощью кода, формулы и векторов (вот гайд), получилось очень классно (в видео к посту покажу). Для плавности камеры использовал вот такой кусок кода в скрипте камеры:
global_position = global_position.lerp(target_position, 1.0 - exp(-delta * 10))


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