OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM]
NFO - alternatywny język niskiego poziomu plików .grf - 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ł: Dyskusje ogólne (https://forum.openttd.pl/forumdisplay.php?fid=4)
+--- Wątek: NFO - alternatywny język niskiego poziomu plików .grf (/showthread.php?tid=2301)



NFO - alternatywny język niskiego poziomu plików .grf - yard - 03-12-2018

Nieco przybliżenia w temacie NFO ,
ale nie jestem w tym zaawansowany, a jakby ktoś znał linki do polskich tłumaczeń to można dodać i fragment cytatu . 


Sprite i ich edycja np. pod :
https://www.tt-wiki.net/wiki/GraphicsTutorial
(wersja angielska)

N.F.O brzmi jakby niezidentyfikowane formy objektów !.
Nie mam pojęcia o tym określeniu , ale ważne by przy jego użyciu powstał funkcjonalny plik *.grf  .

Grf to właśnie rozszerzenie pliku zakodowanego lub odkodowania z grfcodec .
Instrukcje wykonywane w nim były znacznie wydajniej niż z cyframi dziesiętnymi. 
Dlatego to tak złożony (skomplikowany)  język do pisania  ,
coś jak posługiwanie się symbolami w asemblerze .
Dzięki temu konwersja na binarny ciąg dla urządzeń elektroniki zużywa w algorytmach mniej pamięci i czasu.
Hex inaczej system szesnastkowy to specyfika NFO. 
Przydatne w czynnych procesach tych "podprogramów" NFO  . 
W coraz nowocześniejszych smartfonach już nie tyle istotne .


Do składania czegoś w NFO dorobione były aplikacje z graficznym "interfejstem" i kontroli nforenum ,
ale nie są to 'rozbudowywalne' IDE (przyrząd developerski) przy ewoluującym ottd. 
Poza tym właściwie rozwijany jest NML z grupy nie low-level .

Aktualnie zaleta nad nml jest przede wszyskim kolejowa logistyka.
W nml praktycznie NewGrfr z sygnalizacją nie do zrobienia .   
I tu można zastosować NFO .


Zajrzenie do
Kod:
pliku.nfo
i wszelkie tego aspekty w następnej części   .


RE: NFO - alternatywny język niskiego poziomu plików .grf - yard - 19-04-2019

W załączniku wstępnie dokonany przyrząd programowalny . 
Do "e-kodowania" z NFO na .grf i dekodowania (odwrotnie ; *.grf ~> NFO )
przydatne narzędzia -
Za linkiem m.in. grfcodec jako program w linii poleceń (wskazówki po wpisaniu np. grfcodec.exe 
lub grfWizard z przyjaznym okienkiem pod Windows (wymaga tylko krótkiego skonfigurowania).

Jeden z prostszych plików nfo , który może posłużyć do skompilowania .grf 
to przykład w pakiecie JGR's w katalogu [data]
- progsignals.grf  , a po odkodowaniu :
Kod:
GrfCodec -d progsignals.grf

otrzymane :
Kod:
// Automatically generated by GRFCODEC. Do not modify!
// (Info version 32)
// Escapes: 2+ 2- 2< 2> 2u< 2u> 2/ 2% 2u/ 2u% 2* 2& 2| 2^ 2sto = 2s 2rst = 2r 2psto 2ror = 2rot 2cmp 2ucmp 2<< 2u>> 2>>
// Escapes: 71 70 7= 7! 7< 7> 7G 7g 7gG 7GG 7gg 7c 7C
// Escapes: D= = DR D+ = DF D- = DC Du* = DM D* = DnF Du<< = DnC D<< = DO D& D| Du/ D/ Du% D%
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
   ...
Na początku z "//" są komentarze.
Ponieważ określają rozmaitości tego pliku NFO powinny tam być nie zmodyfikowane .
Więcej można zając się tym później . Do sygnalizacji wystarczy skopiować i wkleić .


Kod:
...
0 sprites/progsignals.png  8bpp   18    8   11   21   -8  -19 normal
1...

Kolejne linie od 0, 1 ... etc (numeracja troche jak BASIC) to instrukcje opisujące sprite czyli konkretne rysowanie ( obrazek.png )
Za ścieżka do pliku , wpisane są różne właściwości w odstępach (tj. głębia kolorów, współrzędne, "gabaryty" czy wersja zbliżenia etc).
Istnieją tez spirites bez przypisanej wizualizacji , mogą powodować zmiany wszelkich stanów jak sytuacje dźwiękowe etc. O tym może innym razem .
Wtedy linia 0 (zero) to tzw. pseudosprit  wstawiony z * (gwiazdką)  .
Następna cyfra w tym wierszu to liczba sprit'ów całkowicie , ogółem (w pliku .nfo ) .
Jeśli zastosowane będą 4 oznacza się tak :
Kod:
...
0 * 4 0D 00 00 00
...
Znaki końcowe mogą być inne - nie ważne teraz .
Choćby dokładniej następna linia w takim układzie posiada ID -
Kod:
...
1 * 8 08 06 „SG” 03 05 00 00
2 * 4 01 00 01 08
...
Zaś ostatnia linia we fragmencie powyższym odnosi się do swego rodzaju akcji (działanie, typ) 
Różne wyszczególnione na GRFspecs .

Jeśli wstawione zostaną dodatkowe grafiki (z innych modów) 
można uzyskać nowszą oprawę semaforów  -
Kod:
...
16 sprites/abase_base03.png  8bpp  690 2696    3   14   -1  -12 normal
   | sprites/abase_base06.32.png 32bpp  338 2776   21   23  -13  -19 normal chunked
   | sprites/abase_base06.32.png 32bpp  370 2776   94   95  -57  -73 zi4 chunked
   | sprites/abase_base06.32.png 32bpp  482 2776   44   46  -27  -37 zi2 chunked
...
i powyżej tylko w skrócie , pierwsza wyraźniejsza szata sygnałów świetlnych .

Gotowy 'beta' Newgrf otrzymany po wklepaniu: 
Kod:
GRFCODEC -e -g 2 progsignals.grf
parametr -g ( format 2) dotyczy widoków "x2" + "x4" .

Oczywiście powstały progsignals.nfo do ulepszenia - w dalszym poście .

Najlepiej do tego edytor 
psPad . Aby działał 'F9' jako zautomatyzowane uruchomienie kompilacji (lub przycisk na "belce") 
do zrobienia dwie czynności.
W folderze [syntax] dorobiony plik definicji dla rozszerzeń .nfo (np. użycie zawartoscii od pliku intranet.ini i poprawienie) :
Kod:
...
Name=NFO
...
FileType=*.nfo
...

A w menu tools ~> ustawienia podświetlania , zakładka kompilator - parametry kompilacji: ... %Name%.grf .
(ze wskazaniem dostępu do GRFKodeka manualnie).
Nie koniecznie , ale z zaznaczeniem opcji : "przechwyt okna komunikatów wyjściowych" .

Osobnym niuansem jest wykorzystanie makr - M4NFO dla pewnych animacji migających "diod" .. 



RE: NFO - alternatywny język niskiego poziomu plików .grf - yard - 22-04-2019

___ . . ___
|Ctrl| & |F9| , zamiast samo 'F9' powinno być z 'Control' .
----- . . ----

Potem tak nawiasem doprecyzowując coraz większa złożoność w/g ,
w pseudosprites .nfo (wers , w którym zamiast ?.png jest tylko *, a więc nie jest to rzeczywisty sprite )
trzeci znak określa długość danych po nim, a od czwartego ciąg tych danych (szesnastkowo)
Kod:
33 * 4 00 00 ...

Bywa , że pierwsza linia to:
0 ...
z
... * ...
i
... 4 ...
czyli potem chyba "ta czwórka"  przeważnie w notacji heksadecymalnej: 
... 00 00  00 00
z tym , że w miejsce 2 grup zer ,łącznie real~sprite ze pseudosprite może być 1F ... ,
( hex=0000 001F wyodrębnione na wspak )

No i te w pozycji 'action' , odnotowane działania, które są realizowane do obrazu albo w związku z czymś .
Nr 8 przyporządkowuje unikatowy GRFID, Nazwę i opis .
Kod:
1 * 8 08 06 ...
- szerzej we wspomnianej dokumentacji (specyfikacji) .

Odnośnie sumy grafik jest działanie Nr 1
Kod:
2 * 4 01 ...
w miejsce kropek kolejne "podwójne bajty" to :
  • -wartość funkcji , (gdyby railtypes to 00 )
  • -ile zestawów grafik (01)
  • -ilość widoków dla zestawu (jeżeli 8 to 08)



RE: NFO - alternatywny język niskiego poziomu plików .grf - yard - 24-04-2019

Zdaje się , że railtypes to jest 10 (00 train) .

Natomiast w miarę przerabiania, pamięci nie pochłaniają marginalizmu 
i okazuje się przejrzystość przyswajalna .

Ponadto Grfcodec utworzy podkatalog [sprites] gdy wcześniej nie dekodowano.
Standardowo umieszczane są tam zawartości "prze_konwertowane" z .grf
W paczce z grfcodec dołączony jest nforenum.exe, który częściowo rekonstruuje zawiłości.

wywołany w asyście:
Kod:
nforenum sprites\nazwapliku.nfo
m.in. numeruje uzupełnione linie i zlicza bajty, długość pseudosprites - koryguje oraz wytknie pomyłki 
(niektóre punkty)

~kiedy można sklecić jakiś nie za bardzo skomplikowany .grf  , który może kreować nie tylko do JGR's
(tudzież OpenTTD-YPS z wariantem "decoupling").

source -
Kod:
// Automatically generated by GRFCODEC. Do not modify!
// (Info version 32)
// Escapes: 2+ 2- 2< 2> 2u< 2u> 2/ 2% 2u/ 2u% 2* 2& 2| 2^ 2sto = 2s 2rst = 2r 2psto 2ror = 2rot 2cmp 2ucmp 2<< 2u>> 2>>
// Escapes: 71 70 7= 7! 7< 7> 7G 7g 7gG 7GG 7gg 7c 7C
// Escapes: D= = DR D+ = DF D- = DC Du* = DM D* = DnF Du<< = DnC D<< = DO D& D| Du/ D/ Du% D%
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
  0 * 4    0E 00 00 00
  1 * 54    14 "CINFOBVRSN" 04 00 02 00 00 00 "BMINV" 04 00 00 00 00 00 "BNPAR" 01
00 00 "BPALS" 01 00 "WBBLTR" 01 00 33 00 00
  2 * 72    08 08 "32ZC32bpp extra zoom tracks graphics" 00
"32bpp extra zoom tracks graphics" 00

// Zestaw wstawia do torow zwrotnice
// (zastepuje wyglad zredukowanej rozdzielczosci),
// nieznaczne obsorbcje CPU - utrzymujac mozliwosci energetyczne pod multum oprogramowania na baterii
 
  3 * 5    0A 01 01 ED 03
  4 sprites/32bpp_ez-0.100.png  8bpp  242    8    1    1    0    0 normal
  | sprites/32bpp_ez-0.100.32.png 32bpp  274  360  256  132 -124   -6 zi4 chunked
  | sprites/32bpp_ez-0.100.32.png 32bpp  546  360  128   66  -62   -3 zi2 chunked
  5 * 5    0A 01 01 EE 03
  6 sprites/32bpp_ez-0.100.png  8bpp  274    8    1    1    0    0 normal
  | sprites/32bpp_ez-0.100.32.png 32bpp    2  504  256  132 -124   -6 zi4 chunked
  | sprites/32bpp_ez-0.100.32.png 32bpp  274  504  128   66  -62   -3 zi2 chunked
  7 * 5    0A 01 01 EF 03
  8 sprites/32bpp_ez-0.100.png  8bpp  306    8    1    1    0    0 normal
  | sprites/32bpp_ez-0.100.32.png 32bpp  418  504  256  132 -124   -6 zi4 chunked
  | sprites/32bpp_ez-0.100.32.png 32bpp    2  648  128   66  -62   -3 zi2 chunked
  9 * 5    0A 01 01 F0 03
 10 sprites/32bpp_ez-0.100.png  8bpp  338    8    1    1    0    0 normal
  | sprites/32bpp_ez-0.100.32.png 32bpp  146  648  256  132 -124   -6 zi4 chunked
  | sprites/32bpp_ez-0.100.32.png 32bpp  418  648  128   66  -62   -3 zi2 chunked
 11 * 5    0A 01 01 F1 03
 12 sprites/32bpp_ez-0.100.png  8bpp  370    8    1    1    0    0 normal
  | sprites/32bpp_ez-0.100.32.png 32bpp    2  792  256  132 -124   -6 zi4 chunked
  | sprites/32bpp_ez-0.100.32.png 32bpp  274  792  128   66  -62   -3 zi2 chunked
 13 * 5    0A 01 01 F2 03
 14 sprites/32bpp_ez-0.100.png  8bpp  402    8    1    1    0    0 normal
  | sprites/32bpp_ez-0.100.32.png 32bpp  418  792  256  132 -124   -6 zi4 chunked
  | sprites/32bpp_ez-0.100.32.png 32bpp    2  936  128   66  -62   -3 zi2 chunked

Przygotowanie zdekodowanego 32bpp_ez-0.1.grf  , to wszystko wytworzy aplikacja grfWizard,  jak minimalna instalacja experckiego kalkulatora.
Większość przetworzenia w .nfo sposobem schowek/Clip-board .
Ilustracje przetransferowane zgodnie z ich przesunięciami- ponumerowanie w pliku nfo jest powiązane z "kontenerami" obrazowymi (zbiór).
Zaznaczenie obejmuje zwykle poprzedzające pseudosprites (linie z * nad realsprites -dawniej.pcx).
Na koniec kompilacja kliknięciem w kwadracik to oznajmujący. 

Z racji ,że poniższa linia :
...
1 * 54  14 "CINFOBVRSN" 04 00 02
...
-identyfikator nie może powtarzać się w dwóch .nfo /.grf .
-teoretycznie mogłoby się obejść , to w ramach unormowanego schematu
-jest zmieniona ostatnia cyfra (tylko zwiększona o 1), choć zalecane po-edytować dowolnie , żeby nie było identycznie.
Po ogarnięciu tego, jako tako, warto ponownie przejrzeć informacje o action 8, 14 { linki wyżej } ,
wyszperać kontynuacje  .