Jump to content

Mesh Extended Swap System


Recommended Posts

ok, went on a finding/converting armor spree and I tried with a new save and latest files,

 

but I cannot get it to use more than 2 suffixes:

 

set RaceMessIni.svRace to sv_construct "imp|Whale|Argonisaur|Asari|porcelain doll|Panda|Hue'mon Goth"
set RaceMessIni.suffix1 to sv_construct "_thicc"
set RaceMessIni.suffix2 to sv_construct "_thighs"
set RaceMessIni.suffix3 to sv_construct "_curves"
setstage RaceMessIni 10   ;End of this entry

 

thicc (only fullbody) works, thighs (only lowerbody) works, but then curves fails to fill in the gaps (upperbody)

 

Sorry for your time, best of luck, still an absolutely great mod.

Link to comment
  • 5 weeks later...

Ok, running into a weird issue with SetBodyMess, possibly involving the SetBody Body Menu upgrade, which I am using. (it adds digitigrade argonians and khajits, and the muscle girl body type) Anyways, I'm using SetBodyMess to independently set up upper and lower body armors- I have it set up so that there are four passes, one each for <D, D-F, G-K, and GUTS upper bodies, respectively. Then, I have a pass for lower bodies- right now I am only experimenting with GUTS lower bodies. So the way it SHOULD work is that if its any normal lower body, nothing is replaced downstairs- if it's a GUTS lower body, the appropriate replacers are used.

Here's where it gets weird: it ONLY detects lower bodies explicitly defined in the setbody.ini. I have 3: HGMusL, HGMusLF, and DMRAGUTSSEL (the DMRA GUTS SE body, which I added manually). It does not work with HGECBGUTS, HGECBGUTSMANGA, HGECBUHK, or DMRABGUTS lowers- it will only change the upper body accordingly. So to sum:

upper body + bodies defined in setbody.ini = changed top and lower bodies
upper body + bodies NOT defined in setbody.ini = changed top, but not lower bodies

Here's the setbodymess.ini settings I'm using:

<spoiler>
set SBMessIni.iBody1 to sv_construct "HGECBUExnem|HGECBUExnemA|HGECBUExnemC|HGECBUAA|HGECBUA|HGECBUB|HGECBUC|HGECBUAF|HGECBUBF|HGECBUCF|HGECBULAB|HGECBULAB2|HGECBULABtC|HGECBULABtCs|HGECBULTB|HGECBURori|HGECIOAA|HGECIOA1|HGECIOA2|HGECIOB|HGECIOC|HGECBUGUTSLight|ZKECHGECB|ZKECHGECC|ZKECWHGECB|ZKECWHGECC|ZKECWKaiakuC|ZKECWTGND|HGECFlat|SPBSeitokai|TGNDPerky|TGNDPerkySP|ZUDOU|HGECTHEC|HGECTHECA|HGECTHECB|HGECTHECKaiaku|HGECGFrench|HGECGJuv|HGECGHigh|HGECGNorm" ; HGEC small and medium breasts
set SBMessIni.prefix to sv_construct "Ccup"           ; Data\Meshes\Ccup
set SBMessIni.rank to 50                                 ; Priority value in case of conflict with another entry
setstage SBMessIni 10

set SBMessIni.iBody1 to sv_construct "HGECBUExnemD|HGECBUD|HGECBUE|HGECBUF|HGECBUDF|HGECBUEF|HGECBUFF|HGECIOD|HGECIOF|HGECBUCLS|HGECBUCLS08|ZKECWTGND|ZKECExplorerE|ZKECHGECF|ZKECKaiakuE|ZKECKaiakuF|ZKECWExplorerE|ZKECWHGECF|ZKECWKaiakuE|ZKECWKaiakuF|ZKECWNPRM|HGECTHEC3LU|HGECTHEC4LU" ; HGEC large breasts
set SBMessIni.prefix to sv_construct "Ecup"           ; Data\Meshes\Ecup
set SBMessIni.rank to 50                                 ; Priority value in case of conflict with another entry
setstage SBMessIni 10

set SBMessIni.iBody1 to sv_construct "HGECBUHA|HGECBUHB|HGECBUJ|HGECBUK|HGECBUHAF|HGECBUHBF|HGECBUCLS10|HGECBUCLS16|DMRABU|DMRABU3M|DMRABUBDM|DMRABUMANGA|DMRABUHUGEDM|DMRABUNATURAL|DMRABURAK|DMRABURAH|DMRABUSPB15|DMRABUSPB28A|DMRABUSPB28B|DMRABUTUNED|DMRABUCLS14|DMRABUCLS17|ZKECWQHA|ZKECWQHB|HGECTHEC5LU|HGECTHEC6LU|HGECGMega|HGECGSoccer|HGECGXXL" ; HGEC very large breasts
set SBMessIni.prefix to sv_construct "Hcup"           ; Data\Meshes\Hcup
set SBMessIni.rank to 50                                 ; Priority value in case of conflict with another entry
setstage SBMessIni 10

set SBMessIni.iBody1 to sv_construct "HGECBUGUTS|HGECBUGUTSMANGA|HGECBUUHK|DMRABUGUTS|HGMusU|DMRAGUTSSEU" ; HGEC and DMRA GUTS
set SBMessIni.prefix to sv_construct "GUTSU"           ; Data\Meshes\GUTS
set SBMessIni.rank to 50                                 ; Priority value in case of conflict with another entry
setstage SBMessIni 10

set SBMessIni.iBody1 to sv_construct "HGECBGUTS|HGECBGUTSMANGA|HGECBUHK|DMRABGUTS|HGMusL|HGMusLF|DMRAGUTSSEL" ; HGEC and DMRA GUTS
set SBMessIni.prefix to sv_construct "GUTSL"           ; Data\Meshes\GUTS
set SBMessIni.rank to 60                                 ; Priority value in case of conflict with another entry
setstage SBMessIni 10

</spoiler>

Any help or advice would be greatly appreciated.

Link to comment
  • 3 weeks later...

Trying MESS now but I can't get SetBodyMess.esp to work.

 

I have the folder "meshes\DMRAReplacer" under "data" with my replacer meshes - specifically, these come from DMRA BBB Complete Clothing and Armor Replacer. I'm using this with SetBody Reloaded Blockhead Edition v1.46a. I'm using Blockhead 10.3 from the Nexus instead of the Blockhead that comes with MESS.

 

Bumped into the same issue. Figured it out.

It's the Blockhead version we're using, it is said in the OP that "Blockhead (ver 11.0.10 or later)" is required, thought it was some kind of typo, but nope, the Blockhead included in MESS is indeed, later than the one in Nexus. Should have emphasized that in the OP.

So yeah... use the included Blockhead instead.

Link to comment
  • 2 months later...

hello, nice mod so far, i like it very much but i have a question, is there a way to assign a piece of armor that in vanilla armor does not exist for certain sex?, example, the legion armor boots are only available for males in vanilla, but if i create the female folder with the armor and all, this mod won't recognize the armor... so, is there a way or is just a limitation i have to accept :(?

 

thank you

Link to comment
On 17.11.2017 at 5:02 AM, monkeyangie said:

hello, nice mod so far, i like it very much but i have a question, is there a way to assign a piece of armor that in vanilla armor does not exist for certain sex?, example, the legion armor boots are only available for males in vanilla, but if i create the female folder with the armor and all, this mod won't recognize the armor... so, is there a way or is just a limitation i have to accept :(?

 

thank you

Hello, there is some way to avoid this limitation. Using construction set you can assign nif to a female model. Then you just create the folder with custom nif files and SetBodyMess.esp is able to recognize them.

picture.bmp

Link to comment
On 18/11/2017 at 7:12 AM, dlebedkin1993 said:

Hello, there is some way to avoid this limitation. Using construction set you can assign nif to a female model. Then you just create the folder with custom nif files and SetBodyMess.esp is able to recognize them.

picture.bmp

i had it like that but i did not realize i had an .esp changing the paths of some armors, now all works, thank you :)

Link to comment
  • 2 months later...

Hey, any chance someone could point me towards how i could edit this to allow me more suffixes in raceMess?

 

I'm very script illiterate, but have managed to alter a few in my life.

 

I'm not even sure the relevant scripts and/or lines ...RaceMessIniPathSets maybe...

 

RaceMessIniScript also looks like a strong contender, but surely it wouldn't be as easy as adding string_var suffix3 could it?

 

anyway, just wanted to try to see if anyone has some pointers before i go diving in blind.

Link to comment
  • 4 weeks later...

Does anybody have a issue with male clothes and armors? It seems like setbodymess cannot assign models(nifs) for male character and npc... Please help.

 

Code example:

 

;Muscular
set SBMessIni.iBody1 to sv_construct "RMLMUSC|RMLHEAVYMUSC|RMLMUSCATH"
set SBMessIni.iBody2 to sv_construct "N|NS|DL|DLS|SL|SLS|HL|HLS|DN|DNS|SN|SNS|HN|HNS|SQLS"
set SBMessIni.prefix to sv_construct "Robert Muscular"
set SBMessIni.rank to 10
setstage SBMessIni 10

 

Is there support for male gender?

Link to comment
  • 2 months later...

ok so far ,ive got :

 

(edits in yellow, i may have missed a few)

RaceMessIniScript

 

 


scn RaceMessIniScript

string_var svRace
string_var prefix1
string_var prefix2
string_var prefix3
string_var prefix4
string_var prefix5
string_var prefix6

string_var suffix1
string_var suffix2
string_var suffix3
string_var suffix4
string_var suffix5
string_var suffix6

;<CSEBlock>
;<CSECaretPos> 154 </CSECaretPos>
;</CSEBlock>
 

 


 

 

RaceMessIniStage10

 

 


scn RaceMessIniStage10

array_var arRace
array_var arIter

array_var arPathSets
array_var arTemp

Begin Function {}
    ;printd "RaceMessIni10:: svRace: " + RaceMessIni.svRace + " prefix1: " + RaceMessIni.prefix1 + " suffix1: " + RaceMessIni.suffix1 + " prefix2: " + RaceMessIni.prefix2 + " suffix2: " + RaceMessIni.suffix2
    if 0 == RaceMessIni.svRace
        ;printd "RaceMessIni10:: Invalid INI entry svRace: " + RaceMessIni.svRace + " prefix1: " + RaceMessIni.prefix1 + " suffix1: " + RaceMessIni.suffix1 + " prefix2: " + RaceMessIni.prefix2 + " suffix2: " + RaceMessIni.suffix2
        sv_Destruct RaceMessIni.svRace
        sv_Destruct RaceMessIni.prefix1, RaceMessIni.suffix1, RaceMessIni.prefix2, RaceMessIni.suffix2, RaceMessIni.suffix3, RaceMessIni.suffix4, RaceMessIni.suffix5, RaceMessIni.suffix6
        return
    elseif eval (0 >= sv_Length RaceMessIni.svRace)
        sv_Destruct RaceMessIni.svRace
        sv_Destruct RaceMessIni.prefix1, RaceMessIni.suffix1, RaceMessIni.prefix2, RaceMessIni.suffix2, RaceMessIni.suffix3, RaceMessIni.suffix4, RaceMessIni.suffix5, RaceMessIni.suffix6
        return
    endif    

    
    let arTemp := call RaceMessIniPathSets RaceMessIni.prefix1 RaceMessIni.suffix1

    if eval arTemp == ar_Null
        ; There needs to be something to store...
        printd "RaceMessIni10:: Invalid INI entry svRace: " + RaceMessIni.svRace + " prefix1: " + RaceMessIni.prefix1 + " suffix1: " + RaceMessIni.suffix1 + " prefix2: " + RaceMessIni.prefix2 + " suffix2: " + RaceMessIni.suffix2
        sv_Destruct RaceMessIni.svRace
        sv_Destruct RaceMessIni.prefix1, RaceMessIni.suffix1, RaceMessIni.prefix2, RaceMessIni.suffix2, RaceMessIni.suffix3, RaceMessIni.suffix4, RaceMessIni.suffix5, RaceMessIni.suffix6
        return
    endif

    let arPathSets := ar_Construct array
    let arPathSets[0] := arTemp

    let arTemp := call RaceMessIniPathSets RaceMessIni.prefix2 RaceMessIni.suffix2
    if arTemp    
        ; Only store if significant
        let arPathSets[1] := arTemp
    endif

    let arTemp := call RaceMessIniPathSets RaceMessIni.prefix3 RaceMessIni.suffix3
    if arTemp    
        ; Only store if significant
        let arPathSets[2] := arTemp
    endif


    let arTemp := call RaceMessIniPathSets RaceMessIni.prefix4 RaceMessIni.suffix4

    if arTemp    

        ; Only store if significant

        let arPathSets[3] := arTemp

    endif
    
    let arTemp := call RaceMessIniPathSets RaceMessIni.prefix5 RaceMessIni.suffix5


    if arTemp    

        ; Only store if significant

        let arPathSets[4] := arTemp

    endif
    
    let arTemp := call RaceMessIniPathSets RaceMessIni.prefix6 RaceMessIni.suffix6


    if arTemp    

        ; Only store if significant

        let arPathSets[5] := arTemp

    endif
    
    Let arRace := sv_Split RaceMessIni.svRace "|"
    foreach arIter <- arRace
        let RaceMess.arRaces[arIter["value"]]:= arPathSets
    loop


    let arRace := ar_Null
End
;<CSEBlock>
;<CSECaretPos> 1973 </CSECaretPos>
;</CSEBlock>
 

 

 

and so far my racemess hasn't exploded, but hasn't gotten it to give me more suffixes to use, I'm hoping that what i changed is in the right direction and editing this script will complete it, but I'm unsure how to edit it...

 

RaceMessIniPathSets

 

 


scn RaceMessIniPathSets

string_var svPrefix
string_var svSuffix
string_var prefix
string_var suffix

short isValid
array_var arReturn

begin function {svPrefix svSuffix}
    let arReturn := ar_Null
    SetFunctionValue arReturn
    

    let isValid := 1
    if 0 == svPrefix
        let isValid := 0        
    elseif eval (1 > sv_Length svPrefix)
        let isValid := 0
    else
        let prefix := svPrefix
        while isValid && 0 < sv_Length prefix
            if eval prefix[0] == "\"
                if eval (1 < sv_Length prefix)
                    let prefix := prefix[1:-1]
                else
                    let isValid := 0
                endif                                    
            else
                break
            endif                                    
        loop

        while (0 < sv_Length prefix) && isValid
            if eval prefix[-1] == "\"
                if eval (1 < sv_Length prefix)
                    let prefix := prefix[0:-2]
                else
                    let isValid := 0
                endif                                    
            else
                break
            endif                                    
        loop
    endif
    
    if isValid
        let prefix := prefix + "\" ; a add slash if path is valid
    else
        let prefix := sv_Construct "%e"        
    endif
    
    
    let suffix := sv_Construct "%e"
    if 0 == svSuffix    
    elseif eval (1 > sv_Length svSuffix)
    else
        let isValid := 1
        let suffix := svSuffix
    endif
    if isValid
        let arReturn := ar_List prefix suffix
    endif
    
    SetFunctionValue arReturn
    sv_Destruct prefix suffix
end

;<CSEBlock>
;<CSECaretPos> 1032 </CSECaretPos>
;</CSEBlock>
 

 

 

any Ideas?

Link to comment
  • 1 month later...

Mesh Extended Swap System 2.2 unisex armor path fix

 

Unisex armors / clothing (where the female biped model path is blank) now properly
default to the male path.

 

example:

 

If you create a female version of a unisex item (i.e. Mithril boots) and
you have your alternate meshes in a designated folder like the below sample
ini entry:

 

set RaceMessIni.prefix1 to sv_construct "OMG"  ;Data\Meshes\OMG

 

Place the mesh in the corresponding male folder and it will now work with no
additional construction set entries:

 

Data\Meshes\OMG\armor\mithril\m\boots.nif

 

I don't believe the tamago or breakundies version require such a fix (I don't use
them so I could be wrong), but fixed ESPs are included for each of the other
versions:
PlayerClothingReplacer
RaceMess
 

Edit:  Old attachment deleted.  See post 121 for a newer version

 

Link to comment

Is there any interest in me uploading a giant compilation of various underwears with directories compatible with SetBody for different body sizes for the Dynamic Underwear System? I've considered it, but...TES4Edit doesn't detect the HGEC_A/B/C/D/E directories for SetBody, so it would be a bit tedious. No reason if people aren't interested.

Link to comment
  • 4 weeks later...
On 6/10/2018 at 8:26 PM, puddles said:

Is there any interest in me uploading a giant compilation of various underwears with directories compatible with SetBody for different body sizes for the Dynamic Underwear System? I've considered it, but...TES4Edit doesn't detect the HGEC_A/B/C/D/E directories for SetBody, so it would be a bit tedious. No reason if people aren't interested.

I would appreciate it if you upload yor compilation.

Link to comment
  • 1 month later...
On 7/4/2018 at 12:38 PM, dlebedkin1993 said:

I would appreciate it if you upload your compilation.

*bump* Yeah, I second that. I'd also appreciate someone uploading other compilations for the many different vanilla armor replacers out there-- that would play night with [auto]setbody. I wanna create a compilation myself. but will have to learn how all this works first-- and if one already exists out there-- I don't wanna "recreate the wheel" so to speak.

Link to comment
  • 4 months later...

Not sure if anyone is still around and uses this mod, but any chance someone could upload their SetBodyMess.Ini? Been looking into fixing the ini file myself, however it seems very daunting and I simply dont get the instructions.

Also, if possible, if anyone is enough of a (perverted) saint to upload their working ini for SetBodyMess (Dont really care about the player version since I play in first person and I play as a male), I'd love if you could make some sort of comment on where you got the accompanying meshes, and where to install them so it works.

Thanks in advance, though I dont hold up much hope since this mod is fairly old at this point 
:p

Link to comment
  • 4 months later...

I was only able to get 

set SBMessIni.iBody1 to sv_construct "HGECBUGUTSLight"   ; GUTS Light
;set SBMessIni.iBody2 to sv_construct "HGECBGUTSLight"   ; GUTS Light Lower Body
set SBMessIni.prefix to sv_construct "HGEC_GL"    ; Data\Meshes\HGEC_GL
set SBMessIni.rank to 50                                 ; Priority value in case of conflict with another entry
setstage SBMessIni 10   ;End of this entry

 

to work but if I add the 

;set SBMessIni.iBody2 to sv_construct "HGECBGUTSLight"   ; GUTS Light Lower Body it does not.

Link to comment
On 4/30/2019 at 3:33 PM, sunhawken said:

I was only able to get 

set SBMessIni.iBody1 to sv_construct "HGECBUGUTSLight"   ; GUTS Light
;set SBMessIni.iBody2 to sv_construct "HGECBGUTSLight"   ; GUTS Light Lower Body
set SBMessIni.prefix to sv_construct "HGEC_GL"    ; Data\Meshes\HGEC_GL
set SBMessIni.rank to 50                                 ; Priority value in case of conflict with another entry
setstage SBMessIni 10   ;End of this entry

 

to work but if I add the 

;set SBMessIni.iBody2 to sv_construct "HGECBGUTSLight"   ; GUTS Light Lower Body it does not.

Try setting "set SBMessMain.doodeebug to 0" to "set SBMessMain.doodeebug to 1"?

Could be you could check what the console says (If you use Conscript)

Also, I noticed you have it called "SBMessIni.prefix", rather than "SBMessIni.prefix1".

 

set SBMessIni.iBody1 to sv_construct "AGHGEC|AGHGECA|AGHGECB|AGHGECC|AGHGECD"
set SBMessIni.prefix1 to sv_construct "AGHGEC"
setstage SBMessIni 10

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