31-07-2014, 21:12
Pozostała ostatnia ważna rzecz - gdy stworzymy mapę bazującą na realiach, chcielibyśmy aby przemysł pozostał na swoich miejscach a ponadto nowy przemysł był w czasie gry tworzony mniej więcej tam, gdzie w rzeczywistości.
Standardowo przemysł znika i pojawia się zupełnie losowo, więc po pewnym czasie będziemy mieli kopalnie węgla w Tatrach zamiast na Śląsku.
Aby tego uniknąć, potrzebne są dwie rzeczy:
Natomiast skrypt TileLabel_IndustryBuilder używa biblioteki TileLabels odczytując ze scenariusza wszystkie napisy, które się zaczynają specjalnym prefiksem - usuwa te napisy natychmiast po uruchomieniu gry.
Z tych napisów wyławia nazwę przemysłu, rok budowy, identyfikator przemysłu oraz rozmiar losowego obszaru tworzenia.
Gdy nastanie rok budowy, skrypt stara się co miesiąc zbudować przemysł, losując różne miejsca wokół położenia napisu. Jeśli ostatnia liczba wynosi 0, przemysł będzie budowany dokładnie w miejscu napisu - ale jeśli próba nie będzie udana, rozmiar losowego obszaru będzie powiększany.
W ustawieniach skryptu można ustawić 3 poziomy "debug level" - na najniższym nic nie jest wypisywane, na średnim wypisywana jest nazwa przemysłu jeśli się go uda zbudować, na najwyższym wypisywana jest nazwa przemysłu przy każdej próbie budowy.
Innymi słowy - w scenariuszu umieszczamy napisy w postaci:
gdzie >>> jest tym specjalnym prefiksem (można to zmienić na inny), : jest separatorem, yyyy rokiem budowy, ii to identyfikator przemysłu a rr to rozmiar losowego obszaru - a skrypt tworzy przemysł w trakcie gry.
Oczywiście napisy można wczytać z pliku txt z pomocą narzędzia import_land opisywanego wcześniej.
Konkretny przykład: w edytorze scenariusza:
[Obrazek: industrybuilder-edit.jpg]
gra, rok 1951:
[Obrazek: industrybuilder-start.jpg]
ta sama gra, rok 1985:
[Obrazek: industrybuilder-built.jpg]
Dzięki losowemu tworzeniu po pierwsze rozgrywka nie jest schematyczna bo za każdym razem przemysł jest trochę w innym miejscu, po drugie jest większa szansa, że ktoś nie zablokuje przemysłu stacją.
W czasie pierwszego roku skrypt buduje wszystko, co jest "zaległe", sięgając do 50 lat wstecz.
Przy okazji - identyfikator przemysłu jest liczbą nieujemną.
Jeśli podamy liczbę ujemną, zamiast przemysłu zostanie zbudowane miasto - co widać na załączonym obrazku. Rodzaj ulic zależy wtedy od tego ujemnego identyfikatora.
Skrypt jest dostępny tutaj:
http://149.156.194.203/~mczapkie/Train/t...uilder.zip
Ponieważ może być uruchomiony tylko jeden skrypt, obecnie testuję hybrydę skryptu TileLabel_IndustryBuilder oraz skryptu RealGrowth kontrolującego wzrost miast - ale potrzebne tu są pewne poprawki z uwagi na tworzenie nowych miast.
Standardowo przemysł znika i pojawia się zupełnie losowo, więc po pewnym czasie będziemy mieli kopalnie węgla w Tatrach zamiast na Śląsku.
Aby tego uniknąć, potrzebne są dwie rzeczy:
- newgrf ze "stabilnym" przemysłem czyli możliwością wyłączenia losowości (np. Manual_Industries, Firs, Ecs)
- skrypt gry budujący przemysł - i tu wielkie podziękowania dla Alberta za zrobienie takiego skryptu i nauczenie mnie tajników programowania w Squirrel.
Natomiast skrypt TileLabel_IndustryBuilder używa biblioteki TileLabels odczytując ze scenariusza wszystkie napisy, które się zaczynają specjalnym prefiksem - usuwa te napisy natychmiast po uruchomieniu gry.
Z tych napisów wyławia nazwę przemysłu, rok budowy, identyfikator przemysłu oraz rozmiar losowego obszaru tworzenia.
Gdy nastanie rok budowy, skrypt stara się co miesiąc zbudować przemysł, losując różne miejsca wokół położenia napisu. Jeśli ostatnia liczba wynosi 0, przemysł będzie budowany dokładnie w miejscu napisu - ale jeśli próba nie będzie udana, rozmiar losowego obszaru będzie powiększany.
W ustawieniach skryptu można ustawić 3 poziomy "debug level" - na najniższym nic nie jest wypisywane, na średnim wypisywana jest nazwa przemysłu jeśli się go uda zbudować, na najwyższym wypisywana jest nazwa przemysłu przy każdej próbie budowy.
Innymi słowy - w scenariuszu umieszczamy napisy w postaci:
Kod:
>>>Nazwa Wlasna Przemyslu:yyyy:ii:rrOczywiście napisy można wczytać z pliku txt z pomocą narzędzia import_land opisywanego wcześniej.
Konkretny przykład: w edytorze scenariusza:
[Obrazek: industrybuilder-edit.jpg]
gra, rok 1951:
[Obrazek: industrybuilder-start.jpg]
ta sama gra, rok 1985:
[Obrazek: industrybuilder-built.jpg]
Dzięki losowemu tworzeniu po pierwsze rozgrywka nie jest schematyczna bo za każdym razem przemysł jest trochę w innym miejscu, po drugie jest większa szansa, że ktoś nie zablokuje przemysłu stacją.
W czasie pierwszego roku skrypt buduje wszystko, co jest "zaległe", sięgając do 50 lat wstecz.
Przy okazji - identyfikator przemysłu jest liczbą nieujemną.
Jeśli podamy liczbę ujemną, zamiast przemysłu zostanie zbudowane miasto - co widać na załączonym obrazku. Rodzaj ulic zależy wtedy od tego ujemnego identyfikatora.
Skrypt jest dostępny tutaj:
http://149.156.194.203/~mczapkie/Train/t...uilder.zip
Ponieważ może być uruchomiony tylko jeden skrypt, obecnie testuję hybrydę skryptu TileLabel_IndustryBuilder oraz skryptu RealGrowth kontrolującego wzrost miast - ale potrzebne tu są pewne poprawki z uwagi na tworzenie nowych miast.
![OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM] OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM]](https://forum.openttd.pl/images/logo.png)
