Глава XX. Продвинутый маппинг.
|
§ 20.17 Подсчет фрагов на табло
|
В данной статье мы расскажем о создании табло с подсчетом фрагов. Такое табло Вы могли видеть на карте Ka_100x100.
При каждом убийстве игрока счетчик увеличивается на единицу. Счетчик
имеет 3 разряда: единицы, десятки, сотни, т.е. максимальное количество
фрагов составляет 999, затем происходит обнуление.
Мы будем очень активно использовать следующие энтити-объекты:
Приготовьтесь к созданию 94 объектов и выставлению их свойств :) Ничего страшного нет, вся система построена как бы из повторяющихся звеньев. Каждое звено состоит из 3-4 объектов, свойства которых очень схожи.
Итак, давайте посмотрим, как будет выглядеть табло:
Нолики и другие цифры, которые будут появляться при каждом фраге, не просто картинки, это объекты func_button
с нанесенными на них цифрами. Когда убьют какого-либо игрока, кнопка с
цифрой «0» поднимется вверх, а сверху опустится кнопка с цифрой «1». При
следующем фраге кнопка с цифрой «1» поднимется вверх, а сверху
опустится кнопка с цифрой «2» и т.д.
Средняя цифра меняется только при каждом десятом фраге. Левая цифра (разряд сотен) меняется только при каждом сотом фраге.
Изначально кнопку с цифрой «0» необходимо разместить так, чтобы ее
было видно на табло. Остальные кнопки с цифрами от 1 до 9 нужно
разместить над кнопкой 0 так, чтоб они были скрыты в «конструкции
табло». Всего необходимо создать 30 кнопок (по 10 на разряды
единиц, десятков и сотен). Из этих 30 кнопок сразу будут видны только 3 —
это изначальные нули, остальные 27 будут скрыты в табло.
Кстати, мы рекомендуем конструкцию табло (т.е. все, что окружает кнопки) превратить в func_wall,
чтобы при компиляции свет мог проникнуть через конструкцию (как
известно, энтити-объекты пропускают свет) и осветил текстуры цифр (иначе
текстуры получатся затемненными).
О подсчете фрагов
Теперь расскажем о том, как будут подсчитываться фраги.
У нас есть замечательный энтити-объект game_counter, который считает свои активации и по достижении определенного значения активирует другой объект.
Мы создадим 3 таких объекта:
- Первый будет считать отдельные фраги (он будет переключать кнопки единиц)
- Второй будет считать до 10 фрагов (он будет переключать кнопки десятков)
- Третий будет считать до 100 фрагов (он будет переключать кнопки сотен)
Нам нужно, чтобы при каждом фраге все 3 счетчика увеличивали свое значение на 1. Для этого воспользуемся объектом multi_manager, в который запишем активацию всех 3-х счетчиков. Имя для multi_manager'а нужно выставить как game_playerkill.
Это одно из пяти специальных имен, которое позволяет активировать
объект при убийстве игрока. Таким образом, теперь при каждом фраге у нас
будет автоматически активироваться multi_manager, который в свою
очередь активирует 3 счетчика.
|
Multi_manager (этот объект активируется при каждом фраге) |
Name: game_playerkill (имя должно быть именно таким!)
1counter — 0 (активация счетчика единиц по имени 1counter через 0 секунд)
10counter — 0 (активация счетчика десятков по имени 10counter через 0 секунд)
100counter — 0 (активация счетчика сотен по имени 100counter через 0 секунд)
|
|
|
Счетчики game_counter с именами: 1counter, 10counter,
100counter активируют кнопки с цифрами. Например, кто-то набрал 1 фраг.
Срабатывает multi_manager. Тут же все три счетчика увеличивают свое
значение на 1. Самый первый счетчик ведет отсчет отдельных фрагов, а
значит он должен при каждой активации переключать кнопки единиц.
Нам необходимо сделать так, чтобы активировав первую кнопку, в
следующий раз счетчик активировал бы вторую кнопку, затем третью и т.д.,
то есть необходимо, чтобы параметр «Target» счетчика менялся по кругу
от 0 до 9 кнопки. Это можно организовать при помощи объекта trigger_changetarget.
Ниже приведена схема работы одного из счетчиков.
Предположим, что кто-то набрал фраг. В этом случае возникает следующая цепочка действий:
- Счетчик game_counter увеличивает свое значение на 1
- Затем он активирует первый multi_manager (на схеме левая красная стрелка)
- Multi_manager поднимает кнопку «0»
- Multi_manager опускает кнопку «1» туда, где только что была кнопка «0»
- Multi_manager запускает первый объект trigger_changetarget (на схеме CT1)
- Trigger_changetarget перенаправляет счетчик с первого multi_manager'а на второй
Дальше действия развиваются по второй красной стрелке на схеме (все действия аналогичные).
- Счетчик game_counter увеличивает свое значение на 1
- Активирует второй multi_manager (вторая красная стрелка)
- Multi_manager поднимает кнопку «1»
- Multi_manager опускает кнопку «2» туда, где только что была кнопка «1»
- Multi_manager запускает второй объект trigger_changetarget (на схеме CT2)
- Trigger_changetarget перенаправляет счетчик со второго multi_manager'а на третий
Тоже самое происходит при смене кнопки «2» на кнопку «3» и т.д. до
кнопки «9». Таким образом, для разряда единиц необходимо создать 10
подобных звеньев из multi_manager'а, двух кнопок и trigger_changetarget
(всего: 30 объектов).
Для раздела десятков все тоже самое (нужно создать еще 30 объектов,
считая кнопки десятков), единственная разница в свойствах счетчика — он
активирует кнопки через каждые 10 фрагов, а не через каждый фраг. Для
сотен — еще 30 объектов. А счетчик сотен активирует кнопки через каждые
сто фрагов, т.е. довольно редко.
Рекомендуем размещать счетчики единиц, десятков и сотен рядом с
соответствующими мульти_менеджерами и прочими объектами (чтобы не
запутаться). Вы можете посмотреть, как это сделано на нашей тестовой
карте.
Свойства объектов для счетчика единиц
Ниже мы приводим свойства самого первого звена объектов (на схеме к этому звену ведет левая красная стрелка).
|
Game_counter (счетчик единиц) |
Name: 1counter (имя счетчика единиц)
Target: m0 (сюда необходимо записать имя самого первого объекта multi_manager, см. схему выше)
Initial Value: 0 (начальное значение счетчика — 0)
Limit Value: 1 (конечное значение, достигнув которого, счетчик
начнет активировать кнопки; т.к. это счетчик единиц, то необходимо
поставить значение 1)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value»
|
|
|
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты) |
Name: m0 (имя данного объекта)
btn0 — 0 (поднимает кнопку «0»)
btn1 — 0 (опускает кнопку «1»)
ct0 — 0 (запускает объект trigger_changetarget)
|
|
|
Func_button (кнопка «0», разряд единиц) |
Name: btn0 (имя кнопки «0» из разряда единиц)
Angle: Up (направление движения вверх)
Speed: 200 (скорость движения)
Lip: -8 (этот параметр управляет расстоянием, на которое
перемещается кнопка; отрицательное значение увеличивает расстояние,
положительное уменьшает)
Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
|
|
|
Func_button (кнопка «1», разряд единиц) |
Name: btn1 (имя кнопки «1» из разряда единиц)
Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло)
Speed: 200 (скорость движения)
Lip: -8 (этот параметр управляет расстоянием, на которое
перемещается кнопка; отрицательное значение увеличивает расстояние,
положительное уменьшает)
Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
|
|
|
Trigger_changetarget (меняет параметр «Target» счетчику единиц) |
Name: ct0 (имя данного объекта)
Target: 1counter (здесь указывается имя счетчика единиц)
New Target: m1 (означает, что в следующий раз счетчик будет
активировать объект по имени m1, т.е. следующий мульти_менеджер из
второго звена)
|
|
|
Это первое звено объектов, которые меняют цифру 0 на цифру 1. Как Вы понимаете, необходимо сделать еще 9 таких звеньев.
Свойства объектов для счетчика десятков
Ниже мы приводим свойства первого звена объектов для счетчика десятков.
|
Game_counter (счетчик десятков) |
Name: 10counter (имя счетчика десятков)
Target: m00 (сюда необходимо записать имя самого первого объекта multi_manager в звене десятков)
Initial Value: 0 (начальное значение счетчика — 0)
Limit Value: 10 (конечное значение, достигнув которого, счетчик
начнет активировать кнопки; т.к. это счетчик десятков, то необходимо
поставить значение 10)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value»
|
|
|
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты) |
Name: m00 (имя данного объекта)
btn00 — 0 (поднимает кнопку «0» в разряде десятков)
btn11 — 0 (опускает кнопку «1» в разряде десятков)
ct00 — 0 (запускает объект trigger_changetarget)
|
|
|
Func_button (кнопка «0», разряд десятков) |
Name: btn00 (имя кнопки «0» из разряда десятков)
Angle: Up (направление движения вверх)
Speed: 200 (скорость движения)
Lip: -8 (этот параметр управляет расстоянием, на которое
перемещается кнопка; отрицательное значение увеличивает расстояние,
положительное уменьшает)
Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
|
|
|
Func_button (кнопка «1», разряд десятков) |
Name: btn11 (имя кнопки «1» из разряда десятков)
Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло)
Speed: 200 (скорость движения)
Lip: -8 (этот параметр управляет расстоянием, на которое
перемещается кнопка; отрицательное значение увеличивает расстояние,
положительное уменьшает)
Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
|
|
|
Trigger_changetarget (меняет параметр «Target» счетчику десятков) |
Name: ct00 (имя данного объекта)
Target: 10counter (здесь указывается имя счетчика десятков)
New Target: m11 (означает, что в следующий раз счетчик будет
активировать объект по имени m11, т.е. следующий мульти_менеджер из
второго звена)
|
|
|
Это первое звено объектов, которые меняют цифру 0 на цифру 1 в разряде десятков. Дальше необходимо создать еще 9 таких звеньев.
Свойства объектов для счетчика сотен
Ниже мы приводим свойства первого звена объектов для счетчика сотен.
|
Game_counter (счетчик сотен) |
Name: 100counter (имя счетчика сотен)
Target: m000 (сюда необходимо записать имя самого первого объекта multi_manager в звене сотен)
Initial Value: 0 (начальное значение счетчика — 0)
Limit Value: 100 (конечное значение, достигнув которого,
счетчик начнет активировать кнопки; т.к. это счетчик сотен, то
необходимо поставить значение 100)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value»
|
|
|
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты) |
Name: m000 (имя данного объекта)
btn000 — 0 (поднимает кнопку «0» в разряде сотен)
btn111 — 0 (опускает кнопку «1» в разряде сотен)
ct000 — 0 (запускает объект trigger_changetarget)
|
|
|
Func_button (кнопка «0», разряд сотен) |
Name: btn000 (имя кнопки «0» из разряда сотен)
Angle: Up (направление движения вверх)
Speed: 200 (скорость движения)
Lip: -8 (этот параметр управляет расстоянием, на которое
перемещается кнопка; отрицательное значение увеличивает расстояние,
положительное уменьшает)
Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
|
|
|
Func_button (кнопка «1», разряд сотен) |
Name: btn111 (имя кнопки «1» из разряда сотен)
Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло)
Speed: 200 (скорость движения)
Lip: -8 (этот параметр управляет расстоянием, на которое
перемещается кнопка; отрицательное значение увеличивает расстояние,
положительное уменьшает)
Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
|
|
|
Trigger_changetarget (меняет параметр «Target» счетчику сотен) |
Name: ct000 (имя данного объекта)
Target: 100counter (здесь указывается имя счетчика сотен)
New Target: m111 (означает, что в следующий раз счетчик будет
активировать объект по имени m111, т.е. следующий мульти_менеджер из
второго звена)
|
|
|
Это первое звено объектов, которые меняют цифру 0 на цифру 1 в разряде сотен. Дальше необходимо создать еще 9 таких звеньев.
Вот и все нехитрое устройство счетчика фрагов :) Думается, немногие
мапперы дочитают эту статью до конца, но поверьте, придумать такое, да
еще и понятно описать оч-ч-чень трудно. В любом случае Вы можете скачать
нашу карту-пример и скопировать счетчик на свою карту. Используйте на
здоровье!
frag-o-matic.zip [93Кб] — в архиве карта-пример в форматах BSP и RMF.
|