Форум портала о WarCraft Форум портала о WarCraft
порно чат

Вернуться   Форум портала о WarCraft > Вселенная WarCraft > World Editor > Статьи
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Опции просмотра
Старый 24.07.2010, 18:23   #1
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Делаем очень большую карту...

Делаем очень большую карту...



В этой статье пойдет речь о создании карты практически любого размера. Известно, что редактор WE позволяет создавать карты ограниченного размера. Мы поставим себе задачу преодолеть это ограничение.
Итак, для чего нужны main() и config()? Если не понятно для чего, дружно смотрим статью "Описание языка JASS". Если понятно, тогда дальше. Функцию config() сегодня оставим в покое, для создания очень большой карты нужна только main(), вернее одна из служебных функций, которая вызывается оттуда. Можно экспортировать скрипт и посмотреть, о чем я говорю. Идем в конец j - файла и находим строку вызова main(). Затем ищем функцию, о которой почему - то не говорят, но она играет одну из важнейших ролей в игре. Эта функция называется SetCameraBounds. Синтаксис очень простой:

call SetCameraBounds(MinX, MinY, MinX, MaxY, maxX, maxY, maxX, minY)

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

call SetCameraBounds(-9472.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), -9728.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM), 9472.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), 9216.0 - GetCameraMargin(CAMERA_MARGIN_TOP), -9472.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), 9216.0 - GetCameraMargin(CAMERA_MARGIN_TOP), 9472.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), -9728.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM))

Меняя числа на нужные, можно получить какие угодно размеры игровой зоны. Одно правило - она не должна быть больше размера самой карты!!! Но как связаны эти числа с размером карты в редакторе (64x64, например). Все очень просто - точка отсчета координат в карте начинается с ее центра. Для расчета этих величин используем формулу:

XSize = Sign * WeXSize * 64
YSize = Sign * WeYSize * 64

XSize, YSize - те числа, что надо подставлять как аргументы в SetCameraBounds.
Sign - знак, определяющий направление (соотвествует знаку, который был у старого числа).
WeSizeX, WeYSize - ширина / высота карты по меркам WorldEditor'а.
Если карта квадратная, то все числа будут равны. Вот и все. Меняем размеры в JASS, запаковываем WinMPQ пользуемся! Редактор и Варкрафт понимают! Но как сделать физический размер карты больше, чем позволяет редактор WE? Есть специальная программа, лежит на одном из форумов - позволяет делать карты любого размера и еще много чего. Но в редакторе / игре игровая зона будет максимум 128x128!
Итак, создаем большую карту в этой программе. Любители JASS могут поступать как я раньше описал, всем остальным будет легче - создатели предусмотрели изменение CameraBounds из программы - находится на той же странице, где и размер карты. Однако этот размер не учитывает отступы камеры (CAMERA_MARGIN_XXX - см. синтаксис функции)! Это надо учитывать при рассчетах. формула будет немного другой (считаем отступы одинаковыми):

XSize = Sign * (WeXSize - CField) * 64
YSize = Sign * (WeYSize - CField) * 64

Здесь все то же самое, а CField - поле камеры. В расчетах считать его равным 12 (или 8 для 64x64 - не помню точно, кому интересно, ковыряйте common.j). Единственный баг, с которым я столкнулся - при очень больших размерах редактор или сама программа вылетают. А еще программа не могла открыть файлы, сделанные в редакторе. И тестовый варкрафт 1.00 вылетел, 1.10 вроде нормально переварил Поэтому пример я ограничил в размерах до 300x300 - чем меньше размер, тем ошибок меньше. Учтите, работоспособность примера зависит от наличия свободной памяти компьютера!

P.S. Вертолет или химера со максимальной в игре скоростью (1000) от верхнего левого угла до нижнего левого долетают ровно за 1 минуту и 40 секунд. Вообще, SetCameraBounds() можно вызывать из скрипта (из триггеров не получится) и менять игровую зону динамически. Сам не пробовал, может и не выйдет - это только мое предположение.

Пример, как всегда, прилагается... Эта карта будет интересна только своим необычным размером - там больше ничего практически нет. Немного криво отступы камеры поставил - один немного больше другого, но это мелочь - главное редактор говорит playable size = 296x292 - это звучит гордо! Программу для редактирования размеров карты можно найти тут - http://forum.wc3.ru/war/showthread....&threadid=5098. Называется она "Зефир".

Автор: Caсоdemon
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума   Ответить с цитированием
Старый 12.08.2010, 14:37   #2
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Ответ: Делаем очень большую карту...

Другие статьи:

Основы JASS.
JASS - Общие понятия.
Синтаксис JASS.
JASS - Библиотечные функции. Часть 1.
JASS - Библиотечные функции. Часть 2.
JASS - Операторы.
JASS - Выражения
JASS - Комментарии.
JASS - Функции
JASS - Типы
JASS - Заключение.
Faq по созданию рельефа.
Зачем так много триггеров?
Немного об оптимизации кода.
Текстовые триггеры
Создаем простейшие карты (карты для melee)
Событие с переменным периодом.
Познаем триггеры (Triggers)
Познаем регионы (locations)
Познаем переменные...
Отлавливаем двойной клик мышью.
Массивы и циклы в обычных и текстовых триггерах
Локальные переменные в Custom Text
Камеры, спецэффекты, карта, цвета, кэш...
Добавление своих функций в триггеры
Добавление своих моделей и др. в карту
Делаем очень большую карту...
Делаем огнемет.
Улучшенная версия огнемета...
Глюки worldeditor'a
Random с задаваемой вероятностью - аура.
__________________
Смотри подругому !
VAV вне форума   Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +4, время: 17:42.

Design Developed by CompleteGFX
vBulletin® Version 3.6.7.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot