Dieses Tutorial soll eine kurze Einführung in das Thema GFX-Set bieten. Es wird erklärt, was überhaupt ein GFX-Set ist, wofür man es braucht und wie man sich eigene Sets schreiben kann.
Das Wetter, Licht und Schatten und der Entfernungsnebel werden durch die sogenannten GFX-Sets gesteuert. Jeder ist damit schon einmal in Kontakt gekommen, aber vermutlich hast du dir da nie große Gedanken drüber gemacht. In jeder Map muss in der Funktion InitWeatherGfxSets() ein GFX-Set angeben werden, zum Beispiel könnte das so aussehen:
function InitWeatherGfxSets() SetupNormalWeatherGfxSet() end
Wie du sicher weißt, kannst du nicht nur „normales“ Wetter angeben, sondern auch „Highland“, „Steppe“, „Evelance“, „Mediterranean“ und „Moor“. Je nachdem welches Set du wählst, sieht die Spielwelt anders aus. Evelance ist düster während Highland etwas kühler wirkt. Ein GFX-Set spielt also für die Umgebung und die Stimmung in der Spielwelt eine herausragende Rolle.
Es gibt drei Arten von Wetter: Normal, Regen und Schnee. Diese Wetterlagen werden durch IDs gekennzeichnet und haben bekannterweise auch Auswirkungen auf die Spielwelt:
ID | Wetter | Effekte |
---|---|---|
1 | normal | keine |
2 | Regen | 80% Sichtweite für Gebäude und Siedler, 5% Wahrscheinlichkeit, dass Projektile nicht treffen |
3 | Schnee | 85% Bewegungsgeschwindigkeit für Siedler, 2% Wahrscheinlichkeit, dass Projektile nicht treffen |
Ein Wetterwechsel geschieht nicht sofort, sondern dauert eine bestimmte Zeit an. Diese Information wird später noch Bedeutung haben. Die folgende Tabelle zeigt, wie lange ein Wetterwechsel jeweils dauert:
Neue Wetterlage | Vorlaufzeit | Dauer des Wetterwechsels |
---|---|---|
normal | 5 Sekunden (4 Sekunden mit Wetterturm) | 10 Sekunden (8 Sekunden mit Wetterturm) |
Regen | 5 Sekunden (4 Sekunden mit Wetterturm) | 10 Sekunden (8 Sekunden mit Wetterturm) |
Schnee | 5 Sekunden | 10 Sekunden |
Interessanterweise sind die Wetterlagen aber nicht dafür verantwortlich, ob es auch wirklich regnet oder schneit. Diese sichtbaren Effekte sind ein Teil des gewählten GFX-Sets. Es sind wiederum drei Effekte zu unterscheiden:
Wir werden später sehen, dass dieses Effekte beliebig kombiniert werden können (z.B. Schneeregen bei grüner Landschaft).
Die Siedler-Welt wäre ziemlich dunkel, würde es keine virtuelle Sonne geben. Im Gegensatz zur realen Welt, kann man die Siedlersonne verschieben und die Farbe ihres Lichtes verändern. Je nach Einstellung wirkt das Licht heller oder dunkler und Schatten länger oder kürzer.
In der Regel ist die Siedler-Welt recht vernebelt, wenn man versucht in die Ferne zu schauen. Besonders deutlich wird dies, wenn es regnet. Dann bildet sich ein weiß-grauer Schleier, der die Sicht behindert. Die Intensität und sogar die Farbe dieses Nebels kann über ein GFX-Set gesteuert werden.
Ein GFX-Set erstellt man mit einer ganzen Reihe von Funktionsaufrufen aus dem Display-Table. Für jede Wetterlage müssen die Werte für die visuellen Wettereffekte, Licht und Nebel gesetzt werden. Diese Einstellungen „verpacken“ wir in einer Funktion namens SetupXXXWeatherGfxSet(), wobei XXX für einen freiwählbaren Namen steht (z.B. SetupAbendrotWeatherGfxSet()).
Zuallererst muss dem Spiel gesagt werden, dass überhaupt GFX-Sets verwendet werden sollen (es geht nämlich auch ohne, aber das ist ein anderes Thema). Das geschieht mit dem Aufruf von Display.SetRenderUseGfxSets(1):
function SetupXXXWeatherGfxSet() Display.SetRenderUseGfxSets(1) end
Die folgenden Schritte müssen für jede Wetterlage gemacht werden. Es muss also jeweils die WeatherID durch 1, 2 bzw. 3 ersetzt werden. Ebenso tauchen immer wieder die Parameter TransitionStart und TransitionEnd auf. Die Werte dieser Parameter müssen zwischen 0.0 und 1.0 liegen, wobei gilt: TransitionStart < TransitionEnd. Sie geben an, wann und wie lange ein Effekt während des Wetterwechsels auftritt.
Beispiel: Der Wetterwechsel von normal nach Schnee dauert 10 Sekunden. Der Schneefall soll genau 2 Sekunden nach dem Beginn des Wechsels beginnen und nach weiteren 6 Sekunden seine volle Intensität erreichen. TransitionStart muss dafür auf den Wert 0.2 gesetzt werden und TransitionEnd auf 0.8.
Um Regen, Schneefall und Schneetexturen/Eis an oder auszuschalten benutzt man diese Funktionen:
-- Regen Display.GfxSetSetRainEffectStatus(WeatherID, TransitionStart, TransitionEnd, Flag) -- Schneefall Display.GfxSetSetSnowEffectStatus(WeatherID, TransitionStart, TransitionEnd, Flag) -- Schneetexturen/Eis Display.GfxSetSetSnowStatus(WeatherID, TransitionStart, TransitionEnd, Flag)
Um den entsprechenden Effekt einzuschalten, muss Flag auf 1 gesetzt werden. Um ihn auszuschalten, setzt man Flag auf 0.
Das Licht wird mit dieser Funktion eingestellt:
Display.GfxSetSetLightParams(WeatherID, TransitionStart, TransitionEnd, PositionX, PositionY, PositionZ, AmbientR, AmbientG, AmbientB, DiffuseR, DiffuseG, DiffuseB)
PositionX, PositionY, PositionZ gibt die Position der Lichtquelle (der Siedlersonne) an. Die Werte sollten ganze Zahlen sein (auch negative Zahlen sind möglich). Wenn man ein wenig mit den Werten experimentiert, kommt man schnell hinter das System.
AmbientR, AmbientG, AmbientB, ist die Farbe des Umgebungslicht (also das Licht, welches nicht direkt von der Lichtquelle kommt). Die Farbe wird im RGB-Format angegeben (Ganzzahlen zwischen 0 und 255). Dieses Licht ist überall gleich stark.
DiffuseR, DiffuseG, DiffuseB ist die Farbe des Lichtes, welches von der Lichtquelle direkt abgegeben wird.
Der Entfernungsnebel wird über diese Funktion eingestellt:
Display.GfxSetSetFogParams(WeatherID, TransitionStart, TransitionEnd, Flag, ColorR, ColorG, ColorB, FogStart, FogEnd)
Flag gibt an, ob überhaupt Nebel dargestellt werden soll. Wie üblich bei Flags muss hier 0 oder 1 angegeben werden.
ColorR, ColorG, ColorB gibt die Farbe des Nebels im RGB-Format an.
FogStart, FogEnd gibt an, in welcher Entfernung (Siedlerzentimeter) der Nebel sichtbar ist. Werte zwischen 2000 und 30000 sind üblich.
Der Himmel ist normalerweise gar nicht sichtbar. Er taucht aber in Cutscenes und Briefings auf.
Display.GfxSetSetSkyBox(WeatherID, TransitionStart, TransitionEnd, SkyBoxName)
Es gibt eine ganze Reihe von Himmeln zur Auswahl:
SkyBoxName | Bevorzugte Wetterlage |
---|---|
YSkyBox01 | Schnee |
YSkyBox02 | normal |
YSkyBox03 | normal |
YSkyBox04 | Regen |
YSkyBox05 | normal |
YSkyBox06 | normal |
YSkyBox07 | normal |
Wenn jemand irgendein schönes GFX-Set erstellt hat, bitte hier als Beispiel einfügen und das alte inklusive diesem Hinweis entfernen.
Mal ein Versuch Tag und Nacht zu Simulieren
Habe meinen Link gelöscht, weil der Aufruf verweigert wird
Peermanent
Dies hier ist das GFX-Set, welches für Evelance verwendet wurde:
function SetupEvelanceWeatherGfxSet() -- GFX-Sets aktivieren Display.SetRenderUseGfxSets(1) -- normal Display.GfxSetSetSkyBox(1, 0.0, 1.0, "YSkyBox07") Display.GfxSetSetRainEffectStatus(1, 0.0, 1.0, 0) Display.GfxSetSetSnowStatus(1, 0, 1.0, 0) Display.GfxSetSetSnowEffectStatus(1, 0.0, 0.8, 0) Display.GfxSetSetFogParams(1, 0.0, 1.0, 1, 38,48,58, 4000,10500) Display.GfxSetSetLightParams(1, 0.0, 1.0, 40, -15, -50, 136,144,144, 128,104,72) -- Regen Display.GfxSetSetSkyBox(2, 0.0, 1.0, "YSkyBox04") Display.GfxSetSetRainEffectStatus(2, 0.0, 1.0, 1) Display.GfxSetSetSnowStatus(2, 0, 1.0, 0) Display.GfxSetSetSnowEffectStatus(2, 0.0, 0.8, 0) Display.GfxSetSetFogParams(2, 0.0, 1.0, 1, 38,58,68, 4000,8000) Display.GfxSetSetLightParams(2, 0.0, 1.0, 40, -15, -50, 136,144,144, 128,104,72) -- Schnee Display.GfxSetSetSkyBox(3, 0.0, 1.0, "YSkyBox01") Display.GfxSetSetRainEffectStatus(3, 0.0, 1.0, 0) Display.GfxSetSetSnowStatus(3, 0, 1.0, 1) Display.GfxSetSetSnowEffectStatus(3, 0.0, 0.8, 1) Display.GfxSetSetFogParams(3, 0.0, 1.0, 1, 108,128,138, 2000,9500) Display.GfxSetSetLightParams(3, 0.0, 1.0, 40, -15, -50, 116,144,164, 255,234,202) end