Разработка модов. Глава 2
Материал из Pocket Fallout для КПК на PDA PC PPC Mobile.
Содержание |
Создание карты
Продолжение. Начало см. в Разработка модов. Глава 1 "Основные теоретические данные о локациях".
Создать карту можно двумя способами :
- Используя конвертер карт
- Используя только скриптовый механизм
В том и другом случае создается скрипт создания карты map_build.pfs. В случае использования конвертера карт, данный скрипт генерируется автоматически. В данной главе я остановлюсь именно на этом способе создания скрипта карты.
В целях нашего взаимопонимания, я бы рекомендовал Вам открыть map_build.pfs от любой карты. Например, лучше всего подойдет - \Resource\maps\examples\source_maps\arcaves. И сравнивать прочитанное с данными из файла map_build.pfs.
Все манипуляции со строительством карты производятся с помощью методов класса MapBuilder. Для строительства карты движок игры вызывает предопределенное событие MapBuild(). Которое всегда должно быть описано в скрипте map_build.pfs. Конвертер карт генерирует данное событие автоматически, при этом, конвертер, распределяет все действия по строительству карты по разным процедурам (для удобства их чтения/редактирования пользователем). Затем вызов каждой из процедур последовательно устанавливается в событие MapBuild().
Список процедур, генерируемых конвертером карт
Ниже приводится список процедур, которые генерирует конвертер карт, с их назначением:
- mInitTileImages() – Инициализация изображений поверхности земли, потолка
- mInitFloor() – Инициализация поверхности карты
- mInitRoof() – Инициализация потолка (крыши) зданий
- mInitWallImages() – Инициализация изображений стен
- mInitWalls() – Расстановка стен
- mInitBypassPoints() – Расстановка точек обхода
- mInitExitPoints() – Расстановка точек выхода с карты
- mInitObjects() – Инициализация и расстановка объектов по карте (деревья, трава, шкафы и т.п.)
- mInitUnits() – Инициализация и расстановка юнитов по карте
- mInitMisc() - Инициализация и расстановка зон выхода с карты (коричневая/зеленая сеточка)
Важное примечание
При проектировании и создании карты старайтесь использовать МИНИМУМ однотипных изображений. Это относиться к изображениям тайлов и стен (процедуры mInitTileImages() и mInitWallImages() ). Скорость загрузки карты на КПК напрямую зависит от размера каждой из этих процедур. Каждое изображение на КПК считывается, декодируется и загружается в память в среднем за 0,5 сек. Каждая строка процедуры mInitTileImages() и mInitWallImages() представляет собой команду загрузки изображения. Если количество строк в одной из этих процедур равно 20, то карта УЖЕ будет грузиться порядка 10 секунд! Учитывайте этот факт !
См.еще Оптимизация оригинальных карт
Особенности строительства
Что такое стены, потолок и поверхность карты, я думаю, объяснять не стоит. Я остановлюсь на объяснении того, что такое точка обхода и точка выхода.
- Точка обхода – это мнимый тайл (гексагон), который при передвижении, будут обходить юниты. Точки обхода нужно устанавливать вокруг тех объектов, через которые юниты не должны проходить. Например – машины, деревья, кучки камней, углы стен. Точка обхода добавляется при помощи метода AddBypassPoint().
- Точки выхода – это мнимые тайлы (гексагоны), встав на которые герой генерирует событие выхода с текущей локации. Точка выхода создается при помощи метода AddExitPoint(). Каждая точка выхода ссылается на определенный числовой идентификатор. По данному идентификатору пользователь должен определить какую локацию (или карту мира) нужно грузить при выходе с текущей карты. Если идентификатор = 0, то автоматически герой выходит на карту мира. Если же необходимо загрузить какую-нибудь иную локацию, то нужно использовать числовой идентификатор больше 0. А также в скрипте map_events.pfs необходимо создать предопределенное событие OnMapExit(exitarea_idx), которая должна вернуть строковое представление идентификатора локации, которую необходимо загрузить (см. пример ниже), в зависимости от числового идентификатора.
Пример обработчика точек выхода
function OnMapExit(exitarea_idx)
if exitarea_idx==1 then // Если числовой идентификатор точки выхода = 1
return "demo_map" //грузим карту resource\maps\demo_map
endif
Return "";
endFunction
Стены
Следует еще раcсказать об одной немаловажной вещи. Это - общие cfg-файлы для стен. Подробно формат данных этих файлов расписан в теме «Особенности построения стен». Конвертер карт (начиная с 1.8 версии), при генерации скрипта, сохраняет исходные frm-файлы в папках с именами, соответствующим папкам Pocket F.A.L.L.O.U.T. Для быстрого создания cfg-файлов для стен, необходимо использовать [утилиту].
Иногда, при отрисовки стен, можно увидеть такой визуальный глюк :
Это означает, что либо cfg-файл стен не содержит информацию о смещениях неверно отображаемой стены. Естественно, информацию об смещения нужно добавить в cfg-файл стен. Так же, вышеописанный баг проявляется, если смещения, указанные в cfg-файле стен, указаны не верно. Следует «на глаз» исправить значения смещений.
Это, пожалуй, самый нудный процесс при создании собственной локации, но правка/добавление данных cfg-файлов производится единожды.
Так же разработчики модов могут обмениваться этими cfg-файлами, тем самым облегчая себе разработку.
См. также
Класс MapBuilder
Работа с конвертером оригинальных карт
Работа с конвертированными картами
Разработка модов
Для дальнейшего ознакомления с материалом по разработке модов используйте нижеприведённую ссылку:
Разработка модов. Глава 3 "Автоматическая конвертация ресурсов"
Чтобы попасть в другие разделы материала кликните по любой из следующих ссылок:
Разработка модов. Введение
Разработка модов. Глава 1 "Основные теоретические данные о локациях"
Разработка модов. Глава 4 "Создание персонажей"