Apparel in SmutBook is defined as anything that a Person can wear. This includes clothing, jewelry, and perhaps even naughty toys in some cases.
The Apparel system also provides the Wardrobe and WornApparel classes, which are special subclasses of GeneralInventory that only deal with Apparel. Wardrobe is a lightly modified GeneralInventory that modifies the sorting implementation to make it more clothing-specific (although it can still contain any PersistentObject, non Apparel objects will all be lumped into the “Other” category). WornApparel is used by the Person classes to track what a Person is wearing, and enforces the rule of only one article of apparel per ClothingSlot (see below).
In general, you may use a Wardrobe interchangeably with a GeneralInventory when using the InventoryUI macro. For the wearing and removing of Apparel by a Person, however, a modified version (ApparelUI) is provided. The left-hand inventory provided to ApparelUI should always be a Person (not a WornApparel, but the higher-level Person object that is dressing/undressing). The right-hand inventory should always be a Wardrobe. This isn't *technically* true, but the sorting will be fked up; but we need to make it Work Better, as I can see use-cases where a person might want to dress out of a backpack in a bathroom stall, or somesuch.
: Document how WornApparel and Wardrobe interact as far as items technically remaining in the Wardrobe while they are worn by a Person.
Stuff that is changing:
A Person should have some statistics that control the window that the values of their Transformables can be in. These values can be changed by player action as the story progresses.
An article of Apparel will have a +/- Fem/Masc value and a +/- Corr/Virt score. Wearing said article will modify the Person's base score by the Apparel's score, For the purposes of reactions of other people, this will only count if the clothing is visible (not covered up by other clothing), but it will always count for the purposes of that character's inner monologue action choices (a character wearing slutty panties hidden under their jeans will feel slutty and feminine regardless of whether anyone else can tell that they are wearing them).
Additionally, an article of Apparel will have baseline Fem/Masc and Corr/Virt values assigned to it. These values control how much the Person's base scores can be permanently modified by wearing that clothing, when the sleep-TF mechanic is enabled (see below).
A Sleep-TF mechanic can be enabled, which will cause the Person's modified Fem/Masc and Corr/Virt values to be checkpointed for each time unit (probably hours) when the game time is advanced. When the Person sleeps, their base scores will be modified based on those checkpointed values, causing their base score to drift towards whatever their modified score is. The amount of change that each article of clothing can make will be capped within a window defined by the baseline Apparel scores mentioned above. This, along with the clothing-gating, will model the mechanic where a character continually upgrades to more extreme clothing as their transformation progresses, and in turn those clothing drive that transformation further. Or can stop or reverse the transformation by keeping their dress/behavior the same or backsliding.
At sleep-time, the amount that the base score change transforms the actual Transformable body parts on the person can be figured out by weighting the body parts based on the scores of the clothing that is worn on them. We can allow a player to settle on the breast size they want, for example, by providing bras of different sizes, and allowing them to wear a size too large or too small and then trending towards that. : It is not obvious, however, how to deal with a character who wants to wear more and more feminine clothing, but keep the penis, like for a futa or trap character. This would probably need to be an individual setting per Person, set by player choice outside of the automatic slow-TF mechanic. Maybe there needs to be a top/bottom mechanic involved in this, where pitching grows the cock and catching shrinks it. We'd still need a way for sissies who don't want to be girls can choose to keep their tiny cock instead of changing into a girl though.
Tracking strict game-time is something that I wanted to stay away from, but in a slow-TF game where what you wear and for how long determines how and how much you change, I think it kind of has to be there. I just don't want to build something that encourages that sort of empty day-loop that a lot of games have, where you have to click through a bunch of same-old stuff to get to the next plot point. Instead, I want to build something that encourages a game with a well-paced plot that happens to have a timekeeping system supporting it. I think maybe the best way to do this would be to eschew the automatic day-loop entirely and rely on the game to advance the time, when it is appropriate, based on the player's choices in driving the plot along.
Each Apparel will be of one or more ClothingTypes. Only one of each ClothingType may be worn at a time. Additionally, a ClothingType may define other ClothingTypes that conflict with it. This would allow us to, for example, make a dress conflict with pants and shirt. These will just be a string (we ought to make it case-insensitive just to make things easier on the library user), and we'll want to implement an easy way to implement new ClothingTypes and to add new conflicting ClothingTypes to existing ClothingTypes.
ClothingType occupies one or more Layers. Usually only one, but if we want to implement a whole costume as one item, for example, we may want to make it use several layers. In fact, we should combine the implementation of this and BodySlot into a list of (layer,bodyslot) pairs.
A particular article of clothing occupies one or more BodySlots (used used in conjunction with Layers to figure out what covers what):
Each (layer,bodyslot) will specify a (coverage,thickness).
Things we have to be able to handle:
Finish transcribing this from notes before implementation.