Giter VIP home page Giter VIP logo

ostrap's Introduction

OStrap

An OStim Addon that adds modular Strap-on support. - OStrap Build Status

Features

  • Includes several pre-packaged strapons, pulling from leito's Skyrim Strapons.
  • 3BBB (CBBE) & BHUNP (UNP) bodyslide support.
  • Automatic detection of Ostim scenes.
  • Strap-on Randomization.
  • Can apply strap-ons to both NPC's and the Player.
  • Supports modular, JSON based compatibility patches to allow for easily adding more options.
  • OCum support.
  • MCM settings saving, and extra loading functionality for Modlist authors.

Requirements

  • Skyrim: Special Edition (1.5.39+)
  • Ostim SE (and all its' requirements.)
  • NL_MCM (and all its' requirements.)

Downloading

Most recent version will be in the Releases section of the GitHub page. Eventually it will be posted to LoversLab and ?Nexus?

Included Compatibility Files

If any of the following mods are installed, they will appear in the OStrap MCM as options. If you don't see them, press the "Reload Compats" option.

Intended Features / Future Plans

  • Add physics collisions to the strapons.

Known Issues:

Will equip a strapon in all F/F scenes, even ones that don't make a heap of sense like kissing or fingering.

Contributing

Feel free to fork and make a PR if you feel you have something to add or improve.

Issues and Suggestions

If you notice any bugs, or have any feature suggestions, create an Issue and outline the problem and I'll take a look.

Unless it's to ask for a LE port, I'm not gonna do that, Sorry. If you want an LE port, fork this and make your own.

Compatibility Patches.

OStrap will load any .Json file in \Data\OStrapData\OStrapCompat\ and try and add the files to the Strap-on list.

Compatibility files should be formatted like so:

{
  "Example Strapon": {
    "Enabled": 0,
    "Form": "__formData|Example.esp|0x5e61",
    "OptID": 0
  },
    "Another Example Strapon": {
    "Enabled": 0,
    "Form": "__formData|Example.esp|0x5e62",
    "OptID": 0
  }
}

Breaking down what a record looks like:

"Example Strapon" <-- This is the name of the strap-on for the MCM. This can be whatever you want.
"Enabled": 0 <-- This is whether the strap-on will be enabled by default or not.
"Form": "__formData|Example.esp|0x5e61" <-- This is the formData for the armor record. Further info below.
"OptID": 0 <-- This is redundant now, but kept in to preserve backwards compatibility.

Understanding formData records.

  1. Starting at the begining, all formData records start with __formData|
  2. The middle section is the name of the mod file you are pulling the strap-on from.
  3. The last section is the FormID of the specific Armor record, with the first two bits removed and then all preceeding zeros dropped.
  4. So for example, the FormID 03005E63 will lose the first two bits and become 005E63.
  5. Then the preceeding zeros are droped and it becomes 5E63
  6. Finally add 0x to the begining of the record 0x5E63 to indicate that it's in Hex, and you've converted the FormID to a formData record.

ostrap's People

Contributors

osmosis-wrench avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

urodoro

ostrap's Issues

Feature: Replace Utility.RandomInt with Sairions Whichmann-hill random number gen.

; A Wichmann-Hill random number generator
; used to avoid suspending script execution by making external calls to Utility.RandomFloat()
Float Function QRand(Float min = 0.0, Float max = 1.0)
    rnd_s1 = (171 * rnd_s1) % 30269
    rnd_s2 = (172 * rnd_s2) % 30307
    rnd_s3 = (170 * rnd_s3) % 30323
    Float r = rnd_s1 / 30269.0 + rnd_s2 / 30367.0 + rnd_s3 / 30323.0
    r -= (r as Int)
    Return  r * (max - min) + min
EndFunction

; Set initial seed values for the RNG. Can also be called from MCM if generation gets stuck on always the same values.
Function ResetQRand()
    Int realTimeMod = (Utility.GetCurrentRealTime() as Int) + (utility.randomint(1, 150)) % 1000
    rnd_s1 = 13254 + realTimeMod
    rnd_s2 = 4931 + realTimeMod
    rnd_s3 = 24178 + realTimeMod
EndFunction

int rnd_s1
int rnd_s2
int rnd_s3

BUG: Doesn't update OCum support.

If modlist changes it doesn't detect it outside first time it runs, need to create OnPlayerLoad() alias to get it to run on each new load.

PR checklist:

Test working:

  • Import and export.
  • Compats load.
  • Compats purge.
  • Body mod swap.
  • Equip to player.
  • Equip to NPC.
  • OCum player.
  • OCum NPC.
  • Unequip from player.
  • Unequip from NPC.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.