Редактирование OSD - Форум
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: friendkiller, Grave, Dreamer 
Форум » Main partitio/ Главный раздел » Tutorials/ Уроки » Редактирование OSD (by RAXAT)
Редактирование OSD
KarmanДата: Воскресенье, 22.11.2009, 22:28 | Сообщение # 1
Сообщений: 2773
Статус:
Начнём с того, что же всё-таки такое OSD?
OSD расшифровывается как "On Screen Display", говоря по-русски, это информация, которая отображается на экране самым верхним слоем, в любой игре OSD элементами традиционно являются меню, окна, курсоры, интерфейсы и тд, иными словами, всё, что находится над рабочей областью. В нашем случае OSD элементы это, главным образом, спидометр, тахометр, индикатор пройденного пути, индикаторы ABS и ASR, индикаторы турбо и нос, индикатор повреждения.

В SLRR весь код для OSD написан в исполняемом файле, поэтому основная панель OSD (LongOSDgauge) будет отображаться по умолчанию, в случае если игра не обнаружит данных OSD, введённых пользователем.

Как менять OSD? Игра устроена таким образом, что запрос OSD данных идёт через кузов машины, т.е. чтобы поменять OSD на всех машинах в игре, нужно лезть в CFG файл кузова каждой машины и там прописывать полностью все строки создания OSD. В этом туториале я объясню принцип замены OSD на основе Baiern CoupeSport GTIII.

Действовать будем пошагово.

Шаг 1. Подготовка к работе

Открываем файл cars\racers\Baiern_data\scripts\_main_CoupeSport_GT_III.cfg и помещаем курсор между строк:

[/code]steering -0.378 0.055 -0.343 0.000 -0.419 0.000 0.01 sphere 0.1
nocollision
render 0x0003001C

<ПОМЕСТИТЕ КУРСОР МЫШИ СЮДА>

seat -0.391 -0.340 0.080 0.000 0.410 0.000
pedals -0.391 -0.350 -0.700
cockpit_speed -0.448 0.120 -0.510 0.000 0.000 0.000 0x00020037 2.2 -0.009 -2.2 2.2
cockpit_rpm -0.328 0.120 -0.510 0.000 0.000 0.000 0x00020037 2.2 -0.0004 -2.2 2.2

Шаг 2. Добавление строк OSD
В том месте, где мы поставили курсор мыши, мы вставляем следующее:

Code
osd_gauge  0x0002F017 1.200 -0.790 0.000   0xFFFFFFFF    %03.0f
osd_spdpin    0x0002F009 1.447 -0.700 0.0001   2.489 -0.0157134    -2.3 2.3
osd_rpmpin    0x0002F010 0.883 -1.126 0.0001   2.2 -0.0005    -2.3 2.3
osd_gear  0x00020058 0.460 0.807 0.0001  0xFFFF0000    N123456R
osd_speed  0x00020058 0.741 0.531 0.0001   0xFFFF0000    %03.0f

osd_damage    0x00020057 0.926 0.855 -0.0001
osd_mileage    0x00020058 0.705 0.760 -0.0001
osd_nos  0x0002005C 0.705 0.856 -0.0001
osd_turbo  0x0002005C 0.705 0.905 -0.0001

osd_abs  0xFFFFFFFF 0.000 0.000 0.000
osd_asr  0xFFFFFFFF 0.000 0.000 0.000
osd_hbrake    0xFFFFFFFF 0.000 0.000 0.000
osd_emergency    0xFFFFFFFF 0.000 0.000 0.000

После добавления этих строк нужно понять какая строка и за что отвечает. Рассмотрим сначала описания строк:

-> osd_gauge - приборная панель
-> osd_spdpin - стрелка спидометра
-> osd_rpmpin - стрелка тахометра
-> osd_nospin - стрелка N2O
-> osd_gear - индикатор текущей передачи трансмиссии
-> osd_speed - индикатор скорости
-> osd_rpm - индикатор оборотов двигателя
-> osd_damage - индикатор повреждений машины
-> osd_mileage - индикатор пройденного пути
-> osd_nos - индикатор количества N2О
-> osd_turbo - индикатор давления турбо
-> osd_abs - датчик ABS
-> osd_asr - датчик ASR
-> osd_hbrake - датчик применения ручного тормоза
-> osd_emergency - датчик разрушения двигателя

Шаг 3. Настройка OSD элементов.
Теперь, когда мы знаем какая строка что значит, мы должны разобраться в непонятных параметрах строк.

ОЧЕНЬ ВАЖНО: если указать параметры неправильно или в неправильном порядке, элемент не отобразится на экране либо будет неподвижен!

Приступим к расшифровке:

- Элементы со специальными параметрами (т.е. параметры для них неприменимы для других элементов)

Code
//элемент
osd_spdpin    0x0002F009 1.447 -0.700 0.0001   2.489 -0.0157134    -2.3 2.3
osd_rpmpin    0x0002F010 0.883 -1.126 0.0001   2.2 -0.0005    -2.3 2.3

//параметры: (одни и те же для двух этих элементов)
ID рендера || координаты XYZ || параметр цены деления 1 || параметр цены деления 2 || max поворот стрелки слева || max поворот стрелки справа|

Code
//элемент
osd_gear  0x00020058 0.460 0.807 0.0001  0xFFFF0000    N123456R

//параметры:
ID рендера || координаты XYZ || цвет в HTML формате || параметры коробки передач

Code
//элемент
osd_speed  0x00020058 0.741 0.531 0.0001   0xFFFF0000    %03.0f
osd_rpm   0x00020058 0.400 0.850 0.0001   0xFFFF0000    %03.0f

//параметры: (одни и те же для двух этих элементов)
ID рендера || координаты XYZ || цвет в HTML формате || начальное значение, если стоит цифровой спидометр/тахометр

- Для всех остальных элементов примены следующие параметры: (на примере osd_gauge)

Code
//элемент
osd_gauge  0x0002F017 1.200 -0.790 0.000   0xFFFFFFFF  %03.0f

//параметры:
ID рендера || координаты XYZ || цвет в HTML формате || значение, если присутствуют числовые параметры

У вас сразу же возник вопрос, а откуда брать ID рендеров? В игре есть уже встроенные ID, они прописаны в файле cars.rpk. Ниже описаны все ID, которые я использовал в своём примере:

Code
Стандартные ID, их можно найти в cars.rpk:
0x00020058 //цифровой шрифт
0x00020057 //шрифт индикатора повреждений
0x0002005C //шрифт слайдера (N2О/турбо)
0xFFFFFFFF //пустой рендер, используйте его для того, чтобы скрыть OSD элемент, он не будет отображаться на экране

Собственные ID, их нужно настраивать самому:
0x0002F017 //круглая текстура приборной панели
0x0002F009 //текстура стрелки спидометра
0x0002F010 //текстура стрелки тахометра    

Напомню, что в данном случае в 4 регистре стоит цифра 2, эта цифра обозначает порядковый номер пути к файлу cars.rpk, который содержит метки с информацией о ресурсах. Во многих машинах путь имеет номер 2, однако некоторые моддеры меняют его порядковый номер, поэтому если вы видите нестанадртную машину, то рекомендуется проверить порядковый номер пути cars\ в RPK файле машины, считать его нужно сверху вниз, первая строка имеет порядковый номер 1.

В моём примере есть скрытые элементы, если вы их не увидите, то вам надо заменить ID рендера с 0xFFFFFFFF на любой другой рабочий ID.

Шаг 4. Добавление собственных ID рендеров.
Добавлять свой OSD рендер в игру так же просто, как добавлять рендер ID для детали, однако у OSD рендеров есть свои особенности, рассмотрим каждую из них.

- Статический OSD объект.
-> Это обыкновенный рендер, без особых параметров, он не имеет динамики, таковым может являться рендер приборной панели (osd_gauge), он просто стоит на нижнем слое и никак не меняется. Внутри SCX файла для такого рендера может находиться любое количество объектов с любыми именами. Рендер будет иметь флаг flags 4.000.

- OSD объект типа Slider.
-> Это динамический рендер, работающий при помощи спрайтов, т.е. игра читает SCX файл, ищет в нём подобъекты (они и будут спрайтами) и "перелистывает" эти спрайты один за другим, создавая эффект анимации. К примеру, объект типа Slider это индикатор давления турбо, он состоит из 8 спрайтов-прямоугольников, каждый из которых описывает подобие анимации прогресс бара (прогресс бар это что-то типа полоски загрузки). Внутри SCX файла такого рендера должно быть более одного объекта с именами "a,b,c,d,e,f...", игра пролистывает каждый поимённо начиная с "a", назначая каждый последующий объект на новый спрайт, например объект с именем "d" будет показывать состояние среднего давления турбо. Такой рендер также будет иметь флаг flags 4.000.

- OSD объект типа Switch.
-> Это динамический рендер, также работающий при помощи спрайтов, однако, в отличие от объекта типа Slider, в этом рендере всего лишь 2 спрайта: один показывает активное состояние индикатора, другой - пассивное. Примером объекта типа Switch является индикатор ABS. Внутри SCX файла для этого рендера должно быть 2 спрайта с именами "a,b". В связи с особенностями этого типа OSD объектов, рендер вообще не будет иметь никаких флагов, если они у вас будут, их надо будет удалить.

Таким образом, типичным примером OSD рендера в RPK будет вот такая метка:

Code
<FILE 00000026.res >
typeof    14
superid    0x00000031
typeid    0x00000058
alias    lcdfont
isparentcompatible    1.00
</FILE>
<FILE 00000026.rsd >
mesh 0x0000005A
flags 4.000
texture 0x00000052
</FILE>

Небольшие хитрости.
В игре можно создавать как аналаговые, так и цифровые спидометры и тахометры. Например, для аналогового спидометра нужны элементы osd_speed (фон спидометра)

и osd_spdpin(стрелка), тут можно сделать хитрость: создаём новую текстуру для osd_gauge, в которую будет включен фон для спидометра, скрываем стрелку через задание значения 0xFFFFFFFF вместо ID рендера, а в значение ID рендера для строки osd_speed пишем 0x00020058, это ID цифрового шрифта, таким образом у нас будет цифровой спидометр, который мы можем перемещать в любую точку экрана. Тоже самое можно сделать с osd_rpm, тогда мы сможем увидеть точные значения оборотов двигателя в любой момент времени.

Ещё одна небольшая хитрость: масштабы рендеров можно менять через отдаление/приближение их по оси Z (третье число в XYZ координатах).

В игре есть стрелка N2O (osd_nospin), я пробовал применять к ней различные параметры, но она почему-то по-прежнему стоит неподвижно, я думаю, есть способ заставить её двигаться.

Наконец, длина и ширина OSD объектов в SCX объектов в максе задаётся в пикселях, один пиксель равен одному пикселю на экране в игре.

Вот вроде бы и всё, теперь вы можете создавать свои OSD для любой машины!

Напомню, что весь вышеописанный материал добыт лично мной путём многочисленных экспериментов, поэтому нигде на других сайтах вы эту информацию получить на данный момент не сможете, а если всё-таки сможете, то передайте лично от меня привет шустрым воришкам, которые умудрились быстрее остальных без моего согласия стащить этот драгоценный туториал с нашего сайта Согласовано с RAXAT'om wink

RAXAT


 
Форум » Main partitio/ Главный раздел » Tutorials/ Уроки » Редактирование OSD (by RAXAT)
Страница 1 из 11
Поиск:


Хостинг от uCoz