SoundSets von Train Fever konvertieren

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


Sie betrachten gerade eine ältere Version des Eintrags. Klicken Sie hier, um zur aktuellen Version zu gelangen.

  • Ein Anleitung wie man die SoundSets aus Train Fever ändern muss, damit sie in Transport Fever funktionieren.

    1 Einleitung

    Wie angekündigt funktionieren die SoundSets aus Train Fever in Transport Fever nicht mehr, glücklicherweise ist es aber ohne großen Aufwand möglich sie zu konvertieren (solange man keine der neuen Funktionen nutzen möchte).

    2 Grundstruktur

    Als erstes muss ganz am Anfang der Datei folgende Zeile hinzugefügt werden: [tt]local soundeffectsutil = require "soundeffectsutil"[/tt] Die weiteren Änderungen betreffen dann den Rückgabewert der data-Funktion, hier bleibt eigentlich nichts so wie es war, die benötigten Daten sind aber alle auch bereits in den alten SoundSets vorhanden. Die neue Grundstruktur sieht so aus: [code]function data() return { tracks = { { name = "Pfad zur Datei", refDist = 25.0 } }, events = { horn = { names = { "Pfad zur Datei" }, refDist = 16.0 }, }, updateFn = function (input) return { tracks = { { gain = 1.0, pitch = 1.0 } }, events = { { gain = 1.0, pitch = 1.0 } } } end } end[/code] Der [tt]type[/tt] fällt also komplett weg, und [tt]refDist[/tt] wird an anderen Stellen benötigt.

    3 tracks

    Enthält alle Dateien die vorher unter [tt]params[/tt] -> [tt]tracks[/tt] -> [tt]clip[/tt] vorhanden waren, also alles was in einer Schleife abgespielt werden soll. Die angesprochene [tt]refDist[/tt] wird jetzt für jede Sounddatei einzeln angegeben. Wenn ihr Bremssounds und das Quietschen der Räder nutzen wollt, müsst ihr noch diese Einträge hinzufügen: [code] { name = "environment/_no-license_train-wheels-ringing-curve.wav", refDist = 25.0 }, { name = "vehicle/train_electric_modern/_brakes.wav", refDist = 25.0 },[/code]

    4 events

    Hier sind alle Sounds zu finden, die nur einmalig abgespielt werden, also z.B. Horn/Hupe, Türen öffnen/schließen oder das Klacken der Räder. Aus Einträgen wie [tt]horn = "vehicle/ICE1/horn.wav"[/tt] in den alten Dateien wird hier [tt]horn = { names = { "vehicle/ICE1/horn.wav" }, refDist = 16.0 }[/tt]. Bei den [tt]names[/tt] sind auch mehrere Pfadangaben möglich, wie genau das Spiel damit umgeht kann ich aber gerade nicht mit Sicherheit sagen (wird z.B. bei den [tt]clacks[/tt] verwendet).

    5 updateFn

    Hier wird entschieden welcher [tt]track[/tt] bzw. welches [tt]event[/tt] unter welchen Bedingungen wie laut/schnell abgespielt wird, die Funktion ersetzt also die [tt]gainCurve[/tt] und [tt]pitchCurve[/tt]. Zum Konvertieren könnt ihr als wert einfach die Funktion [tt]soundeffectsutil.sampleCurve()[/tt] verwenden und als Argumente die Nodes aus der alten Datei und [tt]input.speed01[/tt] übergeben, also z.B: [code]-- alt gainCurve = { nodes = { { .0, 0.6}, { .01, 0.12 }, { .05, 0.0 }, } }, -- neu gain = soundeffectsutil.sampleCurve({ { .0, 0.6}, { .01, 0.12 }, { .05, 0.0 }, }, input.speed01),[/code] Die Einträge hier beziehen sich immer auf die jeweiligen Einträge am Anfang der Datei, es müssen in den Tabellen also auch immer die gleiche Zahl an Einträgen vorhanden sein. [b]Bremssounds und Quietschen der Räder[/b][b]:[/b] [code] soundeffectsutil.squeal(input.speed, input.sideForce, input.maxSideForce), soundeffectsutil.brake(input.speed, input.brakeDecel, 0.5),[/code] Für Events wie das Horn können einfach, wie in der Grunstruktur angegeben, feste Werte verwendet werden. Die [tt]clacks[/tt] verwenden im Originalspiel die Funktion [tt]soundeffectsutil.clacks(input.speed, input.weight, input.numAxles, axleRefWeight, input.gameSpeedUp)[/tt], wobei [tt]axleRefWeight[/tt] die Achsmasse ist und entweder vorher definiert oder direkt als Zahl angegeben werden muss. Zusätzlich zur Geschwindigkeit stehen über [tt]input[/tt] jetzt noch mehr Werte zur Verfügung die zur Bestimmung der gain/pitch-Kurven genutzt werden können, z.B. [tt]power01[/tt] für die abgerufene Leistung.

    6 Vergleich

    Anhand des SoundSets des ICE 1: [code='ICE 1 alt']function data() return { type = "GENERIC", refDist = 16.0, horn = "vehicle/ICE1/horn.wav", params = { tracks = { { clip = "vehicle/ICE1/idle.wav", gainCurve = { nodes = { { .0, 0.6}, { .01, 0.12 }, { .05, 0.0 }, } }, pitchCurve = { nodes = { { .0, 2}, { .01, 2}, } } }, { clip = "vehicle/ICE1/drive.wav", gainCurve = { nodes = { { 0.0, 0.0 }, { 0.01, 1.0 }, { 1.0, 2.0 }, } }, pitchCurve = { nodes = { { 0, 1.0 }, { 0.01, 1.0 }, { 1, 1.5}, } } }, }, } } end[/code] [code='ICE 1 neu']local soundeffectsutil = require "soundeffectsutil" function data() return { tracks = { { name = "vehicle/ICE1/idle.wav", refDist = 25.0 }, { name = "vehicle/ICE1/drive.wav", refDist = 25.0 }, { name = "environment/_no-license_train-wheels-ringing-curve.wav", refDist = 25.0 }, { name = "vehicle/train_electric_modern/_brakes.wav", refDist = 25.0 } }, events = { clacks = { names = { "vehicle/clack/modern/part_1.wav", "vehicle/clack/modern/part_2.wav", "vehicle/clack/modern/part_3.wav", "vehicle/clack/modern/part_4.wav", "vehicle/clack/modern/part_5.wav", "vehicle/clack/modern/part_6.wav", "vehicle/clack/modern/part_7.wav", "vehicle/clack/modern/part_8.wav", "vehicle/clack/modern/part_9.wav", "vehicle/clack/modern/part_10.wav" }, refDist = 25.0 }, horn = { names = { "vehicle/ICE1/horn.wav" }, refDist = 16.0 } }, updateFn = function (input) local axleRefWeight = 10.0 return { tracks = { { gain = soundeffectsutil.sampleCurve({ { .0, 0.6}, { .01, 0.12 }, { .05, 0.0 }, }, input.speed01), pitch = soundeffectsutil.sampleCurve({ { .0, 2}, { .01, 2}, }, input.speed01) }, { gain = soundeffectsutil.sampleCurve({ { 0.0, 0.0 }, { 0.01, 1.0 }, { 1.0, 2.0 }, }, input.speed01), pitch = soundeffectsutil.sampleCurve({ { 0, 1.0 }, { 0.01, 1.0 }, { 1, 1.5}, }, input.speed01) }, soundeffectsutil.squeal(input.speed, input.sideForce, input.maxSideForce), soundeffectsutil.brake(input.speed, input.brakeDecel, 0.5) }, events = { clacks = soundeffectsutil.clacks(input.speed, input.weight, input.numAxles, axleRefWeight, input.gameSpeedUp), horn = { gain = 1.0, pitch = 1.0 } } } end } end[/code]

Teilen