So, jetzt aber!
Hier ein Tutorial zur Handhabung der allseits beliebten soundscapes. Da ValvE und unsere fleißigen Mapper nur skeptisch auf das ambient_generic-Entity herabschauen und es dementsprechend nur selten benutzen, wollen wir hier lernen wie wir mit soundscapes umgehen, da diese ein zufriedenstellenderes Ergebnis liefern.
Mit dem env_soundscape sind Probleme wie "Regen nur draußen hören" oder "Atmosphärischer Sound z.B. Wind oder Helikopter" zu lösen, da es ein Feature gibt, welches den Standort eures Sounds ermittelt und an die Umgebung anpasst. (s.u.)
Dieses Tutorial ist eine light-Version, da hier die grundlegenden und wichtigen Elemente des Entities beschrieben werden. Wer also weiteres Wissenswertes hinzufügen will, kann das natürlich gerne tun.
Voraussetzungen:
grundlegende Mapping-Kenntnisse
grundlegendes Programmier-Verständnis
eine bestehende (Test)Map
GCF-Scape
Außerdem solltet ihr bereits wissen, welche .wav-Sounds ihr verwenden wollt und im Umgang mit dem ambient_generic halbwegs bewandert sein!
Anmerkung:
Meine Beispielmap für dieses Tutorial trägt den Namen "soundmap". Jedes mal wenn man den Namen der Map angeben muss, wird dort also soundmap stehen. Ersetzt einfach diesen Namen durch den Namen eurer eigenen (Test)Map.
Ziel:
In einer Testmap mit dem de_dust2-Thema wollen wir vier verschiedene dust-typische-Sounds mit Hilfe des env_soundscape abspielen lassen, um mehr Atmosphäre zu bekommen.
1. Schritt
Bevor wir loslegen mit env_soundscapes wild um uns zu werfen, müssen wir einige Vorbereitungen treffen.
Als erstes gehen wir in den Ordner
\Valve\Steam\SteamApps\username\counter-strike source\cstrike\
und erstellen dort einen neuen Ordner mit dem Namen "scripts"
Hier erstellen wir mit dem Editor ein neues Textdokument mit dem Namen "soundscapes_soundmap.txt", das wir öffnen.
2. Schritt
Jetzt fangen wir an zu programmieren. Das ist leichter als es sich anhört. Als erstes definieren wir den Namen des Soundscape, hier "soundmap.outdoors". (Für verschiedene Bereiche kann man verschiedene Soundscapes definieren, z.B. .outdoors, .indoors, .under etc)
Achtung: Der Name des Soundscapes wird nachher in den Properties des env_soundscape wichtig sein und es handelt sich nicht um den Namen des Entities!
Das sieht dann im einfachsten funktionierenden Beispiel so aus:
"dsp" = soundspezifischer Effekt (1-28): Setzt hier den Wert 1, dann ermittelt die Engine automatisch den Standpunkt eures Entities und passt es daran an. Falls ihr es an spezielle Umgebungen anpassen wollt, findet ihr im "soundscapes_manifest.txt" die Werte, dir ihr benötigt. (s.u.)
"volume" = Lautstärke des Sounds (0-1): am sinnvollsten sind hier Kommazahlen, da der Wert 1 sehr laut ist, aber natürlich sollte die Lautstärke an die jeweilige .wav angepasst werden. Je leiser der Sound, desto näher muss man ran, um ihn zu hören. Hiermit legt man also gleichzeitg den Radius des Geräuschs fest.
"pitch" = Geschwindigkeit des Sounds (0-100): 100 ist die Standard-Geschwindigkeit, 20 klingt wie Zeitlupe
"wave" = die .wav, die abgespielt werden soll: Gebt hier die Quelle des Sounds so an, wie ihr das auch bei ambient_generic tut. Nur dass es hier keinen browse-Button gibt...
"position" = Bezieht sich auf die Positionswerte, die ihr in den Properties des env_soundscapes findet. Diese wiederum werden nachher im Hammer auf ein "info_target" verweisen. An seiner Position wird der Sound dann gespielt.
Studiert die soundscape-Scripts von ValvE-Maps, um noch mehr darüber zu erfahren, was alles in solch einem Script stehen kann. Und auch hier ist wieder die Dokumentation hilfreich.
3. Schritt
Nachdem ihr eure "playlist" erstellt habt, könnt ihr jetzt zum Hammer-Editor wechseln und damit beginnen, die Sounds zu setzen.
Hierzu platzieren wir unser env_soundscape an einer Stelle, die nachher der Spieler auf jeden Fall passieren wird, im Beispiel befindet es sich in der Mitte der Map.
properties-Einstellungen des env_soundscape:
Name = beliebig
Radius = 128 (gute Werte sind hier immer die Vielfachen von 8)
Soundscape = soundmap.outdoors (euere in Schritt 2 definierte Playlist)
Sound Position 1 = soundtarget01
Sound Position 2 = soundtarget02
Sound Position 3 = soundtarget03
Sound Position 4 = soundtarget04
4. Schritt
Nun setzen wir vier "info_targets". An diesen Stellen wird später der Sound zu hören sein! In der Beispielmap befindet sich je eines am Ende eines jeden Ganges.
properties-Einstellungen des 1. info_target:
Name = soundtarget01
properties-Einstellungen des 2. info_target:
Name = soundtarget02
properties-Einstellungen des 3. info_target:
Name = soundtarget03
properties-Einstellungen des 4. info_target:
Name = soundtarget04
Wenn ihr das bewerkstelligt habt, werdet ihr sehen wie sich die "info_targets" in farbigen Linien mit dem "env_soundscape" verbinden.
An den info_target-Platzierungen in der Map "de_cbble" ist gut zu sehen, dass sie dort gesetzt wurden, wo sich der Spieler mit hoher Wahrscheinlichkeit nach hinbewegen wird. Das heißt: Läuft der Spieler durch den Aktivierungsradius des env_soundscape, spielen die Sounds bereits bevor er beim info_target-Bereich ankommt.
Die Radien des env_soundscapes an den Spawn-Plätzen schließen alle Spawn-Punkte ein, sodass der Spieler die Sounds bereits auslöst, während er spawnt. So kann man beispielsweise Atmosphären-Sound wie Wind triggern, der gleich beim Start der Map spielen soll.
Ergebnis
Wenn ihr jetzt die Map kompiliert und durch den Radius des "env_soundscape" lauft und es somit aktiviert, werden alle vier Sounds gleichzeitig abgespielt. Je nachdem welche Einstellungen ihr in der Reichweite und der Lautstärke vorgenommen habt, werdet ihr die Sounds unterschiedlich nah und laut hören. Probiert da ein wenig herum bis ihr euren Wert gefunden habt.
Anmerkung zum DSP:
Öffnet mit GCF-Scape die Counter-Strike: Source.gcf und geht in das Verzeichnis:
\Valve\Steam\SteamApps\username\counter-strike source\cstrike\
Dort findet ihr eine .txt-Datei mit dem Namen "soundscapes_manifest.txt".
Um diese lesen zu können, müsst ihr sie extrahieren und mit dem Editor öffnen. In dieser Datei befinden sich nämlich nützliche Beschreibungen zu den verschiedenen DSP-Stufen! (siehe ValvE-Dokumentation)
So, ich hoffe ich habe euch die Grundlagen des "env_soundscape" verständlich näher gebracht. Wenn hier etwas fehlt oder fehlerhaft ist, bitte ergänzen!
Fehlen tuen noch einige spezielle Dinge, wie zum Beispiel die Random-Funktion oder die Beschreibung des "env_soundscape_proxy". Wenn ich mich da reingearbeitet habe und mir niemand zuvor gekommen ist, wird das bald ergänzt
Servus.
Wie vor längerer Zeit versprochen folgt nun als
Ergänzung zu meinem env_soundscape-Tutorial
eine kleine Beschreibung wie man die nicht weniger
praktischen env_soundscape_proxy's händelt.
Wozu sind env_soundscape_proxy's gut?
Wie wir ja wissen aktivieren wir als ingame-Player ein
env_soundscape nur, wenn wir seinen Radius betreten,
bzw. es "sehen". Hat man beispielsweise ein Level mit
vielen verzweigten oder abgeknickten Gängen, dann
wäre ein env_soundscape_proxy sehr hilfreich. Das
plaziert man nämlich an einer bestimmten Stelle, um ein
env_soundscape auszulösen, obwohl man nicht in
dessen Radius ist oder sich weit weg von diesem befindet.
Das env_soundscape_proxy übernimmt quasi hier die
Aufgabe des Radius des dazugehörigen env_soundscape.
Eine sehr vereinfachte Skizze eines Raumes mit einem
Gangsystem außenrum. Der Gang hat sein eigenes
env_soundscape, das man ununterbrochen hört, bis man
den Raum betritt und ein anderes ausgelöst wird. Geht man
aus der oberen Tür hinaus, ist man weit weit weg vom
env_soundscape und seinem Radius für den Gang. Also
setzt man ein env_soundscape_proxy vor die Tür, bzw. vor
beide Türen.
Wichtig ist nur, dass man den env_soundscapes einen Namen
gibt, z.B. scape01 und scape02.
In den Properties des env_soundscape_proxy geben wir
dann einfach bei Soundscape Entity den Namen des dazu-
gehörigen env_soundscape an.
Wenn wir den Raum verlassen wird also ein env_soundscape
ausgelöst, welches sich unter Umständen weit weg befindet.
Fertig