Niestety, ale w większości modów dodających nowe samodzielne miasto brakuje nawigacji dla ruchu samochodowego, np. Costa Nostra, Commision Mod, czy nawet najnowszy The Lost of Family Mod. Dlatego postanowiłem napisać poradnik jak taką sieć nawigacji utworzyć.

Sieć nawigacji ruchu samochodowego jest przechowywana w pliku road.bin Do jego tworzenia i edycji służy program Road.bin Editor autorstwa djbozkosza. Przetłumaczoną przeze mnie na polski wersję wraz z podręcznikiem użytkowania można znaleźć pod powyższym linkiem. Mam prośbę do administracji, aby dodać tę wersję na stronę główną do działu Pliki / Mafia: The City of Lost Heaven / Narzędzia, ponieważ obecnie brakuje tam tego programu, a jest on dosyć ważny. Program ten w przeciwieństwie do niektórych innych mafijnych narzędzi, jest w pełni stabilny – nie uszkadza pliku i nie zawiesza się.



Na początku zacznijmy od teorii.

Wyróżniamy dwa typy punktów:
Punkt skrzyżowania – definicje numerów punktów, w których jest wybór kilku punktów drogi.
Punkt drogi – tworzą prawdziwą drogę, te punkty są używane między punktami skrzyżowania.

W punktach skrzyżowań wyróżniamy następujące właściwości:
Pozycja – współrzędne punktu; punkt musi być umieszczony na środku skrzyżowania

Prędkość – ustala maksymalną dopuszczalną prędkość, z jaką mogą jechać samochody. Należy dawać mniejsze wartości przy ostrych skrętach.

Semafor – ruch na skrzyżowaniu jest kontrolowany przez światła drogowe


Punkty skrzyżowań zawierają ponadto właściwości dla czterech kierunków (nie wszystkie muszą być używane):

Łącze kierunku punktu drogi – przez ten punkt samochody jadą do następnej drogi (jeżeli łącze jest nieużywane, samochody nie jadą w tym kierunku i wpisane właściwości będą ignorowane)

Dalekie aktywne łącze punktu skrzyżowania – łącze do punktu skrzyżowania na końcu drogi powinno być wpisane, aby w tym kierunku były generowane samochody (jeśli nie będzie wpisane, droga będzie istnieć (używane np. przez AI), ale samochody nie będą generowane w tym kierunku)

Ta droga jest podobna, ale w przeciwnym kierunku nie ustawiono dalekiego aktywnego punktu skrzyżowania – to uniemożliwia generowanie samochodów w przeciwnym kierunku.


Dystans dalekiego punktu skrzyżowania – aby wyliczyć dystans kliknij na Oblicz lub użyj opcji w Menadżerze właściwości

Kąt w radianach – kąt między punktami skrzyżowania (standardowo ustawiony na 3,14 rad = 180°)

Priorytet – ustala pierwszeństwo na skrzyżowaniu

- priorytet: 0 — 100 – pierwszeństwo ma samochód jadący do skrzyżowania
- priorytet: 1 — 100 – kierunek wyznacza pierwszeństwo przejazdu


Na drodze skrzyżowania nie można ustawić we wszystkich kierunkach priorytetu 1 — 100, ponieważ jeśli byłby on we wszystkich kierunkach, powstaje impas – samochody w pierwszym kierunku czekają, aż samochody w drugim kierunku będą jechać, a w drugim kierunku samochody także czekają, aż samochody w pierwszym kierunku przejadą. Centrum drogi skrzyżowania jest wolne. Jeśli wszystkie kierunki mają priorytet 0 — 100, może także powstać impas, bo samochody rozgałęziające mogą krzyżować się na drodze z drugimi i zatrzymywać się.

Typy czterech pasów ruchu i ich dystansów:
- typ pasa ruchu: 0 – niedostępny - na zewnętrznym pasie ruchu
- typ pasa ruchu: 1 – niedostępny - na wewnętrznym pasie ruchu (np.: ruch tramwajowy)

- typ pasa ruchu: 2 – ruch drogowy
- typ pasa ruchu: 3 – pas ruchu do podłużnego parkowania


W punktach drogi wyróżniamy następujące właściwości:
Pozycja – współrzędne punktu; punkt musi być umieszczony na środku drogi
Prędkość – samochody jeżdżą z maksymalną prędkością, dlatego zaleca się regulowanie prędkości na zakrętach (patrz Menadżer właściwości)
Bliski poprzedni / następny punkt skrzyżowania / drogi – przez te łącza jeżdżą samochody
Dalekie poprzednie / następne łącze punktu skrzyżowania – te łącze ma nieznane przeznaczenie, być może służy ono do szybkiego szukania najkrótszej drogi przez AI


Przygotowanie
● Po załadowaniu wymaganej misji w Mafii proszę przejść do systemu operacyjnego, uruchomić Road.bin Editor i otworzyć (PlikOtwórz... ) plik road.bin tej samej misji.
● Następnie uruchom narzędzie Mafia.GetPos.
● Jeśli będziesz poruszał się w grze to powinieneś widzieć w Mafia.GetPos aktualną pozycję, w której obecnie się znajdujesz.
● W celu wygenerowania punktów kliknij Eksportuj do pliku różnicy (Ctrl + E) i zapisz plik w diff/CHED.chg. Zostają zapisane punkty, które są w zasięgu właściwie wybranego punktu. Skopiuj wszystkie 8 modeli punktów z folderu models tego edytora do folderu Mafia/models Poniższy skrypt wstaw do pliku scene2.bin tej samej misji za pomocą BScriptView 4 – 6 (menu WstawInne) lub DCED 2:
Kod:
dim_flt 1
// naciśnięcie (F1) wyświetla punkty nawigacji
label CHE
wait 1000
ctrl_read 0, OBJECTIVES
if flt[0] = 1, -1, CHE
cleardifferences
loaddifferences "CHED.chg"
goto CHE

Jeśli zdecydujesz się skopiował ten kod z pliku readme dołączonego do folderu programu, zwróć uwagę na myślnik – musi być " a nie ”, fl pisane jako dwa oddzielne znaki, w ctrl_read ma być dolny ukośnik, a nie spacja z podkreśleniem. Jeśli prawidłowo zapisałeś kod po wciśnięciu F1 – cele, powinny zwizualizować się punkty.
● Do znajdowania współrzędnych można używać również Mafia World Editora.

Tworzenie punktów
● Przesuń postać w grze do miejsca, w którym chcesz utworzyć punkt.
● Następnie skopiuj pozycję z Mafia.GetPos i w Road.bin Editorze wybierz EdycjaDodaj punkt... (Ctrl + I), wklej dane punktu.
● Aby wkleić nowe współrzędne kliknij przycisk obok współrzędnych. Następnie należy wypełnić inne parametry (patrz tabela powyżej). Następnie kliknij przycisk Wstaw, aby wstawić nowy punkt.
● Powtarzaj poprzednie trzy kroki do momentu utworzenia wymaganej liczby punktów w obszarze misji.
● W międzyczasie, powinieneś sprawdzić miejsce punktów w grze przez eksportowanie pliku różnicy i naciśnięcie klawisza F1.

Tworzenie łączy
● Możesz tworzyć łącza w głównym oknie edytora.
● Powyżej zostały wyjaśnione wszystkie rodzaje połączeń, aby poprawnie łączyć punkty.
● Po wszystkich modyfikacjach należy użyć opcji Oblicz dystans dalekiego punktu skrzyżowania w Menadżerze właściwości.

Edycja i usuwanie punktów i ich łączy
● Możesz używać głównego okna do zarządzania punktami i łączami. W celu usunięcia punktu kliknij EdycjaUsuń punkt (Delete).
● Można również usunąć łącze poprzez ustawienie wartości na -1.

Zapisywanie
● W celu zapisania kliknij plik PlikZapisz.

Dodanie obiektu ruchu do pliku scene2.bin
Road.bin zawiera tylko nawigację, aby samochody jeździły po zrobionej przez nas trasie należy dodać je jeszcze podwójnie do pliku scene2.bin – jako obiekt definicji i punkt w obiektach standardowych. Można to zrobić za pomocą programu DCED 2, ale należy uważać, bo program ten jest niestabilny – wiesza się, czasami uszkadza edytowany plik scene2.bin. Najlepiej zrobić to w ten sposób: otworzyć jakąś oryginalną misję zawierającą obiekt definicji samochodów (np. FREEITALY) i eksportować go, potem otworzyć plik scene2.bin misji, którą tworzymy i zainportować ten plik, nacisnąć ikonkę zapisu i zamknąć program (przy pytaniu o zapisanie zmian nacisnąć Nie). Ponownie włączyć program i otworzyć plik i dodać w standardowym obiektach punkt o takiej samej nazwie jak wcześniejszy obiekt definicji (np. gdy obiekt definicji nazywa się cars, to punkt także należy tak nazwać). Zapisujemy ikonką, a przy zamykaniu odpowiadamy jak zwykle Nie. Jeżeli zdecydujemy się na dodanie obiektu definicji samochodów i punktów za jednym zamachem w DCED 2, to istnieje ryzyko, że program się zawiesi i będziemy mieli nie zapisaną naszą pracę lub nawet uszkodzony plik – dlatego przy korzystaniu z tego programu zaleca się robienie kopii zapasowej edytowanego pliku scene2.bin.