Jump to content

Recommended Posts

  • 5 weeks later...

Could this one day be extended to allow some kind of set clothing/armor mod that could detect which body the player was using with setbody an then use alternative meshes for the player if they were present (i.e. if the player had a DMRA body from setbody, then they would have DMRA clothes/armor as well instead of the default armor)?

Link to comment

 

Does anybody else get "The file link that you requested is not valid." from 4shared when trying to download the Vanilla Maternity Clothes?

Yeah, I'm getting that as well when I try to download from 4shared.

 

 

I was ablt to transafer a copy to my 4Shared account but also could not download it; same "The file link that you requested is not valid." message you all are getting...

 

Link to comment

Could this one day be extended to allow some kind of set clothing/armor mod that could detect which body the player was using with setbody an then use alternative meshes for the player if they were present (i.e. if the player had a DMRA body from setbody, then they would have DMRA clothes/armor as well instead of the default armor)?

 

 No, for several reasons.

1. It's out of focus of this plugin.

2. This mod is already bugged to the hell when used together with Break Armor.

3. SetBody is not really ready to support such kind of framework yet. (if you use Setbody to identify the current body)

 

I'm working on the "body categorizing" support in SetBody, but it will take some time and yet I probably won't do the setcloting mod myself.

 

Does anybody else get "The file link that you requested is not valid." from 4shared when trying to download the Vanilla Maternity Clothes?

Yeah, I'm getting that as well when I try to download from 4shared.

I was ablt to transafer a copy to my 4Shared account but also could not download it; same "The file link that you requested is not valid." message you all are getting...

I see.. But unfortunately I don't think I still have it. I'll remake the plugin (to use all the preggo clothings maybe) and upload it soon.

Link to comment

Hi briancs, and thanks for the link.

If that was what folks were talking about, I still have it. I thought they were refering to the old plugin.

Very strangely that 4shared link no longer works, for no apparent reason.

 

I updated the OP with the new link. Should work from now on.

Link to comment

Links are working again. DL'ed to include it in upcoming BAIN package...

 

And I don't care what anyone here says or has read. 4Shared's policy & behavior has changed in the last year, for the worse.

 

Time to start looking for another UL site...

 

Link to comment
  • 3 weeks later...

I don't know if it's just me, but I couldn't download any files from 4shared. Either I somehow didn't see the download button, or absolutely everything on those file pages was just an ad-trap.

 

For clarity, I was trying to download the suggested SetBody Reloaded files -- the core files, the vanilla clothing packs, etc. On the 4Shared page (the first one after clicking the link here) I couldn't find anything that looked like a download button, so I followed the "Download" link beneath the file description.

 

That took me to a second page where I was presented with the standard choice between "Premium" downloading (pay to avoid a wait time), and the "Free Download" button, with a 20 second timer. Clicking the Free Download button did nothing except bring up some ad for social media sites, and the timer is greyed out and doesn't... count down, or anything. It just sort of sits there, like cow on a train track. Stupid thing.

 

So, does anyone know how to find the actual download option? Or could somebody re-upload the files for SetBody Reloaded somewhere else? I would be very grateful! :3

Link to comment
  • 2 weeks later...

Well it seems i once again maybe did bite off more than i can chew, but maybe the solution is simple.

Have you ever when one of those orgy like scenes happen in LPK wondered to yourself that even after a girl finally done after hours, no actual consequences to her body were visible, except of the usual stuff you get for any single act? Ever checked on someone's inventory after all that mayhem, noticed the now really long inventory list, and thought to yourself "WTF?". That's right, i'm talking about cumflation.

Now, since we already have:

- LPK
- Tamago
- Setbody
- Tamago Setbody

...in theory this should be easy to add. After all, we already have a means to change the body according to pregnancy state, already have meshes for that, so all we really would need to do, is tell Tamago Setbody to not only consider wombstate but also amount of sperm.

Now, i've programmed for many years, but am not too familiar with oblivion scripting, and especially not LPK or Tamago code. Still, i searched through the code a bit, and i think figured out how to count the number of sperm slots in an actor.

First, we need two vars:
 


array_var tamagoData

short numSperm

The reason for the former is, that unless i'm mistaken the sperm data isn't directly stored inside an actor, but instead per actor in a data array just for all the stuff tamago does. So, we first need a reference to an actor, and then will ask tamago for its data in that actor. Inside this tamagoData array in turn, is a sperms array, with stacks of them. We don't really need to parse that array to get an accurate count - it should be sufficient to just look at the number stacks/slots used - so, the array length. Sounds complicated, but unless i'm mistaken, in code this is really easy:
 


let tamagoData := Call a4tccGetTamagoData currentActorRef

let numSperm := ar_Size tamagoData->Sperms

Et voila, at this point we have everything we need to make decisions. One issue: I'm not sure what happens, if one runs this on an actor that hasn't been initialized by tamago yet, and thus has none of the tamago data. Will a4tccGetTamagoData in such a case return something sane, or will the result be a CTD?

Anyways, next step is to look at TamagoSetBody to find a nice place where we can inject our code. Ideally, we could simply find the spot where TSB checks for pregnancy, and insert our IF checks there. In a way, if numSperm is high enough, we'd tell TSB that a certain pregnancy state is the case, even though that isn't really true. Since all that TSB does is changing meshes, that's fine - it won't interfere with anything but body and mesh changes, which is exactly what we want.

Luckily, tamago setbody has such a spot in it's code: a3tsbGetWombStateIndex. Right at the begin of that function, you'll find this:
 


    if rCurrentNPC.GetItemCount a4tcWombState == 110        ;1st trimester

        Let iWombState := 1

    elseif rCurrentNPC.GetItemCount a4tcWombState == 120    ;2nd trimester

        Let iWombState := 2

    elseif rCurrentNPC.GetItemCount a4tcWombState == 130    ;3rd trimester

        Let iWombState := 3

    elseif rCurrentNPC.GetItemCount a4tcWombState == 140    ;Postterm pregnancy

        Let iWombState := 4

    else                            ;Not pregnant.

        Let iWombState := 0            ;In this case, this function should return 0

    endif                            ;so that mesh path can be reverted back to the default.

Yep, we can just add our extra checks right there. If we're smart, we could also reorder those checks a bit, so that we'll check in the opposite order of how it currently is done (so that larger upperbodies always override smaller ones). By the way, couldn't the above codeblock be made more efficient? It's constantly polling the same array for the length - why not retrieve the size once and store it in a variable? And don't tell me "teh compiler will optimize this for you", because oblivion script has no optimization - i'm almost certain that it is an interpreter, which by the way cannot even jump over irrelevant IF statements (hence, all the talk about pushing returns to the top of IF blocks, not to the bottom.)

But i'm drifting off... back to the topic. So, we can just inject into the above series of IF checks, and additionally check for numSperms.

So, we do this, save everything, test it ingame, and....

Nothing.

It doesn't work. At least, not quickly. My guess from looking at TSB, is that this function, a3tsbGetWombStateIndex, is actually only called, when the wombstate changes (TSB has a handler registered to be notified of this). So, our above code will only run whenever the current menstruation cycle changes from one state to the next.

How to fix that?

Honestly, i don't know. I've looked through the rest of the code, and this is way over my head. Is anyone aware of an easy solution?
 

 

Link to comment

While sperm is stored internally in Tamago data, you don't need to fetch it that way. Tamago also puts a fake sperm token into inventory to make for easy count checking. The item is editor id a4tcSperm, form id xx002000.

 

IMO the best way to do this is use the Tamago callback function a4tccSetEventHandler to register the OnSperm event.  When called check the count via a4tcSperm count, and send appropriate SetBody command.  Check for not-pregnant with count a4tcWombState < 100 so as not to override actual pregnancy settings.

Link to comment

Thanks for the informative reply Wappy. I feel if i have to interface with setbody directly, i'd really bite off more than i can chew.

 

However, there might be an alternative - i could stick to abusing TSB to do the work, by telling it a false pregnancy state, BUT only do so when the actor isn't pregnant - or alternatively only do so, when the degree of inflation is higher than the pregnancy phase. The catch is how to undo this without waiting for an OnSperm or OnWombStateChange event. Or does Tamago also offer an event for when sperm dies?

Link to comment

The OnSperm event is sent for each individual sperm on creation, life cycle change, and removal.  It sends an int value which type of event it is, but for your purposes you can pretty much ignore it and simply check the inventory count on the actor each time.

Link to comment

>.> Seems to be about right, movomo.

 

The problem is that TSB doesn't have a single spot in the code where it determines pregnancy state. GetWombStateIndex is only used for equipping armor. The code that changes the body is distributed across multiple funcs including the OnWombStateChange handler, and it directly operates on tamago's wombstate numbers, instead of using getWombStateIndex. So yeah, seems like after all i did bite off more than i can chew - oh well, it was worth a try.

 

On an unrelated note - i've found something and am not sure if it is a bug or not. It's in the mainloop and related to break armor support:

;    Main Loop. Should run once every frame
    if GetGameLoaded == 0 && GetGameRestarted == 0 && doOnce

        if bIsBAAvailable
;        ;    The very first stage of the work is checking Break Armors action queue.
;            reserved

        ...

        else
            if eval (IsModLoaded "BreakArmor.esp")
                if eval (IsFormValid rBACycle)
                    Let bIsBAAvailable := GetVariable doOnce rBACycle
                else
                    Let bIsBAAvailable := 1
                endif
            else
                Let bIsBAAvailable := 1
            endif
            if bIsBAAvailable
                PrintToConsole "%aTamagoSetBody Revised%a: Initialized (Version:%.2f Debug:%.f RefID:%i)" 2 3 Version Debug r
            else
                PrintToConsole "TamagoSetBody Revised: Waiting for Break Armor to be initialized..."
            endif
        endif
        return
    endif

I don't pretend to fully understand what is going on here, but doesn't the above code end up always deciding that BA is available (blsBAAvailable), regardless of what is the case? I mean, for every possible path taken, that variable eventually gets set to 1. So what if someone doesn't have BA installed?

 

Link to comment

I don't remember, to be honest. :P if one doesn' have ba, it will be considered "ready to go" - that var was to suppress tsb if ba is installed and not ready. Probably my hackjob to prevent some stupid crash or such.

In retrospect however, the real problem is that doOnce var is not reliable to determine ba's init state.

I wrote this with the codes that I don't fully understand. The result was as you see, inefficient code here and some ctd there. It definitely could use some extra hands but my lazyness has been the obstacle to fix things up over years. Poor ignored tamagosetbody.

Anyway... For your particular purpose, I'd recommend this way.

Get the sperm count, either by checking tamagoclub disp token or from onSperm event, and do what you want using setbody, not tamagosetbody. Just make sure you revert the body back after inflation is over.

Link to comment

had a little probleme

 

 

OBSE: initialize (version = 21.4 010201A0)

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x04E5 Command:

Error in script 1600236c

An expression failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x04E5 Command:

Error in script 1600236d

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x0016 Command: Let

Error in script 1600236d

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x003A Command: Let

Error in script 1600236d

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x005F Command: Let

Error in script 1600236d

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x0081 Command: Let

Error in script 1600236d

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x00AE Command: Let

Error in script 1600236d

Invalid array access - expected numeric index, received string

File: TamagoSetBody.esp Offset: 0x00F8 Command: Let

Error in script 1600236d

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x00F8 Command: Let

Error in script 1600236e

Attempting to call a function on a NULL reference or base object

File: TamagoSetBody.esp Offset: 0x001C Command: Let

Error in script 1600236e

Invalid array access - the array was not initialized.

File: TamagoSetBody.esp Offset: 0x02BA Command: SetFunctionValue

Error in script 1600236e

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x02BA Command: SetFunctionValue

Error in script 1600236e

An expression failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x02BA Command: SetFunctionValue

Error in script 1600236e

SetFunctionValue statement failed.

Error in script 1600236d

Operator [ failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x0320 Command: Let

Error in script 1600236d

An expression failed to evaluate to a valid result

File: TamagoSetBody.esp Offset: 0x0320 Command: Let

 

 

 

may be i did wrong somewhere !

 

Link to comment
  • 3 weeks 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