Итак! Призываю C/C++/SDL/NCURSES разрабов которые достаточно ебанутые для того чтобы тратить своё время в выходные дни!
Дано: - Опенсурсная игра Cataclysm BN (форк Cataclysm DDA) - Желание добавить вывод тайл c превью игрока на вкладку трейтов при создании персонажа - Очень поверхностное знание об экосистеме плюсов и процессе разработки на них - ОП-долбоёб. IQ: -1. Род деятельности: SHIT-TIER вебмакака - Видео с пояснительными (нет) комментариями от вашего любимого долбоёба
Вступление: Захотел я спустя долгое время немного поиграть в кату. Накатил модов, создаю персонажа - вижу перед собой большой выбор трейтов для внешности. Но понимаю что посмотреть как они выглядят при моем тайлсете я могу только в самой игре, после старта. Загорелся желанием узнать можно ли каким-то образом отрисовать превью моего персонажа в окне выбора трейтов.
Информаци много, так что буду выкладывать видосики с тем что я нашел в сурсах игры. Свой голос заменил на RVC с Внуком Елькина, чтобы вы не терпели плебейское визжание очередняры. Попробуем разобраться как заставить отрисовать хотя бы какой-то тайл на вкладке создания персонажа. Мы я обязательно проиграем!
Сейчас я застопорился немного, так что просто выложу +- то что мне удалось найти в мп4. Выложу сюда приколюшки, а сам выйду немного в АФК и разогрею себе поесть.
>>307674669 (OP) >C/C++/SDL Ну хуй знает, ОП, не мог на Java, C# или лучше Godot что-то притащить? Твои ся++ с сдлом совсем для задротов, застрявших в прошлом веке.
Собственно что мы имеем в итоге: 1. Отрисовка окон производится посредством SDL (почему не курсес? я не видел проверки на то используем мы курсес версию либо обычную с рендерингом в момент отрисовки) 2. На экране создания персонажа текст хранится напрямую в инстансе окна 3. invalidate_framebuffer используется для обнуления переданного буфера terminal_buffer либо oversized_buffer - глобальные вектора cursesline. terminal_buffer вроде как используется для хранения информации которую нужно вывести в самой игре (тайлы и прочее), оверсайзд - для отрисовки окошек в меню. Но это не точно, потому что при отрисовке окон в меню создания персонажа я заметил что юникод символы берутся непосредственно из инстанса окна, а в буффер запихивается их значение из окошка, т.е. по сути сохраняется результат последнего рендера 4. Не понятно как происходит сама отрисовка. Допустим у нас есть глобальное окно игры. Внутри него curses окна. Есть два разных буфера отрисовки (?). Перед любой отрисовкой один из этих буферов обязательно обнуляется (инвалидейт фреймбаффер) в переданной области (ширина/высота) 5. Что характерно - после обновлением тайлов глобальная переменна need_updateу станавливается как true. Но не очень понятно что он там будет пытаться обновить когда при том же обновлении окна напрямую вызывалить методы геометрии SDL для отрисовки текста/линий/ректанглов. Хотя возможно он потом где-то в конце как раз финальный рефреш экрана сделает, хз.
В ОБЩЕМ НЕ МОГУ ПОНЯТЬ МЕХАНИКУ ОТРИСОВКИ И КАК МНЕ НА КОНКРЕТНОМ ОКНЕ ОТРИСОВАТЬ СДЛ ТЕКСТУРУ ТАЙЛА! ААА!!! пойду отойду
>>307674943 Какая-то совсем лоулевел хуета. Буфферы блять. В нормальных играх на современных движках все такое абстрагировано, и пишешь чисто игровой код.
>>307674669 (OP) охуенная тема! в свое время начал ц++ учить потому что хотел понять, как эта игра работает. правда бросил потом и игру, и изучение, но иногда возвращаюсь. правда в dda в основном. круто, что ката еще живет
>>307676042 Ебнутый что-ли, зачем вкатываться в анальный доисторический код с буферами и чуть ли не ассемблером. Бери Godot какой-нибудь и туда вкатывайся.
А, вот зачем этот needupdate нужен. В том самом гетинпуте пользователя в мейн лупе когда мы каждый ход пользователя обрабатываем проверяется эта переменная и вызывается обновление стандартного окна. Только я подозреваю что стандарнтое окно это не окно создания персонажа. Правда он в цикл как будто ебучий попадает, там же апдейт тру опять ставится. Хотя возможно это так и задумано.
Достаточно интересная, затягивает. Это как пошаговый зомбоид с кучей механик: мутагены, подземные лаборатории, огромная гора крафта, свои машины можно делать и кататься на них. Куча видов зомбиков, куча модов. В БН тайлсет встроен по умолчанию, саундпак (чтобы музыка и звуки работали) качаешь отдельно, в треде есть ссылки. А вообще там есть ссылка на лаунчер, через него все накатить можно.)
Игра не особо сложная если выучить хоткеи, дальше автоматически игровой процесс идёт. Хоткеи сначала неочевидны, но быстро запоминаются. Обязательно в настройках включи движение по часовой стрелке чтобы зажав стрелочки + шифт ты мог по диагонали двигаться, а то на нумпаде вообще не удобно как мне кажется. Гайды по хоткеям в треде вроде где-то имеются.
>>307676046 Игра кайфовая это точно. Правда разбираться в её коде это надолго...
>>307676122 Голос заменил на RVC с Внуком Елькина бтв, мой реальный голос ещё хуже.
>>307676042 У меня игра под гиг весит с тайлсетом + саундпаком и модпаком от Кенана (куча разных модов сразу). Но когда ты будешь играть она до 5 гигов может спокойно разрастись и больше, т.к. карта мира бесконечная и на ходу генерится. Прикрепил второй видрил - настройка которую тебе нужно включить чтобы при зажатии шифт + стрелочка ты мог по диагонали ходить, вместо нумпада. >>307676385 Я не играл особо в дворфов, но напоминает на адвенчур режим дворфов, только тут всё вокруг адвенчура сделано. Ну и как по мне хоткеи здесь удобнее чем в дворфах.
>>307676894 Это для шизиков которые очень любит ASCII и терминальчики, игра изначально с ncruses была сделана, потом внедрена поддержка тайлов и sdl по идее. Сейчас 99% играет с тайлами. Правда я сейчас не могу понять как они ncurses вместе с sdl смешали, я вот смотрю и как будто бы все обновление экрана через SDL реализовано.
>>307676339 >В вг есть тред по этой игре Че-то читнул и проиграл, такое то количество форков на говно мамонта с нулевым графоном, срущиеся разрабы, лошение в стиме, изгнания, призывы не покупать. Пиздец они там ебнутые конечно, своя атмосфера.
>>307677065 И что в этом сказочного? Хуй сосать после зарплаты в 300к легче легкого купить. Любовь тебе содержанка тоже изобразить может, не хуже бытовой шлюхи с браками и личинками.
>>307677040 Лмао, когда форкнули DDA было то ещё веселье. Разраб текущего тайлсета (сидел в треде бтв) потом перешёл в BN а потом посрался и с BN когда ему что-то не понравилось, в итоге выпилился вообще. Но его тайлсет другие люди подхватили и обновляют.
>>307677040 Да, забыл добавить что актуальных форков катаклизма считай только два - DDA который является оригинальным форком Cataclysm и BN который является форком Cataclysm DDA когда части комьюнити не зашёл подход к разработки. Остальное всё мёртвое, вроде как.
Ты же знаешь что она изображает, самого себя - то не наебешь, лол
Ты звучишь как инцел без опыта, который нихуя не понимает как работают механизмы подобных чувств в человеке. Ну один раз отсосет, будет хорошо - потом это надоест, найдет другую и все по новой. Рано или поздно просто заебет бабки тратить на то что не приносит уже никакого удовольствия.
Секс - это не просто движение в мокрой дырке, это в первую очередь различного рода эмоции, привязанность и так далее.
Это еще раз повторяю - ни за какие бабки не купишь. И самого себя так же - никак не наебешь.
Учи матчасть сына корзина
Бабки это нихуя не решение этого вопроса, а просто попытки перекрыть то чего за деньги не купишь. В долгосрочной перспективе - очень провальные
>>307677411 Еще раз повторяю - бытовая шлюха ничем не отличается от шлюхи за деньги. Только во втором случае тебе не придется вливать годами бабок в нее и личинок, заниматься разводами и дележом имущества. И выглядеть будет намного лучше, за собой следить. Все остальное твои коупинги, мол я не лошара, что себе тупую пизду на шею повесил.
>>307677435 Но нахуя? Если тот же курс по Годоту занимает те же пару недель, а потом можно игры уже почти ААА качества генерить, был бы художник. И с вменяемым разделением кода, справочками на любой чих, кучей продуманных хелперов, инструментами, и все в опенсорсе. Короч свое двигло пишут сейчас только аутисты.
>>307676385 Короче это старомодный roguelike, только с открытым миром и про зомби >>307677040 Там форка всего два, но разработка это реально пиздец, основной целью разрабы видимо сделали полный реализм всего и во всем, из-за чего со временем играть в это стало еще более неудобно, персонаж из-за одного укуса грустит и не может воду вскипятить, зато можно найти флаг аутистов и флаг Таджикистана А насчет форков - древний как говно мамонта nethack наверное рекордсмен, там их штук двадцать или тридцать. Но его коммунити в России уж точно окончательно заглохло. Охуеть, сколько еще такого теневого контента в мире, который никому неизвестен или неинтересен
>>307677609 Nethack как раз помню, в него интересно играть было, когда лет 17 было. Сейчас уже вряд ли конечно, такие игры нужно пробовать в соответствующем возрасте. Не знал, что там гора форков, я думал он вообще помер.
Окей, вот оно. Отрисовка видимо в одном месте везде происходит из SDL буффера уже. Надо будет дебагером пройтись чтобы убедиться точно будет ли оно на экране создания персонажа это вызывать или нет.
>>307677899 А вот и фантазии бабораба пошли, нихуя он не тратил, ага, знаем таких. Сам там уже на алиментах кругом сидит, судебные иски за ним гуляют, тюрьма за долги пездам светит, квартира в залоге у ашотов, но все туда же, инцелы, инцельчики, эот не просто движение в мокрой дырке, такие-то эмоции!
>>307677993 Бро без шуток, ты сумашедший - сходи пусть тебе таблетки какие - то хоть выпишут
Я вижу что ты на мир обиделся и извратил его в своем сознании, чтобы не чувствовать себя ущербом и жить дальше, но в реальности все по другому, начни лечение пока не поздно
>>307677887 Как будто бы обновление экрана производится при обработке нажатия пользователя только, странно это. Не очевидно если просто взглянуть на вызов функции.
>>307677710 >такие игры нужно пробовать в соответствующем возрасте Мне наоборот стремно, что я тогда колды не нюхал, а пялился в эти буковки. >Не знал, что там гора форков, я думал он вообще помер Он и помер по крайней мере у нас, кроме /ro и пары форумов из нулевых я никаких тематических сообществ не нашел, но за годы форков там успело накопиться, чуть ли не с начала девяностых. Но он меня не особо зацепил, отсутствие вообще каких-либо тайлсетов, кроме пары платных (у того же катаклизма около десятка самых разных, которые идут прямо с игрой) и неудобное управление смутили. Особенно после DCSS, которая хоть и максимально оказуаленная, но довольно ламповая
>>307678104 Да, handle_input() обновляет экран и замораживает работу программы пока не будет получена обратная связь от пользователя. Надо сейчас разобраться как он отрисовывает. >>307678272 Надо подготовить его, секунду.
>>307674669 (OP) > Призываю C/C++/SDL/NCURSES разрабов ну допустим на месте > Опенсурсная игра Cataclysm BN (форк Cataclysm DDA) > можно ли каким-то образом отрисовать превью моего персонажа в окне выбора трейтов что именно за форк не знаю, но в оригинальном CDDA просто собираешь данные о выборе игроком черт (ибо там это уже делается) нужных тебе по внешке, ну и выводи их куда тебе нужно и в каком виде, хоть окно с 3D рендером нейросеточкой
>>307674687 конкретно по твоему видео разбиваешься текущую вкладку черт как сделано во вкладке профессий (код прямо там смотри и копируй куски), получишь разбиение такое, что справа будет тебе еще область под какое угодно рисование, хоть тайлами, хоть как и сказал анимешных тянок через нейросеточки генерируй
>>307679943 Она по идее уже не особо в терминале если ты скачал TILES версию, запускается процессом а не консолькой же. Просто рендерит ASCII чары часто если нужный тайлсет отсутствует. А так сейчас даже карта отрисовывается тайлами если нужные тайлы имеются (кроме минимапы лол).
Чтобы прикрутить мышку правда придётся постараться наверное так как философия игры вокруг ручного ввода построена.
Так, ладно, возвращаюсь в тред. Пока что всё ещё предпринимаю попытки вывести.
>>307678704 >CDDA просто собираешь данные о выборе игроком черт (ибо там это уже делается) Там действительно это уже делается. Я нашёл конкретно место где. Но сама отрисовка там делается ебанутыми методами совершенно, либо мне IQ не хватает понять как просто.
>что справа будет тебе еще область под какое угодно рисование, хоть тайлами, хоть как и сказал анимешных тянок через нейросеточки генерируй Ну есть такое да. Я там и хочу отрисовать. Но код существующий отрисовки тайлов как будто бы завязан уже на то что ты работаешь в отдельном окне. >потому что от него открестились в пользу SDL2 ибо лучше по всем пунктам Окей, прикольно, значит везде с SDL2 по итогу работаем насколько я понимаю. Осталось понять как хотя бы что-то на экран создания персонажа вывести помимо очевидного текста. Вот сижу сейчас.
>>307680991 >уже на то что ты работаешь в отдельном окне. Имею ввиду на окне непосредственной игры, оно там другое. А если вглубь покопаться то окно как будто и не нужно вообще, из него максимум координаты высчитывают и не используют в отрисовке (оно участвует в отрисовке только когда пытаются текст тех же трейтов к примеру вывести и границы экрана линиями, как на пикриле )
Твоя задача с начала нарисовать просто прямоугольник например красным цветом в нужном месте, понять как позиционировать объекты в коне.
Далее есть https://github.com/cataclysmbnteam/Cataclysm-BN/blob/main/src/character_display.cpp который имеет методы отрсиовки различных статов персонажа это я так понимаю какраз то что тебе надо, и вроде в твоем newcharacter.cpp#L1227 ссылка на него уже есть, можешь просто попробовать эти методы подергать, хотя я так пониам что эти методы уже в каком то окне рисуют так что придется их адаптирвоать под свою задачу.
Либо отрисовать этот чарактер виндоу, отрисовать его в текстуру, а патом с свое окно
Там используется draw_entity_with_overlays для отрисовки нашего персонажа. Сама функция определяет какой тайл нужно нарисовать, определяет overlay предметы (я так понимаю это одежда, оружие и прочее), пытается отрисовать спрайт. Но не понятно правда куда он именно это отрисовывает, я пытался этот метод вызвать в newcharacter но он вообще ни на что не повлиял. В общем пройдусь по Output ещё.
>>307682571 Вообще ты можешь просто взять чарактер дисплей и еще 1 окно нарисовать с трейтами, если там конечно возможно 2 окна одновременно отображать, это был бы простой вариант, но и скорее всего сработал бы вариант взять чарактер дисплей, и передать в него текущее окно, оно отрисует трейты в текущее окно, но хз где это будет в плане позиционирования, так что вариант взять чарактер диплей и в нем сделать метод отрисовки в нужных координатах наврено тоже достаточно простой
Т.е там же методы отрисовки статов такого плана
void character_display::print_encumbrance( ui_adaptor &ui, const catacurses::window &win, const Character &ch, const int line, const item *selected_clothing ) {
Т.е ты передаешь ссылку на окно где рисовать, это будет текущее твое окно. Но рисует он по линиям я так понял
const int firstline = clamp( line - height / 2, 0, std::max( 0, static_cast<int>( bps.size() ) - height ) );
Считает ферст лайн и к нему добавляет смещение линий которое передается в метод, может этого даже и достаточно будет я хз как оно там у тебя выглядит, но если хочется что бы прямо где угодно по X, Y Отрисовать то придется сделать копии этих методов с собственным просчетом координат.
Я кстати играл в эту игру но давно не помню что там как выглядит, и как должно это окно выглядить, может быть этого дейстительно достаточно.
Ну в целом да посмотри как чарактер виндоу рисуется. draw_encumbrance_tab
Вон он там табами и линиями отрисовывает статы, и просто в своем окне точно так же отрисуй
disp_info вот этот метод смотри он фулл инфу рисует, нужно его модифицировать, оставить в нем то что надо что не надо убрать и рисовать в окне которое в него передаш.
Ну или типо того, лень качать проект смотреть что там за окно и где оно, но в общем есть же окно статов где то если это не оно просто найди его и спизди оттуда метод отрисовки статов, нарисуй свои табы и т.д
>>307683173 Я посмотрел карактер дисплей - это кажется не то. Видишь пикрил информацию о персонаже? Видимо карактер дисплей только этим и занимается - выводит базовую текстовую информацию, он не занимается рендерингом тайлов.
>>307683173 >Вон он там табами и линиями отрисовывает статы, и просто в своем окне точно так же отрисуй Я пытаюсь тайл с персонажем вывести чтобы видеть как он выглядит, табы занимаются отрисовкой текста на окне вроде как. Собственно вот он энкумбренс таб на скрине.
>>307684176 Лол, не верю что все так просто. Почему-то эти штуки мимо меня проходили потому когда я в дебагере постоянно ходил персонаж не так рисовался. Тут ещё интернал отрисовка есть. Окей, сейчас попробую draw ебануть.
>>307684176 Собственно да, опять ничего не вывелось, сработал ретурн. Здесь конечно поебаться придётся чтобы тайл какой-то поверх этого окна вывести видимо, пойду опять в дебаггере похожу что ли.
>>307684459 Там координаты я так понимаю не то значат это координаты центра этого тейла будут т.е его origin а то где он на экране определяется окном т.е это точка смещения внутри персонажа, так что рисоватся он там должен но веряотно он где то за экраном
>>307684722 А, если ты про draw_entity_with_overlays то возможно прав, ниже по стеку он вызывает draw_from_id_string и внутри делает уже приколы с переносом координат. Попробую закомментить посмотреть что выйдет.
>>307684857 Так что подразумевается под тейлмодом? У тебя не тейлмод получается включен?
Если да то нужно искать где еще есть отрисовка помимо этого места, но это кажется не логично.
Возможно эта отрисовка вызвается 2 раза для 2х разных контекстов, текстового - краты, и тейлового - минимапа. Вот попробуй закоментить эту отрисовку кричеров вообще будут ли они тогда в игре?
Получается отрисовка отрисовка не тайлами это старая отрисовка а атйлами новая. Т.е тебе нужен этот метод
cata_tiles.cpp cata_tiles::draw_critter_at
Но он рисует кричера, на его месте в мире, там нет возможности взятьи нарисовать его где угодно (ну или нет)
const player pl = dynamic_cast<const player >( &critter ); if( pl != nullptr ) { draw_entity_with_overlays( pl, p, ll, height_3d ); result = true; if( pl->is_player() ) { is_player = true; } else { sees_player = pl->sees( g-> u ); attitude = pl->attitude_to( g-> u ); } }
Вот эта часть кода овтечает за отрсиовку плеера видимо Т.е нужна ссылка на плеера const player pl = dynamic_cast<const player >( &critter ); и нарисовать его в координатах P draw_entity_with_overlays( pl, p, ll, height_3d );
Но есть ли там доступ к этому классу вообще хз, там где ты окно рисуешь
>>307685368 Так тебе СДЛ вообще низачем не нужен СДЛ это что то вроде прокси между GL лейерами разного типа и твоим кодом, тут по верх СДЛ свой рендер енджайн написан, и тебе его и нужно юзать, хотя конечно ты можешь напрямую персонажа нарисовать на экране с помощью сдл или напрямую на ГЛ леере но тебе придется тайл сет извлечь и спрайты тебе нужн именно класс cata_tiles который за отрисовку тайлов отвечает
>>307686324 Тайлы - графическое отображение в игре. Есть тайлсеты для игры чтобы она не была вся в ASCII. Соответственно мне нужно отобразить эту текстуру, чтобы я видел превью персонажа создаваемого.
>У тебя не тейлмод получается включен? Включен, кидал картинки где тайлы видны. >Если да то нужно искать где еще есть отрисовка помимо этого места, но это кажется не логично. draw_critter_at работает с отрисовкой существ в тайлах по идее.
>>307686545 Такая игра годами пишется. Она ведь коммьюнити развивалась уже десятилетие как, если считать только форк DDA.
--- ПРОИЗОШЁЛ ВНЕЗАПНЫЙ ПРОРЫВ! Совместными усилиями удалось побороть порядок вывода. Теперь мы имеет нашего персонажа поверх UI! Там даже отрисовка в риалтайме меняется, охуеть.
Дано:
- Опенсурсная игра Cataclysm BN (форк Cataclysm DDA)
- Желание добавить вывод тайл c превью игрока на вкладку трейтов при создании персонажа
- Очень поверхностное знание об экосистеме плюсов и процессе разработки на них
- ОП-долбоёб. IQ: -1. Род деятельности: SHIT-TIER вебмакака
- Видео с пояснительными (нет) комментариями от вашего любимого долбоёба
Вступление:
Захотел я спустя долгое время немного поиграть в кату. Накатил модов, создаю персонажа - вижу перед собой большой выбор трейтов для внешности. Но понимаю что посмотреть как они выглядят при моем тайлсете я могу только в самой игре, после старта. Загорелся желанием узнать можно ли каким-то образом отрисовать превью моего персонажа в окне выбора трейтов.
Информаци много, так что буду выкладывать видосики с тем что я нашел в сурсах игры. Свой голос заменил на RVC с Внуком Елькина, чтобы вы не терпели плебейское визжание очередняры. Попробуем разобраться как заставить отрисовать хотя бы какой-то тайл на вкладке создания персонажа. Мы я обязательно проиграем!