Этого треда уже нет.
Это копия, сохраненная 3 июля 2022 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ОП пикча 202020 Кб, 512x327
Godot #20 # OP 712330 В конец треда | Веб
Добро пожаловать в 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/
2 712332
Смачно пропукался в годотя-треде.
3 712368
>>712244 →
Неплохо, но бессмысленно. Как раз задумка в том, чтобы не читать сейв-файл при открытии диалогового окна. Этот-то проект мелкий, но я планирую и в большом так же делать, а там сейвы покрупнее будут, читать каждый ради получения превьюх - не гуд.

>>712309 →

>А на андроидах такое будет работать?


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

Подключившимся к беседе спасибо. Я сделал самым простым способом: при нажатии кнопки сохранения берётся скриншот, хранится в памяти, а обрезается и ужимается уже непосредственно при сохранении файла. Таким образом, под долгий процесс отведено то время, когда игрок всё равно ожидает каких-то подтормаживаний. А что скриншот в памяти сохраняется, так это не страшно. Тем более что кнопка сохранения вызывает только окно сохранения, никаких других менюшек.
4 712412
>>2368

> чтобы не читать сейв-файл при открытии диалогового окна


> а там сейвы покрупнее будут


Ты предполагаешь чтение файла целиком. Но движок имеет функционал для чтения файла по частям. Текстовый файл можно читать построчно. Бинарный побуферно.
Чтение одной строчки текстовика, длиной в размер пикчи будет несколько дольше чтения файла пикчи, из-за накладных расходов текстовика. Чтение же буфера из бинарного файла вообще предположительно (sic!) ничем не будет отличаться от аналогичного ПНГ, ибо он читается с диска так же (!?!sic!?!) в бинарном режиме. Но зато ты не срёшь файлами в папке с сейвами.

Ну опять, же я не настаиваю. Ничто не мешает заводить под каждый сейв папочку и хуярить в неё несколько пикч, несколько конфигов, несколько БД-шек. О, можно же пакануть потом эти файлы в ПАК, средствами самого движка или в ЗИП. В общем, вариантов куча.
5 712414
>>2412
Прикольно было бы сохранять игру в ПНГ-файл вообще. Надо изучить формат ПНГ, выяснить, как он читается программами просмотра, найти места для безболезненного инжекта метаданных и хуярить. Круто же будет. Заходит игрок в папку с сейвами, чтобы сохранить важные из них, а там - одни пикчи. И он такой, ЕБАААТЬ! А ГДЕ МОИ СЕЙВЫ??? Троллинг 80 левела!
6 712424
>>2414
Ты только что раржипег. Но кстати, это же офигенное применение раржипега!
Рарпнг вроде как тоже возможен, но тут я анус не поставлю, не помню.
7 712433
>>2412
По какой-то причине в тех играх, где я видел сейвы со скриншотами, в папке они лежали раздельными файлами. Причины этого мне неизвестны, но я всё же думаю, что так удобнее и нагляднее.
8 712442
>>2424

> Ты только что раржипег.


Я думал о раржпеге, но когда писал тот пост, в голове держал стегхайд (если ты его помнишь). Потому что ящитаю, раржпег или пнгзип (он возможен), являясь приписанным в конец пикчи архивом, уязвимы к всевозможным чистильщикам, умным просмотрщикам, антивирусам и прочим мокрописькам, которых игроки обязательно понаставят на свои компы. И вот представь: твой игрок поставил себе какой-нибудь очередной SickLeaner и тот нашёл у него твои сейвы-пнгзипы и пишет юзеру "мы можем высвободить у вас 60 Мб свободного места!" а юзер "Да!", и потом открывает игру, жмёт "продолжить" а ему "файл сохранения повреждён". И он плачет, рыдает у тебя в техподдержке "Я джва месяца играаал! У меня эльф 80го левела и 50 лутбоксов на аккаунте!"
Такшта, только сохранение в метаданных без потери консистентности формата, только хардкор.
>>2433
Они не были анонимусами и не знали.
9 712444
>>2443 (Del)
Ну это бесспорно.
10 712460
Второй день смотрю Game Endeavor. Какая же ГОДНОТА, хоспаде! Например, "койот-тайм", зависание в воздухе за краем платформы перед падением, сам бы я никогда не додумался, что он используется в платформерах, и что его нужно использовать для удобства игрока.
11 712463
>>2460
Не смотрю гейдевора. Он говорит невероятно неразборчиво.
12 712475
>>2463
Ютуб-субтитры + перевод. Я так смотрю. Правда перевод ПОТРАЧЕННЫЙ. К шуткам гейминдевора добавляются шутки надмозга.
image.png986 Кб, 1280x720
13 712508
Поясните за 4 версию, на ютубе наткнулся на демки SDFGI, как я понял есть неоф. билды.
Они обновляются или это просто пол-рублёвые деки до офф. релиза? Где их лучше качать?
Я не геймдевер, просто хочу свет посмотреть.
14 712521
>>2508

>Где их лучше качать?


Качаешь мастер-ветку https://github.com/godotengine/godot и билдишь сам. Есть шанс, что сбилдится и запустится)
Смысла в распространении этих билдов нет, исходники обновляются каждый день, багов наверняка много, версия сырая...
15 712560
>>2521
Ящитаю, лучше качать померженный бранч отдельно https://github.com/godotengine/godot/tree/vulkan потому что (я так предполагаю) в бранче всё оттестировано и работает, а в мастере работа ведётся наживую и анону может не повезти именно в момент закачки закачать код с поломанным функционалом. А бранч он уже всё. Застыл в истории после мержа. Поправьте, если я не так понимаю.
16 712564
>>2563 (Del)
Сложно, непонятно! :(
skincollection471480bygerman3909090390dd51rbt-fullview.jpg45 Кб, 1024x576
17 712570
Аноны, пытаюсь освоить Годот. До него имел опыт работы в констракте. Опыта в программировании не имею никакого.
В связи с чем вопрос:
А хули так сложно то?
Смотрю уроки на ютубе, читаю эту самую документацию и нихера понять не могу.
Наприме надо сделать так, чтобы статичный спрайт спаунил другой спрайт (пулю) раз в 5 секунд. В констракте это делается буквально 3мя кликами, + еще и условия всяких накидать можно. В Годо же кучу всякой херни написать надо. Какого блядь черта? Вот как этот ебучий таймер делать? На сцене со спаунером, или на сцене с уровнем? Нихенра не понятно.
Или вот еще - "пишу" код, обозначить переменные это понятно, дальше надо писать "func _тут_какая_то_херня (а скобки зачем?)"
ни в одном уроке не нашел ничего подробного про эту "func" - название любое что ли можно? Или список есть? В примерах всегда почти одни и те же названия, типа "_rеdy". А в скобках что? Или для того,чтобы писать на гдскрипте нужно питон знать?с нуля вкатиться в гд не получится?
визуальный скрипт пробовал но даже не понял с чего начать
18 712575
>>2570

>В констракте это делается буквально 3мя кликами, + еще и условия всяких накидать можно. В Годо же кучу всякой херни написать надо. Какого блядь черта?


Ну так констракт это и не движок, а "конструктор", где код нельзя писать в принципе, естественно, что там проще.

>Вот как этот ебучий таймер делать? На сцене со спаунером, или на сцене с уровнем?


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

>.func _тут_какая_то_херня (а скобки зачем?)"


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

>В примерах всегда почти одни и те же названия, типа "_rеdy"


'_ready' это "встроенная" функция, которая автоматически вызывается, как только node создается в сцене. Ты можешь создавать свои функции и называть их в принципе почти как угодно.

>Или для того,чтобы писать на гдскрипте нужно питон знать


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

>ни в одном уроке не нашел ничего подробного про эту "func"


В уроках, наверное, самые основы не объясняют. Читай официальную документацию.
https://docs.godotengine.org/en/stable/getting_started/scripting/gdscript/gdscript_basics.html
19 712576
>>2570
Ну блин. А зачем ты в школе прогу продалбывал? Сейчас у тебя был бы какой-никакой опыт алгоритмоёбства, архитектуры, всей херни. С наследованиями бы проблем не было.
Тебе нужно подтянуть совершенно любую прогу на любом языке. Нужны совершенно базовые вещи вроде функций и переменных, немножко про объекты и поля объектов и указатели (только без хардкорного указателеёбства как в C любят). Ну и про дерево прочесть что-нибудь можно. Лучше на Питуне, потому что синтаксис похожий, если в школе Паскаль учил, будешь постоянно об «=» и «==» спотыкаться и на циклах материться.

Вкратце, весь скрипт состоит из функций, в которые ты свои команды и напихиваешь. Их называй как хочешь, лишь бы ты сам понял, чо хотел (какие-то ключевые слова или уже имеющиеся функции не надо использовать, но я на такое особо не натыкался). Скобки после названия функции нужны для аргументов.
Например если тебе нужна функция, которая стирает пули, она должна иметь вид func remove_nahui (bullet). Тогда внутри функции ты сможешь обращаться с объектом bullet как с астоящей пулей. Потом где-то в другом месте, где тебе понадобиться удалить пулю bullet_96_ot_mahmuda ты сможешь взять и вызвать remove_nahui (bullet_96_ot_mahmuda), и пропадёт именно та пуля, которая тебе нужна.
Пустые скобки (как у _ready()) — это по большей части формальность, но она позволяет самому компилятору отличать функции от переменных.
20 712587
>>2412

>(sic!)


>(!?!sic!?!)


Что это за хуйня?
21 712588
>>2460

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


Мне нравится как молодеж, открывает для себя вещи придуманные в геймдеве более 20 лет назад. Джампбуфер и обход краев для тебя наверное тоже откровением были.
22 712590
>>2587
sic erat scriptum "так было написано"
23 712593
>>2588

> молодеж


Эх, если бы.
40калетний дед, решивший вкатиться в геймдев после 20 лет одминства набашорге
24 712595
>>2592 (Del)

> Вот именно что


>>2412

> Чтение же буфера из бинарного файла вообще предположительно (ТАК мне преподавали в институте 100500 лет назад!) ничем не будет отличаться


> ибо он читается с диска так же (!?!действительно ли ТАК же?!?!) в бинарном режиме

25 712602
>>2595
Вы ебанутые? Нахуя вы используете аббревиатуру, которую половина прочитавших не поймет, а вторая половина будет понимать каждый по своему?
26 712613
>>2602
Мне неинтересно мнение тех, кто ниже моего уровня эрудиции. Поэтому да, если прочитавшие не поняли меня - нахуй их даннинг-крюгеровский бредок.
27 712677
>>2613
чувак, знать какое то умное слово - это не показатель эрудиции.
28 712689
Оцените грязность этого хака по 10 бальной шкале:
https://www.youtube.com/watch?v=pqrD3B75yKo
29 712698
>>2689
Лень смотреть, что там?
30 712704
>>2698
Твою матуху ебут на спине твоего бати.
Там Годот.
31 712856
>>2689
Такой вопрос. Даже 2.
1) Применимо ли подобное для 2ДУже не надо, сам нашел
2) Зачем он фпс физики до 30 опустил, или для шутанов это норма?
111111111111111111.jpg34 Кб, 923x727
32 712928
Написал издателю html5 игр, что бы он купил мой шедевор за 200$, но он пишет что игра не запускается и у него ПИНК СКРИН. Я потестил с разных браузеров и устройств, все работает. В чем может быть проблема?

билд Godot 3.2.2 html5 компиляция.
33 712938
>>2935 (Del)
Глес 3й, сейчас знакомому скинул на вин10 через разные браузеры, тоже все норм.

>Собери пустой проект и скинь ему


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

ссылка на билд: https://cubic321.itch.io/panda-jumper?secret=mGHLkHarvMHMz2Pmimm2pvgNjj0
34 712943
>>2938
Хардкорная игра! Не против, если я её в шапке размещу?

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

Любой хтмл-экспорт автоматически дропает рендер до глес2. Это знать надо, это классика!
Стало быть переключай проект на глес2 и тестируй.
35 712946
>>2943

>Хардкорная игра! Не против, если я её в шапке размещу?


Не надо, она еще не вышла и ссылка будет меняться.

>Любой хтмл-экспорт автоматически дропает рендер до глес2. Это знать надо, это классика!


Ты думаешь у паблишера розовый экран из-за глес3? Странно, но почему тогда у других все работает... я попытаюсь, но не хотелось бы этого делать, так как в глес2 половина эффектов не работает
36 712949
>>2946

> почему тогда у других все работает


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

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

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

Мне понравилось.
37 712953
>>2949
Ок, благодарю за помощь, буду решать этот вопрос.
38 712977
Начал учиться шейдерам. Что-то не то напрограммил и иксы упали к хуям. Забавно.
39 713119
Клуб анонимных прокрастинаторов

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

Ну всё, запускаю редактор.
1607202719716.png101 Кб, 669x804
40 713317
>>3119
Ну вроде все устраивает. Хотя, что-то всё равно гложет. Что-то не нравится. Не пойму, что.
41 713341
А зачем добавили скриптинг на C++ и C#? Разве они могут то что не может GDscript?
42 713342
>>3341
Чтобы разрабам с других движков было удобнее переехать. Ну и вроде как они себя показывают в бенчмарках пошустрее.
43 713345
>>3341
Каждый язык может что-то, что либо не могут другие, либо могут, но медленнее и/или неудобно. Именно поэтому в IT так много языков. И это охуенно! Это конкуренция и прогресс.
44 713351
>>3342
То есть лучше писать на крестах?
45 713353
>>3351
Ну он ещё очень нескоро устареет, так что навык полезный будет.

Особенно в играх. Вдруг на Анриле захочешь ещё попробовать сделать игру. Но и в Годоте от этого будут преимущества.
46 713354
>>3353
О да! Я мечтаю когда-нибудь осилить кресты и написать свои модули для годота. Шарп уже почти осилил.
мимокрокожу
47 713356
>>3355 (Del)

> сам движок написан на c++


Можно и законтрибьютить в Godot 4.X что-нибудь потом при желании.
1607258631844.png51 Кб, 610x481
48 713361
Просто оставлю это здесь.
Пользуйтесь!

Поправки и замечания принимаются.
49 713370
>>3361
Годно. Как раз не хватало чего-то такого, чтобы разделить стейты рук и ног.
50 713374
>>3370
А то! Я с утра замыслил вот такое:

> 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 придётся делать. И принялся думоть над решением. И тут - БАЦ! Эвриак!
51 713380
>>3370
Более того, все подстановки, указанные в доках - работают. То есть, при добавлении анимаций можно добавлять условия, а закрывать каждый такой "блок условий" общим шаблоном:

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
1607269576785.png3 Кб, 195x212
52 713413
>>3380
Ля как охуенно всё работает! Все компоненты общего состояния переключаются независимо. Вхожу на лёд, включается компонент скользко. Контроллер перемещения включает модификаторы для скользящего движения. Выхожу - выключает. Класс!
1607281088810.png12 Кб, 323x211
53 713494
>>3317

> что-то всё равно гложет. Что-то не нравится


От теперь заебись!
Когда вынес весь функционал в компоненты.
1607283818214.png7 Кб, 335x171
54 713499
>>3494
От теперь ваще каеф!
Целей достиг. Можно ещё месяц видосики смотреть.
55 713503
>>3413
>>3380
>>3361
так, пажжи.
Т.е. условно у меня есть состояния "ходьба стоя", "покой стоя", "бег стоя", "ходьба раком", "покой раком", "бег раком" итоде. В итоге это может сократить кол-во этих состояний? Если зажат шифт, то хоть раком, хоть буераком, будет включаться режим бега и не придётся делать его для обеих поз?
56 713504
>>3499
А игра где?
57 713564
>>3503
Ну да. Главное - правильно всё спроектировать и раскидать по категориям. На каждую категорию свой "слой" в комбинированной стейтмашине. И разумеется, это должно соответствовать задуманным тобой игровым механикам. Если ты хочешь, чтобы из положения раком персонаж резко срывался на бег, то делаешь так. Если не хочешь - делаешь иначе.
Основная проблема, которую решает такой подход - лёгкость программирования поведения в разных средах. Персонаж не может, скажем, доставать оружие, если находится в воде. Или, если есть холодное и огнестрельное оружие, он не может доставать в воде только огнестрельное.
В воде, на суше (причем на твёрдой и на крошашейся поверхности, на скользких или липких поверхностях), в воздухе, в космосе - у персонажа разные анимации. В каждой из анимаций, в любой момент, если это разрешено, персонаж может вытянуть оружие и начать им махать/стрелять, либо наоборот, остановиться, спрятать оружие и перейти в режим IDLE. Соответственно, должна быть система, которая всё это учитывает и запускает в воде автоматически анимации для пребывания в воде, в воздухе - анимации воздуха и т.д. И когда персонаж переходит в другую среду (о чем получает входящий сигнал среды) он меняет своё состояние в соответствующем слое, не затрагивая других слоёв и анимация плавно переключается.
Эта комбинированная стейтмашина может всё это обеспечить. И даже, как я показал выше >>3361 в строке 21, может выводить имена ключей как текст, чтобы получить автоматически имена требуемых анимаций.
58 713565
>>3504
Ты художник?
Художник нужен.
Будет художник - будет и игра.
59 713569
>>3564
Звучит сложно, но очень полезно, однако.
Быстрей бы всё-таки вкатиться в ждскрипт.

> Если ты хочешь, чтобы из положения раком персонаж резко срывался на бег


В оригинале именно так, а я пытаюсь сделать говноклон в 2Д, так что пусть так и остаётся
60 713571
>>3569

> Быстрей бы всё-таки вкатиться в ждскрипт.


Какие трудности? Спрашивай.
не встречал языка проще
61 713573
>>3571
С нуля в погромирование вкатываюсь, оттого и сложно.
Как бы вижу буквы, а в слова сложить не получается.
62 713574
>>3573
С нуля сложно, понимаю. Что-нибудь смотрел/читал обучающее по общей информатике? Если нет - рекомендую посмотреть/почитать. Если да, но не понял, рекомендую погуглить из других источников, пока не найдёшь достаточно доходчивый материал.

Ведь в программировании всё просто: 1 и 0 = 0, 1 или 0 = 1. Вот и всё программирование. Всё остальное надстройка над этой очобой.
63 713577
>>3574
Ну машинно-логическую базу я болие лимени знаю. Собсно, простенькую стейт-машину кое-как написал сам(после гугла, что такое стейт-машина и как пишется). Состоит из сплошных ифов.
А вот задачи уровня "сделать движущийся лифт" или "прикрутить поворот головы к курсору при зажатом ПКМ" уже сложнее. Хоть я за них ещё и не брался
64 713579
>>3577
Штош, дерзай. Если что - обращайся. Может сам подскажу, может анончики подсобят.
65 713584
>>3579

>может анончики подсобят


Подсобим. Хотя у меня лично сложилось впечатление, что анон умеет пользоваться гуглом и головой, и совсем уж нубских вопросов не ожидается.
обитатель треда, прямо сейчас пилящий игру мечты
66 713592
>>3584

>совсем уж нубских вопросов не ожидается


Смотря по каким объектам. Может, по поводу инвентаря, поиска пути мобов или редактора уровней будут вопросы наподобие "акак какоть".
67 713608

>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.


А кто-нибудь в курсе, почему они сделали именно так, а не добавили для дельты отдельную позицию в передаваемых аргументах?
68 713625
>>3608
Чисто с дивана могу предположить, что там внутри, в буллете, на крестах, это компактный, скоростной алгоритм, использующий дельту (приращение) и нет смысла им манипулировать снаружи, потому что скорость упадёт или типа того. Можно поискать реализацию в сорцах (опенсорц же, ёпт), вдруг там в комментах оставили заметки? Но лень.
69 713640
>>3625

> Но лень.


Поборол лень.
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, который не для физики, а для графики, математики и всего такого химии, истории, лит-ры, физ-ры и природоведения, но не физики.
70 713641
>>3640
Только я всё равно смысла этого хака не понимаю. Он всё равно в тернарной операции выдает простофрейму простодельту, физикфрейму физикдельту. В чём сакральный смысл делать это там, а не домножать на дельту вектор движения в гдскрипте?

Сложно понять сишников, когда ты старый бейсиковец-паскалист.
71 713643
>>3642 (Del)
Ничего не понял.
72 713663
А я придумал и сейчас пишу стейт-машину на нодах. Одна нода = одно состояние. Внутри ноды содержится всё необходимое, что обычно выполняется в скрипте персонажа. Только вот анимации в них запихнуть пока не получается, оче сложно, надо ручками прописывать граф соединений, не видя его перед глазами и не имея возможности контролировать ошибки; не говоря уж о том, что не совсем понятно, как эти анимации анимировать в отрыве от собственно анимируемого объекта. В остальном же основные плюсы: чище код, все плюшки от наследования, персонаж может "изучать" новые способности в процессе игры или "забывать" их (например, может получить акваланг и научиться плавать; или освоить перекаты и двойные прыжки).
Я просто посмотрел на свою стейт-машину и подумал, что многовато в ней кода, надо выделить в отдельный класс. А потом как-то само вышло.

Так вот. Годаны, а попадались кому-нибудь видосы на тему стейт-машины из нод? Наверняка ведь не я один такой хитрый, но вот внятной инфы по теме я не встречал.
73 713668
>>3663

>Годаны, а попадались кому-нибудь видосы на тему стейт-машины из нод?


Да они практически все такие. По моему гораздо сложнее тебе будет найти видос где стейт машину целиком в один класс запихают.
74 713677
>>3668
Более того. Все (ну, большинство) ассеты, если содержат стейтмашину, то на нодах-стейтах. Например, навскидку, видал ассет шутера, где пухи в руке - это ноды-стейты.
75 713678
>>3663
А вот я придумал, юзать графическую стейтмашину из объекта AnimationTree! Для него создаётся отдельный AnimationPlayer, в котором создаются особые, уличные анимации, длительностью 0.1 и шагом 0.1, то есть, одношаговые. И в каждой из них содержится только один ключ - ключ вызова метода. И мы имеем графическую стейтмашину с графом переходов любой сложности, которая работает по факту с кодом.

На словах всё звучит красиво, на деле, я ниасилил, как это применять.
76 713897
>>3678
А непосредственно с анимацией, что делаешь? Через код пилишь?

Что-то со стороны это выглядит, как будто суп есть вилкой, а стейк - ложкой. Технически можно, но нахуя?
77 713929
>>3897

> Что-то со стороны это выглядит, как будто суп есть вилкой, а стейк - ложкой. Технически можно, но нахуя?


Академический интерес.

> А непосредственно с анимацией, что делаешь? Через код пилишь?


Ну нет, академический интерес к этому был удовлетворён еще во времена 3.0.6. Так что пилю как обычно.
78 713973
>>3933 (Del)
Да я и ассеты видел.
Говорю тебе, это чисто академический интерес. А в практических задачах я предпочитаю старый добрый код.
79 713975
Есть ли возможность юзать .NET 5.0 вместо моно в годот-шарпе?
1607538893090.png118 Кб, 250x250
80 713982
>>3977 (Del)
Подождём...
81 714105
Задумка. Нажимаем атаку, персонаж замахивается. Пока держим кнопку, он набирает замах определённое время до определённого предела, после чего остаётся в этом положении. Отпускаем кнопку - ударяет, на какой бы стадии замаха ни находился.
И чёт я плавлюсь. Никак не получается реализовать это на имеющихся нодах анимации. Я сделал две анимации: замах (просто зацикленная статичная поза длительностью в секунду) и удар. Вроде бы нужен ваншот, но с ним неправильно ведёт себя зацикленная анимация: постоянно повторяется с начала. Окей, тогда в стейт-машине последовательно ставим замах и удар. Но как тогда реализовать переключение на удар не тогда, когда закончится переход, а сразу же по команде?
В запасе я держу вариант с тем, чтобы поставить тупо бленд, а за ним ваншот с ударом; и просто в физикс_процессе менять силу бленда. Но всё-таки хочется, чтобы анимация рулила событиями, а не наоборот. К тому же я испытываю некоторые сомнения насчёт того, насколько физикс_процесс может сказаться на производительности, даже если у него в первой строчке написано if a: return; конечно, если он один, то плевать, но вот если их много...
82 714187
>>4105
Как у тебя машина перешла в состояние замаха?
Правильно, ты из кода сказал ей travel("замах")
Значит, при отпускании клавиши ты должен из кода сказать ей travel("удар")
Анимация замаха не должна быть зацикленной и транзишен не должен быть автоматическим. То есть машина остаётся в состоянии замаха, на последнем кадре, пока ты вручную не переведёшь её в состояние удара. После чего уже автоматические транзишены по заваршении удара переведут машину в айдл.

Альтернативный вариант (для более живого визуала) - бесконечная анимация замах-айдл, на которую замах выходит автоматически, но выход из неё в удар - вручную из кода. В этой анимации оружие занесено перед ударом и слегка покачивается.
83 714190
Годаны, пишет вам снова тот аутист с переносом Хаудее в 2Д.
Вот хочу я себе накодить редахтур уровней, чтобы было удобнее работать и мне, и воображаемым помощникам. Он, например, схороняет сцены в папке memes scenarios/levels/l1-l2-l3-...-l100500. Просто папка, не архив с неизвестным науке форматом. И в ней файлов так 100+
Это насколько тупо по шкале от одного до десяти?
И реально ли сделать так, что по выходу из локации сцена схороняет все изменения/сдвинутые ящики/трупы врагов/етц?
84 714193
>>4190

> Это насколько тупо по шкале от одного до десяти?


Это вообще не тупо. Функционал по созданию текстур из внешних пикч на лету имеется. Главное - нетупо реализовать.

> И реально ли сделать так, что по выходу из локации сцена схороняет все изменения/сдвинутые ящики/трупы врагов/етц?


Вполне реально.

> воображаемым помощникам


Эй, а как же я? :о
85 714198
>>4193
Благодарю за советы, конечно.

> Эй, а как же я? :о


Ну ты помогаешь советами, это да, за это спасибо. Но пахать и кодить за это самое спасибо никто ведь будет
86 714207
>>4198
Ну я бы попахал. Чисто за опыт. Тебе вышеуказанное сделоть?
87 714208
>>4207
От любой помощи в этом деле не откажусь.
Для лучшего качества связи могу, например, создать телегочат. Если оно надо.
88 714209
>>4208
Не знаю, мне хватит и этого треда, и пастебина для обмена результатами.
89 714211
>>4209
Как скажешь, чому б и не.
Ассеты нада?
90 714212
>>4211
Ну в принципе нет. Только типы файлов и что с ними делать будем. О, и примерно, какую структуру загружаемых левелов планируешь?
91 714213
>>4212

>Только типы файлов и что с ними делать будем


ТЦСН, наверное. Их ведь можно будет редачить в редакторе, верно?

>О, и примерно, какую структуру загружаемых левелов планируешь?


Да как и в первой Хаудее, закрытые пространства из различных тайлов, детализацию можно и самому. Лови пример тестовой комнаты с лифтом и рандомскрин из оригинала
92 714215
>>4213
ТСЦН можно. Но тупо. Лучше хранить данные расположения ассетов на уровне и иметь одну динамическую сцену, которая по умолчанию пуста, но при загрузке читает этот файл и расставляет ассеты согласно данным из файла.
Я предлагаю это.
А чтобы была возможность редактировать в редакторе и сохранять файлы, я предлагаю тебе сцену-шаблон, которая будет юзаться только при девелопе и в релиз не пойдёт. От неё будет требоваться сохранять ассеты, установленные на ней в файл данных.
93 714216
>>4215

>ТСЦН можно. Но тупо.


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

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


Звучит сложно, но, думаю, полезно
94 714219
>>4216

> некоторые моменты


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

Во-вторых: В этом смысле мы с тобой можем сильно облегчить задачу, если моды мы будем вообще грузить через встроенную систему, без велосипедов. Годот позволяет делать моды/патчи, используя основной PCK создавая к нему инкрементный PCK. Как тебе такая возможность? Если требование открытости ресурсов принципиально, то там можно ещё и в ZIP паковать. Причём (я правда не пробовал) но думаю, ничто не помешает паковать моды сторонним ZIP-архиватором.
image.png169 Кб, 847x209
95 714222
>>4219

>Так что, если ты хочешь, чтобы игроки сами делали уровни, просто предоставишь им комплект тулскриптов и ссылку на скачивание годота


А, ну тогда хорошо. Может, потом пойму, как это делается.

>Как тебе такая возможность?


Пикрелейтед
96 714226
>>4222
Ой, да там всё просто будет. Не паникуй.
97 714240
>>4226
Буду надеяться, буду надеяться...
98 714261
>>4240
Набросал каркас https://pastebin.com/pvASh6Jd
99 714266
>>4261
А, блин, пажжи ёбана.
Я протупил, там надо не просто scenarios/levels, a scenarios/scenario_name/levels. М-да.
100 714267
>>4266
Да эт не проблема. Строка же простая. Завтра доделаем. Спокойной ночи.
101 714268
>>4267
Как тебя по нику-то, мил человек?
ДолжОн же я что-то в титрах писать на этот счёт
102 714280
>>4187

>Правильно, ты из кода сказал ей travel("замах")


>Значит, при отпускании клавиши ты должен из кода сказать ей travel("удар")


А теперь игрок отпускает кнопку раньше, чем замах завершился. И тут у меня два стула:
1. Переход на анимацию удара не произойдёт до тех пор, пока не завершится переход на замах. Потому что стейт-машина так работает, она совершает переходы последовательно и не может их просто взять и оборвать, уж тем более она не может сблендить состояние посреди перехода со следующим переходом. Или может?
2. Переход на замах можно сделать мгновенным, но сама анимация замаха должна каким-то образом блендиться с любым предыдущим состоянием. Но со стейт-машиной это в любом случае не выйдет, так как она берёт на себя все бленды на переходах.
103 714288
>>4280

> Или может?


Может.
Изучи внимательно свойства транзишенов. У них всего три режима (немедленно, синхронно, вконце) и флаг автоматического применения.

> игрок отпускает кнопку раньше, чем замах завершился


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

Такшта ты либо делаешь один вид транзишенов, который аркадно дёргает персонажа из замаха в удар, игнорируя оставшийся хвост предыдущей анимации, либо иммерсивно даёшь анимации отработать, а персонажу пропустить удар моба и пригореть.
104 714291
>>4288

>Это вопрос твоей игровой механики


У меня простая механика "дольше замахивался - сильнее ударил". Без этих ваших соулсов.

>>4288

>У них всего три режима (немедленно, синхронно, вконце)


И какой же из этих режимов должен немедленно прервать предыдущий транзишен, по-твоему? Анимацию они успешно прерывают, да.
105 714292
>>4291
Слушай, а не проще сделать это так, что
Зажимаешь, ЛКМ, идёт замах. Состояние замаха включается тут же. Анимация меееедленно идёт.
Запускается таймер, который каждые полсекунды увеличивает множитель урона на 1. Ну или на сколько там тебе надо.
Отпускаешь кнопку - хуяг-пездыг. Урон нанесён, множитель посчитан.
106 714297
>>4292

>Анимация меееедленно идёт.


А как она будет блендиться с предыдущим состоянием?

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

И да, я очень надеюсь обойтись без дополнительного кода, кроме того, который запускает анимации. Просто в анимациях будет дорожка управления параметром power, плавно изменяющая его значение от 0.0 до 1.0; а потом при подсчёте урон будет домножаться на этот параметр. Почему так: потому что анимации в годо работают точнее всех прочих процессов во времени.
107 714298
>>4297
https://dropmefiles.com/kVIhb
Фикс. А то дефис прилепился к урлу.
108 714299
>>4268
Хуан Санчес Вилья-Лобос Рамирес, к вашим услугам, сер.

В сценах будет тайлмап? Его нужно особым образом сохранять, поэтому это надо знать сразу.
109 714300
>>4299

>В сценах будет тайлмап


Ну да, основа карты тайлами сделана. Эт сильно плохо?
В теории это заменить растягиваемыми по сетке "брашами" из области коллизии и текстуры, но я ХЗ как это будет сложно.
110 714301
>>4297
А, ну, если он у тебя не вручную нарисован... Печаль тогда.
111 714302
>>4300

> Эт сильно плохо?


Нормально. Я ж говорю - просто мне заранее надо знать, есть тайлмап или нет, и сколько их? Только основа? Или есть несколько тайлмап-слоёв?
А чё так можно было.mp4210 Кб, mp4,
480x360, 0:04
112 714303
>>4302

>Или есть несколько тайлмап-слоёв?


Видеорилейтед
Ну, может, сделать фоновый слой, понятно для чего, и основной, с коллизиями
113 714309
>>4298
>>4297
Это нужно делать через advance_condition, но я не разобрался как. Потыкал твой проект, добавил кондишон, выставляю его в false / true - а нихуя не меняется. Полез в гугл, там у пацанов всё работает, и ещё просят инверсный кондишон им запилить. Но у меня щас голова занята другим проектом, такшта воть.
>>4303
Окей, буду исходить пока что из этих вводных - два слоя.
114 714376
>>4303
Отакая структура файла получается.
Перечисляем имеющиеся ассеты на локации. Указываем дополнительные параметры самой локации. В качестве ассета на пикрелейтеде тайлмап со списком всех задействованных тайлов.

Собсна, принцип тот же, что и при создании сейв-файла. И собсна, сейвы будет делать тот же код. Отличие только в том, что при девелопе игры создаётся на специальной карте-заглушке особый уличный дефолтный сейв. И старт новой игры - это по факту загрузка дефолтного сейва.
115 714378
>>4376
Бляяя... 56 строка! Я не индус, честно! Просто жизнь такая...
116 714385
>>4376
Если я потом как-то в этом деле разберусь, зовите меня Какерман.
117 714406
>>4394 (Del)
Ну, как видишь по скринам, я в большинстве случаев статически типизирую, Но бывают случаи, когда динамический тип чертовски удобен, невозможно отказаться. Например, несколько проверок, одни функции возвращают код ошибки int, а другие - bool. Заводишь один динамический error и когда надо он int, а потом bool, а потом опять int.
118 714410
>>4385
Да чё там раазбираться?
У тебя будут твои сцены-уровни. Ты будешь кидать в них ноду с моим скриптом и настраивать её из инспектора. В скрипт вообще заглядывать не будешь. Но даже если и заглянуть, там ничего экстраординарного нет, всё это можно найти в той же документации.
У тебя будет кнопка сделать зае "выгрузить сцену в файл". Этой кнопкой ты сформируешь набор уровней для будущей игры.
Сама игра будет из сцены с моим скриптом, которому ты будешь из меню подавать на вход имя уровня в качестве параметра, после чего он будет этот уровень загружать. Загрузка будет представлять из себя расстановку по уровню ассетов, начиная с мебели и заканчивая врагами и интерактивными объектами.
Ничего нетривиального - просто долго и муторно.
Самое муторное то, что каждый ассет следует создать как отдельную сцену и снабдить отдельным скриптом, который будет реализовывать две функции: 1) подготовка данных о себе для выгрузки, 2) загрузка данных о себе из поданной на вход переменной и установка своих параметров.
Повторюсь, в упрощённом виде это описано в документации, как система сохранения, но там меня не устраивает, что в файл сохранения пишутся пути нод. Это дичь. Мы с тобой будем писать только заранее утверждённые типы ассетов, которые будут в одном большом match выбираться и подтягиваться.
119 714411
>>4410

> Этой кнопкой ты сформируешь набор уровней для будущей игры.


Причем это можно делать в отдельном проекте вообще. В основном проекте будут только ассеты и локация-загрузчик, инстансы которой будут превращаться в те или иные уровни.
Если игрок сохраняется, локация-загрузчик уже выгружается тем же методом, что и в проекте-редакторе, но выгружается в файл сохранения, со всеми изменениями, которые сделал игрок.
Потом при загрузке уже уровень грузится из файла сохранения, а не из файла-эталона.
120 714415
>>4411
>>4410
Саундс вери компликейтед, но, может, разберусь со временем.
Только там какой-нибудь ридми нужен будет, с подписанными кнопками действиями - то-то чтобы сохранить, это-то чтобы загрузить етц.
121 714566
Есть инфа когда 4.0 выходит?
122 714575
>>4566
В середине 21-го, может позже (инфа из твиттера).
110211059105600.jpg84 Кб, 700x458
123 714602
Как скомпилировать файл под винду со своим значком?
124 714607
>>4602
Хотя там есть опция он все равно не компилит и описание файла годотовское
125 714653
>>4602
>>4608 (Del)
Как обсуждали в прошлом треде, изменение значка при экспорте вызывает проблемы. Например, при упаковке пака в один экзешник. А при работе с моноверсией проблемы гарантированы в принципе. Поэтому в прошлом треде пришли к выводу, что следует загрузить свою иконку прямо в файл шаблона. А заодно и описание файла своё загрузить туда же. А чтобы не пришлось переделывать шаблон под каждую игру - можно скопировать шаблон в отдельную директорию и указать её в свойствах экспорта и носить проект вместе с шаблоном в отдельной подпапочке, если ты из нескольких мест работаешь, например (как я).

Без прописанного в настройках экспорта рцэдита годот никак не воздействует на файл, при создании вложенного PAK годот просто создаёт эдакий раржпег с приписанным паком в конце.
126 714659
>>4654 (Del)
Если бы. Экспортированная игра крошится. Ишью соответствующие искать лень, но они были.
127 714742
если такая ситуация: челик планирует серьёзный дум-клон (не вульфенштейн-, а именно думоклон с покачкой оружия, 8-и сторонними спрайтами, рожей гг и пр.), у него есть хороший опыт создания игры на порте движка IDTech1 (GZDOOM, порт движка первого дума собственно), весь графон рисует сам, вопрос - куда лучше вкатываться, в годот или юнити?
128 714744
>>4742
В движкосрач. Вкатывайся в движкосрач.
129 714745
>>4742
В годоте есть https://godotengine.org/asset-library/asset/291
Вдруг это то что тебе нужно?
130 714747
>>4309

>advance_condition


Прочекал имеющиеся туториалы. Чёт я всё равно не понимаю, как с его помощью сблендить несколько анимаций. И не понимаю, чем это принципиально отличается от travel. В любом случае, когда я ставлю этот адванс, он проигрывает переход до конца и только тогда переходит дальше. В любом случае в один момент времени воспроизводится только одна позиция: один узел анимации или один переход между узлами. Выглядит так, будто, вся эта тема с адвансами была оставлена как костыль для некоторых стейт-машин.
131 714753
>>4747
Давай обратимся к словарику англо-русского. Адванс - это выполнение. Адванс кондишн - это условие выполнения. Если я всё правильно понимаю, ты сначала задаёшь тип транзакции. Ты задаёшь "немедленно". Выставляешь галочку "авто адванс". И треугольник вовсе не поднимается. Трэвел моментально трэвелит в айдл. Ой, стоп, нам это не подходит! И тут на сцену выходит адванс кондишон. Адванс транзишона должен произойти моментально. Но только если кондишен - тру. А когда у тебя кондишен тру? Правильно, когда ты отпускаешь клавишу. Ты выставляешь тру и происходит мгновенный переход, дропая анимацию поднятия на текущем кадре.

Так оно должно работать, но у меня вчера не заработало. Я нипонил, что я сделал не так, поэтому не предоставил работающего решения. Но повторюсь, чуваки в интернете вовсю используют это и даже реквестируют инверсный функционал. Мне бы прямой функционал заставить работать, чтоб нуждаться в инверсном...
132 714756
>>4753

>чуваки в интернете


Ты бы хоть ссылками на чуваков поделился. Я что нашёл по advance_condition, это вот https://www.youtube.com/watch?v=rGd-B6heyKs и вот https://www.youtube.com/watch?v=zVTlBsoozlE - в обоих случаях речь просто про способ создания стейт-машины.
133 714760
>>4756
Я говорил вот про этот пост, он первый в результатах поиска, поэтому я даже не подумал скопировать ссылку
https://godotengine.org/qa/79382/animator-advance-conditions-but-if-the-value-is-false
Тем более, это не то, что тебе нужно сейчас.

Я тут подумал ещё один момент, тебе действительно нужен какой-то блендинг, потому что даже если заставить этот кондишен работать, анимация удара-то начинается со скажем, позиции 10, образно выражаясь, которая представляет позицию полностью занесённого над головой топора, а адванс кондишон прервёт анимацию занесения на значении, скажем, 3, после чего топор мгновенно скакнёт на позицию 10 и уже оттуда начнёт ударять. Бля, геймдев, это так ложно. Я кажется видел что-то подходящее в приложении к прыжкам на разную высоту у гейм эндевора. Но щас уже не нагуглю, это ж придётся кучу видосов пересматривать.
1607865239453.png18 Кб, 316x331
134 714803
>>4415

> может, разберусь со временем


Вот такой интерфейс я пока что тебе замутил в инспекторе.
Есть вопросы?
135 714807
>>4803
Интересно.
Props - это пропы аки в гаррисе? Т.е. ящики/бочки/шипастые дилды с физикой?
136 714809
>>4807
Именно так.
137 714810
>>4809
Отлично.
Получилось бы ещё сделать инструмент "доски" а-ля Тирдаун, только в 2Д...
138 714814
>>4810

> Тирдаун


Впервые слышу.
140 714827
>>4818
Есть модуль воксельного террейна, но его надо самостоятельно вкомпилировывать в движок, потому что он на плюсах написан.
141 714828
>>4827
Да не, меня оттуда интересует только создание объекта-доски. Указываешь стартовую точку, указываешь конечную точку(в разумных пределах длины, ессно). Между ними протягивается довольно хрупкий проп-доска, имеющий физику. Что-то такое.
Хотел заебашить зону, единственной целью которой будет добраться до какого-то нужного инструмента и съебать за 60 секунд, как в том же Тирдауне.

З.Ы. А хотя... Может, заменить доски на какие-то "мосты плотного света" а-ля Портал2.
142 714832
>>4760

>у гейм эндевора


Кстати, хорошая идея, поищу у него. Наверняка парой слов где-нибудь упоминает.
143 714834
>>4828
И так можно, и эдак. Главное сразу определиться, а не по пути, когда половина кода будет написана.
1607925001390.png43 Кб, 619x220
144 714898
Ну раз ты сам не знаешь, чего хочешь, то вот тебе функция десериализации, которая перебирает данные, но сама ничего не делает, а отдаёт найденные описания ассетов в родительскую сцену. Ну и настройки. Всё произвольного формата. Каждая сцена вольна делать с полученными данными что угодно. Гибкость решения - просто зашкаливающая.
145 714905
>>4385

> зовите меня Какерман


Какермаааан! Ты тут?
Я вплотную подошёл к созданию базы данных ассетов. Есть пожелания по интерфейсу работы с ней? Если нет - я сделаю, как мне удобно:

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

Так норм? Есть замечания? Предложения?
146 714934
>>4832
И таки поискал. Но не нашёл. Но я уже реализовал работающий механизм через связку StateMachine <- AnimationNodeTransition <- AnimationNodeOneShot. Логика такая:
Кнопку нажали: транзишон переходит ко второму состоянию "замах". Кнопку отпустили: транзишон переходит к первому состоянию "стейт-машина", в это же время прямо перед ним срабатывает ваншот удара.
А вот со временем удара пришлось заморочиться таким вот образом:

>anim_tree.tree_root.get_node(current_direction).get_node(current_weapon).get_node("swing_transition").xfade_time = time


И это работает. Вот только код некрасивый. Но как сделать красиво, я чёт так и не понял.
147 714935
>>4934
У меня закрались подозрения, что ты не стейтмашин используешь, а анимашонтри. Покажи скриншот своей "стейтмашины".
148 714943
>>4935

>подозрения


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

>StateMachine <- AnimationNodeTransition <- AnimationNodeOneShot


?
Я с самого начала писал, что стейт-машина умеет одно состояние в один момент времени, блендинг разных состояний она не умеет. И что адванс_кондишон нужен вовсе не для этого.
149 714945
>>4943
Ну значит я был невнимателен, мда.
Переделывай на стейтмашину. Она круче и она должна быть в руте, а аним-деревья удобно ей в чайлды пихать.

Набросай примерный набор поведения своих персонажей, я тебе набросаю пример, как надо собирать машину.
150 714948
>>4905
Тута.
Ну, я, тащта, ничего не могу желать или не желать в этой области по причине полного отсутствия опыта. Так что карты тебе в руки
151 714949
>>4945

>Переделывай на стейтмашину.


Не командуй, не в армии.
1607946334903.png28 Кб, 966x633
152 714951
>>4949
Вот тебе набросок простейшей стейтмашины для персонажа, который может ходить, плавать, переходить из воды на сушу и обратно, на суше может прыгать, в том числе в воду, из воды может выпрыгивать, в том числе на сушу.
Это набросок и он не учитывает кучи ньюансов. Но как отправная точка.

> Не командуй,


Если тобой не командовать - игор я не дождусь!
1607948014120.png72 Кб, 1065x744
153 714955
>>4951
Gamedev aint easy

Кто догадается зачем переходы из крайних нижних положений между собой - получает пятёрку!
154 714956
>>4951
Теперь добавь к этому (или к этому >>4955), лазание по лестницам и то, что в большинстве (но не всех) представленных позиций персонаж умеет пользоваться разными видами оружия, каждый со своими анимациями.
Дерево удобнее, как только нужен мало-мальский блендинг.
155 714958
>>4956
Видишь, ты тоже невнимателен:
>>4945

> и она должна быть в руте, а аним-деревья удобно ей в чайлды пихать

156 714959
>>4956
То есть, например, вся нода walk это на самом деле бленд-дерево, да ещё и из блендспейсов. И работает оно только, когда перс на суше и может махать мечом-топором. Как только родительская машина уходит в другое состояние, все внутри автоматически дропается.
Вот тебе и решение падающего треугольника.
157 714961
>>4959
Неудобно же. Придётся в каждом мини-дереве городить целый огород из дополнительных состояний.
Чел, я уже пробовал делать большую стейт-машину с деревцами внутри. Мне удобнее делать ветвящееся дерево со стейт-машинами внутри.
К тому же, при большом количестве элементов на одном уровне (в дереве или стейт-машине) Годот начинает падать. И так можно вообще сцену запороть.
158 714963
>>4961
Вот из-за всей этой дрянья я и перешёл на стейт-машины кодом. От всех этих графов только путаница и дублирующееся поведение.
Такшта, рикаминдую собрать яйца в кулак и закодить всё чисто на скриптах.
159 714964
>>4963
У меня никакой путаницы нет. Всё удобно и раскидано по иерархии. И никаких проблем с тем, чтобы добавить ещё сколько угодно состояний на соответствующем уровне иерархии.

Да, забыл добавить к предыдущему усложнению. Ведь помимо разных видов оружия есть же симметрия. Нельзя просто отразить анимированного персонажа по горизонтали, ему нужно продублировать все анимации и стейты. Если бы был пикселярт, то можно было бы. Но с анимацией "по частям" такой фокус уже не проходит.
1607961024146.png88 Кб, 161x562
160 714985
>>4964

> У меня никакой путаницы нет.


Ну не и нет. Чего бухтеть-то?

Вот смотрю я на твои посты и вспоминается мне старинная эйчаровская притча про двух джунов, которым не перезвонили. Обоим дали одинаковое тестовое задание, состоящее из двух этапов. На первом этапе перед ними поставили простую задачку, типа 2+2 сложить. Первый (назовём его Чувак) взял Main(string[] args) {} и хуйнул решение туда. Второй (назовём его Перец) нахуярил кучу бойлерплейта, фабрику классов, класс сумматора, вся жопа в мыле, сроки завалил, штрафные баллы получил, потому что Чувак уже справился. Но дальше началась вторая часть задания, самая интересная. В течение месяца им поступали дополнительные требования к первоначальной задаче. Пересекающиеся, повторяющиеся, противоречащие тем или иным предыдущим. Чувак продолжал лепить в Main по паре ифоф на каждое требование, а Перец порождал фабрикой всё новые классы, комбинируя паттерны.
И случилось так, что к концу тестового месяца оба соискателя так запутались в своём коде, что обоих пидорнули.
А мораль сей басни такова... Впрочем, мораль я забыл.
161 715058
>>4948
А ты вообще можешь в арт, например, или в музон? Вот, я, написал, скрипты. А дальше ты сможешь остальную игру сделоть?
162 715061
Годаны, напомните, в каком порядке инициализируются чайлды нод? Всегда строго по порядку или динамически? А то у меня одна из чайлд-нод обращается к другим чайлд-нодам своего парента у себя в ready и естественно получает null. Я переместил её в конец, и оно заработало, но это тупость какая-то, нельзя отдавать в продакшен (Какерманну, он всё перепутает же). Какие есть варианты удостовериться, что нода увидит своих соседей всегда?
163 715062
>>5061

>Какие есть варианты удостовериться, что нода увидит своих соседей всегда?


Перед чем получать нод вставь yield(get_tree(), "idle_frame").
164 715063
>>5062
Не подошло. У меня метод возвращает значение, а при запизихивании туда йилда, он начинает возвращать объект функшонстейт.
165 715064
>>5063
В общем-то, мне достаточно не выполнять эту функцию в ready. Хмм...
166 715071
>>5058
В арт, в принципе, могу.
Музон собирался липо поездить всё равно игорь будет бесплатным, либо выдавливать из себя в ФЛке. Пока что получается средне, но ведь будут нужны амбиенты, а не потерянные треки Целлдвеллера.
167 715076
>>5071
С музоном проще. На опенгеймарте можно много подобрать, бесплатно. Главное, что в арт можешь, теперь я спокоен. Знач, игра будет.
168 715115
>>4985
Просто ты начал давать советы, которых не просили; а о чём просили, там ничего посоветовать не смог. Это очень раздражающая модель поведения, не важно, насколько доброжелательно она преподносится. Я понимаю, что ты из лучших побуждений, а не чтобы насрать в обсуждении, как это на ру-форумах водится; но всё равно не надо так.
169 715125
>>5076
Ну это да. Не на идеальному уровне, но всё-таки близко к оригиналу
170 715132
>>5076

>С музоном проще


Я музыкант. Давно подумываю вкатиться в музыку для игр, зарабатывать этим. Но во имя портфолио могу чёнить написать. Ну, и там звуки какие насинтезировать. Главное чтобы было внятное ТЗ.
171 715133
>>5115
Ладно. Буду пытаться держать себя в руках. Но ничего не обещаю.
172 715134
>>5132

> Главное чтобы было внятное ТЗ.


Haydee знаешь? Геймплей примерно представляешь? Теперь представь, что это пиксельный платформер с загадками. Состоит из отдельных комнат. Комнаты есть простые (релакс эмбиент), с загадками (загадочный эмбиент), с врагами (тревожный эмбиент). Когда враги детектят персонажку нужен файтинговый экшон трек.
Пока так.
Но собирая треки держи в уме, что возможно, каждый из них нужно будет два раза замиксовать с атмосферными вариациями (фабрика/завод, вода/бассейн).
Ну и музон на главное меню нужен, пожалуй.
И звуки интерфейса.
image.png8 Кб, 224x345
173 715136
>>5134
Ну, звуки интерфейса я сам могу нарулить где-то, звуков у меня в избытке.
тот самый горе-какерман
174 715137
>>5134
Алсо, в Хаудее звуки распределены не по назначению комнаты, а по зонам. В красной зоне трек один, в синей другой, вне зависимости от ситуации. Вот в Х2 на финальном рывке саунд уже другой, да, но на то он и финальный рывок.
pattern.png653 Кб, 1135x901
175 715185
пачаны, гружу техктурку с интернета, а как ей фильтрацию отрубить?
в гугле чёт про настройку пресетов для всех текстурок, но переключение кнопочек там чёт не помогло
176 715189
>>5134
В словосочетании "внятное ТЗ" акцент на слове "внятное". Оно состоит из трёх частей:
1. Описание художественной идеи. При каких обстоятельствах будет звучать трек, в каком окружении, какое настроение должен передавать игроку. Возможно, какие-то ассоциирующиеся визуальные образы или палитра цветов на экране - эти вещи тоже неплохо доносят художественную идею.
2. Два-три референса. По одному невозможно понять, в каком аспекте на него ориентироваться, так как у музыканта профдеформация, я слышу музыку вовсе не так же, как ты.
3. Всякие технические детали, например, длительность трека, громкость (лучше сразу свести под нужный уровень). Для платформера имеет значение темп, его можно понять через такие цифры, как длительность прыжка, скорость перемещения персонажа по тайлам; если он будет совершать повторяющиеся действия, то важен их тайминг. Если в интерфейсе и/или в игре будут какие-то звуки, то музыке надо быть с ними в одной тональности.

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

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

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

Такие вот дела. Ничего не готово, но планы уже наполеоновские.
178 715199
>>5194
Не обращай внимания на этого толстяка. Перечитай его пост. Он разве что трек тебе самому не предлагает написать - столько манятребований выкатил. Проще на 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
179 715201
>>5199
Все мнения важны, тащта.
180 715204
>>5187 (Del)
так я гружу картиночку для текстуры из интернетов, какие вкладки ёмаё
pattern.png147 Кб, 1111x901
181 715206
>>5204
ношол ответ, мона выставить нужные настроечки текстуры через сет флажков:
https://www.reddit.com/r/godot/comments/6h048b/how_to_disable_mipmaps_and_filter_with_gdscript/
182 715207
Аноним 183 715208
>>5206
Ну зачем???
184 715224
>>5194
Гуд. Если к понедельнику что-то сделаю, значит я в деле. Если нет, значит не справился и слился.
То, что все три референса это каверы на одну и ту же композицию, это просто потому что она звучала в "Ну погоди" на стройке?

>По мере подъёма он постепенно превращается


Напомнило Celeste. Там музыка менялась по чуть-чуть по мере прохождения.

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


Делается. LowPassFilter на аудио-шину закидываешь и крутишь ему cutoff_hz, пока не будет звучать збс.


>>5199

>opengameart


Музыка с опенгеймарта, ассеты оттуда же. Код стащить со стаковерфлоу. Руководитель проекта и пиар-менеджер - робот Максим.
Или всё-таки можно сделать цельное художественное произведение, где все части будут между собой согласованы. Но для этого надо приложить усилия к координации исполнителей. Тем более художественное видение - штука комплексная, сложная и не поддающаяся формализации в своей основе. Не могу ж я у анона в голове покопаться и понять, что он там внутри себя слышит для каждого отельного уровня.
1608099024376.png168 Кб, 480x300
185 715226
>>5224

> художественное видение - штука комплексная, сложная и не поддающаяся формализации в своей основе


Формализации в виде внятного ТЗ?
Окей, окей.
186 715246
>>5224

>То, что все три референса это каверы на одну и ту же композицию, это просто потому что она звучала в "Ну погоди" на стройке?


Ах, я вижу, вы человек высокой культуры.

>Музыка с опенгеймарта, ассеты оттуда же. Код стащить со стаковерфлоу. Руководитель проекта и пиар-менеджер - робот Максим.


Ну, тащта, проект уже это напоминает. Текстуры персонаж_ки - отредаченные ассеты Старбаунда, тайлы - спыжжены из Classicube и слегка отредачены потому что Goodlyay - пидр, так ему и надо, коды движения - монстр Франкенштейна из разных туториалов, музыка на фоне теструма даже не маскируется.
187 715264
>>5224
https://www.youtube.com/watch?v=Y5_XBpjpMGU&list=OLAK5uy_m-TvPbfZv9cvM9NzxbmaheqYnYrB_3Zfw
https://www.youtube.com/watch?v=dLQzmMUcxic&list=OLAK5uy_m9p2Pg6u4GcAitpBrXznv4Cwchq1I-Yb8

Держи ещё оригинальный саундтрек обеих частей. Для сравнения и примерного понимания темпа
image.png44 Кб, 1276x608
188 715299
Блядь, аноны, я заебался.НИхуй не програмист и нихуя понять не могу. дДелаю как в ебаных видеоруках, иногда англоязычных, потму что у нас как обычно - одни долбаебы и школьники НО СУКА НИХУЯ НЕ РАБОТАЕТ.
Вот есть платформер, человечек должен подобрать патроны. КАК?
ДЕлал через ебучий сигнал у Area2D ничего не работает.
А как стрелять?
А как моба стрелять заставить?
189 715303
>>5299
Да там всё просто. Щас, погодь.
190 715304
>>5303
чот щас постоял, покурил на балконе, подумал. Щас накатаю тебе длиннопост, а толку? Получится ещё один туториал, которого ты >>5299 не поймёшь. Так что читай туториал на годотдоках. Там уже по русски. Ссылка в шапке.
191 715305
>>5304
ты пытался, спасибо и на этом. Проблема в том, что будучи совсем не программистом и совсем зеленым, такие туторы, как в шапке читать смысла не имеет.ПОтому что стопаришься буквально на мелочах о которых хоть сколько то продвинутые чуваки даже и не думают. А ты сидишь и ломаешь голову как правильно этот area2D юзать.
192 715306
>>5305
Ну да, хз, как тебе помочь. Тут надо начинать с азов. Как единички и нолики в компе превращаются в программы. Информатика, 10 класс.

И всё это изучение азов должно быть помножено на неподдельный интерес, иначе не взлетит. У меня так с рисованием было. Сел, начал малевать, весь прошлый год малевал. Но интереса вообще никакого. Соответственно и выхлопа - ноль.
193 715307
>>5306
ну так я в школе как то паскаль учил, норм было. Ща за питон сел и хули, ни как это мне не помогает патроны подобрать.
Вот как понять когда скрипт пишешь, для какого действия че после "func" писать например? Вот в уроках же об этом не говорят. Они просто берут и пишут "вот здесь физикс процесс вощьмем, а здесьсвою напишем"
194 715308
>>5307
Как я тебя понимаю. У самого так же.
195 715309
>>5299

> Вот есть платформер, человечек должен подобрать патроны. КАК?


Предположим, что при приближении к патронам, у человечка над головой должна появиться надпись "Е - подобрать патроны", при нажатии Е патроны должны исчезнуть с локации, а в инвентаре человечка должно начислиться столько патронов, сколько было в этом объекте.
Вот решение в лоб:
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()
195 715309
>>5299

> Вот есть платформер, человечек должен подобрать патроны. КАК?


Предположим, что при приближении к патронам, у человечка над головой должна появиться надпись "Е - подобрать патроны", при нажатии Е патроны должны исчезнуть с локации, а в инвентаре человечка должно начислиться столько патронов, сколько было в этом объекте.
Вот решение в лоб:
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()
196 715310
>>5307

> Вот как понять когда скрипт пишешь, для какого действия че после "func" писать например?


Поступательно.
Знаешь мем про "нарисовать сову"?
1. Нарисуйте два овала.
2. Нарисуйте всю остальную сову.
Так же и тут.
Паскаль ты изучал. А в питоне разницы нет вообще. Вместо begin end отступ вправо, вместо := просто =, вместо = двойное ==, вместо <> будет != и не нужны ; в конце строк. Вот и вся разница. Проблема не в синтаксисе, проблема в отсутствии неподдельного интереса, который я упомянул выше. Это не фигура речи, это реальная проблема. Ты хочешь создать игру, и твоё желание настолько велико, что оно блокирует попытки интересоваться мелочами. Кодинг оно воспринимает, как мелочь, да. Так же, как и у меня моё воспринимает как мелочь рисование арта. Типа твоё подсознание такое думает "блять, точки-хуёчки, объекты-хуекты, ГДЕ МОЯ ИГРА, БЛЕАТЬ!"
197 715312
>>5309
Решение "по лбу" не просто так названо. Оно такое же хуёвое. Оно предлагает в коде игрока заводить код на каждую группу сущностей в игре. А если мы захотим добавить новую, нам придётся лезть в код игрока. правильное решение, когда каждый объект в игре делает только самый минимум действий. Объект-патроны должен содержать унифицированный метод, например action() который сам делает необходимые действия, когда игрок нажимает Е.

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

Вот этот метод гораздо продуктивнее. Самое главное тут то, что нет прибитых гвоздями привязок одних объектов к другим. Излучается сигнал - в его аргументе есть ссылка на объект, с этим объектом выполняются нужные действия. И всё. Объект забывается навсегда при выходе из коллизии.
198 715313
>>5310

>Вот решение по лбу:


вот за это сспасибо, завтра буду разбираться, а то у меня 4 утра

>отсутствии неподдельного интереса,


вот тут ты ошибаешься, чувак. Интерес интересом, но вот у тебя, например, есть база програмиста наверное, тебе легче через эти дебри пробираться, а я гуманитарий неделю бьюсь по 4 часа в день и нихера. Те уроки что на ютубе есть - линейные, по ним сделать можно только то, что автор показывает, а понять и того меньше. Они не учат логике движка, они вообще нахер так то не нужны, их можно заменить одним сайтом, где будет кусок кода и пояснение что он делает, для кнтрц\кнтрлв.
Вот поэтому я и взялся за питон, но где ж его за неделю осилить то. Синтаксис не проблема.
199 715315
>>5313
Я конечно же искренне надеюсь, что здесь я не ошибаюсь. Неподдельный интерес к программированию у меня был 20 лет назад. И сейчас мой скилл разработан настолько, что в моей голове без труда уместится .NET5
Извини, если выразился невнятно, вот более точно:
Неподдельный интерес сегодня означает более-менее средний скилл через 20 лет.
200 715316
Ну всё, я - спать.
201 715318
>>5315
ой да прям 20 ага. Его че, это програмирование ваше, гении для гениев придумали? хз что ты под средним скиллом подразумеваешь, но даже школьники игры пишут на гдскрипте и в ус не дуют.
202 715329
Аноны, что за хуйня в годоте с освещением? Начало так артефачить с достижением определенного числа источников света.
203 715331
>>5329
Может, он в редакторе так "оптимизирует", а в проекте намана будет.
204 715334
>>5329
>>5331
Да, это оптимизация. Не помню, но в настройках же вроде можно было настроить дальность включения света. Вроде даже в самой ноде что-то было.
205 715337
>>5329
На всякий случай напомню что на один меш может светить только 8 источников света одновременно. Да и потом у тебя статика, это вообще можно запечь.
206 715338
>>5329
Свет - это проблема всех движков. Свет и тени. Чем больше источников света, тем тяжелее. И точнее говоря, это не проблема движков, а проблема вычислительная вообще. Эту проблему призван решить хвалёный аппаратный рейтрейсинг. Без него освещение сцен оптимизируется всевозможными трюками. Кто во что горазд.
207 715349
>>5313

>вот у тебя, например, есть база програмиста


Зря ты так, бро. Бьюсь об заклад, что хоть какая-то база по программированию есть меньше чем у половины анонов в треде. Я вот (не тот анон, кому ты отвечал) музыкант по образованию, но вот не ною, кодю себе потихоньку. Никогда не получал по этой теме сколько-нибудь системной инфы, это сугубо хобби.

>>5246

>Ну, тащта, проект уже это напоминает.


А, ну, может, я тогда действительно зря впрягся? Так-то я планировал за сегодня дорисовать анимации для своего персонажа, после чего сразу же приступить к музыке. Но если проекту не планируется в других аспектах придавать уникальный облик, может, и тут заморачиваться тогда тоже не надо?
208 715356
>>5349

>Зря ты так, бро.


как "так", не понял?

>не ною, кодю себе потихоньку


ну так я тоже "кодю", сижу разбираюсь. Возникла сложность с которой я не смог разобраться - написал на двач.
209 715359
Напрягает необходимость указывать self.varname чтобы задействовать геттер ДАЖЕ В ПОТОМКАХ! Жду четверочку, надеюсь пофиксят.
Пока что приходится одноразово исполнять чумовые конструкции вроде: if self.my_foo_bar: pass чтобы однократно лениво проинициализировать my_foo_bar через его геттер и в дальнейшем не городить режущий глаза self.
210 715365
>>5349
Это личное дело каждого, так что если нет желания пилить амбиенты для "паззла" из кусков других проектов за хуй собачий большое человеческое спасибо - я пойму
211 715366
>>5338
>>5337
Спасибо большое, буду ковыряться дальше
212 715367
>>5359

>Напрягает необходимость указывать self.varname чтобы задействовать геттер ДАЖЕ В ПОТОМКАХ! Жду четверочку, надеюсь пофиксят.


>Пока что приходится одноразово исполнять чумовые конструкции вроде: if self.my_foo_bar: pass чтобы однократно лениво проинициализировать my_foo_bar через его геттер и в дальнейшем не городить режущий глаза self.


Блин, ну как же хорошо, что я слезс с иглы гдскрипта. Прям аж подташивает от этого питоносинтаксиса.
213 715368
>>5356

>я гуманитарий неделю бьюсь по 4 часа в день и нихера


Вот так ты зря. Ты думал, программы делаются так: пришёл программист, легко разжал уста, и сразу запел, вдохновенный простак - пожалуйста! А кодинг по большей части состоит из "эта херня не работает, хотя я всё сделал правильно, нушонетакта!!11"

>>5359

>необходимость указывать self.varname


Шта? Это ещё зачем?

>>5365
Дело не в желании. Мне в любом случае нужно отвлечься - почти неделю выстраивал анимации. Просто а насколько оно будет уместно?
214 715370
>>5368

> Просто а насколько оно будет уместно?


Хороший амбиент почти всегда в тему же. Хоть что-то будет оригинальное в этом месте.
215 715406
>>5368

> Шта? Это ещё зачем?


Пробую варианты в стиле

> эта херня не работает, хотя я всё сделал правильно, нушонетакта!!11

216 715408
>>5385 (Del)
Рука слишком статичная. Я бы добавил ей анимацию покоя, когда не стреляет.
217 715409
>>5367

> слезс с иглы гдскрипта


Нормальный язык, чо ты? Ну, впрочем, дело вкуса. Хотя, это ещё может быть дело привычки. Меня, например, после VB5/6 подташнивало от паскаля. А потом, когда привык к паскалю, прошёл с ним от дельфи7 до ХЕ11, а потом лазарус, начало тошнить уже от VB. И всё это время тошнило от си/сиподобных. А вот уже второй год как врываюсь в шарп и теперь тошнит и от паскаля, и от VB.
218 715432
>>5408
И еще факи показывать, как в Нюк Дюкеме.
219 715444
>>5432
Как в Дарк Соулс, дед, иди-ка ты телек смотреть. Не мешай молодёжи общаться.
220 715455
>>5444
Да ну, пусть старик вспомнит молодость.
image.png892 Кб, 1588x694
221 715469
Вкатываюсь по совету анона из нуфаготреда. Из прогресса - диздок накидывать начал, по обучению блендеру - скрафтил себе лоупольного долбоеба Боба в качестве заглушки на место модельки игрока и врага, тренируюсь в анимацию, потом посмотрю повнимательнее на экспорт-импорт в годот.

Советов мудрых прошу - лучше анимировать вне годота или в нем уже? Слышал где то, что лучше анимировать уже в самом движке, хотелось бы узнать, правда ли это, и почему?
222 715472
>>5469

> скрафтил себе лоупольного долбоеба Боба


Глянь вот в шапке у нас есть вот такое:
>>2330 (OP)

> - Редактор персонажей на основе makehuman: https://github.com/Lexpartizan/Go_MakeHuman_dot

223 715474
>>5472
Смотрел уже, спасибо. Мне необходим мой авторский подход и контроль за каждой вершиной. Плюс так интереснее, блендер оказался пиздец увлекательной и удобной прогой.
224 715475
>>5469
Анимировать лучше вне. Годот пока не доразвился до полноценной работы с тридэ-анимированием (есть сторонние модули, но это всё несерьёзно). Инструментарий скудный. На практике большинство девелоперов импортируют из блендера с уже готовым сетом анимаций. Туториалов на эту тему - море.
А вот когда у тебя модель с сетом анимаций уже загнана в годот, всё остальное (блендинг, стейтмашины) всё уже имеется, на весьма комфортном уровне.
225 715476
>>5474
Тогда вот
>>5475
226 715477
>>5472
Ах да, лоуполи - осознанный выбор, забыл уточнить, я собираюсь работать в этом стиле.
В любом случае спасибо, анон.
>>5474-кун
227 715479
>>5475
Спасибо за совет, хорошо, так и буду. Загуглю гайд по созданию вебм и буду заливать сюда анимации на посмотреть.
228 715486
>>5479
Удачного времяпровождения! Дорогу осилит идущий, как говорится! Будем ждать контента.
229 715492
>>5486
Спасибо, уже дико кайфую. Давно такого не испытывал, с тех пор как весь пакет Adobe проштудировал.
230 715493

>FBX importer rewritten for Godot 3.2.4 and later

231 715520
>>5493
Нойс. Теперь можно без задней мысли пихать модели с множества моделехранилищ интернетов, а то они там все поголовно в ФБХ.
232 715599
>>5544 (Del)
Ну, мемсы мемсами, а о лицензиях забывать нельзя. Тут не поспоришь.
233 715615
Анончики, этический вопрос к вам. Есть ли смысл игру делать одному? А то ощущаю себя неким человеком-швейцарским ножом: и модели ковыряю, и материалы в субстанс дизайнере, и логику игровую на гдскрипте. Но быть универсальным не значит делать все качественно. Засыпаю с этой мыслью и как то грустненько становится. :(
Вы что-то делаете для своего ааа проекта?
234 715617
>>5615
Не ставлю перед собой "ааа" задачи. (Потому что ААА - это когда корпа вкладывает лярды в продакшон блокбастера командой в 50 челов на зарплате полный рабочий день).
235 715634
>>5615
Есть конечно, я вот тож решил один делать. Думаю вопрос о качестве ты как то странно оставил, быть универсалом это нормально, просто потребуется в разы больше времени на каждый навык и работу. Если время есть - пили в одно рыло. Хочешь быстрее - ищи команду. Некоторые вещи можешь упростить, и обыграть так чтобы это было только в плюс.

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

Но из своего опыта в других сферах - прокачка одного навыка не уменьшает прогресса в других, ты можешь качать ВСЕ до охуенного состояния, главное это время. Вот правильно распределять время - это самый сложный и охуенный навык, без которого нихуя и никогда у тебя не выйдет.
1608392452009.png25 Кб, 1023x596
236 715746
Какерман?
Я не слился, если чо.
Работаю над пикрелейтедом.
237 715764
>>5746
Как раз думал с утра, как ты там.
Выглядит сложно и интересно
238 715782
>>5746

>Модуль тестирования модуля загрузки модулей


Чёт проиграл.
239 715823
>>5782
Значит у меня есть чуйство юмора, значит есть шанс сделоть задорную игру, а не унылое говнецо.
>>5764
Пытаюсь сделать скрипты так, чтобы тебе не пришлось лезть в код. Всё должно настраиваться через инспектор в редакторе. Ну и текстовые файлы конфигов.
240 715839
>>5746
Модуль рекурсии. Достойное пополнение модулю фактов и космоса выйдет.
241 715971
Кстати, хороший вопрос. Могут ли тайлы хранить данные о том, из какого они "материала" сделаны, чтобы можно было изменять звук ходьбы по ним? По решёткам звук один, по плитке другой етц.
Ну и чтобы можно было лучше прописать систему хватания за уступ при прыжке. За трубы-то в оригинальной игре нельзя хвататься.
242 716025
>>5971
В любом объекте движка есть свойство meta и методы get_meta, set_meta. Благодаря им в любом объекте ты можешь хранить любой набор метаданных любой структуры удобной лично тебе.
244 716044
>>6039 (Del)
Разумеется. Зато ничего не мешает тебе сделать $Tilemap.set_meta( "Tile%s" % $Tilemap.get_cell(), TvoiaData)
Привыкли к буллету? 245 716094
Мавр сделал своё дело
Мавр может уходить
В официльный плагин искаропки
https://www.youtube.com/watch?v=6J43yo1RXpY
246 716121
>>6106 (Del)
Ваще не проблема. Заводи. Изначальный вопрос был (если я правильно понял), как инкапсулировать внутри тайлмапа данные о кастомных свойствах его тайлов. Это можно сделать, как предложено выше, через встроенный механизм метаданных. Можно через скрипт с массивом. Все пути открыты тебе, о юный подаван.
247 716203
Годот до сих пор пропукивает буквы отдельным дравколом?
248 716222
>>6203
А даже если и да? Тебе-то какая разница, у тебя всё равно игры тонет, потому что ты залётный движкосрачер. а раз нет игры, то и оптимизировать буквы в ней не потребуется.
249 716223
>>6219 (Del)
>>6222
Потому что я жду, пока перестанет пропукивать, чтобы делать на годоте игру про буквы.
250 716230
>>6227 (Del)
Понял. Спасибо. Пойдет только на ПК?
251 716231
>>6223

> делать на годоте игру про буквы


Зачем для игры про буквы вообще движок? Пили на чистой IDE твоего любимого языка. Плюсом будет запускаемость на любом калькуляторе.
252 716260
Тарщ композитор, ты там как, живой?
253 716264
>>6260
Он же сам выше написал, что слился. Ещё в пятницу, ЕМНИП.
254 716295
>>6264
Даже если так, хоть узнаю его состояние. Чому б и не.
изображение.png283 Кб, 762x745
255 716345
Процедурно сгенерированная сфера.
Но нахуя?
256 716347
>>6345
Ради лулзов же!
А теперь икосферу сгенерь. Икосфера выгоднее для процедурных планетарных миров!
257 716420
Есть у годотского АнимейшонПлеера одно принципиальное ограничение, которое я всё никак не могу обойти.
Речь про 2д и скелетную анимацию, есичо.
Есть две анимации: одна направо, другая налево. Допустим, это удар оружием. Кнопки "отразить по горизонтали", увы, не придумали, так что две анимации - это необходимость.
И есть дерево/стейт-машина. Вообще не важно. Важно то, что во время воспроизведения анимации игрок пытается развернуться. И что же происходит? Поскольку мы находимся в стейте "удар", то анимация переходит из правого удара в левый удар. НО (вот суть проблемы) в новом направлении анимация начинается ЗАНОВО. Таким образом, можно бесконечно разворачиваться влево-вправо, пока не доиграла анимация, она будет при каждом повороте проигрываться заново, потому что это две разные анимации.
Единственный работающий костыль, который я придумал для решения этой проблемы, это вместо нормальных переходов использовать blend2, выставленный на очень маленькое значение: тогда обе анимации начинают воспроизведение одновременно в любом случае, просто одна делает это совсем чуточку, незаметно. Но с бленд2 геморно делать плавные переходы, придётся использовать анимацию для изменения анимации, такая рекурсия мне не по нраву.
Какие ещё варианты? Адванс_кондишон тоже не подходит. Есть принципиальное ограничение движка: если анимация не воспроизводится, то положение её воспроизведения не меняется; так что, даже если адвансы из разных стейтов ведут к разным анимациям, неактивные всё равно начнут воспроизводиться с начала, как только к ним произойдёт переход. Можно просто вырубать стейт удара при развороте; но у меня есть и другие подобные ваншотные анимации, с ними так не получится по геймплейным причинам: например, перезарядка.
И да, я не помню, чтобы кто-то жаловался на подобное поведение, так как в основном Годо используют с пиксельной покадровой анимацией. Может, в треде кто-то что-то такое встречал?
258 716428
>>6424 (Del)
Ты написал это просто чтобы написать? С пиксельной покадровой анимацией всё понятно.

>Речь про скелетную анимацию, есичо.

259 716431
Уже локации грузятся. Осталось причесать сотни строк быдлокода, написать хелпридмисправку. И можно отдавать.

Обнаружил странный баг:
Сохраняю вектор в ЖСОН. Размеется, в спецификации ЖСОНа нет векторов. Годот сохраняет его, как строку вида (х,у). Потом я в другом участке кода читаю ЖСОН. И он вместо вектора даёт мне строку. Функций конвертации я не нашёл с наскока, пните в нужном направлении, если кто знает.
Но в общем, я решил действовать исключая УБ, то есть, раз в спецификации формата нет векторов, я их и не буду писать, я всё переделал и теперь пишу массив [x,y] потом двумя лишними строчками кода читаю и формирую вектор.
260 716434
>>6429 (Del)
То, что углы поворота похерятся, например? То, что весь мир нарисован с перспективой немножко под углом к камере, и два направления между собой не симметричны, например?
261 716438
>>6431

> Функций конвертации я не нашёл с наскока


Нашёл с нагугла
var2str
str2var

Теперь вопрос, стоит ли мне их заюзать, или лучше оставить вариант с массивом?
262 716440
>>6420

> в новом направлении анимация начинается ЗАНОВО


Помнишь мы с тобой обсуждали ранее? Я предложил делать вложенные стейтмашины. И предположил, что при смене стейта во внешней машине, любые анимации внутренней будут дропнуты. Но проверять мне лень. Это ж надо городить огромный тестовый проект. (Я кидал скрины с машиной-пустышкой, но чтобы на ней оттестить, нужно анимаций наделать, а лень). А у тебя уже есть проект. Запили в нём.
263 716442
>>5615
Если ты придумал дохуя интересный геймплей то делай. Сделать игру и красивую и технически совершенную скорее всего не получится потому что оба эти навыка требуют дохуя времени на прокачку и у тебя они либо олба есть на среднем уровне либо один норм а второй днище.

Так например world of goo сделали два чувака. И fez помоему один или какая-то маленькая команда.
264 716449
>>6440

>любые анимации внутренней будут дропнуты


Именно в этом и проблема. После дропа, если стейт вернётся к ним, они будут воспроизводиться с начала.
265 716452
>>6449
Здесь нужны бленды, наверное их нужно точнее настроить.
266 716456
>>6449
Тебе не нравится, что при быстром переключении начинает играть сначала некая долгая анимация?
Насколько я знаю, для решения этой проблемы, каждое состояние должно состоять (тавталогия, лол) из трёх анимаций: анимация входа, циклическая анимация середины, анимация выхода.
Вход и выход короткие, что органично смотрится при блендах. Середина при любом положении примерно одинакова и сносно выглядит при рандомном переключении из неё на анимацию выхода.
267 716458
>>6456

>циклическая анимация середины


Подходит только для циклических анимаций. Но они-то меня как раз не беспокоят. Проблема в разовых анимациях, типа атаки.
268 716459
>>6458
Я не представляю себе, как можно атаковать и в процессе атаки разворачиваться.
Навскидку даже игру не могу придумать с такой механикой.
Везде, если ты жмёшь разворот, то либо атака отменяется, либо поворот не срабатывает, пока атака не завершится.
269 716460
>>6459

> придумать


припомнить

Алсо, если реально нужна такая зверская гибкость - надо делать всё в коде, запоминать позицию, функцией seek возвращать запомненную позицию для проигрываемой анимации.
270 716463
>>6459

>Везде, если ты жмёшь разворот, то либо атака отменяется, либо поворот не срабатывает, пока атака не завершится.


Это частный случай. Вообще, на мой взгляд, разворачиваться в процессе атаки совершенно нормально, это улучшает управляемость персонажа, особенно когда нет задачи сделать хардкорную боёвку ближними орудиями.
А что скажешь про перезарядку? Понимаю, для двадэ нехарактерное действие, но всё же оно у меня есть и принимает участие в геймплее. И анимация не цикличная.
271 716464
Годаны, ща такое нарыл! ТАКОЕ!
У годота есть пачка предустановленных синглтонов: Сам движок, сервер аудио, сервер физики и т.п., полный список в доках.
Так вот, все они унаследованы от Object и у всех у них есть поле script и оно у всех пустое, null. И для всех них имеется и корректно срабатывает метод set_script!
Чуешь, какие возможности появляются?
Можно расширять возможности искаробочных синглтонов, не плодя свои. Я например, пихал в автозагрузку скрипт с глобальными константами. Теперь не буду, теперь пихану их прямо в Engine.
272 716465
>>6463

> А что скажешь про перезарядку?


Перезарядка в принципе может осуществляться на ходу. Значит вполне допустимо сделать отдельный фильтр на руки и пускать через него отдельную анимацию перезарядки.
273 716468
Короче, товарищ с разворотом в ударе, ты запили отдельную анимацию размашистого вжуха, которая запускается при нажатии на кнопку поворота персонажа. Такой отдельный усиленный удар.
274 716469
>>6468
Удвачиваю это!
275 716473
>>6464

> теперь пихану их прямо в 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)
1608728634231.jpg46 Кб, 595x420
276 716474

> 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.

277 716483
>>6465

>сделать отдельный фильтр на руки и пускать через него отдельную анимацию перезарядки


Две анимации: одна вправо, другая влево. И при развороте снова мы у разбитого корыта.
278 716484
>>6483
Вон там выше предложили. Если разворачиваешься в процессе удара - включается специальная двусторонняя анимация. Либо блокируй разворот в ударе до окончания удара.
279 716485
>>6484

>в процессе удара


Мы про перезарядку говорим
280 716486
>>6485
Значит перезарядку. Сорян, не уследил за дискассом.
281 716489
>>6486
Будь внимательнее.
GodotH4CVVTjpFM.png18 Кб, 663x238
282 716534
годот ребята я тупой помоните нарисовать пирамудку

мне нужна функция которой скажешь например 100
и она наспавнит 100 кубиков в виде пирамидки снизу верх
283 716536
>>6534
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(" ")
GodotO61ncm8pLR.png69 Кб, 880x675
284 716537
>>6536
стыдно, но работает
22380screenshots201812220007351.jpg267 Кб, 1920x1080
285 716539
286 716540
>>6539
я еще лучше вариант нашел
PoolVector2Array = ([ Vector2(1,1), Vector2(2, 2), Vector2(3,3) ])
ща перепишу всё
GodottoepzVYgr2.png88 Кб, 856x694
287 716541
>>6534
а теперь поясните мне почему это хуевый вариант
288 716542
>>6541
Примерно на 250-ом вручную прописанном кубе у тебя начнут болеть руки.
pf37l80UT5.mp4304 Кб, mp4,
400x516, 0:22
289 716544
>>6542
в моём случае больше кубов и не нужно
290 716547
>>6544
Хуясе концовка внезапная!
Ты мастер драматургии!
1608797960601.png59 Кб, 694x614
291 716559
Настроения заниматься делом нет.
Вкачусь в соревнование.
292 716591
>>6585 (Del)
Тайлмап не позволяет делать анимацию, как на видосе выше. Впрочем, решить эту проблему можно анимированным прокси-объектом. Объект становится по координатам следующего тайла, проигрывает анимацию выпадения, вместо него ставится тайл. Повторить.

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

Впрочем, велосипедный тайлмап делается за пять минут. С любыми своими фичами, какие надо. Я в прошлом году делал как-то рофла ради. Код не схоронился увы. Но там даже искаробочный тайлсет-ресурс юзался.
293 716595
>>6592 (Del)
На выходе Tiled получаются тайлмапы. Плагинами они конвертируются во внутренний Tilemap. Увы.
294 716599
>>6598 (Del)
Я не тот анон, который ручками векторы вбивал. Я, слава Хуану, уже перерос этот этап.
1608838306298.png97 Кб, 649x653
295 716647
Ностальгия по школьным временам. Уроки информатики. Часики на бэкашке. Синусы, косинусы. Матан!
Смотри, стрелочки доворачиваются по хитрой формуле, симулируя реальную механику.
296 716648
>>6647
Вместо Pi*2 можно юзать Tau.
297 716649
>>6648
Буду знать. Как-то не интересовался раньше, что для полного круга константу могли ввести.
1608840260352.png23 Кб, 984x450
298 716654
Но бэкашки не могли вот так.
Точнее, могли конечно и так, но копипасты было бы - мама не горюй.
А в 2020 году - хуяк-хуяк префаб на сцену и в продакшон!
1608844229909.png16 Кб, 963x507
299 716667
Намечается сложный и загадочный квест на взлом кодового замка в мастерской Часовщика.
GodotfYBxJeA9dE.png8 Кб, 377x388
300 716815
как загрузить в 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

делаю так получаю пикрелатед
26724283.jpg194 Кб, 1000x780
301 716817
и еще вопрос, как аудио файл превратить в спрайт в котором отобразить Waveform можно примитивно без особой детализации
302 716818
>>6815
нашел способ использовать file.get_var() store_var() но это те еще грабли, файл особо текстовым не назовёшь
1608981823894.png37 Кб, 957x511
303 716821
>>6667
Залип в крите и гимпе на 2 дня. Научился обводкой обводить фотки из интернета. Фотки стрелок.
304 716823
>>6818
Дак это и не текстовые функции, а бинарные. И файл от них получается бинарный.
305 716824
>>6815
Читай файл построчно:
https://pastebin.com/d8i9hubq
1608990602232.png94 Кб, 557x587
307 716834
>>6821
Каеф!
Смотришь на ход часов и медитируешь...
308 716836
>>6834
А потом пихаешь эти часики во вьюпорт, снимаешь с него вьюпорт текстуру и вешаешь на модельку часов в тридэ-сцене. Идеально!
309 716846
>>6824
>>6815
Небольшие правки
https://pastebin.com/NETDabx4
310 716866
>>6817
https://godotforums.org/discussion/21285/how-do-you-get-godot-internal-widgets-in-your-own-game
4ый пост в этой ссылке.
По сути нужно просто считать data и получить PoolByteArray - синусоида звукового файла.
311 716873
>>2330 (OP)
Новости движка от Пети
https://www.youtube.com/watch?v=IZc0DYXUijQ
новая физика
новые названия нод
столкновения частиц
многооконный режим редактора
поддержка многооконности в проектах
И многое другое.
Zcjd560aTm.png715 Кб, 1366x768
312 716883
>>6873
беда в том что у меня нету вулкана, а для 2D, того что есть сегодня, мне больше и не надо
313 716892
>>6873
Ну чего он плачет? Перешёл бы на С#? он в 4 раза ускоряет работу кода, по заверениям разработчиков.
314 716928
>>6892
Сишарп сам по себе крут, особенно с выходом .NET5, но Хуан почему-то упёрся в mono и не желает слезать. А за mono я уже ранее подробно обеснял, в чём там хуйня. Если вкратце, моно, это когда ты конпелируешь приложухи под вайн, когда есть возможность собирать нативные ELF бинарники. Иными словами, моно это сторонний костыль, когда дотнет не был кроссплатформой. Теперь дотнет кроссплатформа и держаться за моно нет никаких внятных причин.
Траблы с моно выражаются в том, что туда хочется присобачить нугет-пакеты (а иначе зачем вообще эту хуйню разводить? хочешь скорости - собери модуль на крестах, сука, вконпелируй в движок) а они не присобачиваются. Вылазит куча ошибок с зависимостями и шлёт нахуй.

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

Вот и получается, что шарп, особенно на моно, ни нахуй, ни впизду не нужен. Полумера. Решение для слабаков, которые не хотят стать мужиками и выучить наконец кресты.
GodotzXhWfGbzkA.png3 Кб, 379x383
315 716952
>>6846
сам проверил же? не работает
316 716959
>>6952

> сам проверил же?


Проверял. Работает.
Ты наверное файл так записал. Покажи файл в блокноте открытый. Вангую там такое же.
GodotcD3jg7ThMV.png5 Кб, 380x235
317 716963
>>6959
во общем не важно, подсветка синтаксиса кривая, комментарий не подсвечивает. как сделать чтоб код показывало так же как в редакторе?
318 716971
319 716975
>>6963

> комментарий не подсвечивает


add_color_region("#", "\n", Color.gray)
320 716976
>>6975

> > комментарий не подсвечивает


> add_color_region("#", "", Color.gray, true)


Быстрофикс
1609085564610.png132 Кб, 640x383
ВНИМАНИЕ 321 716979
ВАЖНОЕ СООБЩЕНИЕ
Для тех, кто ждёт 4-ку:
Когда 4-ка релизнется, вы начнёте ждать 5-ку.
Хватит ждать! Начните прототипить игру мечты сегодня!
322 717009
>>6979
Ну ладно.
323 717022
>>6976
благодарю
000.PNG9 Кб, 740x67
324 717039
Опять забыл про эту фичу. Не повторяйте моих ошибок, не забывайте про особенности работы с числами с плавающей запятой.
325 717056
>>7039
Это знать надо! Это классика, блять.
Задаёшь фи, предел точности, равный желаемому тебе минимуму, например 0.0001
Сравниваешь не флоаты между собой, а разность между ними по модулю и с фи. Если больше фи - значит не равны, если меньше или равно фи - значит равны.
const phi : float = 0.0001
func float_equal(f1: float, f2: float) -> bool: return true if abs(f1-f2)<=phi else false
326 717058
>>7056
Можешь ещё и вот так, чтобы не плодить константы:

> func float_equal(f1: float, f2: float, phi: float = 0.0001) -> bool: return true if abs(f1-f2)<=phi else false

327 717059
поцоны у меня баг

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

всегда пишет true
GodotoWXmMQ36e1.png9 Кб, 564x154
328 717062
>>7059
баг на баге багом погоняет...
329 717063
>>7059
Тебе нужна переменная pressed, toggle_mode просто говорит о том, что состояние кнопки можно или нельзя поменять.
330 717071
>>7063
>>7062
>>7059
разобрался спс
331 717077
>>7071
Баги в движке есть. Но когда ты с ними реально столкнёшься, ты наоборот будешь думать, что у тебя где-то в коде ошибка или в параметрах импорта. Тру стори. Как-то в прошлом году гуглил свои проблемы с девелопом своих игор и к своему ужасу натыкался на открытые ишью по загугленной проблеме. Не помню уже, о чем речь была. Но удалось обойти.
332 717132
Хайтмапы и сплатмапы от Себаса (три часа стрим! Запасайся печеньками!)
https://www.youtube.com/watch?v=XHuB6zCQZpU
333 717264
Ну что, как там редактор?
334 717278
>>7264
Новогодние хлопоты. Сам код давно готов, но тебе же нужна подробная инструкция. С инструкцией пока что не готово.
335 717316
>>2330 (OP)
Ньюфажина врывается в тред с ноги.
1) Правильно ли я понял, что в годоте можно работать на чистом c++?
2) Есть ли гайды годота на плюсах? я их не знаю - буду учить параллельно
Задача - сделать гексогональную стратегию-тактику (я нашел хороший гайд на плюсах по гексам, а годот как раз позволяет с плюсами работать). Что в целом можете посоветовать, за исключением ссылок в оп-посте, которые я сейчас прочту?
336 717320
>>7316
1) Правильно. ноесть один маааалеееенький нюанс. Вся мощь редактора тебе будет недоступна. Ты будешь кодить просто модуль просто в ИДЕ.
2) Для истинного сишника лучшим гайдом являются исходники.

> Что в целом можете посоветовать


Не лезь туда, она тебя сожрёт.

> я нашел хороший гайд на плюсах по гексам, а годот как раз позволяет с плюсами работать


Вычленяешь в гайде части, которые отвечают за отрисовку, физику, звук, сеть. Переписываешь эти части с учётом нод. Конпелируешь. Запускаешь.
337 717335
>>7278
Это да.
Ни в коем разе не тороплю.
338 717342
>>7320
вот кстате по поводу сишных внутренностей, насколько сложно взять html5 движок годота и вырезать от туда всё, оставив работы с сетью, шрифты, атрисовку картинок и может шейдеров и на основе этого микро движка пилить охуенные сайты
339 717349
>>7342
Теоретически очень просто: каждый модуль годота обёрнут в дефайн. Если просто удалить из папки ненужные модули, теоретически движок соберётся в такой "легковесной" конфигурации. Но это, повторюсь, с дивана.
340 717366
>>7350 (Del)
я просто под впечатлений от wasm в целом и мне кажется он более ближе к железу чем джаваскримпт, а godot похоже единственный кто юзает wasm

a wasm рулит, как пример raylib портированый на wasm
https://www.raylib.com/examples.html
341 717377
>>7366

> а godot похоже единственный кто юзает wasm


Сомневаюсь. Мне даже гугл не нужен, чтобы сомневаться.
342 717417
>>7377
среди легковесных html5 движков, тот же Construct от Scirra, тащит с собой целый винегрет их js файлов. Godot-у реально не помешает какого то облегченного 2D движка для веба и может мобилок
343 717523
Блять, на офф. сайте вижу биндинги для SQLite. Открываю ассетлиб в самом годоте и он их не находит.
Алсо, AudioStreamPlayer кажись багнутый в последнем релизе, т.к. даже если отключить у stream loop он все равно зацикливает, а когда в _ready stream.loop = false прописываешь - все норм.
344 717525
>>7523

> Открываю ассетлиб в самом годоте и он их не находит.


Есть такое.
Как-то смотрел туториал не помню по какойму вопросу, и автор презентовал собственный ассет в ассетлибе. И его тоже не было видно. Вангую, что это потому что автор указал точную версию, например 3.1.1., и теперь, для 3.2.3. её не видно. Качать браузером и устанавливать вручную.

> AudioStreamPlayer кажись багнутый


Главное, что ты решил проблему и можешь двигаться дальше.
345 717527
>>7523
Нашёл я твои биндинги. У них исходник удалён автором. Их и с сайта скачать нельзя.
2020-12-30 145253-Godot SQLite - Godot Asset Library - Wate[...].jpg103 Кб, 1206x398
346 717529
>>7525

> Главное, что ты решил проблему и можешь двигаться дальше.


Это да, не то чтобы жалуюсь сильно, просто пол часа наверное убил на то чтобы понять что я не так написал, а оказалось проблема не во мне.
>>7527
Да нет, вроде качается с сайта и дата релиза недавняя.
347 717531
>>7529
Ну так скачай и установи вручную.
348 717532
>>7531
>>7529
Но вообще, УМВР.
2020-12-30 150406-Godot Engine - Project Manager - © 2007-2[...].jpg27 Кб, 1012x215
349 717537
>>7531
Уже, просто гитхаба нету и issue не открыть, а выговариваться где-то надо, кек.
>>7532
Интересненько.
350 717538
>>7537

> projects | templates


Ты где ищешь ассеты-то? В менеджере проектов? Молодец, чо.
351 717539
>>7537

> issue не открыть


О да. Надо было ещё ишью открыть!
1609330365332.png29 Кб, 776x378
352 717541
2020-12-30 151311-Godot Asset Library.jpg286 Кб, 1268x991
353 717543
>>7538
Извините? Это вкладка через которую скачиваются ассеты как раз.
354 717546
>>7543
Не извиню! Неси розги! Спущай штаны!
Создаёшь пустой проект, открываешь, видишь вкладку AssetLib >>7541
355 717549
>>7546
Ох лол. Я всегда думал что AssetLib ведет в тоже самое место. Ну благодарю, буду знать на будущее.
356 717707
гододавцы! насколько сложно сделать обойку для андройда?

https://github.com/0xBFE1A8/Unity3dAndroidLiveWallpaper/tree/master/Assets/Plugins/Android

думаю с этим можно что то попытаться
357 717714
>>7707
Несложно.
Берёшь и делаешь. Как сделаешь - приноси, порадуемся за тебя.
1609447986005.png162 Кб, 365x441
Новогоднее обращение ОПа # OP 358 717868
Дорогие друзья!
Всё!
Прошлый год был весьма сложным. Но движок продолжает развиваться невзирая на сложности.
Желаю вам в наступающем году осуществить свои мечты. Преодолеть трудности. Сделать свою игру мечты. Ну а мы поможем. Подхватим.
Поднимем же бокалы под бой курантов и с новыми силами в путь - к новым свершениям.
Впереди Godot 4, с новыми, улучшенными функциями. Позади чумной ебанутый 20-тый год.
Всё, кароч, меньше слов, больше дела.
359 717897
Возможно глупые вопросы, но спрошу.
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 и радуюссь результату?
360 717899
>>7897
1. Подходит.
2. Да.
361 717905
>>7900 (Del)

>Не только. Можно не плагином, а сразу в движок свой модуль вкомпилировать.


А разве не придётся всю ide перебилживать?
362 717916
>>7905
Придётся, но только один раз. После первой сборки предкомпиленные объектные файлы сохраняются и в дальнейшем только происходит линковка.
363 717918
>>7910 (Del)
>>7916
Спасибо.
364 717928
365 717969
>>7928
Хочу тайловую карту, основанную на мозаике Пенроуза.

>>7897
Если игра пошаговая, то почему тебя беспокоит быстродействие ИИ? Пусть думает столько, сколько ему нужно. В конце концов, один раз за ход посчитать все пути это не то же самое, что считать их каждый кадр.
366 717980
>>7969

> Хочу тайловую карту, основанную на мозаике Пенроуза.


Гугл говорит, что это интересная хуйня, похожая на калейдоскоп, но я сходу не придумал применений. может ты подробнее обеснишь, зачем тебе апериодичные мозаики?
За икосферу я могу внятно обеснить, например. У неё икосаэдрическая развёртка, которая позволяет с минимальными искажениями натянуть на собственно сферу плоские карты (в том числе на полюсах). Даже на видосе видно, что весь шар состоит из четырехугольных полигонов. Но они там художественно покорёжены, идеальный же икосаэдр ровнее. Максимальные искажения находятся в 10 точках икосферы, в которых вместе сходятся 5 полигонов.
Таким образом, с точки зрения проектирования геймплея, девелопер может спроектировать плоскую карту игровых земель, развернуть её на икосаэдрическую сферу, для получения опенворлда. Стримить каждую четырёхугольную секцию общей карты при приближении игрока.
367 718011
>>7969

>Пусть думает столько, сколько ему нужно.


ИИ, обдумывающий ход 5-10 секунд, и ИИ, обдумывающий ход 2-3 минуты - разные вещи.
Есть у меня на работе решение, которое используют многие облачные провайдеры среднего размера. Так вот один из компонентов - некоторое количество скриптов, писанных на питоне, функции и действия там вполне себе линейные, но из-за объёмов это работает реально медленно. Потому что часть этих питонячьих скриптов имеет по 12-15к строк кода. И это тормознутая боль, а по факту чуть ли не стандарт для этой области. Для понимания. Просто вывод списка элементов, безсортировки и обработки, может занимать секунд 7. При том, что этих элементов может быть всего пара тысяч.
368 718028
>>8011
У тебя ещё игры нет, а ты уже ноешь про тормоза.
369 718038
>>8011
Значит массивы твой выход
370 718041
Посоны, не обоссывайте, т.к. третий день в этом вашем геймдеве, а лучше подскажите.
Есть у меня короче переменная состояния в синглтоне. Я хочу чтобы на основе значения в ней менялось управление и UI. Реализовать я думал это все через сигнал типа состояние_изменилось(прошлое, новое), чтоб ноды получали его и разбиралсь что делать. Вот только загвоздка - как элегантно динамически привязывать сигнал к определенным нодам из кода при смене сцены.
371 718047
>>8041
Глобальные сигналы в синглтоне спешат на помощь!
Объявляешь сигналы в синглтоне, подписываешь на них ноды. Отписывать не нужно, они это сами делают. Очень удобно. В любом месте игры излучаешь сигнал синглтона и куча подписанных на него нод автоматически выполняет действия.
372 718052
>>8047
Тип мне стоит просто сразу все ноды в игре из корня вообще привязать и где оно не нужно просто функцию не прописывать и оно само разберется?
373 718055
>>8052

> мне стоит просто сразу все ноды в игре из корня вообще привязать


Я не уверен, нет, пожалуй нет.

> и где оно не нужно просто функцию не прописывать и оно само разберется


ХЗ, что ты имеешь ввиду? Не понел.
374 718062
>>8055
Я имел ввиду циклом for пройтись по нодам и с помощью connect() привязать к ним сигнал, а потом где он не нужен просто функцию не прописывать.
Ну или можно засунуть ноды которые используют сигнал в отдельную группу и также пройтись, немного муторнее, но тогда он будет превязан только к тому что нужно.
375 718077
>>8062

> циклом 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 для входящего объекта, чтобы в дальнейшем не чекать вызываемые на нём методы.
376 718079
В каком проекте на движке сейчас топовый графон?
377 718080
>>8079
Мы тут не ради топового графона собрались, а ради быстрого прототипирования. Ну, за графоном чекни mw design канал на ютубе. Они девелопят типа графонистый хоррор.
378 718081
>>8077

>global.connect("bullet_hit", self, "on_bullet_hit")


АААА, все, я понял. Как-то даже в голову не пришло, что можно вызвать коннект одной ноды из другой. Большое спасибо.
379 718087
>>8086 (Del)
Гениально!
Без шуток, для меня это самая свежая идея за последнее время. Настолько очевидно, что странно, почему до этого сам не додумался.
380 718276
Никогда не лез в сетевуху кроме курсов по паскалю в пиздючестве, но щас нужно запилить сетевые компоненты для игрушки.
С какой стороны браться? Слабо представляю. Вроде нужно поднять сервер, к которому игрушка будет обращаться, и его можно так понял на чём угодно писать..
381 718280
>>8276

> С какой стороны браться?


С изучения документации по сетевым компонентам годота. Там и примеры есть и демки.
382 718317
>>8280
>>8276
Вообще говоря, от годота вообще ничего по части сервера не требуется. Сервер - это такая стэндэлон приложуха, которая просто обрабатывает приходящие соединения, пережовывает по заложенной логике пришедшие данные, опционально, работает с БД.
В бытность моего знакомства с юнити в 2015, несмотря на наличие там сетевой компоненты, оказалось проще клиента на чистом c# по примерам с msdn написать (но в рамках юнити, тогда ещё был моно без бгмерзкой ms vs), а сервер я накидал на c++ (по старой памяти, ибо до 2010 года всё клиент-серверное писал на плюсах, потому что другого сильно и не было) и запускал его на центосе (при этом клиент, написанный в юнити, естественно, работал под виндой). Сейчас с этим проще. Есть вроде как ебово быстрый, простой и с кучей библиотек go. Но я таки и не разродился начать писать на нём, потому что по научной сфере уже не нужно стало, а в сфере работы я занимаюсь скорее инженерными делами, нежели написанием кода. Да и то, баш и питоноскрипты для управления приложениями в докере - очень условное написание кода.
Простой udp-клиент на сисярпе занимает треть страницы кода, udp-сервер на cpp - пол страницы кода.

tl;dr
Сервер можешь писать на чём угодно/удобно, от годота тебе понадобится изучить только то, как поднять соединение как клиенту и обмениваться данными.
383 718326
>>8317

> от годота тебе понадобится изучить только то, как поднять соединение как клиенту и обмениваться данными


Тем не менее, годот может выступать как сервер. У него даже серверный билд под линух есть.
384 718329
>>8323 (Del)

> один из вариантов - сервер с логикой это просто игра на годоте, запущенная на сервере


> Она может не рисовать графику, но рассчитывать физику и тому подобное


Именно!
Если делать стандалон-приложуху, как предложил анон выше, придётся либо велосипедить весь движковый АПИ, либо тянуть зависимостями.
Но зачем, если есть >>8326 ?
385 718332
>>8323 (Del)
У меня там совсем простой обмен данными задуман, на уровне кинуть 2д координаты и текст, грубо говоря тайловая стратежка типа цивы. Наверняка можно обойтись без годотов и запилить простейший сервер для получения и отправки такой инфы.
718276-кун
386 718338
>>8332
Ну в принципе, да. Можно принимать и отдавать абстрактные метаданные собственного формата. Этим и хороша клиент-серверная технология. Сервер может быть вообще хоть на лиспе написан. А клиенты на годоте(пека/линукс), юнити(мобилки/консоли) и уе(пека/виндовс).
387 718339
Хм, возник вопрос по подсветке тайла.
Есть гексагональная решётка, я могу определить над каким тайлом мышка, и мне надо тайл подсветить. Как это лучше сделать? Из мыслей, только сделать прозрачный гридмап сверху, заполнить его гексагонами, а при наведении мыши на определённый - подсвечивать его, меняя характеристики material в surface для этого мешлиба.
Но тут вопрос. Я так вообще взаимодействовать с мешами на гридмапе могу? Может есть какой другой способ более православный?
388 718340
>>8338
Отдельный сервер со своим форматом хорош тем, что ты не привязан к платформе клиента, поэтому переход с движка на движок, или даже с одной мажорной версии в другую в рамках одного движка, не станет головной болью. Ну и плюс если есть ошибки на сервере, то ты точно будешь уверен, что это именно твои ошибки и не будешь грешить почём зря на тот же годот/движокнейм.
389 718342
>>8339
Православных способов тут нет. Ты можешь
1. Наложить спрайт с эффектом поверх тайла. Координаты тебе тайлмап отдаст.
2. Наложить тайлмап поверх тайлмапа.
3. Предусмотреть подсвеченные версии тайлов в тайлсете.
И ещё куча способов, которые я с наскоку не припомнил.
Всё зависит от твоих личных предпочтений. Что тебе удобнее - то и используй.
390 718347
>>8342
Спасибо.
391 718349
>>8343 (Del)
Это отдельная тема для разговора, кстати. Но в любом клиент-серверном приложении как аксиому надо принимать утрверждение "никаким данным, приходящим от клиента, доверять нельзя".

Это, кстати, одна из причин говен, случившихся с fallout 76. Насколько я помню, там скорость персонажа зависила от фпс, например, а данные считались локально у каждого клиента, а через сервер только пересылались. При этом беседка таки неиллюзорные баны выписывала налево и направо, разобравшись как следует, и наказав, кого попало, за читы, дюпы и баги. Причём порой и неумышленные.

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

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

На хабре, помнится, по тэгу геймдева за последние лет 6 немало материала было на предмет того, где можно накосячить, когда пишешь свой собственный сервер.
image.png141 Кб, 678x628
392 718351
>>8350 (Del)
А если это сплошной меш вида пикрил (хз откуда взялись круги, я их не рисовал лол - походу артефакты графического редактора)? Или выпирающие неинтерактивные объекты на низлежащем гридмапе всё равно окажут влияние?
393 718360
>>8358 (Del)

>разные уровни высоты


Пока над полностью плоским думаю. А вот камеру, наверно, наклонять-вращать буду пытаться. В луюбом случае, пищи к размышлению я получил. Спасибо.
394 718372
>>8343 (Del)
чёт начал прошаривать и такие охуенные перспективы открываются в виде дудосов и других уязвимостей
знатно покурить мануалы придётся
718276-кун
395 718410
>>8372
От дудосов ты никуда не денешься. Причём от ddos игроделы страдают очень сильно, и, самое обидное, им никто помочь не может. Работаю на удалёнке в одной зарубежной конторе, занимающейся ддос-защитой. К нам приходят держатели серверов, но защищаются на общих основаниях. Отсюда проблемы - системы могут легко сильно порезать и легитимный udp-трафик при ddos.

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

Из вариантов, что вижу лично я, это писать сервер, который логикой устоит против большого потока трафика, ставить несколько серверов по всему миру + искать хостера, где ты сможешь ставить свой сервер, и который тебя бы не начал выгонять при ddos на тебя. Вот с последним это самая жопа. Потому что народ к нам приходит, кого хостеры выгоняют даже с дедиков просто при ddos мощностью всего 20-30 Гбит-сек, не говоря уж о более мощеых атаках.

Но в реальности я бы назвал обдумывание этой проблемы преждевременной оптимизацией. У тебя ещё не написан сервер, а ты уже начинаешь обдумывать проблемы, которые будут очень нескоро и вообще могут не случиться. Я бы на этот момент забил бы и просто писал бы игру сервер. А потом уже думал бы над защитой, потому что против ddos в одиночку ты ничего не придумаешь, тебе придётся продумывать потом использование возможностей провайдеров защиты. А у них там и за пол года всё может сильно поменяться.
396 718481
Здрасте.Решил я написать на godot c++ простую программу.Эта программа работает на gdscript.Суть такова - нажимаешь на кнопку в сцене push_me.tscn,и загружается сцена fall.tscn.Сцена fall.tscn пролетает некоторый путь(400 пикселей) вниз и удаляется.После удалении сцены fall посылается сигнал end,который палится connect-ом сцены push_me,который в свое время увеличивает счетчик.Все работает на gdscript.Написал тоже самое на c++(успешно скомпилировав тестовый пример),и столкнулся с оказией.Все скомпилировал scons-ом,получил dll,создал gdnativelibrary,загрузил туда dll,создал для каждой сцены по nativescript-у.Однако только один скрипт загружает gdnativelibrary.Скрипт для другой сцены говорит,что библиотека gdnativelibrary уже загружена.Как быть?Если использовать один скрипт для двух сцен,тоже ничего не работает.Памагите.Мучаюсь уже третий день.
397 718494
>>8481
Натив либа загружается один раз, после чего на её основе загружаются инстансы класса из неё сколько угодно раз. Понимаешь меня, сишник-плюсовик???
398 718507
>>8494
Урааааа!Заработало.Нужно было загрузить нативные скрипты как новый ресурс в памяти,точно также,как и нативную либу.Но это только начало.Ничего не заработало,хотя и ошибок не было(были ошибки открытия либы,но после передергивания годота они ушли).Начал пихать Godot::print() в класс push_me,и куда бы я его не пихал,результата не получил.Проблема была в функции godot_nativescript_init(void*handle).Там был зарегистрирован класс GDExample(которую я переделал под класс падения сцены).Нужно было зарегистрировать класс push_me.После этого отладочный сообщения заработали,однако сцена упрорно не хотела появлятся.И тут я,как долбан понял,что не инициализировал переменную new_position.Там было говно,очень большое число.Ну я и присвоил 0,и все заработало.Все офигенно.Спасибо за помощь.
399 718539
>>2330 (OP)
Ищу разработчика на годоте для своей игры.
depositphotos21369665-stock-photo-african-american-little-b[...].jpg46 Кб, 1023x682
400 718756
>>8276
>>8332
>>8372
Смог установить TCP соединение между годот-игрулей и приложухой-сервом на плюсах, а как обмениваться инфой не выкупил)))
image.png21 Кб, 438x173
401 718883
>>2330 (OP)
Объясните нубу-нуфагу разницу между велосити и позишин
402 718897
>>8884 (Del)
спасибо
403 718913
Годаны, как сделать открывающиеся ящики?
404 718967
>>8913
В 2Д? В 3Д? Открывающиеся как именно, физикой или анимациями? Если анимациями, то простой animationPlayer пойдёт, а если физикой... тут мои нубские познания ебссильны.
405 718990
>>8967
В тридэ. Чтобы можно было как в хоррорах ухватить мышкой и перетаскиванием мышки открывать. Причём, если тянешь резко, он шумит!
Без названия.jfif340 Кб, 1242x1401
406 719016
Поясните, в чём плюсы движка в плане 3D, относительно того же Unity? Что-то много слышу про сабж в последнее время, но так и не понял какие могут быть причины учить именно его.
407 719017
>>9016
Перестаньте обзываться! Я маме пожалуюсь!
408 719020
>>8990
А, как у Фрикционалов. Не, я такого дзюцу пока не знаю, но могу поманяфантазировать по поводу создания объекта grab, двигающегося к центру экрана, к которому ящик липнет, плюс какие-либо рельсы, на которых ящик стоит. Если скорость >50, проиграть hurr_durr.ogg.
1610019214256.png18 Кб, 464x382
409 719055
>>9020
Лол, блять. В такие моменты создаётся впечатление, что Анонимуус Всевидящий Един, но Бес-Пределен, следит за мной, ибо только что закончил просмотр пикрелейтеда.

Пока что думаю насчет рельсов, плюс перехватывать управление осями мышки на время захвата ящика/двери/вентиля. После чего, вытягивание мышки на себя двигает объект вперёд, оттягивание от себя - назад, круговые движения - вращение.
410 719056
>>9055
А и ещё, навесить на рельсовый джойнт таймер, который после нескольких секунд неактивности активирует у джойнта мотор, который возвращает объект на начальное место.
411 719074
>>9056
А зачем тебе полтергей, задвигающий ящики обратно/захлопывающий двери? Пусть как игрок оставил, так и болтается. Всё честно.
412 719082
>>9074
И то верно.
413 719124
НЕ ДЛЯ СРАЧА
А зачем CollisionShape сделаны отдельными нодами, а не полем для соответствующих им нод?
Пока вижу только одну гипотетическую модель использования - это навешиваем на один меш кучу разных таких shape-ов, затем каждому shape-у навешимаем отдельный свой скрипт с какой-то логикой.. или в родительскую ноду засовываем скрипт, который отключает эти фигуры коллизий по отдельности каждую.. Но зачем это нужно городить в обоих этих случаях непонятно.
Может это как-то еще очевидно используется и я туплю?
414 719125
>>9124
Потому что это объект-хелпер, который при входе в дерево сцены отдаёт команду физическому движку - создать такой-то и такой-то коллижоншейп.

> НЕ ДЛЯ СРАЧА


Не верю. Предъяви нотариально заверенный скриншот установленных программ. Опенсорц-полиция!
415 719129
>>9125
Так оно же могло также работать будь оно просто атрибутом другого нода. Как например те же материалы, которые не создаются как отдельные ноды ибо не за чем, а как атрибуты других нодов.
416 719133
>>9129
Принцип KISS же, as is. Нода-хелпер изолирована, делает одно дело, но делает его хорошо. Я кстати не написал ещё важную вещь, что эта нода хранит ссылку на созданный по её команде буллетом шейп. Благодаря чему ты можешь включать и выключать шейп.
417 719135
>>9133
Ну т.е. как я и описал по сути, это нужно, когда несколько фигур вешаешь на одну ноду, чтобы влиять на них по отдельности удобно
418 719140
>>9135
Можно в скрипт физического тела добавить код, который делает аналогичное отдельной ноде0шейпу действие. Только предупреждение будет висеть не по феншую.
419 719141
>>9140
Вот эта функция, например
https://docs.godotengine.org/ru/stable/classes/class_collisionobject.html#class-collisionobject-method-shape-owner-add-shape
Если я правильно понял, тут идёт обращение к буллету напрямую, потому что АПИ пестрит непривычными для всего остального годота интами-индексами.
420 719142
Да, как-то не юзер-френдли, интуитивно не понятно
421 719145
>>9142
УМВР, то есть МВП. Сорян.
422 719215
Как здесь с оптимизацией? В 2д? Летает или как в юнити?
423 719264
>>9215
Полгода назад завезли батчинг под GLES2 рендер-"пайплайн", если ты об этом. Летает!
424 719279
>>9264
только 2д свет до сих пор не пофиксили. тормозит. Хуан признал фейл, потом в 4 исправят, а сейчас терпите
1610096796900.mp44,6 Мб, mp4,
1024x576, 0:44
425 719282
>>9279
Впервые слышу. Можно ссылочку на твит?
Когда я делал клон бомбермена джва года назад, со светом проблем не испытывал. Проблемы испытывал кокрастоке с отсутствием батчинга спрайтов огня и дыма, спавнящихся партикл-материалом. А свет (вспышка от взрыва) отрабатывал норм (по моим субъективным ощущениям).
426 719344
>>8011
OpenStack что ли ? Подобные проекты это то место, где понимаешь, что python это боль. На нём только небольшие скрипты гонять нормально.
image.png278 Кб, 457x372
427 719403
>>9344

>OpenStack


Ну на выходных же, блэд, зачем напоминаешь?
ШАПКА # OP 428 719426
Я давно хочу переделать шапку. Прежде всего хочу переделать нумерацию в стиле год.месяц.номер_треда, то есть следующий тред будет 21.01.01.
Хочу ещё убрать архивы. Если они кому-то реально нужны, архивировать их всё равно буду, и оставлять ссылку на крайний.
Что ещё вы бы хотели видеть или не видеть в шапке?
Дискасс.
429 719495
>>9494 (Del)
Хочу, чтобы в 30й год мы вошли с 30ым номером треда. Неужели я многого хочу?
430 719501
>>9426

>переделать нумерацию в стиле год.месяц.номер_треда,


Дата публикации и так заголовке поста присутствует. Смысл её дублировать?

>архивировать их всё равно буду, и оставлять ссылку на крайний


Тащемта общепринятая практика. Нет смысла хранить все ссылки на все прошлые треды.
431 719661
>>9403
Какие выходные ? Поддержка критической инфраструктуры - 24 / 7.
Сочувствую, в общем
432 719908
Дрсть.
Если ли для годота возможность работать с векторной графикой? Ищу либы или движки чтобы один проект реализовать, где будет смесь 3д и 2д (векторной) графики.
Нужен либо модуль либо хотя бы возможность встроить чистую либу для работы с векторной графикой.
Суть именно в том, что множество объектов 2д графики будут параметризируемыми. Тобишь будут условно шаблонные части рукоятки, лезвия и прочего, и с помощью определенных тегов можно будет задавать ширину, высоту, морфить объекты или применять текстуры и прочее.

Само собой объекты после параметризации будут растеризироваться (рендеринг более оптимален), но я пока не нашел в интернете чтобы годот вообще умел общаться с вектором.

Рандомпиковый римворлд не на векторной графике, но выглядит будто бы на ней.
433 719922
>>9908
Для векторной графики годот идеально подходит.
434 719924
>>9922
Разве он в неё может?
а как? Я нагуглил только 2д меши, но совершенно не то.
435 719929
>>9924
Есть, но скудноваты. Например, сглаживание не имплементировано.
На уровне кода графика векторная, однако, нарисованные фигуры внутри движка конвертируются в текстуру на спрайтовом меше. Технологическое ограничение жи есть.
Если тебя это устраивает, то создаёшь на пустом потомке CanvasItem (а это зелёные и синие ноды) функцию-колбэк _draw():
И в ней вызываешь функции векторного рисования draw_чонибудь(), например draw_line(), draw_circle()
Подробности в документации.
Пример векторной графики был прямо ИТТ: >>6647 >>6654 >>6667 >>6821 >>6834
436 719930
>>9929
Это не то.
Мне не нужно чтобы это было в код забито, а нужно чтобы можно было подгружать SVG (или что-то подобное) файлы, внутри игры их трансформировать по каким-то правилам, а потом растеризировать.
Забивать каждый спрайтик кодом это можно сойти с ума.
437 719931
>>9930
Подожди, но спрайтик это же не векторная графика, а растровая. Векторная, это линии безье, сплайны там всякие, вот это всё, контуры, динамическая заливка. На выходе получаешь масяня-стайл.
438 719932
>>9929
Вообще, есть вот такая библиотека https://blend2d.com/, и по идее ее должно быть достаточно, но я пока не знаю можно ли ее вообще подружить с годотом.

>>9931
Я ошибся, я имел ввиду ВЕКТОРИК. :^)
439 719933
>>9931
Вот мне нужно именно это, то что ты описал.

Вообще я хотел использовать годот только как готовый рендер движок. Большиснтво логики будет вынесено в одтельный ехешник, сделано на entt, и будет технически являться сервером. С клиентом серверы будут разделять только ресурсы и возможно попробую встроить daScript для AOT скриптинга
440 719934
>>9932
Мгновенный гугл в соседней вкладке говорит мне, что существующие импортеры свг искаропки растеризуют свг при импорте. Стало быть, тебе как минимум придётся писать собственный парсер свг, который динамически отрисовывает примитивы оттуда вышеописанными функциями в колбэке отрисовки: >>9929
... если конечно, кто-то уже не написал такой парсер.
441 719935
>>9932

> можно ли ее вообще подружить с годотом


Всё, что написано на одном языке можно подружить ПАТТЕРНОМ ПРОЕКТИРОВАНИЯ АДАПТЕР, а годот и вышеуказанная либа оба написаны на крестах.
Следовательно, ты можешь написать на крестах модуль-адаптер, добавляющий в годот ноду-отрисовщик бленд2д и переконпелировать.
442 719936
>>9934
Ну как сам понимаешь, писать такой парсер не очень то мне улыбалось если честно. это только на крайний случай.

>>9935
Бленд 2д какие-то хтонические ASMJitы и ГПУ дрвиен отрисовки использует, не может ли это случайно палки в колёса понапихать?
443 719937
>>9936

> Бленд 2д какие-то хтонические


Если она позволяет заниматься отрисовкой, то в принципе, зачем тебе другой отрисовщик? Судя по этому посту >>9933 ты и без движка сможешь справиться. По крайней мере в такой как ты описываешь схеме, годот как бы и лишний получается.
444 719938
>>9937
С другой стороны, ты мог бы вообще прикрутить бленд2д к годоту не как ноду в дерево, а если я правильно понял описание на сайте, вообще как драйвер отрисовки, вместо ГЛЕСов.
445 719939
>>9937
Она кажись занимается отрисовкой только в файл. Следовательно мне надо перехватить инициативу и записать всякие трансформации в, как ты сказал, ноду отрисовщик.

>>9938
Он не умеет как мне показалось такие вещи делать как непосредственный реденринг в окно. Именно с нодой будет лучше.
446 719940
>>9939
В любом случае, объем работы будет немалый. Но, если ты это сделаешь - станешь легендой опенсорца!
447 719941
>>9939
А вот этот видос видел?
https://www.youtube.com/watch?v=RTfPIK4sAd0
Есть там что полезное? Я просто с работы. Не могу видосы смотреть, коллеги палят.
изображение.png27 Кб, 132x115
448 719942
>>9940

Ну делать нечего. Моя идея мне уже какой год жжот жопу, я всё отнекивался думал ничего не сделаю (за это время накириллил на 170 страниц в надежде что наваждение уйдёт. Не ушло.). Но видимо пора.
449 719943
>>9941
Он рассказывает как работать с импортированными svg. Но там нет непосредственной работы со сплайнами и прочим. Только настройки того как это всё должно превращаться в растр.
450 719944
>>9942
Чуть попозже изучу вопрос дома. Может присоединюсь к тебе. Вдвоём-то дело явно быстрее пойдёт. Я сам давно мечтаю получить высокопроизводительную векторную замену флешу с возможностью экспорта на любой утюг.
451 719945
>>9943
В тридэ, ЧСХ, сплайны есть. Пару лет назад видел туториал, где с их помощью рисовалась динамически гоночная трасса. А вот в двадэ не завезли, либо плохо ищу и не вижу очевидное в упор.
452 719948
>>9944
Я могу временами исчезать отсюда, но можешь добавить меня если хочешь.

>>9945
Да я вообще изначально думал про SDF+SVO, у них на самом деле огромнейший потенциал, но сейчас у меня нет ресурсов это дело развивать.

aearXjKaedaxbmlmANUSgwy@mailPUNCTUMcoDynm
453 719949
>>9944
Написать имел ввиду.
ПЕРЕКАТ # OP 454 719978
Тред утонул или удален.
Это копия, сохраненная 3 июля 2022 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски