Skip to content

Bones & regions

The two canonical reference tables every modeller and item author needs: the 20-bone EF biped (the only skeleton meshes skin to) and the body regions (the values you put in an item’s regions array). Both are verified against the mod’s code.

The skeleton is the official Epic Fight biped — exactly 20 joints, case-sensitive names. The renderer builds this skeleton in Java (TiedUpArmatures.buildBiped) and matches your GLB’s bones to it by name. A mistyped joint name is silently ignored — the mesh deforms wrong, with no error in the log.

Root,
Thigh_R, Leg_R, Knee_R,
Thigh_L, Leg_L, Knee_L,
Torso, Chest, Head,
Shoulder_R, Arm_R, Elbow_R, Hand_R, Tool_R,
Shoulder_L, Arm_L, Elbow_L, Hand_L, Tool_L
Root
├── Thigh_R
│ ├── Leg_R
│ └── Knee_R
├── Thigh_L
│ ├── Leg_L
│ └── Knee_L
└── Torso
└── Chest
├── Head
├── Shoulder_R
│ └── Arm_R
│ ├── Elbow_R
│ └── Hand_R
│ └── Tool_R
└── Shoulder_L
└── Arm_L
├── Elbow_L
└── Hand_L
└── Tool_L
JointRole
RootGlobal root — do not keyframe it for a worn-item animation
Thigh_R / Thigh_LHip
Leg_R / Leg_LUpper leg
Knee_R / Knee_LLower leg / foot (the “foot” is the same joint as Knee in EF)
TorsoLower spine
ChestUpper spine / ribcage
HeadHead (vanilla head tracking applies unless an animation overrides it)
Shoulder_R / Shoulder_LClavicle / shoulder pivot
Arm_R / Arm_LUpper arm — in EF naming, “Arm” already means upper arm
Elbow_R / Elbow_LForearm — in EF naming, the forearm is called “Elbow”
Hand_R / Hand_LHand
Tool_R / Tool_LTool attachment point (usually left at identity)

Coming from a generic Blender rig, Mixamo, or another mod? Translate your names:

Common Blender / external nameTiedUp EF nameNote
rootRootUppercase
Spine / Spine1TorsoNo number
Spine2 / ChestChest
Shoulder.R / Clavicle.RShoulder_RDot → underscore
Upper_Arm.R / UpperArm.RArm_R”Arm” already means upper arm
Forearm.R / LowerArm.RElbow_RForearm is called Elbow in EF
Hand.RHand_RDot → underscore
Thigh.RThigh_R
Leg.R (upper)Leg_R
Foot.R / Knee.RKnee_RFoot is the same joint as Knee_R in EF
Tool_R / Tool_LNo common equivalent

You don’t need to skin to every joint. The GLB exporter only writes bones that actually have skinned vertices, and the renderer matches by name against the full biped — so a blindfold GLB listing only Head is perfectly fine. Partial bone lists are optimal, not a limitation.

Every item declares one or more body regions in its regions array. The 14 values below are the complete, exact set the parser accepts (matched against BodyRegion, case-insensitive — the parser uppercases your input). An unknown region name is dropped with a WARN (often a “did you mean…?” suggestion); if every region is invalid, the whole item is skipped.

RegionGlobal?Typical itemsJoints it tends to skin to
HEADglobalHood, helmet, head harnessHead
EYESsub of HEADBlindfoldHead
EARSsub of HEADEarplugsHead
MOUTHsub of HEADGag, muzzleHead
NECKCollar, choker(cosmetic — Chest or Head)
TORSOStraitjacket, harnessTorso, Chest
WAISTBelt, chastity beltTorso, Chest
ARMSglobalHandcuffs, armbinderShoulder_R/L, Arm_R/L, Elbow_R/L, Hand_R/L, Tool_R/L
HANDSsub of ARMSMittens, fist mittsHand_R/L (+ arm chain as needed)
FINGERSsub of ARMSFinger cuffs(cosmetic — Hand_R/L)
LEGSglobalAnkle cuffs, leg binderThigh_R/L, Leg_R/L, Knee_R/L
FEETsub of LEGSForced shoes, foot cuffsKnee_R/L
TAILTail plug (pet play)(cosmetic — adjacent joint)
WINGSDecorative wings(cosmetic — Chest)

Three regions are global (isGlobal() == true on the enum) — they conceptually encompass sub-regions:

GlobalSub-regions
HEADEYES, EARS, MOUTH
ARMSHANDS, FINGERS
LEGSFEET

NECK, FINGERS, TAIL, and WINGS have no biped joint of their own. Items in these regions render by skinning to whichever adjacent joint makes sense (e.g. a collar skinned to Chest, a choker to Head), but they do not change the player’s pose. They behave like any other region for slot occupancy and blocked_regions.

  1. Pick the region(s) for your item from the 14 above and put them in regions. This drives slot occupancy, escape difficulty, and (if you declare it) blocking.
  2. Skin your mesh to the relevant joint names from the biped — the names, not the region, determine deformation.
  3. (optional) If the item forces a pose, list the same joint names in an OVERLAY binding’s joints array so the animation drives only those joints.

For the full item schema see Item JSON; for the build-it-once tour see Your First Item.