StorageUtil & State Data¶
Beeing Female NG stores most runtime state in StorageUtil values (prefix FW.). This page covers how to read the current state and sperm data, and lists the most important keys.
Reading State and Sperm Info¶
; Current cycle/pregnancy state (0..8) -- read straight from StorageUtil
int s = StorageUtil.GetIntValue(PlayerRef, "FW.CurrentState", 0)
; Whether the actor currently has conception-relevant sperm. Prefer BF's own
; check over scanning FW.SpermAmount yourself -- HasRelevantSperm applies the
; same amount / timing / traveling-sperm rules BF uses internally.
FWController bf = Game.GetFormFromFile(0x182A, "BeeingFemale.esm") as FWController
bool isCumInside = bf.HasRelevantSperm(PlayerRef)
If Beeing Female is an optional dependency, do not type a property or variable to FWController directly -- that hard-binds your script to BF at load time, and it will fail to load when BF is absent. Keep a plain Quest handle and do the cast inside a small Global helper, so the FWController type resolves only lazily when BF is actually installed:
; In a separate script -- compiles without BF present; the cast resolves only when called
bool function HasRelevantSperm(Quest fwControllerQuest, Actor akTarget) Global
return (fwControllerQuest as FWController).HasRelevantSperm(akTarget)
endFunction
StorageUtil Keys¶
The most important keys (prefix FW.) are:
FW.SavedNPCs(FormList, global): tracked female actors managed by the system.FW.CurrentState(Int, per-actor: mother): current cycle state index (0-8).FW.StateEnterTime(Float, per-actor: mother): game days timestamp when the current state started.FW.LastUpdate(Float, per-actor: mother): last update timestamp for the actor.FW.Flags(Int, per-actor: mother): bit flags for cycle options (e.g., can become pregnant/PMS).FW.NumChilds(Int, per-actor: mother): number of unborn children.FW.ChildFather(FormList, stored on mother): list of fathers (one entry per child, matchingFW.NumChilds).FW.ChildFatherRace(FormList, stored on mother): each father's race, recorded at conception -- fallback when the father actor has unloaded (creature fathers).FW.ChildFatherStr(StringList, stored on mother): string identifier per father, used by the UI when the actor cannot be resolved.FW.UnbornHealth(Float, per-actor: mother): unborn baby health (0-100).FW.LastConception(Float, per-actor: mother): game time of last conception.FW.Abortus(Int, per-actor: mother): abortus state flag (0 none, 1 imminent, 2 incipient, 3 incomplete, 4 complete, 5 missed abortion, 6 miscarriage/stillbirth).FW.AbortusTime(Float, per-actor: mother): game time when abortus started.FW.Contraception(Float, per-actor: mother): current contraception strength (0-100).FW.ContraceptionTime(Float, per-actor: mother): game time when contraception last changed.FW.SpermName(FormList, per-actor: mother): list of sperm donors (actors).FW.SpermAmount(FloatList, per-actor: mother): sperm amounts for each donor.FW.SpermTime(FloatList, per-actor: mother): timestamps for each donor entry.FW.SpermRace(FormList, per-actor: mother): each donor's race, recorded atAddSpermtime -- persists when the donor actor unloads, so sperm entries with aNoneactor stay valid.FW.LastSeenNPCs(FormList, stored on mother): recent nearby NPCs cached for partner selection/impregnation logic.FW.LastSeenNPCsTime(FloatList, stored on mother): timestamps aligned withFW.LastSeenNPCsentries (same index).FW.Babys(FormList, global): active child actor forms tracked by the system.FW.BornChildFather(FormList, per-actor: mother): list of fathers for born children.FW.BornChildTime(FloatList, per-actor: mother): timestamps for born children.FW.LastBornChildTime(Float, per-actor: mother/father): last birth time for a parent.
Born children (entries in FW.Babys) carry their own per-actor keys:
FW.Child.Mother/FW.Child.Father(Form): the child's parents.FW.Child.Name(String): first name (display name also carries the last name).FW.Child.DOB/FW.Child.DOD(Float): birth/death timestamps in game days.FW.Child.Race(Form): the child's intended race (may differ from the spawned base's race).FW.Child.ParentActor(Form): the parent whose add-on configuration drives growth settings.FW.Child.IsCustomChildActor(Int):1for plain-actor children (copies of a parent base, noFWChildActorscript).FW.Child.Order(Int): current order for plain-actor children (set by the parent order powers).FW.AddOn.StartGrowing(Int, on the child): armed at spawn, cleared when growth completes.FW.Child.GrownUp(Int):1once the child has transitioned into an adult (grow-up feature).FW.Child.GrowUpAttempts/FW.Child.GrowUpFailed(Int): transition retry bookkeeping; after 10 failed attemptsGrowUpFailed=1and the child permanently stays a grown child.FW.Child.VoiceType(Form): voice assigned to an add-on adult base at transition; re-applied on every game load (base mutations do not persist in saves).FW.Child.Stat*/FW.Child.Perks/FW.Child.PerksLevel: persisted stats and perk picks forFWChildActorchildren.
Baby items (BabySpawn "item" mode) record each baby's identity on the mother in parallel lists, written at birth and consumed FIFO when the item hatches (inventory references do not survive saves, so identity is never keyed on the placed item):
FW.BabyItemArmor(FormList): the armor base form, used to match items to entries.FW.BabyItemName(StringList) /FW.BabyItemSex(IntList): the name and sex announced at birth -- the hatched child keeps them.FW.BabyItemRace(FormList): race context resolved at birth (preserves creature father race across unloads).FW.BabyItemFather(FormList) /FW.BabyItemDOB(FloatList): per-baby father and birth timestamp.
A baby item hatches while merely carried (the carrier's GetItemCount(base) > 0, equipped or not). The player's items hatch into the player's children; an NPC mother's item hatches into the mother's own child (placed by her, not a player follower) only when FW.BabyItemFather equals the player and she is Is3DLoaded. Before each hatch pass, FWUtility.PruneOrphanBabyIdentities(carrier) reconciles these lists against inventory: per base form it keeps the oldest GetItemCount(base) entries (FIFO) and drops the surplus, so a baby item that is sold/dropped/destroyed leaves no orphan identity entry and produces no child. It deliberately does not touch FW.Babys -- that global list holds armor base forms shared across all mothers, so removing one by base could delete a different mother's live entry; stale FW.Babys armor entries are harmless (the hatch gate skips bases the carrier no longer holds) and are cleaned by the game-load purge. Only call it for a carrier whose inventory read is trustworthy (the player, or an Is3DLoaded NPC) -- an unloaded actor can report a false zero and wrongly prune a valid baby.
Access examples¶
; Per-actor state
int state = StorageUtil.GetIntValue(ActorRef, "FW.CurrentState", 0)
float lastConception = StorageUtil.GetFloatValue(ActorRef, "FW.LastConception", 0.0)
int numChilds = StorageUtil.GetIntValue(ActorRef, "FW.NumChilds", 0)
; Fathers list
int fatherCount = StorageUtil.FormListCount(ActorRef, "FW.ChildFather")
Actor father0 = StorageUtil.FormListGet(ActorRef, "FW.ChildFather", 0) as Actor
; Global tracked actors
int trackedCount = StorageUtil.FormListCount(none, "FW.SavedNPCs")
Actor trackedActor = StorageUtil.FormListGet(none, "FW.SavedNPCs", 0) as Actor
Multi-child / multi-father logic: when a pregnancy has multiple children, FW.NumChilds stores the count and FW.ChildFather stores one father per child (so twins can share a father or have different fathers). Systems that need a single "primary" father typically use index 0.
Keys under FW.AddOn.* are reserved for add-on configuration/overrides and are documented in the add-on INI examples.