Могу рассказать немного о графике.
Вся карта делится на комнаты, комнат ровно 80, включая секретную. Специально сходил пересчитал сейчас - точную цифру до этого сам не имел, потому что в процессе сборки было непонятно, влезут ли второстепенные комнаты (как в лесу, например, крайние верхние) в память.
Каждая комната по графике строится из заднего слоя, переднего слоя и слоя воды. Есть и другие слои, про них Евгений лучше расскажет.
Слой воды - непосредственно водные участки, их может быть несколько и на разной высоте.
Передний слой - для декораций вроде перил, травы, колонн. Строится из спрайтов, имеет фиксированные размер спрайта 2*1 или 2*2. Спрайт может использовать ручную маску (быстрее, но маска ест место) или автомаску (места в два раза меньше, но на медленных машинах на экран много не поставишь, особенно если еще птички какие-нибудь летают).
Задний слой составляется из спрайтов произвольного размера. Каждый спрайт можно отразить по вертикали и горизонтали, а также перекрасить целиком в фиксированные ink/paper. Вот этот функционал позволил реально обогатить графику во многих местах, правда, ценой большего расхода памяти. Спрайты фона можно накладывать по OR.
Вся графика для слоёв лежит в одной монохромной области 16кб, 2048 пикселей по ширине и 64 пикселя по высоте. Мы её называли дамп, мегатекстура, мегаспрайт, спрайтмап.
Спрайты и переднего и заднего слоя не имеют отдельной таблицы в памяти с определением их размеров. Вместо этого, каждая комната - это и есть список спрайтов из спрайтмапа. Это опять же позволяет очень богато использовать разные комбинации и нарезать спрайты под любую комнату любого размера из любого участка спрайтмапа. То есть, комната строится не из классических спрайтов, а скорее описывает набор проекций и их координат.
Отсюда ограничения:
1. Мы не можем на лету распаковывать графику, потому что в теории любая комната может дернуть кусок графики из любого места в спрайтмапе. И, что характерно, это довольно широко использовано.
2. Мы не можем ни байта фоновой графики добавить поверх этих 16 килобайт. В них должно влезть вообще всё. В принципе, мы регулярно примерно прикидывали, сколько можно еще потратить на каждый участок игры, и всё хорошо влезло, но больше тематических локаций уже не вбить было бы потери разнообразия графики у имеющихся.
3. Чем мельче проекции-спрайты - тем больше будет весить комната. Чем крупнее куски, соответственно, тем их меньше. Из-за этого в спрайтмапе было выгодно размещать часто используемые куски рядом, но это часто очень неудобно, потому что забить надо все-все дыры.
4. В спрайтмапе также лежит шрифт игры, и из шрифта все неиспользованные символы уже выкинуты. Отсюда сложность с русификацией, потому что в русском алфавите букв больше, а места для них уже нет. Какое-то решение для этого придумаем - откажемся от редкого знака препинания, объединим похожие визуально буквы и цифры, например.
5. В спрайтмапе лежат все предметы, их 51 штука, рисовал почти все Oleg Origin. Я не знаю, сколько у него времени на них пошло, но, если бы рисовал я, у меня в среднем вышло бы по полтора часа на предмет (из практики CKD), то есть получилось бы почти две рабочих недели ТОЛЬКО на предметы. Хотя, казалось бы, ну что там рисовать, но арифметика неумолима
Аттрибуты хранятся отдельно от спрайтмапа, но тоже имеют аналогичную структуру и мапятся вместе с проекцией на экран.
Анимации хранятся в памяти отдельно от спрайтмапа.
Комнаты тоже упакованы, из-за этого есть какие-то ограничения по наложению спрайтов.
Здесь тоже очень многое улучшено по сравнению с CKD Remake. Количество текстов огромное, я не помню, сколько их было в непакованном виде, то ли 40 килобайт, то ли больше. Были, например, варианты упаковать их еще чуть-чуть мощнее, но тогда реально начинал тормозить вывод диалогов в игре, это уже становилось заметным на глаз, и выигрыш того не стоил.






Ответить с цитированием