OSDN Git Service

接続ボーンを持たない剛体に対処。
authorOlyutorskii <olyutorskii@users.osdn.me>
Sat, 9 Oct 2010 01:11:17 +0000 (10:11 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Sat, 9 Oct 2010 01:11:17 +0000 (10:11 +0900)
src/main/java/jp/sourceforge/mikutoga/pmd/RigidInfo.java
src/main/java/jp/sourceforge/mikutoga/pmd/pmdexporter/PmdExporterExt3.java
src/main/java/jp/sourceforge/mikutoga/pmd/pmdloader/RigidBuilder.java
src/main/java/jp/sourceforge/mikutoga/pmd/xml/PmdXmlExporter.java
src/main/java/jp/sourceforge/mikutoga/pmd/xml/PmdXmlResources.java
src/main/java/jp/sourceforge/mikutoga/pmd/xml/Xml2PmdLoader.java
src/main/resources/jp/sourceforge/mikutoga/pmd/xml/resources/pmdxml-101009.dtd [moved from src/main/resources/jp/sourceforge/mikutoga/pmd/xml/resources/pmdxml-100923.dtd with 94% similarity]
src/main/resources/jp/sourceforge/mikutoga/pmd/xml/resources/pmdxml-101009.xsd [moved from src/main/resources/jp/sourceforge/mikutoga/pmd/xml/resources/pmdxml-100923.xsd with 99% similarity]

index 7e87e44..42195d9 100644 (file)
@@ -173,9 +173,16 @@ public class RigidInfo implements SerialNumbered {
     public String toString(){\r
         StringBuilder result = new StringBuilder();\r
 \r
+        String boneName;\r
+        if(this.linkedBone == null){\r
+            boneName = "NOBONE";\r
+        }else{\r
+            boneName = this.linkedBone.getBoneName().toString();\r
+        }\r
+\r
         result.append("Rigid(").append(this.rigidName).append(") ");\r
         result.append("[=>")\r
-              .append(this.linkedBone.getBoneName())\r
+              .append(boneName)\r
               .append("bone]");\r
         result.append(" [").append(this.rigidShape).append("]");\r
         result.append(" ").append(this.position);\r
index 142c5ac..08b07f7 100644 (file)
@@ -94,7 +94,11 @@ public class PmdExporterExt3 extends PmdExporterExt2{
         dumpText(rigidName, PmdLimits.MAXBYTES_RIGIDNAME);\r
 \r
         BoneInfo linkedBone = rigid.getLinkedBone();\r
-        dumpShort(linkedBone.getSerialNumber());\r
+        if(linkedBone == null){\r
+            dumpShort(-1);\r
+        }else{\r
+            dumpShort(linkedBone.getSerialNumber());\r
+        }\r
 \r
         RigidGroup group = rigid.getRigidGroup();\r
         dumpByte(group.getSerialNumber());\r
index 0a4ad78..a255fdc 100644 (file)
@@ -110,7 +110,12 @@ class RigidBuilder implements PmdRigidHandler {
      */\r
     @Override\r
     public void pmdRigidInfo(int rigidGroupId, int linkedBoneId){\r
-        BoneInfo bone = this.boneList.get(linkedBoneId);\r
+        BoneInfo bone;\r
+        if(linkedBoneId < 0 || 65535 <= linkedBoneId){\r
+            bone = null;\r
+        }else{\r
+            bone = this.boneList.get(linkedBoneId);\r
+        }\r
         RigidGroup group = this.rigidGroupList.get(rigidGroupId);\r
 \r
         this.currentRigid.setLinkedBone(bone);\r
index 16c61a6..65100b4 100644 (file)
@@ -1049,11 +1049,13 @@ public class PmdXmlExporter extends BasicXmlExporter{
 \r
         putI18nName(i18nName);\r
 \r
-        ind().put("<linkedBone ");\r
-        putNumberedIdAttr("boneIdRef", PFX_BONE, linkedBone);\r
-        put(" /> ");\r
-        putLineComment("Ref:" + linkedBone.getBoneName().getText());\r
-        ln(2);\r
+        if(linkedBone != null){\r
+            ind().put("<linkedBone ");\r
+            putNumberedIdAttr("boneIdRef", PFX_BONE, linkedBone);\r
+            put(" /> ");\r
+            putLineComment("Ref:" + linkedBone.getBoneName().getText());\r
+            ln(2);\r
+        }\r
 \r
         RigidShape shape = rigid.getRigidShape();\r
         putRigidShape(shape);\r
index 191cd6c..d9a367d 100644 (file)
@@ -25,17 +25,17 @@ import org.xml.sax.SAXException;
 public final class PmdXmlResources {\r
 \r
     public static final String NS_PMDXML =\r
-            "http://mikutoga.sourceforge.jp/xml/ns/pmdxml/100923";\r
+            "http://mikutoga.sourceforge.jp/xml/ns/pmdxml/101009";\r
     public static final String SCHEMA_PMDXML =\r
-            "http://mikutoga.sourceforge.jp/xml/xsd/pmdxml-100923.xsd";\r
+            "http://mikutoga.sourceforge.jp/xml/xsd/pmdxml-101009.xsd";\r
     public static final String DTD_PMDXML =\r
-            "http://mikutoga.sourceforge.jp/xml/dtd/pmdxml-100923.dtd";\r
+            "http://mikutoga.sourceforge.jp/xml/dtd/pmdxml-101009.dtd";\r
     public static final String VER_PMDXML =\r
-            "100923";\r
+            "101009";\r
     public static final String LOCAL_SCHEMA_PMDXML =\r
-            "resources/pmdxml-100923.xsd";\r
+            "resources/pmdxml-101009.xsd";\r
     public static final String LOCAL_DTD_PMDXML =\r
-            "resources/pmdxml-100923.dtd";\r
+            "resources/pmdxml-101009.dtd";\r
 \r
     public static final URI URI_SCHEMA_PMDXML = URI.create(SCHEMA_PMDXML);\r
     public static final URI URI_DTD_PMDXML = URI.create(DTD_PMDXML);\r
index 458ede1..84d15c0 100644 (file)
@@ -742,10 +742,12 @@ public class Xml2PmdLoader {
             String rigidId = getStringAttr(rigidElem, "rigidId");\r
             this.rigidMap.put(rigidId, rigid);\r
 \r
-            Element linkedBoneElem = getChild(rigidElem, "linkedBone");\r
-            String boneIdRef = getStringAttr(linkedBoneElem, "boneIdRef");\r
-            BoneInfo linkedBone = this.boneMap.get(boneIdRef);\r
-            rigid.setLinkedBone(linkedBone);\r
+            if(hasChild(rigidElem, "linkedBone")){\r
+                Element linkedBoneElem = getChild(rigidElem, "linkedBone");\r
+                String boneIdRef = getStringAttr(linkedBoneElem, "boneIdRef");\r
+                BoneInfo linkedBone = this.boneMap.get(boneIdRef);\r
+                rigid.setLinkedBone(linkedBone);\r
+            }\r
 \r
             RigidShape rigidShape = rigid.getRigidShape();\r
             if(hasChild(rigidElem, "rigidShapeSphere")){\r
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  MikuMikuDance
-    model-data(*.pmd) on XML
-    DTD definition
-
-  License : The MIT License
-  Copyright(c) 2010 MikuToga Partners
-
-  SYSTEM ID: http://mikutoga.sourceforge.jp/xml/dtd/pmdxml-100923.dtd
--->
-
-
-<!-- ROOT -->
-<!ELEMENT pmdModel (
-    i18nName*, description+, license*, credits*, meta*,
-    materialList,
-    toonMap,
-    boneList,
-    boneGroupList,
-    ikChainList,
-    morphList,
-    rigidList,
-    rigidGroupList,
-    jointList,
-    surfaceGroupList,
-    vertexList
-) >
-<!ATTLIST pmdModel
-    xmlns              CDATA #IMPLIED
-    xmlns:xsi          CDATA #IMPLIED
-    xsi:schemaLocation CDATA #IMPLIED
-    schemaVersion      CDATA #FIXED "100923"
-    name               CDATA #REQUIRED
->
-
-
-<!-- Multilingual name. -->
-<!ELEMENT i18nName EMPTY>
-<!ATTLIST i18nName
-    lang CDATA #REQUIRED
-    name CDATA #REQUIRED
->
-
-
-<!-- Break line. -->
-<!ELEMENT br EMPTY>
-
-
-<!-- Description note about model. -->
-<!ELEMENT description (#PCDATA | br)* >
-<!ATTLIST description
-    lang      CDATA "ja"
-    xml:space CDATA #FIXED "preserve"
->
-
-
-<!-- License term of usage. -->
-<!ELEMENT license (#PCDATA | br)* >
-<!ATTLIST license
-    lang      CDATA "ja"
-    xml:space CDATA #FIXED "preserve"
->
-
-
-<!-- Credits for someone. -->
-<!ELEMENT credits (#PCDATA | br)* >
-<!ATTLIST credits
-    lang      CDATA "ja"
-    xml:space CDATA #FIXED "preserve"
->
-
-
-<!--
-Meta-information of model.
-Use free.
-but, some meta-name has recommended usage.
-+ "generator" (Generator application name)
-+ "siteURL" (Website URL)
-+ "imageURL" (Thumbnail image URL)
--->
-<!ELEMENT meta EMPTY>
-<!ATTLIST meta
-    name    CDATA #REQUIRED
-    content CDATA #REQUIRED
->
-
-
-<!--
-Material list.
-All visual things can be tracked from here.
--->
-<!ELEMENT materialList (material)* >
-
-
-<!--
-Material definition.
-Colors, shading, any other definitions.
--->
-<!ELEMENT material (
-    i18nName*,
-    diffuse,
-    specular,
-    ambient,
-    toon?,
-    textureFile?,
-    spheremapFile?
-)*>
-<!ATTLIST material
-    name              CDATA #IMPLIED
-    showEdge          CDATA #REQUIRED
-    surfaceGroupIdRef CDATA #REQUIRED
->
-
-
-<!-- Diffuse color definition. -->
-<!ELEMENT diffuse EMPTY>
-<!ATTLIST diffuse
-    r     CDATA #REQUIRED
-    g     CDATA #REQUIRED
-    b     CDATA #REQUIRED
-    alpha CDATA #REQUIRED
->
-
-
-<!-- Specular color definition. -->
-<!ELEMENT specular EMPTY>
-<!ATTLIST specular
-    r         CDATA #REQUIRED
-    g         CDATA #REQUIRED
-    b         CDATA #REQUIRED
-    shininess CDATA #REQUIRED
->
-
-
-<!-- Ambient color definition. -->
-<!ELEMENT ambient EMPTY>
-<!ATTLIST ambient
-    r CDATA #REQUIRED
-    g CDATA #REQUIRED
-    b CDATA #REQUIRED
->
-
-
-<!-- Reference for Toon-image. -->
-<!ELEMENT toon EMPTY>
-<!ATTLIST toon
-    toonFileIdRef CDATA #REQUIRED
->
-
-
-<!-- Texture file information. -->
-<!ELEMENT textureFile EMPTY>
-<!ATTLIST textureFile
-    winFileName CDATA #REQUIRED
->
-
-
-<!-- Sphere-map file information. -->
-<!ELEMENT spheremapFile EMPTY>
-<!ATTLIST spheremapFile
-    winFileName CDATA #REQUIRED
->
-
-
-<!-- Toon-file mappings. -->
-<!ELEMENT toonMap (toonDef)* >
-
-
-<!-- Toon-file information. -->
-<!ELEMENT toonDef EMPTY>
-<!ATTLIST toonDef
-    toonFileId  CDATA #REQUIRED
-    index       CDATA #REQUIRED
-    winFileName CDATA #REQUIRED
->
-
-
-<!-- List of bone information. -->
-<!ELEMENT boneList (bone)* >
-
-
-<!-- Bone definition. -->
-<!ELEMENT bone (
-    i18nName*,
-    position,
-    (rotationRatio | ikBone)?,
-    boneChain
-) >
-<!ATTLIST bone
-    name   CDATA #REQUIRED
-    boneId CDATA #REQUIRED
-    type   (
-          ROTATE
-        | ROTMOV
-        | IK
-        | UNKNOWN
-        | UNDERIK
-        | UNDERROT
-        | IKCONNECTED
-        | HIDDEN
-        | TWIST
-        | LINKEDROT
-    ) #REQUIRED
->
-
-
-<!-- position information. -->
-<!ELEMENT position EMPTY>
-<!ATTLIST position
-    x CDATA #REQUIRED
-    y CDATA #REQUIRED
-    z CDATA #REQUIRED
->
-
-
-<!-- Relationship-info between bones. -->
-<!ELEMENT boneChain EMPTY>
-<!ATTLIST boneChain
-    prevBoneIdRef CDATA #IMPLIED
-    nextBoneIdRef CDATA #IMPLIED
->
-
-
-<!-- Rotation ratio between Linked-rotationed bones. -->
-<!ELEMENT rotationRatio EMPTY>
-<!ATTLIST rotationRatio
-    ratio CDATA #REQUIRED
->
-
-
-<!-- Reference to IK-Bone. -->
-<!ELEMENT ikBone EMPTY>
-<!ATTLIST ikBone
-    boneIdRef CDATA #REQUIRED
->
-
-
-<!-- List of Bone-group. -->
-<!ELEMENT boneGroupList (boneGroup)* >
-
-
-<!-- Bone-group. -->
-<!ELEMENT boneGroup (i18nName*, boneGroupMember*) >
-<!ATTLIST boneGroup
-    name CDATA #REQUIRED
->
-
-
-<!-- Member of Bone-group. -->
-<!ELEMENT boneGroupMember EMPTY>
-<!ATTLIST boneGroupMember
-    boneIdRef CDATA #REQUIRED
->
-
-
-<!-- List of IK chain. -->
-<!ELEMENT ikChainList (ikChain)* >
-
-
-<!-- IK chained bones definition. -->
-<!ELEMENT ikChain (chainOrder)+ >
-<!ATTLIST ikChain
-    ikBoneIdRef    CDATA #REQUIRED
-    recursiveDepth CDATA #REQUIRED
-    weight         CDATA #REQUIRED
->
-
-
-<!-- Part of IK chained bones. -->
-<!ELEMENT chainOrder EMPTY>
-<!ATTLIST chainOrder
-    boneIdRef CDATA #REQUIRED
->
-
-
-<!-- List of morphing definition. -->
-<!ELEMENT morphList (morph)* >
-
-
-<!-- Morphing definition. -->
-<!ELEMENT morph (i18nName*, morphVertex*) >
-<!ATTLIST morph
-    name CDATA #REQUIRED
-    type (
-          EYEBROW
-        | EYE
-        | LIP
-        | EXTRA
-    ) #REQUIRED
->
-
-
-<!-- Morphing vertex information. -->
-<!ELEMENT morphVertex EMPTY>
-<!ATTLIST morphVertex
-    vtxIdRef CDATA #REQUIRED
-    xOff     CDATA #REQUIRED
-    yOff     CDATA #REQUIRED
-    zOff     CDATA #REQUIRED
->
-
-
-<!-- list of Rigid-body definition. -->
-<!ELEMENT rigidList (rigid)* >
-
-
-<!-- Rigid-body definition. -->
-<!ELEMENT rigid (
-    i18nName*,
-    linkedBone,
-    (rigidShapeSphere | rigidShapeBox | rigidShapeCapsule),
-    position,
-    radRotation,
-    dynamics,
-    throughRigidGroup*
-) >
-<!ATTLIST rigid
-    name     CDATA #REQUIRED
-    rigidId  CDATA #REQUIRED
-    behavior (
-          FOLLOWBONE
-        | ONLYDYNAMICS
-        | BONEDDYNAMICS
-    ) #REQUIRED
->
-
-
-<!-- Referenced Bone from Rigid-body. -->
-<!ELEMENT linkedBone EMPTY>
-<!ATTLIST linkedBone
-    boneIdRef CDATA #REQUIRED
->
-
-
-<!-- Sphere shape of Rigid-body. -->
-<!ELEMENT rigidShapeSphere EMPTY>
-<!ATTLIST rigidShapeSphere
-    radius CDATA #REQUIRED
->
-
-
-<!-- Box shape of Rigid-body. -->
-<!ELEMENT rigidShapeBox EMPTY>
-<!ATTLIST rigidShapeBox
-    width  CDATA #REQUIRED
-    height CDATA #REQUIRED
-    depth  CDATA #REQUIRED
->
-
-
-<!-- Capsule shape of Rigid-body. -->
-<!ELEMENT rigidShapeCapsule EMPTY>
-<!ATTLIST rigidShapeCapsule
-    height CDATA #REQUIRED
-    radius CDATA #REQUIRED
->
-
-
-<!-- Rotaion information by radian. -->
-<!ELEMENT radRotation EMPTY>
-<!ATTLIST radRotation
-    xRad CDATA #REQUIRED
-    yRad CDATA #REQUIRED
-    zRad CDATA #REQUIRED
->
-
-
-<!-- Dynamics parameters. -->
-<!ELEMENT dynamics EMPTY>
-<!ATTLIST dynamics
-    mass            CDATA #REQUIRED
-    dampingPosition CDATA #REQUIRED
-    dampingRotation CDATA #REQUIRED
-    restitution     CDATA #REQUIRED
-    friction        CDATA #REQUIRED
->
-
-
-<!-- Reference for non-collision rigid-group. -->
-<!ELEMENT throughRigidGroup EMPTY>
-<!ATTLIST throughRigidGroup
-    rigidGroupIdRef CDATA #REQUIRED
->
-
-
-<!-- List of Rigid-body group. -->
-<!ELEMENT rigidGroupList (rigidGroup)* >
-
-
-<!-- Rigid-body group. -->
-<!ELEMENT rigidGroup (rigidGroupMember)* >
-<!ATTLIST rigidGroup
-    rigidGroupId CDATA #REQUIRED
->
-
-
-<!-- Member of Rigid-body group. -->
-<!ELEMENT rigidGroupMember EMPTY>
-<!ATTLIST rigidGroupMember
-    rigidIdRef CDATA #REQUIRED
->
-
-
-<!-- List of joint definition. -->
-<!ELEMENT jointList (joint)* >
-
-
-<!-- Joint definition. -->
-<!ELEMENT joint (
-    i18nName*,
-    jointedRigidPair,
-    position,    limitPosition,
-    radRotation, limitRotation,
-    elasticPosition,
-    elasticRotation
-) >
-<!ATTLIST joint
-    name CDATA #REQUIRED
->
-
-
-<!-- Jointed-bones information. -->
-<!ELEMENT jointedRigidPair EMPTY>
-<!ATTLIST jointedRigidPair
-    rigidIdRef2 CDATA #REQUIRED
-    rigidIdRef1 CDATA #REQUIRED
->
-
-
-<!-- Limit of Position. -->
-<!ELEMENT limitPosition EMPTY>
-<!ATTLIST limitPosition
-    xFrom CDATA #REQUIRED
-    xTo   CDATA #REQUIRED
-    yFrom CDATA #REQUIRED
-    yTo   CDATA #REQUIRED
-    zFrom CDATA #REQUIRED
-    zTo   CDATA #REQUIRED
->
-
-
-<!-- Limit of Rotation. -->
-<!ELEMENT limitRotation EMPTY>
-<!ATTLIST limitRotation
-    xFrom CDATA #REQUIRED
-    xTo   CDATA #REQUIRED
-    yFrom CDATA #REQUIRED
-    yTo   CDATA #REQUIRED
-    zFrom CDATA #REQUIRED
-    zTo   CDATA #REQUIRED
->
-
-
-<!-- Elastic position of joint. -->
-<!ELEMENT elasticPosition EMPTY>
-<!ATTLIST elasticPosition
-    x CDATA #REQUIRED
-    y CDATA #REQUIRED
-    z CDATA #REQUIRED
->
-
-
-<!-- Elastic rotation of joint by degree. -->
-<!ELEMENT elasticRotation EMPTY>
-<!ATTLIST elasticRotation
-    xDeg CDATA #REQUIRED
-    yDeg CDATA #REQUIRED
-    zDeg CDATA #REQUIRED
->
-
-
-<!-- List of surface group. -->
-<!ELEMENT surfaceGroupList (surfaceGroup)* >
-
-
-<!-- Surface group. -->
-<!ELEMENT surfaceGroup (surface)* >
-<!ATTLIST surfaceGroup
-    surfaceGroupId CDATA #REQUIRED
->
-
-
-<!-- Each surface with Triangle. -->
-<!ELEMENT surface EMPTY>
-<!ATTLIST surface
-    vtxIdRef1 CDATA #REQUIRED
-    vtxIdRef2 CDATA #REQUIRED
-    vtxIdRef3 CDATA #REQUIRED
->
-
-
-<!-- List of vertex. -->
-<!ELEMENT vertexList (vertex)* >
-
-
-<!-- Vertex definition. -->
-<!ELEMENT vertex (position, normal, uvMap, skinning) >
-<!ATTLIST vertex
-    vtxId    CDATA #REQUIRED
-    showEdge CDATA #REQUIRED
->
-
-
-<!-- Normal vector definition. -->
-<!ELEMENT normal EMPTY>
-<!ATTLIST normal
-    x CDATA #REQUIRED
-    y CDATA #REQUIRED
-    z CDATA #REQUIRED
->
-
-
-<!-- UV-mapping information. -->
-<!ELEMENT uvMap EMPTY>
-<!ATTLIST uvMap
-    u CDATA #REQUIRED
-    v CDATA #REQUIRED
->
-
-
-<!-- Skinning definition from vertex to bone. -->
-<!ELEMENT skinning EMPTY>
-<!ATTLIST skinning
-    boneIdRef1    CDATA #REQUIRED
-    boneIdRef2    CDATA #REQUIRED
-    weightBalance CDATA #REQUIRED
->
-
-
-<!-- EOF -->
+<?xml version="1.0" encoding="UTF-8" ?>\r
+\r
+<!--\r
+  MikuMikuDance\r
+    model-data(*.pmd) on XML\r
+    DTD definition\r
+\r
+  License : The MIT License\r
+  Copyright(c) 2010 MikuToga Partners\r
+\r
+  SYSTEM ID: http://mikutoga.sourceforge.jp/xml/dtd/pmdxml-101009.dtd\r
+-->\r
+\r
+\r
+<!-- ROOT -->\r
+<!ELEMENT pmdModel (\r
+    i18nName*, description+, license*, credits*, meta*,\r
+    materialList,\r
+    toonMap,\r
+    boneList,\r
+    boneGroupList,\r
+    ikChainList,\r
+    morphList,\r
+    rigidList,\r
+    rigidGroupList,\r
+    jointList,\r
+    surfaceGroupList,\r
+    vertexList\r
+) >\r
+<!ATTLIST pmdModel\r
+    xmlns              CDATA #IMPLIED\r
+    xmlns:xsi          CDATA #IMPLIED\r
+    xsi:schemaLocation CDATA #IMPLIED\r
+    schemaVersion      CDATA #FIXED "100923"\r
+    name               CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Multilingual name. -->\r
+<!ELEMENT i18nName EMPTY>\r
+<!ATTLIST i18nName\r
+    lang CDATA #REQUIRED\r
+    name CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Break line. -->\r
+<!ELEMENT br EMPTY>\r
+\r
+\r
+<!-- Description note about model. -->\r
+<!ELEMENT description (#PCDATA | br)* >\r
+<!ATTLIST description\r
+    lang      CDATA "ja"\r
+    xml:space CDATA #FIXED "preserve"\r
+>\r
+\r
+\r
+<!-- License term of usage. -->\r
+<!ELEMENT license (#PCDATA | br)* >\r
+<!ATTLIST license\r
+    lang      CDATA "ja"\r
+    xml:space CDATA #FIXED "preserve"\r
+>\r
+\r
+\r
+<!-- Credits for someone. -->\r
+<!ELEMENT credits (#PCDATA | br)* >\r
+<!ATTLIST credits\r
+    lang      CDATA "ja"\r
+    xml:space CDATA #FIXED "preserve"\r
+>\r
+\r
+\r
+<!--\r
+Meta-information of model.\r
+Use free.\r
+but, some meta-name has recommended usage.\r
++ "generator" (Generator application name)\r
++ "siteURL" (Website URL)\r
++ "imageURL" (Thumbnail image URL)\r
+-->\r
+<!ELEMENT meta EMPTY>\r
+<!ATTLIST meta\r
+    name    CDATA #REQUIRED\r
+    content CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!--\r
+Material list.\r
+All visual things can be tracked from here.\r
+-->\r
+<!ELEMENT materialList (material)* >\r
+\r
+\r
+<!--\r
+Material definition.\r
+Colors, shading, any other definitions.\r
+-->\r
+<!ELEMENT material (\r
+    i18nName*,\r
+    diffuse,\r
+    specular,\r
+    ambient,\r
+    toon?,\r
+    textureFile?,\r
+    spheremapFile?\r
+)*>\r
+<!ATTLIST material\r
+    name              CDATA #IMPLIED\r
+    showEdge          CDATA #REQUIRED\r
+    surfaceGroupIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Diffuse color definition. -->\r
+<!ELEMENT diffuse EMPTY>\r
+<!ATTLIST diffuse\r
+    r     CDATA #REQUIRED\r
+    g     CDATA #REQUIRED\r
+    b     CDATA #REQUIRED\r
+    alpha CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Specular color definition. -->\r
+<!ELEMENT specular EMPTY>\r
+<!ATTLIST specular\r
+    r         CDATA #REQUIRED\r
+    g         CDATA #REQUIRED\r
+    b         CDATA #REQUIRED\r
+    shininess CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Ambient color definition. -->\r
+<!ELEMENT ambient EMPTY>\r
+<!ATTLIST ambient\r
+    r CDATA #REQUIRED\r
+    g CDATA #REQUIRED\r
+    b CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Reference for Toon-image. -->\r
+<!ELEMENT toon EMPTY>\r
+<!ATTLIST toon\r
+    toonFileIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Texture file information. -->\r
+<!ELEMENT textureFile EMPTY>\r
+<!ATTLIST textureFile\r
+    winFileName CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Sphere-map file information. -->\r
+<!ELEMENT spheremapFile EMPTY>\r
+<!ATTLIST spheremapFile\r
+    winFileName CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Toon-file mappings. -->\r
+<!ELEMENT toonMap (toonDef)* >\r
+\r
+\r
+<!-- Toon-file information. -->\r
+<!ELEMENT toonDef EMPTY>\r
+<!ATTLIST toonDef\r
+    toonFileId  CDATA #REQUIRED\r
+    index       CDATA #REQUIRED\r
+    winFileName CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of bone information. -->\r
+<!ELEMENT boneList (bone)* >\r
+\r
+\r
+<!-- Bone definition. -->\r
+<!ELEMENT bone (\r
+    i18nName*,\r
+    position,\r
+    (rotationRatio | ikBone)?,\r
+    boneChain\r
+) >\r
+<!ATTLIST bone\r
+    name   CDATA #REQUIRED\r
+    boneId CDATA #REQUIRED\r
+    type   (\r
+          ROTATE\r
+        | ROTMOV\r
+        | IK\r
+        | UNKNOWN\r
+        | UNDERIK\r
+        | UNDERROT\r
+        | IKCONNECTED\r
+        | HIDDEN\r
+        | TWIST\r
+        | LINKEDROT\r
+    ) #REQUIRED\r
+>\r
+\r
+\r
+<!-- position information. -->\r
+<!ELEMENT position EMPTY>\r
+<!ATTLIST position\r
+    x CDATA #REQUIRED\r
+    y CDATA #REQUIRED\r
+    z CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Relationship-info between bones. -->\r
+<!ELEMENT boneChain EMPTY>\r
+<!ATTLIST boneChain\r
+    prevBoneIdRef CDATA #IMPLIED\r
+    nextBoneIdRef CDATA #IMPLIED\r
+>\r
+\r
+\r
+<!-- Rotation ratio between Linked-rotationed bones. -->\r
+<!ELEMENT rotationRatio EMPTY>\r
+<!ATTLIST rotationRatio\r
+    ratio CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Reference to IK-Bone. -->\r
+<!ELEMENT ikBone EMPTY>\r
+<!ATTLIST ikBone\r
+    boneIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of Bone-group. -->\r
+<!ELEMENT boneGroupList (boneGroup)* >\r
+\r
+\r
+<!-- Bone-group. -->\r
+<!ELEMENT boneGroup (i18nName*, boneGroupMember*) >\r
+<!ATTLIST boneGroup\r
+    name CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Member of Bone-group. -->\r
+<!ELEMENT boneGroupMember EMPTY>\r
+<!ATTLIST boneGroupMember\r
+    boneIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of IK chain. -->\r
+<!ELEMENT ikChainList (ikChain)* >\r
+\r
+\r
+<!-- IK chained bones definition. -->\r
+<!ELEMENT ikChain (chainOrder)+ >\r
+<!ATTLIST ikChain\r
+    ikBoneIdRef    CDATA #REQUIRED\r
+    recursiveDepth CDATA #REQUIRED\r
+    weight         CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Part of IK chained bones. -->\r
+<!ELEMENT chainOrder EMPTY>\r
+<!ATTLIST chainOrder\r
+    boneIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of morphing definition. -->\r
+<!ELEMENT morphList (morph)* >\r
+\r
+\r
+<!-- Morphing definition. -->\r
+<!ELEMENT morph (i18nName*, morphVertex*) >\r
+<!ATTLIST morph\r
+    name CDATA #REQUIRED\r
+    type (\r
+          EYEBROW\r
+        | EYE\r
+        | LIP\r
+        | EXTRA\r
+    ) #REQUIRED\r
+>\r
+\r
+\r
+<!-- Morphing vertex information. -->\r
+<!ELEMENT morphVertex EMPTY>\r
+<!ATTLIST morphVertex\r
+    vtxIdRef CDATA #REQUIRED\r
+    xOff     CDATA #REQUIRED\r
+    yOff     CDATA #REQUIRED\r
+    zOff     CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- list of Rigid-body definition. -->\r
+<!ELEMENT rigidList (rigid)* >\r
+\r
+\r
+<!-- Rigid-body definition. -->\r
+<!ELEMENT rigid (\r
+    i18nName*,\r
+    linkedBone?,\r
+    (rigidShapeSphere | rigidShapeBox | rigidShapeCapsule),\r
+    position,\r
+    radRotation,\r
+    dynamics,\r
+    throughRigidGroup*\r
+) >\r
+<!ATTLIST rigid\r
+    name     CDATA #REQUIRED\r
+    rigidId  CDATA #REQUIRED\r
+    behavior (\r
+          FOLLOWBONE\r
+        | ONLYDYNAMICS\r
+        | BONEDDYNAMICS\r
+    ) #REQUIRED\r
+>\r
+\r
+\r
+<!-- Referenced Bone from Rigid-body. -->\r
+<!ELEMENT linkedBone EMPTY>\r
+<!ATTLIST linkedBone\r
+    boneIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Sphere shape of Rigid-body. -->\r
+<!ELEMENT rigidShapeSphere EMPTY>\r
+<!ATTLIST rigidShapeSphere\r
+    radius CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Box shape of Rigid-body. -->\r
+<!ELEMENT rigidShapeBox EMPTY>\r
+<!ATTLIST rigidShapeBox\r
+    width  CDATA #REQUIRED\r
+    height CDATA #REQUIRED\r
+    depth  CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Capsule shape of Rigid-body. -->\r
+<!ELEMENT rigidShapeCapsule EMPTY>\r
+<!ATTLIST rigidShapeCapsule\r
+    height CDATA #REQUIRED\r
+    radius CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Rotaion information by radian. -->\r
+<!ELEMENT radRotation EMPTY>\r
+<!ATTLIST radRotation\r
+    xRad CDATA #REQUIRED\r
+    yRad CDATA #REQUIRED\r
+    zRad CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Dynamics parameters. -->\r
+<!ELEMENT dynamics EMPTY>\r
+<!ATTLIST dynamics\r
+    mass            CDATA #REQUIRED\r
+    dampingPosition CDATA #REQUIRED\r
+    dampingRotation CDATA #REQUIRED\r
+    restitution     CDATA #REQUIRED\r
+    friction        CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Reference for non-collision rigid-group. -->\r
+<!ELEMENT throughRigidGroup EMPTY>\r
+<!ATTLIST throughRigidGroup\r
+    rigidGroupIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of Rigid-body group. -->\r
+<!ELEMENT rigidGroupList (rigidGroup)* >\r
+\r
+\r
+<!-- Rigid-body group. -->\r
+<!ELEMENT rigidGroup (rigidGroupMember)* >\r
+<!ATTLIST rigidGroup\r
+    rigidGroupId CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Member of Rigid-body group. -->\r
+<!ELEMENT rigidGroupMember EMPTY>\r
+<!ATTLIST rigidGroupMember\r
+    rigidIdRef CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of joint definition. -->\r
+<!ELEMENT jointList (joint)* >\r
+\r
+\r
+<!-- Joint definition. -->\r
+<!ELEMENT joint (\r
+    i18nName*,\r
+    jointedRigidPair,\r
+    position,    limitPosition,\r
+    radRotation, limitRotation,\r
+    elasticPosition,\r
+    elasticRotation\r
+) >\r
+<!ATTLIST joint\r
+    name CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Jointed-bones information. -->\r
+<!ELEMENT jointedRigidPair EMPTY>\r
+<!ATTLIST jointedRigidPair\r
+    rigidIdRef2 CDATA #REQUIRED\r
+    rigidIdRef1 CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Limit of Position. -->\r
+<!ELEMENT limitPosition EMPTY>\r
+<!ATTLIST limitPosition\r
+    xFrom CDATA #REQUIRED\r
+    xTo   CDATA #REQUIRED\r
+    yFrom CDATA #REQUIRED\r
+    yTo   CDATA #REQUIRED\r
+    zFrom CDATA #REQUIRED\r
+    zTo   CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Limit of Rotation. -->\r
+<!ELEMENT limitRotation EMPTY>\r
+<!ATTLIST limitRotation\r
+    xFrom CDATA #REQUIRED\r
+    xTo   CDATA #REQUIRED\r
+    yFrom CDATA #REQUIRED\r
+    yTo   CDATA #REQUIRED\r
+    zFrom CDATA #REQUIRED\r
+    zTo   CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Elastic position of joint. -->\r
+<!ELEMENT elasticPosition EMPTY>\r
+<!ATTLIST elasticPosition\r
+    x CDATA #REQUIRED\r
+    y CDATA #REQUIRED\r
+    z CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Elastic rotation of joint by degree. -->\r
+<!ELEMENT elasticRotation EMPTY>\r
+<!ATTLIST elasticRotation\r
+    xDeg CDATA #REQUIRED\r
+    yDeg CDATA #REQUIRED\r
+    zDeg CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of surface group. -->\r
+<!ELEMENT surfaceGroupList (surfaceGroup)* >\r
+\r
+\r
+<!-- Surface group. -->\r
+<!ELEMENT surfaceGroup (surface)* >\r
+<!ATTLIST surfaceGroup\r
+    surfaceGroupId CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Each surface with Triangle. -->\r
+<!ELEMENT surface EMPTY>\r
+<!ATTLIST surface\r
+    vtxIdRef1 CDATA #REQUIRED\r
+    vtxIdRef2 CDATA #REQUIRED\r
+    vtxIdRef3 CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- List of vertex. -->\r
+<!ELEMENT vertexList (vertex)* >\r
+\r
+\r
+<!-- Vertex definition. -->\r
+<!ELEMENT vertex (position, normal, uvMap, skinning) >\r
+<!ATTLIST vertex\r
+    vtxId    CDATA #REQUIRED\r
+    showEdge CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Normal vector definition. -->\r
+<!ELEMENT normal EMPTY>\r
+<!ATTLIST normal\r
+    x CDATA #REQUIRED\r
+    y CDATA #REQUIRED\r
+    z CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- UV-mapping information. -->\r
+<!ELEMENT uvMap EMPTY>\r
+<!ATTLIST uvMap\r
+    u CDATA #REQUIRED\r
+    v CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- Skinning definition from vertex to bone. -->\r
+<!ELEMENT skinning EMPTY>\r
+<!ATTLIST skinning\r
+    boneIdRef1    CDATA #REQUIRED\r
+    boneIdRef2    CDATA #REQUIRED\r
+    weightBalance CDATA #REQUIRED\r
+>\r
+\r
+\r
+<!-- EOF -->\r
 <xsd:schema
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 
-    targetNamespace="http://mikutoga.sourceforge.jp/xml/ns/pmdxml/100923"
-    xmlns:tns      ="http://mikutoga.sourceforge.jp/xml/ns/pmdxml/100923"
+    targetNamespace="http://mikutoga.sourceforge.jp/xml/ns/pmdxml/101009"
+    xmlns:tns      ="http://mikutoga.sourceforge.jp/xml/ns/pmdxml/101009"
 
     elementFormDefault="qualified"
-    version="100923"
+    version="101009"
 >
 
     <xsd:annotation>
@@ -71,7 +71,7 @@
                 name="schemaVersion"
                 type="xsd:string"
                 use="required"
-                fixed="100923" />
+                fixed="101009" />
         </xsd:complexType>
 
         <xsd:unique name="ModelLang">
                 <xsd:element
                     ref="tns:i18nName"
                     minOccurs="0" maxOccurs="unbounded" />
-                <xsd:element ref="tns:linkedBone" />
+                <xsd:element ref="tns:linkedBone" minOccurs="0" />
 
                 <xsd:choice>
                     <xsd:element ref="tns:rigidShapeSphere" />