Skip to content

conceptFunctions

extrazi edited this page Jul 1, 2023 · 4 revisions
original    original
EN     PL

Manual Użytkownika m4nfo i Raport

Koncepcja funkcji

Introduction

m4nfo jest zbudowany wokół funkcji. Czyli w m4nfo nie ma przypisań, wszystko odbywa się poprzez wywołanie funkcji i ustawienie parametrów.

Istnieją różne klasy funkcji:

  • Właściwości funkcji - do definiowania pojedynczych właściwości "features" gry (pojazdy, domy, stacje, ...)
  • Funkcje układu - zdefiniować układ 'sprites' za pomocą ich grafiki, współrzędnych i informacji 3D,
  • Funkcje wydajności - aby uzyskać specjalne informacje o danej funkcji lub uzyskać dostęp do zmiennych związanych z grą, takich jak data, klimat, etc,
  • Funkcje pomocnicze - używany głównie do oceny specjalnych parametrów funkcji wydajności,
  • Funkcje ogólne - do obsługi niezależnych od funkcji funkcji gry, takich jak obsługa błędów lub przepływ kontroli, definiowanie ciągów tekstowych, etc,
  • Funkcje globalne - funkcje związane z cechami globalne dla danego newGRF, takie jak funkcje losowe, obsługa dźwięku, zmiana koloru, etc.

Funkcje właściwości

Funkcje właściwości są używane wyłącznie wewnątrz "definicji" cechy. Służą one do obsługi właściwości danej funkcji, takich jak data wprowadzenia, maksymalna prędkość czy pojemność wagonu w przypadku pojazdu, liczba lub długość peronów w przypadku stacji, liczba mieszkańców czy miejska strefa budowy w przypadku koszt budowy, utrzymania lub ograniczenia prędkości w przypadku typu kolei, etc.

 Example (property functions inside a feature's definition:
 
 definehouse(_HOUSE1,
 	substitutetype(8, 8)
 	climate(TEMPERATE, ARCTIC)
 	housename(smallhouse)
 	size(1,2)
 	population(30)
 	mailgen(4)
 	passaccept(4)
 	mailaccept(0, 4)
 	rating(500)
 	removalcost(10)
 	probability(8)
 	timeframe(1.1.1880 .. 1.1.1930)
 	lifespan(80)
 	flags(FLAT, HISTORIC)
 	callbacks(CB_BUILD, CB_AUTOSLOPE)
 )

Wiele funkcji właściwości jest takich samych dla różnych funkcji TTD, takich jak Climate(), flags(), callbacks() lub timeframe() w powyższym przykładzie, ale inne są specyficzne dla niektórych funkcji. Ponadto niektóre stałe używane jako parametry funkcji właściwości mogą być identyczne dla różnych funkcji, takich jak wartości flag lub wywołań zwrotnych, ale inne mogą nie.

Funkcje układu

Funkcje układu sprite'ów zajmują się rozmieszczeniem 'sprites' , biorąc pod uwagę składową grafikę, współrzędne i informacje 3D. Zupełnie inaczej jest w przypadku funkcji TTD: podczas gdy pojazd składa się tylko z jednego 'sprite' (w każdym kierunku podróży), dom, stacja, przemysł lub obiekt składają się zwykle z wielu kafelków, które mogą zawierać wiele 'sprites' na kafelek.

Ponadto każda płytka ma obwiednię 3D . Jest to naprawione dla pojazdów, ale musi być określone dla "budynków", takich jak domy, stacje, kafle przemysłowe lub obiekty.

Format układu sprite jest taki sam dla domów, kafelków branżowych i obiektów i jest dostępny w dwóch różnych wariantach:

  • prosty wariant definiujący tylko jeden 'sprite' budynku,
  • rozszerzony wariant, pozwalający na zdefiniowanie więcej niż jednego 'sprite' na kafel , jako niezależnych 'sprites' z własnymi obwiedniami 3D lub jako jeden 'sprite'-'nadrzędny' z ramką ograniczającą i pewną liczbą "podrzędnych" 'sprites', współdzielących ramkę ograniczającą rodzica.
 Example 4 (multiple sprites plus child sprite):
 
 def(51) spriteset(
 	set(normal(WATER), normal(2), xyz(0,0,0), dxdydz(16,16,6))
 	set(normal(LIGREEN5), xyz(1,5,6), dxdydz(8,8,16))
 	set(normal(ANIMGREEN), xyoff(4,2))
 )

Powyższy przykład definiuje zestaw 'sprites' dla jednej płytki, składający się z 'sprite' naziemnego ("WODA") wraz z 'sprite' budynku ("2", kawałek kreta), innego 'sprite' budynku ("LIGREEN5", światełko kreta ) i 'sprite' dziecięcego bez informacji 3D ("ANIMGREEN", animowane światło kreta).

m4nfo dostarcza zestaw funkcji do obsługi tych układów sprite'ów, do definiowania sprite'ów gruntu lub budowania (w trybie normalnym, przezroczystym lub zmieniającym kolor) oraz do definiowania przesunięć i zakresów współrzędnych. Zostały one szczegółowo wyjaśnione w odpowiednich wpisach w niniejszej instrukcji, np. tutaj, tutaj lub tutaj .

Funkcje wykonawcze

Zwykłe nfo udostępnia zmienne, które mogą być odczytywane i przetwarzane dynamicznie, aby uzyskać dostęp do pewnych atrybutów danej funkcji. W przeciwieństwie do tego, m4nfo dostarcza funkcję dla każdej zmiennej nfo, aw przypadkach, gdy nfo zawija więcej niż jedną wartość w zmiennej, m4nfo dostarcza dodatkowe funkcje lub obsługuje oryginalny schemat nfo przesuwania i maskowania wartości zmiennej przez funkcję pomocniczą shiftmask() .

Diagram po lewej pokazuje, jak m4nfo "transluje" zwykłe zmienne nfo: nfo (top), 'pseudokod' (na środku), m4nfo ('na dole') .

Oprócz podstawiania zmiennych/funkcji, w "bloku" m4nfo odwołanie do innego bloku występuje najpierw przed wynikiem oceny funkcji, z powodów ergonomicznych: dużo łatwiej jest śledzić 'łańcuch' definicji i referencji, gdy są pokazane na początku linii, niż próbować znaleźć je gdzieś wewnątrz długiej linii bloku.

Funkcje pomocnicze

Funkcje pomocnicze są używane w kontekście funkcji wydajnościowych, najprawdopodobniej wewnątrz ich list parametrów do oceny lub uporządkowania parametrów specjalnych.

Najbardziej znanym członkiem tej klasy funkcji może być function shiftmask() , który służy do dopasowania wyniku funkcji wydajności do bardziej użytecznego zakresu. Ta funkcja przyjmuje dwa parametry: pierwszy z nich definiuje wartość przesunięcia w prawo wyniku funkcji, a drugi parametr podaje wartość, z jaką należy wykonać ORAZ wynik po przesunięciu.

Inne elementy tej klasy to funkcje, które pakują lub rozpakowują parametry współrzędnych, takie jak nibble() lub pos(), lub funkcje pomocnicze dostosowujące spriteset() do różnych funkcji TTD, takie jak load() i move() lub little() i lots().

Funkcje globalne

Są to funkcje zależne od funkcji, takie jak funkcje losowe, funkcje związane z dźwiękiem , tabele translacji typu cargo lub kolejowe itp. Większość z nich można by użyć z więcej niż jedną z cech TTD.

Funkcje ogólne

Są to funkcje niezależne od funkcji, takie jak obsługa błędów , rozgałęzianie wewnątrz newGRF, definicja ciągów tekstowych itp.