Gamedev

Ответить в тред Ответить в тред
Godot #20 Аноним # OP 30/11/20 Пнд 20:42:42 7123301
ОП пикча 2020 20Кб, 512x327
512x327
Добро пожаловать в 20-й тред любви, взаимопомощи и модулей на крестах в 20-м году!

Краткий гайд по вкату в движок:
1. Читать документацию.
2. Качать примеры.
3. ПРОФИТ!

Ссылки
Скачать движок: https://godotengine.org/download/ или http://store.steampowered.com/app/404790/Godot_Engine/
Теперь прямо онлайн - можно и с дивана: https://godotengine.org/online/godot.tools.html
FAQ: https://docs.godotengine.org/ru/latest/about/faq.html
Документация: https://docs.godotengine.org/ru/latest/ https://docs.godotengine.org/en/stable/
Примеры качаются прямо в движке через свой магазин в отдельной вкладке AssetLib. Там есть всё - от платформера до чата.
Игры, созданные глобальными кириллами: https://steamcommunity.com/app/404790/discussions/0/412448792354265655/
Изумительный Годот: https://github.com/Calinou/awesome-godot - подборка дополнений, модулей и минишоукейс от одного из авторов.

Годнота от анона
- Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории.
- В версии 3.2 появилась возможность прикреплять pck к бинарнику. Бриллиант для любителей однофайлового продукта!
- Редактор персонажей на основе makehuman: https://github.com/Lexpartizan/Go_MakeHuman_dot
- Тест-бенчмарк:
- - Веб-версия - https://govdot.herokuapp.com
- - Вишмастер для винды - https://govdot.herokuapp.com/4Anon.rar

Предыдущий тонет там: >>698054 (OP)

Архивы:
1 https://arhivach.ng/thread/207802/
2 https://arhivach.ng/thread/388500/
3 https://arhivach.ng/thread/388501/
4 https://arhivach.ng/thread/388502/
5 https://arhivach.ng/thread/388503/
6 https://arhivach.ng/thread/432708/
7 https://arhivach.ng/thread/433902/
8 https://arhivach.ng/thread/436355/
9 https://arhivach.ng/thread/455461/
10 https://arhivach.ng/thread/479963/
11 https://arhivach.ng/thread/489815/
12 https://arhivach.ng/thread/494513/
13 https://arhivach.ng/thread/515567/
14 https://arhivach.ng/thread/533171/
15 https://arhivach.ng/thread/555441/
16 https://arhivach.ng/thread/592945/
17 https://arhivach.ng/thread/592946/
18 https://arhivach.ng/thread/614942/
Аноним 30/11/20 Пнд 20:52:43 7123322
Смачно пропукался в годотя-треде.
Аноним 01/12/20 Втр 02:10:26 7123683
>>712244 →
Неплохо, но бессмысленно. Как раз задумка в том, чтобы не читать сейв-файл при открытии диалогового окна. Этот-то проект мелкий, но я планирую и в большом так же делать, а там сейвы покрупнее будут, читать каждый ради получения превьюх - не гуд.

>>712309 →
>А на андроидах такое будет работать?
Если не сработает, подгрузится дефолтная иконка. И буду думать, как починить.

Подключившимся к беседе спасибо. Я сделал самым простым способом: при нажатии кнопки сохранения берётся скриншот, хранится в памяти, а обрезается и ужимается уже непосредственно при сохранении файла. Таким образом, под долгий процесс отведено то время, когда игрок всё равно ожидает каких-то подтормаживаний. А что скриншот в памяти сохраняется, так это не страшно. Тем более что кнопка сохранения вызывает только окно сохранения, никаких других менюшек.
Аноним 01/12/20 Втр 13:35:37 7124124
>>712368
> чтобы не читать сейв-файл при открытии диалогового окна
> а там сейвы покрупнее будут
Ты предполагаешь чтение файла целиком. Но движок имеет функционал для чтения файла по частям. Текстовый файл можно читать построчно. Бинарный побуферно.
Чтение одной строчки текстовика, длиной в размер пикчи будет несколько дольше чтения файла пикчи, из-за накладных расходов текстовика. Чтение же буфера из бинарного файла вообще предположительно (sic!) ничем не будет отличаться от аналогичного ПНГ, ибо он читается с диска так же (!?!sic!?!) в бинарном режиме. Но зато ты не срёшь файлами в папке с сейвами.

Ну опять, же я не настаиваю. Ничто не мешает заводить под каждый сейв папочку и хуярить в неё несколько пикч, несколько конфигов, несколько БД-шек. О, можно же пакануть потом эти файлы в ПАК, средствами самого движка или в ЗИП. В общем, вариантов куча.
Аноним 01/12/20 Втр 13:39:45 7124145
>>712412
Прикольно было бы сохранять игру в ПНГ-файл вообще. Надо изучить формат ПНГ, выяснить, как он читается программами просмотра, найти места для безболезненного инжекта метаданных и хуярить. Круто же будет. Заходит игрок в папку с сейвами, чтобы сохранить важные из них, а там - одни пикчи. И он такой, ЕБАААТЬ! А ГДЕ МОИ СЕЙВЫ??? Троллинг 80 левела!
Аноним 01/12/20 Втр 15:30:47 7124246
>>712414
Ты только что раржипег. Но кстати, это же офигенное применение раржипега!
Рарпнг вроде как тоже возможен, но тут я анус не поставлю, не помню.
Аноним 01/12/20 Втр 18:09:34 7124337
>>712412
По какой-то причине в тех играх, где я видел сейвы со скриншотами, в папке они лежали раздельными файлами. Причины этого мне неизвестны, но я всё же думаю, что так удобнее и нагляднее.
Аноним 01/12/20 Втр 18:59:58 7124428
>>712424
> Ты только что раржипег.
Я думал о раржпеге, но когда писал тот пост, в голове держал стегхайд (если ты его помнишь). Потому что ящитаю, раржпег или пнгзип (он возможен), являясь приписанным в конец пикчи архивом, уязвимы к всевозможным чистильщикам, умным просмотрщикам, антивирусам и прочим мокрописькам, которых игроки обязательно понаставят на свои компы. И вот представь: твой игрок поставил себе какой-нибудь очередной SickLeaner и тот нашёл у него твои сейвы-пнгзипы и пишет юзеру "мы можем высвободить у вас 60 Мб свободного места!" а юзер "Да!", и потом открывает игру, жмёт "продолжить" а ему "файл сохранения повреждён". И он плачет, рыдает у тебя в техподдержке "Я джва месяца играаал! У меня эльф 80го левела и 50 лутбоксов на аккаунте!"
Такшта, только сохранение в метаданных без потери консистентности формата, только хардкор.
>>712433
Они не были анонимусами и не знали.
Аноним 01/12/20 Втр 19:03:45 7124439
>>712442
А надо всего то хранить сейвы в облаке, там где онлайн активация и лутбоксы
Аноним 01/12/20 Втр 19:14:17 71244410
>>712443
Ну это бесспорно.
Аноним 01/12/20 Втр 20:35:28 71246011
Второй день смотрю Game Endeavor. Какая же ГОДНОТА, хоспаде! Например, "койот-тайм", зависание в воздухе за краем платформы перед падением, сам бы я никогда не додумался, что он используется в платформерах, и что его нужно использовать для удобства игрока.
Аноним 01/12/20 Втр 20:56:24 71246312
>>712460
Не смотрю гейдевора. Он говорит невероятно неразборчиво.
Аноним 01/12/20 Втр 21:44:22 71247513
>>712463
Ютуб-субтитры + перевод. Я так смотрю. Правда перевод ПОТРАЧЕННЫЙ. К шуткам гейминдевора добавляются шутки надмозга.
Аноним 02/12/20 Срд 02:10:44 71250814
image.png 986Кб, 1280x720
1280x720
Поясните за 4 версию, на ютубе наткнулся на демки SDFGI, как я понял есть неоф. билды.
Они обновляются или это просто пол-рублёвые деки до офф. релиза? Где их лучше качать?
Я не геймдевер, просто хочу свет посмотреть.
Аноним 02/12/20 Срд 03:34:44 71252115
>>712508
>Где их лучше качать?
Качаешь мастер-ветку https://github.com/godotengine/godot и билдишь сам. Есть шанс, что сбилдится и запустится)
Смысла в распространении этих билдов нет, исходники обновляются каждый день, багов наверняка много, версия сырая...
Аноним 02/12/20 Срд 12:42:58 71256016
>>712521
Ящитаю, лучше качать померженный бранч отдельно https://github.com/godotengine/godot/tree/vulkan потому что (я так предполагаю) в бранче всё оттестировано и работает, а в мастере работа ведётся наживую и анону может не повезти именно в момент закачки закачать код с поломанным функционалом. А бранч он уже всё. Застыл в истории после мержа. Поправьте, если я не так понимаю.
02/12/20 Срд 12:48:58 71256317
>>712560
Там февраль. Не на что смотреть.
(А если сегодняшний билд не заработает, то ничего не мешает чекаутить просто любой другой коммит из истории, например любой из позавчерашних)
Аноним 02/12/20 Срд 12:50:30 71256418
>>712563
Сложно, непонятно! :(
Аноним 02/12/20 Срд 12:54:03 71256619
>>712564
Открываешь страничку: https://github.com/godotengine/godot/commits/master
Выбираешь любой день и смотришь там цифирки коммита, например 0167bfa
Пишешь команду git checkout 0167bfa
Все, твой репозиторий теперь на этой точке.
Аноним 02/12/20 Срд 13:18:08 71257020
skincollection4[...].jpg 45Кб, 1024x576
1024x576
Аноны, пытаюсь освоить Годот. До него имел опыт работы в констракте. Опыта в программировании не имею никакого.
В связи с чем вопрос:
А хули так сложно то?
Смотрю уроки на ютубе, читаю эту самую документацию и нихера понять не могу.
Наприме надо сделать так, чтобы статичный спрайт спаунил другой спрайт (пулю) раз в 5 секунд. В констракте это делается буквально 3мя кликами, + еще и условия всяких накидать можно. В Годо же кучу всякой херни написать надо. Какого блядь черта? Вот как этот ебучий таймер делать? На сцене со спаунером, или на сцене с уровнем? Нихенра не понятно.
Или вот еще - "пишу" код, обозначить переменные это понятно, дальше надо писать "func _тут_какая_то_херня (а скобки зачем?)"
ни в одном уроке не нашел ничего подробного про эту "func" - название любое что ли можно? Или список есть? В примерах всегда почти одни и те же названия, типа "_rеdy". А в скобках что? Или для того,чтобы писать на гдскрипте нужно питон знать?с нуля вкатиться в гд не получится?
визуальный скрипт пробовал но даже не понял с чего начать
Аноним 02/12/20 Срд 13:37:47 71257221
>>712570
>В Годо же кучу всякой херни написать надо.
Это и есть описание твоих условий которые ты накликивал.
>на сцене с уровнем?
Логичнее на ней. Добавляешь ноду Timer, ей ставишь свои 5 секунд, и автостарт. Нажимаешь у нее signals и там timeout. Он тебе сам услужливо создаст функцию on_timeout. В ней надо написать что то типа
var bullet_scene = load("res://твоя_сцена_пули.tscn")
var bullet = bullet_scene.instance()
add_child(bullet)

> "func" - название любое что ли можно?
У твоих функций может быть любое название.
_ready, _process, _physics_process, _input - это те, которые всем объектам создает движок. Он же их и вызывает когда надо.
Аноним 02/12/20 Срд 13:49:52 71257522
>>712570
>В констракте это делается буквально 3мя кликами, + еще и условия всяких накидать можно. В Годо же кучу всякой херни написать надо. Какого блядь черта?
Ну так констракт это и не движок, а "конструктор", где код нельзя писать в принципе, естественно, что там проще.
>Вот как этот ебучий таймер делать? На сцене со спаунером, или на сцене с уровнем?
Таймер это обычный node, добавляешь его ребенком к херне, которая создает у тебя пули. Потом еще нужно соединить его timeout сигнал, если ты хочешь, чтобы что-то произошло, когда время выйдет.
>.func _тут_какая_то_херня (а скобки зачем?)"
В скобках указываются аргументы, если их нет, то тогда они пустые. Сама по себе функция это просто какой-то изолированный блок кода, который исполняется только тогда, когда ты вызываешь саму функцию.
>В примерах всегда почти одни и те же названия, типа "_rеdy"
'_ready' это "встроенная" функция, которая автоматически вызывается, как только node создается в сцене. Ты можешь создавать свои функции и называть их в принципе почти как угодно.
>Или для того,чтобы писать на гдскрипте нужно питон знать
В принципе не нужно, но знание основ программирования на любом языке помогло бы значительно.
>ни в одном уроке не нашел ничего подробного про эту "func"
В уроках, наверное, самые основы не объясняют. Читай официальную документацию.
https://docs.godotengine.org/en/stable/getting_started/scripting/gdscript/gdscript_basics.html
Аноним 02/12/20 Срд 13:50:30 71257623
>>712570
Ну блин. А зачем ты в школе прогу продалбывал? Сейчас у тебя был бы какой-никакой опыт алгоритмоёбства, архитектуры, всей херни. С наследованиями бы проблем не было.
Тебе нужно подтянуть совершенно любую прогу на любом языке. Нужны совершенно базовые вещи вроде функций и переменных, немножко про объекты и поля объектов и указатели (только без хардкорного указателеёбства как в C любят). Ну и про дерево прочесть что-нибудь можно. Лучше на Питуне, потому что синтаксис похожий, если в школе Паскаль учил, будешь постоянно об «=» и «==» спотыкаться и на циклах материться.

Вкратце, весь скрипт состоит из функций, в которые ты свои команды и напихиваешь. Их называй как хочешь, лишь бы ты сам понял, чо хотел (какие-то ключевые слова или уже имеющиеся функции не надо использовать, но я на такое особо не натыкался). Скобки после названия функции нужны для аргументов.
Например если тебе нужна функция, которая стирает пули, она должна иметь вид func remove_nahui (bullet). Тогда внутри функции ты сможешь обращаться с объектом bullet как с астоящей пулей. Потом где-то в другом месте, где тебе понадобиться удалить пулю bullet_96_ot_mahmuda ты сможешь взять и вызвать remove_nahui (bullet_96_ot_mahmuda), и пропадёт именно та пуля, которая тебе нужна.
Пустые скобки (как у _ready()) — это по большей части формальность, но она позволяет самому компилятору отличать функции от переменных.
Аноним 02/12/20 Срд 13:58:14 71257724
>>712576
Заметил что многие вкатываются в возрасте, а у них никакого программирования в школе не было.
Аноним 02/12/20 Срд 14:19:30 71258725
>>712412
>(sic!)
>(!?!sic!?!)
Что это за хуйня?
Аноним 02/12/20 Срд 14:22:31 71258826
>>712460
>Например, "койот-тайм", зависание в воздухе за краем платформы перед падением, сам бы я никогда не додумался, что он используется в платформерах, и что его нужно использовать для удобства игрока.
Мне нравится как молодеж, открывает для себя вещи придуманные в геймдеве более 20 лет назад. Джампбуфер и обход краев для тебя наверное тоже откровением были.
Аноним 02/12/20 Срд 14:22:38 71258927
>>712587
Не обращай внимания, этой хуйней никто пользоваться не умеет.
Аноним 02/12/20 Срд 14:22:58 71259028
>>712587
sic erat scriptum "так было написано"
Аноним 02/12/20 Срд 14:24:57 71259229
>>712590
Вот именно что sic означает что "так у автора"
Например когда цитируют письмо в редакцию с опечаткой
У нас же почему то пихают его везде в значении "ни хуя себе"
Аноним 02/12/20 Срд 14:25:09 71259330
>>712588
> молодеж
Эх, если бы.
40калетний дед, решивший вкатиться в геймдев после 20 лет одминства набашорге
Аноним 02/12/20 Срд 14:27:04 71259531
>>712592
> Вот именно что
>>712412
> Чтение же буфера из бинарного файла вообще предположительно (ТАК мне преподавали в институте 100500 лет назад!) ничем не будет отличаться
> ибо он читается с диска так же (!?!действительно ли ТАК же?!?!) в бинарном режиме
Аноним 02/12/20 Срд 14:52:04 71260232
>>712595
Вы ебанутые? Нахуя вы используете аббревиатуру, которую половина прочитавших не поймет, а вторая половина будет понимать каждый по своему?
Аноним 02/12/20 Срд 17:49:01 71261333
>>712602
Мне неинтересно мнение тех, кто ниже моего уровня эрудиции. Поэтому да, если прочитавшие не поняли меня - нахуй их даннинг-крюгеровский бредок.
Аноним 02/12/20 Срд 22:32:50 71267734
>>712613
чувак, знать какое то умное слово - это не показатель эрудиции.
Аноним 02/12/20 Срд 23:09:47 71268935
Аноним 02/12/20 Срд 23:54:16 71269836
>>712689
Лень смотреть, что там?
Аноним 03/12/20 Чтв 00:53:21 71270437
>>712698
Твою матуху ебут на спине твоего бати.
Там Годот.
Аноним 03/12/20 Чтв 01:54:52 71270838
Аноним 03/12/20 Чтв 15:37:27 71285639
>>712689
Такой вопрос. Даже 2.
1) Применимо ли подобное для 2ДУже не надо, сам нашел
2) Зачем он фпс физики до 30 опустил, или для шутанов это норма?
Аноним 03/12/20 Чтв 15:58:46 71285940
Аноним 03/12/20 Чтв 22:19:48 71292841
111111111111111[...].jpg 34Кб, 923x727
923x727
Написал издателю html5 игр, что бы он купил мой шедевор за 200$, но он пишет что игра не запускается и у него ПИНК СКРИН. Я потестил с разных браузеров и устройств, все работает. В чем может быть проблема?

билд Godot 3.2.2 html5 компиляция.
Аноним 03/12/20 Чтв 22:42:43 71293542
>>712928
Глес2 или 3? Собери пустой проект и скинь ему.
Аноним 03/12/20 Чтв 22:48:24 71293843
>>712935
Глес 3й, сейчас знакомому скинул на вин10 через разные браузеры, тоже все норм.

>Собери пустой проект и скинь ему
Я думаю он не будет этим заниматься. Там поток огромный.

ссылка на билд: https://cubic321.itch.io/panda-jumper?secret=mGHLkHarvMHMz2Pmimm2pvgNjj0
Аноним 03/12/20 Чтв 23:03:47 71294344
>>712938
Хардкорная игра! Не против, если я её в шапке размещу?

Предложи издателю другой браузер. Переустановить шындовс. Макось.

Любой хтмл-экспорт автоматически дропает рендер до глес2. Это знать надо, это классика!
Стало быть переключай проект на глес2 и тестируй.
Аноним 03/12/20 Чтв 23:11:20 71294645
>>712943
>Хардкорная игра! Не против, если я её в шапке размещу?
Не надо, она еще не вышла и ссылка будет меняться.
>Любой хтмл-экспорт автоматически дропает рендер до глес2. Это знать надо, это классика!
Ты думаешь у паблишера розовый экран из-за глес3? Странно, но почему тогда у других все работает... я попытаюсь, но не хотелось бы этого делать, так как в глес2 половина эффектов не работает
Аноним 03/12/20 Чтв 23:17:37 71294946
>>712946
> почему тогда у других все работает
Например у издателя машина загажена кучей фреймворков и либ, ведь он потоком принимает игоры и вынужден их запускать. Возможно там кодеки через кодеки, вплоть до того, что они в браузеры лезут.

На твоём месте я бы не стремался и поговорил с ними ещё раз. Уточни, какой у них браузер, и могут ли они запустить в другом? По факту есть только три браузера сейчас: всё хромиумное, мозилла и сафари.

Предложи им бинарник запускной. Чисто чтобы потанцевал заценить. С веб-версией позднее разберётесь если им понравится.

Мне понравилось.
Аноним 03/12/20 Чтв 23:33:31 71295347
>>712949
Ок, благодарю за помощь, буду решать этот вопрос.
Аноним 04/12/20 Птн 00:22:16 71296248
>>712943
>Любой хтмл-экспорт автоматически дропает рендер до глес2
Нет, не так. Gles2->WebGL, Gles3->WebGL 2

https://docs.godotengine.org/en/stable/getting_started/workflow/export/exporting_for_web.html

WebGL 2 is not supported in all browsers. Firefox and Chromium (Chrome, Opera) are the most popular supported browsers, Safari and Edge do not work. On iOS, all browsers are based on WebKit (i.e. Safari), so they will also not work.

Godot's WebGL 2 renderer has issues with 3D and is no longer maintained.

Так что для веба НАДО делать в GLES2. Ну а спецэффекты, в принципе они и в gles2 реализуются.
Аноним 04/12/20 Птн 05:21:34 71297749
Начал учиться шейдерам. Что-то не то напрограммил и иксы упали к хуям. Забавно.
Аноним 04/12/20 Птн 05:48:41 71297950
>>712977
Да шинда тоже в таких случаях падает, в блюскрин или ребут. Особенно если в фоне играет видео в браузере.
Аноним 04/12/20 Птн 20:01:00 71311951
Клуб анонимных прокрастинаторов

Привет, годаны! Кажется, я уже готов написать свой первый нормальный топдаун-двадэ-контроллер персонажа. Предыдущие были ненормальны и не устраивали меня по разным причинам.
Теперь я узнал, кмк, всё необходимое:
1. Инпут осями (x = r - l, y = d - u)
2. Стейт-машина.
3. Разгон до максимальной скорости через интерполяцию, торможение до нуля тоже. Коэффициенты задаются конфигом.

Ну всё, запускаю редактор.
Аноним 06/12/20 Вск 00:12:00 71331752
1607202719716.png 101Кб, 669x804
669x804
>>713119
Ну вроде все устраивает. Хотя, что-то всё равно гложет. Что-то не нравится. Не пойму, что.
Аноним 06/12/20 Вск 13:42:06 71334153
А зачем добавили скриптинг на C++ и C#? Разве они могут то что не может GDscript?
Аноним 06/12/20 Вск 13:44:24 71334254
>>713341
Чтобы разрабам с других движков было удобнее переехать. Ну и вроде как они себя показывают в бенчмарках пошустрее.
Аноним 06/12/20 Вск 14:06:18 71334555
>>713341
Каждый язык может что-то, что либо не могут другие, либо могут, но медленнее и/или неудобно. Именно поэтому в IT так много языков. И это охуенно! Это конкуренция и прогресс.
Аноним 06/12/20 Вск 14:37:18 71335156
>>713342
То есть лучше писать на крестах?
Аноним 06/12/20 Вск 14:43:25 71335357
>>713351
Ну он ещё очень нескоро устареет, так что навык полезный будет.

Особенно в играх. Вдруг на Анриле захочешь ещё попробовать сделать игру. Но и в Годоте от этого будут преимущества.
Аноним 06/12/20 Вск 14:45:12 71335458
>>713353
О да! Я мечтаю когда-нибудь осилить кресты и написать свои модули для годота. Шарп уже почти осилил.
мимокрокожу
Аноним 06/12/20 Вск 14:46:31 71335559
>>713341
Во-первых, производительность, как сама по себе (гдскрипт интерпретируемый язык, C# компилируется в байткод который компилируется в машинные инструкции, C++ сразу компилируется в машинные), так и за счет ассемблерных вставок (например, чтобы распараллелить какие-то вычисления).
Во-вторых, возможность подключить практически любую готовую библиотеку на этих языках и вызывать ее функции. А библиотек в мире тысячи. Переписывать их на гдскрипт займет очень много времени.
В-третьих, языки различаются по мощности, выразительности. Более мощные языки позволяют записывать более сложные вещи коротко, емко, выразительно. Дженерики/шаблоны вместо повторения однообразного кода, лямбды по месту вместо заведения отдельных фунцкий обернутых в FuncRef, более гибкое и навороченное ООП чем просто class_name.
В-четвертых, сам движок написан на c++, так что довольно легко в него встроиться
Аноним 06/12/20 Вск 14:49:12 71335660
>>713355
> сам движок написан на c++
Можно и законтрибьютить в Godot 4.X что-нибудь потом при желании.
Аноним 06/12/20 Вск 14:50:36 71335761
1581181532049.mp4 17946Кб, 1920x1080, 00:00:44
1920x1080
>>713351
На плюсах писать медленнее, сложнее и опаснее. Обычно на них пишут когда уже есть понимание какую часть игры ты ускоришь этим. Если у тебя карточная игра где игрок думает по пол минуты, или платформер где всего 20 врагов на экране, они тебе не нужны. Если тебе нужно пересчитывать десятки тысяч клеток или юнитов в кадр, то скорее всего без них никак.
Аноним 06/12/20 Вск 15:43:52 71336162
1607258631844.png 51Кб, 610x481
610x481
Просто оставлю это здесь.
Пользуйтесь!

Поправки и замечания принимаются.
Аноним 06/12/20 Вск 16:14:18 71337063
>>713361
Годно. Как раз не хватало чего-то такого, чтобы разделить стейты рук и ног.
Аноним 06/12/20 Вск 16:27:00 71337464
>>713370
А то! Я с утра замыслил вот такое:
> enum MOVING { IDLE, WALK, CROUCH, JUMP, FALL }
> enum STAYING { LAND, WATER, AIR, SPACE }
> enum GROUNDING { FIRM, CRUMB, EDGE, HOT, WET, SLIP, SLIM }
> enum ARMING { SHEATHE, STEELARM, FIREARM, THROWING, RANGED, EXPLOSIVE }
И охуел, сколько мне вложенных дублирующихся match придётся делать. И принялся думоть над решением. И тут - БАЦ! Эвриак!
Аноним 06/12/20 Вск 17:05:41 71338065
>>713370
Более того, все подстановки, указанные в доках - работают. То есть, при добавлении анимаций можно добавлять условия, а закрывать каждый такой "блок условий" общим шаблоном:

match [moving_state, staying_state, ground_state, arming_state]:
# блок IDLE
[MOVING.IDLE, _, GROUNDING.EDGE, _]: anim.play("idle_with_sway")
[MOVING.IDLE, STAYING.LAND, _, ARMING.FIREARM]: anim.play("idle_with_gun")
[MOVING.IDLE, STAYING.WATER, _, _]: anim.play("water_idle")
[MOVING.IDLE, _, _, _]: anim.play("common_idle")
# конец блока IDLE
Аноним 06/12/20 Вск 18:46:19 71341366
1607269576785.png 3Кб, 195x212
195x212
>>713380
Ля как охуенно всё работает! Все компоненты общего состояния переключаются независимо. Вхожу на лёд, включается компонент скользко. Контроллер перемещения включает модификаторы для скользящего движения. Выхожу - выключает. Класс!
Аноним 06/12/20 Вск 21:58:09 71349467
1607281088810.png 12Кб, 323x211
323x211
>>713317
> что-то всё равно гложет. Что-то не нравится
От теперь заебись!
Когда вынес весь функционал в компоненты.
Аноним 06/12/20 Вск 22:43:38 71349968
1607283818214.png 7Кб, 335x171
335x171
>>713494
От теперь ваще каеф!
Целей достиг. Можно ещё месяц видосики смотреть.
Аноним 06/12/20 Вск 23:51:54 71350369
>>713413
>>713380
>>713361
так, пажжи.
Т.е. условно у меня есть состояния "ходьба стоя", "покой стоя", "бег стоя", "ходьба раком", "покой раком", "бег раком" итоде. В итоге это может сократить кол-во этих состояний? Если зажат шифт, то хоть раком, хоть буераком, будет включаться режим бега и не придётся делать его для обеих поз?
Аноним 06/12/20 Вск 23:54:46 71350470
Аноним 07/12/20 Пнд 14:10:02 71356471
>>713503
Ну да. Главное - правильно всё спроектировать и раскидать по категориям. На каждую категорию свой "слой" в комбинированной стейтмашине. И разумеется, это должно соответствовать задуманным тобой игровым механикам. Если ты хочешь, чтобы из положения раком персонаж резко срывался на бег, то делаешь так. Если не хочешь - делаешь иначе.
Основная проблема, которую решает такой подход - лёгкость программирования поведения в разных средах. Персонаж не может, скажем, доставать оружие, если находится в воде. Или, если есть холодное и огнестрельное оружие, он не может доставать в воде только огнестрельное.
В воде, на суше (причем на твёрдой и на крошашейся поверхности, на скользких или липких поверхностях), в воздухе, в космосе - у персонажа разные анимации. В каждой из анимаций, в любой момент, если это разрешено, персонаж может вытянуть оружие и начать им махать/стрелять, либо наоборот, остановиться, спрятать оружие и перейти в режим IDLE. Соответственно, должна быть система, которая всё это учитывает и запускает в воде автоматически анимации для пребывания в воде, в воздухе - анимации воздуха и т.д. И когда персонаж переходит в другую среду (о чем получает входящий сигнал среды) он меняет своё состояние в соответствующем слое, не затрагивая других слоёв и анимация плавно переключается.
Эта комбинированная стейтмашина может всё это обеспечить. И даже, как я показал выше >>713361 в строке 21, может выводить имена ключей как текст, чтобы получить автоматически имена требуемых анимаций.
Аноним 07/12/20 Пнд 14:10:51 71356572
>>713504
Ты художник?
Художник нужен.
Будет художник - будет и игра.
Аноним 07/12/20 Пнд 14:34:43 71356973
>>713564
Звучит сложно, но очень полезно, однако.
Быстрей бы всё-таки вкатиться в ждскрипт.
> Если ты хочешь, чтобы из положения раком персонаж резко срывался на бег
В оригинале именно так, а я пытаюсь сделать говноклон в 2Д, так что пусть так и остаётся
Аноним 07/12/20 Пнд 15:08:42 71357174
>>713569
> Быстрей бы всё-таки вкатиться в ждскрипт.
Какие трудности? Спрашивай.
не встречал языка проще
Аноним 07/12/20 Пнд 15:25:48 71357375
>>713571
С нуля в погромирование вкатываюсь, оттого и сложно.
Как бы вижу буквы, а в слова сложить не получается.
Аноним 07/12/20 Пнд 15:43:37 71357476
>>713573
С нуля сложно, понимаю. Что-нибудь смотрел/читал обучающее по общей информатике? Если нет - рекомендую посмотреть/почитать. Если да, но не понял, рекомендую погуглить из других источников, пока не найдёшь достаточно доходчивый материал.

Ведь в программировании всё просто: 1 и 0 = 0, 1 или 0 = 1. Вот и всё программирование. Всё остальное надстройка над этой очобой.
Аноним 07/12/20 Пнд 16:01:00 71357777
>>713574
Ну машинно-логическую базу я болие лимени знаю. Собсно, простенькую стейт-машину кое-как написал сам(после гугла, что такое стейт-машина и как пишется). Состоит из сплошных ифов.
А вот задачи уровня "сделать движущийся лифт" или "прикрутить поворот головы к курсору при зажатом ПКМ" уже сложнее. Хоть я за них ещё и не брался
Аноним 07/12/20 Пнд 16:12:28 71357978
>>713577
Штош, дерзай. Если что - обращайся. Может сам подскажу, может анончики подсобят.
Аноним 07/12/20 Пнд 16:27:49 71358479
>>713579
>может анончики подсобят
Подсобим. Хотя у меня лично сложилось впечатление, что анон умеет пользоваться гуглом и головой, и совсем уж нубских вопросов не ожидается.
обитатель треда, прямо сейчас пилящий игру мечты
Аноним 07/12/20 Пнд 17:19:15 71359280
>>713584
>совсем уж нубских вопросов не ожидается
Смотря по каким объектам. Может, по поводу инвентаря, поиска пути мобов или редактора уровней будут вопросы наподобие "акак какоть".
Аноним 07/12/20 Пнд 19:33:30 71360881
>move_and_slide
>This method should be used in Node._physics_process (or in a method called by Node._physics_process), as it uses the physics step's delta value automatically in calculations.
А кто-нибудь в курсе, почему они сделали именно так, а не добавили для дельты отдельную позицию в передаваемых аргументах?
Аноним 07/12/20 Пнд 20:19:43 71362582
>>713608
Чисто с дивана могу предположить, что там внутри, в буллете, на крестах, это компактный, скоростной алгоритм, использующий дельту (приращение) и нет смысла им манипулировать снаружи, потому что скорость упадёт или типа того. Можно поискать реализацию в сорцах (опенсорц же, ёпт), вдруг там в комментах оставили заметки? Но лень.
Аноним 07/12/20 Пнд 22:41:44 71364083
>>713625
> Но лень.
Поборол лень.
https://github.com/godotengine/godot/blob/master/scene/3d/physics_body_3d.cpp
> 938: // Hack in order to work with calling from _process as well as from _physics_process; calling from thread is risky
> 939: Vector3 motion = (floor_velocity + body_velocity) * (Engine::get_singleton()->is_in_physics_frame() ? get_physics_process_delta_time() : get_process_delta_time());

Примерный перевод коммента:
> Хак для работы через вызов из _process точно так же, как через вызов из _physics_process; вызов через [отдельный?] тред - рискован

Таким образом, дельту физического движка засунули в мув_и_слайд ради нубасов, которые без задней мысли пытаются обрабатывать физику в _process, который не для физики, а для графики, математики и всего такого химии, истории, лит-ры, физ-ры и природоведения, но не физики.
Аноним 07/12/20 Пнд 22:47:44 71364184
>>713640
Только я всё равно смысла этого хака не понимаю. Он всё равно в тернарной операции выдает простофрейму простодельту, физикфрейму физикдельту. В чём сакральный смысл делать это там, а не домножать на дельту вектор движения в гдскрипте?

Сложно понять сишников, когда ты старый бейсиковец-паскалист.
Аноним 07/12/20 Пнд 22:53:35 71364285
>>713641
А зачем? Это работает во время 1 кадра. Все объекты должны подвигаться на одинаковое "время". Если ты хочешь подвигать "не так далеко", то это укорачиванием linear_vector.
Грубо говоря, у тебя две переменных, и для простоты одну из них зафиксировали.
Аноним 07/12/20 Пнд 23:01:36 71364386
Аноним 08/12/20 Втр 04:42:43 71366387
А я придумал и сейчас пишу стейт-машину на нодах. Одна нода = одно состояние. Внутри ноды содержится всё необходимое, что обычно выполняется в скрипте персонажа. Только вот анимации в них запихнуть пока не получается, оче сложно, надо ручками прописывать граф соединений, не видя его перед глазами и не имея возможности контролировать ошибки; не говоря уж о том, что не совсем понятно, как эти анимации анимировать в отрыве от собственно анимируемого объекта. В остальном же основные плюсы: чище код, все плюшки от наследования, персонаж может "изучать" новые способности в процессе игры или "забывать" их (например, может получить акваланг и научиться плавать; или освоить перекаты и двойные прыжки).
Я просто посмотрел на свою стейт-машину и подумал, что многовато в ней кода, надо выделить в отдельный класс. А потом как-то само вышло.

Так вот. Годаны, а попадались кому-нибудь видосы на тему стейт-машины из нод? Наверняка ведь не я один такой хитрый, но вот внятной инфы по теме я не встречал.
Аноним 08/12/20 Втр 06:04:37 71366888
>>713663
>Годаны, а попадались кому-нибудь видосы на тему стейт-машины из нод?
Да они практически все такие. По моему гораздо сложнее тебе будет найти видос где стейт машину целиком в один класс запихают.
Аноним 08/12/20 Втр 10:17:49 71367789
>>713668
Более того. Все (ну, большинство) ассеты, если содержат стейтмашину, то на нодах-стейтах. Например, навскидку, видал ассет шутера, где пухи в руке - это ноды-стейты.
Аноним 08/12/20 Втр 10:25:28 71367890
>>713663
А вот я придумал, юзать графическую стейтмашину из объекта AnimationTree! Для него создаётся отдельный AnimationPlayer, в котором создаются особые, уличные анимации, длительностью 0.1 и шагом 0.1, то есть, одношаговые. И в каждой из них содержится только один ключ - ключ вызова метода. И мы имеем графическую стейтмашину с графом переходов любой сложности, которая работает по факту с кодом.

На словах всё звучит красиво, на деле, я ниасилил, как это применять.
Аноним 09/12/20 Срд 13:41:37 71389791
>>713678
А непосредственно с анимацией, что делаешь? Через код пилишь?

Что-то со стороны это выглядит, как будто суп есть вилкой, а стейк - ложкой. Технически можно, но нахуя?
Аноним 09/12/20 Срд 16:24:55 71392992
>>713897
> Что-то со стороны это выглядит, как будто суп есть вилкой, а стейк - ложкой. Технически можно, но нахуя?
Академический интерес.
> А непосредственно с анимацией, что делаешь? Через код пилишь?
Ну нет, академический интерес к этому был удовлетворён еще во времена 3.0.6. Так что пилю как обычно.
Аноним 09/12/20 Срд 16:52:58 71393393
1528222065166.gif 224Кб, 1918x1034
1918x1034
>>713897
Очевидно он хочет графический редактор стейтмашины на нодах, а пилить его не хочет, но видит что в движке уже есть готовый редактор стейтмашин на нодах для анимации.
Вообще, я сам не пробовал, но есть впечатление, что делать свой редактор на нодах в годоте не просто, а очень просто.
В крайнем случае можно посмотреть как сделано в ассетах наподобии
https://godotengine.org/asset-library/asset/751
https://godotengine.org/asset-library/asset/94
Аноним 09/12/20 Срд 20:41:01 71397394
>>713933
Да я и ассеты видел.
Говорю тебе, это чисто академический интерес. А в практических задачах я предпочитаю старый добрый код.
Аноним 09/12/20 Срд 21:09:02 71397595
Есть ли возможность юзать .NET 5.0 вместо моно в годот-шарпе?
Аноним 09/12/20 Срд 21:16:50 71397796
>>713975
В 3.2 не будет никогда, в 4.0 вроде собирались.
Аноним 09/12/20 Срд 21:34:54 71398297
1607538893090.png 118Кб, 250x250
250x250
Аноним 09/12/20 Срд 23:29:51 71400398
1464593269778.png 502Кб, 1065x704
1065x704
Аноним 10/12/20 Чтв 12:58:41 71410599
Задумка. Нажимаем атаку, персонаж замахивается. Пока держим кнопку, он набирает замах определённое время до определённого предела, после чего остаётся в этом положении. Отпускаем кнопку - ударяет, на какой бы стадии замаха ни находился.
И чёт я плавлюсь. Никак не получается реализовать это на имеющихся нодах анимации. Я сделал две анимации: замах (просто зацикленная статичная поза длительностью в секунду) и удар. Вроде бы нужен ваншот, но с ним неправильно ведёт себя зацикленная анимация: постоянно повторяется с начала. Окей, тогда в стейт-машине последовательно ставим замах и удар. Но как тогда реализовать переключение на удар не тогда, когда закончится переход, а сразу же по команде?
В запасе я держу вариант с тем, чтобы поставить тупо бленд, а за ним ваншот с ударом; и просто в физикс_процессе менять силу бленда. Но всё-таки хочется, чтобы анимация рулила событиями, а не наоборот. К тому же я испытываю некоторые сомнения насчёт того, насколько физикс_процесс может сказаться на производительности, даже если у него в первой строчке написано if a: return; конечно, если он один, то плевать, но вот если их много...
Аноним 10/12/20 Чтв 15:47:10 714187100
>>714105
Как у тебя машина перешла в состояние замаха?
Правильно, ты из кода сказал ей travel("замах")
Значит, при отпускании клавиши ты должен из кода сказать ей travel("удар")
Анимация замаха не должна быть зацикленной и транзишен не должен быть автоматическим. То есть машина остаётся в состоянии замаха, на последнем кадре, пока ты вручную не переведёшь её в состояние удара. После чего уже автоматические транзишены по заваршении удара переведут машину в айдл.

Альтернативный вариант (для более живого визуала) - бесконечная анимация замах-айдл, на которую замах выходит автоматически, но выход из неё в удар - вручную из кода. В этой анимации оружие занесено перед ударом и слегка покачивается.
Аноним 10/12/20 Чтв 16:24:46 714190101
Годаны, пишет вам снова тот аутист с переносом Хаудее в 2Д.
Вот хочу я себе накодить редахтур уровней, чтобы было удобнее работать и мне, и воображаемым помощникам. Он, например, схороняет сцены в папке memes scenarios/levels/l1-l2-l3-...-l100500. Просто папка, не архив с неизвестным науке форматом. И в ней файлов так 100+
Это насколько тупо по шкале от одного до десяти?
И реально ли сделать так, что по выходу из локации сцена схороняет все изменения/сдвинутые ящики/трупы врагов/етц?
Аноним 10/12/20 Чтв 16:58:14 714193102
>>714190
> Это насколько тупо по шкале от одного до десяти?
Это вообще не тупо. Функционал по созданию текстур из внешних пикч на лету имеется. Главное - нетупо реализовать.
> И реально ли сделать так, что по выходу из локации сцена схороняет все изменения/сдвинутые ящики/трупы врагов/етц?
Вполне реально.
> воображаемым помощникам
Эй, а как же я? :о
Аноним 10/12/20 Чтв 17:32:47 714198103
>>714193
Благодарю за советы, конечно.
> Эй, а как же я? :о
Ну ты помогаешь советами, это да, за это спасибо. Но пахать и кодить за это самое спасибо никто ведь будет
Аноним 10/12/20 Чтв 17:52:56 714207104
>>714198
Ну я бы попахал. Чисто за опыт. Тебе вышеуказанное сделоть?
Аноним 10/12/20 Чтв 18:17:47 714208105
>>714207
От любой помощи в этом деле не откажусь.
Для лучшего качества связи могу, например, создать телегочат. Если оно надо.
Аноним 10/12/20 Чтв 18:20:42 714209106
>>714208
Не знаю, мне хватит и этого треда, и пастебина для обмена результатами.

Аноним 10/12/20 Чтв 18:26:04 714211107
>>714209
Как скажешь, чому б и не.
Ассеты нада?
Аноним 10/12/20 Чтв 18:35:09 714212108
>>714211
Ну в принципе нет. Только типы файлов и что с ними делать будем. О, и примерно, какую структуру загружаемых левелов планируешь?
Аноним 10/12/20 Чтв 18:45:32 714213109
image.png 93Кб, 1850x797
1850x797
image.png 1689Кб, 1920x1079
1920x1079
>>714212
>Только типы файлов и что с ними делать будем
ТЦСН, наверное. Их ведь можно будет редачить в редакторе, верно?
>О, и примерно, какую структуру загружаемых левелов планируешь?
Да как и в первой Хаудее, закрытые пространства из различных тайлов, детализацию можно и самому. Лови пример тестовой комнаты с лифтом и рандомскрин из оригинала
Аноним 10/12/20 Чтв 19:07:40 714215110
>>714213
ТСЦН можно. Но тупо. Лучше хранить данные расположения ассетов на уровне и иметь одну динамическую сцену, которая по умолчанию пуста, но при загрузке читает этот файл и расставляет ассеты согласно данным из файла.
Я предлагаю это.
А чтобы была возможность редактировать в редакторе и сохранять файлы, я предлагаю тебе сцену-шаблон, которая будет юзаться только при девелопе и в релиз не пойдёт. От неё будет требоваться сохранять ассеты, установленные на ней в файл данных.
Аноним 10/12/20 Чтв 19:10:44 714216111
>>714215
>ТСЦН можно. Но тупо.
В каком-то смысле согласен, но будут же некоторые моменты, которые с дефолтным редактором не осилить. Вдруг кто кастомный сценарий решит запилить, а там, например, лифту больше двух положений нельзя назначить?
>А чтобы была возможность редактировать в редакторе и сохранять файлы, я предлагаю тебе сцену-шаблон, которая будет юзаться только при девелопе и в релиз не пойдёт
Звучит сложно, но, думаю, полезно
Аноним 10/12/20 Чтв 19:18:43 714219112
>>714216
> некоторые моменты
Недооцениваешь редактор. Во-первых, есть тулскрипты, позволяющие запускать код прямо в нём. Так что, если ты хочешь, чтобы игроки сами делали уровни, просто предоставишь им комплект тулскриптов и ссылку на скачивание годота.

Во-вторых: В этом смысле мы с тобой можем сильно облегчить задачу, если моды мы будем вообще грузить через встроенную систему, без велосипедов. Годот позволяет делать моды/патчи, используя основной PCK создавая к нему инкрементный PCK. Как тебе такая возможность? Если требование открытости ресурсов принципиально, то там можно ещё и в ZIP паковать. Причём (я правда не пробовал) но думаю, ничто не помешает паковать моды сторонним ZIP-архиватором.
Аноним 10/12/20 Чтв 19:27:58 714222113
image.png 169Кб, 847x209
847x209
>>714219
>Так что, если ты хочешь, чтобы игроки сами делали уровни, просто предоставишь им комплект тулскриптов и ссылку на скачивание годота
А, ну тогда хорошо. Может, потом пойму, как это делается.

>Как тебе такая возможность?
Пикрелейтед
Аноним 10/12/20 Чтв 19:36:48 714226114
>>714222
Ой, да там всё просто будет. Не паникуй.
Аноним 10/12/20 Чтв 20:26:10 714240115
>>714226
Буду надеяться, буду надеяться...
Аноним 11/12/20 Птн 00:19:28 714261116
Аноним 11/12/20 Птн 00:33:05 714266117
>>714261
А, блин, пажжи ёбана.
Я протупил, там надо не просто scenarios/levels, a scenarios/scenario_name/levels. М-да.
Аноним 11/12/20 Птн 00:37:02 714267118
>>714266
Да эт не проблема. Строка же простая. Завтра доделаем. Спокойной ночи.
Аноним 11/12/20 Птн 00:38:45 714268119
>>714267
Как тебя по нику-то, мил человек?
ДолжОн же я что-то в титрах писать на этот счёт
Аноним 11/12/20 Птн 07:28:09 714280120
>>714187
>Правильно, ты из кода сказал ей travel("замах")
>Значит, при отпускании клавиши ты должен из кода сказать ей travel("удар")
А теперь игрок отпускает кнопку раньше, чем замах завершился. И тут у меня два стула:
1. Переход на анимацию удара не произойдёт до тех пор, пока не завершится переход на замах. Потому что стейт-машина так работает, она совершает переходы последовательно и не может их просто взять и оборвать, уж тем более она не может сблендить состояние посреди перехода со следующим переходом. Или может?
2. Переход на замах можно сделать мгновенным, но сама анимация замаха должна каким-то образом блендиться с любым предыдущим состоянием. Но со стейт-машиной это в любом случае не выйдет, так как она берёт на себя все бленды на переходах.
Аноним 11/12/20 Птн 09:40:31 714288121
>>714280
> Или может?
Может.
Изучи внимательно свойства транзишенов. У них всего три режима (немедленно, синхронно, вконце) и флаг автоматического применения.
> игрок отпускает кнопку раньше, чем замах завершился
Это вопрос твоей игровой механики. Вот в дарк соулс, например, на таймингах анимаций построен весь геймплей боёвки. Ты не можешь просто взять и оборвать анимацию замаха и переключиться на блокирование - и тебе прилетает ваншот от босса нахуй. И это логично - в реале тоже не сможешь мгновенно без инерции убрать замахнувшуюся руку и уйти в блок.

Такшта ты либо делаешь один вид транзишенов, который аркадно дёргает персонажа из замаха в удар, игнорируя оставшийся хвост предыдущей анимации, либо иммерсивно даёшь анимации отработать, а персонажу пропустить удар моба и пригореть.
Аноним 11/12/20 Птн 10:25:34 714291122
>>714288
>Это вопрос твоей игровой механики
У меня простая механика "дольше замахивался - сильнее ударил". Без этих ваших соулсов.

>>714288
>У них всего три режима (немедленно, синхронно, вконце)
И какой же из этих режимов должен немедленно прервать предыдущий транзишен, по-твоему? Анимацию они успешно прерывают, да.
Аноним 11/12/20 Птн 10:32:33 714292123
>>714291
Слушай, а не проще сделать это так, что
Зажимаешь, ЛКМ, идёт замах. Состояние замаха включается тут же. Анимация меееедленно идёт.
Запускается таймер, который каждые полсекунды увеличивает множитель урона на 1. Ну или на сколько там тебе надо.
Отпускаешь кнопку - хуяг-пездыг. Урон нанесён, множитель посчитан.
Аноним 11/12/20 Птн 11:03:40 714297124
>>714292
>Анимация меееедленно идёт.
А как она будет блендиться с предыдущим состоянием?

Вот тестовый проект: https://dropmefiles.com/kVIhb- по пробелу фигура начинает подниматься, отпускаешь - падает. Задача: сделать так, чтобы падение наступало в тот момент, когда отпускаешь пробел; ну, и чтобы всё блендилось хоть как-то. Я вот так и не смог подобрать подходящие параметры транзишенов для этого.

И да, я очень надеюсь обойтись без дополнительного кода, кроме того, который запускает анимации. Просто в анимациях будет дорожка управления параметром power, плавно изменяющая его значение от 0.0 до 1.0; а потом при подсчёте урон будет домножаться на этот параметр. Почему так: потому что анимации в годо работают точнее всех прочих процессов во времени.
Аноним 11/12/20 Птн 11:04:23 714298125
Аноним 11/12/20 Птн 11:05:28 714299126
>>714268
Хуан Санчес Вилья-Лобос Рамирес, к вашим услугам, сер.

В сценах будет тайлмап? Его нужно особым образом сохранять, поэтому это надо знать сразу.
Аноним 11/12/20 Птн 11:08:29 714300127
>>714299
>В сценах будет тайлмап
Ну да, основа карты тайлами сделана. Эт сильно плохо?
В теории это заменить растягиваемыми по сетке "брашами" из области коллизии и текстуры, но я ХЗ как это будет сложно.
Аноним 11/12/20 Птн 11:09:36 714301128
>>714297
А, ну, если он у тебя не вручную нарисован... Печаль тогда.
Аноним 11/12/20 Птн 11:11:03 714302129
>>714300
> Эт сильно плохо?
Нормально. Я ж говорю - просто мне заранее надо знать, есть тайлмап или нет, и сколько их? Только основа? Или есть несколько тайлмап-слоёв?
Аноним 11/12/20 Птн 11:14:49 714303130
А чё так можно [...].mp4 210Кб, 480x360, 00:00:04
480x360
>>714302
>Или есть несколько тайлмап-слоёв?
Видеорилейтед
Ну, может, сделать фоновый слой, понятно для чего, и основной, с коллизиями
Аноним 11/12/20 Птн 11:55:03 714309131
>>714298
>>714297
Это нужно делать через advance_condition, но я не разобрался как. Потыкал твой проект, добавил кондишон, выставляю его в false / true - а нихуя не меняется. Полез в гугл, там у пацанов всё работает, и ещё просят инверсный кондишон им запилить. Но у меня щас голова занята другим проектом, такшта воть.
>>714303
Окей, буду исходить пока что из этих вводных - два слоя.
Аноним 11/12/20 Птн 15:42:47 714376132
1607690566566.png 32Кб, 535x559
535x559
1607690566695.png 46Кб, 562x364
562x364
1607690566709.png 42Кб, 526x394
526x394
>>714303
Отакая структура файла получается.
Перечисляем имеющиеся ассеты на локации. Указываем дополнительные параметры самой локации. В качестве ассета на пикрелейтеде тайлмап со списком всех задействованных тайлов.

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

Аноним 11/12/20 Птн 15:45:23 714378133
>>714376
Бляяя... 56 строка! Я не индус, честно! Просто жизнь такая...
Аноним 11/12/20 Птн 16:32:54 714385134
>>714376
Если я потом как-то в этом деле разберусь, зовите меня Какерман.
Аноним 11/12/20 Птн 17:18:44 714394135
>>714378
Для динамической пара... в смысле для истинного ООП с посылкой сообщений это норма
Аноним 11/12/20 Птн 18:04:09 714406136
>>714394
Ну, как видишь по скринам, я в большинстве случаев статически типизирую, Но бывают случаи, когда динамический тип чертовски удобен, невозможно отказаться. Например, несколько проверок, одни функции возвращают код ошибки int, а другие - bool. Заводишь один динамический error и когда надо он int, а потом bool, а потом опять int.
Аноним 11/12/20 Птн 18:15:11 714410137
>>714385
Да чё там раазбираться?
У тебя будут твои сцены-уровни. Ты будешь кидать в них ноду с моим скриптом и настраивать её из инспектора. В скрипт вообще заглядывать не будешь. Но даже если и заглянуть, там ничего экстраординарного нет, всё это можно найти в той же документации.
У тебя будет кнопка сделать зае "выгрузить сцену в файл". Этой кнопкой ты сформируешь набор уровней для будущей игры.
Сама игра будет из сцены с моим скриптом, которому ты будешь из меню подавать на вход имя уровня в качестве параметра, после чего он будет этот уровень загружать. Загрузка будет представлять из себя расстановку по уровню ассетов, начиная с мебели и заканчивая врагами и интерактивными объектами.
Ничего нетривиального - просто долго и муторно.
Самое муторное то, что каждый ассет следует создать как отдельную сцену и снабдить отдельным скриптом, который будет реализовывать две функции: 1) подготовка данных о себе для выгрузки, 2) загрузка данных о себе из поданной на вход переменной и установка своих параметров.
Повторюсь, в упрощённом виде это описано в документации, как система сохранения, но там меня не устраивает, что в файл сохранения пишутся пути нод. Это дичь. Мы с тобой будем писать только заранее утверждённые типы ассетов, которые будут в одном большом match выбираться и подтягиваться.
Аноним 11/12/20 Птн 18:18:52 714411138
>>714410
> Этой кнопкой ты сформируешь набор уровней для будущей игры.
Причем это можно делать в отдельном проекте вообще. В основном проекте будут только ассеты и локация-загрузчик, инстансы которой будут превращаться в те или иные уровни.
Если игрок сохраняется, локация-загрузчик уже выгружается тем же методом, что и в проекте-редакторе, но выгружается в файл сохранения, со всеми изменениями, которые сделал игрок.
Потом при загрузке уже уровень грузится из файла сохранения, а не из файла-эталона.
Аноним 11/12/20 Птн 18:44:08 714415139
>>714411
>>714410
Саундс вери компликейтед, но, может, разберусь со временем.
Только там какой-нибудь ридми нужен будет, с подписанными кнопками действиями - то-то чтобы сохранить, это-то чтобы загрузить етц.
Аноним 12/12/20 Суб 14:37:38 714566140
Есть инфа когда 4.0 выходит?
Аноним 12/12/20 Суб 14:39:30 714567141
>>714566
Нету. Не советую рассчитывать что она будет готова раньше чем через год.
Аноним 12/12/20 Суб 15:16:55 714575142
>>714566
В середине 21-го, может позже (инфа из твиттера).
Аноним 12/12/20 Суб 15:19:13 714576143
>>714575
Все равно ждать 4.1.
Аноним 12/12/20 Суб 17:49:02 714602144
110211059105600.jpg 84Кб, 700x458
700x458
Как скомпилировать файл под винду со своим значком?
Аноним 12/12/20 Суб 18:09:55 714607145
>>714602
Хотя там есть опция он все равно не компилит и описание файла годотовское
Аноним 12/12/20 Суб 18:10:16 714608146
Аноним 12/12/20 Суб 20:21:02 714653147
>>714602
>>714608
Как обсуждали в прошлом треде, изменение значка при экспорте вызывает проблемы. Например, при упаковке пака в один экзешник. А при работе с моноверсией проблемы гарантированы в принципе. Поэтому в прошлом треде пришли к выводу, что следует загрузить свою иконку прямо в файл шаблона. А заодно и описание файла своё загрузить туда же. А чтобы не пришлось переделывать шаблон под каждую игру - можно скопировать шаблон в отдельную директорию и указать её в свойствах экспорта и носить проект вместе с шаблоном в отдельной подпапочке, если ты из нескольких мест работаешь, например (как я).

Без прописанного в настройках экспорта рцэдита годот никак не воздействует на файл, при создании вложенного PAK годот просто создаёт эдакий раржпег с приписанным паком в конце.
Аноним 12/12/20 Суб 20:22:14 714654148
>>714653
> изменение значка при экспорте вызывает проблемы.
Не вызывает. Просто винда кеширует и отображает предыдущую. Проверить можно просто переименовав файл - иконка сразу подхватится.
Аноним 12/12/20 Суб 20:26:51 714659149
>>714654
Если бы. Экспортированная игра крошится. Ишью соответствующие искать лень, но они были.
Аноним 13/12/20 Вск 07:04:56 714742150
если такая ситуация: челик планирует серьёзный дум-клон (не вульфенштейн-, а именно думоклон с покачкой оружия, 8-и сторонними спрайтами, рожей гг и пр.), у него есть хороший опыт создания игры на порте движка IDTech1 (GZDOOM, порт движка первого дума собственно), весь графон рисует сам, вопрос - куда лучше вкатываться, в годот или юнити?
Аноним 13/12/20 Вск 09:05:34 714744151
>>714742
В движкосрач. Вкатывайся в движкосрач.
Аноним 13/12/20 Вск 09:06:07 714745152
Аноним 13/12/20 Вск 09:31:16 714747153
>>714309
>advance_condition
Прочекал имеющиеся туториалы. Чёт я всё равно не понимаю, как с его помощью сблендить несколько анимаций. И не понимаю, чем это принципиально отличается от travel. В любом случае, когда я ставлю этот адванс, он проигрывает переход до конца и только тогда переходит дальше. В любом случае в один момент времени воспроизводится только одна позиция: один узел анимации или один переход между узлами. Выглядит так, будто, вся эта тема с адвансами была оставлена как костыль для некоторых стейт-машин.
Аноним 13/12/20 Вск 11:25:37 714753154
>>714747
Давай обратимся к словарику англо-русского. Адванс - это выполнение. Адванс кондишн - это условие выполнения. Если я всё правильно понимаю, ты сначала задаёшь тип транзакции. Ты задаёшь "немедленно". Выставляешь галочку "авто адванс". И треугольник вовсе не поднимается. Трэвел моментально трэвелит в айдл. Ой, стоп, нам это не подходит! И тут на сцену выходит адванс кондишон. Адванс транзишона должен произойти моментально. Но только если кондишен - тру. А когда у тебя кондишен тру? Правильно, когда ты отпускаешь клавишу. Ты выставляешь тру и происходит мгновенный переход, дропая анимацию поднятия на текущем кадре.

Так оно должно работать, но у меня вчера не заработало. Я нипонил, что я сделал не так, поэтому не предоставил работающего решения. Но повторюсь, чуваки в интернете вовсю используют это и даже реквестируют инверсный функционал. Мне бы прямой функционал заставить работать, чтоб нуждаться в инверсном...
Аноним 13/12/20 Вск 11:36:39 714756155
Аноним 13/12/20 Вск 12:09:50 714760156
>>714756
Я говорил вот про этот пост, он первый в результатах поиска, поэтому я даже не подумал скопировать ссылку
https://godotengine.org/qa/79382/animator-advance-conditions-but-if-the-value-is-false
Тем более, это не то, что тебе нужно сейчас.

Я тут подумал ещё один момент, тебе действительно нужен какой-то блендинг, потому что даже если заставить этот кондишен работать, анимация удара-то начинается со скажем, позиции 10, образно выражаясь, которая представляет позицию полностью занесённого над головой топора, а адванс кондишон прервёт анимацию занесения на значении, скажем, 3, после чего топор мгновенно скакнёт на позицию 10 и уже оттуда начнёт ударять. Бля, геймдев, это так ложно. Я кажется видел что-то подходящее в приложении к прыжкам на разную высоту у гейм эндевора. Но щас уже не нагуглю, это ж придётся кучу видосов пересматривать.
Аноним 13/12/20 Вск 16:13:59 714803157
1607865239453.png 18Кб, 316x331
316x331
>>714415
> может, разберусь со временем
Вот такой интерфейс я пока что тебе замутил в инспекторе.
Есть вопросы?
Аноним 13/12/20 Вск 16:20:33 714807158
>>714803
Интересно.
Props - это пропы аки в гаррисе? Т.е. ящики/бочки/шипастые дилды с физикой?
Аноним 13/12/20 Вск 16:27:16 714809159
Аноним 13/12/20 Вск 16:28:32 714810160
>>714809
Отлично.
Получилось бы ещё сделать инструмент "доски" а-ля Тирдаун, только в 2Д...
Аноним 13/12/20 Вск 16:44:07 714814161
>>714810
> Тирдаун
Впервые слышу.
Аноним 13/12/20 Вск 16:53:17 714818162
Аноним 13/12/20 Вск 17:33:24 714827163
>>714818
Есть модуль воксельного террейна, но его надо самостоятельно вкомпилировывать в движок, потому что он на плюсах написан.
Аноним 13/12/20 Вск 17:37:18 714828164
>>714827
Да не, меня оттуда интересует только создание объекта-доски. Указываешь стартовую точку, указываешь конечную точку(в разумных пределах длины, ессно). Между ними протягивается довольно хрупкий проп-доска, имеющий физику. Что-то такое.
Хотел заебашить зону, единственной целью которой будет добраться до какого-то нужного инструмента и съебать за 60 секунд, как в том же Тирдауне.

З.Ы. А хотя... Может, заменить доски на какие-то "мосты плотного света" а-ля Портал2.
Аноним 13/12/20 Вск 17:49:27 714832165
>>714760
>у гейм эндевора
Кстати, хорошая идея, поищу у него. Наверняка парой слов где-нибудь упоминает.
Аноним 13/12/20 Вск 17:53:21 714834166
>>714828
И так можно, и эдак. Главное сразу определиться, а не по пути, когда половина кода будет написана.
Аноним 14/12/20 Пнд 08:50:02 714898167
1607925001390.png 43Кб, 619x220
619x220
Ну раз ты сам не знаешь, чего хочешь, то вот тебе функция десериализации, которая перебирает данные, но сама ничего не делает, а отдаёт найденные описания ассетов в родительскую сцену. Ну и настройки. Всё произвольного формата. Каждая сцена вольна делать с полученными данными что угодно. Гибкость решения - просто зашкаливающая.
Аноним 14/12/20 Пнд 10:46:59 714905168
>>714385
> зовите меня Какерман
Какермаааан! Ты тут?
Я вплотную подошёл к созданию базы данных ассетов. Есть пожелания по интерфейсу работы с ней? Если нет - я сделаю, как мне удобно:

1. База данных ассетов - синглтон, сидит в отдельном скрипте, автозагружается, доступна из любого другого скрипта.
2. Содержимое БДА конфигурируется отдельным словарём, в котором перечисляется всё что есть в игре с путями к файлу scn/tscn каждого ассета.
3. Есть метод asset_register(new_asset : Dictionary) который добавляет в словарь-описатель новый подсловарь. Этот метод будут юзать моды, для будущего добавления ассетов в уже имеющуюся игру. И asset_unregister(asset_name : String) для замены модами существующих изначально ассетов.
4. Есть метод get_asset(asset_name : String) который выдаёт новый экземпляр ассета по его имени в БД.

Так норм? Есть замечания? Предложения?
Аноним 14/12/20 Пнд 13:57:16 714934169
>>714832
И таки поискал. Но не нашёл. Но я уже реализовал работающий механизм через связку StateMachine <- AnimationNodeTransition <- AnimationNodeOneShot. Логика такая:
Кнопку нажали: транзишон переходит ко второму состоянию "замах". Кнопку отпустили: транзишон переходит к первому состоянию "стейт-машина", в это же время прямо перед ним срабатывает ваншот удара.
А вот со временем удара пришлось заморочиться таким вот образом:
>anim_tree.tree_root.get_node(current_direction).get_node(current_weapon).get_node("swing_transition").xfade_time = time
И это работает. Вот только код некрасивый. Но как сделать красиво, я чёт так и не понял.
Аноним 14/12/20 Пнд 14:00:23 714935170
>>714934
У меня закрались подозрения, что ты не стейтмашин используешь, а анимашонтри. Покажи скриншот своей "стейтмашины".
Аноним 14/12/20 Пнд 14:21:22 714943171
>>714935
>подозрения
Вообще-то я изначально и писал, что при помощи стейт-машины реализовать у меня не получается, памагити, я только придумал как при помощи дерева сделать, и то не всё гладко. И вот что же тебя навело на такие подозрения? Может, вот это:
>StateMachine <- AnimationNodeTransition <- AnimationNodeOneShot
?
Я с самого начала писал, что стейт-машина умеет одно состояние в один момент времени, блендинг разных состояний она не умеет. И что адванс_кондишон нужен вовсе не для этого.
Аноним 14/12/20 Пнд 14:27:27 714945172
>>714943
Ну значит я был невнимателен, мда.
Переделывай на стейтмашину. Она круче и она должна быть в руте, а аним-деревья удобно ей в чайлды пихать.

Набросай примерный набор поведения своих персонажей, я тебе набросаю пример, как надо собирать машину.
Аноним 14/12/20 Пнд 14:37:42 714948173
>>714905
Тута.
Ну, я, тащта, ничего не могу желать или не желать в этой области по причине полного отсутствия опыта. Так что карты тебе в руки
Аноним 14/12/20 Пнд 14:40:19 714949174
>>714945
>Переделывай на стейтмашину.
Не командуй, не в армии.
Аноним 14/12/20 Пнд 14:45:35 714951175
1607946334903.png 28Кб, 966x633
966x633
>>714949
Вот тебе набросок простейшей стейтмашины для персонажа, который может ходить, плавать, переходить из воды на сушу и обратно, на суше может прыгать, в том числе в воду, из воды может выпрыгивать, в том числе на сушу.
Это набросок и он не учитывает кучи ньюансов. Но как отправная точка.
> Не командуй,
Если тобой не командовать - игор я не дождусь!
Аноним 14/12/20 Пнд 15:13:35 714955176
1607948014120.png 72Кб, 1065x744
1065x744
>>714951
Gamedev aint easy

Кто догадается зачем переходы из крайних нижних положений между собой - получает пятёрку!
Аноним 14/12/20 Пнд 15:17:38 714956177
>>714951
Теперь добавь к этому (или к этому >>714955), лазание по лестницам и то, что в большинстве (но не всех) представленных позиций персонаж умеет пользоваться разными видами оружия, каждый со своими анимациями.
Дерево удобнее, как только нужен мало-мальский блендинг.
Аноним 14/12/20 Пнд 15:20:22 714958178
>>714956
Видишь, ты тоже невнимателен:
>>714945
> и она должна быть в руте, а аним-деревья удобно ей в чайлды пихать
Аноним 14/12/20 Пнд 15:22:39 714959179
>>714956
То есть, например, вся нода walk это на самом деле бленд-дерево, да ещё и из блендспейсов. И работает оно только, когда перс на суше и может махать мечом-топором. Как только родительская машина уходит в другое состояние, все внутри автоматически дропается.
Вот тебе и решение падающего треугольника.
Аноним 14/12/20 Пнд 15:39:25 714961180
>>714959
Неудобно же. Придётся в каждом мини-дереве городить целый огород из дополнительных состояний.
Чел, я уже пробовал делать большую стейт-машину с деревцами внутри. Мне удобнее делать ветвящееся дерево со стейт-машинами внутри.
К тому же, при большом количестве элементов на одном уровне (в дереве или стейт-машине) Годот начинает падать. И так можно вообще сцену запороть.
Аноним 14/12/20 Пнд 15:43:16 714963181
>>714961
Вот из-за всей этой дрянья я и перешёл на стейт-машины кодом. От всех этих графов только путаница и дублирующееся поведение.
Такшта, рикаминдую собрать яйца в кулак и закодить всё чисто на скриптах.
Аноним 14/12/20 Пнд 15:58:54 714964182
>>714963
У меня никакой путаницы нет. Всё удобно и раскидано по иерархии. И никаких проблем с тем, чтобы добавить ещё сколько угодно состояний на соответствующем уровне иерархии.

Да, забыл добавить к предыдущему усложнению. Ведь помимо разных видов оружия есть же симметрия. Нельзя просто отразить анимированного персонажа по горизонтали, ему нужно продублировать все анимации и стейты. Если бы был пикселярт, то можно было бы. Но с анимацией "по частям" такой фокус уже не проходит.
Аноним 14/12/20 Пнд 18:50:25 714985183
1607961024146.png 88Кб, 161x562
161x562
>>714964
> У меня никакой путаницы нет.
Ну не и нет. Чего бухтеть-то?

Вот смотрю я на твои посты и вспоминается мне старинная эйчаровская притча про двух джунов, которым не перезвонили. Обоим дали одинаковое тестовое задание, состоящее из двух этапов. На первом этапе перед ними поставили простую задачку, типа 2+2 сложить. Первый (назовём его Чувак) взял Main(string[] args) {} и хуйнул решение туда. Второй (назовём его Перец) нахуярил кучу бойлерплейта, фабрику классов, класс сумматора, вся жопа в мыле, сроки завалил, штрафные баллы получил, потому что Чувак уже справился. Но дальше началась вторая часть задания, самая интересная. В течение месяца им поступали дополнительные требования к первоначальной задаче. Пересекающиеся, повторяющиеся, противоречащие тем или иным предыдущим. Чувак продолжал лепить в Main по паре ифоф на каждое требование, а Перец порождал фабрикой всё новые классы, комбинируя паттерны.
И случилось так, что к концу тестового месяца оба соискателя так запутались в своём коде, что обоих пидорнули.
А мораль сей басни такова... Впрочем, мораль я забыл.
Аноним 15/12/20 Втр 09:20:25 715058184
>>714948
А ты вообще можешь в арт, например, или в музон? Вот, я, написал, скрипты. А дальше ты сможешь остальную игру сделоть?
Аноним 15/12/20 Втр 10:40:10 715061185
Годаны, напомните, в каком порядке инициализируются чайлды нод? Всегда строго по порядку или динамически? А то у меня одна из чайлд-нод обращается к другим чайлд-нодам своего парента у себя в ready и естественно получает null. Я переместил её в конец, и оно заработало, но это тупость какая-то, нельзя отдавать в продакшен (Какерманну, он всё перепутает же). Какие есть варианты удостовериться, что нода увидит своих соседей всегда?
Аноним 15/12/20 Втр 10:46:10 715062186
>>715061
>Какие есть варианты удостовериться, что нода увидит своих соседей всегда?
Перед чем получать нод вставь yield(get_tree(), "idle_frame").
Аноним 15/12/20 Втр 10:55:22 715063187
>>715062
Не подошло. У меня метод возвращает значение, а при запизихивании туда йилда, он начинает возвращать объект функшонстейт.
Аноним 15/12/20 Втр 11:08:11 715064188
>>715063
В общем-то, мне достаточно не выполнять эту функцию в ready. Хмм...
Аноним 15/12/20 Втр 12:48:35 715071189
>>715058
В арт, в принципе, могу.
Музон собирался липо поездить всё равно игорь будет бесплатным, либо выдавливать из себя в ФЛке. Пока что получается средне, но ведь будут нужны амбиенты, а не потерянные треки Целлдвеллера.
Аноним 15/12/20 Втр 13:09:42 715076190
>>715071
С музоном проще. На опенгеймарте можно много подобрать, бесплатно. Главное, что в арт можешь, теперь я спокоен. Знач, игра будет.
Аноним 15/12/20 Втр 15:05:03 715115191
>>714985
Просто ты начал давать советы, которых не просили; а о чём просили, там ничего посоветовать не смог. Это очень раздражающая модель поведения, не важно, насколько доброжелательно она преподносится. Я понимаю, что ты из лучших побуждений, а не чтобы насрать в обсуждении, как это на ру-форумах водится; но всё равно не надо так.
Аноним 15/12/20 Втр 15:52:53 715125192
громила идёт.gif 31Кб, 240x380
240x380
резак бежит.gif 40Кб, 400x400
400x400
громила.jpg 192Кб, 1031x923
1031x923
резак.jpg 214Кб, 1045x875
1045x875
>>715076
Ну это да. Не на идеальному уровне, но всё-таки близко к оригиналу
Аноним 15/12/20 Втр 16:22:06 715132193
>>715076
>С музоном проще
Я музыкант. Давно подумываю вкатиться в музыку для игр, зарабатывать этим. Но во имя портфолио могу чёнить написать. Ну, и там звуки какие насинтезировать. Главное чтобы было внятное ТЗ.
Аноним 15/12/20 Втр 16:22:27 715133194
>>715115
Ладно. Буду пытаться держать себя в руках. Но ничего не обещаю.
Аноним 15/12/20 Втр 16:29:42 715134195
>>715132
> Главное чтобы было внятное ТЗ.
Haydee знаешь? Геймплей примерно представляешь? Теперь представь, что это пиксельный платформер с загадками. Состоит из отдельных комнат. Комнаты есть простые (релакс эмбиент), с загадками (загадочный эмбиент), с врагами (тревожный эмбиент). Когда враги детектят персонажку нужен файтинговый экшон трек.
Пока так.
Но собирая треки держи в уме, что возможно, каждый из них нужно будет два раза замиксовать с атмосферными вариациями (фабрика/завод, вода/бассейн).
Ну и музон на главное меню нужен, пожалуй.
И звуки интерфейса.
Аноним 15/12/20 Втр 16:48:27 715136196
image.png 8Кб, 224x345
224x345
>>715134
Ну, звуки интерфейса я сам могу нарулить где-то, звуков у меня в избытке.
тот самый горе-какерман
Аноним 15/12/20 Втр 16:51:04 715137197
>>715134
Алсо, в Хаудее звуки распределены не по назначению комнаты, а по зонам. В красной зоне трек один, в синей другой, вне зависимости от ситуации. Вот в Х2 на финальном рывке саунд уже другой, да, но на то он и финальный рывок.
Аноним 15/12/20 Втр 23:12:03 715185198
pattern.png 653Кб, 1135x901
1135x901
пачаны, гружу техктурку с интернета, а как ей фильтрацию отрубить?
в гугле чёт про настройку пресетов для всех текстурок, но переключение кнопочек там чёт не помогло
Аноним 15/12/20 Втр 23:37:45 715187199
OfPfv.png 34Кб, 273x640
273x640
>>715185
Найти вкладку импорт, убрать галочку и нажать реимпорт
Аноним 15/12/20 Втр 23:55:08 715189200
>>715134
В словосочетании "внятное ТЗ" акцент на слове "внятное". Оно состоит из трёх частей:
1. Описание художественной идеи. При каких обстоятельствах будет звучать трек, в каком окружении, какое настроение должен передавать игроку. Возможно, какие-то ассоциирующиеся визуальные образы или палитра цветов на экране - эти вещи тоже неплохо доносят художественную идею.
2. Два-три референса. По одному невозможно понять, в каком аспекте на него ориентироваться, так как у музыканта профдеформация, я слышу музыку вовсе не так же, как ты.
3. Всякие технические детали, например, длительность трека, громкость (лучше сразу свести под нужный уровень). Для платформера имеет значение темп, его можно понять через такие цифры, как длительность прыжка, скорость перемещения персонажа по тайлам; если он будет совершать повторяющиеся действия, то важен их тайминг. Если в интерфейсе и/или в игре будут какие-то звуки, то музыке надо быть с ними в одной тональности.

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

В общем, если не распишешь по каждому треку все три пункта, то получишь не подходящее к игре графоманство, которое ещё и не в твоём вкусе. А если распишешь, то релевантность треков будет пропорциональна квадратному корню того, насколько подробно распишешь.

Кстати, если планируется динамически менять музыку (например, персонаж нырнул в воду, трек сменился на подводную версию себя), то в Годоте с этим надо отдельно заморачиваться; помню, когда-то попадалась соответствующая статья в доках. Это так, к слову.
Аноним 16/12/20 Срд 00:31:29 715194201
runtest.mp4 1037Кб, 1280x720, 00:00:14
1280x720
>>715189
То был не я, если что. Не знаю, кто автор того поста.
Я определился только с тематикой жёлтой зоны, так что вряд ли запросов в ближайшее время будет много.
1. Жёлтой зоной должен быть ещё строящийся недоскрёб. По мере подъёма он постепенно превращается в голый каркас из толстенных балок. На заднем фоне не слишком живописный пейзаж из бетонных коробок того комплекса, где бродит протагонист_ка и других таких же недоскрёбов, уже достроенных.
2. В качестве референсов могу дать это:
https://www.youtube.com/watch?v=A5gfWgBXM7Y
https://www.youtube.com/watch?v=I3sKIV6KugA
https://www.youtube.com/watch?v=YK3ZP6frAMc
3. Не слишком-то громкий, ибо АДОВОГО ЭКШОНА не будет(кроме верхушки башни, но это отдельный разговор). Скорость персонажа - видеорилейтед, она небольшая. Тайминг остального подсказать не могу - ибо это самое остальное ещё надо как-то сделать. Звуки интерфейса отсутствуют(как и сам интерфейс). "Замиксованных" или подводных версий не нужно, разве что под боссов, но до боссов ещё как пешком до Египта. Под водой можно разве что чуть изменить звук, чтобы он звучал глухо, но это, думаю, программно делается.

Такие вот дела. Ничего не готово, но планы уже наполеоновские.
Аноним 16/12/20 Срд 00:56:44 715199202
>>715194
Не обращай внимания на этого толстяка. Перечитай его пост. Он разве что трек тебе самому не предлагает написать - столько манятребований выкатил. Проще на opengameart по тэгам подобрать подходящие треки, и не надо напрягаться перед морщащим жопу вонабикомпозитором, и лицензия CC0 (общественное достояние, никаких упоминаний).

https://opengameart.org/content/loading-screen-loop
https://opengameart.org/content/desolate
https://opengameart.org/content/underwater-theme
https://opengameart.org/content/heart-of-machine
Аноним 16/12/20 Срд 01:07:37 715201203
>>715199
Все мнения важны, тащта.
Аноним 16/12/20 Срд 02:04:57 715204204
>>715187
так я гружу картиночку для текстуры из интернетов, какие вкладки ёмаё
Аноним 16/12/20 Срд 04:08:57 715205205
Аноним 16/12/20 Срд 04:09:41 715206206
pattern.png 147Кб, 1111x901
1111x901
Аноним 16/12/20 Срд 04:10:07 715207207
16/12/20 Срд 05:16:10 715208208
Аноним 16/12/20 Срд 07:49:26 715224209
>>715194
Гуд. Если к понедельнику что-то сделаю, значит я в деле. Если нет, значит не справился и слился.
То, что все три референса это каверы на одну и ту же композицию, это просто потому что она звучала в "Ну погоди" на стройке?
>По мере подъёма он постепенно превращается
Напомнило Celeste. Там музыка менялась по чуть-чуть по мере прохождения.
>изменить звук, чтобы он звучал глухо, но это, думаю, программно делается
Делается. LowPassFilter на аудио-шину закидываешь и крутишь ему cutoff_hz, пока не будет звучать збс.


>>715199
>opengameart
Музыка с опенгеймарта, ассеты оттуда же. Код стащить со стаковерфлоу. Руководитель проекта и пиар-менеджер - робот Максим.
Или всё-таки можно сделать цельное художественное произведение, где все части будут между собой согласованы. Но для этого надо приложить усилия к координации исполнителей. Тем более художественное видение - штука комплексная, сложная и не поддающаяся формализации в своей основе. Не могу ж я у анона в голове покопаться и понять, что он там внутри себя слышит для каждого отельного уровня.
Аноним 16/12/20 Срд 09:10:24 715226210
1608099024376.png 168Кб, 480x300
480x300
>>715224
> художественное видение - штука комплексная, сложная и не поддающаяся формализации в своей основе
Формализации в виде внятного ТЗ?
Окей, окей.
Аноним 16/12/20 Срд 13:23:52 715246211
>>715224
>То, что все три референса это каверы на одну и ту же композицию, это просто потому что она звучала в "Ну погоди" на стройке?
Ах, я вижу, вы человек высокой культуры.
>Музыка с опенгеймарта, ассеты оттуда же. Код стащить со стаковерфлоу. Руководитель проекта и пиар-менеджер - робот Максим.
Ну, тащта, проект уже это напоминает. Текстуры персонаж_ки - отредаченные ассеты Старбаунда, тайлы - спыжжены из Classicube и слегка отредачены потому что Goodlyay - пидр, так ему и надо, коды движения - монстр Франкенштейна из разных туториалов, музыка на фоне теструма даже не маскируется.
Аноним 16/12/20 Срд 16:04:46 715264212
Аноним 16/12/20 Срд 21:48:14 715299213
image.png 44Кб, 1276x608
1276x608
Блядь, аноны, я заебался.НИхуй не програмист и нихуя понять не могу. дДелаю как в ебаных видеоруках, иногда англоязычных, потму что у нас как обычно - одни долбаебы и школьники НО СУКА НИХУЯ НЕ РАБОТАЕТ.
Вот есть платформер, человечек должен подобрать патроны. КАК?
ДЕлал через ебучий сигнал у Area2D ничего не работает.
А как стрелять?
А как моба стрелять заставить?
Аноним 16/12/20 Срд 22:33:08 715303214
>>715299
Да там всё просто. Щас, погодь.
Аноним 16/12/20 Срд 22:43:53 715304215
>>715303
чот щас постоял, покурил на балконе, подумал. Щас накатаю тебе длиннопост, а толку? Получится ещё один туториал, которого ты >>715299 не поймёшь. Так что читай туториал на годотдоках. Там уже по русски. Ссылка в шапке.
Аноним 16/12/20 Срд 22:56:58 715305216
>>715304
ты пытался, спасибо и на этом. Проблема в том, что будучи совсем не программистом и совсем зеленым, такие туторы, как в шапке читать смысла не имеет.ПОтому что стопаришься буквально на мелочах о которых хоть сколько то продвинутые чуваки даже и не думают. А ты сидишь и ломаешь голову как правильно этот area2D юзать.
Аноним 16/12/20 Срд 23:01:24 715306217
>>715305
Ну да, хз, как тебе помочь. Тут надо начинать с азов. Как единички и нолики в компе превращаются в программы. Информатика, 10 класс.

И всё это изучение азов должно быть помножено на неподдельный интерес, иначе не взлетит. У меня так с рисованием было. Сел, начал малевать, весь прошлый год малевал. Но интереса вообще никакого. Соответственно и выхлопа - ноль.
Аноним 16/12/20 Срд 23:08:42 715307218
>>715306
ну так я в школе как то паскаль учил, норм было. Ща за питон сел и хули, ни как это мне не помогает патроны подобрать.
Вот как понять когда скрипт пишешь, для какого действия че после "func" писать например? Вот в уроках же об этом не говорят. Они просто берут и пишут "вот здесь физикс процесс вощьмем, а здесьсвою напишем"
Аноним 16/12/20 Срд 23:21:45 715308219
>>715307
Как я тебя понимаю. У самого так же.
Аноним 16/12/20 Срд 23:32:40 715309220
>>715299
> Вот есть платформер, человечек должен подобрать патроны. КАК?
Предположим, что при приближении к патронам, у человечка над головой должна появиться надпись "Е - подобрать патроны", при нажатии Е патроны должны исчезнуть с локации, а в инвентаре человечка должно начислиться столько патронов, сколько было в этом объекте.
Вот решение в лоб:
1. Объект-патроны - это Area2D ей на сигнал on_body_enter(body) вешаешь код if body.name == "Player": body.show_message("Е - подобрать патроны")
2. Player это KinematicBody2D
3. У него есть функция show_message(msg_text) и объект-Label над головой, без текста. В функции пишешь label.text = msg_text
4. Точно так же обрабатываем выход человечка из зоны патронов:
Area2D | on_body_exit(body): if body.name == "Player": body.hide_message()
Player | hide_message(): label.text = ""
5. Теперь главное. КАК ВЗЯТЬ ПАТРОНЫ: наш человечек уже в зоне патронов и у него над головой надпись. Мы у него в _input(event) отслеживаем нажатие кнопки взаимодействия, которая, допустим Е и есть. И тут мы сталкиваемся с проблемой, зона2д знает, что человечек в неё вошёл, а человечек - нет. Как нам это исправить?

Вот решение по лбу:
1. Объект-патроны - это Area2D ей на сигнал on_body_enter(body) вешаешь код if body.is_in_group("Player"): body.post_message("entity", self) мы выявляем объекты не по именам, а по группам, и функция теперь другая, она сообщает человечку 2 аргумента, текстовый тип сообщения и ссылку на себя. тип сообщения "entity" взят с потолка, означает что поблизости сущность и вот второй аргумент - ссылка на неё.
2. Теперь при входе в разные зоны2д человечек может знать о них и ему для этого нужен только один метод. post_message(msg_type, sender). Внутри этого метода большой match msg_type в котором для каждого типа сообщения выполняются разные действия. Допустим, для "entity" он должен взять sender.hint_text и поместить себе над головой.
3. А теперь возвращаемся к _input(event) отслеживаем нажатие кнопки взаимодействия, которая, допустим Е и есть. И тут мы уже знаем, что у нас есть ссылка на зону2д с патронами и она к нам пришла через сообщение "entity" а это значит, мы можем взять у неё количество патронов и прибавить к своему инвентарю. И даже мы можем ей послать queue_free()

Аноним 16/12/20 Срд 23:40:07 715310221
>>715307
> Вот как понять когда скрипт пишешь, для какого действия че после "func" писать например?
Поступательно.
Знаешь мем про "нарисовать сову"?
1. Нарисуйте два овала.
2. Нарисуйте всю остальную сову.
Так же и тут.
Паскаль ты изучал. А в питоне разницы нет вообще. Вместо begin end отступ вправо, вместо := просто =, вместо = двойное ==, вместо <> будет != и не нужны ; в конце строк. Вот и вся разница. Проблема не в синтаксисе, проблема в отсутствии неподдельного интереса, который я упомянул выше. Это не фигура речи, это реальная проблема. Ты хочешь создать игру, и твоё желание настолько велико, что оно блокирует попытки интересоваться мелочами. Кодинг оно воспринимает, как мелочь, да. Так же, как и у меня моё воспринимает как мелочь рисование арта. Типа твоё подсознание такое думает "блять, точки-хуёчки, объекты-хуекты, ГДЕ МОЯ ИГРА, БЛЕАТЬ!"
Аноним 17/12/20 Чтв 00:06:24 715312222
>>715309
Решение "по лбу" не просто так названо. Оно такое же хуёвое. Оно предлагает в коде игрока заводить код на каждую группу сущностей в игре. А если мы захотим добавить новую, нам придётся лезть в код игрока. правильное решение, когда каждый объект в игре делает только самый минимум действий. Объект-патроны должен содержать унифицированный метод, например action() который сам делает необходимые действия, когда игрок нажимает Е.

Таким образом мы убираем все эти post_message() а вешаем на Player обработчики сигналов on area enter/exit Теперь у нас и игрок автоматически знает о зоне в которую вошёл и зона знает об игроке. Зона поставляет сведения, что вывести над головой у игрока. Игрок выводит текст. Зона поставляет метод action() который может быть вызван игроком, при нажатии на кнопку экшона. Игрок безо всяких match просто вызывает этот метод у зоны, если он у неё есть: if area.has_method("action"): area.action() Зона знает об игроке и может положить ему в инвентарь нужное количество патронов, а затем самоуничтожиться.

Вот этот метод гораздо продуктивнее. Самое главное тут то, что нет прибитых гвоздями привязок одних объектов к другим. Излучается сигнал - в его аргументе есть ссылка на объект, с этим объектом выполняются нужные действия. И всё. Объект забывается навсегда при выходе из коллизии.
Аноним 17/12/20 Чтв 00:11:02 715313223
>>715310
>Вот решение по лбу:
вот за это сспасибо, завтра буду разбираться, а то у меня 4 утра
>отсутствии неподдельного интереса,
вот тут ты ошибаешься, чувак. Интерес интересом, но вот у тебя, например, есть база програмиста наверное, тебе легче через эти дебри пробираться, а я гуманитарий неделю бьюсь по 4 часа в день и нихера. Те уроки что на ютубе есть - линейные, по ним сделать можно только то, что автор показывает, а понять и того меньше. Они не учат логике движка, они вообще нахер так то не нужны, их можно заменить одним сайтом, где будет кусок кода и пояснение что он делает, для кнтрц\кнтрлв.
Вот поэтому я и взялся за питон, но где ж его за неделю осилить то. Синтаксис не проблема.
Аноним 17/12/20 Чтв 00:18:09 715315224
>>715313
Я конечно же искренне надеюсь, что здесь я не ошибаюсь. Неподдельный интерес к программированию у меня был 20 лет назад. И сейчас мой скилл разработан настолько, что в моей голове без труда уместится .NET5
Извини, если выразился невнятно, вот более точно:
Неподдельный интерес сегодня означает более-менее средний скилл через 20 лет.
Аноним 17/12/20 Чтв 00:18:33 715316225
Ну всё, я - спать.
Аноним 17/12/20 Чтв 00:25:07 715318226
>>715315
ой да прям 20 ага. Его че, это програмирование ваше, гении для гениев придумали? хз что ты под средним скиллом подразумеваешь, но даже школьники игры пишут на гдскрипте и в ус не дуют.
Аноним 17/12/20 Чтв 03:19:06 715329227
2020-12-17 03-1[...].mp4 3180Кб, 1280x720, 00:00:21
1280x720
изображение.png 820Кб, 1886x880
1886x880
Аноны, что за хуйня в годоте с освещением? Начало так артефачить с достижением определенного числа источников света.
Аноним 17/12/20 Чтв 04:00:05 715331228
>>715329
Может, он в редакторе так "оптимизирует", а в проекте намана будет.
Аноним 17/12/20 Чтв 04:21:59 715334229
>>715329
>>715331
Да, это оптимизация. Не помню, но в настройках же вроде можно было настроить дальность включения света. Вроде даже в самой ноде что-то было.
Аноним 17/12/20 Чтв 07:58:46 715337230
>>715329
На всякий случай напомню что на один меш может светить только 8 источников света одновременно. Да и потом у тебя статика, это вообще можно запечь.
Аноним 17/12/20 Чтв 08:03:38 715338231
>>715329
Свет - это проблема всех движков. Свет и тени. Чем больше источников света, тем тяжелее. И точнее говоря, это не проблема движков, а проблема вычислительная вообще. Эту проблему призван решить хвалёный аппаратный рейтрейсинг. Без него освещение сцен оптимизируется всевозможными трюками. Кто во что горазд.
Аноним 17/12/20 Чтв 10:06:27 715349232
>>715313
>вот у тебя, например, есть база програмиста
Зря ты так, бро. Бьюсь об заклад, что хоть какая-то база по программированию есть меньше чем у половины анонов в треде. Я вот (не тот анон, кому ты отвечал) музыкант по образованию, но вот не ною, кодю себе потихоньку. Никогда не получал по этой теме сколько-нибудь системной инфы, это сугубо хобби.

>>715246
>Ну, тащта, проект уже это напоминает.
А, ну, может, я тогда действительно зря впрягся? Так-то я планировал за сегодня дорисовать анимации для своего персонажа, после чего сразу же приступить к музыке. Но если проекту не планируется в других аспектах придавать уникальный облик, может, и тут заморачиваться тогда тоже не надо?
Аноним 17/12/20 Чтв 11:34:38 715356233
>>715349
>Зря ты так, бро.
как "так", не понял?
>не ною, кодю себе потихоньку
ну так я тоже "кодю", сижу разбираюсь. Возникла сложность с которой я не смог разобраться - написал на двач.
Аноним 17/12/20 Чтв 11:53:13 715359234
Напрягает необходимость указывать self.varname чтобы задействовать геттер ДАЖЕ В ПОТОМКАХ! Жду четверочку, надеюсь пофиксят.
Пока что приходится одноразово исполнять чумовые конструкции вроде: if self.my_foo_bar: pass чтобы однократно лениво проинициализировать my_foo_bar через его геттер и в дальнейшем не городить режущий глаза self.
Аноним 17/12/20 Чтв 12:51:17 715365235
>>715349
Это личное дело каждого, так что если нет желания пилить амбиенты для "паззла" из кусков других проектов за хуй собачий большое человеческое спасибо - я пойму
Аноним 17/12/20 Чтв 13:02:08 715366236
>>715338
>>715337
Спасибо большое, буду ковыряться дальше
Аноним 17/12/20 Чтв 13:04:26 715367237
>>715359
>Напрягает необходимость указывать self.varname чтобы задействовать геттер ДАЖЕ В ПОТОМКАХ! Жду четверочку, надеюсь пофиксят.
>Пока что приходится одноразово исполнять чумовые конструкции вроде: if self.my_foo_bar: pass чтобы однократно лениво проинициализировать my_foo_bar через его геттер и в дальнейшем не городить режущий глаза self.
Блин, ну как же хорошо, что я слезс с иглы гдскрипта. Прям аж подташивает от этого питоносинтаксиса.
Аноним 17/12/20 Чтв 13:15:33 715368238
>>715356
>я гуманитарий неделю бьюсь по 4 часа в день и нихера
Вот так ты зря. Ты думал, программы делаются так: пришёл программист, легко разжал уста, и сразу запел, вдохновенный простак - пожалуйста! А кодинг по большей части состоит из "эта херня не работает, хотя я всё сделал правильно, нушонетакта!!11"

>>715359
>необходимость указывать self.varname
Шта? Это ещё зачем?

>>715365
Дело не в желании. Мне в любом случае нужно отвлечься - почти неделю выстраивал анимации. Просто а насколько оно будет уместно?
Аноним 17/12/20 Чтв 13:24:25 715370239
>>715368
> Просто а насколько оно будет уместно?
Хороший амбиент почти всегда в тему же. Хоть что-то будет оригинальное в этом месте.
Аноним 17/12/20 Чтв 16:09:43 715385240
1581008146240.webm 5636Кб, 640x480, 00:02:09
640x480
Аноним 17/12/20 Чтв 18:17:17 715406241
>>715368
> Шта? Это ещё зачем?
Пробую варианты в стиле
> эта херня не работает, хотя я всё сделал правильно, нушонетакта!!11
Аноним 17/12/20 Чтв 18:19:56 715408242
>>715385
Рука слишком статичная. Я бы добавил ей анимацию покоя, когда не стреляет.
Аноним 17/12/20 Чтв 18:24:56 715409243
>>715367
> слезс с иглы гдскрипта
Нормальный язык, чо ты? Ну, впрочем, дело вкуса. Хотя, это ещё может быть дело привычки. Меня, например, после VB5/6 подташнивало от паскаля. А потом, когда привык к паскалю, прошёл с ним от дельфи7 до ХЕ11, а потом лазарус, начало тошнить уже от VB. И всё это время тошнило от си/сиподобных. А вот уже второй год как врываюсь в шарп и теперь тошнит и от паскаля, и от VB.
Аноним 17/12/20 Чтв 21:36:50 715432244
>>715408
И еще факи показывать, как в Нюк Дюкеме.
Аноним 17/12/20 Чтв 22:41:13 715444245
>>715432
Как в Дарк Соулс, дед, иди-ка ты телек смотреть. Не мешай молодёжи общаться.
Аноним 17/12/20 Чтв 23:20:07 715455246
>>715444
Да ну, пусть старик вспомнит молодость.
Аноним 17/12/20 Чтв 23:50:37 715469247
image.png 892Кб, 1588x694
1588x694
Вкатываюсь по совету анона из нуфаготреда. Из прогресса - диздок накидывать начал, по обучению блендеру - скрафтил себе лоупольного долбоеба Боба в качестве заглушки на место модельки игрока и врага, тренируюсь в анимацию, потом посмотрю повнимательнее на экспорт-импорт в годот.

Советов мудрых прошу - лучше анимировать вне годота или в нем уже? Слышал где то, что лучше анимировать уже в самом движке, хотелось бы узнать, правда ли это, и почему?
Аноним 17/12/20 Чтв 23:54:53 715472248
Аноним 17/12/20 Чтв 23:57:15 715474249
>>715472
Смотрел уже, спасибо. Мне необходим мой авторский подход и контроль за каждой вершиной. Плюс так интереснее, блендер оказался пиздец увлекательной и удобной прогой.
Аноним 17/12/20 Чтв 23:58:41 715475250
>>715469
Анимировать лучше вне. Годот пока не доразвился до полноценной работы с тридэ-анимированием (есть сторонние модули, но это всё несерьёзно). Инструментарий скудный. На практике большинство девелоперов импортируют из блендера с уже готовым сетом анимаций. Туториалов на эту тему - море.
А вот когда у тебя модель с сетом анимаций уже загнана в годот, всё остальное (блендинг, стейтмашины) всё уже имеется, на весьма комфортном уровне.
Аноним 17/12/20 Чтв 23:59:07 715476251
Аноним 17/12/20 Чтв 23:59:15 715477252
>>715472
Ах да, лоуполи - осознанный выбор, забыл уточнить, я собираюсь работать в этом стиле.
В любом случае спасибо, анон.
>>715474-кун
Аноним 18/12/20 Птн 00:00:48 715479253
>>715475
Спасибо за совет, хорошо, так и буду. Загуглю гайд по созданию вебм и буду заливать сюда анимации на посмотреть.
Аноним 18/12/20 Птн 00:04:14 715486254
>>715479
Удачного времяпровождения! Дорогу осилит идущий, как говорится! Будем ждать контента.
Аноним 18/12/20 Птн 00:35:51 715492255
>>715486
Спасибо, уже дико кайфую. Давно такого не испытывал, с тех пор как весь пакет Adobe проштудировал.
Аноним 18/12/20 Птн 00:48:02 715493256
>FBX importer rewritten for Godot 3.2.4 and later
Аноним 18/12/20 Птн 08:34:32 715520257
>>715493
Нойс. Теперь можно без задней мысли пихать модели с множества моделехранилищ интернетов, а то они там все поголовно в ФБХ.
Аноним 18/12/20 Птн 16:51:38 715544258
>>715520
Не стоит без задней мысли. В таких хранилищах обычно пизженные модели которые легально в своих играх использовать нельзя. А на sketchfab и так автоэкспорт в gltf.
Аноним 18/12/20 Птн 20:04:55 715599259
>>715544
Ну, мемсы мемсами, а о лицензиях забывать нельзя. Тут не поспоришь.
Аноним 18/12/20 Птн 22:58:04 715615260
Анончики, этический вопрос к вам. Есть ли смысл игру делать одному? А то ощущаю себя неким человеком-швейцарским ножом: и модели ковыряю, и материалы в субстанс дизайнере, и логику игровую на гдскрипте. Но быть универсальным не значит делать все качественно. Засыпаю с этой мыслью и как то грустненько становится. :(
Вы что-то делаете для своего ааа проекта?
Аноним 18/12/20 Птн 23:03:11 715617261
>>715615
Не ставлю перед собой "ааа" задачи. (Потому что ААА - это когда корпа вкладывает лярды в продакшон блокбастера командой в 50 челов на зарплате полный рабочий день).
Аноним 18/12/20 Птн 23:24:11 715622262
>>715615
Пока один пилю, ну как один, готовым пользуюсь, стою так сказать на плечах гигантов. Но я больше программист конечно.
Аноним 19/12/20 Суб 01:54:18 715634263
>>715615
Есть конечно, я вот тож решил один делать. Думаю вопрос о качестве ты как то странно оставил, быть универсалом это нормально, просто потребуется в разы больше времени на каждый навык и работу. Если время есть - пили в одно рыло. Хочешь быстрее - ищи команду. Некоторые вещи можешь упростить, и обыграть так чтобы это было только в плюс.

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

Но из своего опыта в других сферах - прокачка одного навыка не уменьшает прогресса в других, ты можешь качать ВСЕ до охуенного состояния, главное это время. Вот правильно распределять время - это самый сложный и охуенный навык, без которого нихуя и никогда у тебя не выйдет.
Аноним 19/12/20 Суб 18:40:52 715746264
1608392452009.png 25Кб, 1023x596
1023x596
Какерман?
Я не слился, если чо.
Работаю над пикрелейтедом.
Аноним 19/12/20 Суб 20:35:44 715764265
>>715746
Как раз думал с утра, как ты там.
Выглядит сложно и интересно
Аноним 19/12/20 Суб 21:20:00 715782266
>>715746
>Модуль тестирования модуля загрузки модулей
Чёт проиграл.
Аноним 19/12/20 Суб 23:02:50 715823267
>>715782
Значит у меня есть чуйство юмора, значит есть шанс сделоть задорную игру, а не унылое говнецо.
>>715764
Пытаюсь сделать скрипты так, чтобы тебе не пришлось лезть в код. Всё должно настраиваться через инспектор в редакторе. Ну и текстовые файлы конфигов.
Аноним 20/12/20 Вск 00:16:26 715839268
>>715746
Модуль рекурсии. Достойное пополнение модулю фактов и космоса выйдет.
Аноним 21/12/20 Пнд 00:23:39 715971269
Кстати, хороший вопрос. Могут ли тайлы хранить данные о том, из какого они "материала" сделаны, чтобы можно было изменять звук ходьбы по ним? По решёткам звук один, по плитке другой етц.
Ну и чтобы можно было лучше прописать систему хватания за уступ при прыжке. За трубы-то в оригинальной игре нельзя хвататься.
Аноним 21/12/20 Пнд 10:43:52 716025270
>>715971
В любом объекте движка есть свойство meta и методы get_meta, set_meta. Благодаря им в любом объекте ты можешь хранить любой набор метаданных любой структуры удобной лично тебе.
Аноним 21/12/20 Пнд 11:05:52 716029271
Аноним 21/12/20 Пнд 12:01:04 716039272
>>716025
Эм, get_cell же возвращает просто int а не объект
Аноним 21/12/20 Пнд 12:30:35 716044273
>>716039
Разумеется. Зато ничего не мешает тебе сделать $Tilemap.set_meta( "Tile%s" % $Tilemap.get_cell(), TvoiaData)
Привыкли к буллету? Аноним 21/12/20 Пнд 18:35:24 716094274
Аноним 21/12/20 Пнд 20:02:19 716106275
>>716044
Что то я чую это небыстро работать будет, проще массив завести и там по координатам смотреть.
Аноним 21/12/20 Пнд 20:50:28 716121276
>>716106
Ваще не проблема. Заводи. Изначальный вопрос был (если я правильно понял), как инкапсулировать внутри тайлмапа данные о кастомных свойствах его тайлов. Это можно сделать, как предложено выше, через встроенный механизм метаданных. Можно через скрипт с массивом. Все пути открыты тебе, о юный подаван.
Аноним 22/12/20 Втр 14:26:13 716203277
Годот до сих пор пропукивает буквы отдельным дравколом?
Аноним 22/12/20 Втр 14:47:20 716219278
>>716203
Ты же знаешь что нет, зачем спрашиваешь?
Аноним 22/12/20 Втр 14:54:13 716222279
>>716203
А даже если и да? Тебе-то какая разница, у тебя всё равно игры тонет, потому что ты залётный движкосрачер. а раз нет игры, то и оптимизировать буквы в ней не потребуется.
Аноним 22/12/20 Втр 15:02:32 716223280
>>716219
>>716222
Потому что я жду, пока перестанет пропукивать, чтобы делать на годоте игру про буквы.
Аноним 22/12/20 Втр 15:08:01 716227281
>>716223
На какую платформу? На ПК будет 1000фпс даже если весь экран в буковках.
Аноним 22/12/20 Втр 15:12:15 716230282
>>716227
Понял. Спасибо. Пойдет только на ПК?
Аноним 22/12/20 Втр 15:13:50 716231283
>>716223
> делать на годоте игру про буквы
Зачем для игры про буквы вообще движок? Пили на чистой IDE твоего любимого языка. Плюсом будет запускаемость на любом калькуляторе.
Аноним 22/12/20 Втр 16:52:00 716260284
Тарщ композитор, ты там как, живой?
Аноним 22/12/20 Втр 17:01:36 716264285
>>716260
Он же сам выше написал, что слился. Ещё в пятницу, ЕМНИП.
Аноним 22/12/20 Втр 17:51:28 716295286
>>716264
Даже если так, хоть узнаю его состояние. Чому б и не.
Аноним 22/12/20 Втр 19:55:05 716345287
изображение.png 283Кб, 762x745
762x745
Процедурно сгенерированная сфера.
Но нахуя?
Аноним 22/12/20 Втр 20:12:45 716347288
>>716345
Ради лулзов же!
А теперь икосферу сгенерь. Икосфера выгоднее для процедурных планетарных миров!
Аноним 23/12/20 Срд 10:20:22 716420289
Есть у годотского АнимейшонПлеера одно принципиальное ограничение, которое я всё никак не могу обойти.
Речь про 2д и скелетную анимацию, есичо.
Есть две анимации: одна направо, другая налево. Допустим, это удар оружием. Кнопки "отразить по горизонтали", увы, не придумали, так что две анимации - это необходимость.
И есть дерево/стейт-машина. Вообще не важно. Важно то, что во время воспроизведения анимации игрок пытается развернуться. И что же происходит? Поскольку мы находимся в стейте "удар", то анимация переходит из правого удара в левый удар. НО (вот суть проблемы) в новом направлении анимация начинается ЗАНОВО. Таким образом, можно бесконечно разворачиваться влево-вправо, пока не доиграла анимация, она будет при каждом повороте проигрываться заново, потому что это две разные анимации.
Единственный работающий костыль, который я придумал для решения этой проблемы, это вместо нормальных переходов использовать blend2, выставленный на очень маленькое значение: тогда обе анимации начинают воспроизведение одновременно в любом случае, просто одна делает это совсем чуточку, незаметно. Но с бленд2 геморно делать плавные переходы, придётся использовать анимацию для изменения анимации, такая рекурсия мне не по нраву.
Какие ещё варианты? Адванс_кондишон тоже не подходит. Есть принципиальное ограничение движка: если анимация не воспроизводится, то положение её воспроизведения не меняется; так что, даже если адвансы из разных стейтов ведут к разным анимациям, неактивные всё равно начнут воспроизводиться с начала, как только к ним произойдёт переход. Можно просто вырубать стейт удара при развороте; но у меня есть и другие подобные ваншотные анимации, с ними так не получится по геймплейным причинам: например, перезарядка.
И да, я не помню, чтобы кто-то жаловался на подобное поведение, так как в основном Годо используют с пиксельной покадровой анимацией. Может, в треде кто-то что-то такое встречал?
Аноним 23/12/20 Срд 11:04:02 716424290
>>716420
Я в своем платформере просто флипаю сам спрайт в зависимости от направления взгляда. Соответственно, в таком варианте будет пофигу на фазу анимации.
Аноним 23/12/20 Срд 11:11:44 716428291
>>716424
Ты написал это просто чтобы написать? С пиксельной покадровой анимацией всё понятно.
>Речь про скелетную анимацию, есичо.
Аноним 23/12/20 Срд 11:31:23 716429292
>>716428
И что мешает задать scale(-1,0)?
Аноним 23/12/20 Срд 11:38:09 716431293
1608712688663.png 34Кб, 1018x596
1018x596
1608712689120.png 76Кб, 699x523
699x523
Уже локации грузятся. Осталось причесать сотни строк быдлокода, написать хелпридмисправку. И можно отдавать.

Обнаружил странный баг:
Сохраняю вектор в ЖСОН. Размеется, в спецификации ЖСОНа нет векторов. Годот сохраняет его, как строку вида (х,у). Потом я в другом участке кода читаю ЖСОН. И он вместо вектора даёт мне строку. Функций конвертации я не нашёл с наскока, пните в нужном направлении, если кто знает.
Но в общем, я решил действовать исключая УБ, то есть, раз в спецификации формата нет векторов, я их и не буду писать, я всё переделал и теперь пишу массив [x,y] потом двумя лишними строчками кода читаю и формирую вектор.
Аноним 23/12/20 Срд 12:05:25 716434294
>>716429
То, что углы поворота похерятся, например? То, что весь мир нарисован с перспективой немножко под углом к камере, и два направления между собой не симметричны, например?
Аноним 23/12/20 Срд 12:36:55 716438295
>>716431
> Функций конвертации я не нашёл с наскока
Нашёл с нагугла
var2str
str2var

Теперь вопрос, стоит ли мне их заюзать, или лучше оставить вариант с массивом?
Аноним 23/12/20 Срд 12:42:17 716440296
>>716420
> в новом направлении анимация начинается ЗАНОВО
Помнишь мы с тобой обсуждали ранее? Я предложил делать вложенные стейтмашины. И предположил, что при смене стейта во внешней машине, любые анимации внутренней будут дропнуты. Но проверять мне лень. Это ж надо городить огромный тестовый проект. (Я кидал скрины с машиной-пустышкой, но чтобы на ней оттестить, нужно анимаций наделать, а лень). А у тебя уже есть проект. Запили в нём.
Аноним 23/12/20 Срд 12:46:00 716442297
>>715615
Если ты придумал дохуя интересный геймплей то делай. Сделать игру и красивую и технически совершенную скорее всего не получится потому что оба эти навыка требуют дохуя времени на прокачку и у тебя они либо олба есть на среднем уровне либо один норм а второй днище.

Так например world of goo сделали два чувака. И fez помоему один или какая-то маленькая команда.
Аноним 23/12/20 Срд 13:05:39 716449298
>>716440
>любые анимации внутренней будут дропнуты
Именно в этом и проблема. После дропа, если стейт вернётся к ним, они будут воспроизводиться с начала.
Аноним 23/12/20 Срд 13:11:05 716452299
>>716449
Здесь нужны бленды, наверное их нужно точнее настроить.
Аноним 23/12/20 Срд 13:15:27 716456300
>>716449
Тебе не нравится, что при быстром переключении начинает играть сначала некая долгая анимация?
Насколько я знаю, для решения этой проблемы, каждое состояние должно состоять (тавталогия, лол) из трёх анимаций: анимация входа, циклическая анимация середины, анимация выхода.
Вход и выход короткие, что органично смотрится при блендах. Середина при любом положении примерно одинакова и сносно выглядит при рандомном переключении из неё на анимацию выхода.
Аноним 23/12/20 Срд 13:27:38 716458301
>>716456
>циклическая анимация середины
Подходит только для циклических анимаций. Но они-то меня как раз не беспокоят. Проблема в разовых анимациях, типа атаки.
Аноним 23/12/20 Срд 13:30:03 716459302
>>716458
Я не представляю себе, как можно атаковать и в процессе атаки разворачиваться.
Навскидку даже игру не могу придумать с такой механикой.
Везде, если ты жмёшь разворот, то либо атака отменяется, либо поворот не срабатывает, пока атака не завершится.
Аноним 23/12/20 Срд 13:34:17 716460303
>>716459
> придумать
припомнить

Алсо, если реально нужна такая зверская гибкость - надо делать всё в коде, запоминать позицию, функцией seek возвращать запомненную позицию для проигрываемой анимации.
Аноним 23/12/20 Срд 14:04:21 716463304
>>716459
>Везде, если ты жмёшь разворот, то либо атака отменяется, либо поворот не срабатывает, пока атака не завершится.
Это частный случай. Вообще, на мой взгляд, разворачиваться в процессе атаки совершенно нормально, это улучшает управляемость персонажа, особенно когда нет задачи сделать хардкорную боёвку ближними орудиями.
А что скажешь про перезарядку? Понимаю, для двадэ нехарактерное действие, но всё же оно у меня есть и принимает участие в геймплее. И анимация не цикличная.
Аноним 23/12/20 Срд 14:12:10 716464305
Годаны, ща такое нарыл! ТАКОЕ!
У годота есть пачка предустановленных синглтонов: Сам движок, сервер аудио, сервер физики и т.п., полный список в доках.
Так вот, все они унаследованы от Object и у всех у них есть поле script и оно у всех пустое, null. И для всех них имеется и корректно срабатывает метод set_script!
Чуешь, какие возможности появляются?
Можно расширять возможности искаробочных синглтонов, не плодя свои. Я например, пихал в автозагрузку скрипт с глобальными константами. Теперь не буду, теперь пихану их прямо в Engine.
Аноним 23/12/20 Срд 14:13:48 716465306
>>716463
> А что скажешь про перезарядку?
Перезарядка в принципе может осуществляться на ходу. Значит вполне допустимо сделать отдельный фильтр на руки и пускать через него отдельную анимацию перезарядки.
Аноним 23/12/20 Срд 14:25:14 716468307
Короче, товарищ с разворотом в ударе, ты запили отдельную анимацию размашистого вжуха, которая запускается при нажатии на кнопку поворота персонажа. Такой отдельный усиленный удар.
Аноним 23/12/20 Срд 14:32:02 716469308
Аноним 23/12/20 Срд 15:23:12 716473309
>>716464
> теперь пихану их прямо в Engine
А хотя нет, не всё туда впихнётся. В них нет доступа к дереву. Если уж и вешать глобальный скрипт, так на само дерево!
get_tree().set_script(preload("res://global_overscript_lol.gd"))
В дальнейшем можно в любом скрипте делать get_tree().my_global_something
Но есть одна проблема - нет интерфейса и следовательно, нет подсветки.
Тогда задаём глобальному скрипту class_name например GlobalScript, и затем в любом другом скрипте пишем:
var tree = get_tree() as GlobalScript
Всё, у нас есть с ссылка на дерево сцены с нашим интерфейсом (который включает наши добавочные методы и проперти).

Внутри скрипта дерева уже имеется удобная переменная root, через которую можно с лёгкостью реализовать свой собственный велосипед по менеджменту сцен (ветвей этого root)
Аноним 23/12/20 Срд 16:03:54 716474310
1608728634231.jpg 46Кб, 595x420
595x420
> Upon the application start, a MainLoop implementation must be provided to the OS; otherwise, the application will exit. This happens automatically (and a SceneTree is created) unless a main Script is provided from the command line (with e.g. godot -s my_loop.gd, which should then be a MainLoop implementation.
Аноним 23/12/20 Срд 17:16:09 716483311
>>716465
>сделать отдельный фильтр на руки и пускать через него отдельную анимацию перезарядки
Две анимации: одна вправо, другая влево. И при развороте снова мы у разбитого корыта.
Аноним 23/12/20 Срд 17:40:23 716484312
>>716483
Вон там выше предложили. Если разворачиваешься в процессе удара - включается специальная двусторонняя анимация. Либо блокируй разворот в ударе до окончания удара.
Аноним 23/12/20 Срд 17:43:39 716485313
>>716484
>в процессе удара
Мы про перезарядку говорим
Аноним 23/12/20 Срд 17:45:11 716486314
>>716485
Значит перезарядку. Сорян, не уследил за дискассом.
Аноним 23/12/20 Срд 17:59:30 716489315
>>716486
Будь внимательнее.
Аноним 24/12/20 Чтв 05:46:43 716534316
GodotH4CVVTjpFM.png 18Кб, 663x238
663x238
годот ребята я тупой помоните нарисовать пирамудку

мне нужна функция которой скажешь например 100
и она наспавнит 100 кубиков в виде пирамидки снизу верх

Аноним 24/12/20 Чтв 06:14:25 716536317
>>716534
length = 12
k = (2 * length) - 2
for p in range(0, length):
for n in range(0, k):
print(end=" ")
k = k - 1
for n in range(0, p + 1):
print("@", end=' ')
print(" ")
Аноним 24/12/20 Чтв 07:16:55 716537318
GodotO61ncm8pLR.png 69Кб, 880x675
880x675
>>716536
стыдно, но работает
Аноним 24/12/20 Чтв 07:29:32 716539319
22380screenshot[...].jpg 267Кб, 1920x1080
1920x1080
Аноним 24/12/20 Чтв 07:44:34 716540320
>>716539
я еще лучше вариант нашел
PoolVector2Array = ([ Vector2(1,1), Vector2(2, 2), Vector2(3,3) ])
ща перепишу всё
Аноним 24/12/20 Чтв 07:54:28 716541321
GodottoepzVYgr2.png 88Кб, 856x694
856x694
>>716534
а теперь поясните мне почему это хуевый вариант
Аноним 24/12/20 Чтв 08:07:12 716542322
изображение.png 56Кб, 618x493
618x493
изображение.png 125Кб, 957x584
957x584
>>716541
Примерно на 250-ом вручную прописанном кубе у тебя начнут болеть руки.
Аноним 24/12/20 Чтв 08:29:32 716544323
pf37l80UT5.mp4 304Кб, 400x516, 00:00:22
400x516
>>716542
в моём случае больше кубов и не нужно
Аноним 24/12/20 Чтв 08:41:34 716547324
>>716544
Хуясе концовка внезапная!
Ты мастер драматургии!
Аноним 24/12/20 Чтв 11:19:21 716559325
1608797960601.png 59Кб, 694x614
694x614
Настроения заниматься делом нет.
Вкачусь в соревнование.
Аноним 24/12/20 Чтв 15:34:08 716585326
>>716541
Еще немного и ты изобретешь редактор уровней (или возьмешь готовый, тот же Tiled)
Аноним 24/12/20 Чтв 15:56:31 716591327
>>716585
Тайлмап не позволяет делать анимацию, как на видосе выше. Впрочем, решить эту проблему можно анимированным прокси-объектом. Объект становится по координатам следующего тайла, проигрывает анимацию выпадения, вместо него ставится тайл. Повторить.

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

Впрочем, велосипедный тайлмап делается за пять минут. С любыми своими фичами, какие надо. Я в прошлом году делал как-то рофла ради. Код не схоронился увы. Но там даже искаробочный тайлсет-ресурс юзался.
Аноним 24/12/20 Чтв 16:01:51 716592328
>>716591
Так я не говорю про тайлмапы, только про редактор уровня (который ты потом загрузишь)
Аноним 24/12/20 Чтв 16:13:35 716595329
>>716592
На выходе Tiled получаются тайлмапы. Плагинами они конвертируются во внутренний Tilemap. Увы.
Аноним 24/12/20 Чтв 16:19:10 716598330
>>716595
Так тебе надо просто координаты получить. Чтобы ручками векторы не писать.
Аноним 24/12/20 Чтв 16:22:08 716599331
>>716598
Я не тот анон, который ручками векторы вбивал. Я, слава Хуану, уже перерос этот этап.
Аноним 24/12/20 Чтв 22:31:48 716647332
1608838306298.png 97Кб, 649x653
649x653
Ностальгия по школьным временам. Уроки информатики. Часики на бэкашке. Синусы, косинусы. Матан!
Смотри, стрелочки доворачиваются по хитрой формуле, симулируя реальную механику.
Аноним 24/12/20 Чтв 22:36:22 716648333
>>716647
Вместо Pi*2 можно юзать Tau.
Аноним 24/12/20 Чтв 22:43:43 716649334
>>716648
Буду знать. Как-то не интересовался раньше, что для полного круга константу могли ввести.
Аноним 24/12/20 Чтв 23:04:20 716654335
1608840260352.png 23Кб, 984x450
984x450
Но бэкашки не могли вот так.
Точнее, могли конечно и так, но копипасты было бы - мама не горюй.
А в 2020 году - хуяк-хуяк префаб на сцену и в продакшон!
Аноним 25/12/20 Птн 00:10:30 716667336
1608844229909.png 16Кб, 963x507
963x507
Намечается сложный и загадочный квест на взлом кодового замка в мастерской Часовщика.
Аноним 26/12/20 Суб 13:22:02 716815337
GodotfYBxJeA9dE.png 8Кб, 377x388
377x388
как загрузить в TextEdit исходник чтоб он нормально отображался?

func _ready() -> void:
TextEdit.text = getSource()
pass


func getSource():
var file = File.new()
file.open("user://test.txt", File.READ)
var content = file.get_as_text()
file.close()
return content

делаю так получаю пикрелатед
Аноним 26/12/20 Суб 13:29:16 716817338
26724283.jpg 194Кб, 1000x780
1000x780
и еще вопрос, как аудио файл превратить в спрайт в котором отобразить Waveform можно примитивно без особой детализации
Аноним 26/12/20 Суб 13:58:14 716818339
>>716815
нашел способ использовать file.get_var() store_var() но это те еще грабли, файл особо текстовым не назовёшь
Аноним 26/12/20 Суб 14:23:44 716821340
1608981823894.png 37Кб, 957x511
957x511
>>716667
Залип в крите и гимпе на 2 дня. Научился обводкой обводить фотки из интернета. Фотки стрелок.
Аноним 26/12/20 Суб 14:37:29 716823341
>>716818
Дак это и не текстовые функции, а бинарные. И файл от них получается бинарный.
Аноним 26/12/20 Суб 14:46:13 716824342
Аноним 26/12/20 Суб 15:52:32 716829343
Аноним 26/12/20 Суб 16:50:03 716834344
1608990602232.png 94Кб, 557x587
557x587
>>716821
Каеф!
Смотришь на ход часов и медитируешь...
Аноним 26/12/20 Суб 17:00:37 716836345
>>716834
А потом пихаешь эти часики во вьюпорт, снимаешь с него вьюпорт текстуру и вешаешь на модельку часов в тридэ-сцене. Идеально!
Аноним 26/12/20 Суб 18:18:27 716846346
Аноним 26/12/20 Суб 21:51:50 716866347
Аноним 26/12/20 Суб 23:38:36 716873348
>>712330 (OP)
Новости движка от Пети
https://www.youtube.com/watch?v=IZc0DYXUijQ
новая физика
новые названия нод
столкновения частиц
многооконный режим редактора
поддержка многооконности в проектах
И многое другое.
Аноним 27/12/20 Вск 03:54:01 716883349
Zcjd560aTm.png 715Кб, 1366x768
1366x768
>>716873
беда в том что у меня нету вулкана, а для 2D, того что есть сегодня, мне больше и не надо
Аноним 27/12/20 Вск 10:01:11 716892350
>>716873
Ну чего он плачет? Перешёл бы на С#? он в 4 раза ускоряет работу кода, по заверениям разработчиков.
Аноним 27/12/20 Вск 16:03:18 716928351
>>716892
Сишарп сам по себе крут, особенно с выходом .NET5, но Хуан почему-то упёрся в mono и не желает слезать. А за mono я уже ранее подробно обеснял, в чём там хуйня. Если вкратце, моно, это когда ты конпелируешь приложухи под вайн, когда есть возможность собирать нативные ELF бинарники. Иными словами, моно это сторонний костыль, когда дотнет не был кроссплатформой. Теперь дотнет кроссплатформа и держаться за моно нет никаких внятных причин.
Траблы с моно выражаются в том, что туда хочется присобачить нугет-пакеты (а иначе зачем вообще эту хуйню разводить? хочешь скорости - собери модуль на крестах, сука, вконпелируй в движок) а они не присобачиваются. Вылазит куча ошибок с зависимостями и шлёт нахуй.

С самодельно собранными модулями на крестах работа в редакторе превращается в конструктор.
Без модулей ты добавляешь ноду, прикрепляешь скрипт (гд, вижуал, шарп, раст, питон, любой имеющийся), пишешь код, нода начинает действовать как ты закодил.
С модулями: ты добавляешь ноду из модуля, и она сразу работает, выполняя высоконагруженные действия своим скомпилированным кодом. Например, ты на крестах формируешь для примера, контроллер персонажа. Добавляешь ноду MyCharacter и она сразу бегает! По нажатию клавиш/кнопок. Да, отладки не будет. Если ты ошибся, то разворачиваешься и идёшь в ИДЕ/блокнот, правишь код, конпелируешь (при наличии предкомпилированных объект-файлов движка конпеляция будет быстрее, фактически пересоберётся только твой изменившийся модуль, а потом всё слинкуется с уже сконпелированным в прошлый раз движком), тестируешь заново.
Зато никто не мешает тебе к твоей ноде прикрепить обслуживающий гд-скрипт, который будет мелочёвку выполнять, пока нода на крестах ебашит в 100500 ФПС.

Вот и получается, что шарп, особенно на моно, ни нахуй, ни впизду не нужен. Полумера. Решение для слабаков, которые не хотят стать мужиками и выучить наконец кресты.
Аноним 27/12/20 Вск 17:28:13 716945352
>>716928
Вкусовщина. Mono дает C#, и все работает. Сравнение с вайном некорректно, какой еще оверхед у моно? Там обычный рантайм. В .NET5 просто воткнут рантайм моно но он тебя не смущает.
Тащить нугет пакеты - ну такое себе, твоей либы нет в исходниках что ли, которые можно просто кинуть в папку проекта? Я бы такой либе вообще не доверял, мало ли что она там делает, майнит или пароли сливает. Писать код на C# быстрее чем на C++, потому что в последнем куча подводных камней.
Аноним 27/12/20 Вск 17:49:10 716952353
GodotzXhWfGbzkA.png 3Кб, 379x383
379x383
>>716846
сам проверил же? не работает
Аноним 27/12/20 Вск 18:01:54 716959354
>>716952
> сам проверил же?
Проверял. Работает.
Ты наверное файл так записал. Покажи файл в блокноте открытый. Вангую там такое же.
Аноним 27/12/20 Вск 18:09:14 716963355
GodotcD3jg7ThMV.png 5Кб, 380x235
380x235
>>716959
во общем не важно, подсветка синтаксиса кривая, комментарий не подсвечивает. как сделать чтоб код показывало так же как в редакторе?
Аноним 27/12/20 Вск 18:45:19 716971356
Аноним 27/12/20 Вск 18:55:44 716975357
>>716963
> комментарий не подсвечивает
add_color_region("#", "\n", Color.gray)
Аноним 27/12/20 Вск 18:58:19 716976358
>>716975
> > комментарий не подсвечивает
> add_color_region("#", "", Color.gray, true)
Быстрофикс
ВНИМАНИЕ Аноним 27/12/20 Вск 19:12:46 716979359
1609085564610.png 132Кб, 640x383
640x383
ВАЖНОЕ СООБЩЕНИЕ
Для тех, кто ждёт 4-ку:
Когда 4-ка релизнется, вы начнёте ждать 5-ку.
Хватит ждать! Начните прототипить игру мечты сегодня!
Аноним 27/12/20 Вск 21:53:35 717009360
Аноним 27/12/20 Вск 22:11:37 717015361
>>716979
Когда релизнется 4-ка придется ждать как минимум 4.2. Поэтому конечно ближайший год я буду делать на 3ке.
Аноним 27/12/20 Вск 23:05:45 717022362
Аноним 28/12/20 Пнд 02:33:02 717039363
000.PNG 9Кб, 740x67
740x67
Опять забыл про эту фичу. Не повторяйте моих ошибок, не забывайте про особенности работы с числами с плавающей запятой.
Аноним 28/12/20 Пнд 08:48:14 717056364
>>717039
Это знать надо! Это классика, блять.
Задаёшь фи, предел точности, равный желаемому тебе минимуму, например 0.0001
Сравниваешь не флоаты между собой, а разность между ними по модулю и с фи. Если больше фи - значит не равны, если меньше или равно фи - значит равны.
const phi : float = 0.0001
func float_equal(f1: float, f2: float) -> bool: return true if abs(f1-f2)<=phi else false
Аноним 28/12/20 Пнд 08:59:02 717058365
>>717056
Можешь ещё и вот так, чтобы не плодить константы:
> func float_equal(f1: float, f2: float, phi: float = 0.0001) -> bool: return true if abs(f1-f2)<=phi else false
Аноним 28/12/20 Пнд 09:04:05 717059366
поцоны у меня баг

func _on_CheckButton_pressed() -> void:
print(_checkButton.toggle_mode)

всегда пишет true
Аноним 28/12/20 Пнд 09:15:40 717062367
GodotoWXmMQ36e1.png 9Кб, 564x154
564x154
>>717059
баг на баге багом погоняет...
Аноним 28/12/20 Пнд 09:18:23 717063368
>>717059
Тебе нужна переменная pressed, toggle_mode просто говорит о том, что состояние кнопки можно или нельзя поменять.
Аноним 28/12/20 Пнд 09:37:56 717070369
>>717062
Это не баг. Шрифт с кириллицей добавь.
Аноним 28/12/20 Пнд 09:38:40 717071370
Аноним 28/12/20 Пнд 10:44:12 717077371
>>717071
Баги в движке есть. Но когда ты с ними реально столкнёшься, ты наоборот будешь думать, что у тебя где-то в коде ошибка или в параметрах импорта. Тру стори. Как-то в прошлом году гуглил свои проблемы с девелопом своих игор и к своему ужасу натыкался на открытые ишью по загугленной проблеме. Не помню уже, о чем речь была. Но удалось обойти.
Аноним 28/12/20 Пнд 15:02:28 717132372
Аноним 29/12/20 Втр 03:07:44 717264373
Ну что, как там редактор?
Аноним 29/12/20 Втр 08:30:14 717278374
>>717264
Новогодние хлопоты. Сам код давно готов, но тебе же нужна подробная инструкция. С инструкцией пока что не готово.
Аноним 29/12/20 Втр 12:52:51 717316375
>>712330 (OP)
Ньюфажина врывается в тред с ноги.
1) Правильно ли я понял, что в годоте можно работать на чистом c++?
2) Есть ли гайды годота на плюсах? я их не знаю - буду учить параллельно
Задача - сделать гексогональную стратегию-тактику (я нашел хороший гайд на плюсах по гексам, а годот как раз позволяет с плюсами работать). Что в целом можете посоветовать, за исключением ссылок в оп-посте, которые я сейчас прочту?
Аноним 29/12/20 Втр 13:08:10 717320376
>>717316
1) Правильно. ноесть один маааалеееенький нюанс. Вся мощь редактора тебе будет недоступна. Ты будешь кодить просто модуль просто в ИДЕ.
2) Для истинного сишника лучшим гайдом являются исходники.
> Что в целом можете посоветовать
Не лезь туда, она тебя сожрёт.
> я нашел хороший гайд на плюсах по гексам, а годот как раз позволяет с плюсами работать
Вычленяешь в гайде части, которые отвечают за отрисовку, физику, звук, сеть. Переписываешь эти части с учётом нод. Конпелируешь. Запускаешь.
Аноним 29/12/20 Втр 14:45:44 717335377
>>717278
Это да.
Ни в коем разе не тороплю.
Аноним 29/12/20 Втр 15:43:39 717342378
>>717320
вот кстате по поводу сишных внутренностей, насколько сложно взять html5 движок годота и вырезать от туда всё, оставив работы с сетью, шрифты, атрисовку картинок и может шейдеров и на основе этого микро движка пилить охуенные сайты
Аноним 29/12/20 Втр 16:38:45 717349379
>>717342
Теоретически очень просто: каждый модуль годота обёрнут в дефайн. Если просто удалить из папки ненужные модули, теоретически движок соберётся в такой "легковесной" конфигурации. Но это, повторюсь, с дивана.
Аноним 29/12/20 Втр 16:56:55 717350380
>>717342
Проще взять голый джаваскрипт, обмазаться либами к нему и пилить. Это я тебе как разрабатывающий игры и на годоте, и таким способом, говорю. Одну я прототипировал в годоте, в нем же делал уровни, а потом копипастил.
Аноним 29/12/20 Втр 18:28:38 717366381
>>717350
я просто под впечатлений от wasm в целом и мне кажется он более ближе к железу чем джаваскримпт, а godot похоже единственный кто юзает wasm

a wasm рулит, как пример raylib портированый на wasm
https://www.raylib.com/examples.html
Аноним 29/12/20 Втр 20:19:06 717377382
>>717366
> а godot похоже единственный кто юзает wasm
Сомневаюсь. Мне даже гугл не нужен, чтобы сомневаться.
Аноним 30/12/20 Срд 01:02:34 717417383
>>717377
среди легковесных html5 движков, тот же Construct от Scirra, тащит с собой целый винегрет их js файлов. Godot-у реально не помешает какого то облегченного 2D движка для веба и может мобилок
Аноним 30/12/20 Срд 14:34:12 717523384
Блять, на офф. сайте вижу биндинги для SQLite. Открываю ассетлиб в самом годоте и он их не находит.
Алсо, AudioStreamPlayer кажись багнутый в последнем релизе, т.к. даже если отключить у stream loop он все равно зацикливает, а когда в _ready stream.loop = false прописываешь - все норм.
Аноним 30/12/20 Срд 14:44:08 717525385
>>717523
> Открываю ассетлиб в самом годоте и он их не находит.
Есть такое.
Как-то смотрел туториал не помню по какойму вопросу, и автор презентовал собственный ассет в ассетлибе. И его тоже не было видно. Вангую, что это потому что автор указал точную версию, например 3.1.1., и теперь, для 3.2.3. её не видно. Качать браузером и устанавливать вручную.

> AudioStreamPlayer кажись багнутый
Главное, что ты решил проблему и можешь двигаться дальше.
Аноним 30/12/20 Срд 14:49:55 717527386
>>717523
Нашёл я твои биндинги. У них исходник удалён автором. Их и с сайта скачать нельзя.
Аноним 30/12/20 Срд 14:55:36 717529387
2020-12-30 1452[...].jpg 103Кб, 1206x398
1206x398
>>717525
> Главное, что ты решил проблему и можешь двигаться дальше.
Это да, не то чтобы жалуюсь сильно, просто пол часа наверное убил на то чтобы понять что я не так написал, а оказалось проблема не во мне.
>>717527
Да нет, вроде качается с сайта и дата релиза недавняя.
Аноним 30/12/20 Срд 14:57:17 717531388
>>717529
Ну так скачай и установи вручную.
Аноним 30/12/20 Срд 15:00:06 717532389
1609329605695.png 15Кб, 446x268
446x268
1609329605798.png 6Кб, 280x162
280x162
1609329605800.png 8Кб, 880x80
880x80
Аноним 30/12/20 Срд 15:08:08 717537390
2020-12-30 1504[...].jpg 27Кб, 1012x215
1012x215
>>717531
Уже, просто гитхаба нету и issue не открыть, а выговариваться где-то надо, кек.
>>717532
Интересненько.
Аноним 30/12/20 Срд 15:10:38 717538391
>>717537
> projects | templates
Ты где ищешь ассеты-то? В менеджере проектов? Молодец, чо.
Аноним 30/12/20 Срд 15:11:15 717539392
>>717537
> issue не открыть
О да. Надо было ещё ишью открыть!
Аноним 30/12/20 Срд 15:12:45 717541393
1609330365332.png 29Кб, 776x378
776x378
Аноним 30/12/20 Срд 15:14:17 717543394
2020-12-30 1513[...].jpg 286Кб, 1268x991
1268x991
>>717538
Извините? Это вкладка через которую скачиваются ассеты как раз.
Аноним 30/12/20 Срд 15:18:04 717546395
>>717543
Не извиню! Неси розги! Спущай штаны!
Создаёшь пустой проект, открываешь, видишь вкладку AssetLib >>717541
Аноним 30/12/20 Срд 15:21:21 717549396
>>717546
Ох лол. Я всегда думал что AssetLib ведет в тоже самое место. Ну благодарю, буду знать на будущее.
Аноним 30/12/20 Срд 18:11:51 717642397
>>717543
Есть темплейты, а есть ассеты.
Не смотрел в чем конкретно разница, но если ассет помечен как темплейт, то из него соответственно можно создать проект. А если просто ассет, то только добавить в существующий. (хотя на практике внутри ассета автор мог положить демопроект)
Аноним 30/12/20 Срд 21:06:29 717707398
Аноним 30/12/20 Срд 21:44:13 717714399
>>717707
Несложно.
Берёшь и делаешь. Как сделаешь - приноси, порадуемся за тебя.
Новогоднее обращение ОПа Аноним # OP 31/12/20 Чтв 23:53:06 717868400
1609447986005.png 162Кб, 365x441
365x441
Дорогие друзья!
Всё!
Прошлый год был весьма сложным. Но движок продолжает развиваться невзирая на сложности.
Желаю вам в наступающем году осуществить свои мечты. Преодолеть трудности. Сделать свою игру мечты. Ну а мы поможем. Подхватим.
Поднимем же бокалы под бой курантов и с новыми силами в путь - к новым свершениям.
Впереди Godot 4, с новыми, улучшенными функциями. Позади чумной ебанутый 20-тый год.
Всё, кароч, меньше слов, больше дела.
Аноним 01/01/21 Птн 15:54:52 717897401
Возможно глупые вопросы, но спрошу.
1. Насколько гдскрипт подходит для написания игрового ИИ?
Пилю подобие(надеюсь, это пока) пошаговой игры, но карта в раунде достаточно большая - от 100х100 до 250х250 клеток. В принципе, пережёвывание голых данных в питоновском прототипе работает сносно. Но это именно тупо расчёт, а не даже подобие ИИ. ИИ, насколько понимаю, ещё надо будет решать задачу поиска оптимального пути/действия, а это расчёты и нагрузка?
По сути, написание ИИ - это написание бота?
2. Использование c++ кода. Насколько понял, то он работает в виде модулей/либ/плагинов. То есть я пишу код плагина, компилю, а потом просто подключаю по условной инструкции https://docs.godotengine.org/en/3.0/tutorials/plugins/gdnative/gdnative-cpp-example.html#using-your-gdnative-module и радуюссь результату?
Аноним 01/01/21 Птн 16:09:37 717899402
Аноним 01/01/21 Птн 16:14:25 717900403
>>717897
1. Возможно будет медленновато. Попробуй C#
2. Не только. Можно не плагином, а сразу в движок свой модуль вкомпилировать.
Аноним 01/01/21 Птн 17:02:29 717905404
>>717900
>Не только. Можно не плагином, а сразу в движок свой модуль вкомпилировать.
А разве не придётся всю ide перебилживать?
Аноним 01/01/21 Птн 17:30:11 717910405
>>717905
Да, придется. Просто написал что такая альтернатива есть. Мне вариант с dll нравится меньше + он не поддерживает html экспорт (если ничего не поменялось).
Аноним 01/01/21 Птн 17:55:52 717916406
>>717905
Придётся, но только один раз. После первой сборки предкомпиленные объектные файлы сохраняются и в дальнейшем только происходит линковка.
Аноним 01/01/21 Птн 18:02:51 717918407
Аноним 01/01/21 Птн 18:58:33 717928408
Аноним 02/01/21 Суб 06:30:28 717969409
>>717928
Хочу тайловую карту, основанную на мозаике Пенроуза.

>>717897
Если игра пошаговая, то почему тебя беспокоит быстродействие ИИ? Пусть думает столько, сколько ему нужно. В конце концов, один раз за ход посчитать все пути это не то же самое, что считать их каждый кадр.
Аноним 02/01/21 Суб 11:18:51 717980410
>>717969
> Хочу тайловую карту, основанную на мозаике Пенроуза.
Гугл говорит, что это интересная хуйня, похожая на калейдоскоп, но я сходу не придумал применений. может ты подробнее обеснишь, зачем тебе апериодичные мозаики?
За икосферу я могу внятно обеснить, например. У неё икосаэдрическая развёртка, которая позволяет с минимальными искажениями натянуть на собственно сферу плоские карты (в том числе на полюсах). Даже на видосе видно, что весь шар состоит из четырехугольных полигонов. Но они там художественно покорёжены, идеальный же икосаэдр ровнее. Максимальные искажения находятся в 10 точках икосферы, в которых вместе сходятся 5 полигонов.
Таким образом, с точки зрения проектирования геймплея, девелопер может спроектировать плоскую карту игровых земель, развернуть её на икосаэдрическую сферу, для получения опенворлда. Стримить каждую четырёхугольную секцию общей карты при приближении игрока.
Аноним 02/01/21 Суб 17:18:31 718011411
>>717969
>Пусть думает столько, сколько ему нужно.
ИИ, обдумывающий ход 5-10 секунд, и ИИ, обдумывающий ход 2-3 минуты - разные вещи.
Есть у меня на работе решение, которое используют многие облачные провайдеры среднего размера. Так вот один из компонентов - некоторое количество скриптов, писанных на питоне, функции и действия там вполне себе линейные, но из-за объёмов это работает реально медленно. Потому что часть этих питонячьих скриптов имеет по 12-15к строк кода. И это тормознутая боль, а по факту чуть ли не стандарт для этой области. Для понимания. Просто вывод списка элементов, безсортировки и обработки, может занимать секунд 7. При том, что этих элементов может быть всего пара тысяч.
Аноним 02/01/21 Суб 19:42:53 718028412
>>718011
У тебя ещё игры нет, а ты уже ноешь про тормоза.
Аноним 02/01/21 Суб 20:11:36 718038413
>>718011
Значит массивы твой выход
Аноним 02/01/21 Суб 20:37:03 718041414
Посоны, не обоссывайте, т.к. третий день в этом вашем геймдеве, а лучше подскажите.
Есть у меня короче переменная состояния в синглтоне. Я хочу чтобы на основе значения в ней менялось управление и UI. Реализовать я думал это все через сигнал типа состояние_изменилось(прошлое, новое), чтоб ноды получали его и разбиралсь что делать. Вот только загвоздка - как элегантно динамически привязывать сигнал к определенным нодам из кода при смене сцены.
Аноним 02/01/21 Суб 21:25:41 718047415
>>718041
Глобальные сигналы в синглтоне спешат на помощь!
Объявляешь сигналы в синглтоне, подписываешь на них ноды. Отписывать не нужно, они это сами делают. Очень удобно. В любом месте игры излучаешь сигнал синглтона и куча подписанных на него нод автоматически выполняет действия.
Аноним 02/01/21 Суб 21:52:00 718052416
>>718047
Тип мне стоит просто сразу все ноды в игре из корня вообще привязать и где оно не нужно просто функцию не прописывать и оно само разберется?
Аноним 02/01/21 Суб 21:58:13 718055417
>>718052
> мне стоит просто сразу все ноды в игре из корня вообще привязать
Я не уверен, нет, пожалуй нет.
> и где оно не нужно просто функцию не прописывать и оно само разберется
ХЗ, что ты имеешь ввиду? Не понел.
Аноним 02/01/21 Суб 22:21:02 718062418
>>718055
Я имел ввиду циклом for пройтись по нодам и с помощью connect() привязать к ним сигнал, а потом где он не нужен просто функцию не прописывать.
Ну или можно засунуть ноды которые используют сигнал в отдельную группу и также пройтись, немного муторнее, но тогда он будет превязан только к тому что нужно.
Аноним 02/01/21 Суб 22:45:54 718077419
>>718062
> циклом for пройтись по нодам и с помощью connect() привязать к ним сигнал
Не. Я имел ввиду другое. Смотри, у тебя есть нода, назовём её global, в которой есть сигнал, например bullet_hit(damage, to_object). Далее, у тебя есть сцена bullet, которая собственно, олицетворяет выстрелившую пулю, которая летит, достигает любого препятствия и... И? Ты в коде этой пули, в методе move_and_collide ты получаешь коллизию, в коллизии есть ссылка на коллайдирующий объект, ты пишешь там: global.emit_signal("bullet_hit", урон_твоей_конкретной_пули, ссылка_на_объект)
И что мы получаем?
Global виден всем. Допустим, у нас есть интерфейс, который спавнит на экране циферки урона при попаданиям по объектам. Прямо в ready коннектишь ноду с этим интерфейсом к сигналу global.connect("bullet_hit", self, "on_bullet_hit") далее, создаёшь вышеуказанную функцию on_bullet_hit(damage, to_object) и можешь там работать с координатами объекта, кастуя эти координаты из тридэ на плоскость экрана, и выводя там циферки урона, который пришёл в функцию из сигнала, как в японских слешерах или файтингах.
Нода игрока так же (да что там, все ноды, принимающие урон), при своём создании подписывается на этот глобальный сигнал. И обрабатывает полученный урон.
> засунуть ноды которые используют сигнал в отдельную группу
С группами можно организовать подобие интерфейсов. Если чётко следовать самостоятельно установленному правилу, что в определённой группе могут быть только объекты с определёнными функциями, то группы становятся типа как интерфейсы, достаточно чекнуть is_in_group для входящего объекта, чтобы в дальнейшем не чекать вызываемые на нём методы.
Аноним 02/01/21 Суб 23:05:07 718079420