Tvorba souborů s počasím pro FS2
J.C.Spooner 2002 ( česká verze - Jerry 2008 )

Soubory s počasím nejsou stejné většina souborů ve FS2, narozdíl od ostatních "textových souborů" jsou toto "datové soubory", což znamená, že je není možno editovat v textovém editoru jako notepad a podobně. Toto trochu komplikuje jejich vytváření. Na vytvoření těchto souborů je potřeba speciální program. Je zde ale i jiná možnost, není sice ideální a zrovna moc uživatelsky přívětivá, ale dá se použít pokud chcete. Tato stránka popisuje jak pomocí této metody vytvořit soubory s počasím pro FS2 a také vysvětlí datovou strukturu těchto souborů, pro případ, že by chtěl někdo naprogramovat nějaký prográmek na jejich vytváření.

Nebudu se zde omlouvat za složitost vytváření těchto souborů, protože se neplánovalo jejich vytváření obecně, ale někteří lidé mně žádali o vysvětlení jak tyto soubory vyrobit, takže tady je odpověď :)

Metoda 1

Uvnitř FS2 ( ve všech verzích ), je část programu, který generuje soubory s počasím na základě vložených klimatických informací. Není zřejmé, že tento prográmek existuje, protože pro jeho použití je třeba udělat změny v souboru app.ini ve složce INF. V sekci [debug] souboru app.ini přidejte řádek GenClimate = 1. Tento příkaz nařídí FS2 vygenerovat soubor climate.dat při startu FS2, ale ještě předtím musíte dát programu klimatické informace, ze ketrých bude tento soubor generovat.

Opět ve složce INF vytvořte textový soubor, pojmenujte jej weather.ini - soubor musí mít takovýto formát :


; January
[Month(1)]
AvTemp = 30
Dev = 70
AvRain = 28
RDev = 560
WindN = 90
WindS = 30
WindE = 40
WindW = 50
WSpeed = 34
Lightup = 09:30
Lightdn = 15:15

; February
[Month(2)]
AvTemp = 39
Dev = 50
AvRain = 41
RDev = 570
WindN = 80
WindS = 34
WindE = 30
WindW = 60
Wspeed = 42
Lightup = 08:00
Lightdn = 16:00

> .. a tak dále pro všechny měsíce ..

Toto jsou hodnoty ( v souboru weather.ini ) ze kterých FS2 vytvoří datový soubor s počasím. Každý měsíc má svou vlastní sekci, např. [Month(1)] obsahuje informace o klimatu pro Leden, [Month(2)] zase pro Únor atd. ... V každé sekci pro měsíce je 11 proměnných, AvTemp, Dev, AvRain, RDev, WindN, WindS, WindE, WindW, WSpeed, Lightup, a lightdn. Jejich význam je vysvětlen zde :

Avtemp

Hodonta této proměnné udává průměrnou teplotu v měsíci ve stupních celsia (°C), vynásobenou 10. Např. pokud je průměrná teplota daného měsíce 12,5 °C, pak ji zadáte jako 125. V příkladu výše je průměrná teplota pro Leden 3.0 °C a pro Únor 3,9 °C.

Dev

Tato hodnota udává, jak moc se teplota mění, opět se zadává jako desetinásobek teploty ve °C. Takže pokud je průměrná teplota v měsíci 30 ( 3.0 °C ) a dev je nastaveno na 70 ( 7 °C ), pak vygeneruje FS2 pro daný měsíc teploty v rozmezí od -4 °C do 10 °C. Např. 3.0 - 7.0 = -4 °C a 3.0 + 7.0 = 10 °C.

AvRain

Tato hodnota udává průměrné denní srážky za měsíc v mm.

RDev

Vysvětlení této proměnné je složitější a potřebuje spoustu experimentů ke správnému nastavení. Je to podobné jako s rozsahem teplot výše, ale výpočet pro správnou funkci je mnohem složitější. Je zde několik různých stupňů deště, lehké přeháňky, silné přeháňky, slabý déšť, mrholení, hustý déšť atd. ... Takže vezměme například typický srpen v Anglii, přestože jsou průměrné denní srážky pravděpodobně malé, je stále možné, že zde bude několik dní s prudkými přeháňkami a dokonce i pár dní s hustým trvalým deštěm. To znamená, že počítat pouze s průměrnými denními srážkami není zrovna ideální, protože se to nebude ani zdaleka blížit reálným dnům se zataženou oblohou a prudkými slejváky během měsíce. Pro zlepšení tohoto výpočtu je zde tabulka, ukazující hodnoty, které FS2 používá pro rozhodování o množství oblačnosti, srážek apd...

0 -> 100 Jasno
101 -> 150 Zataženo
151 -> 200 Lehké přeháňky
201 -> 250 Slabý déšť
251 -> 300 Prudké přeháňky
301 -> 350 Deštivo
351 + Prudký déšť

Hodnoty v tabulce jsou jen jako vodítko, protože existuje spousta různých oblačností a dešťů a je značně komlikované vysvětlit jak to funguje. Je zde také třeba mrholení, sněžení, mlha, kouřmo atd .....

Podstata hodnot RDev je, že čím vyšší hodnoty, tím je větší šance na výkyvy počasí v měsíci a také více srážek. Jedině experimentování nastavíte tuto hodnotu správně.

WindN, WindS, WindE, WindW

Tyto proměnné jsou procentuální hodnoty ( 0 - 100 ) směru větru. Například v Anglii je v zimě většina severních a východních větrů. Takže by jsme nastavili WindN na 80 a WindE na 50 a ostatní by měli malé hodnoty jako např. WindS = 10 a WindW = 30.

WSpeed

Tato proměnná udává maximální rychlost větru v měsíci v jednotkách ( nejsou to míle za hodinu, ale podobné ). Upozornění - FS2 může vygenerovat vítr silnější než jsou tyto hodnoty. Následující tabulku lze použít jako vodítko :

<= 4 Bezvětří
>4 <=8 Vánek
>8 <=12 Mírný vítr
>12 <=16 Svěží vítr
>16 <=20 Větrno
>20 <=24 Nárazový vítr
>24 <=28 Silný vítr
>28 <=32 Vichřice
>32 Bouře

Lightup

Tato hodnota udává čas rozednění ( kdy ráno začíná svítat ). Musí být specifikována jako 24hodinová hodnota i s nulou pro hodiny i minuty, pokud je to potřeba. Např. pokud svítá v 8 hodin 6 minut ráno, musí se nastavit 08:06, vždy musí mít jak hodiny tak minuty 2 číslice.

Lightdn

Tohle je to stejné jako Lightup akorát že jde o setmění. Nastavuje se v úplně stejném formátu jako rozednění - např. 20:00.


OK, jakmile nastavíte řádek GenClimate = 1 v sekci [debug] souboru app.ini a vytvoříte soubor weather.ini v adresáři INF, FS2 bude mít dostatek informací na vytvoření souboru s počasím. Vše co proto musíte ještě udělat je spustit FS2, který při startu rozpozná řádek genclimate a použije soubor weather.ini pro vytvoření dvou souborů v adresáři data ve složce s FS2. První z nich climate.dat je aktuální soubor s počasím, který si přejmenujete jak budete potřebovat ( třeba "cesko.dat" ). Druhý vygenerovaný soubor je textový soubor pojmenovaný climate.txt. Tento soubor nerozšiřujte, byl vygenerován pouze aby jste si mohli zkontrolovat jaké bylo vegenerované počasí pro každý den na 3 roky ve FS2.

Formát souboru climate.txt je :

Day 0 15 12 Overcast Clear skies N 8 MPH 8 : 30 17 : 0 0
Day 1 16 15 Clear skies Clear skies E 9 MPH 8 : 28 17 : 1 0
Day 2 18 16 Overcast Clear skies S 7 MPH 8 : 27 17 : 2 0
Day 3 19 16 Light showers Overcast SE 5 MPH 8 : 26 17 : 3 0
< atd.. a tak dále pro každý den na 3 roky ve FS2.. >

Takže, v příkladu výše bude třetí den ( day 2 ) prvního roku 18°C v poledne a 16°C o půlnoci. V poledne bude zataženo (overcast) a o půlnoci bude jasno (clear skies). Vítr bude přes den jižní ( S ) kolem 7 mil za hodinu ( 7 MPH ). Slunce vyjde v 8:27 a zapadne v 17:02. Poslední sloupec ignorujte, je zde pouze z důvodu starších kontrolních programů.

Takže ve zkratce - soubor climate.txt Vám ukáže počasí a teploty v poledne a o půlnoci, oblačnost a srážky v poledne a o půlnoci, směr a sílu větru, čas rozednění a setmění pro každý den an tři roky ! ( soubor je celkem veliký )

Můžete použít soubor climate.txt aby jste si zkontrolovali jestli je počasí vygenerováno správně jak jste zamýšleli, pokud se Vám nelíbí, proveďte změny v souboru weather.ini, uložte je a znovu spusťte FS2. Poté zkontrolujte nový soubor climate.txt jestli je vše podle vašich představ nebo ještě ne.


Tato metoda není ideální, ale dokáže vygenerovat celkem dobré soubory s počasím. FS2 není program na předpověď a generování počasí a já sám toho o počasí moc nevím. Ale pro potřeby FS2 je tohle dostačující.

Metoda 2 ( formát souboru )

Nejprve upozornění - pokud nerozumíte programování a datové struktuře souborů, nemusíte tuto část vůbec číst. Je vhodná pouze pro lidi, kteří znají programování a měli by zájem vytvořit nějaký program na generování počasí pro FS2.

Jak již bylo zmíněno, počasí ve FS2 funguje jako tříletý cyklus, jinými slovy, počasí 1.června 2001 bude úplně stejné jako 1.června 2004, opakuje se každé tři roky. Předpokládám, že kdyby si chtěl rybář vše pamatovat, musel by mít extrémě dobrou paměť :)


******************************************************************************************************************

Nejsem programátor, proto tuto část nepřekládám - předpokládám, že kdo umí programovat tak si poradí i s angličtinou :-)

******************************************************************************************************************


To work out which of the three climate patterns to use is simple, for example, each file contains weather pattern 0, 1 and 2. PC's using windows operating systems store dates as offsets from 1900. So 101 is 2001 ( 1900+101 ), 102 = 2002 ( 1900+102 ) etc.. So for a program to retrieve the year, it will get back this value. With this value if the modulus of 3 is taken, this will give the weather pattern to use.

So, 101 % 3 = 2, 102 % 3 = 0 etc.. Using the modulus of 3 means that for any given value, a value of either 0, 1 or 2 will always be returned, which is handy as there are only 3 yearly weather patterns stored.

Anyway, put months and things out of the way, they aren't useful, as they change too much to be of any use. Eg, some months have 30 days, some 31, februrary is a real nightmare in itself. So instead FS2 uses days of the year and treats each year as having 366 days ! not 365. This is because some years are leap years etc, which means a day is gained :( so the most days any year can have is 366. For years that aren't leap years, the 366th day is ignored anyway and never used. For the sake of convenience, it is only wasting at most three days of data anyway, which is hardly worth bothering about, considering the extra effort that would be involved in storing each day accurately.

This means that 366 x 3 = 1098 days worth of weather are stored. A glance at any weather data file in the FS2 data folder will show that they are all 17,568 bytes long ( =~17.1 Kb ). This means therefore, that each day requires a total of 16 bytes of storage ( 17,568 / 1098 = 16 ). These 16 bytes are arranged as 8 signed 16 bit integers, or in 'c' speak ( the short data type ). The structure of the data is as follows :

short tempd; // Midday temperature
short tempn; // Midnight temperature
short raind; // Rain at midday
short rainn; // Rain at midnight
short windspeed; // Wind speed
short winddir; // Wind direction
short lightup; // Sunrise
short lightdown; // Sunset

There is no header information in the weather files, they go straight into the data from the start of the file. So day 1 of year pattern 0 is stored first, followed by day 2 of year pattern 0 etc.. to day 366 of year pattern 0. Then comes day 1 of year pattern 1, day 2 of year pattern 1 and so on.

Temperatures are stored as values that are multiplied by 10. So to retrieve the floating point value, divide the number in the file by 10. The rain values ( used in the table shown above ). Windspeed is as the table above. Wind direction is stored as 1 = North, 2 = North-east, 3 = East, 4 = South-east, 5 = South, 6 = South-west, 7 = West, 8 = North-west.

With the light times ( up and down ) these are stored in minutes. So to retrieve the hours / mins comination :

Divide the value by 60 and take the integer part ( ignore the fractional part ), this will give you the hour, as in the 24 hour clock ( 0 - 23 ). To get the minutes, apply the modulus of 60 to the value.

That's it :) phew, there are of coarse a lot more bits to it, for example, no mention is made of snow, sleet, fog, mist, and how it is all worked out, but if you do create an FS2 weather generation program and require the info on how to make it snow for example on a certain day, then please email me and i'll supply the info, it's too much to go into here.


(c) J.C.Spooner, (cz) Jerry 2008