Jump to content

Sounds of Skyrim Reimagined - A new dynamic way to apply sounds


Recommended Posts

So there is something that I have been poking around with for the past... 6 days 7ish onto 8 10/11 now?. 
Anyhow, I remember Sounds of Skyrim back in the day by the effect it had on a game and the patching hell it was, it was the thing that really got me into xEdit.

 

Cliffworms opened up perms awhile back and I knew there must of been a better way to do things and there kind of is.

Crushing you expectations comes first, I cannot produce an effect that is identical that Cliffworms produced, but I will be able to have more interactive sounds(kinda)

I'd like people to try and break it the best they can by using vanilla mechanics.

The mod currently spawns the log, some state debug code is enabled.

This should would in either game but was developed in SSE.

Here you go(Dev 3), seriously though, don't use this on a save that you intend to keep using.

Consider this a broken mod, if youre going to do that.

There are a few tools out there to assist with unbreaking it, if you did though.

 

What I want to achieve:

I want to learn how feasible a dynamic SoS would be. I'm not all that concerned with producing a file.

I would like a dynamic solution that doesn't spawn mass script instances all over the save because that is gross.
Quest aliases seem to work but have their own limitations, plus I consider them slow but I wont really know until I scale up and then throw in other mods.

 

I have a really small sample file which only handles three types of sounds, boiling potions, cooking pots and rain hitting tents. I'll be adding more as I find and troubleshoot problems

 

How it works as of today:

I have a script that has a sort of quick irregular heartbeat to spawn sounds later, but current every 11 thumps, the objects are rechecked. There are also a few other conditions like if the player is above a certain distance(4000) or if they switch interior/exterior.

Im planning on adding a weather change event.

The sound manager has a script attached to it that manages the other workers(I tired to decouple the sequential operations for speed)

The sound manager thumps all the workers for anything like fades.

The scripts then find available aliases and spawn sounds onto of them

After all the states have finished, the script goes to the "Waiting" state.

 

Known problems:

The code is still gross, I tried so many different methods.

 

What I need:

I need the sounds to make sense. I need to know what sounds I need to spawn and where. 

There are dozens of sets of sounds and I don't really know where to stick them all, any sort of correlation would be awesome.
Figure out what I don't know, this is the fun one as I can't figure out something that I know nothing about.

 

 

What if this "project" dies:

Anything and everything I do is open, have at it kid, original author perms need to be followed though.

Link to comment
Share on other sites

So if I'm reading this right it seems like there is potential for "pop-in" sounds that would be unnatural and distracting.

 

I'm not understanding your GetDistance. From your explanation it reads that the sound will play as long as the player is greater than or equal to the distance from the object? Is this correct? If so, shouldn't that be 'less than' because once the player enters the 'less than 2000 zone' the sound would stop. Unless the GetDistance is not related to the sound at all.

Link to comment
Share on other sites

There is a potential for a very subtle pop in, but its more that there is a potential of a stutter in the sound as the instance stops and then another is spawned.
I can spawn two instances onto of each other, which may work for the quieter sounds

If there is a different method, I am all ears.

 

The GetDistance is only the means that trigger the "update" of the sounds, other than that there is no direct relation.

 

Aliases are filled randomly around the player in a loaded area, duplicates are not possible. I usually have an excess of available aliases, I believe I settled on 10 for this test but so far there is no reason to have more than 2.

 

If there are any sounds that would really push the system, let me know.
I think I could try rain falling on the roads

Link to comment
Share on other sites

Ah, so once the player is greater than the 2000 distance from the object the sounds update. Gotcha. Too bad there isn't a function to "fade in" and "fade out" the sounds on the update. That would likely fix any pop-in issues.

I can screw with the volume on the instances, but its only a step.

Link to comment
Share on other sites

So I found a way to "buffer" the sounds, by leaving the ones close to the player alone.

I have a proof of concept but I need to think on whether or not this is a good idea.

Im trying to move to states and clean some stuff up but there are several things that I still don't quite understand.

Link to comment
Share on other sites

I rewrote everything to use states instead of quest stages, the upside is that it is much quicker and a little more reliable.

I fixed the issue with the sounds stuttering and some trigger problems.

There is one more condition I need to find a way to test which is weather transitions.

 

I need to probably start thinking on how I can fix things when they break, they shouldnt but they can.

I also need to start thinking on how do I remove or update this file, papyrus seems to hold the original scripts hostage if they mismatch.

 

I added one more set of sounds which is the rain hitting the tents all around skyrim.

 

Some of the sounds could really use a small touch here and there because some tracks dont sound all that great.

If you have an idea for spawning a sound on some object let me know.

 

Dev 2 file should be in the topic in a few. 

EDIT: Done

 

EDIT: Huh, it looks like there are only a few more sounds to add and that pretty much that system, the rest of the sounds should be easy to implement.

Then comes the hard part of figuring out the bugs that I don't know about.

Link to comment
Share on other sites

I rewrote everything to use states instead of quest stages, the upside is that it is much quicker and a little more reliable.

I fixed the issue with the sounds stuttering and some trigger problems.

There is one more condition I need to find a way to test which is weather transitions.

GetCurrentWeather

GetCurrentWeatherTrasition

 

I need to probably start thinking on how I can fix things when they break, they shouldnt but they can.

I also need to start thinking on how do I remove or update this file, papyrus seems to hold the original scripts hostage if they mismatch.

What do you mean by holding them hostage? In the save?

 

If you have an idea for spawning a sound on some object let me know.

GetInSameCell combined with HasKeyword might work if the object has a specific keyword assigned to it. Say for tents if would basically be:

  1. Is tent (object) in same cell as player? (GetInSameCell)
  2. If true, does tent (object) have keyword? (HasKeyword)
  3. If true, play specific sound. (rain on tents sound plays until #1 returns false)

You might even be able to leave out HasKeyword and just use GetInSameCell. The only thing with using GetInSameCell, is you'll likely have to code an instance for every single object you want to use this on which will really blow out your script since it would have to run through every single instance to check if the specific object in in the same cell as the player or not.

Link to comment
Share on other sites

I need to investigate how getcurrentwethertransition relates to something like rain stopping.
This is something that cannot be handled in the sound descriptor as all those conditions are ignored. I'd need to probably trigger the script and then have some condition in the aliases.

Yup, scripts while running appear to embed in the save till they stop. Shouldn't be too hard to figure out.
It still better than an instance for every object, but this one refuses to change which is bad. I need to figure out a way around this and how to control the script outside in general so that one can take full control.

I already have a spawner system and it is way more complicated then you may think.
I was saying a new sound that wasn't placed in the world before.
Three spawning sounds are fully implemented.
Yeah an instance for every object is something I wanted to avoid. Currently the maximum of instances per sounds is 10 because there are 10 aliases for each spawn quest.

GetInSameCell is not all that useful.

Keyword may be useful but currently I just have a list of valid objects as it was easy. It sucks that each script store its own instance. I would like to toss all the spawn scripts and have one.

Something I may implement is a random fade out.

Im probably going to implement a few more sounds and then move onto something like the roomtones and the interior region sounds.

Link to comment
Share on other sites

GetCurrentWeatherTransition returns a vale between two weathers transitioning. 1.0 = weather is not transitioning. 0.5 = weather is 50% transitioning to new weather. You should be able to combine it with GetCurrentWeather to tell it's raining and when the rain stops.

 

Save Game Script Cleaner works really well for clearing a script from a save. If it's possible to have a script update within a save, I sure don't know how to do it. When I have to update the scripts for Jaggarsfeld, I specifically instruct users to clean the scripts from their saves before updating to ensure the updated scripts are written to the saves properly.

Link to comment
Share on other sites

I changed the trigger yet again, now it runs off an irregular heartbeat.

This seems to make the scripts wait more often.

 

What Im probably going to do is put sounds into fade out when the object no longer exists.

This will cause the sounds to be decreased in volume slowly until, I just free them at some point.

I wonder what type of curve will work...

GetCurrentWeather requires me to know what the weather is which will require patches.

 

 

I know there is one for SSE and I used it to track how many objects were embedded from a few of my early devs.

This seems more of a workaround than a solution. I do believe it does catch everything.
Nothing that is spawned is ever saved because sound instances are just that, instances.

Link to comment
Share on other sites

Uploaded Dev 3
I changed the trigger to something a little better.

I decoupled all the worker so now things appear to operate a little faster.

I spent the past couple days trying to get water wood impacts to work. There is literally no way to easily do this. I had one solution that kind of worked.

Basically, I had the same alias system except with 50 aliases instead of 10. On all the filled aliases I move a dummy actor to it position. I then spawn another quest that have aliases that have the condition "IsInDangerousWater" and if they're filled, I spawn the sound.

The dummy actors were never "dummy" they were always an NPC and I didnt know how to strip them down to an immovable box. The only way to detect water is by using that condition on an actor, there is no function without SKSE. Another problem was it took a long time to fill all of that. I have currently removed this till skse.

I really want this feature as it added a ton of atmosphere

 

Reduced alias count to 5 on boiling potion and cooking pot, I have yet to see more than 2.

Tents may need to be bumped up to 15, as I see 7 in several spots.

I added fading sounds to tents, I need to trigger off weather transitions to make real use of this.

 

Next thing Im going to probably add is distant sounds like cows and farm animals.

The region edits never spawned the sound from the animal, my solution will :D

Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Guidelines, Privacy Policy, and Terms of Use.