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);
auto daggerEntry = SensationsFactory::Create(60, 0.1f, 90, 0, 0, 0);
auto bleeding = SensationsFactory::Create(50, 0.5f, 50, 0, 0.4f, 0);
The parameters correspond with the following microsensation attributes:
Frequency
Duration (seconds)
Intensity (%)
Ramp up (seconds)
Ramp down (seconds)
Exit delay (seconds)
Sensations Sequence
var stab =daggerEntry.Append(bleeding);
auto stab = SensationsFactory::CreateSequence({ daggerEntry, 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");
auto ball = SensationsParser::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~");
auto bakedBall = SensationsParser::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 =newMuscle[] { Muscle.Pectoral_R,Muscle.Pectoral_L };var all =Muscle.All;
auto rightPectoral = Muscle::Pectoral_R();
auto bothPectorals = MusclesGroup({ Muscle::Pectoral_R(), Muscle::Pectoral_L() });
auto all = MusclesGroup::All();
The intensity percentage can be changed per muscle:
var atMinIntensity =rightPectoral.WithIntensity(1);var eachWithItsOwnIntensity =newMuscle[] { Muscle.Pectoral_R.WithIntensity(25),Muscle.Pectoral_L.WithIntensity(50) };var atHighIntensity =Muscle.All.WithIntensity(80);
auto atMinIntensity = Muscle::Pectoral_R().WithIntensity(1);
auto eachWithItsOwnIntensity = MusclesGroup({ Muscle::Pectoral_R().WithIntensity(25),
Muscle::Pectoral_L().WithIntensity(25) });
auto atHighIntensity = MusclesGroup::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();
auto leftPectoral = Muscle::Pectoral_R().Mirror();
auto rightSide = MusclesGroup({ Muscle::Abdominal_L(), Muscle::Lumbar_L(), Muscle::Pectoral_L() }).Mirror();
Assignation
You can assign muscles to any subtype of Sensation.
var ballWithMuscles =ball.WithMuscles(Muscle.Pectoral_R);
auto 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));
auto frontStab = stab->WithMuscles({ Muscle::Abdominal_R() });
auto crossStab = SensationsFactory::CreateSequence({ daggerEntry->WithMuscles({Muscle::Abdominal_R()}),
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
auto ballWithMuscles = ball->WithMuscles({ Muscle::Pectoral_R() });
auto 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
auto incompleteStab = new SensationsSequence({ daggerEntry->WithMuscles({Muscle::Abdominal_R()}), bleeding});
auto stabWithBackExit = incompleteStab->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.2fvar softer =Muscle.Abdominal_R.MultiplyIntensityBy(20);
Sensations
// Microsensation with a intensity of 100var higher =SensationFactory.Create(intensityPercentage:25).MultiplyIntensityBy(400);// Sensation with muscles with a intensity of 50var half =SensationFactory.Create().WithMuscles(Arm_L).MultiplyIntensityBy(50);// Sensation sequence with a intensity of 30var softer =Sensation.Ball.WithMuscles(Abdominal_R).Append(Dart).MultiplyIntensityBy(30);