Back to NxLabs

NxLabs / Vintage Story

More animations

MBy mefiafan_2801

Better body and face animations

More animations

Description

Forget about the mod; Version 0.1.2 won't be released; mefimotion (my new mod) will solve ALL the problems.

Why did I suddenly decide to abandon this mod?
There were far too many workarounds, so I had to start developing Mefimotion.


A spin-off from my first mod... I decided to port the features from my custom model over to the base Seraphim models :)))

<span style="text-decoration: line-through;">!!! STARTING FROM VERSION 0.8+, THE MOD IS NOW ALSO A LIBRARY! YOU CAN NOW CREATE CUSTOM HAIRSTYLES USING MY MOD'S LOGIC !!!</span>

&nbsp;

<span style="text-decoration: line-through;">Starting from 0.1.1+ mod compatible with Player Model Library</span>

<span style="text-decoration: line-through;">(Compatibility with mods such as Humans or Female Seraph is up to their respective developers, so please take any issues or questions to them instead of me)</span>

&nbsp;

<span style="text-decoration: line-through;">New hair logic</span>

Better Seraph 0.1.0 &mdash; documentation

Hair physics for Vintage Story, configured through bone names. The mod reads the name and applies the physics itself &mdash; no code needed. Plus two systems for behaviour under headwear: hiding strands and freezing physics.

The docs come in three parts: name format, flags, headwear behaviour.


PART 1. Bone name format

The name is split by @ into two parts, ending in the required suffix phys:

LWSmega@zf40b15l20r5.own.nod3.stiff0,5phys

  • before @ &mdash; the bone name, anything (LWSmega). The mod leaves it alone and uses it as the strand's identifier in config files;
  • after @ &mdash; physics data;
  • phys at the end &mdash; how the mod recognizes a hair bone.

⚠️ Required: a keyframe for every bone

A correct name is not enough. For a bone to reach the animator and get a Joint ID, it must be in at least one keyframe of any animation (a single zero-frame is enough). Without it the strand hangs motionless, no error. Rule: the name gives the settings, the keyframe gives the Joint ID &mdash; you need both.

⚠️ Required: remove empty faces

Keep only visible faces with a real texture (#hair) on each cube. Don't leave faces with #null and a degenerate UV ([48,48,48,48]) &mdash; Blockbench sometimes creates them when copying cubes. They're invisible normally, but when the mesh rebuilds (e.g. putting on a helmet) they start turning black and flickering.

Side (first letter after @)

<table> <thead> <tr> <th>letter</th> <th>side</th> </tr> </thead> <tbody> <tr> <td>p</td> <td>front</td> </tr> <tr> <td>z</td> <td>back</td> </tr> <tr> <td>l</td> <td>left temple</td> </tr> <tr> <td>r</td> <td>right temple</td> </tr> </tbody> </table>

Tilt limits

After the side &mdash; maximum tilt angles in degrees. "Letter + number" pairs, free order: f forward, b back, l left, r right. Example: f40b15l20r5 &mdash; forward 40&deg;, back 15&deg;, left 20&deg;, right 5&deg;.

Decimals &mdash; use a comma

The dot is reserved as the flag separator, so decimal values use a comma: .tilt0,8, .stiff0,5, f15,5.


PART 2. Flags (after a dot)

Behaviour

<table> <thead> <tr> <th>flag</th> <th>what it does</th> </tr> </thead> <tbody> <tr> <td>.own</td> <td>rotate from own pivot only, ignore the bone edge. For braids and strands by the face</td> </tr> <tr> <td>.nofb</td> <td>disable forward-back tilt</td> </tr> <tr> <td>.nolr</td> <td>disable left-right tilt</td> </tr> <tr> <td>.noY</td> <td>disable vertical and head effects (flight, head tilt, nod)</td> </tr> <tr> <td>.c1</td> <td>chain root</td> </tr> <tr> <td>.c2(name)</td> <td>second link, hangs off bone name (the part before @ of the root) and lags behind</td> </tr> </tbody> </table>

Forces (absolute values)

Set the strength of an effect. No flag &mdash; the default is used. The value is absolute: independent of the mod's global settings.

<table> <thead> <tr> <th>flag</th> <th>effect</th> <th>default</th> </tr> </thead> <tbody> <tr> <td>.run</td> <td>run inertia (reaction to body movement)</td> <td>40</td> </tr> <tr> <td>.windback</td> <td>wind pushes back / away from face</td> <td>16</td> </tr> <tr> <td>.windfront</td> <td>wind pushes forward / toward face</td> <td>40</td> </tr> <tr> <td>.windside</td> <td>sideways wind</td> <td>16</td> </tr> <tr> <td>.fly</td> <td>vertical: up &rarr; toward face, down &rarr; away</td> <td>55</td> </tr> <tr> <td>.tilt</td> <td>head tilt (hold head down &rarr; strands lag toward the ground)</td> <td>0,5</td> </tr> <tr> <td>.nod</td> <td>head tilt inertia (a sharp nod)</td> <td>2,5</td> </tr> <tr> <td>.shake</td> <td>head turn inertia (turn &rarr; strands lag and return)</td> <td>2,5</td> </tr> </tbody> </table>

Spring

<table> <thead> <tr> <th>flag</th> <th>effect</th> <th>default</th> </tr> </thead> <tbody> <tr> <td>.stiff</td> <td>stiffness (0..1). Higher &mdash; snappier, lower &mdash; smoother, lazier</td> <td>0,35</td> </tr> <tr>
Read the full description on Vintage Story ModDB →

Ratings & reviews

No ratings yet

Sign in to leave a rating or comment.