Моя песочница

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

Uranium
Сообщения: 3
Зарегистрирован: 07 дек 2012, 05:14

Re: Моя песочница

Сообщение Uranium » 09 дек 2012, 13:49

Uvadzucumi писал(а):как я понимаю 64-х битная слакварь?
Да, 64-х битная.
Кстати, по ссылке "билд под линукс" у меня скачивается архив с пустым каталогом.

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 18 дек 2012, 04:32

Uranium писал(а):Кстати, по ссылке "билд под линукс" у меня скачивается архив с пустым каталогом.
зы. как я понимаю, редактирование моего поста, предыдущего, ты не читал? просто только сейчас добрался до компа.
там по ошибке - это во время рендеринга что то с opengl контекстом происходит нехорошее. но может - просто портится память приложения при генерации уровня - если я там не все пофиксил в генераторе, что нашел. так как вылазило только под винду :(
ну и глубину цветности попробовать поменять в конфиге. на ту что у тебя. а то стоит 32 бита. но не в этом, скорее всего, ошибка. у тебя KDE?
архив только что проверил. все ок. как ты его распаковываешь?
Скрытый текст: ПОКАЗАТЬ

Код: Выделить всё

uvadzucumi@disabled:~/Downloads$ ls -al | grep MyRLG
-rw-rw-r--  1 uvadzucumi uvadzucumi      56272 Dec 18 08:07 MyRLG.2012.12.05.tar.bz2
-rw-rw-r--  1 uvadzucumi uvadzucumi     198624 Dec 18 08:25 MyRLG.2012.12.05.zip
uvadzucumi@disabled:~/Downloads$ tar -xvjf ./MyRLG.2012.12.05.tar.bz2 
MyRLG.2012.12.05/data/myfont.bmp
MyRLG.2012.12.05/data/myfont.fnt
MyRLG.2012.12.05/data/tileset.bmp
MyRLG.2012.12.05/data/ico.bmp
MyRLG.2012.12.05/MyRLG
MyRLG.2012.12.05/myrlg.conf
MyRLG.2012.12.05/data/
MyRLG.2012.12.05/
uvadzucumi@disabled:~/Downloads$ cd MyRLG.2012.12.05/
uvadzucumi@disabled:~/Downloads/MyRLG.2012.12.05$ ls -al
total 160
drwxrwxr-x  3 uvadzucumi uvadzucumi   4096 Dec  5 15:03 .
drwxr-xr-x 20 uvadzucumi uvadzucumi   4096 Dec 18 08:29 ..
drwx------  2 uvadzucumi uvadzucumi   4096 Nov 24 10:01 data
-rwxrwxr-x  1 uvadzucumi uvadzucumi 145292 Dec  5 14:59 MyRLG
-rw-------  1 uvadzucumi uvadzucumi    552 Nov 21 16:53 myrlg.conf
Меня окружали милые, добрые люди... медленно сжимая кольцо

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 26 фев 2013, 17:11

+ новая сисетма освещения, основанная на FOV источника света и вектора взгляда персонажа
+ реалтаймовый анализ необходимого тайла для стены, ну и, собственно, новые тайлы стен
скрин:
Скрытый текст: ПОКАЗАТЬ
Изображение
ссылки на исходники и демку в нулевом посте
Меня окружали милые, добрые люди... медленно сжимая кольцо

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Моя песочница

Сообщение Jolly Roger » 26 фев 2013, 19:13

Теперь я понял, что ты имел в виду по поводу стен (ПМ читал).
Хмм, ну мне кажется, что это вопрос скорее религиозный, нежели практический.

По поводу твоего скрина. Как мне кажется нужно обучить прогу правилам переноса, а лучше переносить сразу всё слово, что попадает на конец экрана.

И ещё, я так понимаю дверь - это тоже часть местности?
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 26 фев 2013, 21:00

как бы да, дверь у меня, это тип местности, точнее тип тайла. типов таких может быть сколько угодно и они не привязаны к изображению тайла. точнее привязаны относительно... т.е. для всех дверей тип ttDoor, для всех стен ttWall и т.д.
тайлы же, которые на жкран рисуются, уже в другом месте назначаются. Сделано для того, чтобы отделить данные от представления. например генератор у меня выдает только массив:

Код: Выделить всё

1, 1, 1, 1, 1, 2, 1, 1,
1, 1, 1, 1, 1, 2, 1, 1,
1, 1, 1, 1, 1, 4, 1, 1,
1, 1, 3, 3, 3, 3, 3, 1,
1, 1, 3, 3, 5, 3, 3, 1,
1, 1, 3, 3, 3, 3, 3, 1,
1, 1, 1, 1, 1, 4, 1, 1,
2, 2, 2, 2, 2, 2, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
где 1 - стена, 2 - коридор, 3 - комната, 4 - двери, 5 - костры
(генератор, кстати, ущербный, писался на коленке - чтобы было, так что на само качество лабиринта не смотреть.)
хранятся данные примерно таким же образом:

Код: Выделить всё

struct ....{
    TileTypes tile_type. // enum типа тайла, дверь, стена, окно
    СItemsList *items; // список предметов (4 байта)
    СCreaturesList *mobs; // список предметов (4 байта)
    СCreaturesList *mobs; // список предметов (4 байта)
    unsigned char layer[3]; // тайлы для 3-х слоев, номер тайла из тайлсета. сразу рисуется 0, потом 1 (если задан) и т.д.
// обзая инфа для всех ячеек карты
    bool IsViewed;   // видел ли раньше персонаж эту ячейку карты 
    unsigned char IsCanMove; // проходимость (трудность перемещения на самом деле)
    bool IsSkipLight; // проходит ли свет
// доп инфа, если есть
    void *tile_data;     // доп данные для конкретного типа тайла, если нужны (для двери, например, поломана, заклинена, заперта спец ключем, открыта, прочность ее и т.д. для стены - стены это у меня еще и руда по совместительству может быть, руда и количество этой руды)
}
на все про все - 28 байт на 32-хбитной системе. причем еще есть что резать.

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

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

также у меня есть избыточность в полях
IsCanMove и IsSkipLight - так как это можно брать все из того же tile_type, но пока оставил, так как у меня сейчас обращение идет ко ВСЕМ ячейкам для фов персонажа и источников света, для IsSkipLight, хотя необходимо только при их пересечении проверять, так что еще непаханное поле для оптимизаций :)

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

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

есть еще по инвентарю вопрос, но пока больше по освещению/видимости интересует, как с вашей точки зрения более правильно. если непонятно написал, то задавайте вопросы, исправлюсь.

ЗЫ. по поводу переноса слов. да. разумеется. просто текст изначально добавлялся - чтобы просто было (в частности интересовал вывод FPS, а от всякой служебной инфы в окне приложения, меня, если чнстно, тянет производить то, спрайты чего ты добавил недавно в игру - разноцветные :)). Перенос обязательно будет. Просто вначале хотя бы так, ну и добавлю перенос по словам. По слогам несколько геморно... у меня просто там реальный UTF8 юзается, анализ буков - еще тоот гемор. Но, как минимум по словам перенос будет.
Меня окружали милые, добрые люди... медленно сжимая кольцо

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: Моя песочница

Сообщение Cfyz » 26 фев 2013, 22:11

Uvadzucumi писал(а):хочу несколько этажей на одной карте
Весьма любопытно, как ты это видишь. Регулярно мелькают ощущения мол о как можно было бы, но каждый раз спотыкаюсь на попытке визуально представить это.
Uvadzucumi писал(а):тут просто у меня вторая мысль, но не знаю, нужно тестировать. <...> если непонятно написал, то задавайте вопросы, исправлюсь
Честно не понял. Несколько раз перечитал, но все равно не понял >_<

А вообще освещение опрятно смотрится. Разве что несколько неуютно "на стыке" освещенной и неосвещенной площади: в одну сторону — до упора и границы там резкие (либо освещено, либо нет), а в другую — плавный переход. Если приглядеться, то все верно, но контраст цепляет глаз (хотя что с этим можно поделать — не представляю).
Uvadzucumi писал(а):у меня просто там реальный UTF8 юзается, анализ буков - еще тоот гемор
Бытует подход держать строки в UTF-32 внутри программы (т. е. в памяти) и в UTF-8 — снаружи нее (файлы, сеть, etc.). Вот прямо по четыре байта на символ. Так как кромчить на строках давно уже бессмысленно, а работу с ними упрощает порядком.
Пытается раскуклиться

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: Моя песочница

Сообщение Cfyz » 26 фев 2013, 22:59

И еще немного побурчу, пока дают.
Uvadzucumi писал(а):хранятся данные примерно таким же образом: <...> на все про все - 28 байт на 32-хбитной системе. причем еще есть что резать.
На всякий случай: ты используешь #pragma pack? И еще я запутался и не понял, как ты получил 28. В приведенной структуре 32 байта (если выкинуть дубль mobs), если с паддингом, и 22, если без паддинга.

Если размер ячейки критичен (или хочется напихать побольше, но совесть не позволяет), существует идиома необязательной композиции:

Код: Выделить всё

struct ExctendedCell
{
    int AnimationSequence;
    int AnimationCounter;
    void* tile_data;
};

struct RegularCell
{
    CItemsList* items;
    CCreatureList* mobs;
    ExtendedCell* extended;
};

struct Cell
{
    TileType tile_type;
    uint8_t layer[3];
    uint8_t IsViewed;
    uint8_t IsCanMove;
    uint8_t IsSkipLight;
    RegularCell* regular;
};
Суть в том, что часто эдак под половину клеток на карте вообще никогда не будут видимы или являются тривиальными типа стен. У них никогда не будет ни предметов, ни монстров, ни продвинутой информации. Соответственно, незачем хранить пустые поля для каждой-каждой клетки.

Выносить два указателя посредством одного, разумеется, выгода небольшая, но сама идея сильно развязывает руки. Во-первых, можно просто напихать больше нужной информации. Во-вторых, можно сэкономленное место израсходовать в принципе по-другому: std::list, к примеру, занимает всего 8 байт, std[::tr1]::shared_ptr тоже 8, но удобство работы не сравнить с голыми указателями.

Цена — большая неравномерность расположения в памяти, перестает так удобно укладываться в кэш процессора.
Пытается раскуклиться

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 27 фев 2013, 00:11

Cfyz писал(а):Весьма любопытно, как ты это видишь. Регулярно мелькают ощущения мол о как можно было бы, но каждый раз спотыкаюсь на попытке визуально представить это.
разцмеется, только частные случаи при этом реализованы будут (будутли?).
представляется мне примерно вот так (помучался, чтобы в гуглимадже что то подобное найти):
Скрытый текст: ПОКАЗАТЬ
Изображение
Изображение
т.е. второй этаж в ущерб первому, но, вообще, хочу чтобы была возможность и внутрь холма входить - если там пещера, тогда верхний слой убирается и мы видем внутреннее помещение.
Cfyz писал(а):Честно не понял. Несколько раз перечитал, но все равно не понял >_<
я потому и написал, "если непонятно..." так как сам при объяснении запутался объяснять. на самом деле все просто. сейчас как работает. если ячейка карты попала в FOV, т.е. находится на LOS-е. то автоматом выставляется флаг Viewed и отображается самым темным цветом уже всегда - даже когда игрок ее не видит. так вот, я, думаю, что не стоит так делать. а выставлять viewed только если находится на LOS и, одновременно, есть в ней свет. таким образом, если игрок стоит в комнате и открывает дверь. он видит начало коридора, потом нифига не видит и только в конце коридора видит другую комнату, которая также освещена. если двигаться по коридору - открываются ячейки на которые падает свет от факела игрока. картинка примерно такая:

Код: Выделить всё

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

Cfyz писал(а): А вообще освещение опрятно смотрится. Разве что несколько неуютно "на стыке" освещенной и неосвещенной площади
... (хотя что с этим можно поделать — не представляю).
я представляю, но,подумаю - делать или нет... после того, как записались все интенсивности света и поссуировались - еще один проход по Viewport-у и сравнивать, если рядом светлая и темная клетки с разницей свечения какойто пороговой, то от светлой с затуханием добавить света к темной. типа отраженного света. но все это лишние проходы (ьез рендера правда, но все равно один лишний цикл на проход, или 2 - если x и y считать отдельно). в общем это решается... может быть и реализую.
Cfyz писал(а):Бытует подход держать строки в UTF-32 внутри программы (т. е. в памяти) и в UTF-8 — снаружи нее (файлы, сеть, etc.). Вот прямо по четыре байта на символ. Так как кромчить на строках давно уже бессмысленно, а работу с ними упрощает порядком.
как бы работа со строками - это одно, а рендер этих строк, в частности поиск глифа, например, для текста, который меняется на каждом кадре рендера - станет проблемой. у меня сейчас просто сделано, так как в используемом фонте нет больше 2-х байт то первый байт считается номером слоя глифа, второй индексом глифа, в результате у меня 4 слоя по 256 элементов для глифов. при рендере геометрии текста читается первый байт из строки, сверяется - однобайтовый символ - слой 0, если нет, то первый байт считается за номер лоя. по списку слоев определяется индекс в массиве слоев, читается второй байт и берется глиф по индексу равному второму байту. потребуся симаолы 3-байтные - добавится уще один слой. в общем как то так я рендер текста у себя организовал. причем, есть возможность построить дисплейный список с текстом, после чего рендерить его просто $utf8_string->render() без всяких поисков глифов и парсинга конструкций вида "\n", "^ff00ee", расчета переносов и т.д.
Меня окружали милые, добрые люди... медленно сжимая кольцо

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 27 фев 2013, 00:55

Cfyz писал(а):И еще немного побурчу, пока дают.
...как ты получил 28. В приведенной структуре 32 байта
я просто помню что у меня 28 байт на ячейку, а структуру эту набирал прямо на форуме, без всяких копипаст.

про инфу, которую можно не включать, я как то и не подумал. обязательно нужно сделать! :)
вообще мания все резать - со времен спектрума, но в данном случае - рельная задача порезать все (на самом деле резать мне место для хранения карт нужно а не занимаемое в оперативке, но заодно и оперативку хочется порезать).

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

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

зы. правда у меня сейчас на один только источник света отъедается 361*2 (или даже уже *3) байта (это только для FOV света, хотя этот фов и порезать тоже можно :) так как в большинстве своем не используется поле 19x19 а меньшее... правда при изменении карты - открытия двери например, придется реаллок для источников делать). а на текущей карте их 200 штук. если будет несколько слоев, то, необходимо будет и FOV в эти слои также запускать, для игрока и для света. но это все в далеком будущем....

Ладно. вопрос по инвентарю, что я хотел задать. Просто если контейнер (сундук или ячейка карты) - то все просто - список, у меня это уже было в прошлом году реализовано... (может имеет смысл пересмотреть с расширенными ячейками подумаю, но вопрос не о том). Так вот. со всеми контейнерами понятно. однако есть проблема именно с инвентарем. я у себя в результате там кучу кода нагородил всего лишь для того, чтобы предметы не теряли свою привязку к конкрентной кнопке на клавиатуре, чтобы например последовательность m+b+c если книга с заклинаниями лежит с начала игры в b и никто ее не перекладывал, всегда работало, а не слетало после подъема очередной калоши. или выбрасывания предмета стоящего перед. при этом, предметы могут быть и одеты на пресонажа, но буквы не терять, чтобы пластинчатый доспех с рисунком ящерицы, подобранный в слот y, использовался по клавише y а не какой либо другой. вроде у меня даже это работает, правда, пока, с кучей костылей.

так. а теперь вопрос: нужно ли это вообще? или забить, почистить костыли и упростить себе жизнь... потому, что с инвентарь хоть и есть, но пока до конца не реализован и еще намучаюсь.

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

Аватара пользователя
Jesus05
Сообщения: 1840
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

Re: Моя песочница

Сообщение Jesus05 » 27 фев 2013, 06:54

Uvadzucumi писал(а): ...
я потому и написал, "если непонятно..." так как сам при объяснении запутался объяснять. на самом деле все просто. сейчас как работает. если ячейка карты попала в FOV, т.е. находится на LOS-е. то автоматом выставляется флаг Viewed и отображается самым темным цветом уже всегда - даже когда игрок ее не видит. так вот, я, думаю, что не стоит так делать. а выставлять viewed только если находится на LOS и, одновременно, есть в ней свет. таким образом, если игрок стоит в комнате и открывает дверь. он видит начало коридора, потом нифига не видит и только в конце коридора видит другую комнату, которая также освещена. если двигаться по коридору - открываются ячейки на которые падает свет от факела игрока. картинка примерно такая:

Код: Выделить всё

                                       #####
#...#                           ########...#
#........                      ........@...#
#...#                           ########...#
                                       #####
в результате между тем что игрок видит вдали и перед собой - темная зона, где могут быть ответвления коридоров, но пока неосвещено светом - игрок не видит.
...
Я когда размышлял и "игрался" со светом. пришел к тому что в подобной ситуации если ты находишься в темной комнате, или в комнате с очень слабым источником света, и смотреть будешь на комнату с очень сильным источником света, ты будешь видеть только "свет в конце туннеля" и не будешь видеть комнату которая там за светом, и так-же обратная ситуация если ты будешь стоять в комнате с сильным источником света, и смотреть в коридор в конце которого очень слабый источник света ты будешь видеть только темноту (эффект когда смотришь в пещеру в ней ничего не видно, а когда заходишь в нее там света хватает что-бы различить намного больше чем виделось вначале)
думаю технически это не сложно сделать... надо делать видимым свет на основании интенсивности света в клетке в которой стоишь. если свет слишком яркий где-то то делать клетку засвеченной и не пропускать через нее FOV, если свет слишком тусклый по сравнению с тем в котором находишься то клетка становится просто не видимой.

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: Моя песочница

Сообщение Cfyz » 27 фев 2013, 18:50

Uvadzucumi писал(а):а выставлять viewed только если находится на LOS и, одновременно, есть в ней свет. таким образом, если игрок стоит в комнате и открывает дверь. он видит начало коридора, потом нифига не видит и только в конце коридора видит другую комнату, которая также освещена. <...> в результате между тем что игрок видит вдали и перед собой - темная зона, где могут быть ответвления коридоров, но пока неосвещено светом - игрок не видит.
Мне кажется это правильный вариант. По крайней мере, это более интуитивно, нежели:
Jesus05 писал(а):в подобной ситуации если ты находишься в темной комнате, или в комнате с очень слабым источником света, и смотреть будешь на комнату с очень сильным источником света, ты будешь видеть только "свет в конце туннеля" <...> думаю технически это не сложно сделать... надо делать видимым свет на основании интенсивности света в клетке в которой стоишь. если свет слишком яркий где-то то делать клетку засвеченной и не пропускать через нее FOV, если свет слишком тусклый по сравнению с тем в котором находишься то клетка становится просто не видимой.
потому что такие штуки будут работать только если пойти до конца и сделать привыкание к освещению: сначала ярко и ничего не видно, а потом постепенно норм и наоборот. Но здесь есть нюанс -- LOS, как правило ненаправленный. Т. е. персонаж смотрит как бы во все стороны разом и на границе яркой и темной областей (да и просто близко к такой границе) невозможно сказать к какой именно яркости нужно привыкать. А без привыкания область видимости станет неинтуитивной и будет вызывать недоумение. Впрочем, пока это лишь мои ощущения.
Uvadzucumi писал(а):как бы работа со строками - это одно, а рендер этих строк, в частности поиск глифа, например, для текста, который меняется на каждом кадре рендера - станет проблемой.
Запросто не станет. "Преждевременная оптимизация -- корень всех зол" и с каждым годом это все вернее и вернее. Проиллюстрирую в цифрах. Возьмем Core i3 2100 и лично мною проведенный тест. Контейнер std::unordered_map<wchar_t, whatewer*> тратит на один lookup 5.5 нс (прописью: пять с половиной наносекунд). Следом за ним ванильный std::map<wchar_t, whatever*> с 62 нс на поиск. Даже если взять полный FullHD экран среднего такого текста (~10к символов) и неаккуратный алгоритм, требующий аж два поиска в мапе на один символ, это выходит порядка 0.2-1.2 мс на кадр. Смена текстуры может запросто съесть под миллисекунду. Если "слои" глифов -- это отдельные текстуры, то у меня для тебя плохие новости.
Uvadzucumi писал(а):зы. правда у меня сейчас на один только источник света отъедается 361*2 (или даже уже *3) байта <..> а на текущей карте их 200 штук.
Во-первых, ты же не считаешь постоянно все-все невидимые никем, кроме переменных, источники света на уровне? Во-вторых, даже 361*3*200 = ~200к. Если используются по делу, то даже задумываться не стоит.
Uvadzucumi писал(а):нужно ли это вообще? или забить, почистить костыли и упростить себе жизнь... потому, что с инвентарь хоть и есть, но пока до конца не реализован и еще намучаюсь.
спрашиваю просто потому, что в куче рогаликов забивают на сохранность букв. может это только мне нужно?
Мне кажется не "забивают", а просто мысль такая в голову не приходит. Пластинчатый доспех по 'y' на протяжении всей игры? А в следующей уже не 'y'. И если новый пластинчатый подберу -- он же тоже уже не 'y' будет. Все равно придется каждый раз лезть и смотреть что там за буква. С точки зрения эргономики куда удобнее будет сделать хоткеи: или навешиваемые пользователем а-ля группы юнитов в RTS (нажал Ctrl+1 и теперь этот несчастный доспех будет на единичке) или, если слотов немного, сразу все на определенные клавиши повешены. Так что мой личный ответ -- выпиливай. Особенно если костыли. Дерево, бывает, пускает корни =)
Пытается раскуклиться

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 27 фев 2013, 19:49

Cfyz писал(а):Мне кажется это правильный вариант
Ну так в ангбанде сделано, и я также считаю что так правильно. Сделаю пока опцией в конфиге.
Cfyz писал(а):...А без привыкания область видимости станет неинтуитивной и будет вызывать недоумение. Впрочем, пока это лишь мои ощущения.
Это тоже считаю уже как минимум перебором.
Cfyz писал(а):Если "слои" глифов -- это отдельные текстуры, то у меня для тебя плохие новости.
разумеется текстура на весь шрифт одна. Причем вот такая 128x128:
Изображение
здесь все ангельские и русские буквы, цифры, знаки препинания ну и символов всяких кучка. вообще у меня 2 текстуры и одно переключение на кадр. Также, разумеется, кешируются переключения цветов, и правильно отрабатывает кеширование при смене цвета из DL.
Cfyz писал(а):Во-первых, ты же не считаешь постоянно все-все невидимые никем, кроме переменных, источники света на уровне? Во-вторых, даже 361*3*200 = ~200к. Если используются по делу, то даже задумываться не стоит.
Именно для того, чтобы не считать на каждом кадре фов для источников (тех что рядом), мне и необходимы эти массивы предрасчитанных фов. которые пересчитываются только при изменении проходимости света в ячейке. сейчас только от открытия дверей нужно менять, позже, когда начнут троли бегать, придется чаще.
Cfyz писал(а):Мне кажется не "забивают", а просто мысль такая в голову не приходит. Пластинчатый доспех по 'y' на протяжении всей игры? А в следующей уже не 'y'. И если новый пластинчатый подберу -- он же тоже уже не 'y' будет.
Нет, следующий не будет на y (если предметы не стакаются), да и этот - если кинуть и поднять должен лечь в первую свободную букву инвентаря.
Cfyz писал(а):Все равно придется каждый раз лезть и смотреть что там за буква.
Вот для этого и не перепутывать буквы, а запоминать. Поднимаешь предмет - влог написано: ты поднял книгу заклинаний в слот b. Ты жмеш r(типа читать - буду стараться минимум кнопок для разного юзать, все что можно читать - будет на r). у тебя спрашивает что читать. жмеш букву b (или * для отображения списка - если не знаешь где что лежит. а потом уже b из списка того что может быть "прочитано" ) потом жмеш c. в результате выбираешь заклинание - "Охрипший дракон". Далее указываешь цель уже. Т.е. если буквы не путать, и инвентарь перетусовывается только игроком, то на комбинация будет только такая r-b-c для охрипшего дракона. для того чтобы эту книгу выкинуть - d-b без залазки в окно инвентаря и т.д. т.е. эта буква всегда используется для предмета в данном слоте инвентаря. такой механизм работы со всеми предметами. тут только одна проблема, что букв то не так уж много...
Cfyz писал(а):...Так что мой личный ответ -- выпиливай. Особенно если костыли. Дерево, бывает, пускает корни =)
Да бывает и пускает корним, поэтому, и спрашиваю - фигачить буквы или всеже оставить (мне, во всяком случае, обычно удобно, когда буквы слотов не путаются), а то во всяких там катаклизмах - нажал в инвентаре - отображать только свитки - и вот тебе раз, теперь не автомат у тебя на букве "a" а книга "о вкусной и здоровой пище". по хорошему, думаю оставить, но вот кастыли нужно выкашивать, именно это пока останавливает от того, чтобы можно было предметы бросать на пол. пока только одевать/снимать можно. нужно собраться с силами, сесть и перепистаь без костылей, но с возможностью привязки к буквенным слотам... просто думал, все скажут - "нафиг нужно!", и я с чистой совестью на каждую станицу инвентаря - новые буквы для предметов сделаю! т.е. от "a" и до скольки там влазит предметов на страницу, на следующей опять начинаем с "a" и т.д., типа для очистки совести моей.... :)
Меня окружали милые, добрые люди... медленно сжимая кольцо

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Моя песочница

Сообщение Apromix » 28 фев 2013, 13:46

У меня запустилось. Но не в какие двери попасть не смог с первой попытки. После настроек в конфиге movement_delay: 100 все пришло в норму. Побегал. Красивая игра света и теней. Не нашел в инве факела, чтобы посмотреть, как герой держит факел и как меняется освещенность в темных корридорах. Показалось имхо несколько неудобным открывать двери клавишей "O", не лучше ли простым пинком или там чего-то особенного запланировано на будущее, но пока не реализовано :)?

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 28 фев 2013, 15:33

Apromix писал(а):У меня запустилось. Но не в какие двери попасть не смог с первой попытки. После настроек в конфиге movement_delay: 100 все пришло в норму.
Спасибо за тест. Выставлю. наверное, по умолчанию в 100.
Apromix писал(а):Побегал. Красивая игра света и теней.
Со светом думал что уже разобрался, но, оказывается, есть еще что улучшать. сейчас добавляю еще диффузный свет, чтобы были мягкие границы. Будет отключаться в конфиге, так как добавит тормозов.
Apromix писал(а):Не нашел в инве факела, чтобы посмотреть, как герой держит факел и как меняется освещенность в темных корридорах.
С факелом несколько беда. точнее не беда, но, по задумке, у игрока держаетльные слоты это:
голова, рука одна, рука вторая, ноги, тело, поверх тела, шея, палец на левой руке, палец на правой и "источник света". Т.е. если экипировать источник света, то будут освещены не "бледно" 3 клетки, как сейчас, а зависеть от яркости источника, но, на персонаже, в результате этот факел отображаться не будет. Хотя, можно конечно сделать так, чтобы факел приходилось держать в левой руке. тогда, если персонажу охота щит в левую или другое оружие (пока не решил, разрешать ли 2 меча в обоих руках), то будь любезен - факел спрячь. однако я не планирую делать игру в подземельях, во многих локациях свет от времени суток будет зависеть (и уже реализовано, переключалось на пробел, но пока поломал). подземелье сейчас, как самый простой и быстро реализуемый вариант генерации карты. но, кроме факелов, планируются и другие источники света, которые не будут руку занимать. например наколдовать можно, или амулет на шее. а может и серьга в носу :).
Apromix писал(а): Показалось имхо несколько неудобным открывать двери клавишей "O", не лучше ли простым пинком или там чего-то особенного запланировано на будущее, но пока не реализовано :)?
Да. автооткрытие дверей добавлю обязательно (через конфиг), тем паче, что всего пару строк кода.

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

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Моя песочница

Сообщение Uvadzucumi » 03 мар 2013, 21:43

добавил
- автоокрытие дверей (можно отключать в конфиге)
- отображение только подсвеченных ячеек карты
- отраженный свет
Скрытый текст: ПОКАЗАТЬ
Изображение
Изображение
нового билда нет, так как изменения минимальны, ну и всегда можете собрать сами из репозитория.
следующее на очереди:
- допилить инвентарь (всеже буду делать с ограниченным количеством предметов в инвентаре, но жестко привязанным к конкретной клавише)
- карта подземелья (пока думаю через FBO ее рендерить)
Меня окружали милые, добрые люди... медленно сжимая кольцо

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 27 гостей