⚒️Create Sensations

There are multiple ways of creating sensations:

Microsensation

These are the smallest units that can be felt. A sensation is composed of one or more of them.

var daggerEntry = SensationsFactory.Create(60, 0.1f, 90, 0, 0, 0);
var bleeding = SensationsFactory.Create(50, 0.5f, 50, 0, 0.4f, 0);

The parameters correspond with the following microsensation attributes:

  1. Frequency

  2. Duration (seconds)

  3. Intensity (%)

  4. Ramp up (seconds)

  5. Ramp down (seconds)

  6. Exit delay (seconds)

Sensations Sequence

var stab = daggerEntry.Append(bleeding);

All subtypes of Sensation can be chained together, so it would also be possible to chain Sensation sequences.

Import a sensation

Sensations are exported in its own format from the Sensations Creator, you can import them using the Parse function.

You can find the sensations code by opening the files (.owo) exported by the sensations creator. Otherwise you could load the file through code.

var ball = Sensation.Parse("100,1,100,0,0,0,Impact");

A baked sensation can be imported using the same function.

var bakedBall = Sensation.Parse("0~Ball~100,1,100,0,0,0,Impact~impact-0~");

Muscles

Declaration

You can assign a muscle or group of muscles to any sensation. Muscles are defined like this:

var rightPectoral = Muscle.Pectoral_R;
var bothPectorals = new Muscle[] { Muscle.Pectoral_R, Muscle.Pectoral_L };
var all = Muscle.All;

The intensity percentage can be changed per muscle:

var atMinIntensity = rightPectoral.WithIntensity(1);
var eachWithItsOwnIntensity = new Muscle[] { Muscle.Pectoral_R.WithIntensity(25), 
                                             Muscle.Pectoral_L.WithIntensity(50) };
var atHighIntensity = Muscle.All.WithIntensity(80);

You can obtain the opposite muscles of a muscles group (or single) by calling the mirror method:

var leftPectoral = Muscle.Pectoral_R.Mirror();
var rightSide = new[] { Muscle.Abdominal_L, Muscle.Pectoral_L, }.Mirror();

Assignation

You can assign muscles to any subtype of Sensation.

var ballWithMuscles = ball.WithMuscles(Muscle.Pectoral_R);

So it would be also possible to assign muscles to a sensations sequence, or to a baked sensation.

var frontStab = stab.WithMuscles(Muscle.Abdominal_R);
var crossStab = daggerEntry.WithMuscles(Muscle.Abdominal_R)
                           .Append(bleeding.WithMuscles(Muscle.Dorsal_R));

After assigning muscles to a sensation, it becomes a SensationWithMuscles, and it will not be possible to override the muscles that were assigned to it initially.

var ballWithMuscles = ball.WithMuscles(Muscle.Pectoral_R);
var keepingSameMuscles = ballWithMuscles.WithMuscles(Muscle.Lumbar_L); //Keeps only the right pectoral

You can use this as an advantage to define sensation sequences that have sensation with fixed muscles but others with dynamic muscles:

var incompleteStab = daggerEntry.WithMuscles(Muscle.Abdominal_R).Append(bleeding);
var stabWithBackExit = crossStab.WithMuscles(Muscle.Dorsal_R); //The right dorsal will only be assigned to the bleeding

Multiply intensity

This feature is only available in the .Net version of the API, it allows you to multiply the existing sensation of a muscle or sensation by a percentage.

Muscles

// NOTE: The intensity of the muscle would be multiplied by 0.2f
var softer = Muscle.Abdominal_R.MultiplyIntensityBy(20);

Sensations

// Microsensation with a intensity of 100
var higher = SensationFactory.Create(intensityPercentage: 25).MultiplyIntensityBy(400);
// Sensation with muscles with a intensity of 50
var half = SensationFactory.Create().WithMuscles(Arm_L).MultiplyIntensityBy(50);
// Sensation sequence with a intensity of 30
var softer = Sensation.Ball.WithMuscles(Abdominal_R).Append(Dart).MultiplyIntensityBy(30);

Last updated