![]() |
|
INNE Tworzenie NewGRF w NML #2 - parowóz Pt31 i inne pojazdy przegubowe. - Wersja do druku +- OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM] (https://forum.openttd.pl) +-- Dział: OpenTTD (https://forum.openttd.pl/forumdisplay.php?fid=1) +--- Dział: Dodatki (https://forum.openttd.pl/forumdisplay.php?fid=27) +--- Wątek: INNE Tworzenie NewGRF w NML #2 - parowóz Pt31 i inne pojazdy przegubowe. (/showthread.php?tid=950) |
Tworzenie NewGRF w NML #2 - parowóz Pt31 i inne pojazdy przegubowe. - TadeuszD - 09-11-2011 Tym razem zaprezentuję krótki tutorial opisujący budowę pojazdu przegubowego (ang.: articulated), dość często spotykanego w OTTD, zarówno wśród pociągów jak i samochodów. Inspirację do napisania tego dodatku NewGRF będzie stanowił polski parowóz Pt31. Opracowanie grafiki Zasady opracowywania grafik dla pojazdów przegubowych są w zasadzie identyczne, jak dla zwykłych pojazdów - dla każdego z członów pojazdu (w tym wypadku: lokomotywy i węglarki) należy opracować osobny zestaw spritesetów, ukazujących pojazd z każdej strony. W przypadku projektowania grafiki dla pojazdów przegubowych można jednak zastosować pewne triki, które w przypadku normalnych pojazdów są niedostępne. Jeden z takich trików będzie miał miejsce właśnie w przypadku omawianego parowozu Pt31. Powodem jego zastosowania jest długość oryginału. Pt31 jest bowiem drugim (zaraz po Pu29) najdłuższym polskim parowozem - jego całkowita długość to prawie 24m! Tymczasem w OTTD najdłuższy pojazd może mieć rozmiar 8/8 kratek, czyli zaledwie 32 pixele. Zastosowany trik polega na tym, że pojazd dwuczłonowy (lokomotywa + węglarka) może mieć już łącznie 2*8/8 kratek, czyli w sumie 64 pixele. Dodatkowo, te 64 pixele mogą być rozdzielone między człony nieproporcjonalnie, niezgodnie z teoretyczną długością tych członów: ![]() Obrazek powyżej przedstawia zasadę działania zastosowanego triku. Lokomotywa i jej węglarka będą miały nadal zaprogramowaną teoretyczną maksymalną długość 8/8, jednak graficznie będą wyglądały jakby miały długość 6/8 oraz 10/8. Część pixeli należących do węglarki została bowiem wykorzystana do odwzorowania znacznie dłuższej lokomotywy. Takie realistyczne odwzorowanie lokomotywy ma oczywiście swoje wady i zalety. Długa lokomotywa będzie się prezentowała znacznie lepiej niż oryginalne "ogryzki" z TTD. Będzie to jednak okupione wyraźnym jej "łamaniem" się na zakrętach oraz koniecznością budowy dłuższych stacji. Zaprojektowanie lokomotywy wymagało opracowania nowego szablonu, dostosowanego do rozmiaru 10/8. Do narysowania węglarki wystarczył natomiast standardowy szablon 8/8, wykorzystywany do projektowania innych pojazdów. Kompletny zestaw grafik obejmuje także widok parowozu, który będzie ukazywał się w menu zakupu pojazdów (purchase menu). Dzięki takiemu obrazkowi w menu zakupu będzie pojawiał się kompletny parowóz, a nie tylko jeden jego człon: ![]() Kod NML, służący do wczytania sprite-ów z wyżej przedstawionego zestawu grafik, będzie miał następującą postać: Kod: /* graphics definition */c.d.n. RE: Mój drugi NewGRF - parowóz Pt31. - TadeuszD - 11-11-2011 Parametry parowozu Następnym krokiem w projektowaniu parowozu jest zaprogramowanie jego parametrów. Struktura tych parametrów wygląda podobnie jak w przypadku poprzedniej drezyny WM-15A: Kod: /* Define the actual train */Znaczenie większości parametrów jest opisane w dokumentacji, zamieszczonej na OpenTTD Wiki. Niektóre z nich wymagają jednak dokładniejszego wytłumaczenia: speed (prędkość maksymalna) - niby wszystko jasne, lecz OTTD wprowadza szereg zaokrągleń w trakcie dokonywanych przeliczeń, przez co prędkość widoczna w grze czasem odbiega dość mocno od tej zadanej w GRF-ie. Dlatego należy ją doświadczalnie zwiększyć o 1-3 km/h, aby uzyskać wynik jak najbardziej zbliżony do żądanego. weight (ciężar) - w przypadku pojazdu przegubowego jest to masa całego pojazdu. Dla Pt31 podana jest więc suma ciężaru lokomotywy (106 ton) oraz jej węglarki (67 ton). tractive_effort_coefficient (współczynnik maksymalnej siły pociągowej) - współczynnik określający jaka część ciężaru pojazdu przekłada się na jego siłę pociągową. W przypadku pojazdów szynowych przyjmuje się 0.3 (30%). Dla parowozu współczynnik ten musi być jeszcze skorygowany ze względu na fakt, że nie wszystkie osie parowozu są napędzane. W przypadku Pt31 nacisk na jedną oś napędową wynosi 18,3 tony. Po przemnożeniu przez 4 osie mamy "zaledwie" ok. 74 ton masy czynnej w porównaniu ze 173 tonami masy całkowitej. Dodanie obsługi przegubowości Najistotniejszym etapem tworzenia pojazdu przegubowego jest napisanie odpowiednich funkcji (switch-y), odpowiedzialnych za realizację efektów przegubowości: Kod: /* Pt31 switches */... oraz podpięcie ich pod odpowiednie callback-i w sekcji graphics pojazdu: Kod: graphics {Callback-iem decydującym o istnieniu przegubowości jest callback articuladed_part. Podpiety pod niego swith switch_pt31_articulated jest wywoływany w trakcie tworzenia pojazdu wielokrotnie, w celu określenia identyfikatorów dodatkowych członów pojazdu. Za każdym wywołaniem swoitch-a w jego parametrze extra_callback_info1 znajduje się numer kolejnego członu pojazdu. Zwracaną przez switch wartością powinien być identyfikator tego kolejnego członu lub wartość 0xFF, oznaczająca koniec pojazdu. W naszym przypadku zarówno lokomotywa, jak i jej węglarka, powinny mieć dokładnie ten sam identyfikator (parowóz jest pojazdem nierozdzielnym), dlatego na pytanie o drugi człon pojazdu (extra_callback_info1 = 1) zwracany jest również identyfikator item_pt31. Drugi ze zdefiniowanych switch-y, switch_pt31_graphics odpowiada za właściwą wizualizację parowozu jako pojazdu przegubowego. Konieczność stworzenia tego switcha wynika z faktu, że wszystkie człony parowozu mają ten sam identyfikator. Musimy więc poinformowac grę, kiedy w ramach tego samego identyfikatora item_pt31 ma wyświetlić lokomotywę, a kiedy węglarkę. Decyzja ta jest podejmowana na podstawie parametru position_in_vehid_chain, który określa ni mniej, ni więcej, tylko kolejną pozycję danego członu w łańcuchu pojazdów o tym samym identyfikatorze. W pokazanym przypadku wartość ta jest jeszcze poddana operacji modulo 2, aby właściwe sprite-y były wyświetlane także dla kolejnych lokomotyw w składzie, jadących w tzw. "trakcji wielokrotnej". Trzeci switch, switch_pt31_visual_effect pełni bardzo podobną rolę, co poprzedni switch, lecz dotyczy "efektów specjalnych" wyświetlanych przez grę. Zadaniem tego switcha jest spowodowanie, że dym z komina będzie generowany jedynie przez lokomotywę. Węglarka będzie miała nieaktywne wszelkie efekty. Kompletny kod NewGRF Poniżej zamieszczam pełną treść plików, niezbędnych do skompilowania dodatku: custom_tags.txt Kod: VERSION :0.1.0lang/english.lng Kod: ##grflangid 0x01lang/polish.lng Kod: ##grflangid 0x30pt31.nml Kod: grf {Na koniec przedstawiam zrzut ekranu, przedstawiający różne przykłady szynowych pojazdów przegubowych pod OTTD :
|