Jump to content

SexLab - Auto Vanilla Voices


Recommended Posts

View File

Introduction:

 

This simple mod will make the game automatically choose the correct SexLab voice type for an NPC when its SexLab animation is starting. The choices are from the mod SexLab Vanilla Voices.

 

Installation:

 

Just drop the contents into the Data folder or use a mod manager to install it. Load order doesn't matter, but make sure you've SexLab Vanilla Voices.

Don't forget to enable "NPCs Reuse Voice".

 

Uninstallation:

 

  1. Open the console and type "stopquest SLAutoVanillaVoicesConfigQuest" without the quotes.
  2. Save your game.
  3. Remove the following files from your Data folder: Sexlab - Auto Vanilla Voices.esp, seq\Sexlab - Auto Vanilla Voices.seq, scripts\SLAutoVanillaVoicesMCM.pex, scripts\SLAutoVanillaVoicesScript.pex, scripts\source\SLAutoVanillaVoicesMCM.psc and scripts\source\SLAutoVanillaVoicesScript.psc, or remove it with your mod manager.

 

Known Issues:

 

SexLab Vanilla Voices doesn't contain voices for all vanilla voice types. As such, it will return to the original behavior of SexLab and assign a random voice to an NPC using a voice type that isn't covered. An example is Delphine.

Nothing I can do, unless someone wants to continue SexLab Vanilla Voices and add SexLab voices for all vanilla voice types.


  • Submitter
  • Submitted
    01/31/2019
  • Category
  • Requires
    Sex Animation Framework v1.62 or higher, SexLab Vanilla Voices 2.8 or higher
  • Special Edition Compatible
    Yes

View File

 

Link to comment

Ok, quick questions:

 

1. Does this change the player's voice too? (I hope not)

 

2. Can I manually override what this mod has set? I mean - if it sets a voice, can I go to SSL settings and pick another one, without this mod overwriting it again?

 

Thanks for any info.

Link to comment
4 hours ago, Erundil said:

Ok, quick questions:

 

1. Does this change the player's voice too? (I hope not)

 

2. Can I manually override what this mod has set? I mean - if it sets a voice, can I go to SSL settings and pick another one, without this mod overwriting it again?

 

Thanks for any info.

 

1)

if (a != None && a != PlayerRef) ; We don't need to do this on the player.

 

2) The voices are always applied at the starting of an animation (only for the NPCs in that animation). You can override after that, but it will be reapplied when another animation is starting. It does only force voices into NPCs that match a voice type, if you have a custom NPC with a custom voice type or a vanilla NPC with an unique voice type that isn't covered by SexLab Vanilla Voices, the mod will do nothing and any voice set SexLab assigned or you did, will be respected.

Link to comment

ad. 1: Great.

ad. 2: Ok, got it. It would be ideal to apply voices to npcs before SexLab does, and only apply to those that don't have anything assigned yet. Not sure if that's possible though, scripting-wise.

 

Thanks for the info.

Link to comment
2 hours ago, Erundil said:

ad. 2: Ok, got it. It would be ideal to apply voices to npcs before SexLab does, and only apply to those that don't have anything assigned yet. Not sure if that's possible though, scripting-wise.

No. One of the reasons I've developed this mod was to reset the voice types on a bunch of NPCs SexLab assigned in the past which I didn't know which voice types they were using at the time.

 

I see no reason why a voice type that is available in SexLab Vanilla Voices should be overridden with another voice that will mismatch the NPC. I'm not implementing that.

 

You can however change it yourself on SLAutoVanillaVoicesScript.psc -> SetVanillasVoices member function.

 

if (SexLab.GetSavedVoice(a) == None)

...

endif

Link to comment

Great. I admire people who share the source code and explain it. No better way to learn scripts. Thanks.

Anyway, I'll try it later - at the moment I'm trying to make it work at all. It seems to assign random voices for me >_<

Not gonna blame the mod, might be my heavy load order :)

Link to comment

The mod should work as long as SexLab Vanilla Voices 2.8 is installed. The voice sets don't even need to be enabled, just registered in SexLab.

If you just installed it, try resetting SexLab voice registry.

 

Also, did you enable it in the MCM? The mod starts out disabled by default.

Link to comment
  • 1 month later...

Does anybody know why, in Vanilla Voices (not Auto) when set to random the female voice always always defaults to Vex??? I have to manually configure practically every chick in the game beforehand to ensure they don't use her voice set. I like the idea of this mod! It's just it overwrites my preferred voice type for certain chicks once I set them and check reuse...

Link to comment
  • 2 weeks later...
On 3/24/2019 at 2:48 PM, jpee1965 said:

Does anybody know why, in Vanilla Voices (not Auto) when set to random the female voice always always defaults to Vex??? I have to manually configure practically every chick in the game beforehand to ensure they don't use her voice set. I like the idea of this mod! It's just it overwrites my preferred voice type for certain chicks once I set them and check reuse...

I noticed even before this mod (just default sl) that there's a few voices (for males 'dovakin seems to be picked probably 90%) that would crop up constantly rather than it being properly random. (at-least this mod fixes that with npcs it can find a voice for)

Link to comment
47 minutes ago, Lilzt3hcat said:

I noticed even before this mod (just default sl) that there's a few voices (for males 'dovakin seems to be picked probably 90%) that would crop up constantly rather than it being properly random. (at-least this mod fixes that with npcs it can find a voice for)

It's because of how the function is set:

 

sslBaseVoice function PickGender(int Gender = 1)
	; Get list of valid voices
	bool[] Valid = Utility.CreateBoolArray(Slotted)
	int i = Slotted
	while i
		i -= 1
		sslBaseVoice Slot = GetBySlot(i)
		Valid[i] = Slot.Enabled && !Slot.Creature && (Gender == Slot.Gender || Slot.Gender == -1)
	endwhile
	; Select a random true in the list
	i = Utility.RandomInt(0, (Slotted - 1))
	int Slot = Valid.Find(true, i)
	if Slot == -1
		Slot = Valid.RFind(true, i)
	endIf
	return GetbySlot(Slot)
endFunction

This isn't a proper random algorithm.

 

For instance:

 

If you've 20 voice sets, but only voice set 1 and voice set 20 are valid for this NPC, it has a much greater chance of landing on voice set 20 than voice set 1 because if "i = Utility.RandomInt(0, (Slotted - 1))" is not 0, it automatically picks voice set 20 every time.

 

This is a design flaw within SexLab, which cannot be fixed without recompiling sslVoiceSlots.psc.

The best you can do without recompiling SexLab's scripts is to register for "AnimationStarting" and set new, properly randomized voices overriding SexLab's, same approach as this mod.

You will have trouble however if you don't have "Remember NPC voices" as a bunch of SexLab functions call PickVoice/GetVoice directly.

 

EDIT:

 

Here is a proper function, if you want to recompile:

 

sslBaseVoice function PickGender(int Gender = 1)
	; Get list of valid voices
	int[] Valid = Utility.CreateIntArray(Slotted)
  
	sslBaseVoice Slot
  
	int i = Slotted
	int j = 0

	while i
		i -= 1
		Slot = GetBySlot(i)
        
		if (Slot.Enabled && !Slot.Creature && (Gender == Slot.Gender || Slot.Gender == -1))
			Valid[j] = i
			j += 1
		endif
	endwhile

	i = Utility.RandomInt(0, (j - 1))
    
	return GetbySlot(Valid[i])
endFunction

 

Link to comment
On 4/7/2019 at 1:11 AM, Hawk9969 said:

It's because of how the function is set:

 


sslBaseVoice function PickGender(int Gender = 1)
	; Get list of valid voices
	bool[] Valid = Utility.CreateBoolArray(Slotted)
	int i = Slotted
	while i
		i -= 1
		sslBaseVoice Slot = GetBySlot(i)
		Valid[i] = Slot.Enabled && !Slot.Creature && (Gender == Slot.Gender || Slot.Gender == -1)
	endwhile
	; Select a random true in the list
	i = Utility.RandomInt(0, (Slotted - 1))
	int Slot = Valid.Find(true, i)
	if Slot == -1
		Slot = Valid.RFind(true, i)
	endIf
	return GetbySlot(Slot)
endFunction

This isn't a proper random algorithm.

 

For instance:

 

If you've 20 voice sets, but only voice set 1 and voice set 20 are valid for this NPC, it has a much greater chance of landing on voice set 20 than voice set 1 because if "i = Utility.RandomInt(0, (Slotted - 1))" is not 0, it automatically picks voice set 20 every time.

 

This is a design flaw within SexLab, which cannot be fixed without recompiling sslVoiceSlots.psc.

The best you can do without recompiling SexLab's scripts is to register for "AnimationStarting" and set new, properly randomized voices overriding SexLab's, same approach as this mod.

You will have trouble however if you don't have "Remember NPC voices" as a bunch of SexLab functions call PickVoice/GetVoice directly.

 

EDIT:

 

Here is a proper function, if you want to recompile:

 


sslBaseVoice function PickGender(int Gender = 1)
	; Get list of valid voices
	int[] Valid = Utility.CreateIntArray(Slotted)
  
	sslBaseVoice Slot
  
	int i = Slotted
	int j = 0

	while i
		i -= 1
		Slot = GetBySlot(i)
        
		if (Slot.Enabled && !Slot.Creature && (Gender == Slot.Gender || Slot.Gender == -1))
			Valid[j] = i
			j += 1
		endif
	endwhile

	i = Utility.RandomInt(0, (j - 1))
    
	return GetbySlot(Valid[i])
endFunction

 

That's awesome! Except it's completely beyond me to implement LOL!

Link to comment
  • 3 weeks later...

This is excellent, thank you.

 

Is there anyway to install SL Voices twice (Vanilla/Euphoric and then Rape) with different  mod names and then have this mod detect aggressive sex and use Rape voices and with the other set of voices with consensual sex?

 

That would be amazing!

Link to comment
3 hours ago, Sydney said:

This is excellent, thank you.

 

Is there anyway to install SL Voices twice (Vanilla/Euphoric and then Rape) with different  mod names and then have this mod detect aggressive sex and use Rape voices and with the other set of voices with consensual sex?

 

That would be amazing!

Yes, but it's a lot of work and I don't have a GPU to test it anyway.

You also want to use a xEdit script to make it quicker and less error prone.

  1. Change the name of the WAV files to something that easily identify them, such as 001_rape.wav and copy them over (use a batch script to speed it up).
  2. Merge the entries from the other vanilla voices ESPs by using different names and IDs. Also make sure the script renames them to their new names.
  3. Recompile sslVanillaVoicesFactory.psc with the new voice sets.
  4. Open Sexlab - Auto Vanilla Voices.esp in xEdit and add the new voice registrars as a new array property. You should probably use a xEdit script to copy the original ones and then make it rename them.
  5. Edit SLAutoVanillaVoicesScript.psc and recompile it.
string[] property MaleRapeVoiceNames   auto ; This should match the property array you just added to the ESP.
string[] property FemaleRapeVoiceNames auto ; This should match the property array you just added to the ESP.

sslThreadController slScene ; This should now be global so we can check if the actor is a victim.

string Function GetVoiceName(Actor target, bool isFemale = false)
    VoiceType vType = target.GetVoiceType()

    VoiceType[] voiceTypes
    string[]    voiceNames

    if (isFemale)
        voiceTypes = FemaleVoiceTypes

        if (slScene.IsVictim(target))
            voiceNames = FemaleRapeVoiceNames
        else
            voiceNames = FemaleVoiceNames
        endif
    else
        voiceTypes = MaleVoiceTypes

        if (slScene.IsVictim(target))
            voiceNames = MaleRapeVoiceNames
        else
            voiceNames = MaleVoiceNames
        endif
    endif

    int voiceIndex = voiceTypes.Find(vType)

    if (voiceIndex < 0)
        return ""
    endif

    return voiceNames[voiceIndex]
EndFunction

 

Link to comment
  • 4 weeks later...
  • 2 weeks later...
On 5/23/2019 at 1:50 PM, Lodakai said:

@hawk9969 this is great!  can you do an SE port?

Just run the ESP through SSE's Creation Kit?

 

There is nothing in this mod that requires to be ported to SSE.

Link to comment

Ahhh thanks Indeed I self ported and it works fine Thanks!

 

Also:

On 4/26/2019 at 3:56 PM, Sydney said:

This is excellent, thank you.

 

Is there anyway to install SL Voices twice (Vanilla/Euphoric and then Rape) with different  mod names and then have this mod detect aggressive sex and use Rape voices and with the other set of voices with consensual sex?

 

That would be amazing!

I think this is already easily done with Sexlab.    Consentual sex is the Mild folders.... Aggressive is medium...   Hot is for ending toward orgasm for both.  With SLSO you can also adjust the range at where hot voices kick in.  You can add and edit voice files in SL Vanilla voices in the sound descriptor section.   I already have a bunch of voice files set up for all the base vanilla voices.   If anyone is interested in any of them... send me a message.   There's quite a few I have yet to flesh out...   but overall I typically use 15 voice files or more for each category.

 

This is why I really like this mod so much... I've spent all this time expanding on those voices.. it was a real pain self assigning each one.  Thanks again hawk9969

Link to comment
  • 1 year later...
  • 3 months later...
  • 2 months later...
  • 9 months 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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use