Table of Contents
Other Resources
Using Toys&Love - Traditional / Soft / Script-less <-- methods of using Toys&Love
API functions & more, verbosely documented in ToysFramework.psc
Making a Toy Box - Guide To Making a Toy Box
Toy Box Template (plugin) - download from Toys Framework page
Toy Story Mod - as a demo. It has MCM Test and documentation in code
Devious Toys Generator - download
Compile Requirements (also to access properties in the CK)
Notes:
Most requirements below are also needed to open Script Properties in the Creation Kit (CK). Missing these requirements will result in the CK error "Errors encountered while attempting to reload the script"
You need source (psc) for the compiler. You need compiled pex for the CK
For SE... You also need to be aware of which source file folder is pointed to by your Creation Kit .ini settings. The default is not the same as LE, and this is often a source of confusion. Toys&Love SE distributes its source in the default location, but some mods distruute in the old LE location, in which case you must move the source
SkyUI_5.1_SDK
in addition to the SDK, you need SKI_ConfigManager.psc, SKI_WidgetBase, SKI_WidgetManager from Github (schlangster/skyui). You will need to compile these to supply pex files for the CK (see notes above)
If you want to skip Github or not setup for compiling, download the package... SkyUI Widget Source (for mod Authors), from the Toys&Love download page. You need to extract into the correct 2 folders manually... location varies thus don't install with a mod manager. For SE, the default is Data\Scripts for the .pex and Data\Source\Scripts for the .psc
Yes the SDK is very old, and that's correct. Only the DLL changed in recent years
JContainers - source comes with user release but does not install into the default location (see notes above)
NiOverride - source does not come with Racemenu it's a separate download
FNIS, including FNIS Creature Pack
Soft Dependencies (a Soft Dep is a mod optional to the user, but still a hard requirement to compile):
Sexlab source
Sexlab Arousal source (most any variant)
WildLife source
Creature Framework source
Toy Setup & Properties
For those accustomed to DD, take note... this is very different... A Toys toy uses a single "Armor item" in CK. There is no chance of toy "breakage" (no hidden/broken Toy syndrome) due to this. Mod authors can make custom Toys with minimal effort. The steps follow.
Cloning or Creating a new Toy:
Make a copy of an existing similar toy from Toys (the Armor and Armor Addon items in CK)
Update the properties on the ToysProperties script, within the armor item (there are only 9 properties)
It's easier to start with a clone, but If creating from scratch, you will need to add the ToysProperties script to the toy. Never modify the ToysProperties script, only fill/change the properties. You can add your own separate scripts if needed
Mandatory Properties:
Lib... Always ToysFramework
ModelForToy... your toy's Armor item
ToyBox... shortname for your Toy Box, for example "Classic"
Optional Properties
ArousalStrength... A value, normally between 1 and 5. This is only used if you've included the ToysEffect_Rousing keyword. 1 for minor rousing, 5 for something like a very nasty plug
KeyConsumed... Set true if you want the specified key to be consumed on use
KeyForToy... The specified key. Leave empty if the toy is not to be removed using a key. You can use one of the 4 Toys keys, or your mod's own custom key
ModelTransformed... must be filled if you have included one of the Transformation Effect keywords. This is the toy that a transformation will swap to. See more re. Transformation section below
Timer... must be filled if you have included the Timed Transform Effect
4 Properties for Buffs... Includes flat, max, and scaling to Rousing and/or XP. see ToysHandler.psc for details
Add Mandatory Keywords
ToysToy... this tells Toys that your toy is a Toys toy. This keyword must be present
ToysType_<bodypart>... One of the Toys Types must be included. There can be more than one. (example: a Toy that serves as both a blindfold and a gag, would occupy both Mouth and Eyes. This determines the slot. The same slot must be used by your Armor Item and Armor Addon. Toys Types are in the table (see pic)
Non-Toys Keywords. Normally you will want to include VendorNoSale, and MagicDisallowEnchanting. These keywords are not part of Toys but make sense to use
Add a Restrictive Keyword if necessary
ToysNoRemoval... toy cannot be unequipped, hidden, or stored by another mod
ToysPermitStore... toy can only be hidden or moved temporarily into storage by another mod
Add a Gender Compatibility Keyword if necessary
no keyword... Female Only (default). Males won't be able to equip
ToysGender_MaleFemale... toy can be equipped by either male or female
ToysGender_MaleOnly... toy can be equipped only by male
Optional Keywords (effects etc.) - All other keywords are optional and are detailed in the sections that follow
API - Toy Handling
Toy Handling Functions are listed here.
Full details can be seen in the verbosely documented ToysFramework.psc
GetToy() - Selects a toy from available Toy Boxes, specifically, or randomly, considering available slots, preference, and gender compatibility
HandleToy() - Equips, swaps, unequips, and stores a toy, playing nice with other mods (includes being "DD aware") and considering gender compatibility
ReserveSlots() - Temporarily reserves open toy slots for use by only your mod
IsSlotsReserved() - Check to see if slots are already reserved by another mod
UnequipToys() - Unequips toys using keywords
HideToys() - Temporarily hide toys for a short scene
UnHideToys() - Unhide any hidden toys
UnStoreToys() - Re-equip all toys the mod stored
IsSlotAvailable() - Checks a slot to see if can be used. This is "DD aware"
IsToyCompatible() - Checks Toy for compatibility with player/NPC gender
Use Toy Story for the following:
Example calls made to the API in Toy Story's TStoryMain.psc
Each API has a test that can be triggered by Toy Story's MCM
Mod Event Notifications can be turned on to see Mod Events firing
API - Love Scenes
Toy Handling Functions are listed here.
Full details can be seen in the verbosely documented ToysFramework.psc
Just want to play a Love Scene? All you need is Loving().
Loving() - Start a Love Scene. By default matchmaking using close actors is automatic, or supply actors, # actors, tags, and more
EndLove() - End scene early. You supply the descriptive "LoveName"
SquirtingEffect() - does 5 things... Rousing decrease, Squirt visual, Squirt sound, Denial, and Random Facial Expressions. Useful if making a custom scene. Not required if using Loving() as the squirting is built-in
SpontaneousO() - Trigger the same Spon O scene that Toys&Love does
FondleThySelf() - Trigger the same Fondle that Toys&Love Fondle hotkey does
GetRousing() - Returns the Rousing Level
ArousalIncrease() - Use to cause extra Rousing appropriate for the toys worn
ArousalAdjust() - Rousing is changed by a fixed amount
GetArousalStr() - returns the current sum of Rousing Strength for arousing toys worn
GetThermalStr() - returns the current sum of Thermal Strength for thermal toys worn
GetOversexedVal() - returns the current oversexed value. When fully decayed it's 0
GetOversexedMax() - returns the current oversexed max (the user can change this in MCM)
CureOversexed() - sets Oversexed to 0. Useful for a mod to provide a cure. This is what the Oversexed Cure Potion does which can be used by mods
Cumming() - Apply cum to specified body area(s)
GetCumTimeRemain() - The time remaingnig on cum. 0 tells you there's none
SceneIsActive() - true if the specified Scene is active
SceneIsQueued() - true if Scene is queued
SceneHasTag() - true if Scene has the tag
LoveEffectsEnable() - Love Effects on/off
Furniture Love
Furniture Love Objects - Custom locations can use vanilla game items (65 Base Types), including vanilla invisible markers (chair, table, or wall)
Valid Base Types are documented within the ToysStoreFurn() function in ToysLoveLib.psc, and are also in ToysFurnList FormList
Loving() parameter LoveSpot - If it's a valid ObjectRef for Furniture Love, will use it. If none, Loving() will auto-detect based on the MCM chance setting
CloseMarkers() finds valid furniture for Furniture Love
API - Visual/Sound Effects Functions
See within ToysFramework.psc for more detail
Facial Expressions
Spontaneous Orgasm
Rousing Increase
Rousing Adjust
Squirt Visual & Sound
Orgasm Sound
Moan Sound
Scream Sound
Pant Sound
Wuusssh Effect (sound & physics)
Pulsate
API - Utility
See within ToysFramework.psc for more detail
Toys Version
VIMH aka. Voice in My head
Initialize Player for a Scene / un-Initialize Player After a Scene
Busy Check
Set Busy
Wait for Toy Boxes to Load / Check if Loaded
Get XP
Actor Scale Normalize
Mod Events
There are 40ish Mod Events. They are listed with details under the heading "Mod Events" in ToysFramework.psc. Here are a few examples...
Love Scene modEvents - ToysLoveSceneInfo ToysLoveStageEnd ToysVaginalPenetration ToysClimax ToysClimaxNPC ToysLoveSceneEnd - each return the "LoveName" you passed
Generic Scene modEvents - start/end, orgasm, stumble and fall. Scene start includes the scene name, which can be provided from the content mod calling the scene
Toys Effects modEvents - most effects
Misc modEvents - squirting, key drop, signing, fondle, toys worn change
Keywords - Buffs
Each Buff has self-explanatory ToysBuff_ keywords
Properties are used to set up the amount. The amount can be scaled to Rousing
For additional detail see ToysFramework.psc
Keywords - Effects
Love Effects - ToysEfffect_Proposition, ToysEfffect_Uncontrolled, and ToysEfffect_UnctonrolledOrgy - these make the toy trigger the love scenes
Denial - toy denies climax
Blind - use keyword ToysEfffect_Blind
Add this effect to any toy. Normally a blindfold
Chance that you idle/walk/run/sprint with animations that simulate blindness. MCM has chance slider
stumble/fall animations, which are more frequent if you "try" to sprint
Mouth Wide Open - use keyword ToysEfffect_MouthOpen
Magical Wrist Binding - use keyword ToysEfffect_MagicBind
Add this effect to any toy. Normally wrist cuffs, but could be anything, it's magic!
Chance (in MCM) that your arms/wrists are restrained, but not sufficient enough to disallow regular combat and any other activity. The magic allows you to "break out" of the pose
Chance (in MCM) that your arms/wrists are restrained in Hard Core mode. Hardcore mode is essentially the Arm Binding effect explained below
Uses 8 different styles of animations
Sliders in MCM allow you to adjust chance for normal mode, and Hard Core mode. If Hard Core is set to 100, you've essentially converted the toy to be the same as one using the Arm Binding effect. If set to 0 you've turned it off
Hard Core Magical Wrist Restraints - is part of Magical Wrist Binding, see above
Arms Binding - use keyword ToysEfffect_ArmBind
Add this effect to any toy. Normally toys such as Armbinder or wrist cuffs
Forces bound arms/wrists position animations
In combat, you can kick
Effect can only be stopped by removing or transforming the toy
Yoke Binding - use keyword ToysEfffect_YokeBind
Add this effect to any yoke toy
Forces bound arms/wrists animations positioned for a yoke
In combat, you can kick
Effect can only be stopped by removing or transforming the toy
Sounds for chains and bells are added to toys using an Enchantment effect, see examples on toys such as Wrist Cuffs (this is the only effect using an Enchantment instead of keyword)
Keywords - Escape Methods
Keyless: add the ToysKeylessRemoval keyword
Keys: fill the property KeyForToy
Custom Key: fill the property KeyForToy with your own key
Orgasm Fall Off Effect: add the ToysEffect_OrgasmFallOff keyword
Hit Fall Off Effect: add the ToysEffect_HitFallOff keyword
Keywords - Transform Effect
RousingTransfom - swap toy when rousing exceeds the trigger point. User can change in MCM, by Group
RousingUnTransform - swap the toy when the rousing goes back below that trigger point. Normally you'd swap it back to the original, but it can be to any model
HitTransform - swap the toy after X hits. User can change in MCM. This is global for all toys using this effect
LockJamTransform - swap the toy when a failed attempt to unlock occurs
TimedTransform - swap to the toy when the timer you've set expires
You can use these 5 transform methods in any combo. A toy could start as one that melts from rousing. Stage 2, the melted, could then transform upon X hits to stage 3. Stage 3 could then use one of the escape methods below to remove.
ModelTransformed... (property on the toy) is the toy that a transformation will swap to
Timer... (property on the toy) is game hours for the timer used for TimedTransform
Beyond a toy armor item to swap to, these are all you need. One of the keywords, and fill the property.
Think of the swapped or transformed toy as a new stage. It would be a toy that looks similar but is modified in some way (sometimes does not need to look different at all) to look melted from rousing, broken, etc. Each stage can have its own different set of keywords for effects, and other settings. So in addition to looking different, it could, for example, cause armor to strip (Strip Effect), make you crawl (Crawl Effect), have higher or lower rousing strength, anything you can define for a toy. This includes the following Escape Methods (next section).
Levelled Item Lists / Merchant
Toy boxes are loaded into several Levelled Item Lists at run time, for the purpose of setting up vendors/merchants. This includes a master list, giving you all toys from all toy boxes installed, and another master which lets you get toys randomly from all toy boxes. For more check the following containers, to see how they are setup
ToysMastALLContainer - all toys from all boxes
ToysMastRandomContainer - this sample is selecting 15 random, from all toy boxes
Comments