Шапка: https://hipolink.me/godothread
Предыдущий: >>1051748 (OP)
Архивный: >>1048979 (OP)
Мое почтение художнику за первый оп-пик.
Мое почтение опу за хороший подбор оппиков.
вкатился
Тощие доски не нужны. Тян должна быть сисястой, жопастой, с хорошими бедрами, чтобы родить и вскормить потомство
Много 2д тянок оплодотворил?
В прошлом треде постил гайд по сжатию билдов. 16мб вполне реально, смотря что твой проект использует:
https://popcar.bearblog.dev/how-to-minify-godots-build-size/
Алсо там пересобирают годот и экспорт темплейты, выкидывая неиспользуемые в проекте модули. Этого не стоит пугаться, он пересобирается максимально просто.
>он пересобирается максимально просто. *
Если только ты не шарпист на третьей версии движка, нам положняк страдать
Это знаю, да. Но сам факт, что нужен гайд для этого...
>Мое почтение художнику за первый оп-пик.
У меня целое аниме по комиксу получилось.
>>5160
>сисястой, жопастой, с хорошими бедрами
Шаришь. Но помни: попа + бёдра > сиськи.
>>1055141 →
>Почему она жирная и совсем не секси?
У тебя взаимоисключающие параграфы.
>>1055142 →
>Потому что она отрицает синглтон
И это тоже верно. Годетта - умница.
>>5171
>пересобирается максимально просто
Я так и не понял, как установить C++...
>>5146
>Если б ещё в вебе пустая сборка не весила
Ты должен любить её такой, какая она есть...
Жироен Тел https://en.wikipedia.org/wiki/Jeroen_Tel
Автор песен и постов.
https://www.youtube.com/watch?v=HiQrUDIah4E
Боль и унижение, когда нихуя не получается, лезут баги в ебло и придавливает распухшим скопом.
Боль и унижения когда не можешь закончить проект.
Да и в конечном итоге твоя идея оказывается так себе.
А релизнув ты вдруг осознаешь, что всем пофиг и проект затерялся среди сотни тысяч других проектов.
А ты потратил несколько лет.
Но у тебя же нет релизов...
А я и не делаю.
Сапёр с таблетками? Чтоб принимать не забывать?
Хороший подход. Вместо анализа рынка и предпочтений игроков делаешь то, во что сам играл бы. Или еще проще - смотришь на игру, которая тебе в целом понравилась, но тебя не устраивают в ней какие-то моменты. Копируешь делая как надо и успех обеспечен.
@ Играю в игры - хочу написать свою игру.
@ Хочу написать свою игру - перестаю играть в игры, чтобы начать писать свою игру.
@ Перестаю играть в игры - больше не хочу писать игру, потому что не играю в игры.
Вот так я оказался в системном программирование и изучаю zig. А куда тебя привел геймдев?
Делать игру, чтобы играть самому - это как делать карту в каких-нибудь героях или карту в шутере.
Ты знаешь уже всё, все места, все триггеры, все скрипты, ты даже знаешь все подводные механики и лучшие подходы - потому что ты сам создавал это все.
Это просто ноль интереса.
Энивей, а что если делать игру за игрой за игрой, в одинаковых жанрах? Я видел пару таких челиков, один врки клепает, другой карточные. Профиты - 90% кода переиспользуется из прошлых проектов, ассеты часто тоже, остается только выверять геймплей и геймдизайн пока не взлетит, плюс ты себя зарекомендуешь как создатель в жанре Х, и любители жанра Х станут приходить именно к тебе.
Наверно это имеет смысл. Но мне наоборот хочется сделать несколько игр в разных жанрах. Для общего развития и для себя, т.к есть игры, которые я бы хотел под себя переделать.
@Играю в игрУ - хочу написать игру
@Написал игрУ - хуево написал, все пердит лагает вылетает
@Сделал тактическое отступление, обособил наработки из игры в отдельный фреймворк
@Полтора года работал над фреймворком, успел переписать его раза 2
@любимый движок обосрался с runtime fee и ты внезапно понял что движок, который стал тебе таким родным вдруг оказалася (внезапно) не твоим.
@за полгода портировал фреймворк в годот
@третий раз переписал фреймворк, доведя его до архитектурного идеала, заняло еще полгода
@в продолжающемся тактическом отступлении решил написать не то что хотел написать сначала, а что-то попроще, опробовать силы.
@начал писать, в процессе реализации ебанулся наглухо и сделал все еще сложнее чем делал в самом первом проекте чтобы добиться предельной архитектурной подвижности, настолько предельной что используешь yaml файлы для создания процесса геймплея из базовых блоков
@Наконец то доделал, оттестировал работу неткода, все проверил, все работает, идеи работают, все красиво круто
@начал настраивать игровые обьекты в годоте, колижены им прописывать и прочее
@да пошло оно все нахуй
@вишу уже две недели и не хочу даже заходить в клиентский код и редактор
бздоти, знайте, вас ждет то же самое, вы будете знать как но вы возненавидите это
@а ту игру которую хотел сделать - до сих пор не доделал
Прост начинать надо с малого. И доводить до конца, до релиза, иначе несчитово.
Малое не поможет сделать большое, а хочется чето большое, прикольное. Не гта конечно, но типа по идее посильное, просто после всех этих архитектурных изысканий ты заходишь в редактор и такой "а как какать блять", смотришь и закрываешь.
Не, я не настолько ебнутый, спасибо
хотя для той самой придется либо писать плагин, либо внатуре писать редактор
>заходишь в редактор и такой "а как какать блять", смотришь и закрываешь.
Берешь и делаешь епта. Нормальный редактор. Если что, ставишь плагины и радуешься жизни
Дело не в редакторе. Я уже собрал в нём всё - интерфейс, некоторые базовые игровые префабы, сессионный функционал работает. Просто вот такая какая-то хуйня - зашел - и совершенно нихуя не хочется тут делать. Может через месяц пройдет, хз. Но я скорее свой путь куда меня завел геймдев описал
Делаю на годоте.
Так сама перемотка выглядит эффектно и создает вайб. Плюс во время перемотки больше времени на осознание как именно ты проебался во время платформинга
Именно так, сэр.
1440x1080, 2:26
Вот бы ещё кто-то сделал адаптивную систему боя как во втором принце. Охуенная же боёвка была. Они её запатентовали штоле, что никто не воспроизводит?
Есть такая игра - timeshift, в ней движок сам, включая двигло физики, делал снапы состояния материалов обьектов, физических обьектов и даже проигрывания звука. Не представляю как это сделать на годоте, а не с помощью годота.
> как это сделать на годоте
Частично через коллбэк _integrate_forces() частично через прямой доступ к физик-серверу синглтону, ууу.
Посылаешь сигнал, пишешь состояние всего в json, потом загружаешь
>это как делать карту
>Ты знаешь уже всё, все места
Да? И как же ты объяснишь это видео?
Моделька не процедурная, лепилась 100% вручную.
Не, анон, мне нравится твоя игра, я с интересом смотрю вебмки с прогрессом, но как можно сделать настолько уебищный графон? Или это так называемая постирония?
Это так называемый девелоперский графон, который не отражает качество конечного продукта.
С миксамо накачаю
>как можно сделать настолько уебищный графон?
Конкретно что тебе больше всего не нравится?
В целом >>5428 правильно говорит:
>Это так называемый девелоперский графон
Есть такой термин - "placeholder", заглушка.
Облака: тупо накинул NoiseTexture в шейдер неба. Непонятно, что делать дальше? Несколько разных вариантов облаков попробовал - всё просаживает производительность и при этом плохо выглядит. А рендеринг должен быть динамическим, по идее... Интересно было бы ориентироваться по небу... Т.е. вместо компаса - смотришь на облака и солнце.
Остров: с геометрией пока не определился, но хочу композицию из частей с вращением, так что юзаю трипланарный маппинг вместо UV. Текстуры долго использовали NoiseTexture, но я хочу сделать что-то мультяшное - накидал пару текстур на пробу. Траву дорабатывать нужно, но вот почва выглядит прям практически как нужно, только слишком бледная... Собственно, в реальности почва тоже как говно - "фотореалистично" получается, ты так не думаешь? Серьёзно, это куски грунта, как им ещё выглядеть?
Дерево: общая концепция требует баллоны с газом, поэтому шарик сверху - это важный ресурс, так что останется примерно как сейчас. Ствол же я налепил по-быстрому и текстуру натянул "лишь бы было", т.е. придётся до/переделывать. Плюс другие варианты.
Персонаж... Я всё ещё разрываюсь между "делать кастомизацию пустышки-аватарки как в ММО" и "прорабатывать уникального персонажа", так что это заглушка в любом случае, и мне было лень делать её детально. Главное, что она даёт - это связь между действиями игрока и реакцией контроллера, т.к. на примитивной капсуле многое сложно разобрать. Я изначально планировал ещё и вид от первого лица (поэтому камера убирается в голову персонажа), но, думаю, такой геймплей с ней совсем не сочетается.
Сундук и всё остальное - тоже плейсхолдеры пока.
>с интересом смотрю вебмки с прогрессом
Вообще, уже месяц как не притрагивался к этому проекту... Всё думаю, "а оно мне надо?"... Не знаю... Недавно обнаружил, что Lost Skies вывалили из EA в релиз с кучей багов и, видимо, это конец для них. Все подобные проекты набирают максимум пару тысяч отзывов и при этом там всё намного круче, чем могу сделать я. Это всё больше напоминает "сделать ГТА в одиночку", чем реалистичный инди-проект...
Если продолжать разработку, надо прекратить мою прокрастинацию микрофичами и заняться слоном в комнате: если главная идея игры "путешествовать к следующему острову", то важнее всего сделать эти острова видными издалека, плавно загружаемыми.
Я, конечно, надеялся, что если мир разбит на такие микроостровки, то опенворлд будет бесплатным. На практике каждый архипелаг - сотни нод, и многие - физические, а дерево сцен в одном потоке и всё неизбежно тормозит, если всунуть всё за один кадр.
Решение очевидно - растянуть добавление нод на несколько кадров; для этого острова нужно чётко разделить на группы нод. Для этого нужна чёткая, стандартизированная структура. А я острова уже несколько раз с нуля переделывал и сейчас они застряли в очередной переделке; текущий вид не финальный, придётся ещё что-то выдумывать.
И это только вершина айсберга...
В общем, с такими фундаментальными проблемами графические косяки - это сущий пустяк. Выглядит значительно лучше моих прежних попыток, лол.
Кстати, уже несколько лет ПЛАНИРУЮ нарисовать концептики островов, персонажей и т.п., чтоб хоть приблизительно представлять, что я делаю... Но в результате я только ковырялся в своём говнокоде, переделывая по десять раз бесполезные запчасти.
>как можно сделать настолько уебищный графон?
Конкретно что тебе больше всего не нравится?
В целом >>5428 правильно говорит:
>Это так называемый девелоперский графон
Есть такой термин - "placeholder", заглушка.
Облака: тупо накинул NoiseTexture в шейдер неба. Непонятно, что делать дальше? Несколько разных вариантов облаков попробовал - всё просаживает производительность и при этом плохо выглядит. А рендеринг должен быть динамическим, по идее... Интересно было бы ориентироваться по небу... Т.е. вместо компаса - смотришь на облака и солнце.
Остров: с геометрией пока не определился, но хочу композицию из частей с вращением, так что юзаю трипланарный маппинг вместо UV. Текстуры долго использовали NoiseTexture, но я хочу сделать что-то мультяшное - накидал пару текстур на пробу. Траву дорабатывать нужно, но вот почва выглядит прям практически как нужно, только слишком бледная... Собственно, в реальности почва тоже как говно - "фотореалистично" получается, ты так не думаешь? Серьёзно, это куски грунта, как им ещё выглядеть?
Дерево: общая концепция требует баллоны с газом, поэтому шарик сверху - это важный ресурс, так что останется примерно как сейчас. Ствол же я налепил по-быстрому и текстуру натянул "лишь бы было", т.е. придётся до/переделывать. Плюс другие варианты.
Персонаж... Я всё ещё разрываюсь между "делать кастомизацию пустышки-аватарки как в ММО" и "прорабатывать уникального персонажа", так что это заглушка в любом случае, и мне было лень делать её детально. Главное, что она даёт - это связь между действиями игрока и реакцией контроллера, т.к. на примитивной капсуле многое сложно разобрать. Я изначально планировал ещё и вид от первого лица (поэтому камера убирается в голову персонажа), но, думаю, такой геймплей с ней совсем не сочетается.
Сундук и всё остальное - тоже плейсхолдеры пока.
>с интересом смотрю вебмки с прогрессом
Вообще, уже месяц как не притрагивался к этому проекту... Всё думаю, "а оно мне надо?"... Не знаю... Недавно обнаружил, что Lost Skies вывалили из EA в релиз с кучей багов и, видимо, это конец для них. Все подобные проекты набирают максимум пару тысяч отзывов и при этом там всё намного круче, чем могу сделать я. Это всё больше напоминает "сделать ГТА в одиночку", чем реалистичный инди-проект...
Если продолжать разработку, надо прекратить мою прокрастинацию микрофичами и заняться слоном в комнате: если главная идея игры "путешествовать к следующему острову", то важнее всего сделать эти острова видными издалека, плавно загружаемыми.
Я, конечно, надеялся, что если мир разбит на такие микроостровки, то опенворлд будет бесплатным. На практике каждый архипелаг - сотни нод, и многие - физические, а дерево сцен в одном потоке и всё неизбежно тормозит, если всунуть всё за один кадр.
Решение очевидно - растянуть добавление нод на несколько кадров; для этого острова нужно чётко разделить на группы нод. Для этого нужна чёткая, стандартизированная структура. А я острова уже несколько раз с нуля переделывал и сейчас они застряли в очередной переделке; текущий вид не финальный, придётся ещё что-то выдумывать.
И это только вершина айсберга...
В общем, с такими фундаментальными проблемами графические косяки - это сущий пустяк. Выглядит значительно лучше моих прежних попыток, лол.
Кстати, уже несколько лет ПЛАНИРУЮ нарисовать концептики островов, персонажей и т.п., чтоб хоть приблизительно представлять, что я делаю... Но в результате я только ковырялся в своём говнокоде, переделывая по десять раз бесполезные запчасти.
Вот старые игоры были такие проработанные, потому что все материалы по игре, все схемы и планы были на бумаге. На пе ча та ны, Карл. И разрабы чётко по графику который на стене приклеен спокойно не торопясь работу работали.
А мы 2025 году обложились фигурками аниме, и пытаемся делать игоры без плана. Держим всё в головах. Даже если диздок сделан в программах, это снова программы, которые надо открыть, а это ленивооо.
Так что прямо завтра идёшь в книжный, покупаешь блокнот, карандаш и стёрку. И начинаешь рисовать концепты в блокноте ИРЛ. А потом сканы вставляешь референсами в блендер.
Свидетель диздока, спок. Точно так же переделывали по десять раз на ходу, подпирая костылями и доедая последние пиццы из заканчивающегося бюджета.
>разрабы чётко по графику
Ты забываешь, что их мотивировала зарплата.
>спокойно не торопясь работу работали
Почитай про кранчи и почему релизы задерживают.
>пытаемся делать игоры без плана
Я тыщу раз планы и диздоки пытался составлять. На практике часто оказывается не так, как планировал, приходится переделывать планы и диздоки, а потом забиваешь, потому что уже как-то и не хочется...
Приятно иметь план, пункты которого один за другим вычёркиваешь как сделанные. Если пункты в плане зависают неделями или приходится писать "нет - это невозможно сделать, здесь нужно что-то другое", или вообще снова добавляется ранее вычеркнутое... Сам понимаешь, такое только демотивирует ещё больше.
>начинаешь рисовать концепты в блокноте ИРЛ
От руки я крайне плохо рисую + стыдно на бумаге. Я самоучка, выучил нестандартные приёмы, которыми возможно рисовать только с помощью компьютера. Собственно, от отсутствия навыков нет уверенности в практической пользе от моих "концептов"...
Ну, с таким пентиплом хуй поспоришь. Штош. Ты прав.
Ебанутся, вот это кританул
>или приходится писать "нет - это невозможно сделать, здесь нужно что-то другое"
Это крайне полезно, такой документ называется ADR.
>или вообще снова добавляется ранее вычеркнутое...
А потом опять убрать, потому что ты забыл, почему его убрал. Поэтому ADR на каждое важное решение будет нелишним.
>А потом опять убрать, потому что ты забыл, почему его убрал
Внезапно это тоже решает гитом. Надо просто лучше комментировать коммиты и ПРы.
чисто технически можно конечно целый документ в коммент засунуть. даже картинку в base64. но назначение у него другое.
я прочитал и не согласился - документацию гитом не заменишь
фичу ты можешь несколько недель пилить, забросить, через полгода её вообще выпилить, а ещё через полгода подумаешь "а почему у меня нет фичи X? надо сделать" и даже не вспомнишь, что нужно в каких-то коммитах что-то искать
>такой документ называется ADR
Ты про это? Я еле нашёл, надо сразу уточнять.
https://github.com/joelparkerhenderson/architecture-decision-record
Скажу честно - лень всё это читать. Пробежал бегло - энтерпрайзная штука какая-то. В энтерпрайзе любое действие требует сбор совета директоров, а у нас тут творческое хобби в одиночку для удовольствия... И перечитывать все свои "документы" просто скучно...
>убрать, потому что ты забыл, почему его убрал
Нет, ты не так понял. Вот ты делаешь персонажа:
>[ x ] Придумать дизайн персонажа (сделано)
>[ x ] Смоделировать меш персонажа (сделано)
>[ x ] Натянуть модельку на скелет (сделано)
>[ x ] Сделать анимацию ходьбы (сделано)
>[ _ ] Нарисовать текстуры одежды (в процессе)
Если ты решишь по какой-то причине, что дизайн не подходит игре - первый пункт автоматически теряет отметку о выполнении, а вместе с ним пункт о меше, который потом заново натягивать на скелет. Т.е. 3 отдельных пункта теряют галочку выполнения. Ты, получается, сделал 4 шага вперёд и 3 шага назад...
Вот это и есть "добавление уже вычеркнутого".
>>5596
>просто лучше комментировать коммиты
А читать это всё кто будет? ИИ-ассистент что ли?
У меня дофига своих записей, которые я не читаю...
>>5612
>не вспомнишь, что нужно ... что-то искать
Это справедливо для любой формы документации.
на твг пробовал создавать модели нейронкой впервые
там вершины корявые с которыми работать не возможно
>при поиске рефов
>пропорциями, перспективами
>>5633
>pixel art village
Стоп. Трейсить пиксель-в-пиксель хочешь?
Деревня = домики + деревья + бочки + ящики.
Домик = параллелепипеды + пирамидки.
Дерево = цилиндр + мазня сверху.
Бочка = цидиндр.
Ящик = куб.
Собери это в кучу и нарисуй. Руками. Изи!
Перспективу сам знаешь как строить - изи.
Не можешь? Тогда выбирай одно из:
0. Найти книги и учиться, учиться, учиться...
1. Найти того, кто сможет вместо тебя.
2. Генерировать помои нейронкой.
3. Делать всё в 3D, а не в 2D.
А по поиску - там есть кнопка жалобы.
>Трейсить пиксель-в-пиксель
Во-первых этот запрос был выдачей автокомплита Утки по "pixel art", во-вторых посмотреть композицию и набор предметов в похожем арте - тоже реф.
>А по поиску - там есть кнопка жалобы.
Если каждый нейрослоп репортить времени не останется не то что на геймдев, но и на поспать.
Ты чёт хуйню какую-то ищешь. Естественно, с таким запросом только нейрослоп будет, потому что это самая релевантная выдача. Может, тебе нужны скрины олдовых игр, а?
>вот мой-то поисковик не показывает слоп! даже фильтр есть, настоящий!
>аррря ты просто ищешь не то, ищи менее релевантное!
У вас отрицание прост что интернет ВСЕ.
Ладно, я игры делать пошел.
>pixel art godette
>литералли 3.5 картинки на весь интернет
>ожидает увидеть тонны годных результатов по этому запросу
Ты совсем запутался - веб-поисковик в роли generative AI используешь?
Используй Яндекс.Картинки - там норм. Но у меня он тормозит как-то...
В этом есть и плюсы. Конкуренты в таких условиях не вырастут. А мы будем на вес золота, как реальные творцы.
>Мнение?
Единственная игра, где мне понравилась механика отката времени, это Super Time Force Ultra. Но такое сложновато реализовать конечно. Однако это мега фаново. Я прям с удовольствием прошёл.
https://www.youtube.com/watch?v=PhJJOmJ9tiY
Прикольные у них имена, мистер Годотски.
Зачем?
1280x704, 0:10
Решил отдохнуть от игр и посмотреть сора-тред в б. Нашёл базированные видосы, сижу схороняю.
960x540, 0:11
>Нашёл базированное аниме
ГАТАРИ
А
Т
А
Р
И
а у тебя на пике что-то девочковое, с жирухами и бисёненами
Если моя игра мне хотябы на пару банок пива привезет - уже считай победа блять. А челу 14к не нравится.
Че такой злой? Я лично всегда рад за успехи годот комьюнити, похуй из кого, пускай постит.
мимо другой анон
У этого самого канал на 4 млн подписоты. Он мог симулятор безыгорного годачера высрать и всеравно стать успешным. Но он даже с этим обосрался. Не вижу тут никакого успеха годот комьюнити.
Видимо не все так просто.
Ну так он думал выехать на фурри пропаганде для детей и заказал производствол фигурок, а их не покупают т рекламу покупал в каких то иностранных пердях, а теперь это всё у него вышло в минус
>Как бы вы сделали proximity объект?
1. Делаешь Area3D с радиусом появления объектов.
2. При вхождении в Area3D делаешь их видимыми.
3. Сражаешься с проблемами Area3D, побеждаешь.
4. ???
5. Делаешь пулл-реквест с фиксами в движок.
Потом расскажешь, когда доделаешь, ладно?
>А вы знали, что известный ютубер...
Ютуб-болото заблокировано уже несколько лет.
>>5950
>выехать на фурри пропаганде
>заказал производствол фигурок
>Симулятор магазина с товарами для взрослых
Не специалист, но фигурка у него неправильная.
>>5956 (Del)
>Никакие выводы не напрашиваются?
4 млн - накрученные мёртвые души, очевидно...
Чёт он зря выбрал годот для 3Д игры.
Вообще, сначала же создают популярный проект, а уже потом продают по нему мерч, а не наоборот. Как-то он всё перепутал 🤔
Судя по скриншотам - он не разобрался в Environment:
https://docs.godotengine.org/en/stable/tutorials/3d/environment_and_post_processing.html
А так в его игре нет ничего сложного. Считай, это 2D.
Зделол. Только при вхождении в арею запускаю скрипт, который подкручивает альбедо, учитывая дальность от центра ареи до персонажа. Вроде норм, подводных не заметил.
Самое базированное аниме - это: 無人惑星サヴァイヴ, Выжить на необитаемой планете, Mujin Wakusei Survive, мультсериал
Там тебе и Звёздная месть Юрия Петухова, и Таинственный остров Жюля Верна, и Зелёный слоник Светланы Басковой.
В одном онэмэ.
Выглядит как всратая нейронка.
>Что натолкнуло тебя на эти мысли
Всратые чёрные тени даже в дневное время, тёмные насыщенные цвета без определённой палитры...
>что бы ты изменил
Сделал бы картинку соответствующей мультяшным зверушкам, а не вот это вот всё мрачно-мрачное.
Просто сравни скриншоты:
1. Trailer Park Tycoon 2002 года - выглядит ЛУЧШЕ.
2. Animal Crossing 2020 года - выглядит идеально.
3. Унылое говно 2025 года - выглядит как говно.
Как с такой графикой можно надеяться на успех?
Дед, на пенсию.
Двачую. Роблокс покорил мир ассетфлипов, теперь нужны только обьемные по механикам игры, которые в роблоксе не собрать.
Фурриебам только кость кинь, они всё купят. Игра по социальным механикам днище ебаное, но сделай фурри, добавь прикольное хрюканье - получи деньги. не понимаю, почему фурри рынок всё еще как следует не обработан
Два тролля схлестнулись в эпической жирорубке...
Поясняю про игры:
1. Webfishing: эта игра - в тени Animal Crossing (милые зверушки), но для нищих детей и с мультиплеером.
2. УГ с енотом: эта хрень копирует ноунейм игру 2002, нацеливаясь на взрослую аудиторию, а не детей.
Короче, аудитория у них разная.
Поясняю про фурри... вкратце.
Во-первых, есть деление "фурри" на "фурри-фандом" и "фурри-фетишизм". Оба могут наряжаться в мохнатые костюмы и ходить на собрания. Однако, если первые заинтересованы в подобных зверушках как забавных персонажах из детства, то вторые хотят трахаться с животными - антропоморфными или не очень (да, по статистике среди фурри достаточно зоофилов). Легко догадаться - во вторую группу переходят из первой, поэтому можно считать, что большинство взрослых поклонников фурри на деле фурри-фетишисты. Нет, не каждый взрослый фурри - фетишист, т.к. фетишистом становятся обычно в маленьком возрасте (до 12-13).
Во-вторых, "фурри" - не обязательно означает "люблю пушистых животных без разбора". Там очень строгое разделение на виды и категории животных. Раньше в фандом не пускали любителей ящерообразных, типа "отсутствует мех = не фурри", поэтому драконы, птицы, ящерицы, рыбки и прочее могли смело идти на хрен. Впоследствии это изменилось и теперь "фурри" это не обязательно млекопитающее, а "разумный гуманоид". Не обязательно биологический - роботы, надувные создания, живая слизь - all are welcome. Короче, что-то вроде японского monster musume на максималках. Японцы, кстати, тоже просекли фишку: суют в новые исекай аниме побольше животноголовых, лол.
То есть, если вы делаете игру "для фурри", вы должны определиться, для каких фурри делаете? Для мелких детишек, которым просто что-то цветное на экране интересно смотреть? Или для взрослых фетишистов, которые имеют строго определённые вкусы на расы животных и их поведение? Вы не соберёте большую аудиторию, если скажете "для всех", делая фигню...
Покемоны, например, не собирают на себя всех, хотя накидали больше тысячи монстров и пиарятся уже несколько десятков лет... не признавая наличие повзрослевших фетишистов в своей аудитории (хотя изначально в лоре были браки людей с покемонами - такой-то базированный сеттинг просрали от страха).
В тоже время игру про фурри-лисичку какую-нибудь, очевидно, купят не все фурри, а только те, что дрочат лисичек в своём лисичковом подразделении фурри.
Так что Webfishing привлёк фурри-детишек, сделав правильный выбор аудитории. А та игра про енота просчиталась со вкусами своей очевидно взрослой аудитории. Взрослый фурри вряд ли будет покупать фигурку какой-то гиены, если он не дрочит на гиен; собственно игра вообще не про эту гиену, даже на обложке какой-то упоротый алкаш-енот. Может, он попытался сделать симулятор свиданий в игре?..
Запомните, дети: выбор целевой аудитории должен обусловливать остальные выборы в дизайне игры. Можете взять за ЦА себя любимых и надеяться, что некоторые люди такие же, как вы. Но если у вас нет понимания выбранной ЦА, то вы точно проиграете. В общем, делать игру "для себя" (ЦА = вы сами) инди предпочтительнее, т.к. самого себя он точно знает и бюджета на социальные исследования у него нет.
А все эти "фурри скупают всё" - это жирный троллинг. Конечно, среди фурри много богатых фетишистов. Но фетишизм - дело тонкое и без понимания аудитории производить продукт для них - пустая трата средств.
Да, я дрочу, но не на фурри. Просто натыкаюсь на них постоянно. Задолбали. Первое время пугали, а потом привык, даже начал немного разбираться в их видах. Ничего не имею против, но и не одобряю их. Лишь бы настоящих животных не насиловали...
Два тролля схлестнулись в эпической жирорубке...
Поясняю про игры:
1. Webfishing: эта игра - в тени Animal Crossing (милые зверушки), но для нищих детей и с мультиплеером.
2. УГ с енотом: эта хрень копирует ноунейм игру 2002, нацеливаясь на взрослую аудиторию, а не детей.
Короче, аудитория у них разная.
Поясняю про фурри... вкратце.
Во-первых, есть деление "фурри" на "фурри-фандом" и "фурри-фетишизм". Оба могут наряжаться в мохнатые костюмы и ходить на собрания. Однако, если первые заинтересованы в подобных зверушках как забавных персонажах из детства, то вторые хотят трахаться с животными - антропоморфными или не очень (да, по статистике среди фурри достаточно зоофилов). Легко догадаться - во вторую группу переходят из первой, поэтому можно считать, что большинство взрослых поклонников фурри на деле фурри-фетишисты. Нет, не каждый взрослый фурри - фетишист, т.к. фетишистом становятся обычно в маленьком возрасте (до 12-13).
Во-вторых, "фурри" - не обязательно означает "люблю пушистых животных без разбора". Там очень строгое разделение на виды и категории животных. Раньше в фандом не пускали любителей ящерообразных, типа "отсутствует мех = не фурри", поэтому драконы, птицы, ящерицы, рыбки и прочее могли смело идти на хрен. Впоследствии это изменилось и теперь "фурри" это не обязательно млекопитающее, а "разумный гуманоид". Не обязательно биологический - роботы, надувные создания, живая слизь - all are welcome. Короче, что-то вроде японского monster musume на максималках. Японцы, кстати, тоже просекли фишку: суют в новые исекай аниме побольше животноголовых, лол.
То есть, если вы делаете игру "для фурри", вы должны определиться, для каких фурри делаете? Для мелких детишек, которым просто что-то цветное на экране интересно смотреть? Или для взрослых фетишистов, которые имеют строго определённые вкусы на расы животных и их поведение? Вы не соберёте большую аудиторию, если скажете "для всех", делая фигню...
Покемоны, например, не собирают на себя всех, хотя накидали больше тысячи монстров и пиарятся уже несколько десятков лет... не признавая наличие повзрослевших фетишистов в своей аудитории (хотя изначально в лоре были браки людей с покемонами - такой-то базированный сеттинг просрали от страха).
В тоже время игру про фурри-лисичку какую-нибудь, очевидно, купят не все фурри, а только те, что дрочат лисичек в своём лисичковом подразделении фурри.
Так что Webfishing привлёк фурри-детишек, сделав правильный выбор аудитории. А та игра про енота просчиталась со вкусами своей очевидно взрослой аудитории. Взрослый фурри вряд ли будет покупать фигурку какой-то гиены, если он не дрочит на гиен; собственно игра вообще не про эту гиену, даже на обложке какой-то упоротый алкаш-енот. Может, он попытался сделать симулятор свиданий в игре?..
Запомните, дети: выбор целевой аудитории должен обусловливать остальные выборы в дизайне игры. Можете взять за ЦА себя любимых и надеяться, что некоторые люди такие же, как вы. Но если у вас нет понимания выбранной ЦА, то вы точно проиграете. В общем, делать игру "для себя" (ЦА = вы сами) инди предпочтительнее, т.к. самого себя он точно знает и бюджета на социальные исследования у него нет.
А все эти "фурри скупают всё" - это жирный троллинг. Конечно, среди фурри много богатых фетишистов. Но фетишизм - дело тонкое и без понимания аудитории производить продукт для них - пустая трата средств.
Да, я дрочу, но не на фурри. Просто натыкаюсь на них постоянно. Задолбали. Первое время пугали, а потом привык, даже начал немного разбираться в их видах. Ничего не имею против, но и не одобряю их. Лишь бы настоящих животных не насиловали...
Ого, вы эксперт по фурри, мое почтение.
Как оно работает с большими проектами, которые уже разрабатываются?
Чет глянул и тильтую теперь
Мне неиронично больше нравится чат-формат с сохраненным контекстом. Контроль выше, спрашивать удобней.
К сожалению оно не для меня написано, и не для таких как я.
Давай карочи, типа я издатель, а ты девелопер, проебавший все сроки.
Будем обновлять.
>ПОЛОВИНА ПОБРОСАЛО
Тяжело морально, когда видишь, как нейронки уничтожают креативный класс (т.е. нас с вами буквально)
1280x704, 0:10
Да ладно тебе. Не ври себе. Мы просто ленивые овощи. Нейронки буквально заменяют нам сотрудников, которых раньше в треде поиска сотрудников искали. Музыка? Да! Арт? Да! Бойлерплейт кода? Да! А что же мы? Продолжаем прокрастинировать.
https://sketchfab.com/marcoslate1999
Многовато треугольников, правда...
>>6124
>уничтожают креативный класс
Никто не запрещает тебе креативить.
А заработать ты и раньше не смог бы...
>>6128
>Мы просто ленивые овощи.
Особенно после курса таблеток...
>Продолжаем прокрастинировать.
Ну а что нам ещё делать... Игры?
Godot - это игра. И мы в неё играем.
704x1280, 0:10
https://poly.pizza
Я отсюда иногда беру, по лицензии все СС0 или BY.
>>6154
Тоже думал в эту сторону. Наляпать в формате скриншотов нейросеть может. Самое трудное - заставить ее собственно в игре это потом построить, и там либо куча ручной работы по интеграции, либо неюзабельная каша, когда нейронка без понимания чего-куда пытается .tscn нагенерить.
Много чего и без нейросети можно, вопрос в количестве усилий. Если подключение ИИ такое же ебучее как и делать руками, то смысла в ИИ на эту задачу ноль.
Не мы такие, 12.09.2023 такая. Не считая прочего.
>как в 2Д платформере
Никак, жанр мёртв и никому не нужен.
>многие уровни получаются уродливыми
Тебе шашечки (красиво) или ехать (интересно)?
>схематически показывать устройство уровня
Это можно автоматизировать без нейросетей:
https://github.com/mxgmn/WaveFunctionCollapse
>откуда брать данные для обучения
Можно генерировать процедурно...
Можно через reinforcement learning...
Вопрос в том, что тебе даст нейронка?
>>6157
>Я отсюда иногда беру
Хороший сайт и результаты интересные.
>Наляпать в формате скриншотов нейросеть может
>заставить собственно в игре это потом построить
Речь не о больших претрейнах, а о кастомной штуке.
Анон хочет обучать свою нейронку с чистого листа.
>>6173
>вопрос в количестве усилий
Без труда не вытянешь и рыбки из пруда...
>>6175
Не корми тролля - молча репорти его посты.
>как в 2Д платформере
Никак, жанр мёртв и никому не нужен.
>многие уровни получаются уродливыми
Тебе шашечки (красиво) или ехать (интересно)?
>схематически показывать устройство уровня
Это можно автоматизировать без нейросетей:
https://github.com/mxgmn/WaveFunctionCollapse
>откуда брать данные для обучения
Можно генерировать процедурно...
Можно через reinforcement learning...
Вопрос в том, что тебе даст нейронка?
>>6157
>Я отсюда иногда беру
Хороший сайт и результаты интересные.
>Наляпать в формате скриншотов нейросеть может
>заставить собственно в игре это потом построить
Речь не о больших претрейнах, а о кастомной штуке.
Анон хочет обучать свою нейронку с чистого листа.
>>6173
>вопрос в количестве усилий
Без труда не вытянешь и рыбки из пруда...
>>6175
Не корми тролля - молча репорти его посты.
Ну игра-то говно. Онлайн из-за мемов про то, что игра никогда не выйдет. Сможет ли инди разраб без большой фанбазы повторить подобный эффект? Не думаю.
>Онлайн из-за мемов про то, что игра никогда не выйдет.
Ну то есть дело не в жанре уже. Окей.
>Сможет ли инди разраб без большой фанбазы
Ender lilies. Разраб без фанбазы отбил игру, частенько переигрываю в нее. Salt and sanctuary так и вовсе мой самый любимый платформер, переигрывал бесчисленное множество раз. Есть еще пример бласпхемоус. Хотя я лично считаю первый холоунайт тупвм говном, душным и уебищным.
Берёшь и делаешь, ничего сложного. Хочешь - делаешь сегодня, хочешь - завтра, хочешь - все следующие несколько лет делаешь и делаешь
Версия 4.4.1 , он попробовал открыть в 4.5 но все равно вылетает. Экспортная игра у него запускается. Может я чет не то делал?
Душно, господа, несите брют в фужерах!
Переводчик отказывается озвучивать такое длинное, а по английски я не умею.
Ну логи пусть покажет. Может у него видеодрова кривые или дотнет не той версии. Попроси открыть годот через батник из папки с движком, все будет видно почему упало.
Господа можете на русский язык это перевести, яндекс браузер не справляется.
Смотря что из себя представляет этот указатель. Если это спрайт с картинкой баффа + шейдер аутлайна какой нибудь то можешь на похуях делать на спрайте/плейне. Если нужен текст, отступы и прочая юайщина - делай через ui контрол с 0;0, 0;0 якорями.
Странно, с первым курсом в 14 часов справлялся, деградировал видимо
>совсем чуток
Не думаю что чуток. Именно адекватная реализация выйдет может лет через 5, если повезёт.
>>6279
И то она будет бездвижковая, типа google genie, которые, по сути, галлюцинируют тебе видос и подправляют его под твой инпут. Облачный гейминг как его хотели большие дяди, ты только подписку плоти.
Лепить игры с помощью ИИ через традиционные движки на этом фоне бесполезно-комплексно. Зачем ИИ кодить сложные системы, когда их можно нарисовать. В плане производительности тоже интересно - то, о чем мы сегодня думаем как удар по фпс, например физика миллиардов объектов или качественная симуляция жидкостей, ИИ нарисует на раз-два. Все эти пастрейсинги тоже внезапно нахуй не нужны.
Интересное время крч.
Ошибка странная, пусть скачает последнюю версию и попробует, возможно у него майнер в системе или ебанутый антивирус
https://www.reddit.com/r/AMDHelp/comments/1aelvdm/mini_pc_ryzen_7_5800h_vulkan_suddenly_not_working/
Лиииибо
Пусть запустит годотовский экзешник через консоль с параметром --rendering-driver opengl3
Если запустится - у него какое-то говно с вулканом. Лучше даже начать с первого варианта, а затем удалять всякое
Третий вариант в самом конце ишью
https://github.com/godotengine/godot/issues/94112
Возможно это.
>ишью
Лул
>Лул
Лол
Все так, вместо того чтобы потратить денек, лучше ничего не делать, поныть, и начать все с начала, а то и вообще забить.
Если ссд откинулся - с него даже фсб нихуя не достанет, не то что анон со своими рекува перделками
Мне казалось ССД наоборот проще в плане восстановления данных.
Мне больше при запуске нравится
В игре есть уровни? На загрузочном экране уровня.
В игре один уровень и он большой? На загрузочном экране.
Игра средне-мелкая? При запуске грузи всю.
https://store.steampowered.com/app/3447260/House_of_Necrosis_Demo/
О том что игра на годоте узнал после вылета при первом запуске демки. Сначала не понял в чем дело, думал это у меня годот наебнулся, но я сегодня не запускал его же, лол. Со второго раза запустилось и все норм
> О том что игра на годоте узнал после вылета при первом запуске демки.
Плохо-плохо. Вот если бы я релизил игры, я бы как минимум менял внутренние названия экспортного шаблона в ресурсах ресхакером (как я это делал на ТВГ когда там участвовал, занимая вторые с конца места). А возможно даже конпелировал бы собственные шаблоны.
Да, я в курсе что движок так может. Но через классические редакторы ресурсов контроля больше. А потом ещё можно хекс-редактором пройтись и все упоминания годота вырезать.
самокритично
> А зачем?
Просто потому что могу. Лицензия MIT не запрещает. Я хочу брендированные окна критических ошибок. Вот хочу - и всё.
Я знаю что не запрещает. Твое право, твое дело, хоть движок форкай. Просто интересна логика такой хотелки.
> интересна логика
Контроль. Я люблю контролировать всё до мелочей. Извини, что из поста сразу это прямо не последовало.
Пасиб)
Операции с деревом дорогие. Лучше заведи глобальную ноду с массивом, куда всовывай инстанс+имя метода, и за process проходи весь массив, и зачищай его.
640x352, 0:03
> Лучше заведи глобальную нод
Не надо её заводить, она уже есть - корень дерева. Просто научись с неё работать. Корень дерева уже есть. Почему бы не закинуть туда именованный скрипт и далее через простейший тайп-каст работать с ним. Это безопасно.
> if get_tree().root is MySingletonExtensionClass r: r.my_method(); r.my_array = [1,2,3]
Очевидно, приведённый псевдокод не будет работать, потому что там синтаксис гдскрипта вперемешку с шарпом. Вот как правильно:
> var r = get_tree().root as MySingletonExtensionClass # если каст не пройдёт, переменная будет null
> > r: r.my_method() # всё, в этом скопе у нас подтянуты автодополнения, вызываем методы
> > r.my_array = [1,2,3] # вызываем мемберы
> > # если корень не наш, код просто не выполнится, не вызывая ошибок.
> > # если ошибка нужна, то
> else:
> > push_error("Вы не установили скрипт в корень")
>>6590
Пишите игоры с синглтонами, посаны, игнорируйте посты синглтоношиза, гоните, смейтесь.
Ну ёп вашу. Проебал иф. Сами вставьте. Домашнее задание. Где в коде иф проебан? Подсказка в комментах к коду.
Я напоминаю, в годоте нода может обладать только одним типом. Для таких сценариев и создан globalclass, нахуя велосипедить к рутовой ноде тип этой херни, когда движком предусмотрен более элегентный способ? А если я на рут захочу повесить другой скрипт, какой нибудь менеджер сцены? Который у каждой сцены свой будет.
А если я захочу погоду за прошлый год? Что ж мне теперь ,весь менеджер погоды переписывать?
Хаха!
Напади в ответ
Способности героев (1 раз за ход, без манны):
Некромант: взять карту, −2 HP себе.
Маг: нанести 1 урона любому существу.
Оракл: дать союзному существу случайное ключевое слово.
Целитель: вылечить союзное существо на 2 HP.
Вампир: нанести своему существу 1 урона; если выживает — +1 мана.
Друид: +1 HP себе, но обязан атаковать вражеское существо.
Ключевые слова (выдаются Ораклом):
Ободрение, Воровство, Вампиризм, Вард, Яд, Иммунитет к яду.
Ободрение: При атаке — союзная карта в руке получает +1/+1.
Воровство: При атаке врага — +1/+0.
Вампиризм: При атаке — восстановление HP = урону.
Вард: Иммунитет к урону на 1 ход.
Яд: Уничтожает существо без иммунитета к яду.
Иммунитет к яду: Не умирает от яда.
>>6601
Некромант: реанимировать заброшенную игру на пигейме, −2 HP себе.
Маг: нанести урон любому анону, раздув масштаб его игры.
Оракл: дать союзному существу случайное ключевое слово.
Целитель: подсказать решение проблемы союзному анону, +2 HP.
Вампир: делаешь игру исключительно по туториалам с ютуба, повторяя 1-в-1.
Друид: никому не показываешь свою игру 7 лет, работаешь "в стол", фидбек - твой враг.
Ключевые слова (выдаются Ораклом):
Ободрение — "делайте игры, годаны", буст морали для союзного анона.
Воровство — крадешь гениальные идеи у противников.
Вампиризм — лечишься за счет обсирания чужих игр.
Вард — "не трогай меня, я игры делаю", защита на 1 ход.
Яд — тихий баг в системе - синглтоны и прочие антипаттерны уничтожают игру.
Иммунитет к яду — анон ебет ваши антипаттерны в рот и делает игру за игрой, раз-раз, раз-раз и в релиз.
>одноразового кода
В общем случае эта задача неразрешима.
Какой именно код тебе нужно выполнить один раз?
_init выполняется 1 раз при инициализации Object.
_enter_tree - 1 раз при 1 вхождении Node в дерево.
_ready - 1 раз после всех _ready всех дочерних Node.
_exit_tree - 1 раз при 1 выходе Node из дерева сцены.
_process - 1 раз при 1 итерации цикла рендеринга.
_input - 1 раз на каждое событие ввода InputEvent
И т.д. Всё это - "одноразовые участки кода".
По классам объектов следует опираться на это:
Любые потомки Node - если нужен их функционал.
Node - если нужно взаимодействие с деревом сцены.
Resource - если нужно сохранение/загрузка файлов.
RefCounted - если нужен просто какой-то код.
Object - если тебе мешает reference counter.
В целом, Godot часто создаёт одноразовые объекты:
>get_tree().create_timer()
>get_tree().create_tween()
Они удаляются после завершения работы.
Для наглядности, попробуйте следить за этим:
>Performance.get_monitor(Performance.OBJECT_COUNT)
Оно постоянно колеблется даже на простой сцене...
>одноразового кода
В общем случае эта задача неразрешима.
Какой именно код тебе нужно выполнить один раз?
_init выполняется 1 раз при инициализации Object.
_enter_tree - 1 раз при 1 вхождении Node в дерево.
_ready - 1 раз после всех _ready всех дочерних Node.
_exit_tree - 1 раз при 1 выходе Node из дерева сцены.
_process - 1 раз при 1 итерации цикла рендеринга.
_input - 1 раз на каждое событие ввода InputEvent
И т.д. Всё это - "одноразовые участки кода".
По классам объектов следует опираться на это:
Любые потомки Node - если нужен их функционал.
Node - если нужно взаимодействие с деревом сцены.
Resource - если нужно сохранение/загрузка файлов.
RefCounted - если нужен просто какой-то код.
Object - если тебе мешает reference counter.
В целом, Godot часто создаёт одноразовые объекты:
>get_tree().create_timer()
>get_tree().create_tween()
Они удаляются после завершения работы.
Для наглядности, попробуйте следить за этим:
>Performance.get_monitor(Performance.OBJECT_COUNT)
Оно постоянно колеблется даже на простой сцене...
Ой девчушки мои йа не моху! А доску назвали в честь нашего любимого движка, или как?
Какой же ты молодец :3
>оверрайдить положение кости поверх анимации
Вкратце - создать потомок класса с этим методом:
https://docs.godotengine.org/en/stable/classes/class_skeletonmodifier3d.html#class-skeletonmodifier3d-private-method-process-modification-with-delta
Подробный туториал можно почитать тут:
https://godotengine.org/article/design-of-the-skeleton-modifier-3d/#1-create-a-script
А я не ебусь с IK, работая с 3д персонажами - слишком большой таймсинк, как и лицевые анимации и прочий липсинк. Даже большие АААААА дяди с этим лажают.
4.6 дев 2 - улучшения рендера и авто-лодов. В редакторе улучшения гизмо 3д поворотов и снап поворотов на 45 градусов при зажатом альте. Ну и еще LibGodot - годот как библиотека для доступа из стороннего кода например, из Юнити
>улучшения рендера и авто-лодов
Я заебался городить кастомные лоды для каждой поигрули. Если они сделают нормальные лоды - я буду очень рад. Даже перестану грезить о других движках
Потести. Найдешь баги, зарепортишь - успеют поправить к 4.6 релизу.
> городить кастомные лоды для каждой поигрули
Почему же ты не сделаешь до сих пор универсальный переносимый код, чтобы просто закинуть файл в новый проект и настроить?
Нет, не умею.
Я форсер толщеходов. Как необычно это слово звучит в 2025 году, хех, словно ботинки из Толщегусениц.
Соответственно, да, я выгорел прямо на стадии предпродакшена, не смог в инверсную гравитацию. Мне аноны даже пытались помочь, проекты скидывали с примерами. И я сам кучу материалов перекопал в интернетах, на тему гравитации и планетарной ходьбы. Пока я не смогу, пока не научусь, мне нет смысла двигаться дальше. Потому что весь остальной геймплей и фишки завязаны на инверсно-планетарную гравитацию.
Название красивое, но того что мне нужно, он не делает. Все эти формы задаются искаропки Area'ми. А потом он вручную делает то, что годот и так делает автоматически.
608x480, 0:13
Потыкался как слепой видрелейтед, и опять ничего не получилось. Ни с аддоном не получается. Ни без аддона. Тупо не понимаю как применять всю эту векторную математику. Мне надо чтобы контроллер персонажа вычислял направление к центру, выравнивался относительно этого направления, падал в противоположном направлении, вычислял правильный базис относительно центра, и корректно двигался вдоль базиса. Слова все знаю. Теоретически всё понимаю. На практике - хуй.
а не пробовал мир поворачивать, все кроме персонажа, при входе в арею планеты. через кватернион вокруг гг, затем скорость гг на -1
мимо
Была такая идея, но тогда придётся отказаться от 90% фич движка.
Хотелось бы, чтобы весь мир работал на движке без моего участия. Ещё на трёшке в одном из тредов я показывал видос, где без единой строчки кода накидана планета-Area с точечной гравитацией и куча мячей-RigidBody летающих по баллистическим траекториям по ней. Без. Единой. Строчки. Кода.
Вместо 3.7 походу будет 3.6.7
Плохо что ли?
3.7 скорее будет, там уже более значимые изменения накопились. 3.6.2 появился только из-за мозгоебства гугла с его новыми требованиями к гугл плею.
Игры на годоте я делать не могу, а что насчёт приложения? Если оно будет включено примерно 24 часа в сутки, будут ли утечки памяти? Насколько годот страдает от таких проблем.
Если у тебя куча рефкаунтсов ссылается на кучу рефкаунтсов и друг-на друга, то вся эта шушера впадёт в циклическую блокировку при выгрузке и не сможет выгрузиться. Для этого юзай weekref. В остальных случаях всё должно вполне себе работать. В четвёрке для приложух даже специальный режим ввели, в настройках. Низкопроцессорный оконный цикл.
Единственное, над чем я пока не задумывался, как отключить, но подмечал, что выполняющееся годот-приложение всё же как игра себя представляет, поэтому где-то внутри в потрохах она отключает системный скринсейвер. Для приложух это неприемлемо.
>В четвёрке для приложух даже специальный режим ввели, в настройках.
Это еще с тройки.
>>7060
Про 24 часа не знаю. Я делал приложуху с low process mode, о котором анон выше говорит, но вряд ли ее 24 часа кто-то держал. Лично я никаких подводных не встретил.
Из более популярного чем мое на годоте сделана пиксельная рисовалка:
https://github.com/Orama-Interactive/Pixelorama
Материал мейкер:
https://github.com/RodZill4/material-maker
Данжкрафт:
https://dungeondraft.net
Вондеркрафт:
https://www.wonderdraft.net
Звуковой редактор:
https://github.com/YuriSizov/boscaceoil-blue
И еще куча всего.
Хех. Теперь и я захотел какую нибудь софтину сделать. Правда не знаю какую, но очень хочется.
https://github.com/mbrlabs/Lorien
Вот еще приложуху для записей нашел, типа Обсидиана. Пишут что "infinite canvas drawing/note-taking app that is focused on performance"
Что характерно - все что я накидал, все прямо на GDScript нахуячено. Это анону который тут периодически трясется про свой сисярп.
О, спасиб. Я предполагал, что это отключается где-то в настройках, но поскольку мои приложухи утилитарны (открыл, сделяль, сохранил, закрыл) то вы себе не представляете насколько мне было похуй, что они по дефолту держат систему с отключенным скренсейвером.
https://github.com/popcar2/GodotOS
https://www.youtube.com/watch?v=44LcozXequw
Но не Bare Metal, конечно же.
Конечно трясусь, нахуй мне годот без моей любимой рефлексии и кодогенерации (и нормальной типизации)
... для приложений, разумеется.
Очень сырая демка, графики почти нет.
Готов делиться деталями реализации.
https://gamejolt.com/games/the-grim-cards-fate-archive/1026362
Ну, оно работает. Карточные игры не мое, поэтому по геймплею ничего сказать не могу, тем более без обучения для таких как я.
А почему на геймджолт?
На итче охваты больше. У меня на джолте игра за все время 6 лайков собрала и меньше 500 просмотров, тогда как на итче за один день в среднем 100 просмотров и 30 загрузок.
Но и там и там страничку надо оформлять полноценно.
На итч позже залью, когда перевод карточек будет
Хочу, но работа забирает всё время
Учитывая что коробка это все та же винда - не думаю что там будут какие нибудь особенные сложности. А вот сыч...
И с сычом и с хуйбоксом основная проблема - их платные ключи разработчика и прочий онбоардинг, которые стоят дохуя.
Понял, меня скорее техническая сторона вопроса интересует. С ключом и девкитом издатель по идее вопрос решать должен
Насколько понимаю сейчас все железо примерно похоже, на дворе уже не нулевые. Годот имеет полуофициальную платную поддержку всех консолей от W4Games и еще от парочки других сторонних компаний. Сыч там тоже присутствует. Значит все вполне реально. Годотовские игры тоже на сыче публиковались. Конкретней не скажу, сам не занимался, просто пересказал что видел.
Ну точнее, тут какая проблема. Обычно такие туторы сосредотачиваются на том, как всё технически организовать. Как террейну задать карту высот, вот это всё. Но полностью игнорируют, как сделать получаемый рельеф правдоподобным.
Вот ирл есть равнины, есть горы, есть плато. Равнины и плато плоские, горы кривые. Если генерировать при помощи шума, перлина там или симплексного, то получится всё одинаково неровное; и уж точно не получится плато.
А как добавить к этому всему реки - я вообще не представляю.
Вот по таким вещам не попадалось ли чего годного?
Спасибо, будем разбираться)
Дважды хуйня. Годится для процедурной генерации плоских миров. Вообще не подходит для большого правдоподобного мира.
1. Результат получается очень однородный
2. Каждый следующий чанк привязан к предыдущему -> из одного и того же сида получатся разные миры в зависимости от порядка генерации.
Бонусом, бесит меня эта дама. Регулярно лезет в темы, в которых не шарит, а потом с восторженным видом рассказывает, как это круто!!1111
> из одного и того же сида получатся разные миры в зависимости от порядка генерации
Значит в какой-то момент генерации у тебя порядок задаётся сторонним генератором, сид и степ которого ты не контролируешь.
Было былобылобыло, но прошло. О о о.
>как сделать получаемый рельеф правдоподобным
Это очень сложная тема - иди учи ИРЛ географию...
>Равнины и плато плоские, горы кривые.
>Если генерировать... получится всё одинаково
Включи фантазию, лол. И возьми НАБОР шумов.
Допустим, есть три разных шума:
>var heightmap: Noise
>var roughness: Noise
>var roughness_factor: Noise
Чтобы сделать горы, можно просто:
>var height := heightmap.get_noise_2d(x, y)
Чтобы добавить шероховатости:
>if roughness_factor.get_noise_2d(x, y) > 0.5:
>_ height += roughness.get_noise_2d(x, y)
А чёткие плоскости можно как-то так:
>elif roughness_factor.get_noise_2d(x, y) < 0.2:
>_ height = snappedf(height, 0.1)
Конкретные числа подбирай по вкусу.
Результат зависит от roughness_factor:
От 0.0 до 0.2: ровные плоскости.
От 0.2 до 0.5: гладкие горы и холмы.
От 0.5 до 1.0: шершавые горы и равнины.
>А как добавить к этому всему реки
В процедурных мирах два типа рек:
1. Грубая аппроксимация, как в Minecraft.
2. Точная, дорогая симуляция течений.
Для аппроксимации, можно:
1. FRACTAL_RIDGED или FRACTAL_PING_PONG.
2. Далее, у тебя такие варианты:
а) Реки-кольца на одном уровне (Minecraft).
б) Вдавливать их по высоте (т.е. heightmap).
в) Учитывать карты температуры, влажности...
Много разного можно придумать.
Симулирование рек может быть таким:
1. Выбираешь случайную точку на горе.
2. Двигаешь в сторону меньшей высоты.
3. Заканчиваешь, если:
- некуда спуститься (озеро);
- дошёл до уровня океана;
- пересёк другую реку.
4. Вдавливаешь ландшафт по пути движения.
Вот как-то так и всё остальное делается:
- биомы (высота, температура, влажность);
- ветренность (шум даёт направление ветра);
- расположение поселений и тому подобного.
>>7269
>wave function collapse
Для реалистичного ландшафта он не подходит.
Он больше для всяких подземелий, замков и т.п.
>>7272
>плоских миров
Нет, тот алгоритм работает в любом измерении.
>получается очень однородный
Карты шума (Перлина и т.п.) тоже однородные.
>в зависимости от порядка генерации
Этот вопрос решается иерархической генерацией:
1. Сначала генерируется огромная карта "зёрен".
2. Потом они дробятся на гигантские чанки.
3. Пункт 2 повторяется до нужного разрешения.
4. Детализируется конкретный ландшафт.
Это понадобится любому генератору...
Рекомендую ещё глянуть клеточные автоматы:
https://en.wikipedia.org/wiki/Cellular_automaton
Ими можно многие процессы симулировать:
- движение рек, особенно через разную почву;
- распространение или уничтожение лесов;
- миграцию животных и т.п.
Естественно, чем мельче ячейки - тем лучше.
>как сделать получаемый рельеф правдоподобным
Это очень сложная тема - иди учи ИРЛ географию...
>Равнины и плато плоские, горы кривые.
>Если генерировать... получится всё одинаково
Включи фантазию, лол. И возьми НАБОР шумов.
Допустим, есть три разных шума:
>var heightmap: Noise
>var roughness: Noise
>var roughness_factor: Noise
Чтобы сделать горы, можно просто:
>var height := heightmap.get_noise_2d(x, y)
Чтобы добавить шероховатости:
>if roughness_factor.get_noise_2d(x, y) > 0.5:
>_ height += roughness.get_noise_2d(x, y)
А чёткие плоскости можно как-то так:
>elif roughness_factor.get_noise_2d(x, y) < 0.2:
>_ height = snappedf(height, 0.1)
Конкретные числа подбирай по вкусу.
Результат зависит от roughness_factor:
От 0.0 до 0.2: ровные плоскости.
От 0.2 до 0.5: гладкие горы и холмы.
От 0.5 до 1.0: шершавые горы и равнины.
>А как добавить к этому всему реки
В процедурных мирах два типа рек:
1. Грубая аппроксимация, как в Minecraft.
2. Точная, дорогая симуляция течений.
Для аппроксимации, можно:
1. FRACTAL_RIDGED или FRACTAL_PING_PONG.
2. Далее, у тебя такие варианты:
а) Реки-кольца на одном уровне (Minecraft).
б) Вдавливать их по высоте (т.е. heightmap).
в) Учитывать карты температуры, влажности...
Много разного можно придумать.
Симулирование рек может быть таким:
1. Выбираешь случайную точку на горе.
2. Двигаешь в сторону меньшей высоты.
3. Заканчиваешь, если:
- некуда спуститься (озеро);
- дошёл до уровня океана;
- пересёк другую реку.
4. Вдавливаешь ландшафт по пути движения.
Вот как-то так и всё остальное делается:
- биомы (высота, температура, влажность);
- ветренность (шум даёт направление ветра);
- расположение поселений и тому подобного.
>>7269
>wave function collapse
Для реалистичного ландшафта он не подходит.
Он больше для всяких подземелий, замков и т.п.
>>7272
>плоских миров
Нет, тот алгоритм работает в любом измерении.
>получается очень однородный
Карты шума (Перлина и т.п.) тоже однородные.
>в зависимости от порядка генерации
Этот вопрос решается иерархической генерацией:
1. Сначала генерируется огромная карта "зёрен".
2. Потом они дробятся на гигантские чанки.
3. Пункт 2 повторяется до нужного разрешения.
4. Детализируется конкретный ландшафт.
Это понадобится любому генератору...
Рекомендую ещё глянуть клеточные автоматы:
https://en.wikipedia.org/wiki/Cellular_automaton
Ими можно многие процессы симулировать:
- движение рек, особенно через разную почву;
- распространение или уничтожение лесов;
- миграцию животных и т.п.
Естественно, чем мельче ячейки - тем лучше.
Твой пиксель данжн опенсорсный, бери и переписывай один в один: https://github.com/00-Evan/shattered-pixel-dungeon
Ассеты готовые с итча возьмешь. Суммарно примерно изи.
Сенкс бро, ясно и по делу.
Вообще, я надеялся найти не то чтобы тутор, а скорее что-то типа девлога вида "вот так я сделал, получилось прикольно". А ты по большей части повторил мои соображения.
Пока что я рпобую сделать так:
- Шум первый: "грубая" карта высот, низкого разрешения, задаёт среднюю высоту над уровнем моря для большой области
- Шум второй: карта "холмистости", тоже низкого разрешения
- Шум третий: "локальная" карта высот высокого разрешения
Получается так: к "грубой" карте прибавляется "локальная" карта, умноженная на карту "холмистости". Причём параметры шумов, соответственно, разные: "грубая" это однооктавный симплекс низкой частоты, "локальная" - зернистый 5-октавный simplex smooth, а "холмистость" - клеточный шум без фрактала, но с искажением.
Если получится победить текстуры (с нормалями оказалась загвоздка, слишком сложно генерировать их в шейдере, придётся в скрипте, а это возня), то покажу результат.
Ну и недо не забывать, что натуральный ландшафт состоит из ветровой эррозии, тектонических смещений, осадочных наносов, а потом ещё эрозии поверх этого, а потом на уровне будущей высоты моря сделать прибрежную эррозию. Алгоритмы для всего этого добра есть в гугле.
невъебически сложно. потому что уже делаю около 5-ти месяцев. ахуел с того насколько тяжело сделать генератор уровней (делал около месяца), а потом ахуел с того как тяжело сделать нормально работающие сохранения которые НЕ теряют по пути уровень, объекты, врагов, предметы и т.д.
хотя опять таки, смотря для чего. если для себя, то тебе ничего не мешает реально спиздить код и ассеты с итча и сделать всё за неделю, но условно заработать на этом ты не сможешь просто потому что кому нахуй нужен полный клон PD с ретекстуром?
а если как раз таки пытаться сделать КАК в PD, но делать это самому чтобы в процессе появилась идентичность хоть какая-то, вот в этом случае всё сводится к первому сообщению, потому что как я понял ты не годот-синьор и близко
Если игра с такой графикой не обладает разрушаемостью - нахуй она такая нужна когда есть майнкрафт
Он вроде аналог Вора делает, нахуй ему разрушаемость
>натуральный ландшафт состоит из
Ну да, всё это важно и нужно, но не сейчас пока что.
Я хочу сделать генератор мира, концептуально как в Дварф Фортресс (но не настолько заморочисто). Для начала создам базовую форму, а потом просимулирую геологические процессы; не очень долго, пару десятков тысяч лет, и не очень точно. Потом туда придут цивилизации и всё засрут, устроят атомную войну, глобальное оледенение, засуху и ещё парочку каких-нибудь катаклизмов. А потом придёт игрок и будет изучать, что тут произошло и почему все сдохли.
Я, правда, не думаю, что вообще доберусь до стадии геймплея. Скорее просто пробую свои силы в генерации мира и повышаю свой уровень навыков.
Фан заканчивается через две недели в среднем, за это время ты ничего путного сделать не успеешь. Я это говорю не как чел который пару строчек кода написал, а макак с 10 летним стажем
>как в червяках
В оригинальных червяках (которые 2D) сделано через битовую маску текстуры уровня или что-то в этом роде. Очень давно об этом читал. Вкратце, у тебя есть гигантская текстура, изображающая весь ландшафт одного уровня со всеми деталями, и есть чёрно-белая маска, где белый пиксель - твёрдая почва, чёрный пиксель - пустота (или наоборот). Взрывы и выстрелы переключают цвет пикселей на маске, и это вызывает исчезновение кусков текстуры ландшафта на экране (скрытие). Физически червяки проверяют столкновение по пикселям этой маски, если я правильно понимаю.
Плюсы этого подхода:
- можно нарисовать что пожелаешь на текстуре уровня;
- можно делать большие взрывы простым bitblt или шейдером;
- края взрывов могут быть как круглыми, так и неровными.
Минусов, имхо, больше:
- красивую карту рисовать сложно, а тайлы не будут сочетаться;
- сложно добавить свойства почвы наподобие сыпучего песка;
- объекты легко застревают даже на единственном пикселе;
- большая карта = высокая требовательность к процессору.
Вроде возможно убрать весь код в compute шейдеры, но я не знаю, как. GDScript'ом будет очень неэффективно, поэтому лучше сразу рассматривай компилируемые языки. Самое примитивное и медленное решение можно сделать за один вечер на GDScript, но если делать такую игру всерьёз, там наверняка куча подводных камней.
Если твоя игра - это не прямой клон "червяков" или подобных им игр, то лучше задумайся, нужна ли тебе настолько точная (пиксельная) разрушаемость и физика в твоей игре. Вот в Terraria грубая тайловая физика, но это не помешало ей стать лучшей инди-игрой. А Noita несмотря на физическую симуляцию всего мира из отдельных пикселей (на видеокарте, как я понимаю) не собрала даже 10% отзывов Terraria в Steam - так что физика не главное.
Если всё же будешь делать клон "червяков", то рекомендую заранее делать стресс-тесты, то есть нагружать своё решение до неиграбельных просадок FPS, чтобы заранее знать лимит или заранее обнаружить узкое место в реализации. Одна реализация может быть хороша на маленькой карте, но совершенно неиграбельна на большой...
Кстати, в серии Worms была как минимум одна 3D игра, и разрушаемость там была почти как в Minecraft - по кубикам. Во всяком случае так мне она запомнилась - играл давно... В 3D можно сглаживать воксели, и для этого существуют готовые решения, в том числе на Godot, но у этого подхода свои ограничения на стиль графики и точность физики...
>как в червяках
В оригинальных червяках (которые 2D) сделано через битовую маску текстуры уровня или что-то в этом роде. Очень давно об этом читал. Вкратце, у тебя есть гигантская текстура, изображающая весь ландшафт одного уровня со всеми деталями, и есть чёрно-белая маска, где белый пиксель - твёрдая почва, чёрный пиксель - пустота (или наоборот). Взрывы и выстрелы переключают цвет пикселей на маске, и это вызывает исчезновение кусков текстуры ландшафта на экране (скрытие). Физически червяки проверяют столкновение по пикселям этой маски, если я правильно понимаю.
Плюсы этого подхода:
- можно нарисовать что пожелаешь на текстуре уровня;
- можно делать большие взрывы простым bitblt или шейдером;
- края взрывов могут быть как круглыми, так и неровными.
Минусов, имхо, больше:
- красивую карту рисовать сложно, а тайлы не будут сочетаться;
- сложно добавить свойства почвы наподобие сыпучего песка;
- объекты легко застревают даже на единственном пикселе;
- большая карта = высокая требовательность к процессору.
Вроде возможно убрать весь код в compute шейдеры, но я не знаю, как. GDScript'ом будет очень неэффективно, поэтому лучше сразу рассматривай компилируемые языки. Самое примитивное и медленное решение можно сделать за один вечер на GDScript, но если делать такую игру всерьёз, там наверняка куча подводных камней.
Если твоя игра - это не прямой клон "червяков" или подобных им игр, то лучше задумайся, нужна ли тебе настолько точная (пиксельная) разрушаемость и физика в твоей игре. Вот в Terraria грубая тайловая физика, но это не помешало ей стать лучшей инди-игрой. А Noita несмотря на физическую симуляцию всего мира из отдельных пикселей (на видеокарте, как я понимаю) не собрала даже 10% отзывов Terraria в Steam - так что физика не главное.
Если всё же будешь делать клон "червяков", то рекомендую заранее делать стресс-тесты, то есть нагружать своё решение до неиграбельных просадок FPS, чтобы заранее знать лимит или заранее обнаружить узкое место в реализации. Одна реализация может быть хороша на маленькой карте, но совершенно неиграбельна на большой...
Кстати, в серии Worms была как минимум одна 3D игра, и разрушаемость там была почти как в Minecraft - по кубикам. Во всяком случае так мне она запомнилась - играл давно... В 3D можно сглаживать воксели, и для этого существуют готовые решения, в том числе на Godot, но у этого подхода свои ограничения на стиль графики и точность физики...
>на видеокарте, как я понимаю
Ага, да, на видеокарте. нет, это самый процессоротребовательный высер в мире, я даже чет подозреваю что там даже avx не применяется
>Шум первый: "грубая" карта высот, низкого разрешения
Для базовой генерации ландшафта тебе вообще не нужно генерировать текстуру какого-либо разрешения. В Godot "NoiseTexture2D" - это лишь контейнер/рендерер для Noise. А запрашивать из Noise ты можешь любую точку, хоть за сто тысяч километров от центра (0, 0, 0), в любой момент, в любом измерении (1D, 2D, 3D). Хотя NoiseTexture2D удобен в качестве превью в редакторе...
>Если получится победить текстуры (с нормалями оказалась загвоздка
Ты сразу 3D меш пытаешься генерировать и текстуры на него натягивать?
Рекомендую для начала ограничиться 2D картой одним из способов:
- В Control или Node2D в обработчике _draw() можно рисовать квадратики и т.п.
- Стопка из TextureRect с NoiseTexture2D, если логика смешивания несложная.
- Через шейдер, выводящий плоскую картинку на Control или Node2D.
Так будет проще анализировать и отлаживать базовую генерацию.
А 3D можно генерировать по-разному, например, можно взять PlaneMesh.
Новые нормали можно сгенерировать через SurfaceTool.generate_normals().
Ну или используй любой из доступных плагинов типа Terrain3D, их несколько...
>>7363
>просимулирую геологические процессы
>Потом туда придут цивилизации
Тогда текстуры и нормали должны быть в самом конце списка проблем.
Ещё раз рекомендую присмотреться к клеточным автоматам - они как раз неплохо приближаются к симуляции реальной жизни в большом масштабе. Кажется, их даже биологи для каких-то там своих научных симуляций использовали. Noise даст тебе начальные значения, которые ты затем как-то преобразуешь и потом как-то выводишь на экран - повторюсь, для начала лучше чисто 2D карта, с 3D замучаешься искать проблемы. Высоту в 2D можно отображать яркостью пикселя: чёрный - максимальная глубина, белый - максимальная высота. Поскольку ты хочешь симуляцию целого мира, то лучше сразу задуматься о "биомах" - разных экологических зонах с характерными свойствами. Шершавость гор и гладкость холмов оставь на потом, потому что это практически не влияет на результат.
>не думаю, что вообще доберусь до стадии геймплея
Генерировать процедурные миры очень интересно. На Reddit есть даже крупные сабреддиты про это, и существовало несколько веб-сайтов/форумов чисто про процедурную генерацию... Ещё до того, как эта тема была популяризирована Minecraft и другими играми. А Godot хоть и позиционируется как игровой движок, по сути универсальный инструмент для любого графического приложения. Главное, чтоб тебе самому нравилось, что ты там делаешь...
>Шум первый: "грубая" карта высот, низкого разрешения
Для базовой генерации ландшафта тебе вообще не нужно генерировать текстуру какого-либо разрешения. В Godot "NoiseTexture2D" - это лишь контейнер/рендерер для Noise. А запрашивать из Noise ты можешь любую точку, хоть за сто тысяч километров от центра (0, 0, 0), в любой момент, в любом измерении (1D, 2D, 3D). Хотя NoiseTexture2D удобен в качестве превью в редакторе...
>Если получится победить текстуры (с нормалями оказалась загвоздка
Ты сразу 3D меш пытаешься генерировать и текстуры на него натягивать?
Рекомендую для начала ограничиться 2D картой одним из способов:
- В Control или Node2D в обработчике _draw() можно рисовать квадратики и т.п.
- Стопка из TextureRect с NoiseTexture2D, если логика смешивания несложная.
- Через шейдер, выводящий плоскую картинку на Control или Node2D.
Так будет проще анализировать и отлаживать базовую генерацию.
А 3D можно генерировать по-разному, например, можно взять PlaneMesh.
Новые нормали можно сгенерировать через SurfaceTool.generate_normals().
Ну или используй любой из доступных плагинов типа Terrain3D, их несколько...
>>7363
>просимулирую геологические процессы
>Потом туда придут цивилизации
Тогда текстуры и нормали должны быть в самом конце списка проблем.
Ещё раз рекомендую присмотреться к клеточным автоматам - они как раз неплохо приближаются к симуляции реальной жизни в большом масштабе. Кажется, их даже биологи для каких-то там своих научных симуляций использовали. Noise даст тебе начальные значения, которые ты затем как-то преобразуешь и потом как-то выводишь на экран - повторюсь, для начала лучше чисто 2D карта, с 3D замучаешься искать проблемы. Высоту в 2D можно отображать яркостью пикселя: чёрный - максимальная глубина, белый - максимальная высота. Поскольку ты хочешь симуляцию целого мира, то лучше сразу задуматься о "биомах" - разных экологических зонах с характерными свойствами. Шершавость гор и гладкость холмов оставь на потом, потому что это практически не влияет на результат.
>не думаю, что вообще доберусь до стадии геймплея
Генерировать процедурные миры очень интересно. На Reddit есть даже крупные сабреддиты про это, и существовало несколько веб-сайтов/форумов чисто про процедурную генерацию... Ещё до того, как эта тема была популяризирована Minecraft и другими играми. А Godot хоть и позиционируется как игровой движок, по сути универсальный инструмент для любого графического приложения. Главное, чтоб тебе самому нравилось, что ты там делаешь...
>насколько сложно на этом движке запилить
Движок тут никаких препятствий не ставит, всё интуитивно понятно.
>свой пиксель данжн с блэкджеком и шлюхами
Если ты 100% новичок в геймдеве - рогалики довольно сложный жанр.
Если уже делал игры на других движках, то проблем быть не должно.
>>7326
>опенсорсный, бери и переписывай один в один
Там бОльшая часть кода - движок, а не сама игра. Запутаешься.
Алсо, некоторые моменты могут решаться в Godot по-другому...
>>7353
>сложно. потому что уже делаю около 5-ти месяцев
Не суди только по себе - тебе ведь даже shift нажать сложно.
>тяжело сделать генератор уровней (делал около месяца)
Твои проблемы. Все алгоритмы давно доступны в интернете...
>тяжело сделать нормально работающие сохранения
Опять - твои проблемы. У Godot всё ОК с файловой системой.
>>7356
>нужен полный клон PD с ретекстуром?
Есть несколько форков PixelDungeon. И в целом рогаликов много.
>делать это самому чтобы в процессе появилась идентичность
>потому что как я понял ты не годот-синьор и близко
Навыки геймдизайнера не связаны с навыками обращения с Godot.
Код - это реализация задумки. Если нет задумки, не будет и кода.
>насколько сложно на этом движке запилить
Движок тут никаких препятствий не ставит, всё интуитивно понятно.
>свой пиксель данжн с блэкджеком и шлюхами
Если ты 100% новичок в геймдеве - рогалики довольно сложный жанр.
Если уже делал игры на других движках, то проблем быть не должно.
>>7326
>опенсорсный, бери и переписывай один в один
Там бОльшая часть кода - движок, а не сама игра. Запутаешься.
Алсо, некоторые моменты могут решаться в Godot по-другому...
>>7353
>сложно. потому что уже делаю около 5-ти месяцев
Не суди только по себе - тебе ведь даже shift нажать сложно.
>тяжело сделать генератор уровней (делал около месяца)
Твои проблемы. Все алгоритмы давно доступны в интернете...
>тяжело сделать нормально работающие сохранения
Опять - твои проблемы. У Godot всё ОК с файловой системой.
>>7356
>нужен полный клон PD с ретекстуром?
Есть несколько форков PixelDungeon. И в целом рогаликов много.
>делать это самому чтобы в процессе появилась идентичность
>потому что как я понял ты не годот-синьор и близко
Навыки геймдизайнера не связаны с навыками обращения с Godot.
Код - это реализация задумки. Если нет задумки, не будет и кода.
Я придумал костыль через невидимый цилиндр над шляпой, но мне это не очень нравится.
В одной шляпной ммо, которую я гонял, модельки шляп либо брили персонажей налысо, либо да, делали волосы частью шляпы. Помню это негативное бухчение, когда шляпа ломала прическу принцессы.
С таким графонием, как у тебя, протекающая сквозь шляпу причёска - не баг, а фича. Как арты в MS Paint, сознательно искажающие объекты ради стиля.
А если серьёзно, то, полагаю, наиболее простым и эффективным способом будет сделать отдельный блендшейп на меш волос (он ведь отдельный от остального тела?), и изменять его значение, когда персонаж надевает специфические шляпы.
Общий алгоритм действий таков:
1. Делаешь меш волос персонажу.
2. Делаешь съёмную шляпу - видишь косяк волос.
3. Делаешь блендшейп, вдавливая волосы в голову.
4. На движке настраиваешь логику типа такой:
>@export var wear_hat: bool = false:
>_ set(v):
>_ _ wear_hat = v
>_ _ hat.visible = v
>_ _ hair.mesh.set_blend_shape_value("hat", float(v))
Где hat и hair - это MeshInstance3D.
Потенциальные недостатки метода:
- если уже и без того много блендшейпов у волос;
- если тебе нужны сотни таких людей на экране;
- если у тебя 100500 разных шляп и волос;
- если это нужно под старые мобилки...
Но, думаю, в большинстве случаев и так сойдёт.
Если что, блендшейпы можно "запекать" в коде.
>>7492
>ммо
Вот это как раз "нужно сотни людей на экране"...
С таким графонием, как у тебя, протекающая сквозь шляпу причёска - не баг, а фича. Как арты в MS Paint, сознательно искажающие объекты ради стиля.
А если серьёзно, то, полагаю, наиболее простым и эффективным способом будет сделать отдельный блендшейп на меш волос (он ведь отдельный от остального тела?), и изменять его значение, когда персонаж надевает специфические шляпы.
Общий алгоритм действий таков:
1. Делаешь меш волос персонажу.
2. Делаешь съёмную шляпу - видишь косяк волос.
3. Делаешь блендшейп, вдавливая волосы в голову.
4. На движке настраиваешь логику типа такой:
>@export var wear_hat: bool = false:
>_ set(v):
>_ _ wear_hat = v
>_ _ hat.visible = v
>_ _ hair.mesh.set_blend_shape_value("hat", float(v))
Где hat и hair - это MeshInstance3D.
Потенциальные недостатки метода:
- если уже и без того много блендшейпов у волос;
- если тебе нужны сотни таких людей на экране;
- если у тебя 100500 разных шляп и волос;
- если это нужно под старые мобилки...
Но, думаю, в большинстве случаев и так сойдёт.
Если что, блендшейпы можно "запекать" в коде.
>>7492
>ммо
Вот это как раз "нужно сотни людей на экране"...
>Ты симулятор реальности делаешь или игру?
Да
>>7492
>модельки шляп либо брили персонажей налысо
Вот, к этому я склоняюсь. Подобрать нейтральную прическу с плоским верхом и свапать вместе со шляпами. Хотелось, конечно, интереснее, но видимо не выйдет
>>7493
>С таким графонием, как у тебя, протекающая сквозь шляпу причёска - не баг, а фича
Ты сейчас до графона доебался, или я чего-то не понял?
>А если серьёзно, то, полагаю, наиболее простым и эффективным способом будет сделать отдельный блендшейп на меш волос (он ведь отдельный от остального тела?)
У меня оче много разных волос и ещё больше планируется добавить. Не мой вариант. Хотя, у меня есть система слотов одежды, которая поможет удобно всем этим оперировать. Короч, подумаю.
>Подобрать нейтральную прическу
>У меня оче много разных волос
Какой смысл делать много разных волос, если они полностью перекрываются шляпой/шлемом? Всегда раздражало, что вот сидишь два часа в редакторе персонажа, а потом первая же кепка на +1 к защите умножает тщательно выбранную причёску на ноль. Хочется бегать красивым персонажем, но без брони нерационально, а с ней все персонажи одинаковы.
Я это к тому, что можешь забить на причёски, если планируются геймплейно значимые шапки, т.к. игрок наверняка не будет лишать себя шапковых бонусов...
Я тут ещё подумал: шапка больше всего влияет на длинные волосы, верно? Короткие обычно целиком скрываются под шапкой. Следовательно, можно их разделить на "макушку" - она скрывается шапкой - и "длинную часть" - то есть все эти косы, вылезающие наружу локоны и т.п. В таком случае тут не нужен блендшейп, достаточно 2-3 меша на причёску:
1. Меш макушки.
2. Меш косы/локонов и т.п.
3. Опционально: цельный меш причёски (без швов).
В некоторых редакторах персонажа можно делать комбинации из нескольких стилей: на затылок, на макушку, на чёлку, на виски и т.д. С одной стороны, количество возможных причёсок равно количеству комбинаций деталей. С другой - её можно скрывать частично, если отдельные части закрыты одеждой.
Делаем, делаем, никак не сделаем
Кстати, он окуклил все репозитории на github позавчера и переехал на CodeBerg.
Про аддоны хз, а на кодберг давно переезжают потихоньку - с момента когда МС гитхабю выкупили. Сорсхат и гитлаб еще есть.
Он бы полтора года назад переехал если бы прична была в этом, тут что-то другое. Хотя я сам гитхабом пользуюсь и заливка коммитов без их клиента это пиздец, надо выдать себе токен прописать его в системе или в локальном репозитории на ПК или сгенерировать ключ короче было просто логин-пароль, сделали какую-то хуйню чтобы побольше данных воровать, надеюсь они форкнут гит, сделают несовместимое изменение и сдохнут нахуй как и их икс бокс.
Сейчас там тоже причины всплывают, типа заявлений гитхаба что они будут приоритезириовать интеграцию/переезд на МС (азура, копайлот), вместо разработки фич.
Сам я гитом пользуюсь через кли, там пофиг на платформу, будь то гитхаб или кодберг. А вот необходимость иметь кучу аккаунтов для репорта багов - ну такое. Самое жопное когда разраб поднимает свою собственную gitea и ожидает что ему туда issue придут репортить.
Никто не мешает на гитхабе пустой репозиторий держать для ишью (можно и не пустой, а зеркало), а самому разрабатывать в gitea. Если уж уходить с гитхаба, то на свой хостинг с gitea. Иначе смысл шило на мыло менять...
>Сам я гитом пользуюсь через кли
Ну вот, через кли гита чтобы спушить на гитхаб у тебя конечно спросят логин/пароль, а потом напишут "извините мы выключили пуш по логину паролю с такого-то числа" и чтобы пуш прошёл надо прописывать токен. Я предпологаю что кли от гитхаба упрощает эту задачу, но это надо ставить их клиент и он хоть и опенсорсный, выполняет неизвестный пользователю JavaScript код который получает с сервера(типа для авторизации) и не видно какая информация собирается с ПК
Не токен а ssн ключ. Это нормальная правктика для понимающих в безопасности. Пароли используют либо сликом ленивые либо тупые.
Да и скорее ленивые тоже тупые. Потому что если написать .ssh/config то большинство приложений работающий через ssh будет автоматически подключаться к git+ssh
Опасность скорее в том что майки захотят оставить только live аккаунт для всего. Это их старый способ больбы с конкурентами. Внедряй, изменяй, убивай альтернативы
>Не токен а ssн ключ
Токен токен, персонал ацесс токен. Это не безопасность, а ебание мозгов, потому что я могу через браузер по логину и паролю зайти и сделать коммит через web интерфейс, где тут безопасность и от кого? Что твоё понимание в безопасности говорит по этому поводу?
1) А тебя кто-то заставляет ими пользоваться?
2) Это чисто для автоматизации хуйня
>Что твоё понимание в безопасности говорит по этому поводу?
Асес токены безопаснее ключей, чтобы их выложиь куда то на сервер выложить для автоматизации работы с гитхабом. Потому что они имеют СКОУП прав доступа. Это тоже стандартная правктика. Я такую же хуйню на гитлабе настраивал
Еще может как костыль для сторонни приложений использоваться, но для этого есть OAuth. Даже VSCode работает спокойно через git + ssh. У меня просто в .ssh/config прописано куда подключаться и какой ключи использовать
>А тебя кто-то заставляет ими пользоваться?
Так ну да. Большой разницы нет токен или ссш, раньше жили с паролем, затем майкрософт купила гитхаб, "произошла утечка" паролей и они решили запретить доступ из кли по паролю, причём так чтобы на виндовс это работало до 2023.
Как бы если у тебя есть доступ к веб интерфейсу ты там и токен можешь добавить и ссш ключ ещё один добавить, я не вижу в этом какой-то особой безопасности, это скорее цифровой паспорт конкретного ПК.
Ладно, тред Godot, делайте игры.
В моей молодости не имея денег на пеку писали программы прямо на симбиан. Ничего не поменялось...
Челу который на симбиан писал нужна помощь в годоти? Совсем куку?
Извините. Вот вам годетта.
>Делайте игры
>>6874
>Игры-то делаете?
Вкратце о разработке моей игры: пикрил.
На видео: набросал радар для отладки положения. Геймплейно никакого радара не будет: предполагаю навигацию по солнцу и облакам, игроку важны лишь координаты X и Y для определения биомов. Но для разработки хочется знать "реальное" положение...
>>6969
>не смог в инверсную гравитацию
А ты уверен, что она тебе нужна? Вот радиус Земли - мизерные 6370 км, по окружности всего-то 40000 км. Несмотря на такой малый размер, "сферичность" гравитации почувствовать на поверхности по сути невозможно. Да и изгиб горизонта не так заметен. В компьютерных играх доступный участок обычно значительно меньше, поэтому в играх они плоские. Реальная гравитация встречается только в каких-то аркадных игрушках и симуляторах выхода в космос.
Если я правильно помню, по лору у тебя все ездят на колоссальных машинах, вплоть до всяких пиратов. Возникает вопрос, где эти машины конструировать? Очевидно, что полости должны иметь настолько масштабный размер, что искривление поверхности скрывается далеко за облаками и не влияет на те физические взаимодействия, что доступны игроку. Фактически вывернутость пространства у тебя - это обоснование, почему/как игрок может с помощью землероющей машины попасть на другую планету. Симулировать реальную физику здесь не нужно.
Короче говоря, тебе будет достаточно стандартной "плоской" физики как практически во всех 3D играх. Необходимые графические эффекты можно делать конвертацией координат в то, что тебе потребуется. Большинство игроков всё равно не заметят никакой разницы на практике, т.к. будут слишком озабочены конкретным геймплеем (противостояние монстрам, нахождение и сбор ресурсов, крафт/ремонт и т.д.).
>мне нет смысла двигаться дальше
>геймплей и фишки завязаны
Ты всё ещё можешь делать 3D модели и текстуры, персонажей всяких и т.п. Тестировать на плоскости, поскольку разницы для графики всё равно нет. Да и базовые механики типа стрельбы никак не должны взаимодействовать с искривлением гравитации, т.к. снаряды "летят" мгновенно (рейкаст). Так ты хотя бы некоторые части игры сделаешь, и целую игру будет намного проще реализовать. Ну и в будущем может пригодится для какой-нибудь другой 3D игры...
Возможно, ты просто ищешь оправдание, чтобы не заниматься скучной рутиной? Где бы ты достал все необходимые ресурсы, будь у тебя готовая игра с "инверсной гравитацией", но без графики и прочего? Прекрасно понимаю это желание оправдать своё бездействие какими-то "особыми" препятствиями.
Но если тебя игры в целом не привлекают - не стоит заставлять себя заниматься их разработкой. Ничего хорошего от такого принуждения не получится...
>Делайте игры
>>6874
>Игры-то делаете?
Вкратце о разработке моей игры: пикрил.
На видео: набросал радар для отладки положения. Геймплейно никакого радара не будет: предполагаю навигацию по солнцу и облакам, игроку важны лишь координаты X и Y для определения биомов. Но для разработки хочется знать "реальное" положение...
>>6969
>не смог в инверсную гравитацию
А ты уверен, что она тебе нужна? Вот радиус Земли - мизерные 6370 км, по окружности всего-то 40000 км. Несмотря на такой малый размер, "сферичность" гравитации почувствовать на поверхности по сути невозможно. Да и изгиб горизонта не так заметен. В компьютерных играх доступный участок обычно значительно меньше, поэтому в играх они плоские. Реальная гравитация встречается только в каких-то аркадных игрушках и симуляторах выхода в космос.
Если я правильно помню, по лору у тебя все ездят на колоссальных машинах, вплоть до всяких пиратов. Возникает вопрос, где эти машины конструировать? Очевидно, что полости должны иметь настолько масштабный размер, что искривление поверхности скрывается далеко за облаками и не влияет на те физические взаимодействия, что доступны игроку. Фактически вывернутость пространства у тебя - это обоснование, почему/как игрок может с помощью землероющей машины попасть на другую планету. Симулировать реальную физику здесь не нужно.
Короче говоря, тебе будет достаточно стандартной "плоской" физики как практически во всех 3D играх. Необходимые графические эффекты можно делать конвертацией координат в то, что тебе потребуется. Большинство игроков всё равно не заметят никакой разницы на практике, т.к. будут слишком озабочены конкретным геймплеем (противостояние монстрам, нахождение и сбор ресурсов, крафт/ремонт и т.д.).
>мне нет смысла двигаться дальше
>геймплей и фишки завязаны
Ты всё ещё можешь делать 3D модели и текстуры, персонажей всяких и т.п. Тестировать на плоскости, поскольку разницы для графики всё равно нет. Да и базовые механики типа стрельбы никак не должны взаимодействовать с искривлением гравитации, т.к. снаряды "летят" мгновенно (рейкаст). Так ты хотя бы некоторые части игры сделаешь, и целую игру будет намного проще реализовать. Ну и в будущем может пригодится для какой-нибудь другой 3D игры...
Возможно, ты просто ищешь оправдание, чтобы не заниматься скучной рутиной? Где бы ты достал все необходимые ресурсы, будь у тебя готовая игра с "инверсной гравитацией", но без графики и прочего? Прекрасно понимаю это желание оправдать своё бездействие какими-то "особыми" препятствиями.
Но если тебя игры в целом не привлекают - не стоит заставлять себя заниматься их разработкой. Ничего хорошего от такого принуждения не получится...
Я сейчас на стадии добавления контента и фикса мелких багов игровых механик.
Ебать это время отжирает, хоть и не так заебно как базовые механики.
> моей игры: пикрил
Как же хочется. Эльфиечку. Маленькую, сисястую, жопастую, бегающую враскорячку.
Когда релиз?
Зато они делают игры, а ты нет.
Сделай сам. Да, ты.
Я ничего не хочу. Просто у меня в синглтоне несколько таймеров, которые я использую в совершенно рандомных местах. Например у меня обновление интерфейса, баффы и скорость роста растений держатся на одном этом таймере. И сегодня нейронка выдала мне, что если я буду абюзить таймер во многих await сразу то всё поломается, гроб кладбище пидор. Я не сильно понял ПОЧЕМУ. Посему прошу, чтобы мне разжевали, бредит ли нейронка.
Если таймер умрёт (выйдет из дерева, баганет код таймера) - то может залипнуть, но это всего лишь значит что консьюмер не будет вызван, с нулевой нагрузкой на движок, что в общем-то база для продьюсер/консюмер систем. По идее в 99.99999% случаев ничего никуда с нихуя не залипает, но вот годотовские process-base таймеры это мем сам по себе.
Для подобного м.б. планшеты полезнее.
что в целом оправданно. Пришёл дома поработал, залил в хранилище. Нашёл время, открыл планшет, скачал, поработал, залил обратно.
В юнитях и УЕ такого нет, кстати.
На андроиде из пиксельных рисовак resprite удобней всего, но он платный.
Ну, сделали и сделали, чо бухтеть то.
>Спиздили
Чел сам выкладывал оригинальный aseprite под опенсорсной (GPLv2) лицензией. До определенного момента. Так что все чисто. Что упало то пропало, как грится.
Понял, принял
Когда к одной и той же хуйне привязано одновременно много не связанных между собой вещей, со временем начинают возникать баги, описание которых выглядит как бред. Типа "Фиолетовые жабы отказываются пить пиво, если игрока зовут Олег".
И вообще:
>обновление интерфейса
Если каждый кадр, то для этого есть func _process прямо в скрипте интерфейса. А если реже, то лучше привяжи сигналы. В какой такой ситуации вообще может в годоте понадобиться таймер для обновления интерфейса?
Но если очень надо - заведи отдельные таймеры для каждой категории. Это не на случай, когда всё нормально работает, а на случай, когда что-то сломается. Всегда считай, что сломаться может что угодно, ведь ты никогда не знаешь, где накосячишь.
Олсо, я не синглтоношиз, но вот конкретно таймеры в синглтон не вешаю никогда. Это слишком локальная хуйня, которая никогда не бывает нужна всем сразу. Самый верхний уровень, куда можно было бы повесить таймер - это уровень (каламбурчик, хех).
Выглядит как "мы теперь серьёзный инструмент для серьёзных дядек с деньгами". А трёшка выглядела как "у нас всё просто и понятно даже для школовкатунов, играй в наш движок". Четвёрка уже задала впечатление большей серьёзности, поменяв шрифт и приглушив цвета, а теперь вот совсем.
При том что тема сделана одним-единственным ультранердом из соцсетей. Интересно сколько охуилиардов потратили бы на нее "серьезные дяди с деньгами".
Уп.
Протестил. Я хз, но приложением на моём экране пользоваться не возможно. Вероятно, оно таки для планшетов задумано. И хоть, конечно, и можно и клаву отодвинуть и что-то еще. Но тем не менее, на обычном телефоне это хоть и работает, но работать в таком виде, пока не возможно.
Мы просто деды, пора вымирать. Зумеры-альферы на телефонах и код пишут и 3д моделят и пиксельарт рисуют.
я вообще не пользуюсь годотом, но попробовал покодить на 11" планшете с беспроводной клавиатурой - приемлемо
на 6-7 дюймовом телефоне придётся масштаб выкрутить, чтоб что-либо увидеть, окно кода сожмётся в 10 символов на строку
на версии 3.5 backspace и delete посылал один и тот же keycode, с версии 3.6 исправили, в 4.х не было этой проблемы, но он работает медленнее
>скорость роста растений на одном таймере
На остальное как-нибудь потом отвечу, но вот это - бросилось в глаза... Ты там симулятор фермы или майнкрафт/террарию делаешь?.. В любом случае: множество обновляемых штук == необходимо оптимизировать разбиванием на группы или вовсе рандомными обновлениями по такому алгоритму:
>каждый тик таймера:
>_ ткнуть в рандомную клетку карты (x, y)
>_ это обновляемая клетка? (растение)
>_ _ бросить кубик на обновление
>_ _ выпало "пора обновить"?
>_ _ _ обновить клетку (растение растёт)
По такому методу и Minecraft, и Terraria работают.
>Когда к одной и той же хуйне привязано одновременно много не связанных между собой вещей, со временем начинают возникать баги, описание которых выглядит как бред. Типа "Фиолетовые жабы отказываются пить пиво, если игрока зовут Олег".
Да не. Я пользуюсь таймерами как средством для экономии вычислительной мощности на кадр. Точнее использую там, где что-то нужно подождать без особой точности. То есть единственное их применение это await Singleton.timer_a.timeout. Ни в чем более менее важном они не участвуют.
Это всё хуйня, анон. Я хочу понять конкретно сколько правды в словах нейросети. А сказано было, что сигнал одного таймера нельзя использовать во множестве await одновременно, потому что может случиться, что один await станет ожидать сигнал, который в этом кадре занят другим авэйтом, сигнал отработает и авейт не отследит его и залипнет в бесконечном ожидании.
>>7725
Не, у меня всего несколько растений, но они должны симпатично расти. Они разворачивают форму ростка в блендшейпе. Потому там цикл while, который подкручивает блендшейп 10 раз в секунду, пока не достигнет 1.0. Звучит может калично, но большего этим росткам и не нужно. Я не видел смысл занимать этим процессом каждый кадр.
Это RTX + DLSS, ты не шаришь, все серьезно.
Надеюсь что крупные студии и команды не набигут на наш движок креативных мечтателей
Может ты через лупу смотрел, хз или не прочитал как её установить и настроить. Там уменьшены иконки, уменьшены отступы и расстояния, короче всё что можно
Единственный плюс от этого - тесты, а если на ведре встроенная компиляция в апк, то это вобще найс. За остальным, в годо, смарт в этом плане не пригоден.
плюс в том что любой поридж из нищей семьи может делать игру прямо на уроке на нонейм китайском планшете за с озона и не покупать пека для учобы
Новую книженцию притащил
Ну, технически, да.
>сигнал одного таймера нельзя использовать во множестве await одновременно
Порядок срабатывания этих авэйтов непредсказуем. И в какой-то момент гарантированно вылезет трудноуловимый баг из-за того, что хуйнянейм1 срабатывает раньше, чем хуйнянейм2, и роняет игру. Ещё хуже - если хуйнянейм1 и хуйнянейм2 сработают одновременно в разных потоках и начнут долбиться в одну и ту же область данных. Или таких хуйней окажется больше, чем доступно потоков.
Я не могу утверждать стопроцентно, какой из вариантов верный, но в любом случае выглядит как очень плохая затея.
Предлагаю другой вариант. Храни в синглтоне массив объектов такого вида:
class QueryEntry:
. var duration: float # общее время между срабатываниями
. var estimated: float # текущее время до срабатывания
. var function: Callable # функция, которая должна срабатывать
. var repeat: int #количество повторов, -1 это повторять бесконечно, 0 удалится сразу после добавления
. # конструктор для простоты использования
. func _init(dur: int, fnc: Callable, rep: int = -1) -> void:
. . duration = dur
. . estimated = dur
. . function = fnc
. . repeat = rep
# собсно объявляем массив
var query: Array[QueryEntry]
# И соответственно там же в синглтоне что-то типа такого:
func _process(delta: float) -> void:
. # удаляем лишние элементы - те, у которых указано 0 повторений
. query = query.filter(func(entry): return entry.repeat != 0)
. # основной цикл
. for entry in query:
. . entry.estimated -= delta
. . if entry.estimated <= 0:
. . . # проверка на случай, если, например, на том конце объект удалился
. . . if not is_instance_valid(entry.function):
. . . . entry.repeat = 0
. . . . continue
. . . entry.function.call()
. . . entry.repeat -= 1
. . . entry.estimated += entry.duration # сбрасываем время (но помним, что мы всё-таки проскочили на сколько-то через ноль)
Да, это костылесипед, зато даёт полный контроль над тем, что вызывается и в каком порядке. И ты всегда можешь в дебаге посмотреть на свою очередь. Соответственно, добавлять как-то так:
MySingleton.query.append(QueryEntry.new(10.0, GrowMyTreeGrow, -1))
Хотя это считается адвенсед техникуе, да и несколько проигрывает таймерам в производительности, зато контроль.
Ну или ПРОСТО создавай по таймеру на каждый объект. Там под капотом точно такая же очередь, только на плюсах - более производительно, даже если создашь по таймеру на каждое дерево.
Но вообще, фильтруй всё выше прочитанное, потому что я после празднования хеллуина немного бухой.
>сигнал одного таймера нельзя использовать во множестве await одновременно
Порядок срабатывания этих авэйтов непредсказуем. И в какой-то момент гарантированно вылезет трудноуловимый баг из-за того, что хуйнянейм1 срабатывает раньше, чем хуйнянейм2, и роняет игру. Ещё хуже - если хуйнянейм1 и хуйнянейм2 сработают одновременно в разных потоках и начнут долбиться в одну и ту же область данных. Или таких хуйней окажется больше, чем доступно потоков.
Я не могу утверждать стопроцентно, какой из вариантов верный, но в любом случае выглядит как очень плохая затея.
Предлагаю другой вариант. Храни в синглтоне массив объектов такого вида:
class QueryEntry:
. var duration: float # общее время между срабатываниями
. var estimated: float # текущее время до срабатывания
. var function: Callable # функция, которая должна срабатывать
. var repeat: int #количество повторов, -1 это повторять бесконечно, 0 удалится сразу после добавления
. # конструктор для простоты использования
. func _init(dur: int, fnc: Callable, rep: int = -1) -> void:
. . duration = dur
. . estimated = dur
. . function = fnc
. . repeat = rep
# собсно объявляем массив
var query: Array[QueryEntry]
# И соответственно там же в синглтоне что-то типа такого:
func _process(delta: float) -> void:
. # удаляем лишние элементы - те, у которых указано 0 повторений
. query = query.filter(func(entry): return entry.repeat != 0)
. # основной цикл
. for entry in query:
. . entry.estimated -= delta
. . if entry.estimated <= 0:
. . . # проверка на случай, если, например, на том конце объект удалился
. . . if not is_instance_valid(entry.function):
. . . . entry.repeat = 0
. . . . continue
. . . entry.function.call()
. . . entry.repeat -= 1
. . . entry.estimated += entry.duration # сбрасываем время (но помним, что мы всё-таки проскочили на сколько-то через ноль)
Да, это костылесипед, зато даёт полный контроль над тем, что вызывается и в каком порядке. И ты всегда можешь в дебаге посмотреть на свою очередь. Соответственно, добавлять как-то так:
MySingleton.query.append(QueryEntry.new(10.0, GrowMyTreeGrow, -1))
Хотя это считается адвенсед техникуе, да и несколько проигрывает таймерам в производительности, зато контроль.
Ну или ПРОСТО создавай по таймеру на каждый объект. Там под капотом точно такая же очередь, только на плюсах - более производительно, даже если создашь по таймеру на каждое дерево.
Но вообще, фильтруй всё выше прочитанное, потому что я после празднования хеллуина немного бухой.
>для экономии вычислительной мощности
>смысл занимать этим процессом каждый кадр
Ты страдаешь от преждевременных оптимизаций...
>await ...timeout
Для одноразовых таймеров достаточно этого:
>await get_tree().create_timer(1.0).timeout
А для повторяющихся лучше подключать метод:
>$Timer.timeout.connect(_on_timer_timeout)
Как работает await в данном случае:
1. Выполняется весь код функции перед await.
2. Создаётся закладка "вернуться сюда, когда..."
3. Происходит немедленный выход из функции.
4. Когда происходит событие, происходит переход на следующую строчку после await и выполняется весь остаток функции (или до следующего await).
Фактически await разделяет функцию на две:
1. Именованная точка входа - начало функции.
2. Безымянный обработчик события - конец.
Если await несколько, то всё ещё запутаннее...
Главный подводный камень await - это await в цикле, особенно в _process. Если у тебя есть что-то такое:
>func _process(): await $Timer.timeout
Тогда движок будет каждый кадр создавать новый безымянный обработчик события таймера - и когда сработает событие таймера, все эти обработчики выполнятся одновременно, т.е. заблокируют тебе выполнение любого другого кода игры. Например, с минутным интервалом таймера будет 3600+ таких безымянных обработчиков, которые сработают все одновременно и, скорее всего, подвесят тебе игру.
Но бывают и более хитрые случаи, когда ты сам по неосторожности вызываешь одну функцию с await несколько раз подряд, создавая очередь из таких безымянных обработчиков, которые могут просто испортить состояние объекта, в котором работают. Следовательно, нужно каким-то образом узнавать состояние "я уже жду этот сигнал", избегая лишнего. Собственно, именнованные обработчики сигнала невозможно подключить больше одного раза.
В общем и целом await следует использовать крайне аккуратно, только по необходимости, когда можешь гарантировать, что не произойдёт ничего лишнего:
>if not is_node_ready(): await ready
Эта строчка в ноде-предке при выполнении до _ready задержит выполнение остального кода, пока ноды в потомках этой ноды не будут готовы. Всё остальное время эта строчка никак не будет влиять на код. Это может быть необходимо для сеттеров в @export var.
>для экономии вычислительной мощности
>смысл занимать этим процессом каждый кадр
Ты страдаешь от преждевременных оптимизаций...
>await ...timeout
Для одноразовых таймеров достаточно этого:
>await get_tree().create_timer(1.0).timeout
А для повторяющихся лучше подключать метод:
>$Timer.timeout.connect(_on_timer_timeout)
Как работает await в данном случае:
1. Выполняется весь код функции перед await.
2. Создаётся закладка "вернуться сюда, когда..."
3. Происходит немедленный выход из функции.
4. Когда происходит событие, происходит переход на следующую строчку после await и выполняется весь остаток функции (или до следующего await).
Фактически await разделяет функцию на две:
1. Именованная точка входа - начало функции.
2. Безымянный обработчик события - конец.
Если await несколько, то всё ещё запутаннее...
Главный подводный камень await - это await в цикле, особенно в _process. Если у тебя есть что-то такое:
>func _process(): await $Timer.timeout
Тогда движок будет каждый кадр создавать новый безымянный обработчик события таймера - и когда сработает событие таймера, все эти обработчики выполнятся одновременно, т.е. заблокируют тебе выполнение любого другого кода игры. Например, с минутным интервалом таймера будет 3600+ таких безымянных обработчиков, которые сработают все одновременно и, скорее всего, подвесят тебе игру.
Но бывают и более хитрые случаи, когда ты сам по неосторожности вызываешь одну функцию с await несколько раз подряд, создавая очередь из таких безымянных обработчиков, которые могут просто испортить состояние объекта, в котором работают. Следовательно, нужно каким-то образом узнавать состояние "я уже жду этот сигнал", избегая лишнего. Собственно, именнованные обработчики сигнала невозможно подключить больше одного раза.
В общем и целом await следует использовать крайне аккуратно, только по необходимости, когда можешь гарантировать, что не произойдёт ничего лишнего:
>if not is_node_ready(): await ready
Эта строчка в ноде-предке при выполнении до _ready задержит выполнение остального кода, пока ноды в потомках этой ноды не будут готовы. Всё остальное время эта строчка никак не будет влиять на код. Это может быть необходимо для сеттеров в @export var.
Сделай тест в отдельном проекте, смоделируй свою ситуацию (чтобы не разъебать основной проект). Займет минут 10-15 от силы.
Результаты сюда напиши, интересно.
Ты хочешь кеширование + call_deferred если результат не в кеше (чтобы код в idle запускался)
TileMapLayer тоже может служить физическим объектом. Но если для него поставить процесс_моде равно дизаблид, то нихуя не происходит и он все еще коллайдит. Настройки дизабле_моде у тайлмаплейера нет.
Вот и думайте горловой.
Оформляем ишью.
Горловой?
>сработают одновременно в разных потоках
Ты по моему перепутал. Сигнал который испускает движок всегда синхронизирован с деревом сцены, а сигнал таймера испускает движок. Если ты испустишь сигнал в потоке единолично - то да, тогда последствия непредсказуемые, потому что вызов консьюмеров происходит из другого потока и кто знаком с особенностями многопотока годота знает, почему это страшно.
Синглтон - (анти)паттерн, имеющий ДВА свойства:
1. Уникальность объекта (нельзя создать копию).
2. Глобальный доступ (вызов по одному имени).
Если одно не соблюдается - это НЕ синглтон.
Реальные синглтоны в Godot/GDScript невозможны.
Если ты об AutoLoad, то это было в движке давно, и называлось "синглтоном" некорректно, сейчас там переименовали надпись в "make global". Т.е. данные объекты не уникальны - их можно дублировать. Их назначение - загрузить что-то ДО загрузки главной (помеченной в редакторе) сцены и сохраняться при переключении сцен через SceneTree.change_scene(). Опасная штука, ведующая к трудностям в отладке.
Статическими переменные и методы стали недавно, некоторые баги с ними долго висели и я не в курсе, исправили уже или нет (особенно Array и Dictionary). Основное назначение - дать всем экземплярам единственное хранилище данных или общий метод, работающий с этим единственным хранилищем.
Но вот с их помощью стало возможно реализовать "подобие синглтону" - общий доступ к уникальному экземпляру данных, которые нельзя дублировать. Разумеется, это не объект, но сути это не маняет... Бессмысленный выстрел в ногу, имхо. Избегайте глобальных сущностей везде, где это возможно.
Как у больших дядь синглтон по-прежнему нельзя реализовать, поскольку в Godot нет нормального конструктора у классов, _init слишком ограничен, ограничивать видимость методов тоже нельзя...
Короче, это мутная тема, но главное тут: проблемы начинаются не из-за уникальности синглтона, а от глобального доступа к нему. Поэтому глобальные автолоады ничем не лучше синглтонов. Ещё и GUI уродливый - прячет их куда-то глубоко в меню.
>>7898 (Del)
Зачем ты скопипастил ответ какой-то LLM? Если бы спрашивающий хотел ответ LLM, он бы сам лично её спросил, а не шёл на форум. Тем более что в данном случае ответ LLM про синглтоны из ЯП типа Java, не учитывающий особенностей Godot и GDScript.
>проблемы начинаются не из-за уникальности
...хотя не, уникальность тоже может выйти боком. В частности, Godot по умолчанию копирует ссылку на ресурсный объект, не делая его дубликат - что часто приводит к ошибкам пользователя, когда ты вроде дублировал ноду, а её ресурс не дублировался - т.е. остаётся уникальным даже без глобального имени. Приходится вручную дублировать нужные ресурсы.
>>7910
>сюрвалик
Ты про "survival game" или "vampire survivors"? В одном посте всё не распишешь, так что ищи сам туториалы. Вроде много есть на обе темы... Но тебе, наверное, сначала лучше пройтись по классическим играм - попробовать сделать Pong, Asteroids, Breakout, Tetris. С опытом разработки этих игр ты бы не задавался настолько широким вопросом "как сделать survival".
Попробуй сначала официальные туториалы:
https://docs.godotengine.org/en/stable/getting_started/first_2d_game/index.html
Как раз что-то типа "вампиров" без способностей.
>>7918
>без задней мысли. Подходишь и делаешь
А потом переделываешь, переделываешь...
>>7912
>нет, я сам написал
Кому ты врёшь, мелкобуква? Я знаю сленг LLMок.
>Я знаю сленг LLMок.
Шизы спок, хватит чатгопоту ИТТ искать, у нас своих аутистов хватает, писавших мегапортянки в гопота-стиле еще до рождения гопоты.
>хватит чатгопоту ИТТ искать
По-твоему, это не стиль "ассистента"? >>7898 (Del)
>Ключевые отличия и "нахуя это нужно"
>вы вы вы вы вы вы... (на дваче)
>java (в Godot-треде)
>своих аутистов хватает, писавших мегапортянки
Но это ведь другой аутист...
> Шизы спок, хватит чатгопоту ИТТ искать,
Никто её не ищет, она просто детектируется естественным образом, потому что роботы еще не смогли пройти тест Тьюринга.
>Ты по моему перепутал
Специально уточнил, что не уверен.
Просто недавно прогу писал (клиента для одного линуксового демона), и там коллбэки от демона могут прилететь в любом потоке, не обязательно в главном. И я подзабыл, как оно в годоте.
>>7896
Годотский синглтон не обязательно должен быть объектом, это может быть нода или даже целая сцена. И в общем случае, если вот такой функционал тебе не нужен, - юзай статический класс. А если нужен - скорее всего, ты что-то делаешь не так, пересмотри архитектуру проекта.
Ну или ты точно знаешь, что делаешь, и тогда не мне тебя учить.
>>7908
>Зачем
Ничоси ты вежливый
>Синглтон - антипаттерн
И это говорят люди которые не одного теста в жизни не написали..
Есть два понятия синглтона
1) Паттерн. Класс который имеет статический метод (например getInstance) для получения уникального инстанса этого класса, всегда одного и того же. Получается что класс хранит инстанс самого себя. Считается антипаттерном, как и все статические фабрики, потому что сложно тестировать код с такой хуйней.
2) Синглтон как уникальный сервис в DI контейнере. Создается DI ситемой, которая передает один же и тот инстанс некоторого класса в конструкторы пользователей этого класса. Не считается анипаттерном, легко тестируется, широко используется в анемичной архитектуре.
Судя по твоему вопросу ты хочешь сделать не синглтон 1) а сервис локатор вместо DI
ЗЫ. Еще есть годная книжка для годотодетей которые хотят думать об архитектуре
https://github.com/PacktPublishing/Game-Development-Patterns-with-Godot-4
> Не считается анипаттерном
Это ты просто в /pr/ограммач не заходил, там всё считается антипаттерном, даже SOLID, даже небо, даже Аллах.
Там поголовно ddd/компоненты головного мозга у бэков и фронтов соответственно, с этими людьми говорить не о чем, у них задача делать индемпонентные ручки и они их делают
А чего там, по 4.6 уже книга?
Монохромное - заебись.
Когда они уже везде на монохром перейдут? Нахуй эти чОрные глаза, смотрящие в мою безыгровую душу?
Как вы побеждаете стыд от своего творчества?
дрочу на него
Заворачиваюсь в одеяло, закрываю вкладку с сайтом где опозорился и не захожу туда гдет неделю, просто сижу пью пиво и прокручиваю позорный момент слушая думерскую музыку на ютубе, плачу иногда, и думаю для чего и кого вообще это делаю, ведь это только мне нравится, а денег все равно не заработаю.
Когда отпускает продолжаю пилить.
А мог бы начать семенить и поддерживать себя.
По мне так вообще лепить чью-либо мордочку на лого - не професионально. Вот стилизованный куб под углом - заебись. Предлагаю переделать лого годота на пирамидку
> Предлагаю переделать лого годота на пирамидку
Нихуя. Надо пятиконечную звезду. Символизирующую пять столпов, на которых стоит Годот.
1. Белые ноды.
2. Красные ноды.
3. Зелёные ноды.
4. Синие ноды.
5. ГДСкрипт.
Не позволено.
Тактикульно...
Но я всеравно не понел. Этого значка не было - все работало. Появился - все тоже работает.
Он тебе напиздел. Эта хуйня не дает тебе случайно заселектить чилдрены на сцене. Вообще не надейся методом тыка изучить гейдев
Оно не позволяет кликнуть на ноды-чилдрены в визуальном редакторе.
Хуле напиздел-то? Вот, читай - группировка выбранных нод. Моя группировка нод уже окружила твою группировку жалких недонод.
Прочитал: мейк селектед нодс чилдрен нот селектабл - сделать детей выбранной ноды невыбираемыми
Бери годот
В такой конфигурации выбора - разумеется годот. Если добавить к конфигурации еще варианты движков - вполне вероятно что будут варики получше. Но такой вопрос если хочешь конкретики лучше в движкосраче спрашивай, в этом треде за любую не-годот конкретику пизды дают.
> а какой движоклучше для новичка нового ньюфага в геймдеве?
Тот который тебе нравится, на котором лично тебе приятно работать. Скачай несколько и попробуй все. Если этим движком окажется Годот, возвращайся, будем рады обменяться с тобой знаниями.
А где мне их ещё делать?
У нас тут самый живой тред, и спрашиваешь ты в годот-треде, так что очевидно годот.
Я тут набрал пару десятков, но в целом это всё нужные вещи. Трекеры отвечают за хранение и взаимодействие с ресурсами, Logic'и отвечают за изменения состояний вещей в игре. Например в CutsceneLogic я прописываю функции, вызываемые после отображения какой-то катсцены. Логики вызывают только либо другой логик, либо свой трекер. Так я могу из диалога запустить катсцену, из катсцены добавить предмет в инвентарь, из завершения квеста вызвать катсцену и так далее. Очень гибкая структура, очень полезна для того, что я пишу.
Это ты специально да, специально нашего синглтона-шиза триггеришь? Я уже скорую ему вызываю.
Я не вижу ничего плохого в автолоадах годота. Если движок даёт возможность, значит ей можно пользоваться. Просто нужно это делать аккуратно.
Мы всё-таки игры делаем, а не энтерпрайз-решения для заказчиков.
Если опыт программирования в целом есть - возможно, с натяжкой, успеешь. Если опыта нет - хуй. Если еще и ассеты сам рисовать планируешь - хуй в квадрате, целься на год обучения + работы.
Ладно выкупил, сяп
Я сам программист со стажем, но прежде чем сделать что-то более-менее вменяемое в годоте, я потратил 100 часов на разные маленькие проектики, в которых просто всякие разные ноды и скрипты как-то взаимодействовали. В геймдеве нет магической таблетки, которая делает всё за тебя. Это долгий и упорный труд, и особенно опыт.
Ну у меня и опыта в программировании 5 лет.
Так что гдскрипт я относительно быстро понял. За сотню часов более-менее разобрался.
И да, я разобрался только с 2Д вещами. 3Д я даже не трогал.
1278x720, 0:17
Спасибо!
>>8283
Дорогу осилит идущий, анон. Как в любом хобби, 95% желающих отваливаются в самом начале. До завершения проекта доходят сотни, а качественный продукт создают лишь единицы.
Раз уж такое дело, то закину сюда вебмку с игрой. Я как раз закончил ядро игры, только что мягкие переходы сделал между локациями. Готовы основные механики: инвентарь, квесты, статусы квестов, диалоги, система динамического состояния объектов, катсцены, звуковая система, загрузка и сохранение корректные.
Будет недо-рпг, недо-имеррсив сим, где нужно играя за правительственного агента сделать так, чтобы текущий мэр города проиграл на предстоящих выборах. Делается это путем взаимодействия с фракциями города, предлагая/торгуясь/шантажируя их голосовать за других кандидатов, так как на старте почти все фракции голосуют за мэра.
Так-то это бродилка, но она очень сильно разбавлена большими возможностями выбора игрока, разными исходами ситуаций.
Я даже нашел уже начинающего художника, который пилит потихоньку графику в игре. Первая лока и спрайты главного героя - его работа. Остальное я сам рисовал на скорую руку, чисто чтобы было видно. Плохой из меня художник.
Ну и движок годот, естественно.
Судя по стиму 82,7 часов потратил на всё что сейчас есть.
Систему диалогов я не стал писать сам, взял Dialogic 2, в целом он способен в рпг-стайл диалоги, плюсом из него можно что-угодно в игре вызвать, так что они будут очень богатые в этом плане. Были тесты, я могу хоть квест обновить из диалога, хоть дать/забрать у игрока предмет, хоть катсцену запустить после диалога.
1278x720, 0:09
Да, если интересно, то вот диалог с тестовым болванчиком. Диалоджик позволяет кастомные сцены диалогов рисовать, так что я немного заморочился. На лица можешь не смотреть, это ворованное, пока художник красиво не сделает, да и сцена тестовая.
Это, наверно, самый частый вопрос, который я слышал про свою игру, когда я про неё кому-то рассказываю.
От рпг-мейкера мне нужна только диалоговая система. Всё остальное там будет только мешать. Не говоря уже о том, что я хотел игру делать именно на годоте, и долго к этому шел.
Лол, что?
У тебя какой браузер? В хроме и правда почему-то не открывается, а в файрфоксе норм работает. Странно. Но чтобы систему вешал - это вообще непонятно.
Ты можешь хоть весь код игры в одном _process() в MainLoop записать и это будет работать:
https://docs.godotengine.org/en/stable/classes/class_mainloop.html
Беда глобального доступа к сцене в автозагрузке заключается в том, что игру становится практически невозможно тестировать по частям и изменять эти автозагрузочные компоненты радикально, а связи становится сложнее изучать из-за монолитности.
Почему невозможно тестировать по частям? Скрипт автозагрузки стартует с любой сценой даже по F6. Исключить этой скрипт можно лишь исключением из настроек проекта. Но если ты к нему по имени как-то обращаешься, то ты уже не имеешь права его просто исключать. То есть он прибит гвоздями к проекту. Становится невозможно рассматривать какую-либо отдельную зону игры отдельно от этого скрипта.
Почему сложнее изучать? Во-первых, у тебя нет нормального способа узнать, из каких мест идут все обращения к скрипту в автозагрузке. Да, ты можешь использовать поиск по имени во всех файлах, но это костыльное, неудобное решение. То есть любой файл теоретически можео дёргать за твой скрипт и это заставляет тебя долго перекапывать проект для собственного понимания его работы. Во-вторых, концентрация связей в одном месте создаёт "узел", взаимодействующий со многими сущностями, и это банально сложнее удерживать в памяти, когда ты пытаешься разобраться в каком-то компоненте. Т.е. единственный источник влияет сразу на многое.
Из этого следует сложность модификации - чтобы переработать этот скрипт, тебе нужно внести много изменений по всему проекту, которые сложно будет определить с первого взгляда и придётся сильно полагаться на ошибки компиляции/рантайма. Тут, возможно, проще игру с нуля начать, чем вносить модификации в автозагрузочные скрипты.
Из всего этого следует то, что ты не можешь просто обновить какие-то сторонние плагины, если ты уже используешь их как автозагрузочные скрипты; твои собственные решения, потенциально ошибочные, принятные в начале разработки, нельзя просто так выбросить из проекта или даже немного изменить. Разобраться в проекте через месяц отдыха тоже проблематично, а игры делаются обычно долго.
И это касается не только "автозагрузки". Слишком полагаться на статические члены классов будет аналогичной ошибкой, только вместо UI настроек в редакторе будет "наличие скрипта в папке проекта".
Суть в том, что если что-то есть и работает, не стоит вслепую полагаться на это. Многие инструменты в программировании предназначены только для одноразовых, временных костылей, т.е. чаще для ликвидации последствий старых ошибок. Или же - призраком тёмного прошлого. Типа, никто из вас не согласится писать на ассемблере и не будет менять отдельные биты в памяти через дизассемблер, хотя теоретически этого более чем достаточно для игр.
Ты можешь хоть весь код игры в одном _process() в MainLoop записать и это будет работать:
https://docs.godotengine.org/en/stable/classes/class_mainloop.html
Беда глобального доступа к сцене в автозагрузке заключается в том, что игру становится практически невозможно тестировать по частям и изменять эти автозагрузочные компоненты радикально, а связи становится сложнее изучать из-за монолитности.
Почему невозможно тестировать по частям? Скрипт автозагрузки стартует с любой сценой даже по F6. Исключить этой скрипт можно лишь исключением из настроек проекта. Но если ты к нему по имени как-то обращаешься, то ты уже не имеешь права его просто исключать. То есть он прибит гвоздями к проекту. Становится невозможно рассматривать какую-либо отдельную зону игры отдельно от этого скрипта.
Почему сложнее изучать? Во-первых, у тебя нет нормального способа узнать, из каких мест идут все обращения к скрипту в автозагрузке. Да, ты можешь использовать поиск по имени во всех файлах, но это костыльное, неудобное решение. То есть любой файл теоретически можео дёргать за твой скрипт и это заставляет тебя долго перекапывать проект для собственного понимания его работы. Во-вторых, концентрация связей в одном месте создаёт "узел", взаимодействующий со многими сущностями, и это банально сложнее удерживать в памяти, когда ты пытаешься разобраться в каком-то компоненте. Т.е. единственный источник влияет сразу на многое.
Из этого следует сложность модификации - чтобы переработать этот скрипт, тебе нужно внести много изменений по всему проекту, которые сложно будет определить с первого взгляда и придётся сильно полагаться на ошибки компиляции/рантайма. Тут, возможно, проще игру с нуля начать, чем вносить модификации в автозагрузочные скрипты.
Из всего этого следует то, что ты не можешь просто обновить какие-то сторонние плагины, если ты уже используешь их как автозагрузочные скрипты; твои собственные решения, потенциально ошибочные, принятные в начале разработки, нельзя просто так выбросить из проекта или даже немного изменить. Разобраться в проекте через месяц отдыха тоже проблематично, а игры делаются обычно долго.
И это касается не только "автозагрузки". Слишком полагаться на статические члены классов будет аналогичной ошибкой, только вместо UI настроек в редакторе будет "наличие скрипта в папке проекта".
Суть в том, что если что-то есть и работает, не стоит вслепую полагаться на это. Многие инструменты в программировании предназначены только для одноразовых, временных костылей, т.е. чаще для ликвидации последствий старых ошибок. Или же - призраком тёмного прошлого. Типа, никто из вас не согласится писать на ассемблере и не будет менять отдельные биты в памяти через дизассемблер, хотя теоретически этого более чем достаточно для игр.
1278x720, 0:17
Вот тебе еще раз переконвертированная первая вебмка. Прости, что повесил тебе систему, не думал, что такое вообще возможно. А в хроме и правда не воспроизвелась почему-то.
Всё, хватит своей игрой пока срать. Пойду отдыхать.
>>8299
Ты демку закинул или уже полностью готовую? Бесплатная? Не планируешь её продавать?
Дайте ассет, короч, если таков имеется. Я никогда их не доделаю
Насколько "широкие" у тебя стены? Если ты зайдешь за стену и уткнешься в нее впритык - насколько персонаж будет виден? Прост тоже подобное делаю и пытаюсь понять как лучше.
Блин, а ты прав, я что-то не подумал, что у нас вообще-то стены сзади нужно обходить. Блин. Надо будет просить художника стены отдельно прорисовать.
Сейчас пол со стенами - это просто статичная картинка целая. Нельзя зайти "за" стену вот эту, которую ты показываешь. Нужно будет переделать. Я напишу художнику, пусть стены от пола отделит.
Я у себя через SpringArm3D регулирую высоту. А кинематическая стопа просто падает до конца спринг арма если не касается земли
1286x724, 0:10
Короче вот, так я порезал комнату. У меня стены с обратной стороны начинаются на уровне плитки в ванной.
Я пробовал, но проблема в том, что тогда персонаж "теряется" за стеной. Это не очень хорошо. Во-первых, это не имеет смысла, там как бы и не подразумевается, что там что-то есть. Во-вторых, это может путать игроков.
Тут нужно искать компромисс между реализмом и удобством, лично моё мнение. За стену можно встать, уже хорошо, но надо, чтобы героя было видно.
Только не вздумай делать силуэт персонажа за стеной, иначе тебя нинтендо оштрафует за нарушение патентов..
Нинтендо ушла из РФ, не говоря уж о том, что в РФ их патенты не зарегистрированы, так что они скорее всего даже пытаться не будут.
Как вообще они смогли вот это запатентовать https://dtf.ru/gameindustry/4019240-nintendo-patent-na-mehaniku-vyzova-personazha Судья в Скайрим не играл?
Это патентный троллинг называется. Дело не в том, кто первый сделал. А в том, кто первый запатентовал. Кто первый встал, того и тапки.
С другой стороны, если они пойдут в суд с этим патентом, и сторона защита покажет игру с этой же механикой до даты регистрации патента, то иск аннулируют, как и патент. Создатели Palworld недавно же победили в суде против нинтенды именно этим способом.
А я под юрисдикцией РФ, а не США. Вот если бы у меня было еще и гражданство или хотя бы вид на жительство США, то тогда другой разговор.
Вообще, можно было бы доебаться до того, что деньги на счете аккаунта разработчика лежат у Valve, а они американская компания, значит у меня есть имущество под юрисдикцией США, которое можно конфисковать. Но тут как раз и загвоздка в том, что лежат-то они на банковских счетах Valve, а не моих. Это их деньги, я их еще не получил и не имею право ими свободно распоряжаться. Valve - не банк.
1) Там описана определённая механика - надо кинуть предмет во врага, вместо предмета появляется союзник, он появляется обязательно перед игроком.
2) Патентное бюро сша коррумпированная структура
3) Патентное бюро Японии в таком патенте, вроде как, отказало
Я тоже. Отдыхаю воть. Второй год.
Устал или мотивация поехала? Это две большие разницы.
Устал это когда делал, делал и в сон стал валиться в 3 часа ночи, скорей бы утро и снова за работу. Вот это усталость.
Исчерпание мотивации это не усталость.
Просто тебя другие приоритеты сбили. Возможно временно. Потому что мотивация != жизненные цели. Мотивация существует на эмоциональном уровне. Она накапливается как либидо.
Если у тебя есть жизненная цель стать инди разработчиком, то мотивация накопится со временем.
Тогда ляг поспи и снова делай.
ТЛДР: Как делать мультиплеер в годоте в виде сервера и гейм менеджера.
Добавлю, что обычно я делал простые мультиплееры и какой-то физики и прочего мне переносить было не нужно и я просто пилил сервера на Go и имел полный кастом. Как переносить в текущем случае физику и логику, которая построена на коллизиях и анимациях я понятия не имею. Допустим гейм менеджер я сделаю на го, а остальное как? Хэдлесс игра? Или как-то инстансить сервер внутри клиента?
От света - нет. От теней - возможно.
Уже неоднократно обсуждали здесь: источник света в компьютерной графике лишь немного меняет оттенок освещённых пикселей, и это дёшево, хотя старые API поддерживали мало источников. Тени же - вообще отдельная концепция, которую можно по-разному реализовать, но сейчас доминирует shadow mapping. Который, естественно, затратен, поскольку должен отрендерить кусок сцены в текстуру теней раньше финального рендера. А теперь внимание: для 360° освещения с тенями в идеале нужно 6 карт в виде кубической развёртки. Эконом-вариант может и 2 использовать, но выглядит слишком всрато. Но без рендеринга теней освещение 360° почти бесплатно.
Где может пригодиться освещение без теней? Вот, например, неоновые вывески: они излучают свет, но слишком слабый, чтобы от них падала тень. Парочку омнилайт засовываешь в вывеску и она будет чуть реалистичнее даже без отбрасывания теней.
У тебя на скриншоте омнилайты создают свечение окошек под потолком. Тени там не нужны - это типа мутные или матовые стёкла, что рассеивают свет вокруг себя, окрашивая предметы без теней.
Почему нельзя использовать блум (bloom)? Это постпроцессинг - работает поверх рендера, как бы размазывая яркие пиксели. Если ярких пикселей в непосредственной видимости нет, не будет блума. Омнилайт может освещать предметы из-за угла. Естественно, никто не мешает добавить и блум - так возможно сделать более мягкие очертания света.
Смотрю на локацию, думаю "похоже на e1m1", а потом слева вижу "DoomE1M1", забавно.
Headless билд нужен только если тебе неиронично нужен dedicated сервер, где ты будешь симулировать физику для античита и быть мастер-хостом всех сессий. В p2p просто пилится функционал мастер-хоста внутри одного из клиентов, который проверяет обновление стейта сессии и отправляет эту информацию другим членам сессии, а организацией сессий занимается какой-нибудь сервачок на go или вообще левый p2p сервис.
>Вопрос: как мне понять как мне организовывать мультиплеер наиболее православно.
Зависит от типа игры. Если это какой-нибудь 2д слоп то там можно и р2р обойтись, тем более ты индюк. Если это 3д фпс шутанчик, особенно на кучу клиентов - то ему понадобится либо очень умный р2р сервачок который помимо проксирования rpc будет еще и обеспечивать лаг-компенсацию, либо придется пилить нормальный, православный сервер.
>Теоретически я хочу гэйм менеджер и отдельные сервера, но я не уверен, что нужно делать так.
р2р делать проще, особенно в годоте/с фотоном. Но если ты хочешь античит, хочешь по хитрому управлять геймплеем, у тебя масштабная игра и ты не хочешь чтобы пиратские сервера на базе твоей раздербаненой игры выросли моментально после успеха релиза - тебе понадобится свой сервер. В сущности писать логику мастер-хоста/дедикатед сервера в любом случае придется, потому здесь больше вопрос куда ты целишься со своей игрой.
>>8527
>Как переносить в текущем случае физику и логику, которая построена на коллизиях и анимациях я понятия не имею.
Ну можешь просто передавать больше данных об обьекте, что позволит обеспечивать детерминизм физики.
>Допустим гейм менеджер я сделаю на го, а остальное как? Хэдлесс игра? Или как-то инстансить сервер внутри клиента?
Это нужно только если ты захочешь полноценную симуляцию сессий а-ля врот оф танкс. Для большинства серверных игр такие изращения не нужны, хотя для улучшеного античита возможно придется часть физики считать на сервере чтобы палить стрельбу сквозь стены и заход за текстуры.
>неиронично нужен dedicated сервер, где ты будешь симулировать физику для античита
Да, по сути я хочу, чтобы клиент только как витрина был, все просчеты физики и анимация на клиенте. Короче мне важно, чтобы все видели одно и тоже (позицию объектов, их анимацию, и положение всяких физико говняков)
>>8532
>р2р делать проще, особенно в годоте/с фотоном.
Наверное я мало понимаю и целюсь в лишний функционал, но я хз как делать п2п. Как должен будет выглядеть второй клиент? Какая-то каша, где один будет иметь по сути полный билд с расчетом и в нем считать инпут, другие игроки как ноды в его билде. Я видел уроки, но для меня это какой-то франкенштейн. С выделенным сервером я понимаю, что будет аля унифицированный клиент. А если п2п, то типа запускать этот сервер как отдельный сервис или как сцену (тогда получится п2п почище как по мне, но я хз как тут с ресурсами).
Короче я склоняюсь прям к отдельной логике сервера и все расчеты на нем, которую если что можно высрать в отдельный билд. Где про это подробнее почитать?
>>8532
>Ну можешь просто передавать больше данных об обьекте, что позволит обеспечивать детерминизм физики.
Блина звучит очень сложно. Типа подключать те же обработчики анимаций, физики уже в го, учитывая положения и силу - это ебанутся какая работа. В годоте же все само уже считается. Хотелось бы этого избежать. На го пусть будет менеджер сессий и может быть чат.
ХЗ очень мало понимания во всем этом. Хочу чистенько делать, а не каши. Я смотрел примеры мультиплееров в туторах, выглядит как-то ситуативно и васянски имхо. Как-то четкое разделение клиент сервер для меня понятнее и интуитивнее. Мне больше вкатывает самостоятельный контроль и синк параметров, чем всякие синхронизаторы и тд. Но я не откажусь от функционала движка
>как делать п2п
Документацию почитай для начала.
https://docs.godotengine.org/en/stable/tutorials/networking/index.html
Что у тебя за игра-то планируется?
Может, сначала стоит сделать попроще?
>>8532
Всё правильно написал...
>Что у тебя за игра-то планируется?
>Может, сначала стоит сделать попроще?
Попроще я делал, мне хочется сразу хавать правильную архитектуру. Я копировал туторы по мультиплееру, оно работает, но логика сервера получается впечатана в клиент (типа в одной сцене и клиентское отображение и серверная логика), мне это очень не нравится. Я согласен даже на что-то типа запустил класс/сцену Server и сцена Client подключается к этому серваку - уже получается раздельная логика. В теории этот класс можно вынести и в хэдлесс. Такой вот decouple.
Игра пока условно ебики 3дшные ходят по зданию от первого лица. Интеракции с предметами, нпс. Супер точности не надо, но хочу, чтобы все было у всех одинаково видно, как в условной фазмофобии и прочих коопах.
>>8538
>Документацию почитай для начала.
Спасибо! Я читал по верхам, когда туторы ковырял, ща увидел что там полезное.
Может есть примеры того как я написал? Сами как мультиплеер пилили? Или все таки не выебываться и хуярить как в туторах?
Хуя ты умный. Пасиб.
И еще интересно - игрушки в стиме получаются используют стим апи для созданий лобби и проброски портов для п2п? Или они свой сервак херачат? Как ето блять, разжуйте долбаебу по братски?
>логика сервера получается впечатана в клиент
В GTA 5 Online играл? Там официальный мультиплеер именно p2p, максимум до 30 человек, но тормозить начинает в зависимости от того, кто хост. На слабом компьютере даже вдвоём будет дикий рассинхрон. Отдельного сервера нет - если возникают проблемы соединения, игра отключается от игрока-хоста и превращается в хоста с пустой сессией (один игрок). Выделенный сервер там только только для поиска игроков, сохранения данных, контроля денег и т.п.
Естественно это всё приводит к огромному числу внутриигровых проблем: лаги, зависания, глитчи на миссиях, читеры, безнаказанно абузящие каждую уязвимость. И это - одна из самых популярных игр, с колоссальным бюджетом, в огромной франшизе, от огромной компании, на написанном с нуля движке. Сравни теперь их возможности со своими. Всё ещё недоволен тем, что приходится делать "некрасиво"?
Давно наблюдаю за всеми этими онлайн-играми и полностью разочаровался в них. Это всё слишком сложно, а результат - пук и обмяк на релизе/через несколько месяцев предсмертных обновлений. Демотивирует больше всего в геймдеве...
>>8546
>игрушки в стиме
Читай документацию, она открыта у стима:
https://partner.steamgames.com/doc/features/multiplayer/networking
>В GTA 5 Online играл
>Всё ещё недоволен тем, что приходится делать "некрасиво"?
Ну игру в гта затерпят, а в мое поделие нет. Но сейчас даже не в этом дело, а дело разобраться как делать все же правильно и какие проблемы решать. Сейчас уже снял часть вопросов: дублировать сервер на другом языке - долго и бесполезно, низко уровневый неткод писать не нужно - у годота есть апи. Но вот посмотреть готовую архитектуру мультиплеера на годоте хочется. Пока в туторах и проектах, что я смотрел, абстракции сервра не было, по сути в клиентской сесии были обработчики сетевые. Хочется понять так все делают? Есть по вашему примеры хорошего нет кода в сессионых играх на годоте? Мне вот пиздец хочется это все изолировать, но при этом я сейчас стараюсь не выдумывать, а просто научиться правильному
Эээ, я, честно говоря, не разбираюсь в этом всём, но как ты себе представляешь изолирование клиента? Я вот пробовал писать простенькие TCP программки, приблизительно вся их работа выглядит как просто последовательный обмен данными туда-сюда, нет? Изолировать (абстрагировать) тут как бы нечего?
Ну, скажем, ты хочешь двигать куб на клиенте, чтоб сервер видел положение куба. Ты двигаешь куб и отправляешь на сервер. Сервер принимает данные, сохраняет их к себе. Если сервер двигает куб, тогда клиент принимает данные о кубе и сдвигает его. Не понимаю, что от чего ты тут изолировать хочешь? Движение куба от передачи данных? Или что?
Я просто не понимаю, в чём твоя проблема-то...
сложность зависит от PvP или PvE
PvP оче сложно даже примитивном пинг понге синхронизировать СОСТОЯНИЕ
PvE в основном просто - задача в синхронизации КАРТИНКИ. Рассинхрон не фатален, отвалившийся клиен играет в своем мирке
Вы даже в начале дискуссии не определили что будет
мимо
>Я просто не понимаю, в чём твоя проблема-то...
Смотри:
Есть игра про движение кубов. В туториале чел делает сцену, где двигает куб стрелочками. Потом говорит, ща ебану мультиплеер. Добавляет какие то синк ноды в эту же сцену, срет скриптами в эти же объекты и запускает второе окно и говорит, вооо - теперь мультиплеер. Получился какой-то ебень полуклиент, полусервер где нет границы.
Мне хочется, чтобы было четкое разделение - вот эта сцена/класс/приложение клиент - вот это сервер. То есть я создал сцену где есть кубы и скрипт тупо считывает инпуты. Это абстракция клиент. И потом отправляет это в абстракцию сервер, где уже логика сессий, конекшна и игровая логика. Это абстракция может быть в виде менеджера, в виде отдельной сцены или даже в виде отдельного приложения. Вот такое есть, я правильно думаю? Или норм практика писать логику как для сингла, а потом вмазывать туда синхронизаторы и нэткод?
>>8555
>Вы даже в начале дискуссии не определили что будет
Я написал что условные кооп болванчики с нпс и немного физикой. Считай фазмафобия по устройству
>Хочется понять так все делают?
Rpc это база сетевых игр по сей день, в годоте разве что еще есть функционал прямого зеркалирования по п2п определенных полей определенных нод. Собственно, так делают многие до сих пор, просто обмазываются типизированными rpc для сложного взаимодействия и зеркалиоованием физических свойств (ускорение, позиция, поворот, инпут) и на основе кучи событий (и их обработки) строится сетевой обмен. Это позволяет дробить обмен на dto и управлять этими dto на низком уровне как вздумается. Обратная сторона медали - событий и их обработчиков может стать неприлично много, даже если опустить вопрос маппинга и траффика без полей. Это по крайней мере единственный достаточно простой в реализации рабочий способ. Есть и другие, но они доступны только тем кто не убоится нормальных языков и компонентных систем, а еще не убоится потерять ооп твердь и ступить на жидкую почву сущностей и их максимально разнообразного содержания, которое определяет их поведение.
>>8591
Смотря чего у тебя. Если новый проект - ебашь. Старый переводишь - готовься покопаться.
>Смотря чего у тебя. Если новый проект - ебашь. Старый переводишь - готовься покопаться.
Это как посмотреть. Я его завел на 4.4. Вот, случай подвернулся обновиться. Меня больше интересует не багованная ли весия? И почему никак блядь не пофиксят неработающий драг энд дроп в файловом менеджере если он откреплен от основного окна.
Потянулись движкосрачеры в загон. А я взял нод красных, спелых, нашинковал в сцену, сверху положил зелёные ноды, добавил скриптов макаронистых, и ещё добавил синглтон для мягкости. А тут уже и шаблоны экспорта скачались. Добавил шаблон в проект, экспортировал, запустил и начал неистово играть! И! И! И в школу сегодня не пошёл.
Я, блять, второй день играюсь с переустановленной 10 виндой. Так усрать операционку разной говной могут только мелкомягкие. При первом запуске шиндоус выглядит как те порносайты, на которых 80% экранного пространства занимает реклама разной степени шакальности
Не хотелось тут разводить ОСесрач, но чел, на линухе годот работает идеально. И игорь давно не тонет, спасибо Габену.
Ты еще 11 не видел. А так двачую анона выше. Половина разработчиков годота - линуксоиды
Если твой ПК позволяет, то используй Virtual Box или VMWare и на них накати любую ОС и на неё движок
Я недавно перешёл на 11 с 10, всё устраивает
> используй Virtual Box или VMWare и на них накати любую ОС и на неё движок
Это бессмысленно без проброса видеокарты в виртуалку. А этого я так и не научился.
У VMWare проброс есть вроде и отдельной, но, по идее сам VMWare будет при помощи своего драйвера пробрасывать часть ресурсов видяхи в виртуальную машину
>второй день играюсь с переустановленной 10 виндой
Сделай как на пикриле и Windows сразу станет лучше.
Тогда лишние приложения можно будет удалить.
Несколько лет без обновлений - всё работает!
>Несколько лет без обновлений
@
ПОКА ДЕЛАЛ СКРИНШОТ ЧТО-ТО НАЖАЛ
@
«ОБНОВЛЕНИЯ | Б У Д У Т | УСТАНОВЛЕНЫ»
@
«ОЙ! ПРОИЗОШЁЛ 0x060СРАМС В WTF.SYS :(»
@
ПЕРЕЗАГРУЗИЛАСЬ
@
ПЕРЕЗАГРУЗИЛАСЬ
@
ПЕРЕЗАГРУЗИЛАСЬ
@
«ИДЁТ УСТАНОВКА...»
Моё лицо - на пикриле.
Я знаю, я тестировал. Но мне немного стремно как будет с билдами игр. Я же не смогу нормально тестировать. А две оси я себе позволить не могу. Ну и иногда и в онлайн дрочильни поиграть хочется
>>8764
Я планирую принудительно укатиться на линупс когда десятка окончательно сдохнет. Но я так уже сделал после семерки, через 3 года на дебиане стиснув зубы затерпел и вернулся к десятке.
В целом, если мне кто-то нормально расскажет как там обстоят дела со сборкой игры я может и свалю на линукс. Возможно кто-то сочтет меня ебанутым, но я боюсь магического воздействия, которое сделает мои игры незапускаемыми, если я буду собирать под винду на линуксе и наоборот.
>две оси я себе позволить не могу
У тебя SSD меньше 256 ГБ под систему что ли?
Делишь диск так:
96 ГБ под шинукс для работы
4000 ГБ под пиндус для игорей
И всё норм будет. По идее.
>дела со сборкой игры
Ты export template из исходников компилируешь?
Если нет, то вообще никаких проблем (по идее).
Если да, то, по идее, на шпиндукс будет лучше.
В смысле, шинукс. Или пиндус?.. Блин.
Просто почитай документацию.
У меня кореш на мак уже перекатился. Без обид, конечно, но идите нахуй со своим соевым маком.
>Возможно кто-то сочтет меня ебанутым, но я боюсь магического воздействия, которое сделает мои игры незапускаемыми, если я буду собирать под винду на линуксе и наоборот.
Годотовые игры собирается одинаково что на линуксе что на винде, под любую платформу. У меня на итче валяются игры (и люди в них играют) которые были собраны под линукс-винду-мак-андроид НА линуксе. И если виндовую и андроидовую версию игры я мог протестировать, то билд под мак я выложил не протестировав, и написал что хуй знает работает ли он. Как мне в комментах потом написали - работает.
Двачую. Слово в слово так же было.
Олсо, я и темплейт компилировать из исходников пробовал. Под шиндошс из-под линуха нормально компилился и потом работал; под макось и ведроид - я тогда не осилил. Но это всё в порядке эксперимента, в релизе использовал всё равно дефолтные темплейты.
Ваши игры же присутствуют в видосе? Верно же? Вы их сделали, релизнули и отправили?
Поиграл, мне понравилось, жалко нет продолжения, час примерно аутировал за разные классы. Идея понятно, играть интересно даже вот как щас есть, отсутствие графики не смутило, то что меня сырое вот это прям на подкорке мозга ебёт но понятно что демка. Механики за час показались прикольными, жду релиза короче
У Кенни на гитхабе были стартер киты для разных жанров, не знаю есть ли там именно ГУЙ для настроек. Выглядит слишком поверхностной задачей чтобы кто-то заморачивался.