W tym krótkim poradniku wyjaśnię jak silnik obsługuje tekstury celowników i jak dodać nową teksturę celownika.
Jak to działa1. Tekstury celownikówPliki dds w rozdzielczości 1024x1024.
2. plik configs\ui\textures_descr\ui_ingame.xmlTu definujemy wycinki tekstur z plików dds. Np.
<file name="wpn\wpn_crosshair_l85">
<texture id="wpn_crosshair_l85" x="0" y="0" width="1024" height="1024" />
</file>
Większość ma tylko 1 wycinek obejmujący całą teksturę ale wpn_crosshair ma dwa dodatkowe: wpn_crosshair_add_l i wpn_crosshair_add_r. Te są dodatkami, które pojawiają się po prawej i lewej stronie trybie widescreen
<file name="wpn\wpn_crosshair">
<texture id="wpn_crosshair" x="0" y="0" width="1024" height="1024" />
<texture id="wpn_crosshair_add_l" x="0" y="0" width="102" height="768" />
<texture id="wpn_crosshair_add_r" x="0" y="0" width="102" height="768" />
</file>
3. pliki configs\ui\scopes.xml i configs\ui\scopes_16.xmlscopes.xml jest używany w trybie 4:3 (5:4), scopes_16.xml w widescreen (16:10, 16:9), Pierwszy zawiera tylko tekstury 'główne' zdefiniowane powyżej przeskalowane do 1024x768 który jest swoistą 'matrycą' wszystkich elementów UI. Ten rozmiar jest potem automatycznie skalowany do ustawionej rozdzielczości ekranu.
<wpn_crosshair x="0" y="0" width="1024" height="768">
<auto_static x="0" y="0" width="1024" height="768" stretch="1">
<texture>wpn_crosshair</texture>
</auto_static>
</wpn_crosshair>
Przy drugim zaczynają się schody. Tu również 'matrycą' jest 1024x768 ale jest ona skalowana do widescreen (czyli 1280x768) a potem do danej ustawionej rozdzielczości. Musimy więc przeskalować szerokość danej tekstury x0.8 i przesunąć ją na środek. Dodatkowo dodajemy po prawej i po lewej wycinki wpn_crosshair_add_l i wpn_crosshair_add_r (również przeskalowane)
<wpn_crosshair x="0" y="0" width="1024" height="768">
<auto_static x="85" y="0" width="854" height="768" stretch="1">
<texture>wpn_crosshair</texture>
</auto_static>
<auto_static x="0" y="0" width="86" height="768" stretch="1">
<texture>wpn_crosshair_add_l</texture>
</auto_static>
<auto_static x="939" y="0" width="85" height="768" stretch="1">
<texture>wpn_crosshair_add_r</texture>
</auto_static>
</wpn_crosshair>
Dodajemy nowy celownikDodamy teraz nowy celownik typu 'Gnomus'
1. TeksturaJak je przygotować? Bierzemy teksturę w proporcjach 4:3 (1024x768, 1360x1024 ew. 1280x1024) i skalujemy ją z wyłączonym 'maintain aspect ratio' do 1024x1024. Zapisujemy w textures\wpn\my_crosshair.dds jako DXT5, 8bit alpha, bez MIP-map.
2. definicja wycinkówW pliku configs\ui\textures_descr\ui_ingame.xml Definiujemy wycinki tekstury wraz z dodatkowymi częściami po lewej i prawej. Musimy to zrobić bo jeśli użyjemy domyślnych będziemy mieli 2 czarne pasy w widescreen ponieważ domyślna tektura wpn_crosshair nie jest w tych częściach przezroczysta. Dodajemy:
<file name="wpn\my_crosshair">
<texture id="my_crosshair" x="0" y="0" width="1024" height="1024" />
<texture id="my_crosshair_l" x="0" y="0" width="102" height="102" />
<texture id="my_crosshair_r" x="0" y="0" width="102" height="102" />
</file>
3. \configs\ui\scopes.xml i \configs\ui\scopes_16.xmlUkładamy wycinki na matrycy dla 'normalnej' rozdzielczości. Dodajemy do \configs\ui\scopes.xml:
<my_crosshair x="0" y="0" width="1024" height="768">
<auto_static x="0" y="0" width="1024" height="768" stretch="1">
<texture>my_crosshair</texture>
</auto_static>
</my_crosshair>
Układamy wycinki na matrycy dla widecreen. Dodajemy do \configs\ui\scopes_16.xml:
<my_crosshair x="0" y="0" width="1024" height="768">
<auto_static x="85" y="0" width="854" height="768" stretch="1">
<texture>my_crosshair</texture>
</auto_static>
<auto_static x="0" y="0" width="86" height="768" stretch="1">
<texture>my_crosshair_l</texture>
</auto_static>
<auto_static x="939" y="0" width="85" height="768" stretch="1">
<texture>my_crosshair_r</texture>
</auto_static>
</wpn_crosshair>
4. config broniNasz nowy celownik chcemy mieć tylko w karabinie Vintorez. Otwieramy configs\weapons\w_vintorez.ltx i zmieniamy linie
scope_texture = my_crosshair
Odpalamy grę i cieszymy się nowym celownikiem w Vintorezie.
UWAGA. Opisany wyżej (w części Jak to działa) sposób interpretacji tekstur jest taki sam dla WSZYSTKICH elementów interfejsu użytkownika (UI) we WSZYSTKICH grach serii S.T.A.L.K.E.R i może być wykorzystany np. przy tworzeniu własnych HUDów.