Jump to content

NPC Body Scale Randomizer


Recommended Posts

Thanks Madpaddy. I'm working on a final feature which I felt was missing. If everything works out as expected, the mod will provide the possibility to randomize the body scales according to the NPC's race. But this will take several more days until finished (unless I hit a really nasty obstacle, maybe I'll drop the idea then).

Link to comment

Second and probably last enhacement: the heights of NPCs can now be randomized depending on the NPC's race and gender (restricted to the ten classical races of Skyrim; children, old people, vampires and so on use the default values). The easiest way (with respect to the Papyrus code) was to set up a default height range (as it was done in the versions before) and provide the possibility for each race and gender to set up a deviation from this upper and lower limit of the height range. I did not implement a check whether the chosen deviations are sensible or not, so it is possible to create negative limits or an lower limit which is bigger than the upper limit. So use your brains if you change any settings (all deviations default to zero). An unexpected positive experience was that, for once, Skyrim seems to be tolerant of strange settings created by unwisely chosen deviations and does not crash (at least not with the deliberately weird chosen settings I tested).

 

As a consequence of this enhacement, I also did a complete overhaul of the mod's MCM. Settings done in older versions stay untouched, only the layout has been changed and three pages have been added.

 

A problem which occured with an active height randomization was that other height modifications were temporarliy overriden, e.g. those introduced by a SexLab animation (if the appropriate option is set in SexLab). As a consequence I added a condition checking whether a SexLab animation is playing. All NPCs involved are not handled by the height setting script while the animation is playing. This, however, means that the SexLab Framework is now a requirement for this mod (as I use a function and variables of it).

 

NPC Body Scale Randomizer Bugfix 2015-08-02.7z

Link to comment

Looks like RaceMenu is going to have a feature that uses bodyslide morphs instead of skeleton Node scaling. This will remove the issues with neck gaps and will keep all armors that were created using a custom bodyslide configuration and body in sync PLUS the multitude of morphs that will randomly be set on each female NPC. Please look at the link if you have not seen this already.

 

Amazing stuff: http://www.nexusmods.com/skyrim/mods/29624/?tab=4&&navtag=http%3A%2F%2Fwww.nexusmods.com%2Fskyrim%2Fajax%2Fcomments%2F%3Fmod_id%3D29624%26page%3D1%26sort%3DDESC%26pid%3D0%26thread_id%3D879577&pUp=1

 

BodyGen Feature
BodyGen is a new feature that will be available after SKSE 1.7.3 that allows for guided ini files to apply random BodyMorph values onto any NPC specified in the files on a per-instance basis, spawning two of the same NPC will have different morphs. These files contain custom syntax to specify value ranges of morphs and can pick random subsets of morphs. More about this feature will be explained when the SKSE version required for this feature is released. It is safe to remain using 1.7.2.

Link to comment

I've been trying to figure this out... but apparently the featuer is already available. perhaps we can work on getting this to function together? So far expired has said the following:

 

The feature is released. You don't have any of these file locations because you have to make them. Your understanding is correct, the templates define the settings, and the morphs define the actors using the settings. The file location and files you have to make yourself, they become bound to a mod, where %PLUGIN% is the name of the plugin you are binding the settings to, e.g.

This is just an example, please don't put your settings here, make your own mod for that:
meshes\actors\character\BodyGenData\RaceMenu.esp\templates.ini
meshes\actors\character\BodyGenData\RaceMenu.esp\morphs.ini

 

That being stated I went ahead and attempted to set this up in my game build

 

 BodyGen is a BodyMorph randomization engine for creating NPCs with random morphs, they are outlined by template files and morph files

file location: meshes\actors\character\BodyGenData\%PLUGIN%\templates.ini

example contents:

Sevenbase=7B High@1.0 | 7B Bombshell High@1.0 | 7B Natural High@1.0 | 7B Cleavage High@1.0 | 7B Bcup High@1.0 Breasts=BreastSH@1.0 | BreastSSH@2.0, Breast@1.0, BreastCleavage@0.1:1.0, BreastGravity@0.1:1.0 Waist=Waist@-1.0:1.0 | ChubbyWaist@-1.0:1.0 | WideWaistLine@-1.0:1.0 Random=Breasts@-1.0, BreastsSmall@-1.0, BreastsSH@0:1.0, BreastSSH@0:1.0, BreastsFantasy@1.0, BigTorso@-1.0, Waist@-1.0:1.0, ChubbyWaist@-1.0:1.0, RoundAss@-1.0:1.0, SlimThighs@-1.0:1.0, Thighs@1.0, PregnancyBelly@0:1.0, NippleDistance@-1.0:0.0, Arms@-1.0:0.0, NippleSize@-1.0:0.0, ButtCrack@-1.0:0.0, Butt@-1.0:0.0, ButtShape2@-1.0:0.0, Legs@-1.0,0.0

file location: meshes\actors\character\BodyGenData\%PLUGIN%\morphs.ini

example contents: Skyrim.esm|F62F0=Sevenbase,Random,Waist,Breasts

Right now you must specify each ActorBase in the morphs.ini file but this could easily be generated via a TES5Edit script. The templating allows you to outline particular morphs, or sets of morphs.

Syntax: @ - Separates Morph and Values : - Separates Value range , Separates AND morphs | Separates OR morphs (The OR operation will only take one of the morphs within the current comma)

If a morph value is evaluated more than once it will take the last one evaluated. This would essentially increase the probability of that morph being evaluated.

If an Actor is derived from a template, or is a LeveledActorBase it will evaluate from the root template's parameters.

As I'm understanding it, the templates define the body settings, and the morph files state which actors use which settings

 

Following this I have created the file paths and used the RaceMenuMorphsCBBE.esp to store my morph parameters... I think. To be honest I have no idea how to link the .esp with the .ini files... i'm just lost on that so maybe we can figure this out together. Here is what I have set up:

 

I have my templates.ini, morphs.ini in this directory: A:\SteamLibrary\SteamApps\common\Skyrim\Mod Organizer\mods\BodySlide 2 and Outfit Studio\meshes\actors\character\BodyGenData\RaceMenuMorphsCBBE.esp\

My templates.ini looks like this:

Breasts=BreastsSH@0.0:2.0, BreastsSSH@0.0:2.0, Breasts@0.0:-2.0, BreastCleavage@-2.0:2.0, BreastGravity@-2.0:2.0, BreastFlatness@-2.0:2.0, BreastHeight@-2.0:2.0, BreastPerkiness@-2.0:2.0, BreastsFantasy@-2.0:2.0, BreastsSmall@0.0:-2.0, BreastWidth@-2.0:2.0, DoubleMelon@-2.0:2.0, PushUp@-2.0:2.0 

Nipples=NippleAreola@-2.0:2.0, NippleDistance@-2.0:2.0, NippleDown@-2.0:2.0, NippleLength@-2.0:2.0, NipplePerkiness@-2.0:2.0, NippleSize@-2.0:2.0, NippleTip@-2.0:2.0, NippleUp@-2.0:2.0

Butt=AppleCheeks@-2.0:2.0, BigButt@-2.0:2.0, Butt@-2.0:2.0, ButtCrack@-2.0:2.0, ButtShape2@-2.0:2.0, ButtSmall@-2.0:2.0, ChubbyButt@-2.0:2.0, RoundAss@-2.0:2.0

Torso=Back@-2.0:2.0, Belly@-2.0:2.0, Bigbelly@-2.0:2.0, BigTorso@-2.0:2.0, ChubbyWaist@-2.0:2.0, Hipbone@-2.0:2.0, Hips@-2.0:2.0, TummyTuck@-2.0:2.0, Waist@-2.0:2.0, WideWaistLine@-2.0:2.0

Legs=Ankles@-2.0:2.0, CalfSize@-2.0:2.0, CalfSmooth@-2.0:2.0, ChubbyLegs@-2.0:2.0, KneeHeight@-2.0:2.0, Legs@-2.0:2.0, SlimThighs@-2.0:2.0, Thighs@-2.0:2.0 

Arms=Arms@-2.0:2.0, ChubbyArms@-2.0:2.0, ShoulderSmooth@-2.0:2.0, ShoulderTweak@-2.0:2.0, ShoulderWidth@-2.0:2.0

I think I have this correct... but maybe you guys will understand someting that I do not.

My morphs.ini file is :

Skyrim.esm|*FormIDs for actors I want to edit???*=Breasts, Nipples, Butt, Torso, Legs, Arms

I don't know what i'm missing because I grabbed Aela the Huntresses Form ID and dropped it into the morphs.ini file for testing. COC whiterun myself and run up to her and I see no changes on her body... I feel like I am close nd with a little help can get this working but RaceMenu's mod author expired is being of very little assistance... If I can get it to work then I can help others to take advantage of this feature...

 

Sorry for typing a book :(

 

Thoughts?

Link to comment

According to Expired's example given and what you tried, and what I tried myself, it should work. Yet neither do. I'll have another look at it sometime, but right now I don't see any obvious mistake in the layout of the two files. And as long as it is completely unclear at which point the randomization via BodyGen fails (reading in the files, failing to do so, applying the values, etc.) it's a very tedious work. Word of advice though, your example given above looks like you try to do all at once. Better start with the most simple randomization possible, one trait for which a randomization is clearly visible. If this works, you can go on to a more complex set-up.

Link to comment

According to Expired's example given and what you tried, and what I tried myself, it should work. Yet neither do. I'll have another look at it sometime, but right now I don't see any obvious mistake in the layout of the two files. And as long as it is completely unclear at which point the randomization via BodyGen fails (reading in the files, failing to do so, applying the values, etc.) it's a very tedious work. Word of advice though, your example given above looks like you try to do all at once. Better start with the most simple randomization possible, one trait for which a randomization is clearly visible. If this works, you can go on to a more complex set-up.

 

Yes you are absoultely correct. Currently I have too much going on in the templates.ini. I will take your adivce. Honestly cannot wait for Expired to release more in depth information on this (if he/she ever does) but until then I might just leave it alone for a while. I figured that if I try the randomization on only a single actor that this would not be too much trouble for the game. However when I summon Aela to the testing hall she is not morphed in any way and simply has my BodySlide preset working on her.

 

We will get this to work eventually.

Link to comment

It seems to be working. I am very excited about this but to be honest I have no idea what I did differently... Just suddenly noticed the morphs on Aela. After that I added Njada Stone Arm's ID to the Morphs.ini to test and she went from having bee stings to a K cup. I'm not sure why this is suddenly working. I have added Ria, Aela and Njada with noticable changes... It is incredible how unique and different they look from each other now. I went to town and added a few more woman just to test. Hulda, Sadia, Carlotta, Arcadia and Ysolda. I exited Jorvaskir to see if there was any affect on them but to my surprise nothing had changed on them... hmmmm... Ria, Aela and Njada definitely morphed... so I wonder if it just takes time for the morphs to load on an actor? Anyway i'll post screen shots and my settings when my wife finally gets off my gaming computer.

 

Using morphs to make NPCs diverse is clearly the way to go. No neck seems or strange skeleton oddities. Just gotta test the feature out more.

 

Since I used mod organizer this might be a little different for those that do not.

 

I created a templates.ini and morphs.ini file under this root:

 

A:\SteamLibrary\SteamApps\common\Skyrim\Mod Organizer\mods\RaceMenu\meshes\actors\character\BodyGenData\RaceMenuMorphsCBBE.esp\

 

The RaceMenuMorphsCBBE.esp is the .esp that I am storing the settings to. Have no idea how this is set up to work by expired but this is per their instruction.

 

Morphs.ini = Skyrim.esm|1A696, 1A6D9, 1A6D7, 1325C, 132687, 135E6, 135E5, 1336B, 1336A, 13366, 13365, 1335F, 1327A, 13282, 13283, 1328C, 13290, 13297, 1329F, 132A1, 1337C, 13382, 1367A, 13B6D, 13B9C, 13B9B, 13B99, 13BA2, 13BA3, 13BA4, 13BA5, 13BAB, 13BAE, 13BB0, 13BB3, 13BB6, 13BB8, 13BB9, 13BBE, 13BC0, 1A2CF, 1BDB4, 1BDB8=Breasts, Nipples, Butt, Torso, Legs, Arms

 

You enter the ID for the actor that you want to be affected by the templates.ini settings = to what morphs you want to modify said actor.

 

Templates.ini = Breasts=BreastsSH@0.0:1.0, BreastsSSH@0.0:1.0, Breasts@0.0:-1.0, BreastCleavage@-1.0:1.0, BreastGravity@-1.0:1.0, BreastFlatness@-1.0:1.0, BreastHeight@-1.0:1.0, BreastPerkiness@-1.0:1.0, BreastsFantasy@-1.0:1.0, BreastsSmall@0.0:-1.0, BreastWidth@-1.0:1.0, DoubleMelon@-1.0:1.0, PushUp@-1.0:1.0

 

Nipples=NippleAreola@-1.0:1.0, NippleDistance@-1.0:1.0, NippleDown@-1.0:1.0, NippleLength@-1.0:1.0, NipplePerkiness@-1.0:1.0, NippleSize@-1.0:1.0, NippleTip@-1.0:1.0, NippleUp@-1.0:1.0

 

Butt=AppleCheeks@-1.0:1.0, BigButt@-1.0:1.0, Butt@-1.0:1.0, ButtCrack@-1.0:1.0, ButtShape2@-1.0:1.0, ButtSmall@-1.0:1.0, ChubbyButt@-1.0:1.0, RoundAss@-1.0:1.0

 

Torso=Back@-1.0:1.0, Belly@-1.0:1.0, Bigbelly@-1.0:1.0, BigTorso@-1.0:1.0, ChubbyWaist@-1.0:1.0, Hipbone@-1.0:1.0, Hips@-1.0:1.0, TummyTuck@-1.0:1.0, Waist@-1.0:1.0, WideWaistLine@-1.0:1.0

 

Legs=Ankles@-1.0:1.0, CalfSize@-1.0:1.0, CalfSmooth@-1.0:1.0, ChubbyLegs@-1.0:1.0, KneeHeight@-1.0:1.0, Legs@-1.0:1.0, SlimThighs@-1.0:1.0, Thighs@-1.0:1.0

 

Arms=Arms@-1.0:1.0, ChubbyArms@-1.0:1.0, ShoulderSmooth@-1.0:1.0, ShoulderTweak@-1.0:1.0, ShoulderWidth@-1.0:1.0

 

In templates.ini to specify the morphs and the range that you want the randomization process to work in. I seperated the morph names out so it's easier to see but my .ini file is not set up like this. I'm not sure if that matters.

 

I went back to this setup after trying only a few specific morphs in the Templates.ini. I recommend testing this with a new game as I did not see any changes to NPCs until I started a new game... not sure if it matters but thats what worked for me. 

 

note: you must have CBBE or UUNP bodyslide morphs working within the in game race menu. Let me know if anyone needs help setting that up.

post-10168-0-85034000-1439390494_thumb.jpg

post-10168-0-16382800-1439390502_thumb.jpg

Link to comment

Sounds great guys, one small bug ive found when i have the random height option on in the mcm if i walk near a dead body that has a bow the bow starts to fly around then return to the body and fly off again, only does it on dead bodies and only with the random height option.


Ps thank you for the race specific option its perfect :).

Link to comment

It seems to be working. I am very excited about this but to be honest I have no idea what I did differently... Just suddenly noticed the morphs on Aela. After that I added Njada Stone Arm's ID to the Morphs.ini to test and she went from having bee stings to a K cup. I'm not sure why this is suddenly working. I have added Ria, Aela and Njada with noticable changes... It is incredible how unique and different they look from each other now. I went to town and added a few more woman just to test. Hulda, Sadia, Carlotta, Arcadia and Ysolda. I exited Jorvaskir to see if there was any affect on them but to my surprise nothing had changed on them... hmmmm... Ria, Aela and Njada definitely morphed... so I wonder if it just takes time for the morphs to load on an actor? Anyway i'll post screen shots and my settings when my wife finally gets off my gaming computer.

 

Using morphs to make NPCs diverse is clearly the way to go. No neck seems or strange skeleton oddities. Just gotta test the feature out more.

If you get it working i would be very grateful if you could share it pls :) cheers.

Link to comment

The RaceMenuMorphsCBBE.esp is the .esp that I am storing the settings to. Have no idea how this is set up to work by expired but this is per their instruction.

I guess that's basically only a string used to keep the settings separated (if one has several mods installed using BodyGen). You probably don't need to create an additional mod for this but could attach those two files to an existing one.

 

I went back to this setup after trying only a few specific morphs in the Templates.ini. I recommend testing this with a new game as I did not see any changes to NPCs until I started a new game... not sure if it matters but thats what worked for me. 

 

note: you must have CBBE or UUNP bodyslide morphs working within the in game race menu. Let me know if anyone needs help setting that up.

Two comments:

  • I did not have BodySlide installed until now (and thus not the skse morph plugins), might very well be one cause for the non-functionality.
  • Starting a new game might be a good lead. After quickly setting up BodySlide, I saw that not all NPCs get the new body (though most do). So maybe something gets stored somewhere which prevents BodyGen to kick in or conflicts with it. Will check on this when I have more time.

EDIT:

 

As Expired pointed out correctly that height randomization doesn't work using BodySlide (and that was my single setting in my morphs.ini), nothing happend in my test yesterday. Changing the contents of templates.ini and morphs.ini to randomize breasts and belly succeeded, at least for newly created NPCs (like the Riften Guards) already created NPCs do not get morphed.

 

It works as described in jdods13's post above. Flexibility is much higher in comparison to the NPC Body Scale Randomizer, so better use BodyGen instead (should also decrease the size of the skse co-save). Now all we need is an easy way to get all the BaseIDs listed, which are unique for every mod installation and even depends on the load order (at least if Expired used the whole BaseID string, which is very likely).

 

EDIT 2:

 

Suprisingly, my last assumption proved to be wrong. Spawning 20 Sofias, they were all randomized. So Expired dropped the mod index when evaluating the BaseID (that's why you have to provide the mod's name), this makes things a bit easier.

 

Link to comment

Omg this is amazing.

 

If you are trying to find a way of getting all the base id for vanilla + dlc npcs, please check out sexlife at the sexlab download section.

 

There is actually a preset file that the mod uses to assign character personality traits to each unique npc trait which was manually assigned and compiled by the loverslab community. You can find the files in the mod. If you ask dooge the creator of sexlife how he does the automated reading of the Ids im sure he would be more than willing to share them with you.

 

The cool thing about his method is that base id and mod order is detected so if someone ever collects base Ids for npcs from other mods they can also be simply added into the preset file

Link to comment

I'm working on a TES5 script right now. It's purpose will be to export all NPCs of a certain mod and assign user defined randomization strings (depending on sex and race of the NPC) to the respective NPCs. The output will be written into a file. I already have the basic layout and functionality set-up, the rest should work analogously but requires some time and testing. If nothing unforseen happens, the script should be ready for release tomorrow or the day after.

Link to comment

 

The RaceMenuMorphsCBBE.esp is the .esp that I am storing the settings to. Have no idea how this is set up to work by expired but this is per their instruction.

I guess that's basically only a string used to keep the settings separated (if one has several mods installed using BodyGen). You probably don't need to create an additional mod for this but could attach those two files to an existing one.

 

I went back to this setup after trying only a few specific morphs in the Templates.ini. I recommend testing this with a new game as I did not see any changes to NPCs until I started a new game... not sure if it matters but thats what worked for me. 

 

note: you must have CBBE or UUNP bodyslide morphs working within the in game race menu. Let me know if anyone needs help setting that up.

Two comments:

  • I did not have BodySlide installed until now (and thus not the skse morph plugins), might very well be one cause for the non-functionality.
  • Starting a new game might be a good lead. After quickly setting up BodySlide, I saw that not all NPCs get the new body (though most do). So maybe something gets stored somewhere which prevents BodyGen to kick in or conflicts with it. Will check on this when I have more time.

EDIT:

 

As Expired pointed out correctly that height randomization doesn't work using BodySlide (and that was my single setting in my morphs.ini), nothing happend in my test yesterday. Changing the contents of templates.ini and morphs.ini to randomize breasts and belly succeeded, at least for newly created NPCs (like the Riften Guards) already created NPCs do not get morphed.

 

It works as described in jdods13's post above. Flexibility is much higher in comparison to the NPC Body Scale Randomizer, so better use BodyGen instead (should also decrease the size of the skse co-save). Now all we need is an easy way to get all the BaseIDs listed, which are unique for every mod installation and even depends on the load order (at least if Expired used the whole BaseID string, which is very likely).

 

EDIT 2:

 

Suprisingly, my last assumption proved to be wrong. Spawning 20 Sofias, they were all randomized. So Expired dropped the mod index when evaluating the BaseID (that's why you have to provide the mod's name), this makes things a bit easier.

 

 

 

Omg this is amazing.

 

If you are trying to find a way of getting all the base id for vanilla + dlc npcs, please check out sexlife at the sexlab download section.

 

There is actually a preset file that the mod uses to assign character personality traits to each unique npc trait which was manually assigned and compiled by the loverslab community. You can find the files in the mod. If you ask dooge the creator of sexlife how he does the automated reading of the Ids im sure he would be more than willing to share them with you.

 

The cool thing about his method is that base id and mod order is detected so if someone ever collects base Ids for npcs from other mods they can also be simply added into the preset file

 

I noticed that Njada Stonearm was not morphed until after I had re-loaded my game. From what I can tell is that it doesn't morph the actor right away.

 

I found a mod that prints out the formIDs for EVERY actor including monsters and males which is not what we want. We need a script that Locates actors with the Female flag only and prints only the formID with no actor names to a .txt document.

 

This is the ofrmat for what is printed: AelaTheHuntress "Aela the Huntress" [NPC_:0001A696] which makes it difficult to simply copy and paste the ID into your morphs.ini 0001A696

 

We need the format to be like this: 0001A696 for all female NPC_actors and Female Leveled NPC_actors

 

Here is the script that does the formID export with link: http://www.nexusmods.com/skyrim/mods/52922/?tab=1&navtag=http%3A%2F%2Fwww.nexusmods.com%2Fskyrim%2Fajax%2Fmoddescription%2F%3Fid%3D52922%26preview%3D&pUp=1 

 

by author EnigmaniteK:

 

 

{
  FormID List Exporter
  Enigmanitek
 
  Select a group of records and apply this to export a list of load-order correct formIDs
}
 
unit userscript;
var
  slItems: TStringList;
  frm: TForm;
  lbRecords: TCheckListBox;
  mnRecords: TPopupMenu;
  MenuItem: TMenuItem;
  btnFind, btnCancel: TButton;
  findMode,cntObjects: integer;
  findRecords: string;
 
procedure SelectInventoryClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
  ClickSelection('ALCH,AMMO,ARMO,BOOK,INGR,KEYM,LIGH,MISC,SCRL,SLGM,WEAP')
end;
 
procedure SelectDialogClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
  ClickSelection('DIAL,DLBR,DLVW,INFO,VTYP');
end;
 
 
procedure SelectMagicClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
  ClickSelection('ENCH,MGEF,SHOU,SPEL,WOOP');
end;
 
procedure ClickSelection(myStr: string);
var
i: integer;
begin
for i := 0 to Pred(lbRecords.Items.Count) do
if Pos(Copy(lbRecords.Items, 1, 4),myStr) > 0 then
lbRecords.Checked := True;
end;
 
 procedure SelectNoneClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
end;
 
procedure SelectAllClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbChecked, True, True);
end;
 
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_RETURN then
    TForm(Sender).ModalResult := mrYes;
  if Key = VK_ESCAPE then
    TForm(Sender).ModalResult := mrCancel;
end;
 
procedure PrepareData;
var
  i: integer;
begin
  for i := 0 to lbRecords.Items.Count - 1 do
    if lbRecords.Checked then begin
      if findRecords <> '' then
        findRecords := findRecords + ',';
      findRecords := findRecords + Copy(lbRecords.Items, 1, 4);
    end;
 
  if findRecords = '' then
    Exit;
end;
 
 
// Options Form
procedure OptionsForm;
var
  ini: TMemIniFile;
  s: string;
  i: integer;
begin
  frm := TForm.Create(nil);
  try
    frm.Caption := 'Export Record FormIDs';
    frm.Width := 260;
    frm.Height := 420;
    frm.Position := poScreenCenter;
    frm.BorderStyle := bsDialog;
    frm.KeyPreview := True;
    frm.OnKeyDown := FormKeyDown;
 
    lbRecords := TCheckListBox.Create(frm);
    lbRecords.Parent := frm;
    lbRecords.Left := 8;
    lbRecords.Top := 8;
    lbRecords.Width := 240;
    lbRecords.Height := 350;
    GetRecordDefNames(lbRecords.Items);
    
    mnRecords := TPopupMenu.Create(frm);
    lbRecords.PopupMenu := mnRecords;
//select all
    MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &All';
    MenuItem.OnClick := SelectAllClick;
    mnRecords.Items.Add(MenuItem);
//select inventory
MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &Inventory';
    MenuItem.OnClick := SelectInventoryClick;
    mnRecords.Items.Add(MenuItem);
//select dialog
MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &Dialog';
    MenuItem.OnClick := SelectDialogClick;
    mnRecords.Items.Add(MenuItem);
//select magic
MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &Magic';
    MenuItem.OnClick := SelectMagicClick;
    mnRecords.Items.Add(MenuItem);
//select none
    MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &None';
    MenuItem.OnClick := SelectNoneClick;
    mnRecords.Items.Add(MenuItem);
 
    btnFind := TButton.Create(frm);
    btnFind.Parent := frm;
    btnFind.Caption := 'Ok';
    btnFind.ModalResult := mrOk;
    btnFind.Width := 130;
    btnFind.Left := lbRecords.Left;
    btnFind.Top := lbRecords.Height+8;
 
    btnCancel := TButton.Create(frm);
    btnCancel.Parent := frm;
    btnCancel.Caption := 'Cancel';
    btnCancel.ModalResult := mrCancel;
    btnCancel.Left := btnFind.Left + btnFind.Width + 16;
    btnCancel.Top := btnFind.Top;
 
    // read settings from ini file
    ini := TMemIniFile.Create(ScriptsPath + 'FormID Export.ini');
    s := ini.ReadString(wbGameName, 'Records', '');
    for i := 0 to Pred(lbRecords.Items.Count) do
      if Pos(Copy(lbRecords.Items, 1, 4), s) > 0 then
        lbRecords.Checked := True;
    
    findMode := 0;
    i := frm.ShowModal;
    if i = mrOk then findMode := 1 else
      if i = mrYes then findMode := 2;
     
    // prepare search data and write settings to ini file
    if findMode <> 0 then begin
 PrepareData();
      ini.WriteString(wbGameName, 'Records', findRecords);
      ini.UpdateFile;
    end;
 
  finally
    frm.Free;
    if Assigned(ini) then ini.Free;
  end;
end;
     
 
// Initialize
function Initialize: integer;
var
  i: integer;
begin
  Result := 0;
  cntObjects := 0;
  OptionsForm;
  slItems := TStringList.Create;
end;
 
// Process
function Process(e: IInterface): integer;
begin
  Result := 0;
  if Pos(Signature(e), findRecords) = 0 then exit
  else begin
 
        slItems.Add(Name(e));
Inc(cntObjects);
  end;
end;
 
// Finalize
function Finalize: integer;
begin
  AddMessage(Format('Exported %d FormIDs.', [cntObjects]));
  slItems.SaveToFile(ProgramPath + 'Edit Scripts\FormID Export.txt');
  slItems.Free;
end;
 
end.

 

I sent this to the author of the TES5Edit script:

 

Hi there. I would like to ask your permission to modify your code in order to make a filter that searches for the Flag: Female and prints only the formID without any other information.

 

not like this: AelaTheHuntress "Aela the Huntress" [NPC_:0001A696]

 

like this: 0001A696

 

This way new mods that require users to input specific id's for NPCs can copy and paste this ID number into their configuration files that are then accessed by other mods.

I'm working on a TES5 script right now. It's purpose will be to export all NPCs of a certain mod and assign user defined randomization strings (depending on sex and race of the NPC) to the respective NPCs. The output will be written into a file. I already have the basic layout and functionality set-up, the rest should work analogously but requires some time and testing. If nothing unforseen happens, the script should be ready for release tomorrow or the day after.

 

Awesome!

Link to comment

 

 

The RaceMenuMorphsCBBE.esp is the .esp that I am storing the settings to. Have no idea how this is set up to work by expired but this is per their instruction.

I guess that's basically only a string used to keep the settings separated (if one has several mods installed using BodyGen). You probably don't need to create an additional mod for this but could attach those two files to an existing one.

 

I went back to this setup after trying only a few specific morphs in the Templates.ini. I recommend testing this with a new game as I did not see any changes to NPCs until I started a new game... not sure if it matters but thats what worked for me. 

 

note: you must have CBBE or UUNP bodyslide morphs working within the in game race menu. Let me know if anyone needs help setting that up.

Two comments:

  • I did not have BodySlide installed until now (and thus not the skse morph plugins), might very well be one cause for the non-functionality.
  • Starting a new game might be a good lead. After quickly setting up BodySlide, I saw that not all NPCs get the new body (though most do). So maybe something gets stored somewhere which prevents BodyGen to kick in or conflicts with it. Will check on this when I have more time.

EDIT:

 

As Expired pointed out correctly that height randomization doesn't work using BodySlide (and that was my single setting in my morphs.ini), nothing happend in my test yesterday. Changing the contents of templates.ini and morphs.ini to randomize breasts and belly succeeded, at least for newly created NPCs (like the Riften Guards) already created NPCs do not get morphed.

 

It works as described in jdods13's post above. Flexibility is much higher in comparison to the NPC Body Scale Randomizer, so better use BodyGen instead (should also decrease the size of the skse co-save). Now all we need is an easy way to get all the BaseIDs listed, which are unique for every mod installation and even depends on the load order (at least if Expired used the whole BaseID string, which is very likely).

 

EDIT 2:

 

Suprisingly, my last assumption proved to be wrong. Spawning 20 Sofias, they were all randomized. So Expired dropped the mod index when evaluating the BaseID (that's why you have to provide the mod's name), this makes things a bit easier.

 

 

 

Omg this is amazing.

 

If you are trying to find a way of getting all the base id for vanilla + dlc npcs, please check out sexlife at the sexlab download section.

 

There is actually a preset file that the mod uses to assign character personality traits to each unique npc trait which was manually assigned and compiled by the loverslab community. You can find the files in the mod. If you ask dooge the creator of sexlife how he does the automated reading of the Ids im sure he would be more than willing to share them with you.

 

The cool thing about his method is that base id and mod order is detected so if someone ever collects base Ids for npcs from other mods they can also be simply added into the preset file

 

I noticed that Njada Stonearm was not morphed until after I had re-loaded my game. From what I can tell is that it doesn't morph the actor right away.

 

I found a mod that prints out the formIDs for EVERY actor including monsters and males which is not what we want. We need a script that Locates actors with the Female flag only and prints only the formID with no actor names to a .txt document.

 

This is the ofrmat for what is printed: AelaTheHuntress "Aela the Huntress" [NPC_:0001A696] which makes it difficult to simply copy and paste the ID into your morphs.ini 0001A696

 

We need the format to be like this: 0001A696 for all female NPC_actors and Female Leveled NPC_actors

 

Here is the script that does the formID export with link: http://www.nexusmods.com/skyrim/mods/52922/?tab=1&navtag=http%3A%2F%2Fwww.nexusmods.com%2Fskyrim%2Fajax%2Fmoddescription%2F%3Fid%3D52922%26preview%3D&pUp=1 

 

by author EnigmaniteK:

 

 

{
  FormID List Exporter
  Enigmanitek
 
  Select a group of records and apply this to export a list of load-order correct formIDs
}
 
unit userscript;
var
  slItems: TStringList;
  frm: TForm;
  lbRecords: TCheckListBox;
  mnRecords: TPopupMenu;
  MenuItem: TMenuItem;
  btnFind, btnCancel: TButton;
  findMode,cntObjects: integer;
  findRecords: string;
 
procedure SelectInventoryClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
  ClickSelection('ALCH,AMMO,ARMO,BOOK,INGR,KEYM,LIGH,MISC,SCRL,SLGM,WEAP')
end;
 
procedure SelectDialogClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
  ClickSelection('DIAL,DLBR,DLVW,INFO,VTYP');
end;
 
 
procedure SelectMagicClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
  ClickSelection('ENCH,MGEF,SHOU,SPEL,WOOP');
end;
 
procedure ClickSelection(myStr: string);
var
i: integer;
begin
for i := 0 to Pred(lbRecords.Items.Count) do
if Pos(Copy(lbRecords.Items, 1, 4),myStr) > 0 then
lbRecords.Checked := True;
end;
 
 procedure SelectNoneClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbUnchecked, True, True);
end;
 
procedure SelectAllClick(Sender: TObject);
begin
  lbRecords.CheckAll(cbChecked, True, True);
end;
 
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_RETURN then
    TForm(Sender).ModalResult := mrYes;
  if Key = VK_ESCAPE then
    TForm(Sender).ModalResult := mrCancel;
end;
 
procedure PrepareData;
var
  i: integer;
begin
  for i := 0 to lbRecords.Items.Count - 1 do
    if lbRecords.Checked then begin
      if findRecords <> '' then
        findRecords := findRecords + ',';
      findRecords := findRecords + Copy(lbRecords.Items, 1, 4);
    end;
 
  if findRecords = '' then
    Exit;
end;
 
 
// Options Form
procedure OptionsForm;
var
  ini: TMemIniFile;
  s: string;
  i: integer;
begin
  frm := TForm.Create(nil);
  try
    frm.Caption := 'Export Record FormIDs';
    frm.Width := 260;
    frm.Height := 420;
    frm.Position := poScreenCenter;
    frm.BorderStyle := bsDialog;
    frm.KeyPreview := True;
    frm.OnKeyDown := FormKeyDown;
 
    lbRecords := TCheckListBox.Create(frm);
    lbRecords.Parent := frm;
    lbRecords.Left := 8;
    lbRecords.Top := 8;
    lbRecords.Width := 240;
    lbRecords.Height := 350;
    GetRecordDefNames(lbRecords.Items);
    
    mnRecords := TPopupMenu.Create(frm);
    lbRecords.PopupMenu := mnRecords;
//select all
    MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &All';
    MenuItem.OnClick := SelectAllClick;
    mnRecords.Items.Add(MenuItem);
//select inventory
MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &Inventory';
    MenuItem.OnClick := SelectInventoryClick;
    mnRecords.Items.Add(MenuItem);
//select dialog
MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &Dialog';
    MenuItem.OnClick := SelectDialogClick;
    mnRecords.Items.Add(MenuItem);
//select magic
MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &Magic';
    MenuItem.OnClick := SelectMagicClick;
    mnRecords.Items.Add(MenuItem);
//select none
    MenuItem := TMenuItem.Create(mnRecords);
    MenuItem.Caption := 'Select &None';
    MenuItem.OnClick := SelectNoneClick;
    mnRecords.Items.Add(MenuItem);
 
    btnFind := TButton.Create(frm);
    btnFind.Parent := frm;
    btnFind.Caption := 'Ok';
    btnFind.ModalResult := mrOk;
    btnFind.Width := 130;
    btnFind.Left := lbRecords.Left;
    btnFind.Top := lbRecords.Height+8;
 
    btnCancel := TButton.Create(frm);
    btnCancel.Parent := frm;
    btnCancel.Caption := 'Cancel';
    btnCancel.ModalResult := mrCancel;
    btnCancel.Left := btnFind.Left + btnFind.Width + 16;
    btnCancel.Top := btnFind.Top;
 
    // read settings from ini file
    ini := TMemIniFile.Create(ScriptsPath + 'FormID Export.ini');
    s := ini.ReadString(wbGameName, 'Records', '');
    for i := 0 to Pred(lbRecords.Items.Count) do
      if Pos(Copy(lbRecords.Items, 1, 4), s) > 0 then
        lbRecords.Checked := True;
    
    findMode := 0;
    i := frm.ShowModal;
    if i = mrOk then findMode := 1 else
      if i = mrYes then findMode := 2;
     
    // prepare search data and write settings to ini file
    if findMode <> 0 then begin
 PrepareData();
      ini.WriteString(wbGameName, 'Records', findRecords);
      ini.UpdateFile;
    end;
 
  finally
    frm.Free;
    if Assigned(ini) then ini.Free;
  end;
end;
     
 
// Initialize
function Initialize: integer;
var
  i: integer;
begin
  Result := 0;
  cntObjects := 0;
  OptionsForm;
  slItems := TStringList.Create;
end;
 
// Process
function Process(e: IInterface): integer;
begin
  Result := 0;
  if Pos(Signature(e), findRecords) = 0 then exit
  else begin
 
        slItems.Add(Name(e));
Inc(cntObjects);
  end;
end;
 
// Finalize
function Finalize: integer;
begin
  AddMessage(Format('Exported %d FormIDs.', [cntObjects]));
  slItems.SaveToFile(ProgramPath + 'Edit Scripts\FormID Export.txt');
  slItems.Free;
end;
 
end.

 

I sent this to the author of the TES5Edit script:

 

Hi there. I would like to ask your permission to modify your code in order to make a filter that searches for the Flag: Female and prints only the formID without any other information.

 

not like this: AelaTheHuntress "Aela the Huntress" [NPC_:0001A696]

 

like this: 0001A696

 

This way new mods that require users to input specific id's for NPCs can copy and paste this ID number into their configuration files that are then accessed by other mods.

I'm working on a TES5 script right now. It's purpose will be to export all NPCs of a certain mod and assign user defined randomization strings (depending on sex and race of the NPC) to the respective NPCs. The output will be written into a file. I already have the basic layout and functionality set-up, the rest should work analogously but requires some time and testing. If nothing unforseen happens, the script should be ready for release tomorrow or the day after.

 

Awesome!

 

 

I don't really understand how racemenu's bodymorph thing works. Are the morphs based on the meshes of the armors and body meshes?

 

Also jdods13, I highly recommend you to create a new thread on the adult skyrim mod download section and you could perhaps start recruiting people to create preset inis for the range of each value. Thus once your mod is up and running there will already be presets that users can grab and you wont have to spend time making them from scratch. Currently the screenshots you posted seems like the npcs have horizontal rocket boobs :/

Link to comment

This is not my mod. And the rocket boobs are from bodyscale randomizer. I had that running as well. The mod def works I just want to talk to the mod author regarding their plans as they might start a thread with informatin themselves. 

 

This only works with body slide.

 

You have to use the latest version of bodyslide to export a customer made body for small weight and big weight with the new .tri export feature. This enables the body morphs from bodyslife to be saves to a .tri file.

 

You can then use bodyslide to build matching armors and clothing for your body and a .tri file for each of the armor/ clothing. 

 

This enables the armor/clothing to be morphed along with the body. 

 

Once that is working you can install the CBBE/UUNP morphs in racemenu esp so that you can adjust the morphs within the game itself without needing to use body slide to make new body shapes.

 

You then set up the BodyGen folders as stated with your parameters and voila! when you see said actor they will have custom morphs on them.

 

here are my settings if you want to use them. Be sure that you are not using NPC body scale randomizer with this or you will get the torpedo boobs.

 

morphs.ini

 

Skyrim.esm|B9982=BodyGen (This currently only has Jenassa for testing) type placeatme b9982 to spawn her and see how the mod works

 

Template.ini

 

BodyGen=BreastsSH@-0.4:1.0, BreastsSSH@-0.4:1.0, Breasts@-2.0:0.0, BreastCleavage@-0.8:1.0, BreastGravity@-0.8:1.0, BreastFlatness@-0.8:0.8, BreastHeight@-0.8:0.8, BreastPerkiness@0.0:1.0, BreastsFantasy@-0.8:1.0, BreastsSmall@-0.8:0.8, BreastWidth@-0.4:0.4, DoubleMelon@-0.8:1.0, PushUp@-0.8:0.8, NippleAreola@-0.8:1.0, NippleDistance@-0.8:0.8, NippleDown@-0.8:0.8, NippleLength@-0.8:1.0, NipplePerkiness@-0.8:1.0, NippleSize@-0.8:1.0, NippleTip@-0.8:0.8, NippleUp@-0.8:0.8, AppleCheeks@-0.8:0.8, BigButt@-0.8:0.8, Butt@-0.8:0.8, ButtCrack@-0.8:1.0, ButtShape2@-1.0:1.0, ButtSmall@-0.8:0.8, ChubbyButt@-0.8:0.8, RoundAss@-0.8:0.8, Back@-0.8:0.8, Belly@-0.8:0.8, Bigbelly@-0.8:0.8, BigTorso@-0.8:0.8, ChubbyWaist@-0.8:0.8, Hipbone@-0.8:0.8, Hips@-0.8:0.8, TummyTuck@-0.8:0.8, Waist@-0.8:0.8, WideWaistLine@-0.8:0.8, Ankles@-0.8:0.8, CalfSize@-0.8:0.8, CalfSmooth@-0.8:0.8, ChubbyLegs@-0.8:0.8, KneeHeight@-0.8:0.8, Legs@-0.8:0.8, SlimThighs@-0.8:0.8, Thighs@-0.8:0.8, Arms@-0.8:0.8, ChubbyArms@-0.8:0.8, ShoulderSmooth@-0.8:0.8, ShoulderTweak@-0.8:0.8, ShoulderWidth@-0.8:0.8

 

In the images take not of the varied hip, waist and breast sizes... You can get a great deal of variety in the females now.

 

 

Link to comment

 

I don't really understand how racemenu's bodymorph thing works. Are the morphs based on the meshes of the armors and body meshes?

 

Also jdods13, I highly recommend you to create a new thread on the adult skyrim mod download section and you could perhaps start recruiting people to create preset inis for the range of each value. Thus once your mod is up and running there will already be presets that users can grab and you wont have to spend time making them from scratch. Currently the screenshots you posted seems like the npcs have horizontal rocket boobs :/

 

I don't think creating a separate mod is necessary. The TES5 script I'm writing simply provides the possibility to export the data of the NPCs. Which traits of a NPC will be randomized and in which range, however, solely depends on the respective user's preferences. Thus, I doubt it will be either possible or resonable to create a "general" mod.

Link to comment

Keep in mind that we are just learning how this feature works. So far himinbjoerg and I seem to be the only two really trying to figure it out... We have it working in our games now and himinbjoerg is working on making the process of getting the female formIDs for easy inculsion into your morphs.ini file. I suggest that if you want this to work in your game be sure that you have everything set up and working correctly in order for this feature to function properly. Check out bodyslide and racemenu for the needed info...

 

i'm fine with helping anyone to get this working but can't really help you with your game setup or answer anyquestions about the mod author's work, you gotta ask them.

 

I use Everybodies different redone to control female textures, hair, eyes and height in combination with Racemenu's BodyGen feature.

 

Now literally every single female NPC can be completely unique from one another in both shape and texture.

Link to comment

Attached file contains the TES5Edit script required to export all female NPCs' BaseIDs in a manner which can be used for RaceMenu's BodyGen feature. The output of the script is written to a file.

 

Usage

 

Extract the contents of the 7z file into the "Edit Scripts" directory of your TES5Edit installation. Run TES5Edit afterwards and load the desired .esm or .esp. Select it and run the script via Ctrl+9 or right click on mod->Apply script. This GUI (however, empty on the first run) shows up: see GUI-1.png

 

Enter the randomization definitions for the different races according to your personal preferences and the settings in your templates.ini. Change the filename if desired, then hit the "Export" button. The script runs, depening on the esm/esp's size, this can take up to half a minute. In the end, in TES5Edit's message box, a summary of what was done is printed (example given below for Skyrim.esm, file location may vary):

Applying script...
9	Argonian
223	Breton
94	Dark Elf
116	High Elf
125	Imperial
13	Khajiit
267	Nord
31	Orc
73	Redguard
18	Wood Elf
-----------------------------------------------------------------------------------------------------------------------------------------------
969	NPCs of 5118 analyzed NPCs were exported to D:\Modding and Patches\Skyrim\TES5Edit 3.1.1-25859-3-1-1\morphs.ini
-----------------------------------------------------------------------------------------------------------------------------------------------
[Apply Script done]  Processed Records: 869693, Elapsed Time: 00:38

The morphs.ini file was stored in the root directory of your TES5Edit installation. Copy this file into your BodyGen directory. Repeat this process for different .esm or .esp and append the content of the newly created morphs.ini to the existing one. Run Skyrim and have fun...

 

Setting-up BodyGen for those who have not done it yet

 

My relevant setup:

  • SKSE 1.7.3
  • RaceMenu 3.2.2
  • BodySlide 2 and Outfit Studio 2.7f
  • XP32 Maximum Skeleton Extended 3.13

 

Follow the instructions given here: http://www.loverslab.com/topic/39343-racemenu-v320b/

Create, e.g., the directory structure "meshes\actors\character\BodyGenData\NPC Body Scale Randomizer.esp". Put the morphs.ini file created by the TES5Edit script inside this directory. Additionally, create a "templates.ini" file which defines the randomizations you assigned in the GUI of the script. For the example above, these contents could look like:

Belly = PregnancyBelly@0.5:1.0
Breasts = BreastSH@0.0:1.0 | BreastSSH@0.0:2.0, Breast@1.0, BreastCleavage@0.1:1.0, BreastGravity@0.1:1.0

Change the ranges, add or delete BodySlide options to your own liking. This can be done race-dependent, e.g.:

...
BreastsNord = ...
BreastsOrc = ...
BreastsRedguard = ...
...

Simply enter the approriate definitions in the GUI of the TES5Edit script: see GUI-2.png

 

If you want to assign special settings to a single NPC, it works analogously, but can only be done manually in the morphs.ini and templates.ini files.

ExportNPCBaseIDsForBodyGen.7z

post-392973-0-95808200-1439563265_thumb.png

post-392973-0-57148900-1439563267_thumb.png

Link to comment

Attached file contains the TES5Edit script required to export all female NPCs' BaseIDs in a manner which can be used for RaceMenu's BodyGen feature. The output of the script is written to a file.

 

Usage

 

Extract the contents of the 7z file into the "Edit Scripts" directory of your TES5Edit installation. Run TES5Edit afterwards and load the desired .esm or .esp. Select it and run the script via Ctrl+9 or right click on mod->Apply script. This GUI (however, empty on the first run) shows up: see GUI-1.png

 

Enter the randomization definitions for the different races according to your personal preferences and the settings in your templates.ini. Change the filename if desired, then hit the "Export" button. The script runs, depening on the esm/esp's size, this can take up to half a minute. In the end, in TES5Edit's message box, a summary of what was done is printed (example given below for Skyrim.esm, file location may vary):

Applying script...
9	Argonian
223	Breton
94	Dark Elf
116	High Elf
125	Imperial
13	Khajiit
267	Nord
31	Orc
73	Redguard
18	Wood Elf
-----------------------------------------------------------------------------------------------------------------------------------------------
969	NPCs of 5118 analyzed NPCs were exported to D:\Modding and Patches\Skyrim\TES5Edit 3.1.1-25859-3-1-1\morphs.ini
-----------------------------------------------------------------------------------------------------------------------------------------------
[Apply Script done]  Processed Records: 869693, Elapsed Time: 00:38

The morphs.ini file was stored in the root directory of your TES5Edit installation. Copy this file into your BodyGen directory. Repeat this process for different .esm or .esp and append the content of the newly created morphs.ini to the existing one. Run Skyrim and have fun...

 

Setting-up BodyGen for those who have not done it yet

 

My relevant setup:

  • SKSE 1.7.3
  • RaceMenu 3.2.2
  • BodySlide 2 and Outfit Studio 2.7f
  • XP32 Maximum Skeleton Extended 3.13

 

Follow the instructions given here: http://www.loverslab.com/topic/39343-racemenu-v320b/

Create, e.g., the directory structure "meshes\actors\character\BodyGenData\NPC Body Scale Randomizer.esp". Put the morphs.ini file created by the TES5Edit script inside this directory. Additionally, create a "templates.ini" file which defines the randomizations you assigned in the GUI of the script. For the example above, these contents could look like:

Belly = PregnancyBelly@0.5:1.0
Breasts = BreastSH@0.0:1.0 | BreastSSH@0.0:2.0, Breast@1.0, BreastCleavage@0.1:1.0, BreastGravity@0.1:1.0

Change the ranges, add or delete BodySlide options to your own liking. This can be done race-dependent, e.g.:

...
BreastsNord = ...
BreastsOrc = ...
BreastsRedguard = ...
...

Simply enter the approriate definitions in the GUI of the TES5Edit script: see GUI-2.png

 

If you want to assign special settings to a single NPC, it works analogously, but can only be done manually in the morphs.ini and templates.ini files.

 

I love you. Will you make this available on the nexus?

Link to comment

OK after further playtesting I noticed that the randomization settings are not saved. This means that everytime an actor exits a cell then re-enters it she will have new randomized morph settings. This is not 100% confirmed but I have noticed breast sizes changing fo Aela each time I see her.

Link to comment

Ok so I have confirmed it. If you are using the BodyGen feature to do a builk randomization for each NPC that you add to your morphs.ini they will have a new set of morphs every time you load the game. The morph adjustments are not saved. This is good to know. Will continue to test this BodyGen feature for more limitations

Link to comment

Another Bugfix for the NPC Body Scale Randomizer. Addressed issues:

  • Typographical mistake, both in code and MCM, corrected. Affects detection of Khajiit.
  • Reduced maximum of height sliders from 10.0 to 5.0
  • Upper and lower limits of height deviations are now computed according to the actual settings. The lower limit can't be set higher than the upper limit any longer and vice versa.
  • Automatic computation of Neck Gap Correction. This, however, only works for NPCs which have not yet been randomized.
  • Addition of hotkey to set the Neck Gap Correction manually. Hotkey has to be defined in the MCM at first, reduction of neck gap by 0.1 per key press. Usage: aim at the NPC whose neck gap you want to modify with the crosshair, repeatedly press the hotkey until the neck gap is closed. A value too low will create a new neck gap, so be careful.

NPC Body Scale Randomizer Bugfix 2015-08-15.7z

Link to comment

Ok so I have confirmed it. If you are using the BodyGen feature to do a builk randomization for each NPC that you add to your morphs.ini they will have a new set of morphs every time you load the game. The morph adjustments are not saved. This is good to know. Will continue to test this BodyGen feature for more limitations

 

Confirmed here, too. Although that's actually bad to know. Unless Expired implements a means to save this data, the only thing I can think of is to either set no ranges in the templates.ini, which would result in all NPCs looking somehow identical. Or to create NPC dependent settings in both the templates.ini and morphs.ini. This, however, would mean a lot of manual work when changing the settings of many NPCs. Another solution could be to do the randomization while both morphs.ini and templates.ini are created, this requires the highest programming effort of the three mentioned approaches.

 

Edit: let's wait and see what Expired comments on the question regarding the possibility to store the data. After that I will decide on what happens with the script regarding broad publication.

 

Link to comment

Well expired got back to me and said that this should not be happening because the randomization is performed only OnInit of said actor.

 

quote from expired6978: 

That shouldn't be happening. It stores the settings, they are per instance of that actor, if you spawn a new one it generates it again. It essentially uses the OnInit, which should only be once.


I'll look over it again and see what I can do about it, I'm going to be changing the format of the BodyGen files soon to be json anyway.

Link to comment

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