Плохо! Плохо!:  0
Показано с 1 по 3 из 3

Тема: Мейкер с нуля

  1. #1
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,006
    Записей в дневнике
    3
    Репутация: 166 Добавить или отнять репутацию

    [2000] Мейкер с нуля

    Динамический свет, звук и прочее на простых командах для любых мейкеров!


    ****************** СОЗДАНИЕ СОБЫТИЙ И СПЕЦЭФФЕКТОВ В RM2K (RPG MAKER 2000) ******************
    ---------------------------------------------------------

    BY ANDY JR (andrewjr@mail.ru)
    My homepage: rm2k-pastuh.narod.ru
    15.04.2003

    Цель этого документа заключается в изложении общих принципов создания событий и спецэффектов в
    программе RPG Maker на основе конкретных примеров, чтобы пользователь, опираясь на изложенную
    информацию, в дальнейшем мог самостоятельно конструировать любые события по своему вкусу. Под
    "событиями" подразумеваются два понятия:
    1) Совершение героями (или другими объектами) действий, не зависящих от нажатия клавиш.
    Например, герой толкает героическую речь, подходит к монстру и дает ему пинка, после чего
    начинается бой.
    2) Создание в RPG Maker-е информационных ячеек, содержащих различные команды. По-английски это
    называется Event.
    Как я ни старался, я так и не смог придумать, как можно было бы обозвать эти понятия
    по-другому, остается довольствоваться тем, что из-за заметных различиях в смысле между ними
    никогда не возникнет путаницы, так что, в общем, и нет большого резона называть их по-разному.
    Тем более, что в заголовке подразумеваются сразу оба значения.
    Данный материал рассчитан на людей, которые хорошо представляют зачем нужен RPG Maker, а также
    умеют осуществлять в нем основные операции (работать с графикой, создавать болтливых жителей и
    т. д.).
    И еще кое-что. Поскольку до большинства идей я доходил сам, то кое-где мог и чуть-чуть
    тормознуть, так что если вы знаете, как осуществлять изложенные здесь операции более простыми
    способами, пишите, не стесняйтесь, я буду обновлять этот документ (оставляя за вами право на
    credit).

    Большинство изложенных здесь идей реализованы в моей игре "Pastushok's Adventures", которая
    может служить живым примером описанных наворотов. Официальная страница игры rm2k-pastuh.narod.ru
    Итак, к делу.

    СОДЕРЖАНИЕ:

    1) SWITCHES (ПЕРЕКЛЮЧАТЕЛИ)
    1.1 Основы.
    1.2 Немного о Variable.
    2) СВЕТОВЫЕ ЭФФЕКТЫ
    2.1 Создание динамического освещения.
    2.2 Мерцающее освещение.
    2.3 Смена дня и ночи.
    3) ЗВУКОВЫЕ ЭФФЕКТЫ
    3.3 Динамический звук.
    3.4 Продвинутый динамический звук.
    3.5 Шумы на заднем плане.
    4) АНИМАЦИЯ
    4.1 Анимация с использованием CharSet и команд движения.
    4.2 Анимация с использованием ChipSet и параллельного процесса.
    4.3 Анимация с использованием своего файла (в разработке...)
    5) РАЗНОЕ
    5.1 Создание таймера.
    5.2 Прыжки через препятствия.

    -----------------------------
    1) SWITCHES (ПЕРЕКЛЮЧАТЕЛИ)
    -----------------------------

    1.1 ОСНОВЫ.

    По умолчанию за каждым игровым гражданином закрепляется одна произносимая им фраза.
    Переключатели позволяют закреплять по нескольку фраз за одним человеком, создавать цепочки
    последовательных событий и еще целую кучу всяких вещей.
    Выглядит это так:
    - после создания фразы (Show Message...) в командной странице (Events Commands) ставим
    переключатель (Change Switch... Set to ON).
    - создаем внутри персонажа новую страницу и в ней в графе Event Condition активизирум
    свежесозданный переключатель.
    - после этого пишем на странице новое сообщение (или любое другое действие).
    Теперь, произнеся свою первую фразу (что-то типа: "Йо!"), на дальнейшие расспросы персонаж
    будет отвечать второй фразой ("Привет"). Подобных фраз (страниц и переключателей) можно
    создавать сколько угодно. При желании можно зациклить произносимые ответы, т. е. персонаж при
    длительном допросе будет говорить: "Йо!", "Привет", "Йо!", "Привет"...
    - для этого на второй странице после указанной фразы (действия) нужно выключить переключатель
    (Change Switch..., Set to OFF). При таком раскладе, произнеся вторую фразу, персонаж будет
    возвращаться к фразе (действию) на первой странице.

    Обратите внимание, что переключатели можно использовать по нескольку раз. Например, согласно
    вашему сюжету, после гибели дракона его подземелье рушится и герои больше никогда не могут
    попасть туда. Это значит, что все переключатели, задействованные в этом подъземелье, теперь не
    играют никакой роли и могут быть использованы снова. Только не забывайте, что делать это надо
    очень осторожно, поскольку ошибка может создать такие глюки, обнаружить которые можно будет
    только "методом 50 прохождений".
    Прежде чем заново использовать переключатель нужно:
    1) быть уверенным на 101%, что на момент своего повторного применения он нигде не используется,
    2) точно знать, в каком положении он находится (ON или OFF) и при необходимости изменить это
    положение.

    Рассмотрим один интересный случай. Предположим, что вы хотите создать следующую ситуацию. Герой
    встречает в лесу фею, которая берется показывать ему дорогу. Фея летит к краю карты и исчезает
    (типа, переходит на следующий экран). Герой идет следом. При переходе на следующую карту игрок
    видит, как фея подлетает к дереву, оборачивается и говорит: "Вот мы и пришли. Здесь мой дом".
    С событиями на первом экране все понятно, тут и говорить нечего. На второй странице...
    - создаем двухстраничную фею:
    Event Start Condition - Parallel Process или Auto Start,
    Events Commands - Move Event... (задаем маршрут), Wait...(время, требующееся фее, чтобы
    пройти маршрут), Show Message... (бла-бла-бла), Change Switch... 0001:фея Set to ON
    (активизирует вторую страницу, чтобы фея не повторяла вышеперечисленные команды).
    Вроде бы все. Теперь смотрите глюк. После окончания разговора, вернитесь на предыдущую карту, а
    потом опять зайдите к фее. Она будет стоять В НАЧАЛЕ своего маршрута. Это естественно. Так
    устроен RPG Maker, что при переходе с карты на карту, все объекты возвращаются на свои исходные
    позиции. И это правильно. А обойти это условие довольно просто:
    - в конечной точке маршрута феи создаем другую фею и в ее условия (Event Conditions) ставим
    переключатель 0001:фея - ON.
    - на второй странице оригинальной феи (которая активизируется тем же переключателем) убираем ее
    изображение (вместо него должен быть розовый фон). Также задаем Position: Below Hero. Теперь,
    произнеся свою фразу, первая фея исчезнет, а вместо нее появится другая. Подмена происходит
    совершенно незаметно. Теперь наша вторая фея будет спокойно торчать возле дерева, ну а
    первая... Мы ее больше никогда не увидим, хотя она так и будет стоять в начале своего
    маршрута.
    Этот метод (с исчезанием одних объектов и появлением других) можно использовать в самых
    разнообразных ситуациях.

    1.2 НЕМНОГО О VARIABLE.

    Variable (переменная) - это особая разновидность переключателей. Во всяком случае Variable
    могут выполнять такие же функции, однако в целом имеют гораздо более широкий спектр применения.
    Благодаря им можно осуществлять такие операции, как генерацию случайных предметов в сундуках
    или, например, уменьшение после гибели персонажа имеющихся денег вдвое (как в Dragon Warrior).
    В общем, простым переключателям такое и не снилось.
    Фишка заключается в том, что с Variable можно осуществлять математические операции (сложение,
    вычитание, умножение и деление). Рассмотрим это на простейшем примере. Чтобы открыть ворота,
    герою нужно нажать 4 рычага. Конечно, для осуществления этой операции можно задействовать 4
    переключателя, но что если рычагов не 4, а 10? И нажимать их можно в произвольном порядке?
    В такой ситуации следует использовать Variable (назовем ее "рычаги").
    - в событии рычага на командной странице (Events Commands) размещаем:
    Change Variable...:
    Choose Variable: 0001:рычаги
    Set: +
    Operand: Set 1
    Это значит, что при активизации события (нажатии рычага) к значению Variable 0001:рычаги
    (которое по умолчанию равно 0) прибавится единица. Один рычаг есть!
    Обратите внимание, что если все оставить как есть, игрок может еще раз нажать на рычаг, и к
    значению Variable прибавится еще 1, и еще 1, и так, пока ему не надоест дергать рычаг. Чтобы
    избежать этого, нужно в событии рычага после операции с Variable поставить переключатель,
    который активизирует другую страницу (без Variable). На ней можно разместить сообщение: "Я уже
    нажал его," или что-то вроде того. Подробнее о переключателях написано выше.
    - создаем по такому же принципу еще три рычага.
    - создаем событие, которое открывает дверь. Будет ли оно сопровождаться красочной анимацией
    или же дверь просто исчезнет - решать вам. Главное, чтобы в условиях этого события
    присутствовала такая штука:
    Event Conditions: Variable 0001:рычаги, 4 above.
    То есть это событие произойдет, только когда значение Variable 0001:рычаги будет больше или
    равно 4.
    Обратите внимание, что Variable (так же как и переключатели) можно использовать по нескольку
    раз. Например, если герою больше никогда не понадобится нажимать эти рычаги, то задействованные
    в этой операции Variable можно использовать снова. Главное, не забудьте обнулить счетчик!
    Делается это в любом обязательном событии, которого игрок не сможет избежать при прохождении.
    - добавляем строчку на командной странице:
    Change Variable...:
    Choose Variable: 0001:рычаги
    Set: Set
    Operand: Set 0
    Этой командой вы задаете значение 0 для Variable 0001:рычаги.
    Сейчас мы рассмотрели простейший пример использования Variable. С "переменными" можно
    осуществлять гораздо более сложные операции. Если вас это интересует, рекомендую поискать
    в сети более детализированную литературу, поскольку моя цель - изложить основы.

    ---------------------
    2) СВЕТОВЫЕ ЭФФЕКТЫ
    ---------------------

    2.1 СОЗДАНИЕ ДИНАМИЧЕСКОГО ОСВЕЩЕНИЯ.

    Это очень просто. Предположим, что в вашей игре герой идет ночью по лесу и видит костер. Если
    просто нарисовать костер, то разглядеть его в условиях плохой видимости будет довольно трудно,
    а это никуда не годится. Поэтому делаем следующее:
    - на подходе к костру ставим событие с такими условиями:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Set Screen Tone... (задаем более высокую яркость экрана с упором на красный
    цвет, огонь как-никак).
    - на предыдущую клетку ставим аналогичное событие, которое возвращает экрану первоначальную
    "ночную" яркость.
    Теперь, когда герой приблизится к источнику света, окружающее пространство станет светлее, а
    когда отойдет - опять потемнеет. Остается только расставить события на всех возможных маршрутах
    героя, чтобы случайно не оказалось потайной лазейки, по которой можно было бы подобраться к
    огню, оставшись в потемках. Иногда источник света приходится обносить событиями по кругу
    радиусом в экран, но это уже вопрос к дизайну карты.
    При желании можно создать ступенчатое освещение, когда чем ближе герой подходит к огню, тем
    ярче освещается экран, но для этого придется создавать целую кучу событий.

    2.2 МЕРЦАЮЩЕЕ ОСВЕЩЕНИЕ.

    Как известно, языки пламени создают непостоянный мерцающий свет, то есть в один момент
    окружающее пространство освещено больше, а в другой - меньше. Причем смена освещенности
    происходит очень быстро. При желании такой же эффект можно сделать в RPG Maker-е. Конечно
    кому-то будет достаточно простого увеличения яркости при подходе к костру, но для нас важен
    принцип.
    Мерцающее освещение создается двумя чередующимися командами Set Screen Tone..., которые
    устанавливают различную яркость. Можно использовать и больше команд, но для огня двух вполне
    достаточно.
    Итак, чтобы создать такой эффект, надо:
    - в любой точке карты создать приблизительно такое событие:
    Event Conditions - Switch 0001:огонь - ON,
    Event Start Condition - Parallel Process,
    Events Commands - Set Screen Tone... (первая яркость), Set Screen Tone... (вторая яркость).
    При установке яркости обязательно включите флажок Wait Until Done. Устанавливая различные
    значения в графе Time, вы можете регулировать скорость изменения яркости. Для огня
    достаточно интервала в 0.2 секунды.
    - теперь на подходе к костру ставьте другое событие:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Change Switch... 0001:огонь - ON.
    Наступив на эту клетку, герой активизирует переключатель "огонь", который включает мерцающее
    освещение.
    - на предыдущей клетке поставьте событие, ОТКЛЮЧАЮЩЕЕ переключатель и возвращающее экрану его
    первоначальную яркость:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Change Switch... 0001:огонь - OFF, Set Screen Tone... (исходная яркость).
    Имейте в виду, что резкая смена яркости вызывает быстрое утомление глаз, поэтому при выборе
    степеней освещенности старайтесь не задавать значений в широком диапазоне, либо ставьте для
    смены яркости большие промежутки времени.
    * Данный эффект был использован при создании источников света в игре "Pastushok's Adventures".

    2.3 СМЕНА ДНЯ И НОЧИ.

    Смена дня и ночи довольно редко встречается в JRPG, зато в CRPG - на каждом шагу. На мой
    взгляд, этим жанрам есть что позаимствовать друг у друга. Короче говоря, эффект самый что ни на
    есть актуальный, который может здорово разнообразить или же просто украсить игровой процесс.
    Итак, допустим, мы создает смену дня и ночи на карте мира. Чтобы этот эффект был полноценным,
    должны быть соблюдены следующие условия:
    1) время суток, в течение которого герой зашел в другую локацию (город), должно отображаться и
    в самой локации.
    2) интервалы между сменой времени суток на карте мира должны быть одинаковыми всегда и
    абсолютно всегда! Объясняю. Обычно, при входе на любую локацию время в игре как бы
    останавливается, и смена суток на них отсутствует. Отсчет возобновляется, только при
    возвращении героя на мировую карту. Допустим, что в вашей игре от заката до рассвета проходит
    5 минут. Суть второго условия заключается в том, что если герой с заката путешествовал 3
    минуты, а потом зашел в локацию, при выходе с нее до рассвета должно оставаться 2 минуты.
    Для осуществления второго условия необходимо при помощи Variable создать счетчик, который в
    реальном времени считал бы пройденные секунды (или минуты, если вас не интересует такая
    точность) и в зависимости от пройденного времени активизировал соответствующие события (смену
    дня и ночи). Благодаря тому, что каждая секунда будет фиксироваться в общем счетчике, герой
    сможет спокойно посещать любые локации без нарушений интервалов между временами суток.
    Делается это так:
    - на карте мира создаем событие:
    Event Start Condition - Parallel Process,
    Events Commands - Set Screen Tone... (дневная яркость),
    Wait... (1 секунда),
    Change Variable... 0001:отсчет, Set: +, Operand: Set 1.
    Первая команда нужна для того, чтобы после долгой ночи (короткого утра), программа снова
    выдавала дневную яркость (это если вы интересуетесь, чего она тут торчит, ведь по умолчанию
    на момент начала события установленная яркость и так "дневная"). Вторая команда задает
    интервал, через который счетчик будет добавлять значения к общей сумме пройденного времени
    (он может быть и 5, и 10, и 0.1 секунд, в зависимости от того, какую точность вы хотите
    получить). Третья команда - это, собственно, и есть наш счетчик. Она через каждую секунду
    прибавляет по единице к общей сумме Variable 0001:отсчет. Таким образом осуществляется
    суммирование идущего времени.
    - в этом же событии создайте вторую страницу, которая будет отвечать за вечер:
    Event Conditions: Variable 0001:отсчет, 5 above.
    Event Start Condition - Parallel Process,
    Events Commands - Set Screen Tone... (вечерняя яркость),
    Wait... (1 секунда),
    Change Variable... 0001:отсчет, Set: +, Operand: Set 1.
    Как видно, в условиях этой страницы присутствует Variable. Страница активизируется, только
    когда "переменная" 0001:отсчет достигнет значения 5. То есть между днем и вечером пройдет
    5 секунд (это, конечно, мало, но так удобней тестировать). В остальном кардинальных отличий
    от "дневной" страницы нет, таймер продолжает считать секунды, разве что яркость экрана уже
    другая.
    - в этом же событии создаем третью "ночную" страницу:
    Event Conditions: Variable 0001:отсчет, 10 above.
    Event Start Condition - Parallel Process,
    Events Commands - Set Screen Tone... (ночная яркость),
    Wait... (1 секунда),
    Change Variable... 0001:отсчет, Set: +, Operand: Set 1.
    Через 5 секунд после наступления вечера приходит ночь (нереалистично, но мне на это начхать).
    - последняя страница, обспечивающая переход ночи в день:
    Event Conditions: Variable 0001:отсчет, 15 above.
    Event Start Condition - Parallel Process,
    Events Commands - Change Variable... 0001:отсчет, Set: Set, Operand: Set 0.
    Эта страница обнуляет счетчик Variable, и, таким образом, активизирует первую страницу.
    Да будет день! Кстати, если вы хотите вести подсчет пройденным суткам, то на этой же странице
    добавьте такую команду:
    Change Variable: 0002:дни, Set: +, Operand: 1.
    О том, как выводить значения Variable на экран написано в разделе "5.1 Создание таймера".
    Не волнуйтесь, это еще не все. Помните первое условие? О нем после рекламной паузы!

    ------ РЕКЛАМНАЯ ПАУЗА ------
    ***Тыц, тыц... (веселая музыка)
    ***Show Message...:
    Граждане геймеры! Народ! Качайте игру "Pastushok's Adventures"! В ней вы найдете живую
    реализацию многих описанных здесь наворотов! Не проходите мимо! Этот шедевр поразит вас до
    глубины души и корней волос, с ним вы обретете второе, необыкновенно свежее дыхание, избавитесь
    от стресса и получите надежную опору в жизни...
    (голос становится тише и наконец затыкается где-то вдали)
    ***Ту-ру-руу... (грустная музыка)
    Он не скачал себе "Пастуха"... (показывают трезвого студента)
    Адрес официального сайта игры "Pastushok's Adventures": rm2k-pastuh.narod.ru
    ------ КОНЕЦ -----

    Итак, в первой части повествования мы создали счетчик, который в реальном времени отсчитывает
    секунды и активизирует смену дня и ночи через равные промежутки времени вне зависимости от
    того, посещал ли герой какие-либо локации или нет.
    Теперь можно переходить к самим локациям. Само собой разумеется, что если вы зашли в город
    ночью, то, следовательно, в нем должна быть ночь. Создатели RPG Maker-а это предусмотрели,
    поэтому такая штука получается автоматически.
    Я же вам расскажу еще кое-что. Допустим, в вашем мире есть древние руины, и вы хотите, чтобы
    в ночное время они светились таинственным светом. То есть когда герой зайдет в них, экран
    должен приобрести необходимый оттенок.
    - для этого следует создать дополнительную страницу в событии, телепортирующим героя в город:
    Event Conditions: Variable 0001:отсчет, 10 above.
    Event Start Condition - On Hero Touch,
    Events Commands - Set Screen Tone... (нужный уровень яркости).
    Первая команда задает время суток, в которое должны происходить какие-то изменения в
    освещенности.
    - в событии, переносящим героя на мировую карту, не забудьте поставить команду, возвращающую
    экрану исходную (в данном случае ночную) яркость.
    Если вы хотите создать в руинах мерцающую яркость, то в командной странице вместо
    Set Screen Tone... нужно активизировать переключатель, а на карте создать событие, отвечающее
    за мерцание с Event Conditions: (нужный переключатель) - ON (подробнее об этом написано выше).

    И еще один нюанс. Допустим, что вы хотите сделать так, чтобы ночью (вечером, утром) в городе
    появились разбойники (или же просто у персонажей сменились реплики). Так вот, в условия (Event
    Conditions) к этим событиям (или же страницам) можете смело ставить Variable 0001:отсчет.
    Для нашего конкретного случая:
    1) условие для вечера - Variable 0001:отсчет, 5 above.
    2) условие для ночи - Variable 0001:отсчет, 10 above.
    Опираясь на рассмотренный пример вы наверняка сможете по своему желанию создать какое-нибудь
    продвинутое времяисчисление, например, замедленную смену времен суток в городах, а может и
    вообще переведете всю игру в реалтайм (^_~).

    ---------------------
    3) ЗВУКОВЫЕ ЭФФЕКТЫ
    ---------------------

    3.1 ДИНАМИЧЕСКИЙ ЗВУК.

    Динамический звук создается аналогично динамическому освещению. Допустим, что вы хотите сделать
    так, чтобы приближаясь к воде, игрок слышал плеск волн.
    - на подходе к воде создаем:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Play Sound Effect... (волны).
    - на предыдущей клетке создаем:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Play Sound Effect... (OFF, отключаем звук).
    Не забудьте предусмотреть все возможные маршруты героя. При желании можно создать ступенчатый
    звук: чем ближе подходим, тем громче слышно. Но это уже на любителя.

    3.2 ПРОДВИНУТЫЙ ДИНАМИЧЕСКИЙ ЗВУК.

    Это немножко другая история, связанная с анимацией чего-либо, так что советую прежде чем читать
    ее, ознакомиться с разделом 4) АНИМАЦИЯ.
    Допустим, что в вашей игре с крыши одного дома течет вода, и вы хотите, чтобы приблизившемуся к
    дому было слышно шум воды. В этом случае смотрите предыдущий раздел.
    Нас же интересует такая ситуация: с крыши дома падает капля. Разница между текущей водой и
    каплей в том, что вода шумит постоянно, а капля создает звук только при ударе об землю (лужу).
    Следовательно, вам нужно задать условия таким образом, чтобы, в не зависимости от того, когда
    были активизированы соответствующие переключатели, звук капли раздавался в момент прокрутки
    последних кадров анимации (удара об землю).
    При создании этого спецэффекта я имел дело с 16-кадровой CharSet-ной анимацией капли, но
    его можно использовать и при ChipSet-ной анимации аналогичным способом.
    Итак...
    - в событии, отвечающим за анимацию капли создаем дополнительную страницу - точную копию
    предыдущей, но с небольшим отличием: в Edit Route... перед командами, вызывающими прокрутку
    последних кадров, ставим команду Play SE... (кап). В условия (Event Conditions) второй
    страницы ставим переключатель 0001:капай - ON. Таким образом, у нас теперь есть два варианта
    анимации падающей капли: без звука и со звуком.
    - на подходе к источнику шума ставим событие N1:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Change Switch... 0001:капай Set to ON.
    Это событие переключает анимацию капли на озвученный вариант.
    - на предыдущей клетке создаем событие N2:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Change Switch... 0001:капай Set to OFF.
    Это событие переключает анимацию капли на вариант без озвучки.
    Если вы думаете, что это конец, то вы глубоко заблуждаетесь. Not even close!
    Вышеописанные операции приводят к появлению глюка "прерывания анимации". Если в момент,
    когда капля только сорвалась с крыши, вы активизируете событие N1, капля исчезнет и в ту же
    секунду сорвется с крыши еще раз, но теперь в озвученном варианте. То же самое произойдет при
    активизации события N2.
    Нет, это еще не победа. Работаем дальше.
    Нужно сделать так, чтобы переключение между страницами капли происходило в промежутке между
    прокруткой кадров анимации (либо перед прокруткой, либо после). В такой ситуации даже если вы
    активизируете переключатель, капля все равно ударится об землю, и только после этого
    переключится на второй вариант.
    Чтобы это осуществить...
    - на первой странице анимации капли (без озвучки) в первых строчках Edit Route... активизируйте
    новый переключатель 0002:проверка1 и в следующей же строчке отключите его. Этот переключатель
    будет осуществлять проверку, включен ли переключатель 0001:капай. Улавливаете мысль?
    - в условия второй страницы (с озвучкой) к уже существуещему переключателю 0001:капай
    добавляйте второй переключатель 0002:проверка1. Теперь для активизации второй страницы
    требуется два условия: 1) герой должен наступить на событие N1, 2) анимация капли должна
    полностью прокрутить все свои кадры. Только после этого падение капли начнет сопровождаться
    звуком.
    Теперь нам нужно отработать переход анимации в неозвученное состояние.
    - для этого на второй странице в первых строчках Edit Route... включите и выключите еще один
    переключатель 0003:проверка2. В этот раз между включением и отключением переключателя
    поставьте команду Wait a Moment (это объясняется позднее).
    - в событие N2 (отключающее звук) СОТРИТЕ команду отключения переключателя 0001:капай! Вместо
    нее активизируйте четвертый переключатель 0004:нетзвука.
    - теперь остается только создать в любой точке карты событие N3, которое будет "обрабатывать"
    сигналы активизированных переключателей. Поскольку нам надо, чтобы при активизации
    0003:проверка2 и 0004:нетзвука, анимация капли переходила на первую страницу, задаем такие
    условия:
    Event Conditions - Switch 0003:проверка2 - ON, Switch 0004:нетзвука - ON,
    Event Start Condition - Parallel Process,
    Events Commands - Change Switch... 0001:капай Set to OFF.
    Как вы помните, переключатель 0001:капай является условием второй страницы. Без него анимация
    возвратится на первую страницу и будет происходить без озвучки.
    - последняя операция: в событие N1 (активизирует звук) добавьте на командной странице
    следующее: Change Switch... 0004:нетзвука Set to OFF. Я настаиваю на том, чтобы вы сами
    догадались, зачем это нужно, ну а если все-таки не догадаетесь - просто поверьте мне на
    слово.
    Итак, в конечном итоге операции по созданию звукового сопровождения анимации падающей капли
    выглядят так:
    1) На подходе к озвучиваемому объекту создаем событие N1 c условиями:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Change Switch... 0001:капай Set to ON,
    Change Switch... 0004:нетзвука Set to OFF.
    2) На предыдущей клетке создаем событие N2 c условиями:
    Position - Below Hero,
    Event Start Condition - On Hero Touch,
    Events Commands - Change Switch... 0004:нетзвука Set to ON.
    3) В событии, отвечающим за анимацию объекта, создаем вторую страницу (копию предыдущей, но с
    озвучкой) с условиями:
    Event Conditions - Switch 0001:капай - ON, Switch 0002:проверка1 - ON.
    В первой странице перед командами, отвечающими за смену кадров, ставим:
    Change Switch 0002:проверка1 Set to ON,
    Change Switch 0002:проверка1 Set to OFF.
    На второй странице перед командами, отвечающими за смену кадров, ставим:
    Change Switch 0003:проверка2 Set to ON,
    Wait a Moment,
    Change Switch 0003:проверка2 Set to OFF.
    4) В любой точке карты создаем событие N3 c условиями:
    Event Conditions - Switch 0003:проверка2 - ON, Switch 0004:нетзвука - ON,
    Event Start Condition - Parallel Process,
    Events Commands - Change Switch... 0001:капай Set to OFF.
    Вот так вот все просто.
    Возможно у кого-то возникает вопрос: зачем на второй странице анимации капли между включением
    и выключением переключателя стоит Wait a Moment? Это довольно странная вещь. На первой странице
    когда программа подходит к месту "проверки", при включенном переключателе 0001:капай команда
    "Change Switch 0002:проверка1 Set to ON" мгновенно переводит считывание информации на следущую
    страницу. До команды "Change Switch 0002:проверка1 Set to OFF" программа просто не доходит.
    На второй странице при подходе к аналогичному месту программе требуется считывать команды с
    только что активизированного события N3. Так вот, если убрать Wait a Moment, программа, судя
    по всему, просто не успевает запустить N3 или же считать информацию с него и переходит к
    команде "Change Switch 0003:проверка2 Set to OFF", в результате чего все летит к чертям и
    капающий звук разносится по всей деревне. Во всяком случае, я не могу объяснить происходящее
    по-другому.
    Обратите внимание и на это: если на первой странице между включением и выключением
    переключателя 0002:проверка1 тоже поставить команду Wait a Moment, возникнет довольно-таки
    изощренный глюк. ,,,
    --- ...Я очень горжусь собой (^_^), что сумел его обнаружить... ---
    Если игрок начнет быстро ходить туда-сюда по событиям N1 и N2, капля вообще перестанет падать!
    Чтобы этого избежать, нужно либо разместить события N1 и N2 на расстоянии друг от друга
    (минимум 1 клетка), либо (что более удобно) ставить Wait a Moment только на второй странице.
    Аналогичным образом динамический звук можно использовать и в ChipSet-ной анимации, только
    "проверку" переключателями нужно будет ставить на командой странице в интервалах между сменой
    кадров.
    * Данный спец...кхе...эффект был использован при создании падающей капли в игре
    "Pastushok's Adventures".
    И не говорите мне, что вы ничего не поняли...

    3.3 ШУМЫ НА ЗАДНЕМ ПЛАНЕ.

    Как приятно, прогуливаясь по деревне, слышать время от времени петушиные крики, ржание лошадей
    и т. д. Ну и конечно же бэкграундную мелодию - без нее никуда. Но если с мелодией все понятно,
    то со звуками еще проще.
    - где-то на свободном уголке карты создаем следующее событие:
    Event Start Condition - Parallel Process,
    Events Commands - Wait... (столько-то секунд), Play Sound Effect... (петух), Wait...,
    Play Sound Effect... (лошадь) и т. д.
    Теперь предположим, что вы сделали озвучку в своей игре. И вот, персонаж начинает говорить с
    вами о высоких материях, а тут хренов петух заглушает речь своими воплями, портит настроение.
    Чтобы этого избежать, нужно на время определенных (или всех) разговоров (других событий)
    отключать посторонние шумы (другие спецэффекты, сделанные по такому же принципу). Для этого:
    - в уже созданом событии, отвечающим за шум (см. выше), создаем дополнительную пустую страницу
    (т. е. при переходе на нее все звуки/эффекты отключаются) и в условия ее активизации ставим
    переключатель "заткнись":
    Event Conditions - Switch 0001:заткнись - ON,
    - теперь остается только решить, в каких событиях этот переключатель будет активизироваться, а
    в каких - нет. Если вы хотите, чтобы данное событие проходило без вмешательства посторонних
    звуков, в первой строчке командной страницы (Events Commands) этого события включите
    переключатель (Change Switch... ON). После этого НЕ ЗАБУДЬТЕ выключить его в конце страницы,
    иначе петухи в вашей деревне умолкнут навеки.
    * Данный эффект был использован при создании грома в игре "Pastushok's Adventures".

    -------------
    4) АНИМАЦИЯ
    -------------

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

    4.1 АНИМАЦИЯ С ИСПОЛЬЗОВАНИЕМ CHARSET И КОМАНД ДВИЖЕНИЯ.

    СОЗДАНИЕ ДВУХ- И ТРЕХ-КАДРОВОЙ АНИМАЦИИ
    , ,
    Допустим, вы перерисовали в графическом редакторе одного из персонажей (добавили ему ^_^ рога),
    однако в этом же CharSet-е (файле с фигурками перонажей) есть несколько фигурок, которые не
    используются в игре. Вы можете использовать их для создания простейшей трех-кадровой анимации.
    - нужно только заменить основное изображение персонажа на первый кадр, шаг правой ногой - на
    второй кадр и шаг левой ногой на третий кадр.
    - после этого остается создать событие с вашей новой графикой и в графе Animation Type
    выставить Common/With Stepping. Регулировать скорость смены кадров можно изменяя Movement
    Speed объекта. Обратите внимание, что кадры будут идти не по порядку, т. е. не 1-2-3, а
    1-2-1-3-1...
    При желании можно сделать не трех-, а двух-кадровую анимацию, то есть поставить на шаги левой
    и правой ногами одинаковый кадр.
    При использовании абсолютно всех методов существует возможность регулирования частоты
    повторения анимации. Например, вы хотите сделать, чтобы вывеска на магазине качалась раз в
    несколько секунд, а не болталась как сумасшедшая. Для этого в Edit Route... задайте необходимый
    на смену всех кадров интервал (команда Wait a Moment), затем введите команду Stop Animation и
    задайте время, в течение которого объект будет оставаться неподвижным, потом ставьте Resume
    Animation.
    Также в трех-кадровой анимации имеется способ избежать синхронности в анимации одинаковых
    объектов. Например, если вы не хотите, чтобы все вывески в городе дружно раскачивались в одно и
    то же время, при редактировании маршрута задавайте вывескам разные временные интервалы.
    Достоинства данного метода:
    - полное использование ненужной графики. Каждая ненужная фигурка дает возможность создать 4
    новых объекта с двух- или трех-кадровой анимацией.
    - возможность избегать синхронности анимации одинаковых объектов.
    Недостатки:
    - маленькое количество кадров и жесткий порядок их выведения (1-2-1-3),
    - ограниченная возможность регулирования частоты кадров (только 6 скоростей в небольшом
    диапазоне).
    * Данный метод был использован при анимации раскачивающейся веревки и свечей в церкви в игре
    "Pastushok's Adventures".

    СОЗДАНИЕ ЧЕТЫРЕХ-КАДРОВОЙ АНИМАЦИИ

    Принцип такой же, как и при трех-кадровой анимации, только менять на свои кадры нужно 4
    основных изображений персонажа: анфас, левый и правый профили, вид сзади. После этого в событии
    с новой графикой в графе Animation Type выставляйте 4 Anim.(Turn Right). Для смены частоты
    кадров изменяйте значение Frequency.
    Достоинства:
    - 4 кадра - оптимальный вариант для многих анимированных объектов,
    - удобно регулировать частоту кадров (8 скоростей в широком диапазоне),
    - возможность избегать синхронности анимации одинаковых объектов (тем же способом, что и в
    трех-кадровой анимации).
    Недостатки:
    - неполное использование ненужной графики. При употреблении этого метода остаются
    неиспользованными остальные 8 кадров анимации персонажа (анфас, профили, вид сзади левого и
    правого шага). Проблема в том, что я так и не смог заставить программу выводить эти кадры БЕЗ
    центральной фигурки. Если вы знаете, как это сделать, ПОЖАЛУЙСТА, НАПИШИТЕ МНЕ!
    * Данный метод был использован при анимации факелов и костра в игре "Pastushok's Adventures".

    СОЗДАНИЕ МНОГОКАДРОВОЙ АНИМАЦИИ

    Три-четыре кадра хороши для простых объектов. Но иногда возникает необходимость создавать нечто
    более продожительное. Сделать это можно, использовав тот же принцип, что и в четырех-кадровой
    анимации. Заменив своими кадрами 4 основных изображений одного персонажа, меняйте и другого, и
    третьего, и т. д. до 32 кадров (если замените всех персонажей в чипсете). Этого более чем
    достаточно для самой навороченной анимации. В перспективе можно и больше.
    В такой ситуации для смены кадров можно использовать опцию Edit Route...
    - сначала прописываем повороты персонажа: Face Down, Face Left, Face Up, Face Right - это будет
    аналог 4 Anim.(Turn Right), затем ставим команду Change Graphic... и указываем новую фигурку
    (которую вы уже заменили своими кадрами), после чего повторяем четырех-кадровый поворот бывшего
    персонажа и т. д. В команде Change Graphic... можно даже указать другой файл и получить в свое
    распоряжение еще 32 кадра.
    Преимущества и недостатки те же, что и в четырех-кадровой анимации.
    * Данный метод был использован при создании анимации дыма и падающей капли в игре
    "Pastushok's Adventures".

    Напоследок хочу сказать о ГЛАВНОМ ПРЕИМУЩЕСТВЕ анимации с использованием ненужной графики
    из CharSet. Оно заключается в том, что анимация созданного вами объекта может
    распространяться на ДВЕ клетки. А это чертовски удобно! Тут вам и дым из трубы, и искры от
    костра, летящие в небо, и струйка воды с крыши и еще много чего. А все потому, что сама фигурка
    по умолчанию состоит из двух клеток, причем нижняя клетка (ноги), находится на уровне
    Same Level as Hero, а верхняя (голова) - Over Hero (т. е. выше). Благодаря этому голова героя
    закрывает объекты нижнего уровня, а следовательно и ваша анимация летящих вверх объектов будет
    работать точно так же, избавляя вас от необходимости проставлять эти условия вручную. То есть
    подходя сверху, герой уткнется в костер, а не в его искры, а они в свою очередь будут закрывать
    нижнюю часть фигурки героя.
    Еще одна важная деталь. Использование опции Edit Route... (и его аналогов) не требует каких-то
    условий (Event Start Condition) и оставляет пустой страницу Events Commands, позволяя вам
    заполнять их по своему вкусу. Например, ставить сообщение на анимированный костер и т. д.

    4.2 АНИМАЦИЯ С ИСПОЛЬЗОВАНИЕМ CHIPSET И ПАРАЛЛЕЛЬНОГО ПРОЦЕССА.

    Эта заморочка представляет собой анимацию с использованием ненужной ChipSet-ной графики
    (графики окружающего мира) и является альтернативой анимации с использованием CharSet-ной
    графики.
    ГЛАВНЫЕ ОТЛИЧИЯ:
    - изображение объекта занимает только одну клетку,
    - смену кадров осуществляет отдельное событие с Event Start Condition установленным на
    Parallel Process. Почему нельзя было использовать Edit Route...? Потому что по неизвестным
    причинам при редактировании маршрута команда Change Graphic... не хочет брать картинки из
    файлов ChipSet-а. Если вы узнаете, как это избежать этого, ПОЖАЛУЙСТА, НАПИШИТЕ МНЕ!
    - количество кадров ограничивается количеством неиспользованных рисунков (максимум - 144).
    Применение данного метода имеет единственную цель - сократить объем вашей игры, благодаря
    использованию ненужной графики в ChipSet-ных файлах, которые вы подвергли (хотите подвергнуть)
    модификации.
    Как это делается. Предположим, что вам нужно нарисовать анимированную лужу, встав на которую
    игрок получал бы сообщение "Тону! Мужики, спасайте..."
    - для начала нарисуйте в ChipSet-ном файле необходимые кадры. Поскольку у нас речь идет о луже,
    лучше рисовать ее во втором разделе файла (Upper Chip), чтобы ее изображение накладывалось на
    изображения первого раздела (траву, например). И конечно же разместите первый кадр лужи на
    нужной карте.
    - создайте на месте лужи событие БЕЗ изображения (Position: Below Hero, Event Start Condition:
    Push Key или On Hero Touch). На странице Events Commands создайте сообщение.
    - в любой точке карты создайте событие с Event Start Condition: Parallel Process. На командной
    странице размещайте следующее:
    Wait... (интервал между сменой кадров)
    Change Chip... (указывайте первый и второй кадр)
    Wait...
    Change Chip... (указывайте второй и третий кадр) и т. д.
    Достоинства:
    - отсутствие "лишних" кадров, которые нельзя было бы использовать (как, например, в
    четырех-кадровой анимации).
    Недостатки:
    - для анимации и вывода сообщения приходится создавать два события,
    - анимация одинаковых объектов будет происходить синхронно, тут уж ничего не поделаешь.
    * Данный способ был использован при анимации лужи в игре "Pastushok's Adventures".

    А теперь универсальный совет:
    Если вы заменили графику в каком-то файле, а там все еще остались ненужные фрагменты,
    ОБЯЗАТЕЛЬНО УДАЛЯЙТЕ ИХ, так как это уменьшает объем вашей игры!


    4.3 АНИМАЦИЯ С ИСПОЛЬЗОВАНИЕМ СВОЕГО ФАЙЛА.

    Пока мне влом писать этот раздел, т. к. я еще не занимался созданием графических файлов.

    -----------
    5) РАЗНОЕ
    -----------

    5.1 СОЗДАНИЕ ТАЙМЕРА.

    Таймер - это прикольная, но совершенно бесполезная вещь, которая показывает, сколько времени вы
    уже угробили на данную игру.
    - для начала создайте три Variable, которые будут отвечать за секунды, минуты и часы (допустим,
    0001:секунды, 0002:минуты, 0003:часы).
    - далее создайте событие:
    Event Start Condition - Parallel Process,
    Events Commands - общий список должен выглядеть так:
    <>CYCLE
    <>Wait: 1.0s
    <>Variable Ch:[0001:секунды]+ ,1
    <>FORK Optn:Varbl[0001:секунды]-60
    <>Variable Ch:[0002:минуты]+ ,1
    <>Variable Ch:[0001:секунды]Set,0
    <>
    :END Case
    <>FORK Optn:Varbl[0002:минуты]-60
    <>Variable Ch:[0003:часы]+ ,1
    <>Variable Ch:[0002:минуты]Set,0
    <>
    :END Case
    <>
    :END Cycle

    Теперь с объяснениями.
    - первая команда - Cycle. Не спрашивайте у меня, зачем она, просто так надо.
    - вторая команда - Wait... Она задает промежуток между повторениями последующих операций (а
    точнее - изменениями Variable). Поскольку нам нужно считать секунды, соответственно, значение
    Wait... должно быть равно 1 секунде (т. е. 10, поскольку в данной команде каждая единица
    соответствует 0.1 с).
    - третья команда - Change Variable..., нужно установить следующее:
    Choose Variable: 0001:секунды
    Set: +
    Operand: Set 1
    Таким образом, программа через интервал в 1 секунду будет прибавлять по одному значению к
    общей сумме указанного Variable. Наш таймер умеет считать секунды! Теперь нужно, чтобы он
    переводил эти секунды в минуты и часы.
    - четвертая команда - Fork Conditions..., нужно установить следующее:
    Variable: 0001:секунды
    Set: 60
    Далее ставим Change Variable...:
    Choose Variable: 0002:минуты
    Set: +
    Operand: Set 1
    А также Change Variable...:
    Choose Variable: 0001:секунды
    Set: Set
    Operand: Set 0
    Эти операции означают следующее: сперва мы поставили условие (Fork), что когда значение
    Variable 0001:секунды достигнет 60 (пройдет 60 секунд), то, во-первых, к Variable 0002:минуты
    прибавится 1, а во-вторых, значение Variable 0001:секунды станет 0. Секунды перешли в минуты.
    Осталось только перевести минуты в часы. Это делается аналогичным способом.
    - пятая команда - Fork Conditions...:
    Variable: 0002:минуты
    Set: 60
    Далее ставим Change Variable...:
    Choose Variable: 0003:часы
    Set: +
    Operand: Set 1
    А также Change Variable...:
    Choose Variable: 0002:минуты
    Set: Set
    Operand: Set 0

    Таймер готов! Теперь остается вывести его показания на экран. Сделать это можно где угодно
    командой Show Message... В текстовом окне пишем: "Вы играете уже \V[номер Variable часов]
    часов, \V[номер Variable минут] минут, \V[номер Variable секунд] секунд!"
    Для нашего конкретного случая это будет выглядеть так: "Вы играете уже \V[3] часов, \V[2]
    минут, \V[1] секунд! Не пора ли завязывать?"
    После всех этих операций не забудьте поставить событие таймера на всех картах, где будет
    происходить подсчет времени.
    За информацию о создании таймера БОЛЬШОЕ СПАСИБО человеку по имени MR. GREY
    (jadenzerox@hotmail.com).

    5.2 ПРЫЖКИ ЧЕРЕЗ ПРЕПЯТСТВИЯ.

    В данном разделе описываются способы, как можно заставить героя перепрыгнуть через провал,
    забраться на ящик и т. д., короче говоря, проникнуть в такое место, которое по умолчанию является
    непроходимыми (такие объекты в разделе ChipSets базы данных RPG Maker-а обозначаются значком X).
    Допустим, что вы хотите внести в вашу РПГ элемент экшна. В одном из подземелий имеются ловушки,
    наступая на которые герой получает ранения, а вы хотите сделать так, чтобы через них можно было
    бы перепрыгнуть.
    - создаем событие ловушки, в котором прописывается все то, что должно происходить с героем,
    если он имел глупость наступить на нее.
    - сверху рядом с ловушкой создаем такое событие:
    Position - Below Hero,
    Event Start Condition - Push Key,
    Events Commands - Move Event...:
    Object Character: Hero,
    Movement Route: Start Jump, Down, Down, End Jump.
    Теперь, встав на это событие, герой при нажатии кнопки действия прыгнет на следующую после
    ловушки клетку.
    - при необходимости размещаем аналогичные события вокруг ловушки, изменяя лишь направления
    прыжка.

    Теперь рассмотрим другой случай. Ваш герой убегает по коридору от огромного валуна и должен
    время от времени перепрыгивать через булыжники. Булыжники представляют собой "непроходимый
    тип почвы", и предолеть их (по вашей задумке) можно только прыжком.
    - создаем сверху от булыжника следующее событие:
    Position - Below Hero,
    Event Start Condition - Push Key,
    Events Commands - Move Event...:
    Object Character: Hero,
    Movement Route: Start Slip Through, Start Jump, Down, Down, End Jump, End Slip Through.
    Как видно, разница между двумя вариантами заключается в присутствии команды Start Slip Through,
    которая дает герою способность проходить через любые объекты. Команда End Slip Through
    возвращает его в обычный режим.

    Возможно, я добавлю в этот раздел еще несколько примеров. Точно не знаю...

    -----------------------------------------------------------------------------------------------

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

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

    ANDY JR (andrewjr@mail.ru)

    Copyright 2003 Andy Jr.
    All rights reserved.

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/vbdownloads.php?d...downloadid=106

  2. #2
    Маститый Аватар для Элрик
    Информация о пользователе
    Регистрация
    09.09.2010
    Сообщений
    1,284
    Записей в дневнике
    47
    Репутация: 24 Добавить или отнять репутацию

    По умолчанию

    Едрить простыня

  3. #3
    Гость Аватар для DesKarD
    Информация о пользователе
    Регистрация
    01.08.2015
    Адрес
    город Ромдо
    Сообщений
    486
    Записей в дневнике
    2
    Репутация: 14 Добавить или отнять репутацию

    По умолчанию

    Я знаю как вот это уместить в одну страницу:

    Цитата Сообщение от Валера
    По умолчанию за каждым игровым гражданином закрепляется одна произносимая им фраза.
    Переключатели позволяют закреплять по нескольку фраз за одним человеком, создавать цепочки
    последовательных событий и еще целую кучу всяких вещей.
    Выглядит это так:
    - после создания фразы (Show Message...) в командной странице (Events Commands) ставим
    переключатель (Change Switch... Set to ON).
    - создаем внутри персонажа новую страницу и в ней в графе Event Condition активизирум
    свежесозданный переключатель.
    - после этого пишем на странице новое сообщение (или любое другое действие).
    Теперь, произнеся свою первую фразу (что-то типа: "Йо!"), на дальнейшие расспросы персонаж
    будет отвечать второй фразой ("Привет"). Подобных фраз (страниц и переключателей) можно
    создавать сколько угодно. При желании можно зациклить произносимые ответы, т. е. персонаж при
    длительном допросе будет говорить: "Йо!", "Привет", "Йо!", "Привет"...
    - для этого на второй странице после указанной фразы (действия) нужно выключить переключатель
    (Change Switch..., Set to OFF). При таком раскладе, произнеся вторую фразу, персонаж будет
    возвращаться к фразе (действию) на первой странице.
    Когда разделено на кучу страниц ради одного фонового события потом самому можно заблудиться.
    ( если конечно не оставил комментарии на первой странице )
    Спойлер Собственно метод:



Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

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