|
|
-
24.06.2024 22:40
-
Suche Script um Locations eine bestimmte Soundkulisse zu geben.
#1
|
Hallo zusammen,
ich habe eine eher spezifischere Frage. Ich würde gerne den Küstenregionen von Vvardenfell und Solstheim das Meeresrauschen einer Küstenregion geben.
Theoretisch könnte ich jetzt einen Activator erschaffen, der besagten Sound abspielt. Das möchte ich allerdings vermeiden. Nicht nur weil ich dafür wahrscheinlich hunderte von Activatoren platzieren müsste, um jede Cell der Küstenregionen abzudecken.
Sondern auch, weil es völlig unübersichtlich im Construction Set ist, wo eine Cell beginnt und wieder aufhört.
Dann könnte ich natürlich es mir sehr einfach machen, und im Construction Set schlicht unter 'Region' Soundeffekte mit den Meeresrauschen platzieren. An sich auch eine gute Idee. Aber...
Leider werden unter 'Region' die Soundeffekte nicht permanent abgespielt, so dass das Meeresrauschen stets unterbrochen werden würde durch längere Momente der Stille.
Die beste Option wäre daher ein Script zu schreiben, ähnlich des Regensoundeffektes bei entsprechenden Wetter. Wenn man sich dieses ansieht, ist es letztendlich der PC, also der Spielercharakter selber, der diesen Sound erzeugt. Weswegen das Regengeräusch auch permanent und überall gleichlaut zu hören ist.
Hier scheitert aber mein, eher laienhaftes, Wissen um ein entsprechendes Script zu schreiben, dass der Soundeffekt des Meeresrauschen quasi, wie der Soundeffekt bei Regen, immer dann abgespielt wird, wenn der PC die entsprechende Region betritt.
Vielleicht kann einer vor euch mir diesbezüglich weiterhelfen?
|
|
|
|
|
-
|
Batmanistrator
Originally Posted by maekk03
Die beste Option wäre daher ein Script zu schreiben, ähnlich des Regensoundeffektes bei entsprechenden Wetter. Wenn man sich dieses ansieht, ist es letztendlich der PC, also der Spielercharakter selber, der diesen Sound erzeugt. Weswegen das Regengeräusch auch permanent und überall gleichlaut zu hören ist.
Nenne mal bitte den Namen des Scripts. Ich habe jetzt fast 15 Minuten gesucht und konnte kein Script finden, das auf die Beschreibung passt. Vielleicht gucke ich auch nur an der falschen Stelle, aber mit dem Namen des Scripts findet man's schnell.
Originally Posted by maekk03
Hier scheitert aber mein, eher laienhaftes, Wissen um ein entsprechendes Script zu schreiben, dass der Soundeffekt des Meeresrauschen quasi, wie der Soundeffekt bei Regen, immer dann abgespielt wird, wenn der PC die entsprechende Region betritt.
Vielleicht kann einer vor euch mir diesbezüglich weiterhelfen?
Es gibt meines Wissens kein "Spieler betritt Region X"-Ereignis, welches man über die Scriptfunktionen abfragen kann. Man kann aber erfassen, ob der Spieler gerade die Zelle gewechselt hat, und das muss er ja auch machen, wenn er eine neue Region betritt. Dafür gibt es CellChanged. Die Variable wird beim Zellwechsel für einen Frame auf 1 gesetzt (und ist ansonsten 0). Das muss man prüfen, und danach muss man noch herausfinden, in welcher Region der Spiele jetzt ist. Das wird etwas kniffelig, weil es auch dafür (glaube ich) keine Funktion gibt. Also würde man z. B. auf GetPCCell zurückgreifen müssen, um zu prüfen, ob der Spieler in einer bestimmten Zelle ist. Das wird also etwas länger als nur alle Regionen durchzugehen. Wenn das dann zutrifft, könnte man mit PlaySound / PlayLoopSound3D / etc. einen Sound abspielen. Grob sieht das so aus, wenn man beispielsweise einen Sound abspielen will, falls der Spieler in Vivec ist (ungetestet):
Code:
begin SoundScriptVivec
if ( CellChanged == 0 )
return
endif
if ( GetPCCell, "Vivec" == 1 )
; Spieler ist in Vivec oder einer Zelle, die Vivec im Namen hat.
PlaySound "book close"
endif
end
Das Script würde theoretisch einmal den Sound abspielen, den man beim Schließen eines Buches hört, sobald man eine Zelle mit "Vivec" im Namen betritt. Damit das auch immer läuft, müsste man es als globales Script einrichten oder irgendwo einmal mit StartScript triggern. Außerdem müsstest du für deinen Fall PlaySound durch PlayLoopSound3D ersetzen, da du das ja wiederholt abspielen willst und nicht nur einmal. Ich hab's hier mal nicht gemacht, weil's sonst nervt, wenn aller zwei Sekunden ein Buch zuklappt.
Darüber hinaus müsste man den Test auf die verschiedenen Zellen in den verschiedenen Regionen ausweiten. Der Teil mit
Code:
if ( GetPCCell, "Vivec" == 1 )
würde also unter Umständen sehr viel länger, weil man ihn etliche Male für alle gewünschten Zellen / Zellnamen wiederholen müsste.
Aber das wäre so in etwa die Grundidee, wie man das wahrscheinlich angehen könnte.
|
|
|
|
|
-
25.06.2024 20:40
#3
|
Originally Posted by Thoronador
Nenne mal bitte den Namen des Scripts. Ich habe jetzt fast 15 Minuten gesucht und konnte kein Script finden, das auf die Beschreibung passt. Vielleicht gucke ich auch nur an der falschen Stelle, aber mit dem Namen des Scripts findet man's schnell.
Das war mein Fehler. Entschuldige!
Besagtes Script ist Teil eines Mods, der u.a. dafür sorgt, dass ab einer bestimmten Höhe Windgeräusche zu hören sind - was das Besteigen von Bergen wesentlich atmosphärischer macht.
Keine Ahnung warum der Modder ein separates Script für den Regen erstellt hat. Ich nahm fälschlicherweise an, es gehört zum Hauptspiel.
Es gibt meines Wissens kein "Spieler betritt Region X"-Ereignis, welches man über die Scriptfunktionen abfragen kann. Man kann aber erfassen, ob der Spieler gerade die Zelle gewechselt hat, und das muss er ja auch machen, wenn er eine neue Region betritt. Dafür gibt es CellChanged. Die Variable wird beim Zellwechsel für einen Frame auf 1 gesetzt (und ist ansonsten 0). Das muss man prüfen, und danach muss man noch herausfinden, in welcher Region der Spiele jetzt ist. Das wird etwas kniffelig, weil es auch dafür (glaube ich) keine Funktion gibt. Also würde man z. B. auf GetPCCell zurückgreifen müssen, um zu prüfen, ob der Spieler in einer bestimmten Zelle ist. Das wird also etwas länger als nur alle Regionen durchzugehen. Wenn das dann zutrifft, könnte man mit PlaySound / PlayLoopSound3D / etc. einen Sound abspielen. Grob sieht das so aus, wenn man beispielsweise einen Sound abspielen will, falls der Spieler in Vivec ist (ungetestet):
Code:
begin SoundScriptVivec
if ( CellChanged == 0 )
return
endif
if ( GetPCCell, "Vivec" == 1 )
; Spieler ist in Vivec oder einer Zelle, die Vivec im Namen hat.
PlaySound "book close"
endif
end
Das Script würde theoretisch einmal den Sound abspielen, den man beim Schließen eines Buches hört, sobald man eine Zelle mit "Vivec" im Namen betritt. Damit das auch immer läuft, müsste man es als globales Script einrichten oder irgendwo einmal mit StartScript triggern. Außerdem müsstest du für deinen Fall PlaySound durch PlayLoopSound3D ersetzen, da du das ja wiederholt abspielen willst und nicht nur einmal. Ich hab's hier mal nicht gemacht, weil's sonst nervt, wenn aller zwei Sekunden ein Buch zuklappt.
Darüber hinaus müsste man den Test auf die verschiedenen Zellen in den verschiedenen Regionen ausweiten. Der Teil mit
Code:
if ( GetPCCell, "Vivec" == 1 )
würde also unter Umständen sehr viel länger, weil man ihn etliche Male für alle gewünschten Zellen / Zellnamen wiederholen müsste.
Aber das wäre so in etwa die Grundidee, wie man das wahrscheinlich angehen könnte.
Vielen lieben Dank für die ausführliche Anleitung. Ich werde es bei Gelegenheit einmal testen. Leider muss ich zu meiner Schande gestehen, dass ich zuvor noch eine WAV mit entsprechenden Sound finden muss.
Da dieses mir die kleinere Herausforderung erschien, dachte ich mir, dass ich zuerst einmal herausfinde, wie ein entsprechenden Script aussieht, oder ob es überhaupt möglich ist.
|
|
|
|
|
-
26.06.2024 18:23
#4
|
Hallo Thoronador,
ich habe dein Script-Beispiel heute einmal ausprobiert, und leider funktioniert es nicht.
|
|
-
26.06.2024 20:03
#5
|
Vielleicht wäre das offizielle PI Bitter Coast Sounds eine Anlaufstelle: 3 Scripts, dazu 4 Activatoren die in 73 Zellen verteilt sind und 12 Game Settings, wobei ich über die aber nichts weiß.
Die Zellen im CS erkennst Du im Cell View, wenn Du B drückst.
|
|
-
27.06.2024 18:46
#6
|
Originally Posted by Ortega1302
Vielleicht wäre das offizielle PI Bitter Coast Sounds eine Anlaufstelle: 3 Scripts, dazu 4 Activatoren die in 73 Zellen verteilt sind und 12 Game Settings, wobei ich über die aber nichts weiß.[
Das Problem, wenn man 'Bitter Coast Sounds' als Vorlage nimmt, liegt darin, dass besagte Activatoren nur eine begrenzte Reichweite haben, und darüber hinaus nicht mehr zu hören sind.
Ich brauchte also ein Script, welche den Soundeffekt über die ganze Zelle hörbar macht. Damit wäre mir bei dieser Variante schon geholfen.
Die Zellen im CS erkennst Du im Cell View, wenn Du B drückst.
Danke für die Info!
|
|
-
|
Batmanistrator
Originally Posted by maekk03
Das war mein Fehler. Entschuldige!
Besagtes Script ist Teil eines Mods, der u.a. dafür sorgt, dass ab einer bestimmten Höhe Windgeräusche zu hören sind - was das Besteigen von Bergen wesentlich atmosphärischer macht.
Keine Ahnung warum der Modder ein separates Script für den Regen erstellt hat. Ich nahm fälschlicherweise an, es gehört zum Hauptspiel.
Macht nichts, aber wenn du den Namen des PlugIns sowie des Scripts nennst, könnte ich mir das mal anschauen. Vielleicht lassen sich daraus ein paar Erkenntnisse für das aktuelle Problem gewinnen. Im Idealfall könnte man daraus für deinen Anwendungsfall etwas basteln.
Originally Posted by maekk03
Hallo Thoronador,
ich habe dein Script-Beispiel heute einmal ausprobiert, und leider funktioniert es nicht .
Das hatte ich fast erwartet. Jetzt gibt es natürlich etliche denkbare Gründe, warum das nicht funktioniert. Einer der ersten wäre, dass das Script nicht aktiv ist / nicht global läuft. Hatte ich ja schon kurz angesprochen, was da noch zu tun wäre:
Originally Posted by Thoronador
Damit das auch immer läuft, müsste man es als globales Script einrichten oder irgendwo einmal mit StartScript triggern. Außerdem müsstest du für deinen Fall PlaySound durch PlayLoopSound3D ersetzen, da du das ja wiederholt abspielen willst und nicht nur einmal. Ich hab's hier mal nicht gemacht, weil's sonst nervt, wenn aller zwei Sekunden ein Buch zuklappt.
Die Nachteile bei einem Ansatz mit Activators sind, dass man davon einerseits viele bräuchte (mindestens einen Activator in jeder zu beschallenden Zelle) und andererseits sind die Sounds dann stationär an den jeweiligen Activator gebunden, d. h. die Lautstärke nimmt mit der Entfernung vom Activator ab. Letzteres hast du ja schon bemerkt.
|
|
|
|
|
-
24.09.2024 21:50
#8
|
Hallo, da bin ich noch einmal...
Trotz länger verstrichener Zeit hat mich das Problem doch nicht losgelassen.
Ich habe mir die 'Feuer/Lavafontänen' angesehen, die in 'Rocky Red Mountain' genutzt werden.
Sie erscheinen immer für wenige Sekunden, um dann wieder per Script deaktiviert zu werden - Der Trick, welchen der Modder hier anwendet ist, mehrere dieser Meshes in unterschiedlicher Größe, und mit unterschiedlichen Zeitabständen betreffend des Erscheinens, übereinander zu legen, so dass es im Spiel selber aussieht, als würde die Fontäne wachsen und schrumpfen.
Deren Sound ist laut genug, dass er in der gesamten Zelle zu hören ist, in welcher diese Meshes aktiviert sind.
Dabei habe ich mir gedacht, wenn ich statt der Meshes für die 'Feuer/Lavafontänen' die Meshes des 'mist' bei den Wasserfällen nutze, müsste ich nicht einen ähnlichen Effekt per Script erzeugen können?
Dass Quasi die Meshes kurzeitig wie eine Brandung an einen Felsen im Meer erscheint, und in dieser Zeit dabei den Soundeffekt von Meeresbrandung abspielt? Dadurch dass die Meshes immer wieder zurückkehrt, müsste auch der Soundeffekt relativ permanent sein.
Spätestens wenn ich den Trick des Modders anwende, und unterschiedliche Meshes mit unterschiedlichen Zeitabständen abspiele.
Diesbezüglich bin ich nicht größenwahnsinnig. Mir würde EIN Felsen pro Zelle mit diesen Effekt genügen. Kein Grund jeden Felsen an der Azura-Küste damit zu versehen! Mir geht es hauptsächlich um den Sound-Effekt.
Ich brauchte nur noch etwas Hilfe bei der Umgestaltung des Script:
Hier einmal das Originalscript von 'Rocky Red Mountain'
[Bild: Screenshot_2024_09_24_212709.png]
[Bild: Screenshot_2024_09_24_212814.png]
|
|
|
|
|
-
|
Batmanistrator
Auf dem Screenshot ist ein Teil des Scripttextes abgeschnitten. Ich nehme mal an, dass die komplette Zeile
Code:
Set LigthTime to ( LigthTime + GetSecondsPassed )
lautet, oder?
Bei Scripts empfiehlt es sich übrigens, statt Screenshots davon zu machen (wer will das schon abtippen?) einfach den Text zu kopieren und in einem Code-Tag hier reinzustellen.
|
|
-
25.09.2024 16:34
#10
|
Originally Posted by Thoronador
Auf dem Screenshot ist ein Teil des Scripttextes abgeschnitten. Ich nehme mal an, dass die komplette Zeile
Code:
Set LigthTime to ( LigthTime + GetSecondsPassed )
lautet, oder?
Das ist richtig! Ich habe die fehlende Ecke glatt übersehen.
Bei Scripts empfiehlt es sich übrigens, statt Screenshots davon zu machen (wer will das schon abtippen?) einfach den Text zu kopieren und in einem Code-Tag hier reinzustellen.
Das hätte ich auch gerne gemacht, wenn das Construction Set es zulassen würde, dass Scripts kopiert werden.
|
|
-
26.09.2024 20:09
#11
|
Originally Posted by maekk03
Das ist richtig! Ich habe die fehlende Ecke glatt übersehen.
Das hätte ich auch gerne gemacht, wenn das Construction Set es zulassen würde, dass Scripts kopiert werden.
Stimmt, mit rechter Maustaste->kopieren geht es nicht, aber mit Strg-C -> Strg-V aber schon.
|
|
-
29.09.2024 11:05
#12
|
Originally Posted by Ortega1302
Stimmt, mit rechter Maustaste->kopieren geht es nicht, aber mit Strg-C -> Strg-V aber schon.
Danke für den Hinweis!
Code:
begin mbgRMWrathScript1
float LigthTime
short Ligth
float timer
short doOnce
short MyRandom
short playx
short playy
short playz
If menumode==1
return
endif
if ( doOnce == 0 )
disable
set doOnce to 1
endif
if ( Ligth > 0 )
Set LigthTime to ( LigthTime + GetSecondsPassed )
if ( LigthTime < 0.7 )
Return
endif
Disable
set MyRandom to ( Random100 * 2 )
set Ligth to 0
set LigthTime to 0
else
if ( timer < MyRandom )
Set timer to ( timer + 0.7 )
Return
else
Enable
PlaySound, "rumble1"
if ( GetDistance player < 30 )
ExplodeSpell, "mbgRMWrathSpell1"
endif
set timer to 0
set Ligth to 1
endif
endif
end mbgRMWrathScript1
|
|
-
|
Batmanistrator
Habe in deinem Beitrag noch den Code-Tag gesetzt, damit die Formatierung erhalten bleibt.
|
|
-
10.11.2024 12:51
#14
-
|
Batmanistrator
Die Wasserhöhe ist in Exterior-Zellen immer gleich hoch. Da würde ich mich jetzt nicht auf einen Wert festlegen wollen, aber wenn ich raten müsste, würde ich auf null tippen. Ansonsten gibt's fürs Scripten auch noch die Funktion GetWaterLevel (ab Tribunal), welche die Wasserhöhe zurück gibt. Vielleicht hilft das ja.
|
|
-
12.11.2024 17:14
#16
|
Originally Posted by Thoronador
Die Wasserhöhe ist in Exterior-Zellen immer gleich hoch. Da würde ich mich jetzt nicht auf einen Wert festlegen wollen, aber wenn ich raten müsste, würde ich auf null tippen. Ansonsten gibt's fürs Scripten auch noch die Funktion GetWaterLevel (ab Tribunal), welche die Wasserhöhe zurück gibt. Vielleicht hilft das ja.
Vielen lieben Dank! Null ist die tatsächliche Höhe des Wasserpegels
Jetz brauchte ich nur noch die Info, wie weit ich die Min- und Max Range setzen muss, damit der Soundeffekt möglichst weit/ über die gesamte Zelle zu hören ist. Kann mir jemand diesbezüglich weiterhelfen?
|
|
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
|
|
|