Gah - a solution with more questions. – EntropicLqd
Legacy:Bone Names
Contents
Types of Bones
Bones cause a lot of confusion among Unreal Engine modders (and possibly licensees too). Part of this is the naming scheme. There are 2 types of bones, which do not share names and are in no way related. The names of some coincide, but that does not indicate that they are the same bone, thus adding to the confusion. The two type of bones are skeletal mesh animation bones and Karma ragdoll bones. Ragdoll bones exist only in UT2003.
- Skeletal Animation Bones
- These are the bones used when creating skeletal animation to import via UnrealEd. These are the bones affected by PlayAnim and LoopAnim. These names can be viewed through the UnreadEd Animation Browser by clicking View -> Bonenames.
- Karma Ragdoll Bones
- These are the "bone" definitions used by the Karma Ragdoll physics. They do not interact in any way with Skeletal Animation bones, however, they can interact to a limited extent with script bones. You can find the information on these bones in the .ka files in the KarmaData subdirectory of the directory in which UT2003 was installed. These files have some formatting but can be deciphered with relative ease.
Skeletal Animation Bones
Foxpaw: I vote that we break this into subpages - one subpage for each model, and it would include that model's Skeletal Animation Bones, Karma Ragdoll Bones, and known script bones.
Jugg
Bip01 +- Bip01 Pelvis +- Bip01 R Thigh | +- Bip01 R Calf | +- Bip01 R Foot | +- Bip01 R Toe0 +- Bip01 L Thigh | +- Bip01 L Calf | +- Bip01 L Foot | +- Bip01 L Toe0 +- Bip01 Spine +- Bip01 Spine1 +- Bip01 Spine2 +- Bip01 Neck +- Bip01 Head | +- Bip01 Ponytail1 | +- Bip01 Ponytail11 | +- Bip01 Ponytail12 | +- Bip01 Ponytail13 +- Bip01 R Clavicle | +- Bone_Rshoulder | +- Bip01 R Upperarm | +- Bip01 R Forearm | +- Bip01 R Hand | +- Bone_weapon +- Bip01 L Clavicle +- Bone_Lshoulder +- Bip01 L Upperarm +- Bip01 L Forearm +- Bip01 L Hand
HumanFemaleA
Note: The HumanMaleA is the same but without the ponytail bones.
Bip01 +- Bip01 Pelvis +- Bip01 R Thigh | +- Bip01 R Calf | +- Bip01 R Foot | +- Bip01 R Toe0 +- Bip01 L Thigh | +- Bip01 L Calf | +- Bip01 L Foot | +- Bip01 L Toe0 +- Bip01 Spine +- Bip01 Spine1 +- Bip01 Spine2 +- Bip01 Neck +- Bip01 Head | +- Bip01 Ponytail1 | +- Bip01 Ponytail11 | +- Bip01 Ponytail12 | +- Bip01 Ponytail13 +- Bip01 R Clavicle | +- Bone_Rshoulder | +- Bip01 R Upperarm | +- Bip01 R Forearm
| +- Bip01 R Hand | +- Bip01 R Finger0 | +- Bone_weapon +- Bip01 L Clavicle +- Bone_Lshoulder +- Bip01 L Upperarm +- Bip01 L Forearm +- Bip01 L Hand +- Bip01 L Finger0
Bot
Bip01 +- Bip01 Pelvis +- Bip01 R Thigh | +- Bip01 R Calf | +- Bip01 R Foot | +- Bip01 R Toe0 +- Bip01 L Thigh | +- Bip01 L Calf | +- Bip01 L Foot | +- Bip01 L Toe0 +- Bip01 Spine +- Bip01 Spine1 +- Bip01 Spine2 +- Bip01 Neck +- Bip01 Head +- Bip01 R Clavicle | +- Bone_Rshoulder | +- Bip01 R Upperarm | +- Bip01 R Forearm | +- Bip01 R Hand | +- Bip01 R Finger0 | | +- Bip01 R Finger01 | | +- Bip01 R Finger02 | +- Bone_weapon +- Bip01 L Clavicle +- Bone_Lshoulder +- Bip01 L Upperarm +- Bip01 L Forearm +- Bip01 L Hand +- Bip01 L Finger0 +- Bip01 L Finger01 +- Bip01 L Finger02
Aliens
Bip01 +- Bip01 Pelvis +- Bip01 Tail +- Bip01 R Thigh | +- Bip01 R Calf | +- Bip01 R Horselink | +- Bip01 R Foot | +- Bip01 R Toe0 +- Bip01 L Thigh | +- Bip01 L Calf | +- Bip01 R Horselink | +- Bip01 L Foot | +- Bip01 L Toe0 +- Bip01 Spine +- Bip01 Spine1 +- Bip01 Spine2 +- Bip01 Neck +- Bip01 Head | +- Bip01 Ponytail1 | | +- Bip01 Ponytail11 | | +- Bip01 Ponytail12 | | +- Bip01 Ponytail13 | +- Bone_Rtentacle1 | | +- Bone_Rtentacle2 | | +- Bone_Rtentacle3 | +- Bone_Ltentacle1
| +- Bone_Ltentacle2 | +- Bone_Ltentacle3 +- Bip01 R Clavicle | +- Bone_Rshoulder | +- Bip01 R Upperarm | +- Bip01 R Forearm | +- Bip01 R Hand | +- Bip01 R Finger0 | +- Bone_weapon
+- Bip01 L Clavicle +- Bone_Lshoulder +- Bip01 L Upperarm +- Bip01 L Forearm +- Bip01 L Hand +- Bip01 L Finger0
Karma Ragdoll Bones
Foxpaw: Someone feel free to fill this in, or follow my suggestion above.
Bones in UnrealScript
Following section should be moved somewhere, eg Attaching To Bones.
You can refer to individual bones using some native functions in UnrealScript. When referring to these bones, you can use the full name of the bone, though this works only for bones set up in the defaultproperties if the bone name has a space in it, in my experience. As an alternative, you can refer to a bone using it's attachalias. If the bone name does not have a space in it, you can just use the full name of the bone.
AttachAliases can be set up in the Animations browser in UnrealEd. Select the Mesh tab in the animation properties box to the right of the 3D pane of the animations browser. From there, expand attach, and then expand sockets. This reveals a dynamic array of attachment information, including the attachaliases and some options for the facing of actor attached to that bone.
Here is an example of how to refer to bones in Unrealscript:
// Substitite Actor for the actor you want to attach, and lfarm for the // attachalias or name of the bone you want to use. AttachToBone( Actor, 'lfarm' ); // Use this to detach it from that bone. You do not need to specify what bone // it is attached to. DetachFromBone( Actor );
Comments
Holim Then what about weapon bones? I've seen the bones used in the weapon animations except when you play the animations the links seem to be able to scale and move!? Is there any rigged weapon models out there in MAX format?
FrozenCow Bone_L_shoulder and Bone_R_shoulder of the Bot need to be Bone_Lshoulder and Bone_Rshoulder
Tarquin: if you're suggesting a correction, go ahead and make it in the page :)
MythOpus: Can anyone get the MONSTER bone names?
Wormbo: Those are no skeletal meshes, so they don't have any bone names.
Newbie: Yes, vehicles and monsters have no bones. Only players. (Kinda makes sense dont it :P) I also fixed Bone_L_shoulder and Bone_R_shoulder to Bone_Lshoulder and Bone_Rshoulder.
Wormbo: Actually, SVehicles do have bones for wheels, turrets etc.
MythOpus: Well that just sucks! I was all pumped up to attach emitters to them after I saw that they sub-classed xPawn... so how can I attach an emitter to a monster without attaching it to a specific bone and have it follow it around?
Ass2iN: Yea, Wormbo was right SVehicles do have bones. Mythopus I have no idea how you could attatch an emitter to a monster without bones. Sry :(
Lilguy: You could always use SetBase() but that won't let you attach it to something like a foot that moves around very much; It will always have the same relative offset. That might be good enough, but it'll look funny if you tried to do something like attach a piece of armor or something, since the attachment won't keep up with the animation.
LionsPhil: Which are the karma bones? The .ka files are (invalid – multiple duplicate IDs) XML, and each asset entity has 'geometry', 'model', 'part' (I suspect it's this one, after poking KAT), 'no_collision' (ok, it isn't this one ;) ) and 'joint' (nor this) entities. Annoyingly, all have IDs containing spaces, yet actors which use these bone names such as KConstraint define the type of arguments such as KConstraintBone1
as name
, and UnrealEd refuses to keep spaces in these values (or any characters after the first space).
Switch`: Names with spaces need double quotes.
LionsPhil: *slaps forehead* Thanks...I really should have thought of that...
Guest:(TurkeyFromHell) Would it be possible to determine the nearest bone that a projectile would hit on impact? ok so that wasnt a good way to word that, here's a better way to put it: projectile hits the player -> how would i figure out which bone(s) of the mesh it would hit? is there a way to determine the nearest bone to the vector HitLocation?
EricBlade: UT04 has a function "GetNearestBone" or something similar. '03 may have had it, but it doesn't appear to be a part of the stock engine in 2226, as my game is missing it, and has to calculate it on it's own. :(