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

Вчера был нагруженный день.. со стороны переезда в другую квартиру 👀

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

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

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

Вчера обустроился на новом месте, раскладывать вещи на свои места это, как оказалось, занимает еще так же времени как и переезд 😢

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

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

Одно из наиболее полезных - если искать ноды через get_first_node_in_group или get_nodes_in_group, и, вероятно, для всех остальных методов для работы с группами реализован поиск через HashMap (нашел в сорс коде этот метод) и кеширования и это означает, что эти методы невероятно производительны и их можно вызывать каждый кадр (могу ошибаться, но видимо это и правда так)

Раньше я как делал - один раз получал ноду игрока и дальше её использовал, например:
var player: Node2D

func _ready():
player = get_tree().get_first_node_in_group('player')
...


Или как-то так:
@export var player: Node2D # и назначал это руками (не оч хорошо)


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

Еще прикреплю видео своего мини рабочего места 👀

#godot #ritkarampage #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
День.. а нет, еще рано для поста (или поздно)

Хотел с вами поделиться тем, что математика в программировании НЕ нужна.. если не касаться игр и ИИ, поэтому расскажу почему она мне понадобилась спустя 20 тыщ лет

Я вот коснулся игр, и тут вектора, тригонометрия, формулы 😢

Например теорема Пифагора, сумма квадратов катетов равна квадрату длины гипотенузы.. и шо дальше? Ща расскажу

В 2д игре у нас движение в четырёх направлениях, каждый шаг можно представить как вектор x; y. Например:

Вправо: вектор 1; 0 — скорость равна 1
Вверх: вектор 0; 1 — тоже скорость равна 1

Но что происходит, если мы идём сразу вправо и вверх? Вектор становится 1; 1, и тут в дело вступает теорема Пифагора. Скорость по диагонали уже не равна 1, а составляет sqrt(x^2 + y^2) = sqrt(2) ≈ 1.41. Получается, что персонаж на 41% быстрее двигается по диагонали - и это баг (если так не задумано изначально, что вряд-ли)

P.S. sqrt = square root (корень квадратный)

Как это починить? Нужно нормализовать вектор движения, чтобы его длина не превышала 1. Для этого есть надо вычислить коэффициент масштабирования и применить его для нашего вектора, т.е. для x и для y

k (коэффициент) = макс. скорость, в нашем случае "1" разделить на "гипотенузу"

k = 1 / sqrt(2) ≈ 0.7071

И теперь применим коэффициент к координатам вектора движения (1, 1):

x' и y' - нормализованные вектора

x' = 1 * 0.7071 ≈ 0.7071
y' = 1 * 0.7071 ≈ 0.7071

Теперь, когда мы глянем модуль вектора (теорема Пифагора), он снова будет равен 1, и персонаж будет двигаться с нормальной скоростью по всем направлениям

Для наглядности еще раз заюзаем теорему Пифагора с новыми значениями

Нормализованный вектор (0.7071, 07071)

0.7071^2 = 0.5

sqrt(0.5 + 0.5) = sqrt(1) = 1, скорость не будет больше 1, четко 🐸
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1😁1
Media is too big
VIEW IN TELEGRAM
День 55

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

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

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

А, ну да, как я мог забыть - я вспоминал математику и подробно разбирал разные действия с векторами, для этого понадобилась та самая теорема Пифагора (банальщина) и.. тригонометрия - проделки настоящего дьявола 😢. Мне абсолютно необязательно это все изучать, т.к. есть встроенные функции для этого в каждом игровом движке, например для поворота вектора на угол "X" надо просто вызвать функцию rotated(X), например чтобы повернуть вектор на 90 градусов - то это будет Vector2.RIGHT.rotated(90), где Vector2.RIGHT это единичный вектор, указывающий направо (1, 0)

Зачем же тогда я разбираю это, если я и без этого смогу работать? Потому что я твердо решил и понял, что я просто обязан отдавать себе отчет о каждой строчке кода, в первые два года работы программистом я что-то делал, и оно работало, но я не понимал как и почему, и, конечно же, у меня еще был синдром самозванца в том числе из-за этого
Синдром самозванца — это психологический феномен, при котором человек сомневается в своих силах и чувствует себя «мошенником», несмотря на доказательства своих достижений и навыков. Его не покидает ощущение, что та точка, где он оказался, — это случайность, и его вот-вот разоблачат и осудят


И с того момента, как я начал отдавать отчет о КАЖДОЙ строчке, которую я пишу, я начал намного быстрее и лучше работать работу. Это правда очень сложно, потому что хоть это делать с самого начала или же начать отдавать отчет спустя пару лет - в любом случае придется разбирать каждое новое слово, каждый новый алгоритм действий, нельзя пропускать непонятные слова в документации и гайдах и так далее

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

Я очень хотел еще написать пост про тригонометрию и о формуле поворота вектора, но передумал, лучше вам не лезть в этот ад 😦

Видео с текущим состоянием игры прикрепил и.. я наконец-то сменил в программе для монтажа кол-во кадров с 30 до 60, то есть два месяца я тупо выкладывал видео в 30 кадров где кровь из глаз при просмотре, ну не гений ли я

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

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

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

Немного позанимался пиксель-артом вчера - нарисовал огрызки апельсина 👀

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

В Vampire Survivors есть три типа выпадающего опыта - синий, зелёный и красный кристаллы (уже видимо больше, но это от арены зависит). Синий это условно 1 единица опыта, зелёный - 5, красный - 20. Так вот я планирую сделать что-то похожее, только не просто менять цвет апельсинов, а делать их полноценнее, т.е. огрызок будет давать 1 опыт, половинка - 5, а целый апельсин - 20, думаю так будет прикольно. Еще я их немного анимирую, думаю просто добавить небольшое "пошатывание", чтобы апельсины влево-вправо на 10-15 градусов поворачивались и говорили этим "подними меня" 😅

Ну и немного напомню суть прокачки

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

Единственное, что я еще не придумал - это прокачка и разновидности оружия. Мутации это все классно, но если логически судить - то они применимы только к Ритке (персонаж игры), а к оружию еще надо подумать

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

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


Я уверен много кто из вас играл в разные игры, где были критические удары или шанс уворота, возьмём к примеру самую токсичную игру на планете (возможно даже во всех мультивселенных) - Dota 2

У некоторых героев шанс на срабатывание пассивной способности псевдослучаен, например вот есть Баратрум (aka Spirit Breaker), у него есть пассивная способность, которая с определённым шансом может оглушить врага, возьмём к примеру 20% шанс на атаку с оглушением (дальше баш). Чисто теоретически, каждые 5 ударов должен происходить баш, но почему многие игроки жалуются, что с шансом 20% на баш бывает 2 или даже иногда 3 подряд баша, и это не позволяет выжить ни при каких условиях

Как это работает - игроку показывается минимальный шанс, например Баратрум еще ни разу не бил врагов - у него шанс сейчас на баш 20%, он делает первый удар - шанс увеличивается до 25%, бьёт дальше и шанс увеличивается бесконечно, пока не сработает атака с башем, после этого шанс возвращается к изначальному значению в 20% и все заново. Не буду рассказывать как это использовать и зачем, просто постарался объяснить суть псевдорандома

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

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

Вчера переделал систему здоровья. Теперь она ни к кому не относиться напрямую и её можно использовать для абсолютно любого объекта/сцены/врага и т.д.

Как было раньше - я просто каждому объекту прописывал кол-во жизней, функцию take_damage, проверки на if health <= 0 и т.п., сейчас же я сделал универсальную сцену HealthComponent. Этот компонент отвечает за.. жизни, и всё, ничего более. Указываем максимальное здоровье, текущее здоровье, функцию для "отнятия" здоровья, в моём случае это func damage(amount: float), когда хп == 0 - я посылаю сигнал died, и все, кто слушали этот сигнал, могут по-своему реагировать на него, расскажу про это немного ниже

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

Компонент дропа с врагов взаимодействует с HealthComponent, а точнее он прослушивает событие died, и когда это событие "всплывает" - то компонент дропа создаёт нужный предмет, в данном случае это огрызок апельсина 👀

Также сигнал died от компонента жизней прослушивает и игрок, когда жизней становиться 0 - то игра заканчивается (пока что), что логично. Это очень удобно, скрипт персонажа просто настраивает взаимодействие между компонентами, а то раньше и логика стрельбы, и логика смерти и еще много чего другого было описано прям в скрипте персонажа, что не есть удобно, и, как по мне, вообще неправильно если придерживаться принципов программирования (в данном случае S - Single Responsibility Principle)

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

В одном показываю как я игрался с lerp (линейная интерполяция) для плавности движения Ритки, и обнаружил, что таким образом можно сделать движение на льду. Т.е. вместо моментального ускорения с "0" до "100%" условно за 1 кадр, можно сделать линейную интерполяцию с той формулой с экспонентой, и получится каждый кадр скорость будет экспоненциально расти, и будет что-то типа такого:
По кадрам (около 60 кадров в секунду обычно), приведу рассчет скорость от 0 до 100 на первые 10 кадров (за 10 кадров не набирается полная скорость)
1 - 9.516
2 - 18.126
3 - 25.971
4 - 33.177
5 - 39.857
6 - 46.116
7 - 52.048
8 - 57.735
9 - 63.248
10 - 68.647

И чем меньше число "роста" я туда запихну - тем меньше шаг увеличения/уменьшения скорости будет каждый кадр

Новые видео на канале:
- Таймлапс, рисую апельсин в стиле Pixel Art
- Делаю систему опыта
- Система здоровья и дропа вещей

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

Сегодня был по большей части день отдыха от учебы (но все так же день работы 🥲)

Посмотрел несколько небольших видео по разработке на ютубе, глянул как делать интересные партиклы (VFX / visual effects) с помощью текстур, как раз я хотел к выпавшим апельсинам добавить сияние, чтобы они не выглядели так "плоско" как сейчас

Т.к. показывать по разработке сегодня нечего - то прикреплю пару картинок с капибарой, которые я пытался сгенерить в ChatGPT 4o. Запрос был таков, чтобы сделать две капибары - одну милую, а другую страшную с светящимися глазами, оружиями и всем вот таким. Некоторые запросы были чтобы Dall-E сгенерил по одной капибаре на одной картинке, а некоторые - чтобы с одной части была милая капибара, а с другой страшная, ну и в разных стиля, где-то более реалистично, где-то более минималистично

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

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

Я конечно еще не супер эксперт в композиции, но в голове сейчас вырисовывается на будущее такое - например у нас есть компонент жизней, добавим компонент "статус менеджер" и "статус яд" соединим их вместе и "статус яд" будет вызывать HealthComponent.damage(...) каждую секунду, или же будет посылать какой-то сигнал. Получается "статус яд" отвечает за одно, а компонент жизней - только за менеджинг жизней, получение урона и посылание сигналов "урон получен" или же "смэрть", звучит супер офигенно и 💫переиспользуемо💫

Также создал новый компонент для худа игры - ExperienceBar, к нему мы подсоединяем ExperienceManager и начинаем слушать его новый сигнал "опыт изменён", и теперь каждый раз, когда текущий опыт и макс. опыт для нового уровня меняется - ExperienceManager посылает сигнал "опыт изменён" и прогрес бар меняет своё значение. С каждого "огрызка" апельсина все еще даётся 1 единица опыта, для перехода на новый уровень нужно 5 опыта, потом 10, потом 15 и т.д., пока что схема супер простая чисто для теста

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

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

P.S. подлаги в игре из-за перегрева ноута (троттлит проц), не могу его отнести никак в ремонт, потому что это с 9 утра до 17 вечера придётся ждать, а это только в субботу так получится, когда не будет работы

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

Вчерашние посты уже как родные

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

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

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

Все любят числа, я тоже, поэтому небольшая статистика за прошедший месяц:

За этот месяц я занимался понемногу всем, но в основном изучал пиксель-арт и занимался разработкой игры R.I.T.K.A. Rampage. Немного времени ушло на придумывание идеи для этой и будущей игры и совсем немножко ушло на геймдизайн

На само "программирование"/разработку в этом месяце ушло 23 часа и 12 минут, на пиксель арт - 17 часов 15 минут, на брейншторминг - 5 часов 59 минут, на геймдизайн - 37 минут . Всего - 47 часов 5 минут, что аж на целую.. минуту больше чем за прошлый месяц (справедливости ради - за прошлые 31 дней, в этом месяце статистика за 29 дней)

Каждый день, за исключением 31 июля, 25 и 28 августа (учился ночью с 27 на 28 августа) я так или иначе занимался разработкой игр

Минимально уделенное время за день - 32 минуты 1 августа на пиксель-арт, максимальное - 3 часа 48 минут, это было воскресенье 25 августа, часть времени ушло на пиксель-арт, часть - на разработку

Продолжаю в том же духе, в следующие 30 дней попытаюсь уделить времени на геймдев хотя бы на пару часов больше, надо разгоняться 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1