- Сообщений: 3147
- Спасибо получено: 2651
Урок по созданию безграничного пространства
Он же — расширенный урок по телепортации.
Автор: DeadElf79. Подготовлено специально для сайта www.rpg-maker.info/
Скачать статью, чтобы читать в оффлайне можно здесь: ссылка . Файл немного устарел в плане решения задачи о "гуляющих персонажах", вы можете найти правильное решение ниже.
Порывшись на форуме и пересмотрев десяток — другой демонстрационных версий игр, а также полных версий от разных разработчиков с разным уровнем знаний по гейм-дизайну, левел-дизайну, написанию скриптов я не обнаружил той вещи, к которой так привык. А именно — бесконечного, безграничного пространства локаций. Посему и стал писать сей урок.
Урок состоит из трех основных частей:
- Подготовка локации А (откуда);
- Подготовка локации Б (куда);
- Установка и настройка телепортов.
Урок был написан отдельно для разных версий RPG Maker - XP и VX ACE (RPG Maker VX запуститься не пожелал) ввиду их отличий и особенностей работы.
Небольшое предупреждение — у меня есть только английская версия этих программ, если у кого есть русская версия и время — прошу, сделайте скриншоты для дополнения этой статьи.
RPG MAKER XP
Часть первая. Подготовка локации А.
Для начала создадим новый проект и в нем — новую карту.
Откроем свойства карты.
1:
Далее, посмотрим на свойства Ширина и Высота (Width и Height).
2:
По умолчанию карта создается с размерами 20х15 тайлов (квадратов 32х32 пикселя).
Такая локация полностью помещается на экране. Если же ее увеличить, сделать, скажем 30х20 тайлов, то она «растянется» в высоту и при запуске игры мы будем видеть лишь часть карты.
Заметили что-нибудь во время перемещения? Конечно же! Когда персонаж уходит на какое-то расстояние вниз, карта смещается наверх, что создает иллюзию движения персонажа вниз по локации. Когда же персонаж приближается к границам карты, то мы видим, как перемещается именно он, а не карта.
Выводим из этого правило, которым воспользуемся позже:
Пока персонаж не подходит к краям карты, у игрока создается ощущения, что он перемещается по большой местности. Соответственно, чем дольше персонаж находиться в центре экрана, тем больше размеры карты по мнению воображения игрока.
Стандартные размеры карты — 20х15 тайлов и по умолчанию в новом проекта место старта находиться в центре локации, соответственно и в центре экрана. Включаем логическое мышление, считаем, складываем, решаем дифференциальные уравнения методом Лагранжа...
И вот, что получаем — чтобы создать иллюзию «большой» карты и персонаж все время находился в центре экрана, достаточно лишь не подпускать его близко к краям карты, которые располгаются по 10 тайлов слева и справа(20/2 по ширине), по 8 сверху и снизу (15/2 округляем — по высоте).
Для примера возьмем карту, которую я рисовал для одного из своих тестовых проектов. Рисовать новую хорошую карту, которая будет использована только как скриншот для урока мне лень, поэтому смотрим:
3:
Как мы видим, из города имеется три выхода. Также, прошу присмотреться внимательным взглядом и заметить, насколько естественными выглядят ограничения, мешающие персонажу пройти к краям локации.
Кто еще не понял — игрок может свободно передвигаться только в пространстве, обведенном красным прямоугольником на рисунке:
4:
Препятствиями являются стены крепости, вода, деревья, заборы.
А теперь вспомним правило, которые вы вывели выше. Игрок ни с одной стороны карты не подходит к краям локации ближе, чем 10 тайлов по ширине и/или 8 тайлов по высоте.
Правило соблюдено, эффект большого пространства уже создан.
Большого, но, увы, еще не бесконечного. Поэтому продолжим.
Часть вторая. Подготовка локации Б.
Перед тем, как подходить к этому этапу, убедитесь, что созданная вами локация А удовлетворяет вашим желаниям, потому что иначе у вас появятся тонны работы на следующем этапе. Если вас все утраивает — читаем и смотрим далее.
Для этого этапа я также использовал карту из того же проекта, в котором успешно использовал эффект «безграничного мира».
Вот скриншот:
5:
Здесь размер мест, по которым может спокойно пройти наш персонаж еще меньше. Заметьте, ширина этой карты не соответствует ширине прошлой. То есть строить карты одинаковых размеров совершенно необязательно, главное соблюдать правило, которые мы вывели выше.
Также, присмотритесь... Да это же... Нижняя часть этой локации полностью аналогична с верхней частью прошлой! Как же так?
Дело в том, что для создания плавного мгновенного перемещения необходимо, чтобы видимая часть обеих локаций во время перемещения было максимальной схожей. В идеале — одинаковой во всех отношениях. Важно, чтобы при этом бродящие по карте ивенты не попались в момент перемещения нам на глаза, иначе эффект будет безнадежно испорчен. Как не допустить этого — смотрите в разделе тонкости, как только дочитаете этот урок до конца.
Так как некоторая часть обеих карт одинакова, то можно сделать такую вот схему:
6:
Здесь я всего лишь совместил похожие части двух карт и объединил их в одну. Именно такой карта будет, по мнению игрока. Так как выходов из города несколько, то величина локации в воображении игрока будет расти и расширяться.
Теперь пояснение — что мы сделали и зачем это нужно.
Во-первых, созданием двух карт мы сделали иллюзию бесконечности мира - его можно продолжать расширять, не забывая в каждой условной локации Б (куда) делать видимую часть карты в месте перемещения точно такой же, как в условной локации А (откуда).
Во-вторых, этот метод полезен для оптимизации игры. Так как иногда разработчику игры хочется показать местность побольше, вложить какой-то сюжет, расставить побольше врагов и привнести на карту параллельные процессы для оживления локации, то необходимо как-то эту деятельность контролировать. Иначе игрок будет наблюдать многочисленные навязчивые лаги или даже, в худшем случае и, к сожалению, нередком, — слайдшоу.
Так как карт в итоге получается больше, то и распределить ресурсы можно на всех поровну. А то, что персонаж из раза в раз перемещается игроку знать совершенно необязательно. Его дело — играть и наслаждаться (с).
По первому пункту приведу пример, чтобы было полегче — берем инструмент Select (Выделение) в режиме рисования, выделяем необходимую область (ту самую, которая видимая часть) и жмем Ctrl+C или же в главном меню Edit (Правка), затем Copy (Копировать). Кому как удобнее.
После этого переходим на локацию Б и вставляем у нужного края.
Смотрим скриншоты, хотя я и объяснял как можно проще:
7:
8:
Кусок не обязательно может вместиться весь, главное, чтобы было соблюдено правило, приведенное выше.
Поскольку персонаж зафиксирован в центре экрана и видимая местность в окрестностях телепортов на обеих картах совпадает, то во время игры мы будем наблюдать эффект, который можно назвать красиво: «Плавная мгновенная телепортация».
Теперь же приступим к осуществлению этого эффекта.
Часть третья. Установка и настройка телепортов.
Делаются они с помощью ивента, реагирующего на прикосновение персонажа. Выбираем Player Touch. Чтобы не нарушать эффекта незаметного (плавного) перемещения из карты в карту, лучше не ставить никакой видимой графики. Мои настройки выглядят так:
9:
Далее обязательно запоминаем расположение ивента, задаем ему команду Transfer Player на координаты тайла на следующей карте, который расположен там же, где и наш. Это делается только на глаз, никакими числами не поможешь (карта-то другая). Вот тут нам еще раз помогает подготовка обеих карт, описанная в двух предыдущих частях урока.
Далее, смотрим скриншот:
10:
Выставляем Direction (Направление) в Retain, чтобы персонаж на следующей карте смотрел в ту же сторону, в какую смотрел, когда наступил на телепорт. Выбираем в Fading (Переход) значение No, чтобы не происходило Transition (плавного замещения одного изображения, в данном случае — видимой части карты А, другим — видимой частью карты Б).
Так как обе части выглядят аналогично, то Fading со значением Yes будет подозрительно похож на зависание. При значении No, если карты не слишком велики и загружены процессами, переход будет незаметен и зависания не произойдет. Чего мы и добиваемся.
Если вам нужно, чтобы игрок мог телепортироваться туда и обратно, ставим второй телепорт на карте Б, точно там же, куда перемещаемся с карты А. Координаты, в которые персонаж попадет на карту А — это место, где стоит телепорт, отправляющий с Б на А.
Если предыдущий абзац показался вам слишком запутанным, не волнуйтесь - это только кажется.
Смотрим скриншоты, для разнообразия сделанные с двух других карт:
11:
12:
Теперь вам должно быть понятно то, что было сказано выше. Как видите, здесь я сделал даже несколько телепортов, каждый из которых перемещает персонажа в свои координаты. В этом имеется свой плюс — игрок и не заподозрит о том, что его нагло обманули, подменив пироги с А на Б. Перебарщивать не стоит, потому что вам еще настраивать, но эффект хороший.
На этом урок окончен. Запустите полученную вами демку и проверьте, все ли правильно проходит. Если нет — перепроверьте координаты перемещения. Теперь можете со спокойной душой посмотреть некоторые тонкости при работе с этим методом (раздел Тонкости).
RPG MAKER VX ACE
Полный урок можно просмотреть в разделе XP, здесь я приведу некоторые оговорки, связанные с VX ACE.
Во-первых, размер экрана, используемого игрой был уменьшен компанией Enterbrain (негодяи какие). Поэтому и размеры карты по умолчанию не 20х15 тайлов, а 17х13. Теперь справа и слева можно оставлять по 9 тайлов, а сверху и снизу — 7.
Во-вторых, появилась возможность с помощью скрипта изменять разрешение игрового экрана на любое. В XP было 640х480 и менялось специальными скриптами, в VX ACE – по умолчанию 544х416, но можно легко расширить хоть до 1900х1080. Сложность заключается в том, что при увеличении разрешения и видимая область карты увеличивается, соответственно и картографам (мапперам) работы прибавится - для создания иллюзии «бесконечности» игрового мира для каждого разрешения нужно посчитать отступы от границ карты, чтобы персонаж находился всегда в центре. Это не сложно, но, по-моему, это просто лишняя работа.
В-третьих, кнопку Select (Выделение) убрали с панели инструментов. Поэтому для копирования части одной карты в другую используем выделение с помощью зажатия правой клавиши. Так как, в отличие от XP, в VX ACE нет слоев, то и скопировано будет все и сразу.
Кстати, для VX ACE имеется интересный скрипт, позволяющий использовать тени (как статические, так и динамические). Поскольку обработка сразу большого количества источников света на большом пространстве отнимает значительную часть процессорного времени (читай — сил компьютера), то использование «безграничного мира» выручает, как ничто иное.
Тонкости работы
Проблем у представленного метода всего три:
- спутники главного героя;
- случайные прохожие (возможно монстры), которые шатаются по карте по воле великого рандома;
- враги, которые могут увидеть героя и напасть на него (урок для создания таких врагов лежит в Энциклопедии RPG-Maker.info).
Разберем по порядку проблемы и их решение.
Первая проблема.
Спутники в XP появляются благодаря скриптам, в VX ACE с помощью галочки Show Player Followers (показывать спутников). И в том, и в другом случае после перемещения главного героя с карты на карту, они становятся на одно место с ним. Проблема как раз в том, что это разрушает иллюзию «безграничности», ведь игрок замечает поведение спутников и начинает подозревать, что это либо баг, либо... Тут обман и раскрывается. Обидно, особенно, если вы очень старались.
Решений этой проблемы два:
- отменить скипт/галочку, чтобы спутников не было видно;
- вставить специальный скрипт, который бы сохранял текущую позицию спутников относительно главного героя перед переходом с карты на карту и восстанавливал ее после.
Первое делается просто, второе — посложнее. Скрипт нужно либо искать, либо писать самому. У меня его нет.
Вторая проблема — праздношатающиеся прохожие, ведомые волей случая.
[strike]Решение тут простое — поставить на некотором расстоянии от телепорта ивент, срабатывающий на прикосновение другого ивента (Event Touch), который будет разворачивать «прохожего» в противоположную сторону. Чтобы все смотрелось в лучшем виде в XP делаем отступы такого ивента от телепорта в 11 по ширине и 9 по высоте, в VX Ace – в 10 по ширине и 8 по высоте. Так случайные прохожие не будут рушить нам замечательную иллюзию.[/strike]
Как показало время и опыт, данный метод не поможет и Вам стоит попробовать использовать вот этот замечательный скрипт, переведенный на русский язык недавно: Проходимость, основанная на регионах Yanfly . Все настройки даны в самом скрипте, довольно понятно объяснено.
Третья проблема — враги.
Тут решений два — либо использовать приведенный выше пример с Event Touch, либо ставить срабатывание телепорта только если персонаж в безопасности и никто его не трогает. То есть пока не добьет врага — никуда не уйдет.
Первое решение может сказаться на логике игры, так что лучше представить все так, как будто действует какое-то защитное поле или же стоит забор.
Второе может сказаться на сложности игры — побитый персонаж, мчащийся галопом от толпы врагов к спасительному телепорту, где его ждут друзья с автоматами и море аптечек (Potion) вдруг обнаруживает, что никакого спасения и нет, перед ним тупик... Безысходность пугает. Впрочем, это тоже можно представить как особенность игры, надо только постараться.
На этой радостной ноте статья и заканчивается. Она получилась объемной, но при этом полной. Надеюсь, я ничего не забыл.
Смотри также другие уроки автора:
Генератор имен
Основные ошибки картостроения (совместно с Kolhe и AnnTenna)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
rpg-maker.info/forum/pomoshh/48362-plavn...taciya-edinaya-karta
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Тем более, судя по прочитанной теме, кто-то пытался реализовать то же самое с помощью скриптов. Здесь же - только маппинг и пара ивентов, без переходов, без затемнений, сам пробовал на представленной в качестве скрина в уроке карте 80х80 с несколькими параллельными процессами - проходит на ура, все плавно и перемещение незаметно))
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Во-вторых, появилась возможность с помощью скрипта изменять разрешение игрового экрана на любое. В XP было строго и неизменно 640х480, в VX ACE – по умолчанию 544х416, но можно расширить хоть до 1024х768.
Можно ли уточнить сию информацию? Такой скрипт мне бы пригодился в моей идее, но, видимо, я не умею пользоваться гуглом, ибо найденные скрипты не дают тех эффектов, которые я ищу. Таких, чтобы менялась и видимая область карты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Agckuu_Coceg
-
- Не в сети
- Живу я здесь
-
- Простой Гинтокист с огромной внутренней ленью.
- Сообщений: 1549
- Спасибо получено: 329
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
И ещё было бы здорово, если бы можно было как-то менять размер самих тайлов, например, вдвое. И чтобы это сохранялось при переходе в фуллскрин.
Если кто-то знает, где такое можно найти, заранее благодарен.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
vk.com/sando_rpgmaker - пустая болтовня (приходите)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
2. На весь ли экран растянута картинка?
3. Какой коэффициент увеличения? (2х, 3х, иное)
Если увеличивать картинку, то половину всего просто будет невидно. По-моему, играть, к примеру, на экране 10х7 тайлов (в два раза меньше, чем стандартный экран ХР), растянутом на весь экран, будет несколько тяжело. Хотя так можно скрывать свой убогий маппинг, но его стоит улучшать, а не всячески прятать)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Agckuu_Coceg
-
- Не в сети
- Живу я здесь
-
- Простой Гинтокист с огромной внутренней ленью.
- Сообщений: 1549
- Спасибо получено: 329
Но всё же в первую очередь мне сейчас интересен аналог для VXA.
Есть такая буква. Здесь дофига свистелок, но жрёт оперативную он... прилично.
И ещё было бы здорово, если бы можно было как-то менять размер самих тайлов, например, вдвое.
О таком лучше не думать, если ты только не хочешь убить себе мэйкер.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Agckuu_Coceg
-
- Не в сети
- Живу я здесь
-
- Простой Гинтокист с огромной внутренней ленью.
- Сообщений: 1549
- Спасибо получено: 329
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
DeadElf79 пишет: Во-первых, размер экрана, используемого игрой был уменьшен компанией Enterbrain (негодяи какие). Поэтому и размеры карты по умолчанию не 20х15 тайлов, а 17х13. Теперь справа и слева можно оставлять по 9 тайлов, а сверху и снизу — 7.
По 8 и 6 соответственно.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
