День 54
Вчера обустроился на новом месте, раскладывать вещи на свои места это, как оказалось, занимает еще так же времени как и переезд😢
Последние дни как-то прогресса визуального вот такого чтобы показать нету, немного грустно от этого, но я понимаю, что лучше я щас переделаю немного архитектуру проекта, подразберусь в новых и старых вещах, а потом все пойдет как по маслу уже
Вчера просмотрел и "обработал" несколько видео с курса, задал вопрос под одной из лекций и.. понаходил несколько просто невероятно полезных вопросов-ответов от других людей (прикреплю парочку с них к посту)
Одно из наиболее полезных - если искать ноды через
Раньше я как делал - один раз получал ноду игрока и дальше её использовал, например:
Или как-то так:
И эти подходы выше означали, что если нода игрока (читать как "игрок") пропадала и появлялся новый игрок - то все сломалось бы, потому что старый игрок пропал, а новый не назначился. А с помощью методов групп я могу каждый раз получать "свежего" игрока и быть уверен в том, что это то, что мне нужно
Еще прикреплю видео своего мини рабочего места👀
#godot #ritkarampage #разработка
Вчера обустроился на новом месте, раскладывать вещи на свои места это, как оказалось, занимает еще так же времени как и переезд
Последние дни как-то прогресса визуального вот такого чтобы показать нету, немного грустно от этого, но я понимаю, что лучше я щас переделаю немного архитектуру проекта, подразберусь в новых и старых вещах, а потом все пойдет как по маслу уже
Вчера просмотрел и "обработал" несколько видео с курса, задал вопрос под одной из лекций и.. понаходил несколько просто невероятно полезных вопросов-ответов от других людей (прикреплю парочку с них к посту)
Одно из наиболее полезных - если искать ноды через
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, а составляет
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, четко🐸
Хотел с вами поделиться тем, что математика в программировании НЕ нужна.. если не касаться игр и ИИ, поэтому расскажу почему она мне понадобилась спустя 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" надо просто вызвать функцию
Зачем же тогда я разбираю это, если я и без этого смогу работать? Потому что я твердо решил и понял, что я просто обязан отдавать себе отчет о каждой строчке кода, в первые два года работы программистом я что-то делал, и оно работало, но я не понимал как и почему, и, конечно же, у меня еще был синдром самозванца в том числе из-за этого
И с того момента, как я начал отдавать отчет о КАЖДОЙ строчке, которую я пишу, я начал намного быстрее и лучше работать работу. Это правда очень сложно, потому что хоть это делать с самого начала или же начать отдавать отчет спустя пару лет - в любом случае придется разбирать каждое новое слово, каждый новый алгоритм действий, нельзя пропускать непонятные слова в документации и гайдах и так далее
И я уверен, что в ближайшем будущем мне пригодятся эти знания, когда мне не будет достаточно встроенных функций и мне нужно будет сделать что-то 💫болиелименее💫 специфическое, я уже буду знать хотя бы в какую сторону копать. Самое главное это знать что что-то есть и +- понимать как оно работает, заучивать это гиблое дело в любой сфере как я считаю
Я очень хотел еще написать пост про тригонометрию и о формуле поворота вектора, но передумал, лучше вам не лезть в этот ад😦
Видео с текущим состоянием игры прикрепил и.. я наконец-то сменил в программе для монтажа кол-во кадров с 30 до 60, то есть два месяца я тупо выкладывал видео в 30 кадров где кровь из глаз при просмотре, ну не гений ли я
#godot #ritkarampage #разработка
Вчера глянул много видео по курсу и все так же продолжаю перерабатывать постепенно свой проект
Пока что есть прогресс - сделал шаг назад, кролики теперь появляются не в поле зрения персонажа, таким образом игрок не видит как враги спавнятся. Я не хотел так делать изначально, думал что просто случайное появление врагов на арене вокруг персонажа будет приемлемым, но, все-таки, не очень оно хорошо получается щас, может в будущем переделаю
Так же кролики могут и появляются за пределами арены, прыгают по.. воде и не доходят до арены, потому что там граница арены, которая не впускает и не выпускает врагов, думаю через пару видео в курсе он покажет как это сделать правильно, потому что щас у меня, как мне кажется, дичайший костыль
А, ну да, как я мог забыть - я вспоминал математику и подробно разбирал разные действия с векторами, для этого понадобилась та самая теорема Пифагора (банальщина) и.. тригонометрия - проделки настоящего дьявола
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
Вчера наконец-то пошел прогресс - начал заниматься системой опыта. Все еще не до конца понимаю как и когда правильно разбивать составляющие игры на маленькие частички, которые занимаются только своим делом и все, но, думаю, скоро произойдет "щелчок"
Пока что с разработки только глянул видео и разобрал как правильно сделать базовую систему опыта, чтобы где-то хранить этот самый "опыт" и, когда поднимаем "опыт" подавать сигналы менеджеру опыта, где он и хранится
Немного позанимался пиксель-артом вчера - нарисовал огрызки апельсина
Еще не знаю какой из них использовать, нужно глянуть как оно в игре будет смотреться
В 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 и т.п., сейчас же я сделал универсальную сцену
Еще сделал компонент дропа с врагов, тоже универсальный. Та и вообще все компоненты будут универсальными, чтобы их можно было переиспользовать, обожаю композицию🔥
Компонент дропа с врагов взаимодействует с
Также сигнал
Таймлапс разработки и пиксель-арта залью на ютуб, а пару микро видео с результатами прикреплю как обычно к посту
В одном показываю как я игрался с
По кадрам (около 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
Вчера переделал систему здоровья. Теперь она ни к кому не относиться напрямую и её можно использовать для абсолютно любого объекта/сцены/врага и т.д.
Как было раньше - я просто каждому объекту прописывал кол-во жизней, функцию 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
Сегодня был по большей части день отдыха от учебы (но все так же день работы
Посмотрел несколько небольших видео по разработке на ютубе, глянул как делать интересные партиклы (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 и связывать всякие такие компоненты между собой. С каждым днем всё больше и больше у меня проявляется картина архитектуры и того, как можно реализовать ту или иную механику
Я конечно еще не супер эксперт в композиции, но в голове сейчас вырисовывается на будущее такое - например у нас есть компонент жизней, добавим компонент "статус менеджер" и "статус яд" соединим их вместе и "статус яд" будет вызывать
Также создал новый компонент для худа игры -
В курсе очень большой упор делается на осознание того, что не надо сразу полностью идеально доделывать одну вещь, сделал часть - проверил, подумал, сделал вторую часть - проверил, подумал что делать дальше и куда его тыкать. А то я раньше как брался за что-то, например за оружие - я сразу пытался все к нему приделать, и эффекты, и продвинутую логику, и туда и сюда, но это занимало много времени и в любом случае потом приходилось какую-то часть переписывать. Естественно это из-за недостатка опыта в основном, но ошибок легче избежать, когда разбиваешь задание на небольшие кусочки (я же так всегда и делаю в веб-разработке, сфигали я тут как ребёнок это делаю..🤔 )
Прикреплю небольшое видево про прогресс бар, а завтра, вероятно, будет что-то про улучшение худа и подготовку к системе улучшений, жду не дождусь уже следующего дня🕺
P.S. подлаги в игре из-за перегрева ноута (троттлит проц), не могу его отнести никак в ремонт, потому что это с 9 утра до 17 вечера придётся ждать, а это только в субботу так получится, когда не будет работы
#ritkarampage #godot #разработка
Сегодня изучал как правильно делать компоненты 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 дней попытаюсь уделить времени на геймдев хотя бы на пару часов больше, надо разгоняться😁
Вчерашние посты уже как родные
Будем считать каждый месяц за 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
День 61
Сегодня разбирался в том, как делать улучшения, как их правильно показывать и узнал пару вещей про работу с UI
Завтра думаю рабочие улучшения уже будут готовы и покажу демку, а также обновлю игру на itch.io, чтобы вы могли поклацать последнюю версию
Курс реально мощный, но всё равно нужно будет обдумать многие вещи самостоятельно и придумать как их правильно реализовать
Например делать не просто какие-то улучшения (мутации) на "стреляете на 10% быстрее" или же "двигаетесь на 20% быстрее" и т.п., нужно обязательно разбавить чем-то более-менее уникальным, потому что, как мне кажется, вот это все числодрочерство очень редко где бывает уместно, оно просто никак не меняет геймплей, ну вообще. А вот если будет условная мутация "апельсиновый рывок/перекат" - то это уже будет менять геймплей, можно будет уворачиваться от врагов, которые делают разгон и от них обычным передвижением тяжело будет увернуться, а в некоторых случаях и вовсе невозможно (но это нужно будет компенсировать чем-то, игра то честной должна оставаться всегда)
#godot #ritkarampage #разработка
Сегодня разбирался в том, как делать улучшения, как их правильно показывать и узнал пару вещей про работу с UI
Завтра думаю рабочие улучшения уже будут готовы и покажу демку, а также обновлю игру на itch.io, чтобы вы могли поклацать последнюю версию
Курс реально мощный, но всё равно нужно будет обдумать многие вещи самостоятельно и придумать как их правильно реализовать
Например делать не просто какие-то улучшения (мутации) на "стреляете на 10% быстрее" или же "двигаетесь на 20% быстрее" и т.п., нужно обязательно разбавить чем-то более-менее уникальным, потому что, как мне кажется, вот это все числодрочерство очень редко где бывает уместно, оно просто никак не меняет геймплей, ну вообще. А вот если будет условная мутация "апельсиновый рывок/перекат" - то это уже будет менять геймплей, можно будет уворачиваться от врагов, которые делают разгон и от них обычным передвижением тяжело будет увернуться, а в некоторых случаях и вовсе невозможно (но это нужно будет компенсировать чем-то, игра то честной должна оставаться всегда)
#godot #ritkarampage #разработка
❤2🔥1
Media is too big
VIEW IN TELEGRAM
День 62
Вчера плотненько занялся разработкой, много чего сделал интересного
Сначала сделал фундамент с логикой для повышения уровней - сделал UpgradeManager, который слушает новый сигнал "level_up" от ExperienceManager'а и потом создает UpgradeScreen, в который передаются возможные улучшения на данный момент (пока что все улучшения, а их аж.. одно) и уже отрисовываются нужные карточки
Пока что я не заморичиваюсь сильно над визуалом, самое главное щас сделать полностью функциональную игру, в которую можно сыграть от начала и до конца, а потом уже добавлять всякие эффекты, больше анимаций и т.д.
Кстати в прошлом посте писал что постараюсь не делать улучшений типа "на 10% быстрее стрельба" и все такое, так что я слово дал я слово забрал - улучшение на 10% скорости стрельбы уже присутствует👀
Конечно я потом это все переделаю, добавлю нормальные улучшения, которые влияют на геймплей, но, вероятно, обычных "числовых" тоже не избежать, надо будет постараться как-то это обыграть хотя бы визуально. Например если выбрать улучшение "быстрое передвижение" - то у персонажа ноги преображаются, а не только какие-то скрытые проценты, с оружием так же само
Вообще, я планирую сделать два типа улучшений, как и говорил ранее
1 - мутации для персонажа, в основном это будет что-то простое числовое, но пару навыков я тоже туда закину, например тот же самый уворот-кувырок или же стрельба во время бега (а не только во время ходьбы)
2 - улучшения для оружия текущего. Если брать пистолет, то очевидно чего ему не хватает - пуля одна, урона средне, поражает только одного врага (или нескольких, если прям в них влететь, но это не считается 👀), не проходит насквозь. Так что улучшения, вероятно, будут похожи на:
- Двойной ствол - дополнительная пуля, но какой ценой? | Вторая пуля, но медленнее движение во время стрельбы и сама стрельба немного медленнее
- Разрывные пули - взрывы! не поранься | При попадании во врага пуля будет взрываться, нанося урон в небольшом радиусе. Взрыв наносит урон игроку тоже
И все в таком духе, обязательно планирую менять то, как оружие выглядит, когда улучшение выбрано
Я залил актуальную версию игры на itch.io, поклацать можно тут - https://sundwell.itch.io/ritka-rampage
Краткое видео-превью тоже прикрепляю, как всегда
#godot #ritkarampage #разработка
Вчера плотненько занялся разработкой, много чего сделал интересного
Сначала сделал фундамент с логикой для повышения уровней - сделал UpgradeManager, который слушает новый сигнал "level_up" от ExperienceManager'а и потом создает UpgradeScreen, в который передаются возможные улучшения на данный момент (пока что все улучшения, а их аж.. одно) и уже отрисовываются нужные карточки
Пока что я не заморичиваюсь сильно над визуалом, самое главное щас сделать полностью функциональную игру, в которую можно сыграть от начала и до конца, а потом уже добавлять всякие эффекты, больше анимаций и т.д.
Кстати в прошлом посте писал что постараюсь не делать улучшений типа "на 10% быстрее стрельба" и все такое, так что я слово дал я слово забрал - улучшение на 10% скорости стрельбы уже присутствует
Конечно я потом это все переделаю, добавлю нормальные улучшения, которые влияют на геймплей, но, вероятно, обычных "числовых" тоже не избежать, надо будет постараться как-то это обыграть хотя бы визуально. Например если выбрать улучшение "быстрое передвижение" - то у персонажа ноги преображаются, а не только какие-то скрытые проценты, с оружием так же само
Вообще, я планирую сделать два типа улучшений, как и говорил ранее
1 - мутации для персонажа, в основном это будет что-то простое числовое, но пару навыков я тоже туда закину, например тот же самый уворот-кувырок или же стрельба во время бега (а не только во время ходьбы)
2 - улучшения для оружия текущего. Если брать пистолет, то очевидно чего ему не хватает - пуля одна, урона средне, поражает только одного врага (или нескольких, если прям в них влететь, но это не считается 👀), не проходит насквозь. Так что улучшения, вероятно, будут похожи на:
- Двойной ствол - дополнительная пуля, но какой ценой? | Вторая пуля, но медленнее движение во время стрельбы и сама стрельба немного медленнее
- Разрывные пули - взрывы! не поранься | При попадании во врага пуля будет взрываться, нанося урон в небольшом радиусе. Взрыв наносит урон игроку тоже
И все в таком духе, обязательно планирую менять то, как оружие выглядит, когда улучшение выбрано
Я залил актуальную версию игры на itch.io, поклацать можно тут - https://sundwell.itch.io/ritka-rampage
Краткое видео-превью тоже прикрепляю, как всегда
#godot #ritkarampage #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
День 63
Вчера переделал систему нанесения урона персонажу, урон будет наносится не каждую секунду в зависимости от кол-ва врагов рядом с персонажем, а как обычно - от касания
Решение я принял это потому, что будут враги, которые будут делать разгон (например корова/бык) или тот же самый дикобраз, который будет стрелять в Ритку, в принципе почти во всех случаях нужен моментальный урон, а не урон в секунду
Но пока что есть небольшой баг - если враг постоянно касается персонажа, то урон не наносится все время или интервалами, т.к. на данный момент я отслеживаю только когда кто-то зашёл в зону коллизии игрока и тогда наносится урон, а чтобы нанести урон ещё раз - нужно чтобы враг вышел из зоны коллизии персонажа и зашёл обратно
В общем похожая проблема уже была в прошлой игре про рыцаря, так что я знаю как это фиксить. Решу это немного иначе, чем было в игре про рыцаря - я добавлю в HitboxComponent "перезарядку", то есть когда тот же кролик будет наносить урон, то будет запускаться таймер на условных пол секунды во время которой будет отключаться слой соприкосновения с персонажем и спустя эти пол секунды этот слой будет снова включаться и коллизия Ритки снова обнаружит этот хитбокс будто бы он только что зашёл в его зону
Сложно какие-то технические вещи нормально объяснять, особенно когда сам ещё далеко не эксперт 😅
#ritkarampage #разработка #godot
Вчера переделал систему нанесения урона персонажу, урон будет наносится не каждую секунду в зависимости от кол-ва врагов рядом с персонажем, а как обычно - от касания
Решение я принял это потому, что будут враги, которые будут делать разгон (например корова/бык) или тот же самый дикобраз, который будет стрелять в Ритку, в принципе почти во всех случаях нужен моментальный урон, а не урон в секунду
Но пока что есть небольшой баг - если враг постоянно касается персонажа, то урон не наносится все время или интервалами, т.к. на данный момент я отслеживаю только когда кто-то зашёл в зону коллизии игрока и тогда наносится урон, а чтобы нанести урон ещё раз - нужно чтобы враг вышел из зоны коллизии персонажа и зашёл обратно
В общем похожая проблема уже была в прошлой игре про рыцаря, так что я знаю как это фиксить. Решу это немного иначе, чем было в игре про рыцаря - я добавлю в HitboxComponent "перезарядку", то есть когда тот же кролик будет наносить урон, то будет запускаться таймер на условных пол секунды во время которой будет отключаться слой соприкосновения с персонажем и спустя эти пол секунды этот слой будет снова включаться и коллизия Ритки снова обнаружит этот хитбокс будто бы он только что зашёл в его зону
Сложно какие-то технические вещи нормально объяснять, особенно когда сам ещё далеко не эксперт 😅
#ritkarampage #разработка #godot
🔥1
Media is too big
VIEW IN TELEGRAM
День 64
Сегодня переделал логику экрана "смэрти" и добавил экран "победы" (больше на заглушку пока что похоже), который появляется, когда время на арене подходит к концу, на данный момент это ровно 1 минута. То есть минута прошла и если выжил - то выиграл, но я это поменяю в будущем, потому что в R.I.T.K.A. Rampage победой будет считаться убийство всех боссов. А так как последний босс будет появляться как раз в конце таймера для арены - то конец таймера будет запускать проверку потипу "а боссы еще остались? Нет? Тогда победа"
Еще, что более важно, я пофиксил баг о котором говорил в прошлом посте, где если враг не выходит из игрока, то игрок не получает постоянно урон. Я бы даже сказал что я не пофиксил, а прям улучшил логику HitboxComponent и HurtboxComponent и прям горжусь этим 🥲
Как было раньше - враг подошел к персонажу - персонаж получил урон один раз, теперь, пока враг не выйдет из зоны коллизии персонажа то урон не будет наноситься
Как стало - враг подошел к персонажу и вот что происходит:
1. HitboxComponent запушился в массив
2. В HurtboxComponent каждый кадр циклом бежим по вышеназванному массиву и, если Hitbox не на "перезарядке" (это новое), то наносим урон и ставим на перезарядку хитбокс, иначе - ничего не делаем
Вот кусок кода из HurtboxComponent
Я прям реально доволен этим решением
Завтра я планирую немного заняться пиксель-артом именно для игры (надо разнообразие вводить, а то разработка и разработка одна последнее время) и еще хочу попытаться нарисовать свой логотип вручную, а то лого, которое сейчас - это тот же чатГПТ сгенерил, пора бы уже и лого лично сделать. Как-то в будущем расскажу историю вообще своего никнейма, он у меня 💫сос мыслом💫, пришел к нему спустя много лет и мне супер нравится
К слову про игру - там в курсе уже скоро будут добавлять нового врага и логику спавна врагов (кто-то чаще, кто-то реже), так что мне тоже уже пора работать над новым врагом, у меня есть пару вариантов уже, а решение кого первым добавлять я доверю вам с помощью голосовалки ниже😏
#godot #ritkarampage #разработка
Сегодня переделал логику экрана "смэрти" и добавил экран "победы" (больше на заглушку пока что похоже), который появляется, когда время на арене подходит к концу, на данный момент это ровно 1 минута. То есть минута прошла и если выжил - то выиграл, но я это поменяю в будущем, потому что в R.I.T.K.A. Rampage победой будет считаться убийство всех боссов. А так как последний босс будет появляться как раз в конце таймера для арены - то конец таймера будет запускать проверку потипу "а боссы еще остались? Нет? Тогда победа"
Еще, что более важно, я пофиксил баг о котором говорил в прошлом посте, где если враг не выходит из игрока, то игрок не получает постоянно урон. Я бы даже сказал что я не пофиксил, а прям улучшил логику HitboxComponent и HurtboxComponent и прям горжусь этим 🥲
Как было раньше - враг подошел к персонажу - персонаж получил урон один раз, теперь, пока враг не выйдет из зоны коллизии персонажа то урон не будет наноситься
Как стало - враг подошел к персонажу и вот что происходит:
1. HitboxComponent запушился в массив
surrounding_hitboxes внутри HurtboxComponent2. В HurtboxComponent каждый кадр циклом бежим по вышеназванному массиву и, если Hitbox не на "перезарядке" (это новое), то наносим урон и ставим на перезарядку хитбокс, иначе - ничего не делаем
Вот кусок кода из HurtboxComponent
func _process(delta):
apply_damage()
func apply_damage():
for hitbox_component in surrounding_hitboxes:
if hitbox_component.is_reloaded():
health_component.damage(hitbox_component.damage)
damaged.emit(hitbox_component.damage)
hitbox_component.start_reloading()
Я прям реально доволен этим решением
Завтра я планирую немного заняться пиксель-артом именно для игры (надо разнообразие вводить, а то разработка и разработка одна последнее время) и еще хочу попытаться нарисовать свой логотип вручную, а то лого, которое сейчас - это тот же чатГПТ сгенерил, пора бы уже и лого лично сделать. Как-то в будущем расскажу историю вообще своего никнейма, он у меня 💫сос мыслом💫, пришел к нему спустя много лет и мне супер нравится
К слову про игру - там в курсе уже скоро будут добавлять нового врага и логику спавна врагов (кто-то чаще, кто-то реже), так что мне тоже уже пора работать над новым врагом, у меня есть пару вариантов уже, а решение кого первым добавлять я доверю вам с помощью голосовалки ниже
#godot #ritkarampage #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Немного инфы про врагов из голосовалки, чтобы понимать что к чему +-
Имена врагов, вероятно, еще будут изменяться
1. Explosive Bunny (Кролик-Камикадзе, Взрывокролик.. Взрывайка?)
ХП - 💔
Урон - 💥💥💥
Скорость - ⚡️⚡️
Описание - имеет жизней меньше, чем обычный кролик, но при смерти или соприкосновении с Риткой взрывается и наносит приличный урон по области
2. Stubborn Cow (Упертая корова)
ХП - ❤️❤️
Урон - 💥💥
Скорость - ⚡️
Описание - имеет приличное кол-во здоровья, двигается медленно, но имеет способность "Bull Rush", корова топчется на месте, берёт разгон и очень быстро бежит по прямой с увеличенным уроном. Урон при касании - слабый, при касании в разгоне - средне-сильный
3. Quill-Shot Porcupine (Дикобраз-иглострел)
ХП - ❤️💔
Урон - 💥
Скорость - ⚡️⚡️
Описание - имеет средне кол-во здоровья, постоянно двигается в сторону персонажа и держит дистанцию, не пытается соприкоснуться с Риткой. Имеет способность "Quill Shot" - периодически стреляет иглами в сторону персонажа на средней дистанции, которые наносят небольшой урон. При касании наносит минимальный урон
У меня есть еще идеи, но вот эти трое привнесут наибольшее разнообразие при внедрении
Если у кого есть идеи для врагов, способностей, улучшений или вообще чего-угодно - буду рад внедрить это в игру
#ritkarampage
Имена врагов, вероятно, еще будут изменяться
1. Explosive Bunny (Кролик-Камикадзе, Взрывокролик.. Взрывайка?)
ХП - 💔
Урон - 💥💥💥
Скорость - ⚡️⚡️
Описание - имеет жизней меньше, чем обычный кролик, но при смерти или соприкосновении с Риткой взрывается и наносит приличный урон по области
2. Stubborn Cow (Упертая корова)
ХП - ❤️❤️
Урон - 💥💥
Скорость - ⚡️
Описание - имеет приличное кол-во здоровья, двигается медленно, но имеет способность "Bull Rush", корова топчется на месте, берёт разгон и очень быстро бежит по прямой с увеличенным уроном. Урон при касании - слабый, при касании в разгоне - средне-сильный
3. Quill-Shot Porcupine (Дикобраз-иглострел)
ХП - ❤️💔
Урон - 💥
Скорость - ⚡️⚡️
Описание - имеет средне кол-во здоровья, постоянно двигается в сторону персонажа и держит дистанцию, не пытается соприкоснуться с Риткой. Имеет способность "Quill Shot" - периодически стреляет иглами в сторону персонажа на средней дистанции, которые наносят небольшой урон. При касании наносит минимальный урон
У меня есть еще идеи, но вот эти трое привнесут наибольшее разнообразие при внедрении
Если у кого есть идеи для врагов, способностей, улучшений или вообще чего-угодно - буду рад внедрить это в игру
#ritkarampage
🔥1