1707332830129.jpg13 Кб, 539x285
Привет, анон, теперь тут будет тред моей всратой 2D фермы Жанр: 2D ферма для аутистоов Движок: Godo 933329 В конец треда | Веб
Привет, анон, теперь тут будет тред моей всратой 2D фермы

Жанр: 2D ферма для аутистоов
Движок: Godot csharp mono

Описание: можно будет выращивать помидорки, огурчики, делать закрутки и все такое. А сейчас нет нихуя, поэтому, пока что беру прицел на уровень "стардьюваля на минималках".
1707333220059.jpg34 Кб, 618x350
2 933330
Что есть из реализованного:
- Сетка игровых объектов поверх тайлмапы
- Инвентарь персонажа + инвентарь контейнера, можно теребить предметы туда-сюда
- Подбор/дроп предметов
- UI инвентаря, UI контейнера, хотбар
- Использование предметов в инвентаре по райткликту
- Использование райткликом активного предмета в хотбаре

Сегодня вот сделал первый предмет, Use которого ставит под курсор блок забора.
3 933335
Ну и говно братан, не думал пойти что-то полезное сделать?
4 933343
>>33329 (OP)
>>33330
Не плохо, выглядит приятно. Если не забросишь в течение недели то красавчик.

Этого >>33335 серуна не слушай, он порватка.
5 933590
Сделал скролл хотбара на колёсико, с условием что если выбран последний элемент хотбара - скролл выбирается первый элемент и аналогично назад

>>33343
Благодарю
6 933593
>>33329 (OP)
Пока говно, но желаю удачи!
изображение.png5 Кб, 281x271
7 933610
Запилил первую версию семян, теперь можно сажать
Ферма-аутиферма.mp411,5 Мб, mp4,
1152x648, 0:48
8 933632
Пока так
17074181904650.jpg56 Кб, 284x443
9 933633
>>33632
Поздравляю, ты уже сделал больше чем 50% постеров на этой доске, продолжай в том же духе.
10 933641
Список дальнейших действий в произвольном порядке.
- Добавить логику роста растений от времени или другого фактора
- Реакция растений на касание коллизии игрока
- добавить музыку из лесного эмбиэнта или чего-то такого, чтобы не так гумозно было тестить
- сделать губами "чпок" в микрофон и поставить это на звук подбора предметов, по-моему, это забавно
- описать класс размещаемого объекта - ресурса на карте, например, дерево или валун
- сделать инструмент с типом добывающего инструмента, типа топора или кирки
- реализовать возможность добычи ресурса инструментом
- какой-нибудь базовый крафт, крафт станция и все такое
11 933643
>>33593
Благодарю

>>33633
Забавно, вроде геймдев доска

>>33641
А, точно, ещё кошкодевочек можно завезти
12 933644
>>33329 (OP)
Сейвы сделай, анонче.
13 933647
>>33644
Точно, совсем забыл. Спасибо!

Правда, чувствую, натрахаюсь я с этим, ух бля
14 933649
>>33643

>кошкодевочек можно завезти


Это 99% успеха, делай ГГ милой кошкодевочкой и в принципе тебе простят многие огрехи.
15 933684
>>33647
Да не, если поймешь суть. Главное не делай хуйню на ресурсах, используй обычные текстовые файлы
16 934479
Завел телегу. https://t.me/nekofarming

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

Сразу скажу, на пиках кое где я ещё не размазал ответственность по классам. Так что там и try-out, проброс или отсутствие проброса параметров методов.

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

Закинул сюда свойство "Является инструментом" и реализую все инструменты типа мотыг, топоров, лопат и всего наследуясь именно от этого класса.

Пик 2. И самое вкусное в предметах - их реализация в готовом виде.

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

Имея ссылку на объект игрока, получаю окружение уровня, подготавливаю объект грядки и через менеджер уровня спавню его, возвращая true если все ок и предмет использован удачно, или же в случае неудачи false

Пик 3. От ItemUsable наследуется тип ItemConsumable, который потребляется при использовании.
Это всякие банки-склянки, еда, семена и все такое.

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

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

И вот из всего этого получается такое колдунство, что для создания нового предмета - достаточно натянуть новый спрайт и переопределить поведение при клике, без лишнего геморроя, что важно для программирования, и прочих запар
17 934530
Собственно, сделал "систему роста" растений.
Наброски класса растущего растения - пик 1.

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

Сама система - пик 3
Растение в каждом кадре дёргает свой метод Process, где происходит вызов попытки системы перевести своё состояние на следующий этап и выбросить оповещение, что стадия изменилась, в свою очередь класс растения поймает этот ивент и сменит спрайт.
2DFarm (DEBUG) 2024-02-11 20-25-22.mp44,1 Мб, mp4,
1152x648, 0:13
18 934531
>>34530
Собственно, работает так.
19 934539
>>34530
Ну и да, я понимаю что можно взять какой-нибудь готовый нюгет пакет стейт-машину, но хочется самому наговнокодить
2DFarm (DEBUG) 2024-02-11 22-18-16.mp44,1 Мб, mp4,
1232x704, 0:13
20 934568
Базовый сбор урожая готов
изображение.png3 Кб, 139x89
21 936251
Теперь кошкодевочка растит валерьянку
22 936265
>>36251
база
изображение.png34 Кб, 313x257
23 936297
Что ж, теперь будет реализовывать добычу древесины
изображение.png59 Кб, 536x361
24 936303
Деревья успешно разлетаются за два удара топором на три бревна
25 936566
>>36303
Уже лучше чем у котла за 5 лет.
26 936574
>>36251
>>36297
>>36303
Какая милота! И прогресс быстрый.
Если надо анончик, с радостью потестю на баги и т.п, пиши смело!
27 936683
>>36566
А кто это?

>>36574
Благодарю, после работы шлёпаю, если вообще время есть.

Как только выкачу что-то, что хотя бы можно будет тестить не в два клика - обязательно обращусь, ещё раз благодарю!
1708021639013.jpg183 Кб, 1016x1280
28 936684
Накидал принцип работы UI для крафтинга.

Не знаю, правда, как лучше сделать: Все в инвентаре крафтить, крафт станции или комбинированный вариант.
29 936685
Эх, как же хочется 2D художника, худенького, бледного, не очень требовательного, готового к правкам, работающему за спасибо и процент от будущих донатов, умелого, делающего качественно, с синяками под глазами, растрёпанными или неуложенными волосами, дабы вместе с ним(а лучше он сам) наклепать спрайтов для игрули.
30 936686

>Эх, как же хочется 2D художника


Они всем нужны, но их нету.
31 936688
>>36684
https://excalidraw.com/
Использую эту штуку для зарисовок
изображение.png87 Кб, 689x463
32 936751
Какое-то подобие крафта завёз
изображение.png69 Кб, 446x366
33 936755
>>36751
Пока что буду использовать как меню для быстрого получения вещей
Создаем штуки на некоферме.mp49,2 Мб, mp4,
1152x648, 0:25
34 936765
Собственно, запилил "съедание" ингредиентов для крафта из сумки. В первую очередь съедаются стопки предметов размером поменьше. Зачем? Не знаю.

У рецепта есть поля:
Результат
Количество
Массив требуемых предметов и их кол-во

При крафте валидируется наличие предметов в инвентаре и их количества, затем все считается магическим образом
Если все ок - забираем материалы и выдаем результат.
изображение.png41 Кб, 507x757
35 936771
Подзадрочил структуру прожекта, хоть какой-то порядок теперь.
36 936793
ОП, довольно неплохо! Вижу под капотом механики прорабатываешь хорошие, стак инвентаря, сетку размещения предметов. Главное не угасай, верю в тебя. Дерзай
37 936804
>>36793
Благодарю
38 937143
Захотел прикрутить тестовые анимации.
На использовании предметов жидко дристанул, потому что эффект должен наступать либо в середине, либо в конце проигрывания.

Пока ухватился за AnimationTree и его AnimationStarted/Finished + длину анимации в ms.

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

Худшие две вещи лично для меня это рисование пиксельных спрайтов и ебучая работа с анимациями.
1679714538835.png25 Кб, 1224x263
39 937152
>>37143
Там есть трек где можно вызывать функцию в любой момент анимации.
40 937160
>>37152
Гляну, спасибо

Может потом смогу это в виде кода сделать глянув на то что генератор выдаст
41 937166
Пока план унаследовать игрока от типа существо.

Там делать ссылку на собственное дерево анимаций и сделать ивент что анимация завершена

В Use методе предмета подвязывать к этому ивенту реализацию использования предмета и файрить нужную анимацию в базовом классе, вынесу реализацию действия в OnUse и дергать его на все тот же ивент AnimationFinished из Creature, после чего отписываться от события

Посмотрим короче
42 937167
>>37161 (Del)
Насмешил, всего-то на 4 кадра меньше типичного плейстейшн экспириенса
43 937171
Жена высказала желание нарисовать спрайты для стадий роста лука, луковых оладий и лукового супа

Говорю "хоть сегодня в игре будет луковый луп, все готово, ток нарисуй"

Ржёт надо мной из-за лукового лупа, а я выгоняю ее из ресторана
64784584584.jpg81 Кб, 1120x744
44 937288

>Жена


Я то думал ты один из нас... еще и няшную кошкожену сделал...
45 937300
>>37288
Да он пошутил же, по последней строчке понятно. Ну или это какой то юмор про тульп из геншина, не шарю
изображение.png9 Кб, 325x92
46 937303
Вроде даже работает
47 937306
Сделал отмену использования предмета и анимации при движении
48 937309
Пришлось перелопатить чутка логики, теперь все чутка упростилось
49 937557
Выращиваем лук, товарищи!
50 937561
>>37557
Дальше будут луковые оладья, луковый суп, новые грядки(наконец-то), и попытки в новых персонажей и их анимацию
photo2023-08-2023-25-28.jpg46 Кб, 436x618
51 937565
>>37561
да вот, делой больше энписей
1708298427994.jpg4,2 Мб, 4608x3112
52 937586
Прорабатываем боди часть персонажей
53 937587
>>37586
Запрещаю дрочить в этом треде до готовности спрайтов, потом можно.
54 937637
>>37586
ООООООООООООООООООО

Эта легальна????
55 937876
>>37637
Вполне
1708392078581.jpg10 Мб, 4608x2892
56 937877
Фон для ресторанчика в производстве, мне нравится что выходит. Правда с размерами до сих пор не знаю точно
57 937878
Анимации движения персонажа по 4 фрейма в каждую сторону есть, выложу как до железки доберусь

Ещё требуется сделать 4 по 4 применения инструмента в руках
58 937896
>>36685
>>37143
го я порисую пока не надоест, дашь телегу?
59 937898
>>37877

>4608x2892


Не делай такой размер, сжимай до 1920х1080.
60 937900
>>37896
В ТГ поболтать можно здесь, либо в чатике, либо в профиль написать напрямую
https://t.me/+DU4kgH3gvT5jMTVi

>>37898
Прошу прощения, коту фотосессию устраивал, забыл вернуть разрешение
61 939379
Завафлил немного с разработкой из-за дел ирл, сегодн смог понюхать IDE и подрубил репозиторий на гитхабе, потом мб на свой гитлаб перееду, потому что местный CI мне больше нравится
62 939380
>>39379

>Завафлил немного с разработкой


Это первые звоночки анончик. Все через это проходили.
В начале чутка проебешься, потом всё больше и больше. Не бывает такого что наоборот темп наращиваешь.
Походу R.I.P игре будет, а такие надежды были :(
63 939466
>>39380
Пока я не пишу код за компуткером делаются спрайты, все под контролем
64 939592
Покойся с миром лучший тред этой доски...
65 939716
Спрайты городского здания, картины и семян
66 939717
И удобрения, не знаю какой выбрать
67 939718
>>39592
Пока живём, физической работы много, к сожалению
68 940044
Ковыряю и окостыливаю правильный способ коннекта для тайлинга Connectable->Placeable объектов

Короче, шоб заборы соединялись адекватно. Штатный тайлмап рот-жопа ебал, сувать все в слои и пропертя с динамическими объектами тот ещё пердолинг
изображение.png33 Кб, 473x279
69 953010
Пришлось потеть на работе, на игру не было времени.

Но чутка докинул всяких штук
70 956071
>>40044
Честно, так и не понял, в чём твоя проблема.
Вроде всё легко штатным тайлмапом решается.
71 956255
>>56071
В том, что у меня не сетка тайлов, а сетка полноценных нод, с коллайдерами, спрайтами и прочими свистоперделками.
Я знаю что можно какие-то проперти засунуть в тайл у штатной тайлмапы, но там такие пляски с типизацией начинаются.
MVC-Process.png14 Кб, 320x350
72 956357
>>56255

>сетка полноценных нод


Лол, серьёзно? 100% проблемы будут, если захочешь увеличить площадь своей фермы.

>какие-то проперти засунуть в тайл


У тебя всё наоборот должно быть.
https://ru.wikipedia.org/wiki/Model-View-Controller
1. Модель: хранит и управляет данными игры, например, территория фермы - это Array, в котором хранится информация о посаженных растениях.
2. Представление: отображает актуальное состояние модели с помощью графики и звука, например, через встроенный тайлмап (т.к. он удобнее велосипедов).
3. Контроллер: передаёт модели текущее желание пользователя, например, пользователь кликнул на клеточку - он хочет посадить там новое растение.

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

Примеры для симулятора фермы:

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

>signal tile_updated(x, y)


3. Представление изменяет спрайт клетки с "ровная земля" на "взрыхлённая земля".

1. Пользователь ложит персонажа спать.
2. Модель обновляет этап роста растений.
3. Представление меняет спрайты, если надо.

1. Пользователь заходит в данж.
2. Модель спавнит мобов возле игрока.
3. Представление отображает мобов.

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

>>34530

>Растение в каждом кадре дёргает свой метод Process, где происходит вызов попытки системы перевести своё состояние на следующий этап и выбросить оповещение


Во-первых, это крайне неэффективно: 60 раз в секунду дёргать кучу методов для каждого растения, которых могут быть сотни и тысячи. В играх такое решается обратным подходом: берётся случайная клеточка, и если в ней есть какое-то растение, ему увеличивается стадия роста. Это позволяет размазать нагрузку по времени, снизив число обновлений до 1 за тик мира.

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

Тред читал мельком, если что.
MVC-Process.png14 Кб, 320x350
72 956357
>>56255

>сетка полноценных нод


Лол, серьёзно? 100% проблемы будут, если захочешь увеличить площадь своей фермы.

>какие-то проперти засунуть в тайл


У тебя всё наоборот должно быть.
https://ru.wikipedia.org/wiki/Model-View-Controller
1. Модель: хранит и управляет данными игры, например, территория фермы - это Array, в котором хранится информация о посаженных растениях.
2. Представление: отображает актуальное состояние модели с помощью графики и звука, например, через встроенный тайлмап (т.к. он удобнее велосипедов).
3. Контроллер: передаёт модели текущее желание пользователя, например, пользователь кликнул на клеточку - он хочет посадить там новое растение.

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

Примеры для симулятора фермы:

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

>signal tile_updated(x, y)


3. Представление изменяет спрайт клетки с "ровная земля" на "взрыхлённая земля".

1. Пользователь ложит персонажа спать.
2. Модель обновляет этап роста растений.
3. Представление меняет спрайты, если надо.

1. Пользователь заходит в данж.
2. Модель спавнит мобов возле игрока.
3. Представление отображает мобов.

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

>>34530

>Растение в каждом кадре дёргает свой метод Process, где происходит вызов попытки системы перевести своё состояние на следующий этап и выбросить оповещение


Во-первых, это крайне неэффективно: 60 раз в секунду дёргать кучу методов для каждого растения, которых могут быть сотни и тысячи. В играх такое решается обратным подходом: берётся случайная клеточка, и если в ней есть какое-то растение, ему увеличивается стадия роста. Это позволяет размазать нагрузку по времени, снизив число обновлений до 1 за тик мира.

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

Тред читал мельком, если что.
73 956400
>>56357

> В играх такое решается обратным подходом: берётся случайная клеточка, и если в ней есть какое-то растение, ему увеличивается стадия роста.


Я что-то не понял, то есть следующее растение вырастет только в следующий тик мира? Или имеется ввиду взять случайную клеточку одного вида растений и проверить не пора ли всем растениям этого вида вырасти прямо сейчас?
74 956401
>>56400
Если что я мимокрокодил зелёный*
75 956947
>>56400
Террария так работает (работала много лет назад):

>The entire map is stored as one huge array. Each cycle, the updateworld method picks out a couple tiles at random and does something based on what that tile is (spread grass, grow a mushroom, place a cobweb, spread corruption). If it's nothing, it tries to spawn an npc there.


Это даёт Террарии работать в реальном времени с игровым миром на миллионы тайлов, каждый из которых можно удалить и заменить другим. Для игрока это выглядит так: всё растёт в случайные моменты времени, но +/- средняя скорость одна.

Вот Майнкрафт (опять же описание старых версий):

>Each tick (1/20 of a second), all chunks within a certain radius of the player run updates. In 1.9pre5 the radius is 7, so the update area is a 15×15 chunk square centered on the chunk containing the player.


>When a chunk updates, it does the following 20 times:


>Pick a random block in the chunk.


>If that block is eligible for random updates, update the block.


>(The 20 selections are independent, so the same block can be picked more than once.) The probability of a particular block being chosen is about (20 / (16×16×128)) = 0.061%.


>If a selected block is a crop which is not fully grown, and its growth conditions are met, then it makes a grow check.


>(дальше описание проверок разных растений)


Т.е. опять же, в чанке 16×16×384 = почти 100 тысяч блоков, но каждый тик обновляются всего лишь несколько случайных блоков. Отсюда получается неравномерный "естественный" рост растений.

Впрочем, для игры типа Stardew Valley так делать не обязательно, потому что в таких играх все растения обычно растут только когда игрок ложится спать. Но если ОП хочет растить растения в реальном времени, придётся использовать этот трюк со случайностью, с целью оптимизации и визуального разнообразия (синхронный рост совсем неестественно выглядит).
76 956959
>>56947
А, ну кстати да, процесс вырастания в террарии и майнкрафте очень похож, всё понял, спасибо большое что объяснил <3
77 957736
>>56357

>сетка полноценных нод


>Лол, серьёзно? 100% проблемы будут, если захочешь увеличить площадь своей фермы.



Вот тогда и буду решать проблемы оптимизации.

>пояснения за MVC


>1. Модель: хранит и управляет данными игры, например, территория фермы - это Array, в котором хранится информация о посаженных растениях.


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

>3. Контроллер: передаёт модели текущее желание пользователя, например, пользователь кликнул на клеточку - он хочет посадить там новое растение.


Зачем, если можно пукнуть ивент в пустоту и кому надо - тот поймает?

>Собственно ноды - это начальный уровень, на Godot возможно сделать игру совсем без нод, чисто на обращениях к разным "серверам", и это, в теории, значительно эффективнее использования нод.


Да, но стоит ли ради хобби изобретать велосипед? Мне сурового энтерпрайз пердолинга и на работе хватает.

>Растение в каждом кадре дёргает свой метод Process


>Во-первых, это крайне неэффективно: 60 раз в секунду дёргать кучу методов для каждого растения, которых могут быть сотни и тысячи.


Абсолютно пофиг, сходить по ссылке и дёрнуть пару булевых Func/Expression не сыграет большой роли

>Во-вторых, в симуляторах фермы растения обычно растут только "ночью"


У меня необычно :)
И все ещё что раз может поменяться.

>Тред читал мельком, если что.


Ну ты заходи если что
77 957736
>>56357

>сетка полноценных нод


>Лол, серьёзно? 100% проблемы будут, если захочешь увеличить площадь своей фермы.



Вот тогда и буду решать проблемы оптимизации.

>пояснения за MVC


>1. Модель: хранит и управляет данными игры, например, территория фермы - это Array, в котором хранится информация о посаженных растениях.


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

>3. Контроллер: передаёт модели текущее желание пользователя, например, пользователь кликнул на клеточку - он хочет посадить там новое растение.


Зачем, если можно пукнуть ивент в пустоту и кому надо - тот поймает?

>Собственно ноды - это начальный уровень, на Godot возможно сделать игру совсем без нод, чисто на обращениях к разным "серверам", и это, в теории, значительно эффективнее использования нод.


Да, но стоит ли ради хобби изобретать велосипед? Мне сурового энтерпрайз пердолинга и на работе хватает.

>Растение в каждом кадре дёргает свой метод Process


>Во-первых, это крайне неэффективно: 60 раз в секунду дёргать кучу методов для каждого растения, которых могут быть сотни и тысячи.


Абсолютно пофиг, сходить по ссылке и дёрнуть пару булевых Func/Expression не сыграет большой роли

>Во-вторых, в симуляторах фермы растения обычно растут только "ночью"


У меня необычно :)
И все ещё что раз может поменяться.

>Тред читал мельком, если что.


Ну ты заходи если что
78 957739
>>33329 (OP)
Жаль тред, хорошая была задумка, но конец очевиден. Покойся...
sage 79 961000
>>33329 (OP)
уже есть несколько игр с этими ассетами видел на итче и в вк, опоздал и соснул ты анон(( без негатива сам такой
Обновить тред
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее