Mirror of 1.4.22 from Lovers Lab

This commit is contained in:
ghostclinic3YTB 2023-04-03 21:48:55 -04:00
parent 5d0da3bc88
commit b501ddfb0f
1119 changed files with 12505 additions and 2543 deletions

1
1.3/AssembliesNotion.txt Normal file
View File

@ -0,0 +1 @@
latest source build: SizedApparel1.4WIP22

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>AOC</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Alien_Bori</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Alien_Miho</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Rabbie</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Ratkin</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Ratkin_Su</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Alien_SP</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,717 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.BodyDef>
<defName>Human</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<!-- Wip -->
<!-- <li> -->
<!-- <partName>Nipples</partName> -->
<!-- <boneName>Breasts</boneName> -->
<!-- <defaultHediffName>Breasts</defaultHediffName> -->
<!-- <bodyPartOf>Breasts</bodyPartOf> -->
<!-- <colorType>Nipple</colorType> -->
<!-- <isBreasts>true</isBreasts> -->
<!-- <mustHaveBone>false</mustHaveBone> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0114</south> -->
<!-- <north>0.0011</north> -->
<!-- <east>0.0114</east> -->
<!-- <west>0.0114</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Hulk</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Fat</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Child</bodyType>
<Addons>
<!-- <li> -->
<!-- <partName>Breasts</partName> -->
<!-- <boneName>Breasts</boneName> -->
<!-- <defaultHediffName>Breasts</defaultHediffName> -->
<!-- <bodyPartOf>Breasts</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>true</isBreasts> -->
<!-- <mustHaveBone>false</mustHaveBone> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0113</south> -->
<!-- <north>0.001</north> -->
<!-- <east>0.0113</east> -->
<!-- <west>0.0113</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Vagina</partName> -->
<!-- <boneName>Vagina</boneName> -->
<!-- <defaultHediffName>Vagina</defaultHediffName> -->
<!-- <bodyPartOf>Vagina</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <mustHaveBone>true</mustHaveBone> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0088</south> -->
<!-- <north>0.0100</north> -->
<!-- <east>0.0088</east> -->
<!-- <west>0.0088</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Anus</partName> -->
<!-- <boneName>Anus</boneName> -->
<!-- <defaultHediffName>Anus</defaultHediffName> -->
<!-- <bodyPartOf>Anus</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0093</south> -->
<!-- <north>0.0105</north> -->
<!-- <east>0.0093</east> -->
<!-- <west>0.0093</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Belly</partName> -->
<!-- <boneName>Belly</boneName> -->
<!-- <defaultHediffName>BellyBulge</defaultHediffName> -->
<!-- <bodyPartOf>Belly</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0098</south> -->
<!-- <north>0.0002</north> -->
<!-- <east>0.0098</east> -->
<!-- <west>0.0098</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Penis</partName> -->
<!-- <boneName>Penis</boneName> -->
<!-- <defaultHediffName>Penis</defaultHediffName> -->
<!-- <bodyPartOf>Penis</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0108</south> -->
<!-- <north>0.0025</north> -->
<!-- <east>0.0108</east> -->
<!-- <west>0.0108</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Balls</partName> -->
<!-- <boneName>Balls</boneName> -->
<!-- <defaultHediffName>Penis</defaultHediffName> -->
<!-- <bodyPartOf>Balls</bodyPartOf> -->
<!-- <customPath>Penis/Balls</customPath> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0096</south> -->
<!-- <north>0.0085</north> -->
<!-- <east>0.0096</east> -->
<!-- <west>0.0096</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs> <Defs>
<SizedApparel.BodyDef> <SizedApparel.BodyDef>
<defName>Human</defName> <defName>Human</defName>
@ -26,6 +25,23 @@
<west>0.0113</west> <west>0.0113</west>
</depthOffset> </depthOffset>
</li> </li>
<!-- Wip -->
<!-- <li> -->
<!-- <partName>Nipples</partName> -->
<!-- <boneName>Breasts</boneName> -->
<!-- <defaultHediffName>Breasts</defaultHediffName> -->
<!-- <bodyPartOf>Breasts</bodyPartOf> -->
<!-- <colorType>Nipple</colorType> -->
<!-- <isBreasts>true</isBreasts> -->
<!-- <mustHaveBone>false</mustHaveBone> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0114</south> -->
<!-- <north>0.0011</north> -->
<!-- <east>0.0114</east> -->
<!-- <west>0.0114</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<li> <li>
<partName>Vagina</partName> <partName>Vagina</partName>
<boneName>Vagina</boneName> <boneName>Vagina</boneName>
@ -120,8 +136,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -238,8 +254,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -356,8 +372,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -474,8 +490,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -592,8 +608,106 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Child</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>

Binary file not shown.

BIN
1.3/Defs/Defs(wip).zip Normal file

Binary file not shown.

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<SizedApparel.PubicHairDef>
<!-- Sized Apparel will Use defName for TextureSearch -->
<defName>Default</defName>
<!-- texPath must be set for styling station! -->
<texPath>SizedApparel/BodyParts/Human/PubicHair/Default</texPath>
<!-- Actual Texture must have "_south" name. -->
<!-- for example of this: Default_south.png -->
</SizedApparel.PubicHairDef>
</Defs>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<SizedApparel.PubicHairDef>
<!-- Sized Apparel will Use defName for TextureSearch -->
<defName>Line</defName>
<!-- texPath must be set for styling station! -->
<texPath>SizedApparel/BodyParts/Human/PubicHair/Line</texPath>
<!-- Actual Texture must have "_south" name. -->
<!-- for example of this: Default_south.png -->
</SizedApparel.PubicHairDef>
</Defs>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<SizedApparel.PubicHairDef>
<!-- Sized Apparel will Use defName for TextureSearch -->
<defName>Wild</defName>
<!-- texPath must be set for styling station! -->
<texPath>SizedApparel/BodyParts/Human/PubicHair/Wild</texPath>
<!-- Actual Texture must have "_south" name. -->
<!-- for example of this: Default_south.png -->
</SizedApparel.PubicHairDef>
</Defs>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<SizedApparel.PubicHairDef>
<defName>None</defName>
<noGraphic>true</noGraphic>
</SizedApparel.PubicHairDef>
</Defs>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<SizedApparel.PubicHairDef>
<!-- Sized Apparel will Use defName for TextureSearch -->
<defName>Wild</defName>
<!-- texPath must be set for styling station! -->
<texPath>SizedApparel/BodyParts/Human/PubicHair/Wild</texPath>
<!-- Actual Texture must have "_south" name. -->
<!-- for example of this: Default_south.png -->
</SizedApparel.PubicHairDef>
</Defs>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>AOC</defName>
<skeletons>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Alien_Bori</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Alien_Miho</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.148)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.150)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.006, 0, -0.143)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.129)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.139</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.061, 0, -0.155)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141))</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.121)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.109)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.004, 0, -0.123)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.148)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.150)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.006, 0, -0.143)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.129)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.061, 0, -0.155)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.004, 0, -0.123))</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.121)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.109)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.004, 0, -0.123)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Rabbie</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Ratkin</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Ratkin_Su</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Alien_SP</defName>
<skeletons>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -556,6 +556,111 @@
<li> <li>
<bodyType>Child</bodyType> <bodyType>Child</bodyType>
<Bones> <Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.002, 0, -0.209)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.205)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.043, 0, -0.174)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.164)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.084, 0, -0.127)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.166)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.164)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.057, 0, -0.145)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones> </Bones>
</li> </li>
</skeletons> </skeletons>

View File

@ -0,0 +1,668 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Human</defName>
<skeletons>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(-0.002, 0, -0.340)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.346)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.238)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.174, 0, 0.254)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.01, 0, -0.338)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.062, 0, -0.221)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.01, 0, -0.338)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.062, 0, -0.221)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.301)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.318)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.059, 0, -0.186)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.312)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.318)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.006, 0, -0.256)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.260)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.266)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.137, 0, -0.211)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.307)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.305)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.008, 0, -0.248)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.307)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.305)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.007, 0, -0.248)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.281)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.291)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.021, 0, -0.219)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.311)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.057, 0, -0.258)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.268)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.252)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.113, 0, -0.234)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.301)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.311)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.068, 0, -0.250)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0.0, 0, -0.301)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.0, 0, -0.311)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.066, 0, -0.250)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.275)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.277)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.066, 0, -0.219)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Hulk</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.004, 0, -0.434)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.453)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.020, 0, -0.395)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0.006, 0, -0.383)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.406)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.238, 0, -0.328)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.436)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.0, 0, -0.445)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.029, 0, -0.387)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.436)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.445)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.028, 0, -0.387)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.395)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.027, 0, -0.375)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, -0.424)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Fat</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.002, 0, -0.352)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.359)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.148, 0, -0.352)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.297)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.297)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.238, 0, -0.271)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.357)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.363)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.168, 0, -0.348)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.357)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.363)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.168, 0, -0.348)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.307)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.158, 0, -0.338)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.002, 0, -0.209)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.205)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.043, 0, -0.174)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.164)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.084, 0, -0.127)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<!-- <li> -->
<!-- <name>PubicHair</name> -->
<!-- <south> -->
<!-- <InitialPosition>(0, 0, -0.166)</InitialPosition> -->
<!-- <InitialAngle>0</InitialAngle> -->
<!-- </south> -->
<!-- <north> -->
<!-- <InitialPosition>(-0.002, 0, -0.164)</InitialPosition> -->
<!-- <InitialAngle>0</InitialAngle> -->
<!-- </north> -->
<!-- <east> -->
<!-- <InitialPosition>(0.057, 0, -0.145)</InitialPosition> -->
<!-- <InitialAngle>0</InitialAngle> -->
<!-- </east> -->
<!-- </li> -->
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

Binary file not shown.

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Biotech</li>
</mods>
<match Class="PatchOperationSequence">
<success>Normal</success>
<operations>
<li Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel</xpath>
<value>
<tags>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</tags>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags</xpath>
<value>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</value>
</match>
</li>
<li Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel</xpath>
<value>
<tags>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</tags>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags</xpath>
<value>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</value>
</match>
</li>
</operations>
</match>
</Operation>
</Patch>

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Biotech</li>
</mods>
<match Class="PatchOperationSequence">
<success>Normal</success>
<operations>
<li Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel</xpath>
<value>
<tags>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</tags>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags</xpath>
<value>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</value>
</match>
</li>
<li Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel</xpath>
<value>
<tags>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</tags>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_HeavyBandolier"]/apparel/tags</xpath>
<value>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</value>
</match>
</li>
</operations>
</match>
</Operation>
</Patch>

View File

@ -11,10 +11,4 @@ namespace SizedApparel
class AlienRaceSupport class AlienRaceSupport
{ {
} }
public class SizedApparelPawnDef : Def
{
public bool allowForceHumanlike = false;
}
} }

View File

@ -6,6 +6,7 @@ using System.Threading.Tasks;
namespace SizedApparel namespace SizedApparel
{ {
//Does it better to optimize?
public class Graphic_BodyParts : Verse.Graphic_Multi public class Graphic_BodyParts : Verse.Graphic_Multi
{ {
public float serverity; public float serverity;

View File

@ -3,11 +3,17 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using UnityEngine;
using RimWorld;
using Verse;
namespace SizedApparel namespace SizedApparel
{ {
public class Graphic_SizedApparel : Verse.Graphic_Multi //Does it better to optimize?
public class Graphic_SizedApparel : Graphic_Multi
{ {
public string TargetBodyParts = "Breats";
//Sized Graphics.
public List<Graphic_Multi> graphics;
} }
} }

View File

@ -1,15 +1,11 @@
using System; using HarmonyLib;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RimWorld; using RimWorld;
using Verse; //using Rimworld_Animations;
using HarmonyLib;
//using AlienRace; //using AlienRace;
using UnityEngine;
using rjw; using rjw;
using RevealingApparel; using System;
using System.Reflection; using System.Linq;
using Verse;
namespace SizedApparel namespace SizedApparel
{ {
@ -24,6 +20,9 @@ namespace SizedApparel
public static bool rimNudeWorldActive = false; public static bool rimNudeWorldActive = false;
public static bool OTYNudeActive = false; public static bool OTYNudeActive = false;
public static bool LicentiaActive = false; public static bool LicentiaActive = false;
public static bool RimworldAnimationActive = false; //rjw animation
public static bool MenstruationActive = false; //rjw_menstruation
public static bool StatueOfColonistActive = false;
static SizedApparelPatch() static SizedApparelPatch()
{ {
@ -85,6 +84,40 @@ namespace SizedApparel
{ {
LicentiaActive = true; LicentiaActive = true;
} }
if (!LicentiaActive)
{
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId.ToLower() == "Euclidean.LustLicentia.RJWLabs".ToLower()))
{
LicentiaActive = true;
}
}
if (!LicentiaActive)
{
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId.ToLower().Contains("LustLicentia.RJWLabs".ToLower())))
{
LicentiaActive = true;
}
}
//check rjw animation
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId.ToLower() == "c0ffee.rimworld.animations".ToLower()))
{
RimworldAnimationActive = true;
}
//check rjw_menstruation
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId.ToLower() == "rjw.menstruation".ToLower()))
{
MenstruationActive = true;
}
//check statue of Colonist
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId.ToLower() == "tammybee.statueofcolonist".ToLower()))
{
StatueOfColonistActive = true;
}
Log.Message("[SizedApparel] start"); Log.Message("[SizedApparel] start");
@ -137,7 +170,7 @@ namespace SizedApparel
} }
else else
{ {
Log.Message("[SizedApparel] RimJobWorld Paatch canceled"); Log.Message("[SizedApparel] RimJobWorld Patch canceled");
} }
}))(); }))();
} }
@ -170,6 +203,31 @@ namespace SizedApparel
catch (TypeLoadException ex) { } catch (TypeLoadException ex) { }
*/ */
try
{
((Action)(() =>
{
if (RimworldAnimationActive)
{
Log.Message("[SizedApparel] RimworldAnimaion(rjw animation) Found");
harmony.Patch(AccessTools.Method(typeof(Rimworld_Animations.CompBodyAnimator), "tickClip"),
postfix: new HarmonyMethod(typeof(RimworldAnimationPatch), "TickClipPostfix"));
harmony.Patch(AccessTools.Method(typeof(JobDriver_SexBaseInitiator), "End"),
postfix: new HarmonyMethod(typeof(RimworldAnimationPatch), "EndClipPostfix"));
Log.Message("[SizedApparel] RimworldAnimaion(rjw animation) Patched");
}
else
{
Log.Message("[SizedApparel] RimworldAnimaion(rjw animation) Patch canceled");
}
}))();
}
catch (TypeLoadException ex) { }
//Rim Nude World Patch //Rim Nude World Patch
try try
{ {

View File

@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using Verse;
using HarmonyLib;
using UnityEngine;
//using Rimworld_Animations;
namespace SizedApparel
{
public class RimworldAnimationPatch
{
//since instance (CompBodyAnimator class) must be soft dependency, Get as System.Object.
public static void TickClipPostfix(System.Object __instance) //CompBodyAnimator __instance, AnimationDef ___anim, int ___curStage, int ___actor, int ___clipTicks, float ___clipPercent
{
Rimworld_Animations.CompBodyAnimator instance = __instance as Rimworld_Animations.CompBodyAnimator;
if (instance == null)
return;
if (!instance.controlGenitalAngle)
return;
var comp = instance.parent.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
comp.SetPenisAngle(instance.genitalAngle - instance.bodyAngle); //genitalAngle is global Angle value in rjwanimation... fix with body Angle;
if (!SizedApparelSettings.AnimationPatch)//Rotating Penis Setting(avobe) is set from RimworldAnimation Setting, not in SizedApparel.
return;
foreach (var actor in instance.actorsInCurrentAnimation)
{
//comp.ForceUpdateTickAnimation = true;
var actorcomp = actor.GetComp<ApparelRecorderComp>();
if (actorcomp == null)
continue;
//actorcomp.SetBreastJiggle(true);
actorcomp.ForceUpdateTickAnimation = true;
}
return;
bool isFuckTick = false;
/*
var soundEffects = ((PawnAnimationClip)___anim.animationStages[___curStage].animationClips[___actor]).SoundEffects;
if (soundEffects.ContainsKey(___clipTicks) && (soundEffects[___clipTicks].Contains("Fuck") || soundEffects[___clipTicks].Contains("Suck")))
{
isFuckTick = true;
}
else
{
const int jiggleTime = 3;
for(int i = 0; i < jiggleTime; i++)
{
if (soundEffects.ContainsKey(___clipTicks - i) && soundEffects[___clipTicks - i].Contains("Fuck"))
{
isFuckTick = true;
break;
}
}
}*/
//need to find partner's breasts.
/*
if (isFuckTick)
{
foreach (var actor in __instance.actorsInCurrentAnimation)
{
actor.GetComp<ApparelRecorderComp>().SetBreastJiggle(true);
}
}
else
{
foreach (var actor in __instance.actorsInCurrentAnimation)
{
actor.GetComp<ApparelRecorderComp>().SetBreastJiggle(false);
}
}*/
//may have some tick issue? too fast jiggle?
}
//rjw's JobDriver_SexBaseInitiator end patch
public static void EndClipPostfix(System.Object __instance)//CompBodyAnimator __instance
{
Rimworld_Animations.CompBodyAnimator instance = __instance as Rimworld_Animations.CompBodyAnimator;
if (instance == null)
return;
if (!instance.controlGenitalAngle)
return;
var comp = instance.parent.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
comp.SetBreastJiggle(false, -1);
comp.ForceUpdateTickAnimation = false;
comp.SetPenisAngle(0);
}
}
}

View File

@ -17,7 +17,7 @@ namespace SizedApparel
if (graphicSet == null) if (graphicSet == null)
return; return;
var comp = pawn.TryGetComp<ApparelRecorderComp>(); var comp = pawn.GetComp<ApparelRecorderComp>();
if (comp == null) if (comp == null)
return; return;
comp.needToCheckApparelGraphicRecords = true; comp.needToCheckApparelGraphicRecords = true;

View File

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
using RJW_Menstruation;
namespace SizedApparel
{
public class Patch_Menstruation
{
public static Color? GetNippleColor(Hediff breastHediff)
{
var breastcomp = breastHediff.TryGetComp<HediffComp_Breast>();
if (breastcomp == null)
return null;
return breastcomp.NippleColor;
}
public static float? GetNippleSize(Hediff breastHediff)
{
var breastcomp = breastHediff.TryGetComp<HediffComp_Breast>();
if (breastcomp == null)
return null;
return breastcomp.NippleSize;
}
public static float? GetAreolaSize(Hediff breastHediff)
{
var breastcomp = breastHediff.TryGetComp<HediffComp_Breast>();
if (breastcomp == null)
return null;
return breastcomp.AreolaSize;
}
}
}

View File

@ -18,10 +18,10 @@ namespace SizedApparel
{ {
if (!UnityData.IsInMainThread) if (!UnityData.IsInMainThread)
return; return;
ApparelRecorderComp comp = pawn?.TryGetComp<ApparelRecorderComp>(); ApparelRecorderComp comp = pawn?.GetComp<ApparelRecorderComp>();
if (comp == null) if (comp == null)
return; return;
comp.SetDirty(); comp.SetDirty(true,true,true);
/* /*
comp.ClearAll(); comp.ClearAll();
var graphicSet = pawn.Drawer?.renderer?.graphics; var graphicSet = pawn.Drawer?.renderer?.graphics;
@ -69,7 +69,7 @@ namespace SizedApparel
return; return;
//GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff); //GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff);
//bool flag = hasUnSupportedApparel(__instance.pawn, breastSeverity, breastHediff); //bool flag = hasUnSupportedApparel(__instance.pawn, breastSeverity, breastHediff);
ApparelRecorderComp comp = pawn.TryGetComp<ApparelRecorderComp>(); ApparelRecorderComp comp = pawn.GetComp<ApparelRecorderComp>();
if (comp != null) if (comp != null)
{ {
/* /*
@ -128,7 +128,7 @@ namespace SizedApparel
{ {
if (pawn == null) if (pawn == null)
return; return;
ApparelRecorderComp comp = pawn.TryGetComp<ApparelRecorderComp>(); ApparelRecorderComp comp = pawn.GetComp<ApparelRecorderComp>();
if (comp == null) if (comp == null)
return; return;
comp.SetDirty(); comp.SetDirty();
@ -146,7 +146,7 @@ namespace SizedApparel
ApparelRecorderComp pawnARC = __instance.pawn.TryGetComp<ApparelRecorderComp>(); ApparelRecorderComp pawnARC = __instance.pawn.GetComp<ApparelRecorderComp>();
if (pawnARC != null) if (pawnARC != null)
{ {
if (__instance.pawn.RaceProps.Humanlike) if (__instance.pawn.RaceProps.Humanlike)
@ -161,7 +161,7 @@ namespace SizedApparel
var partner = __instance.Partner as Pawn; var partner = __instance.Partner as Pawn;
if (partner == null) if (partner == null)
return; return;
ApparelRecorderComp partnerARC = partner.TryGetComp<ApparelRecorderComp>(); ApparelRecorderComp partnerARC = partner.GetComp<ApparelRecorderComp>();
if (partnerARC != null) if (partnerARC != null)
{ {
if (partner.RaceProps.Humanlike) if (partner.RaceProps.Humanlike)
@ -182,7 +182,7 @@ namespace SizedApparel
{ {
ApparelRecorderComp pawnARC = __instance.pawn.TryGetComp<ApparelRecorderComp>(); ApparelRecorderComp pawnARC = __instance.pawn.GetComp<ApparelRecorderComp>();
if (pawnARC != null) if (pawnARC != null)
{ {
@ -209,7 +209,7 @@ namespace SizedApparel
var partner = __instance.Partner as Pawn; var partner = __instance.Partner as Pawn;
if (partner == null) if (partner == null)
return; return;
ApparelRecorderComp partnerARC = partner.TryGetComp<ApparelRecorderComp>(); ApparelRecorderComp partnerARC = partner.GetComp<ApparelRecorderComp>();
if (partnerARC != null) if (partnerARC != null)
{ {
partnerARC.havingSex = false; partnerARC.havingSex = false;

View File

@ -36,7 +36,7 @@ namespace SizedApparel
{ {
if (__result == false) if (__result == false)
return; return;
var comp = pawn.TryGetComp<ApparelRecorderComp>(); var comp = pawn.GetComp<ApparelRecorderComp>();
if (comp == null) if (comp == null)
return; return;
if (comp.hasUnsupportedApparel) if (comp.hasUnsupportedApparel)

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SizedApparel
{
public class Patch_StatueOfColonist
{
}
}

View File

@ -1,33 +1,51 @@
using System; using HarmonyLib;
using RimWorld;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Reflection;
using RimWorld;
using Verse;
using HarmonyLib;
//using AlienRace; //using AlienRace;
using UnityEngine; using UnityEngine;
using rjw; using Verse;
using System.Reflection;
namespace SizedApparel namespace SizedApparel
{ {
public struct Depth4Offsets public class Depth4Offsets
{ {
float South; public float south=0;
float North; public float north=0;
float East; public float east=0;
float West; public float west=0;
public Depth4Offsets() { }
public Depth4Offsets(Vector4 arg)
{
south = arg.x;
north = arg.y;
east = arg.z;
west = arg.w;
}
public Depth4Offsets(float s, float n, float e, float w)
{
south = s;
north = n;
east = e;
west = w;
}
} }
public struct Rot4Offsets public class Rot4Offsets
{ {
//X: right and left //X: right and left
//Y: Frong or Back //Y: Frong or Back
//Z: Up and Down //Z: Up and Down
Vector3 South; Vector3 South;
Vector3 North; Vector3 North;
Vector3 East; Vector3 East;
Vector3 West; Vector3 West;
public Rot4Offsets(Vector3 vector) public Rot4Offsets(Vector3 vector)
@ -68,11 +86,29 @@ namespace SizedApparel
public string bodyType; public string bodyType;
} }
public class BodyWithBodyType
{
public string bodyType;
public List<BodyPart> Addons = new List<BodyPart>();
}
public class BodyPart public class BodyPart
{ {
public string partName; public string partName = null;
public Depth4Offsets depthOffset; public string customPath = null;
public List<BodyTypeAndOffset> offsets; public string defaultHediffName = null; // for missing Hediff
public bool isBreasts = false;
public bool centeredTexture = true;
public bool mustMatchBodyType = false; // TODO
public string boneName = null;
public Bone bone = null; // For Graphic Positioning System
public bool mustHaveBone = true; // when bone is missing, don't draw
public SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None;
public ColorType colorType = ColorType.Skin;
public Depth4Offsets depthOffset = new Depth4Offsets();
public BodyTypeAndOffset offsets = new BodyTypeAndOffset();
} }
public class BodyTypeAndOffset public class BodyTypeAndOffset
@ -81,11 +117,16 @@ namespace SizedApparel
public string bodyType; public string bodyType;
public Rot4Offsets offsets = new Rot4Offsets(Vector3.zero); public Rot4Offsets offsets = new Rot4Offsets(Vector3.zero);
public BodyTypeAndOffset()
{
}
public BodyTypeAndOffset(bool useCenter) public BodyTypeAndOffset(bool useCenter)
{ {
if (useCenter) if (useCenter)
{ {
offsets = new Rot4Offsets(new Vector3(0.5f, 0, 0.5f)); offsets = new Rot4Offsets(Vector3.zero);
} }
} }
public BodyTypeAndOffset(Vector3 defaultOffset) public BodyTypeAndOffset(Vector3 defaultOffset)
@ -94,15 +135,15 @@ namespace SizedApparel
} }
} }
public enum SizedApparelBodyPartColorOf public enum ColorType
{ {
Skin, Hair, Custom, None Skin, Hair, Nipple, Custom, None
} }
public enum SizedApparelBodyPartOf public enum SizedApparelBodyPartOf
{ {
All, Torso, Breasts, Crotch, Penis, Vagina, Anus, Belly, Udder, Hips, Thighs, hands, feet, None All, Torso, Breasts, Crotch, Penis, Balls, Vagina, Anus, Belly, PubicHair, Udder, Hips, Thighs, hands, feet, None
} }
public static class SizedApparelBodyPartOfExtension public static class SizedApparelBodyPartOfExtension
{ {
@ -124,13 +165,17 @@ namespace SizedApparel
return true; return true;
return false; return false;
case SizedApparelBodyPartOf.Crotch: case SizedApparelBodyPartOf.Crotch:
if (source == SizedApparelBodyPartOf.Penis || source == SizedApparelBodyPartOf.Vagina || source == SizedApparelBodyPartOf.Anus) if (source == SizedApparelBodyPartOf.Crotch || source == SizedApparelBodyPartOf.Penis || source == SizedApparelBodyPartOf.Vagina || source == SizedApparelBodyPartOf.Anus || source == SizedApparelBodyPartOf.PubicHair || source == SizedApparelBodyPartOf.Balls)
return true; return true;
return false; return false;
case SizedApparelBodyPartOf.Penis: case SizedApparelBodyPartOf.Penis:
if (source == SizedApparelBodyPartOf.Penis) if (source == SizedApparelBodyPartOf.Penis)
return true; return true;
return false; return false;
case SizedApparelBodyPartOf.Balls:
if (source == SizedApparelBodyPartOf.Balls)
return true;
return false;
case SizedApparelBodyPartOf.Vagina: case SizedApparelBodyPartOf.Vagina:
if (source == SizedApparelBodyPartOf.Vagina) if (source == SizedApparelBodyPartOf.Vagina)
return true; return true;
@ -163,10 +208,13 @@ namespace SizedApparel
if (source == SizedApparelBodyPartOf.feet) if (source == SizedApparelBodyPartOf.feet)
return true; return true;
return false; return false;
case SizedApparelBodyPartOf.PubicHair:
if (source == SizedApparelBodyPartOf.PubicHair)
return true;
return false;
case SizedApparelBodyPartOf.None: case SizedApparelBodyPartOf.None:
return false; return false;
return false;
} }
Log.Error("[SizedApparel] missing SizedApparelBodyPartOf!"); Log.Error("[SizedApparel] missing SizedApparelBodyPartOf!");
return false; return false;
@ -188,7 +236,7 @@ namespace SizedApparel
public class GraphicPoint public class GraphicPoint
{ {
public string pointName; public string pointName;
public Vector2 point = new Vector2(0.5f, 0.5f); public Vector2 point = Vector2.zero;
} }
public class GraphicPointsWithBodyType public class GraphicPointsWithBodyType
{ {
@ -199,13 +247,13 @@ namespace SizedApparel
public class PointWithBodyType public class PointWithBodyType
{ {
public string bodyTypeName; //null can be used too public string bodyTypeName; //null can be used too
public Vector2 point = new Vector2(0.5f,0.5f); public Vector2 point = Vector2.zero;
} }
public struct BodyPartPoint public class BodyPartPoint
{ {
string name; string name;
Vector2 position;//Uv position. not pixel Vector2 position = Vector2.zero;//Uv position. not pixel
} }
[Obsolete]//todo [Obsolete]//todo
@ -214,10 +262,6 @@ namespace SizedApparel
} }
public enum ColorMode
{
Skin, Hair
}
//Def for Hediff Graphic color options or else. //Def for Hediff Graphic color options or else.
public class SizedApparelHeddifDef : Def public class SizedApparelHeddifDef : Def
@ -228,6 +272,7 @@ namespace SizedApparel
} }
//Def per graphic(texture) //Def per graphic(texture)
[Obsolete]
public class SizedApparelBodyPartGraphicDef : Def public class SizedApparelBodyPartGraphicDef : Def
{ {
public string graphicPath; public string graphicPath;
@ -241,17 +286,32 @@ namespace SizedApparel
public class SizedApparelBodyPartDef : Def public class SizedApparelBodyPartDef : Def
{ {
SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None;
public bool canPose = false; public bool canPose = true;
public bool canAnimate = false; public List<string> TexturePaths;
} }
public class SizedApparelBodyPart public class SizedApparelBodyPart
{ {
static MethodInfo overrideMatMethod = AccessTools.Method(typeof(PawnRenderer), "OverrideMaterialIfNeeded"); static MethodInfo overrideMatMethod = AccessTools.Method(typeof(PawnRenderer), "OverrideMaterialIfNeeded");
static Color defaultNippleColor = Color.white;//nipple texture is already colored with pink. so make it white as default to avoid double coloring pink //Strong Pink Color = new ColorInt(255, 121, 121).ToColor
public SizedApparelBodyPart(Pawn pawn, string bodyPartName, SizedApparelBodyPartOf bodyPartOf, string defaultHediffName, bool isBreast, bool isOverlay , string customPathName = null, SizedApparelBodyPartColorOf colorOf = SizedApparelBodyPartColorOf.Skin) //this is for RGB Channel Edit
static string texturePath_White = "SizedApparel/Masks/White";
static string texturePath_Black = "SizedApparel/Masks/Black";
static string texturePath_Red = "SizedApparel/Masks/Red";
static string texturePath_Green = "SizedApparel/Masks/Green";
static string texturePath_Blue = "SizedApparel/Masks/Blue";
public bool AutoOffsetForFurCoveredBody = true;
public SizedApparelBodyPart(Pawn pawn, ApparelRecorderComp apparelRecorderComp, string bodyPartName, SizedApparelBodyPartOf bodyPartOf, string defaultHediffName, bool isBreast, bool isOverlay, string customPathName = null, ColorType colorOf = ColorType.Skin, bool needBoneToRender = true, Bone parentBone = null, bool isCenteredTexture = false )
{ {
this.pawn = pawn; //owner this.pawn = pawn; //owner
this.apparelRecorderCompCache = apparelRecorderComp; //for reduce GetComp Call; if it is null, it will try to get pawn's comp.
this.bodyPartName = bodyPartName; this.bodyPartName = bodyPartName;
this.def = DefDatabase<SizedApparelBodyPartDef>.AllDefs.FirstOrDefault(b => b.defName == bodyPartName); this.def = DefDatabase<SizedApparelBodyPartDef>.AllDefs.FirstOrDefault(b => b.defName == bodyPartName);
@ -262,6 +322,15 @@ namespace SizedApparel
this.isOverlay = isOverlay; this.isOverlay = isOverlay;
this.customPath = customPathName; this.customPath = customPathName;
this.colorType = colorOf; this.colorType = colorOf;
this.bone = parentBone;
this.mustHaveBone = needBoneToRender;
this.centeredTexture = isCenteredTexture;
}
public void SetCenteredTexture(bool isCentered)
{
this.centeredTexture = isCentered;
} }
public Vector2 OffsetFromUVOffset(Vector2 vector, Mesh mesh , bool isFliped = false) public Vector2 OffsetFromUVOffset(Vector2 vector, Mesh mesh , bool isFliped = false)
@ -269,10 +338,21 @@ namespace SizedApparel
//treat mesh as plane //treat mesh as plane
//Vector3 width = mesh.vertices[2] - mesh.vertices[1]; //Vector3 width = mesh.vertices[2] - mesh.vertices[1];
//Vector3 height = mesh.vertices[1] - mesh.vertices[2]; //Vector3 height = mesh.vertices[1] - mesh.vertices[2];
Vector2 loc = new Vector2(0.5f, 0.5f) - vector;
if(!isFliped)
return new Vector2((mesh.vertices[2].x - mesh.vertices[0].x)*vector.x,(mesh.vertices[0].z - mesh.vertices[2].z)*vector.y);
return new Vector2((mesh.vertices[2].x - mesh.vertices[0].x)*vector.x, (mesh.vertices[2].z - mesh.vertices[0].z)*vector.y);
/*
* Vector2 loc = new Vector2(0.5f, 0.5f) - vector;
if(!isFliped) if(!isFliped)
return new Vector2(Mathf.Lerp(mesh.vertices[0].x, mesh.vertices[2].x, loc.x), Mathf.Lerp(mesh.vertices[0].z, mesh.vertices[2].z, loc.y)); return new Vector2(Mathf.Lerp(mesh.vertices[0].x, mesh.vertices[2].x, loc.x), Mathf.Lerp(mesh.vertices[0].z, mesh.vertices[2].z, loc.y));
return new Vector2(Mathf.Lerp(mesh.vertices[3].x, mesh.vertices[1].x, loc.x), Mathf.Lerp(mesh.vertices[3].z, mesh.vertices[1].z, loc.y)); return new Vector2(Mathf.Lerp(mesh.vertices[3].x, mesh.vertices[1].x, loc.x), Mathf.Lerp(mesh.vertices[3].z, mesh.vertices[1].z, loc.y));
*/
} }
//public Vector2 OffestFromUVOffset(Vector2 vector, Vector2 drawSize, bool isFliped = false) //public Vector2 OffestFromUVOffset(Vector2 vector, Vector2 drawSize, bool isFliped = false)
@ -280,19 +360,28 @@ namespace SizedApparel
public SizedApparelBodyPartDef def; public SizedApparelBodyPartDef def;
public Pawn pawn; public Pawn pawn;
public ApparelRecorderComp apparelRecorderCompCache; // for reduce getComp call;
public Bone bone;
private bool mustHaveBone;
public bool centeredTexture = false; // false to keep original position from mesh. and consider this graphics pivot as bone position
public string bodyPartName; //breast, penis, belly, pubichair... etc. just name. not like architech something public string bodyPartName; //breast, penis, belly, pubichair... etc. just name. not like architech something
public string customPath = null; public string customPath = null;
public SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; public SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None;
public string defaultHediffName; public string defaultHediffName;
public bool isBreast = false; public bool isBreast = false;
public bool isOverlay = false; //write z cache? public bool isOverlay = false; //write z cache?
public string currentHediffName; public string currentHediffName;
public bool isVisible = true; public bool isVisible = true;
public SizedApparelBodyPartColorOf colorType = SizedApparelBodyPartColorOf.Skin; public int lastPoseTick = -1;
public ColorType colorType = ColorType.Skin;
public Color? customColorOne; public Color? customColorOne;
public Color? customColorTwo; public Color? customColorTwo;
@ -313,14 +402,24 @@ namespace SizedApparel
public int maxDrawAge = -1; public int maxDrawAge = -1;
public void SetBone(Bone bone)
{
this.bone = bone;
}
public void SetCustomPose(string newPose, bool autoUpdate = true, bool autoSetPawnGraphicDirty = false) public void SetCustomPose(string newPose, bool autoUpdate = true, bool autoSetPawnGraphicDirty = false)
{ {
if (customPose == newPose) if (customPose == newPose)
return; return;
if(SizedApparelSettings.Debug)
Log.Message("[SizedApparel] Setting Custom Pose : " + newPose);
customPose = newPose; customPose = newPose;
if (autoUpdate) if (autoUpdate)
{
this.UpdateGraphic(); this.UpdateGraphic();
this.lastPoseTick = Find.TickManager.TicksGame;
}
if(autoSetPawnGraphicDirty) if(autoSetPawnGraphicDirty)
{ {
if (pawn == null) if (pawn == null)
@ -330,60 +429,45 @@ namespace SizedApparel
} }
} }
public bool CheckCanPose(string targetPose, bool checkApparels, bool mustMatchSize) public bool CheckCanPose(string targetPose, bool checkApparels, bool checkBodyParts, bool mustMatchSize, bool mustMatchBodytype, bool mustMatchRace)
{ {
if (checkApparels) if (checkApparels)
{ {
foreach(ApparelGraphicRecord agr in pawn.Drawer.renderer.graphics.apparelGraphics) if (!SizedApparelUtility.CanPoseApparels(pawn, targetPose, currentHediffName, currentSeverityInt, cappedSeverityInt))
return false;
}
if (checkBodyParts)
{ {
/* Graphic graphic = GetBodyPartGraphics(false, mustMatchSize, mustMatchBodytype, mustMatchRace);
if (!agr.sourceApparel.def.apparel.bodyPartGroups.Any(bpgd => bpgd.defName == "Torso" || bpgd.defName == "Chest")) Graphic graphicH = GetBodyPartGraphics(true, mustMatchSize, mustMatchBodytype, mustMatchRace);
continue;
if (agr.sourceApparel.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_IgnorePose".ToLower()))
continue;
*/
string originalPath = SizedApparelsDatabase.GetSupportedApparelOriginalPath(agr.graphic.path);
if (originalPath == null)
return false;
int outInt = -1;
float outFloat = -1;
SizedApparelsDatabase.SizedApparelDatabaseKey key = new SizedApparelsDatabase.SizedApparelDatabaseKey(originalPath,pawn.def.defName,pawn.story?.bodyType?.defName, pawn.gender, currentHediffName, Math.Min(currentSeverityInt, cappedSeverityInt), false, targetPose);
if (SizedApparelSettings.useGenderSpecificTexture)
key.gender = Gender.None;
var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(key, out outInt, out outFloat);
if (!result.isCustomPose)
return false;
}
}
Graphic graphic = GetBodyPartGraphics(false, mustMatchSize, targetPose);
Graphic graphicH = GetBodyPartGraphics(true, mustMatchSize, targetPose);
if (graphic != null || graphicH != null) if (graphic != null || graphicH != null)
return true; return true;
return false; return false;
} }
return true;
}
//TODO... //TODO...
public int currentSeverityInt = -1; public int currentSeverityInt = -1;
public int cappedSeverityInt = 1000; // supported severity from worn apparel graphics public int cappedSeverityInt = 1000; // supported severity from worn apparel graphics
public Vector2 pivot = new Vector2(0.5f, 0.5f); public Vector2 pivot = Vector2.zero;
public Vector2 position = Vector2.zero;//offset from pivot //UV. not pixel public Vector2 position = Vector2.zero;//offset from pivot //UV. not pixel
public Dictionary<string, BodyPartPoint> points; public SizedApparelTexturePointDef points;
public Dictionary<string, BodyPartPoint> pointsHorny; public SizedApparelTexturePointDef pointsHorny;
public float rotation = 0; // +: rotate right, -: rotate left public float rotation = 0; // +: rotate right, -: rotate left
public Vector2 scale = Vector2.one; public float scale = 1f;
public Graphic bodyPartGraphic; public Graphic bodyPartGraphic;
public Graphic bodyPartGraphicHorny; public Graphic bodyPartGraphicHorny;
public Vector2 positionOffset = Vector2.zero; //offset from position //UV. not pixel public Vector2 positionOffset = Vector2.zero; //offset from position //UV. not pixel
public Vector2 positionOffsetSouth = Vector2.zero; public Vector2 positionOffsetSouth = Vector2.zero;
public Vector2 positionOffsetNorth = Vector2.zero; public Vector2 positionOffsetNorth = Vector2.zero;
@ -392,11 +476,13 @@ namespace SizedApparel
public float depthOffset = 0f; public float depthOffset = 0f;
//0.008f
public float depthOffsetEast = 0.008f; public float depthOffsetEast = 0.008f;
public float depthOffsetWest = 0.008f; public float depthOffsetWest = 0.008f;
public float depthOffsetSouth = 0.008f; public float depthOffsetSouth = 0.008f;
public float depthOffsetNorth = 0.008f; public float depthOffsetNorth = 0.008f;
//bigger = in front //bigger = in front
public void SetDepthOffsets(float south, float north, float east, float west) public void SetDepthOffsets(float south, float north, float east, float west)
{ {
@ -405,6 +491,13 @@ namespace SizedApparel
depthOffsetEast = east; depthOffsetEast = east;
depthOffsetWest = west; depthOffsetWest = west;
} }
public void SetDepthOffsets(Depth4Offsets oppsets)
{
depthOffsetSouth = oppsets.south;
depthOffsetNorth = oppsets.north;
depthOffsetEast = oppsets.east;
depthOffsetWest = oppsets.west;
}
public void SetPositionOffsets(Vector2 south, Vector2 north, Vector2 east, Vector2 west) public void SetPositionOffsets(Vector2 south, Vector2 north, Vector2 east, Vector2 west)
{ {
positionOffsetSouth = south; positionOffsetSouth = south;
@ -412,38 +505,58 @@ namespace SizedApparel
positionOffsetEast = east; positionOffsetEast = east;
positionOffsetWest = west; positionOffsetWest = west;
} }
public Graphic GetBodyPartGraphics(bool isHorny, bool mustMatchSize = false, string poseOverride = null) public Graphic GetBodyPartGraphics(bool isHorny, bool mustMatchSize = false, bool mustMatchBodytype = false, bool mustMatchRace = false, string poseOverride = null)
{ {
Dictionary<string, BodyPartPoint> var; SizedApparelTexturePointDef var;
return GetBodyPartGraphics(isHorny, out var, mustMatchSize, poseOverride); return GetBodyPartGraphics(isHorny, out var, mustMatchBodytype, mustMatchSize, mustMatchRace, poseOverride);
} }
public Graphic GetBodyPartGraphics(bool isHorny, out Dictionary<string, BodyPartPoint> outPoints, bool mustMatchSize = false ,string poseOverride = null, string variationOverride = null) public Graphic GetBodyPartGraphics(bool isHorny, out SizedApparelTexturePointDef outPoints, bool mustMatchSize = false, bool mustMatchBodyType = false , bool mustMatchRace = false ,string poseOverride = null, string variationOverride = null)
{ {
if (pawn == null) if (pawn == null)
{ {
outPoints = null; outPoints = null;
return null; return null;
} }
var comp = apparelRecorderCompCache;
var comp = pawn.TryGetComp<ApparelRecorderComp>(); if (comp == null)
comp = pawn.GetComp<ApparelRecorderComp>();
if (comp == null) if (comp == null)
{ {
outPoints = null; outPoints = null;
return null; return null;
} }
string bodyTypeString = pawn.story?.bodyType?.defName;
var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType?.defName, currentHediffName, customPath==null?bodyPartName: customPath, pawn.gender, Math.Min(currentSeverityInt, cappedSeverityInt), isHorny, poseOverride==null?customPose:poseOverride, variationOverride==null?variation: variationOverride); var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeString, currentHediffName, customPath==null?bodyPartName: customPath, pawn.gender, Math.Min(currentSeverityInt, cappedSeverityInt), isHorny, poseOverride==null?customPose:poseOverride, variationOverride==null?variation: variationOverride);
var result = SizedApparelsDatabase.GetSupportedBodyPartPath(key, isBreast, customPath == null ? bodyPartName : customPath, defaultHediffName); var result = SizedApparelsDatabase.GetSupportedBodyPartPath(key, isBreast, customPath == null ? bodyPartName : customPath, defaultHediffName);
if (mustMatchSize) if (mustMatchSize)
if (Math.Min(currentSeverityInt, cappedSeverityInt) != result.size) if (Math.Min(currentSeverityInt, cappedSeverityInt) != result.size)
{ {
outPoints = null; outPoints = null;
return null; return null;
} }
if (mustMatchBodyType)
{
if(result.bodyType != pawn.story?.bodyType?.defName)
{
outPoints = null;
return null;
}
}
if (mustMatchRace)
{
if (result.raceName != pawn.def.defName)
{
outPoints = null;
return null;
}
}
if (result.pathWithSizeIndex == null) if (result.pathWithSizeIndex == null)
{ {
@ -471,7 +584,7 @@ namespace SizedApparel
public void ResetTransform() public void ResetTransform()
{ {
this.position = Vector2.zero; this.position = Vector2.zero;
this.scale = Vector2.one; this.scale = 1f;
this.rotation = 0; this.rotation = 0;
} }
@ -512,48 +625,125 @@ namespace SizedApparel
{ {
if (!isVisible) if (!isVisible)
return; return;
if (scale == Vector2.zero) if (scale == 0f)
return; //Don't draw if scale is zero return; //Don't draw if scale is zero
if (pawn == null) if (pawn == null)
return; return;
if (mustHaveBone && bone == null)
return;
if (bodyMesh == null)
{
if (SizedApparelSettings.Debug)
Log.Warning("[SizedApparel] DrawBodyParts But Null Body Mesh! : " + pawn.Name);
return;
}
PawnRenderer pawnRenderer = pawn.Drawer.renderer; PawnRenderer pawnRenderer = pawn.Drawer.renderer;
Shader shader = ShaderDatabase.CutoutComplex; Shader shader = shader = ShaderDatabase.CutoutSkinOverlay;
Color drawColor1 = Color.white; Color drawColor1 = Color.white;
Color drawColor2 = Color.white; Color drawColor2 = Color.white;
bool forceWriteZ = true; bool forceWriteZ = true;
if(colorType == SizedApparelBodyPartColorOf.Skin) bool HasFurSkin = false;
//Furskin Check
/*
if (pawn.Drawer.renderer.graphics.furCoveredGraphic != null)
{
HasFurSkin = true;
}*/
if (colorType == ColorType.Skin)
{ {
forceWriteZ = true; forceWriteZ = true;
if (bodyDrawType == RotDrawMode.Fresh) if (bodyDrawType == RotDrawMode.Fresh)
{
if (HasFurSkin)
{ {
}
else
{
shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader; shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader;
if (!ShaderUtility.SupportsMaskTex(shader)) if (!ShaderUtility.SupportsMaskTex(shader))
shader = ShaderDatabase.CutoutSkinOverlay; shader = shader = ShaderDatabase.CutoutSkinOverlay;
drawColor1 = pawn.Drawer.renderer.graphics.nakedGraphic.Color; drawColor1 = pawnRenderer.graphics.nakedGraphic.Color;
drawColor2 = pawn.Drawer.renderer.graphics.nakedGraphic.ColorTwo; drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo;
}
} }
else if (bodyDrawType == RotDrawMode.Rotting) else if (bodyDrawType == RotDrawMode.Rotting)
{ {
shader = pawn.Drawer.renderer.graphics.rottingGraphic.Shader; shader = pawn.Drawer.renderer.graphics.rottingGraphic.Shader;
if (!ShaderUtility.SupportsMaskTex(shader)) if (!ShaderUtility.SupportsMaskTex(shader))
shader = ShaderDatabase.CutoutSkinOverlay; shader = shader = ShaderDatabase.CutoutSkinOverlay;
drawColor1 = pawn.Drawer.renderer.graphics.rottingGraphic.Color; drawColor1 = pawnRenderer.graphics.rottingGraphic.Color;
drawColor2 = pawn.Drawer.renderer.graphics.nakedGraphic.ColorTwo; drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo;
} }
} }
else if (colorType == SizedApparelBodyPartColorOf.Hair) else if (colorType == ColorType.Nipple)
{
forceWriteZ = true;
//Get SkinColor first.
if (bodyDrawType == RotDrawMode.Fresh)
{
if (HasFurSkin)
{
}
else
{
shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader;
if (!ShaderUtility.SupportsMaskTex(shader))
shader = shader = ShaderDatabase.CutoutSkinOverlay;
drawColor1 = pawnRenderer.graphics.nakedGraphic.Color;
drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo;
}
}
else if (bodyDrawType == RotDrawMode.Rotting)
{
shader = pawn.Drawer.renderer.graphics.rottingGraphic.Shader;
if (!ShaderUtility.SupportsMaskTex(shader))
shader = shader = ShaderDatabase.CutoutSkinOverlay;
drawColor1 = pawnRenderer.graphics.rottingGraphic.Color;
drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo;
}
if(apparelRecorderCompCache != null)
{
if(apparelRecorderCompCache.nippleColor != null)
{
drawColor1 = apparelRecorderCompCache.nippleColor.Value; //* drawColor1;
drawColor2 = apparelRecorderCompCache.nippleColor.Value; //* drawColor2; //maybe can be issue
}
else
{
//nipple Color is null
//Ust Default Color for Nipple with SkinColor
drawColor1 = defaultNippleColor * drawColor1;
drawColor2 = defaultNippleColor * drawColor2;
}
}
}
else if (colorType == ColorType.Hair)
{ {
forceWriteZ = false; forceWriteZ = false;
shader = ShaderDatabase.Transparent; shader = ShaderDatabase.Transparent;
if(pawn.story != null) if(pawn.story != null)
drawColor1 = pawn.story.hairColor; drawColor1 = pawn.story.hairColor;
} }
else if (colorType == SizedApparelBodyPartColorOf.Custom) else if (colorType == ColorType.Custom)
{ {
forceWriteZ = true; forceWriteZ = true;
shader = ShaderDatabase.Transparent; shader = ShaderDatabase.Transparent;
@ -562,52 +752,183 @@ namespace SizedApparel
if (customColorTwo != null) if (customColorTwo != null)
drawColor2 = customColorTwo.Value; drawColor2 = customColorTwo.Value;
} }
else if (colorType == SizedApparelBodyPartColorOf.None) else if (colorType == ColorType.None)
{ {
forceWriteZ = false; forceWriteZ = false;
shader = ShaderDatabase.Cutout; shader = ShaderDatabase.Cutout;
} }
if (isOverlay)
{
if (shader == ShaderDatabase.Cutout)
shader = ShaderDatabase.Transparent;
else if (shader == ShaderDatabase.CutoutSkin || shader == ShaderDatabase.CutoutSkinColorOverride)
shader = ShaderDatabase.CutoutSkinOverlay;
else
shader = ShaderDatabase.Transparent;
}
Mesh scaledBodyMesh;
BoneTransform boneTransform = null;
if(bone != null)
{
if (facing == Rot4.South)
{
boneTransform = bone.south;
}
else if (facing == Rot4.North)
{
boneTransform = bone.north;
}
else if (facing == Rot4.East)
{
boneTransform = bone.east;
}
else if (facing == Rot4.West)
{
boneTransform = bone.west;
if (boneTransform == null)
boneTransform = bone.east;
}
}
float drawScale = scale;
float drawRotation = angle;
Vector3 drawPosition = rootLoc;
/*
if (this.pawn.ageTracker.CurLifeStage.bodyDrawOffset != null)
{
drawPosition += this.pawn.ageTracker.CurLifeStage.bodyDrawOffset.Value;
}*/
if (boneTransform != null)
{
//TODO fixed angle for IK?
float width = (bodyMesh.vertices[2].x - bodyMesh.vertices[0].x);
if (centeredTexture)
{
bool westUsingEast = false;
if (facing == Rot4.West && bone.west == null)
westUsingEast = true;
drawRotation = boneTransform.InitialAngle + boneTransform.angleOffset;
//not sure it work correct
Vector3 v = (boneTransform.InitialPosition + boneTransform.positionOffset) * width;
var q = Quaternion.AngleAxis (westUsingEast? -angle : angle, Vector3.up);
v = q * v;
drawPosition = (v) ; // calculate rotated point
//Log.Message(boneTransform.angleOffset.ToString());
if (westUsingEast)
{
//already scaled with "width"?
//its using east as west. so flip position
drawPosition.Scale(new Vector3(-1f,0f,1f));
//drawRotation = boneTransform.InitialAngle - boneTransform.angleOffset;
}
drawPosition += rootLoc;
drawRotation += angle ;
}
else
{
//NotCentered Texture not yet support Rotation System.
//wip
Vector3 v = Vector3.zero;
bool westUsingEast = false;
if (facing == Rot4.West && bone.west == null)
westUsingEast = true;
drawRotation = boneTransform.InitialAngle; // + boneTransform.angleOffset
//not sure it work correct
//Vector3 v = (boneTransform.InitialPosition); //initialpos as custom pivot
//var q = Quaternion.AngleAxis(westUsingEast ? -drawRotation : drawRotation, Vector3.up);
//var q2 = Quaternion.AngleAxis(westUsingEast ? -angle : angle, Vector3.up);
//v = q * v; // calculate final draw position with torso angle
//v = v + boneTransform.InitialPosition + boneTransform.positionOffset;
//v = q2 * v; //NotCentered Texture not yet support Rotation System.
drawPosition = (v) * width;
if (westUsingEast)
{
//already scaled with "width"?
//its using east as west. so flip position
drawPosition.Scale(new Vector3(-1f, 0f, 1f));
//drawRotation = boneTransform.InitialAngle - boneTransform.angleOffset;
}
drawPosition += rootLoc ; // adjust with result
//Log.Message(boneTransform.angleOffset.ToString());
drawRotation += angle;
}
}
/*
if (drawScale != 1f)
{
// scale Only Rimworld Plane Mesh
if(bodyMesh.vertexCount == 4)
{
float width = (bodyMesh.vertices[2].x - bodyMesh.vertices[0].x);
//var meshSet = MeshPool.GetMeshSetForWidth(scale * width);
var meshSet = MeshPool.GetMeshSetForWidth(scale * width);
scaledBodyMesh = meshSet.MeshAt(facing);
}
else
scaledBodyMesh = bodyMesh;
}
else
{
scaledBodyMesh = bodyMesh;
}*/
scaledBodyMesh = bodyMesh;
Quaternion quaternion = Quaternion.AngleAxis(drawRotation, Vector3.up);
Quaternion quaternion = Quaternion.AngleAxis(angle + rotation, Vector3.up);
Vector3 vector = rootLoc;
Rot4 targetRot = facing; Rot4 targetRot = facing;
if (rotOverride != null) if (rotOverride != null)
targetRot = rotOverride.Value; targetRot = rotOverride.Value;
if (targetRot == Rot4.South) if (targetRot == Rot4.South)
{ {
var loc = OffsetFromUVOffset(positionOffsetSouth, bodyMesh); var loc = OffsetFromUVOffset(positionOffsetSouth, scaledBodyMesh);
vector.x += loc.x; drawPosition.x += loc.x;
vector.z += loc.y; drawPosition.z += loc.y;
vector.y += depthOffsetSouth; drawPosition.y += depthOffsetSouth;
} }
else if(targetRot == Rot4.North) else if(targetRot == Rot4.North)
{ {
var loc = OffsetFromUVOffset(positionOffsetNorth, bodyMesh); var loc = OffsetFromUVOffset(positionOffsetNorth, scaledBodyMesh);
vector.x += loc.x; drawPosition.x += loc.x;
vector.z += loc.y; drawPosition.z += loc.y;
vector.y += depthOffsetNorth; drawPosition.y += depthOffsetNorth;
} }
else if (targetRot == Rot4.East) else if (targetRot == Rot4.East)
{ {
var loc = OffsetFromUVOffset(positionOffsetEast, bodyMesh); var loc = OffsetFromUVOffset(positionOffsetEast, scaledBodyMesh);
vector.x += loc.x; drawPosition.x += loc.x;
vector.z += loc.y; drawPosition.z += loc.y;
vector.y += depthOffsetEast; drawPosition.y += depthOffsetEast;
} }
else if (targetRot == Rot4.West) else if (targetRot == Rot4.West)
{ {
var loc = OffsetFromUVOffset(positionOffsetWest, bodyMesh); var loc = OffsetFromUVOffset(positionOffsetWest, scaledBodyMesh);
vector.x += loc.x; drawPosition.x += loc.x;
vector.z += loc.y; drawPosition.z += loc.y;
vector.y += depthOffsetWest; drawPosition.y += depthOffsetWest;
} }
Graphic graphic = null; Graphic graphic = null;
if (SizedApparelUtility.IsHorny(pawn)) if (SizedApparelUtility.IsHorny(pawn))
graphic = bodyPartGraphicHorny; graphic = bodyPartGraphicHorny;
@ -617,18 +938,44 @@ namespace SizedApparel
if (graphic == null) if (graphic == null)
return; return;
Material mat; //ForFurskinOffset
if (!flags.FlagSet(PawnRenderFlags.Cache)&&!isOverlay&& forceWriteZ) if(bodyDrawType == RotDrawMode.Fresh && HasFurSkin && AutoOffsetForFurCoveredBody)
{ {
graphic = graphic.GetColoredVersion(ShaderDatabase.Cutout, drawColor1, drawColor2); //vector.y += 0.009187258f; //in PawnRenderer, it adds 0.009187258f.
mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { graphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) });
GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue
}
graphic = graphic.GetColoredVersion(shader, drawColor1, drawColor2);
vector.y += 0.00001f;
mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { graphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) });
GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow));
//graphic.maskPath does error? need to check
// worn fur body and naked fur body has different offsets... wtf
//TODO Need to Fix
}
Material mat;
//If ForceWriteDepth, draw Cutout mesh for write depth. this is for avoid problem of body addons drawing under other meshes. such as breasts front of body but behind tail.
if (forceWriteZ || (!flags.FlagSet(PawnRenderFlags.Cache) && !isOverlay))// //(!flags.FlagSet(PawnRenderFlags.Cache) && !isOverlay)
{
Graphic Zgraphic = graphic.GetColoredVersion(ShaderDatabase.CutoutComplex, drawColor1, drawColor2); // ShaderDatabase.Cutout
Vector3 drawPositionZ = drawPosition;
drawPositionZ.y = drawPositionZ.y - 0.00001f; //Send Back of body, but it can still write depth. 1.4: send to 0
mat = flags.FlagSet(PawnRenderFlags.Cache) ? Zgraphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { Zgraphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) });
GenDraw.DrawMeshNowOrLater(scaledBodyMesh, drawPositionZ, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue
}
//shader must be mask
graphic = graphic.GetColoredVersion(shader, drawColor1, drawColor2);
if (graphic.maskPath == null)
{
//Test
//graphic.maskPath = texturePath_Red;
}
//drawPosition.y += 0.00001f;
mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { graphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) });
GenDraw.DrawMeshNowOrLater(scaledBodyMesh, drawPosition, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow));
} }
} }
@ -637,23 +984,24 @@ namespace SizedApparel
//TODO: Torso Pose? //TODO: Torso Pose?
public class SizedApparelBodyDef : Def public class BodyDef : Def
{ {
//public List<SizedApparelBodyPartDef> BodyParts; //public List<SizedApparelBodyPartDef> BodyParts;
//defName = raceName ?? could it work? //defName = raceName ?? could it work?
public List<BodyPart> bodyParts; public List<BodyWithBodyType> bodies = new List<BodyWithBodyType>();
//public List<BodyTypeAndOffset> penisOffset;
//public List<BodyTypeAndOffset> vaginaOffset;
//public List<BodyTypeAndOffset> pubicHairOffset;
//public List<BodyTypeAndOffset> udderOffset;
//public List<BodyTypeAndOffset> bellyOffset;
//public List<BodyTypeAndOffset> breastsOffset;
//public List<BodyTypeAndOffset> anusOffset;
/*
public List<BodyTypeAndOffset> penisOffset;
public List<BodyTypeAndOffset> vaginaOffset; //TODO
public List<BodyTypeAndOffset> udderOffset; //TODO
public List<BodyTypeAndOffset> bellyOffset; //TODO
public List<BodyTypeAndOffset> breastsOffset; //TODO
public List<BodyTypeAndOffset> anusOffset; //TODO
*/
} }
public class SizedApparelBody public class SizedApparelBody
@ -667,4 +1015,10 @@ namespace SizedApparel
} }
} }
public class SizedApparelBodyPartOfssetDef : Def
{
//defName IsRaceName
}
} }

View File

@ -0,0 +1,163 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace SizedApparel
{
//This Class is Use for Def BodyParts' Custom Pivot, or Some Special Common Vector Points Per Serverity.
//Not Consider Acture Graphic Textures.
public class SkeletonDef : Def
{
//defName = Pawn's race name (such as "Human")
//public List<BodyPartGraphicBone> graphicBones = new List<BodyPartGraphicBone>();
//Do Not Directly Use it
public List<Skeleton> skeletons = new List<Skeleton>();
public Skeleton CreateSkeleton(string bodyType)
{
for(int i = 0; i< skeletons.Count; i++)
{
if(skeletons[i].bodyType == bodyType)
{
return new Skeleton(skeletons[i]);
}
}
return null;
}
}
public class Skeleton
{
public string bodyType = null; // can be null for animal or etc
public List<Bone> Bones;
//only runtime. Do not Set in Def
public Rot4 BodyFacing; // for flip east-west bones
public Rot4 HeadFacing; //TODO
public Skeleton()
{
}
public Skeleton(Skeleton skeletonToCopy)
{
this.Bones = new List<Bone>();
foreach (var s in skeletonToCopy.Bones)
{
this.Bones.Add(new Bone(s, this));
}
}
public Bone FindBone(string boneName)
{
foreach (var b in this.Bones)
{
if (b.name == boneName)
return b;
}
return null;
}
}
//for deafault bone support?
public class BodyPartBoneDef : Def
{
//DefName is Bone Name To Use.
public Vector3 customPivot = new Vector3(0.5f, 0, 0.5f);
public Vector3 Position = new Vector3(0.5f, 0, 0.5f); // Local Position(UV) from Body
public float Length = 1;
public float Rotation = 0;
public float Scale = 1f; // Default Render Scale.
}
//Body Parts Graphic can be attached to bone position and rotation
public class Bone
{
public string name = null;
public Skeleton parentSkeleton = null;
//public string parentBoneName = null; // ToDo
public bool isHeadBone = false; // TODO
public BoneTransform south;
public BoneTransform north;
public BoneTransform east;
public BoneTransform west; // can be null. then use east
//hiding Graphic parameter will be in that bodygraphic class
public Bone()
{
}
public Bone(Bone boneToCopy, Skeleton parent)
{
this.name = boneToCopy.name;
this.parentSkeleton = parent;
this.isHeadBone = boneToCopy.isHeadBone;
if(boneToCopy.south != null)
this.south = new BoneTransform(boneToCopy.south);
if (boneToCopy.north != null)
this.north = new BoneTransform(boneToCopy.north);
if (boneToCopy.east != null)
this.east = new BoneTransform(boneToCopy.east);
if (boneToCopy.west != null)
this.west = new BoneTransform(boneToCopy.west); // null for use east
}
public void SetAngle(float angle)
{
if(south != null)
south.angleOffset = angle;
if (north != null)
north.angleOffset = angle;
if (east != null)
east.angleOffset = angle;
if (west != null)
west.angleOffset = angle;
}
}
public class BoneTransform
{
//public Vector3 customPivot = new Vector3(0.5f, 0, 0.5f); // used to calculation rotation. the rotating center will be customPivot.
//Custom Pivot Doesn't affect to Draw Position on zero Rotated.
public Vector3 InitialPosition = Vector3.zero; // Local Position(UV) from Body
public float InitialLength = 1;
public float InitialAngle = 0;
public float InitialScale = 1f;
public bool isHeadBone = false; // TODO
//public BodyPartGraphicBone parentBone; //TODO
public Vector3 positionOffset = Vector3.zero;
public float lengthOffset = 0;
public float angleOffset = 0;
public float scaleOffset = 0;
public BoneTransform() { }
public BoneTransform(BoneTransform boneToCopy)
{
//this.parentBoneName = boneToCopy.parentBoneName;
//this.customPivot = boneToCopy.customPivot;
this.InitialPosition = boneToCopy.InitialPosition;
this.InitialLength = boneToCopy.InitialLength;
this.InitialAngle = boneToCopy.InitialAngle;
this.InitialScale = boneToCopy.InitialScale;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using Verse;
using HarmonyLib;
//using AlienRace;
using UnityEngine;
using rjw;
namespace SizedApparel
{
//for avoid first hitch. some day it might need make pre def for fast cache...
public class ApparelTexture
{
public BodyTypeDef bodytype;
public List<string> textures;
public string GetTexturePath(int level, out int result)
{
result = -1;
if (level < 0)
return null;
if (textures.Count > level)
{
result = level;
return textures[level];
}
if (!textures.NullOrEmpty())
{
result = textures.Count - 1;
return textures[result]; //return biggest as supported
}
return null;
}
}
public class SizedApparelDef : Def
{
//def name must be match with apparels DefName
public bool hidingGenitals = false; // pants must be true
public List<ApparelTexture> SizedTextures;
public ApparelTexture GetApparelTexture(BodyTypeDef bodytype)
{
if(SizedTextures != null)
{
return SizedTextures.FirstOrDefault(a => a.bodytype == bodytype);
}
return null;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@ namespace SizedApparel
return; return;
/* /*
var comp = ___pawn.TryGetComp<ApparelRecorderComp>(); var comp = ___pawn.GetComp<ApparelRecorderComp>();
if (comp == null) if (comp == null)
return; return;
@ -72,12 +72,17 @@ namespace SizedApparel
} }
public class PoseDef : Def
{
}
public class SizedApparelPose public class SizedApparelPose
{ {
//public string poseName; use defName as PoseName //public string poseName; use defName as PoseName
public SizedApparelBodyPartOf targetBodyPart = SizedApparelBodyPartOf.Torso; public SizedApparelBodyPartOf targetBodyPart = SizedApparelBodyPartOf.Torso;
public List<BodyTypeAndOffset> headOffset; //public List<BodyTypeAndOffset> headOffset;
} }

View File

@ -13,11 +13,14 @@ namespace SizedApparel
{ {
[HarmonyPatch(typeof(PawnGraphicSet), "CalculateHairMats")] [HarmonyPatch(typeof(PawnGraphicSet), "CalculateHairMats")]
public static class CalculateHairMatsPatch public static class CalculateHairMatsPatch
{
public static void Postfix()
{ {
} }
}
public abstract class PubicHairDef : StyleItemDef public class PubicHairDef : StyleItemDef
{ {
} }

View File

@ -16,7 +16,7 @@ namespace SizedApparel
{ {
public string raceName = null; public string raceName = null;
public bool overrideDef = false; public bool overrideDef = false;
public bool asHumanlike = true; public bool asHuman = false;
public float drawMinAge = -1; //pawn's Biological age. -1 to ignore. public float drawMinAge = -1; //pawn's Biological age. -1 to ignore.
public AlienRaceSetting(string raceName) public AlienRaceSetting(string raceName)
@ -32,7 +32,7 @@ namespace SizedApparel
{ {
Scribe_Values.Look(ref raceName, "raceName", null); Scribe_Values.Look(ref raceName, "raceName", null);
Scribe_Values.Look(ref overrideDef, "overrideDef", false); Scribe_Values.Look(ref overrideDef, "overrideDef", false);
Scribe_Values.Look(ref asHumanlike, "asHumanlike", true); Scribe_Values.Look(ref asHuman, "asHuman", false);
Scribe_Values.Look(ref drawMinAge, "drawMinAge", -1); Scribe_Values.Look(ref drawMinAge, "drawMinAge", -1);
} }
@ -43,10 +43,14 @@ namespace SizedApparel
public class SizedApparelSettings : ModSettings public class SizedApparelSettings : ModSettings
{ {
public static bool Debug = false; public static bool Debug = false;
public static bool DetailLog = false; public static bool DetailLog = false;
public static bool autoClearCacheOnWriteSetting = true; public static bool autoClearCacheOnWriteSetting = true;
public static bool PreCacheOnLoad = true;
public static float PreCacheRandomFactor = 0.5f;
public static bool useBodyTexture = true;//for user who not use rimnudeworld public static bool useBodyTexture = true;//for user who not use rimnudeworld
public static bool useGenderSpecificTexture = true; public static bool useGenderSpecificTexture = true;
@ -60,6 +64,23 @@ namespace SizedApparel
//Apply Target Pawn Category
public static bool ApplyHumanlikes = true; //Always true.
public static bool ApplyAnimals = true;
public static bool ApplyAnimalsPlayerFactionOnly = true; //TODO
public static bool ApplyMechanoid = true;
public static bool ApplyApparelPatchForMale = false; //only ApparelServerityWork.
public static bool ApplyColonists = true;
public static bool ApplySlaves = true;
public static bool ApplyPrisoner = true;
public static bool ApplyNeutralAndAlly = true;
public static bool ApplyHostile = false;
public static bool AnimationPatch = true;
//TODO: Standalone render bodyparts. //TODO: Standalone render bodyparts.
public static bool drawBodyParts = true;//for user who not use rimnudeworld public static bool drawBodyParts = true;//for user who not use rimnudeworld
public static bool drawBreasts = true; public static bool drawBreasts = true;
@ -70,6 +91,7 @@ namespace SizedApparel
public static bool drawAnus = true; public static bool drawAnus = true;
public static bool drawBelly = false;//TODO public static bool drawBelly = false;//TODO
public static bool drawUdder = false;//TODO public static bool drawUdder = false;//TODO
public static bool drawPubicHair = true;
public static bool hideBallOfFuta = false; public static bool hideBallOfFuta = false;
public static bool hidePenisOfMale = false; public static bool hidePenisOfMale = false;
public static bool matchBreastToSupportedApparelSize = true;//for avoiding breasts cliping public static bool matchBreastToSupportedApparelSize = true;//for avoiding breasts cliping
@ -77,7 +99,7 @@ namespace SizedApparel
public static bool useBodyPartsVariation = true; public static bool useBodyPartsVariation = true;
public static bool showBodyPartsVariation = true; public static bool showBodyPartsVariation = true;
public static bool autoJiggleBreasts = true; public static bool breastsPhysics = false;
//RimNudeWorld //RimNudeWorld
public static bool drawSizedApparelBreastsOnlyWorn = false; public static bool drawSizedApparelBreastsOnlyWorn = false;
@ -171,6 +193,13 @@ namespace SizedApparel
//force to use it. this is important thing. //force to use it. this is important thing.
//Scribe_Values.Look(ref useBreastSizeCapForApparels, "useBreastSizeCapForApparels", true); //Scribe_Values.Look(ref useBreastSizeCapForApparels, "useBreastSizeCapForApparels", true);
//Apply Categories.
Scribe_Values.Look(ref ApplyAnimals, "ApplyAnimals", true);
Scribe_Values.Look(ref ApplyHumanlikes, "ApplyHumanlikes", true);
Scribe_Values.Look(ref ApplyMechanoid, "ApplyMechanoid", true);
Scribe_Values.Look(ref AnimationPatch, "AnimationPatch", true);
Scribe_Values.Look(ref useBodyTexture, "useBodyTexture", true); Scribe_Values.Look(ref useBodyTexture, "useBodyTexture", true);
Scribe_Values.Look(ref useGenderSpecificTexture, "useGenderSpecificTexture", true); Scribe_Values.Look(ref useGenderSpecificTexture, "useGenderSpecificTexture", true);
@ -189,6 +218,32 @@ namespace SizedApparel
{ {
alienRaceSettings = new List<AlienRaceSetting>(); alienRaceSettings = new List<AlienRaceSetting>();
} }
SizedApparelMod.CheckAndLoadAlienRaces();
//Initialize Setting for missing Race
foreach (var raceName in SizedApparelMod.alienDefList)
{
AlienRaceSetting raceSetting = null;
foreach (var r in SizedApparelSettings.alienRaceSettings)
{
if (r.raceName == null)
continue;
if (raceName == r.raceName)
{
raceSetting = r;
break;
}
}
if (raceSetting == null)
{
raceSetting = new AlienRaceSetting(raceName);
SizedApparelSettings.alienRaceSettings.Add(raceSetting);
}
}
} }
if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs) if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs)
{ {
@ -218,6 +273,7 @@ namespace SizedApparel
Scribe_Values.Look(ref drawAnus, "drawAnus", true); Scribe_Values.Look(ref drawAnus, "drawAnus", true);
Scribe_Values.Look(ref drawUdder, "drawUdder", true); Scribe_Values.Look(ref drawUdder, "drawUdder", true);
Scribe_Values.Look(ref drawBelly, "drawBelly", true); Scribe_Values.Look(ref drawBelly, "drawBelly", true);
Scribe_Values.Look(ref drawPubicHair, "drawPubicHair", true);
//force to draw all size type //force to draw all size type
@ -241,6 +297,10 @@ namespace SizedApparel
//TODO: Humanlike Setting Per Race //TODO: Humanlike Setting Per Race
//Scribe_Values.Look(ref alienRacesAllowHumanlikTextures, "alienRacesAllowHumanlikTextures"); //Scribe_Values.Look(ref alienRacesAllowHumanlikTextures, "alienRacesAllowHumanlikTextures");
//BreastsPhysics
Scribe_Values.Look(ref breastsPhysics, "breastsPhysics", false);
base.ExposeData(); base.ExposeData();
} }
@ -250,8 +310,9 @@ namespace SizedApparel
{ {
SizedApparelSettings settings; SizedApparelSettings settings;
private static Vector2 ScrollPos = Vector2.zero; private static Vector2 ScrollPosL = Vector2.zero;
private static List<string> alienDefList = new List<string>(); // to load aliens and compare with modsetting private static Vector2 ScrollPosR = Vector2.zero;
public static List<string> alienDefList = new List<string>(); // to load aliens and compare with modsetting
public override void WriteSettings() public override void WriteSettings()
{ {
@ -264,7 +325,7 @@ namespace SizedApparel
{ {
if(alienDefList == null) if(alienDefList == null)
alienDefList = new List<string>(); alienDefList = new List<string>();
if (alienDefList.Count == 0) if (true)//alienDefList.Count == 0
{ {
IEnumerable<ThingDef> HumanlikeRaces; IEnumerable<ThingDef> HumanlikeRaces;
HumanlikeRaces = DefDatabase<ThingDef>.AllDefs.Where(b => b.race?.Humanlike == true); HumanlikeRaces = DefDatabase<ThingDef>.AllDefs.Where(b => b.race?.Humanlike == true);
@ -280,19 +341,27 @@ namespace SizedApparel
public static void ClearCache(bool clearPawnGraphicSet = true) public static void ClearCache(bool clearPawnGraphicSet = true)
{ {
SizedApparelsDatabase.ClearAll(); SizedApparelsDatabase.ClearAll();
if (Find.CurrentMap != null) if (Find.CurrentMap != null)
{ {
foreach (Pawn pawn in Find.CurrentMap.mapPawns.AllPawns) foreach (Pawn pawn in Find.CurrentMap.mapPawns.AllPawns)
{ {
if (pawn == null) if (pawn == null)
continue; continue;
var comp = pawn.TryGetComp<ApparelRecorderComp>(); var comp = pawn.GetComp<ApparelRecorderComp>();
if (comp != null) if (comp != null)
comp.SetDirty(clearPawnGraphicSet); {
comp.UpdateRaceSettingData();
comp.SetDirty(clearPawnGraphicSet,true,true,true);
}
} }
} }
} }
public SizedApparelMod(ModContentPack content) : base(content) public SizedApparelMod(ModContentPack content) : base(content)
{ {
this.settings = GetSettings<SizedApparelSettings>(); this.settings = GetSettings<SizedApparelSettings>();
@ -303,7 +372,7 @@ namespace SizedApparel
const float alienRaceSettingHeight = 120; const float alienRaceSettingHeight = 120;
CheckAndLoadAlienRaces(); //CheckAndLoadAlienRaces();
Listing_Standard listingStandard = new Listing_Standard(); Listing_Standard listingStandard = new Listing_Standard();
//Rect rect = new Rect(0f, 0f, inRect.width, 950); //Rect rect = new Rect(0f, 0f, inRect.width, 950);
//Rect rect = inRect.ExpandedBy(0.9f); //Rect rect = inRect.ExpandedBy(0.9f);
@ -313,8 +382,8 @@ namespace SizedApparel
//leftRect = leftRect.ContractedBy(10f); //leftRect = leftRect.ContractedBy(10f);
rightRect = rightRect.ContractedBy(10f); rightRect = rightRect.ContractedBy(10f);
Rect scrollRect = new Rect(0, 0, leftRect.width - 30f, Math.Max(leftRect.height + (float)alienDefList.Count* alienRaceSettingHeight, 1f)); Rect scrollRect = new Rect(0, 0, leftRect.width - 30f, Math.Max(leftRect.height + (float)alienDefList.Count* alienRaceSettingHeight, 1f));
Widgets.BeginScrollView(leftRect, ref ScrollPos, scrollRect, true); Widgets.BeginScrollView(leftRect, ref ScrollPosL, scrollRect, true);
leftRect = new Rect(leftRect.x, leftRect.x, leftRect.width - 30f, leftRect.height + Math.Max((float)alienDefList.Count * alienRaceSettingHeight, 1f)); leftRect = new Rect(leftRect.x, leftRect.y, leftRect.width - 30f, leftRect.height + Math.Max((float)alienDefList.Count * alienRaceSettingHeight, 1f) + 250f);
listingStandard.Begin(leftRect); listingStandard.Begin(leftRect);
listingStandard.maxOneColumn = true; listingStandard.maxOneColumn = true;
@ -333,13 +402,21 @@ namespace SizedApparel
{ {
ClearCache(); ClearCache();
} }
if (listingStandard.ButtonTextLabeled("RandomPreCache", "15 sec ~ 2 min"))
{
SizedApparelsDatabase.RandomPreCacheForApparels();
SizedApparelsDatabase.RandomPreCacheForBodyParts();
}
} }
listingStandard.Gap(); listingStandard.Gap();
listingStandard.GapLine();
listingStandard.Gap(8);
listingStandard.GapLine(5f);
/* /*
listingStandard.Label("Optimization",-1,""); listingStandard.Label("Optimization",-1,"");
//listingStandard.CheckboxLabeled("Debug Log", ref SizedApparelSettings.Debug, "Debug logs.\nDefault: false"); //listingStandard.CheckboxLabeled("Debug Log", ref SizedApparelSettings.Debug, "Debug logs.\nDefault: false");
@ -361,10 +438,8 @@ namespace SizedApparel
//} //}
listingStandard.Gap(8); listingStandard.Gap(8);
listingStandard.Label("Other Mod Compatibility"); listingStandard.Label("Other Mod Compatibility");
listingStandard.Gap(8); listingStandard.Gap(8);
listingStandard.GapLine(5f); listingStandard.CheckboxLabeled(" Force ignore unsupported apparel", ref SizedApparelSettings.ForcedSupportApparel, "It may have clipping issue from unsupported parts.\nDefault: false");
listingStandard.CheckboxLabeled(" Forced compatibility of unsupported apparel", ref SizedApparelSettings.ForcedSupportApparel, "It may have clipping issue.\nDefault: false");
/* /*
@ -403,9 +478,21 @@ namespace SizedApparel
} }
else else
{ {
//RimJobWorld is Actived
listingStandard.Label(" RimJobWorld is Actived ", -1, ""); listingStandard.Label(" RimJobWorld is Actived ", -1, "");
if (SizedApparelPatch.MenstruationActive)
{
listingStandard.Label(" RJW Menstuation is Active ", -1, "");
}
else
{
listingStandard.Label(" RJW Menstuation is Not Active", -1, "");
} }
}
listingStandard.GapLine(1);
listingStandard.Gap(12); listingStandard.Gap(12);
listingStandard.Label("AlienRace Compatibility (wip)", -1, ""); listingStandard.Label("AlienRace Compatibility (wip)", -1, "");
@ -446,25 +533,8 @@ namespace SizedApparel
listingStandard.Label(" AlienRace is not Actived ", -1, ""); listingStandard.Label(" AlienRace is not Actived ", -1, "");
} }
//Rect outRect = new Rect(0f, 35f, rect.width, rect.height - 35f); if (alienDefList.NullOrEmpty())
/* CheckAndLoadAlienRaces();
const float alienSettingHeight = 80;
Rect outRect = listingStandard.GetRect(listingStandard.CurHeight);
outRect = new Rect(outRect.x, outRect.y, outRect.width, alienSettingHeight);
Rect viewRect = new Rect(0, 0, outRect.width - 16f, 100 );//alienDefList.Count * 30f
Widgets.BeginScrollView(outRect, ref ScrollPos, viewRect, true);
Widgets.Label(new Rect(0f, 0f, 30f, 10f), "hello");
Widgets.Label(new Rect(0f, 0f, 30f, 10f), "world");
*/
//Log.Message(alienDefList.Count.ToString());
//float h = alienDefList.Count <= 1 ? alienRaceSettingHeight : alienRaceSettingHeight * 1.8f;
//Rect rect = Race_ListingStandard.GetRect(h);
//rect.x = 0;
//rect.y = 0;
//Rect ScrollViewRect = new Rect(0, 0, rect.width - 16f, alienDefList.Count * alienRaceSettingHeight);
//Widgets.BeginScrollView(rect, ref ScrollPos, ScrollViewRect, true);
float h = alienDefList.Count * alienRaceSettingHeight; float h = alienDefList.Count * alienRaceSettingHeight;
Listing_Standard Race_ListingStandard = listingStandard.BeginSection(h); Listing_Standard Race_ListingStandard = listingStandard.BeginSection(h);
@ -489,19 +559,21 @@ namespace SizedApparel
SizedApparelSettings.alienRaceSettings.Add(raceSetting); SizedApparelSettings.alienRaceSettings.Add(raceSetting);
} }
Race_ListingStandard.CheckboxLabeled("If Unsupported, Use Humanlike", ref raceSetting.asHumanlike, "This Race will use Humanlike if it doesn't have own textures. useful for race that Unsupported but simillar to human"); if(raceName != "Human")
Race_ListingStandard.CheckboxLabeled("If Unsupported, As Human race", ref raceSetting.asHuman, "This Race will use Human race if it doesn't have own textures. useful for race that Unsupported but simillar to human");
Race_ListingStandard.Label((raceSetting.drawMinAge <= 100 ? "" : "[overdrive]") + "SA BodyPart Draw Min Age: " + raceSetting.drawMinAge.ToString(), -1, "Lower than this age will not use Sized Apparel. Useful for BnC. -1 for disable"); Race_ListingStandard.Label((raceSetting.drawMinAge <= 100 ? "" : "[overdrive]") + "SA BodyPart Draw Min Age: " + raceSetting.drawMinAge.ToString(), -1, "Lower than this age will not use Sized Apparel. Useful for BnC. -1 for disable");
raceSetting.drawMinAge = Race_ListingStandard.Slider(raceSetting.drawMinAge, raceSetting.drawMinAge <= 100 ? -1: 100, raceSetting.drawMinAge >= 100 ? 1000 : 100); raceSetting.drawMinAge = Mathf.Round(Race_ListingStandard.Slider(raceSetting.drawMinAge, raceSetting.drawMinAge <= 100 ? -1: 100, raceSetting.drawMinAge >= 100 ? 1000 : 100));
Race_ListingStandard.Gap(); Race_ListingStandard.Gap();
} }
listingStandard.EndSection(Race_ListingStandard); listingStandard.EndSection(Race_ListingStandard);
Widgets.EndScrollView(); Widgets.EndScrollView();
//listingStandard.Gap(alienSettingHeight); //listingStandard.Gap(alienSettingHeight);
listingStandard.Gap(8);
listingStandard.GapLine(4f); listingStandard.GapLine(4f);
listingStandard.Gap(16); listingStandard.Gap(8);
listingStandard.Gap(8);
listingStandard.Label("RimNudeWorld Compatibility (WIP)", -1, ""); listingStandard.Label("RimNudeWorld Compatibility (WIP)", -1, "");
//listingStandard.CheckboxLabeled(" Don't Replace Body Texture On Nude", ref SizedApparelSettings.DontReplaceBodyTextureOnNude, "Only Replace BodyTexture On Not Nude. Trigers are Torso And Chests.\nDefault: False"); //listingStandard.CheckboxLabeled(" Don't Replace Body Texture On Nude", ref SizedApparelSettings.DontReplaceBodyTextureOnNude, "Only Replace BodyTexture On Not Nude. Trigers are Torso And Chests.\nDefault: False");
@ -520,6 +592,7 @@ namespace SizedApparel
SizedApparelSettings.drawVagina = false; SizedApparelSettings.drawVagina = false;
SizedApparelSettings.drawAnus = false; SizedApparelSettings.drawAnus = false;
SizedApparelSettings.drawBelly = false; SizedApparelSettings.drawBelly = false;
SizedApparelSettings.drawPubicHair = false;
} }
@ -548,38 +621,77 @@ namespace SizedApparel
SizedApparelSettings.drawVagina = true; SizedApparelSettings.drawVagina = true;
SizedApparelSettings.drawAnus = true; SizedApparelSettings.drawAnus = true;
SizedApparelSettings.drawBelly = true; SizedApparelSettings.drawBelly = true;
SizedApparelSettings.drawPubicHair = true;
} }
} }
listingStandard.Gap(8);
listingStandard.GapLine(5f);
if (SizedApparelPatch.RimworldAnimationActive)
{
listingStandard.Label("RimworldAnimation (rjwAnimation) is Actived ", -1, "");
listingStandard.CheckboxLabeled(" Animated SizedApparel BodyParts (wip)", ref SizedApparelSettings.AnimationPatch, "this option may animated breasts jiggle during animation.\n but not copatable with rimnudeworld.\ndefault: true");
}
else
{
listingStandard.Label("RimworldAnimation (rjwAnimation) is not Actived ", -1, "");
}
listingStandard.End(); listingStandard.End();
////RightRect
scrollRect = new Rect(0, 0, rightRect.width - 30f, Math.Max(rightRect.height + 100f, 1f));
Widgets.BeginScrollView(rightRect, ref ScrollPosR, scrollRect, true);
rightRect = new Rect(0, 0, rightRect.width - 30f, rightRect.height + 100f + 250f);
listingStandard.maxOneColumn = true;
listingStandard.Begin(rightRect); listingStandard.Begin(rightRect);
listingStandard.Label("SizedApparel System Apply (apparel and body parts)");
listingStandard.CheckboxLabeled(" Apply Humanlikes", ref SizedApparelSettings.ApplyHumanlikes, "Try to Apply SizedApparel to Humanlikes if The textures are valid.\nDefault: true");
listingStandard.CheckboxLabeled(" Apply Animals", ref SizedApparelSettings.ApplyAnimals, "Try to Apply SizedApparel to Animals if The textures are valid.\nDefault: false");
//TODO
/*
if (SizedApparelSettings.ApplyAnimals)
listingStandard.CheckboxLabeled(" Apply Player Faction Animals Only", ref SizedApparelSettings.ApplyAnimalsPlayerFactionOnly, "Default: true");
*/
listingStandard.CheckboxLabeled(" Apply Mechanoid", ref SizedApparelSettings.ApplyMechanoid, "Try to Apply SizedApparel to Mech if The textures are valid.\nDefault: true");
listingStandard.GapLine(5f);
listingStandard.Label("Apparel Patch (Breasts Sized Apparel)");
listingStandard.CheckboxLabeled(" Apply Apparel Patch for Male", ref SizedApparelSettings.ApplyApparelPatchForMale, "It Skips breasts size test for male. Do you need man with breasts...? may be not.\nDefault: false");
listingStandard.GapLine(5f);
listingStandard.Label("If you changed the option, try change apparels or reload save", -1); listingStandard.Label("If you changed the option, try change apparels or reload save", -1);
listingStandard.Label("Body Part Render Option (wip)",-1,"standalone BodyPart Render System from this mod. It's for user who don't use RimNudeWorld\nIf you use RimNudeWorld, you should turn off this."); listingStandard.Label("Body Part Render Option (wip)",-1,"standalone BodyPart Render System from this mod. It's for user who don't use RimNudeWorld\nIf you use RimNudeWorld, you should turn off this.");
listingStandard.CheckboxLabeled("Use Gender Specific Textures.", ref SizedApparelSettings.useGenderSpecificTexture,"Use Gender Specific texture for body and apparel if it's valid. \nDefault: true"); listingStandard.CheckboxLabeled("Use Gender Specific Textures.", ref SizedApparelSettings.useGenderSpecificTexture,"Use Gender Specific texture for body and apparel if it's valid. \nDefault: true");
listingStandard.GapLine(1); listingStandard.GapLine(5);
listingStandard.CheckboxLabeled("Draw Body Parts", ref SizedApparelSettings.drawBodyParts, "Draw Breasts..etc. when the pawn is wearing supported apparels. \nDefault: true"); listingStandard.CheckboxLabeled("Draw Body Parts", ref SizedApparelSettings.drawBodyParts, "Draw Breasts..etc. when the pawn is wearing supported apparels. \nDefault: true");
if (SizedApparelSettings.drawBodyParts) if (SizedApparelSettings.drawBodyParts)
{ {
listingStandard.CheckboxLabeled(" Use (Sized Apparel) Body Texture", ref SizedApparelSettings.useBodyTexture, "change pawn's body texture when the pawn is wearing supported apparels. Recommanded\nDefault: true"); listingStandard.CheckboxLabeled(" Use (Sized Apparel) Base Body Texture", ref SizedApparelSettings.useBodyTexture, "change pawn's body texture when the pawn is wearing supported apparels. Recommanded\nDefault: true");
//listingStandard.CheckboxLabeled(" Draw Muscle Overlay (wip)", ref SizedApparelSettings.drawMuscleOverlay, "\nDisable this option when you use RimNudeWorld");
listingStandard.CheckboxLabeled(" Draw Muscle Overlay (wip)", ref SizedApparelSettings.drawMuscleOverlay, "\nDisable this option when you use RimNudeWorld");
listingStandard.CheckboxLabeled(" Draw Breasts", ref SizedApparelSettings.drawBreasts, "this option is why this mod exist.\nDefault: true"); listingStandard.CheckboxLabeled(" Draw Breasts", ref SizedApparelSettings.drawBreasts, "this option is why this mod exist.\nDefault: true");
if (SizedApparelSettings.drawBreasts) if (SizedApparelSettings.drawBreasts)
{ {
listingStandard.CheckboxLabeled(" Match Breasts size to supported apparels",ref SizedApparelSettings.matchBreastToSupportedApparelSize, "to avoid breasts clipping(when breasts are bigger), you need this option.\nDefault: true"); listingStandard.CheckboxLabeled(" Match Breasts size to supported apparels",ref SizedApparelSettings.matchBreastToSupportedApparelSize, "to avoid breasts clipping(when breasts are bigger), you need this option.\nDefault: true");
listingStandard.CheckboxLabeled(" draw Breasts on worn pawn only (RimNudeWorld)", ref SizedApparelSettings.drawSizedApparelBreastsOnlyWorn, "when the pawn is nude, the breasts graphic for sized apparel will be hidden. \nDefault: false" ); listingStandard.CheckboxLabeled(" draw Breasts on worn pawn only (RimNudeWorld)", ref SizedApparelSettings.drawSizedApparelBreastsOnlyWorn, "when the pawn is nude, the breasts graphic for sized apparel will be hidden. \nDefault: false" );
listingStandard.CheckboxLabeled(" (Wip) Breasts Physics", ref SizedApparelSettings.breastsPhysics, "Breasts can be jiggled (for now. it works when nude only). It may be heavy for performance. \n Won't work with RimNudeWorld Breasts Rendering. \ndefault = false");
} }
listingStandard.CheckboxLabeled(" Draw Penis", ref SizedApparelSettings.drawPenis,"Disable this option when you use RimNudeWorld"); listingStandard.CheckboxLabeled(" Draw Penis", ref SizedApparelSettings.drawPenis,"Disable this option when you use RimNudeWorld");
listingStandard.CheckboxLabeled(" Draw Vagina", ref SizedApparelSettings.drawVagina, "Disable this option when you use RimNudeWorld"); listingStandard.CheckboxLabeled(" Draw Vagina", ref SizedApparelSettings.drawVagina, "Disable this option when you use RimNudeWorld");
listingStandard.CheckboxLabeled(" Draw Anus", ref SizedApparelSettings.drawAnus, "Disable this option when you use RimNudeWorld"); listingStandard.CheckboxLabeled(" Draw Anus", ref SizedApparelSettings.drawAnus, "Disable this option when you use RimNudeWorld");
listingStandard.CheckboxLabeled(" Draw Belly Buldge", ref SizedApparelSettings.drawBelly, "Disable this option when you use RimNudeWorld"); listingStandard.CheckboxLabeled(" Draw Belly Buldge", ref SizedApparelSettings.drawBelly, "Disable this option when you use RimNudeWorld");
listingStandard.CheckboxLabeled(" Draw Pubic Hair", ref SizedApparelSettings.drawPubicHair, "Disable this option when you use RimNudeWorld");
listingStandard.CheckboxLabeled(" Hide Balls of Futa", ref SizedApparelSettings.hideBallOfFuta, "Hide Balls from penis of Futa.\nDefault: false"); listingStandard.CheckboxLabeled(" Hide Balls of Futa", ref SizedApparelSettings.hideBallOfFuta, "Hide Balls from penis of Futa.\nDefault: false");
listingStandard.CheckboxLabeled(" Hide Penis of Man(Not Work yet)", ref SizedApparelSettings.hidePenisOfMale, "this option is for someone who really hate to see male's dick around.\nDefault: false"); listingStandard.CheckboxLabeled(" Hide Penis of Man(Not Work yet)", ref SizedApparelSettings.hidePenisOfMale, "this option is for someone who really hate to see male's dick around.\nDefault: false");
@ -614,6 +726,7 @@ namespace SizedApparel
listingStandard.CheckboxLabeled(" use Colossal", ref SizedApparelSettings.useColossal, "use Colossal breasts Sized Apparel.\nDefault: true"); listingStandard.CheckboxLabeled(" use Colossal", ref SizedApparelSettings.useColossal, "use Colossal breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Titanic", ref SizedApparelSettings.useTitanic, "use Titanic breasts Sized Apparel.\nDefault: true"); listingStandard.CheckboxLabeled(" use Titanic", ref SizedApparelSettings.useTitanic, "use Titanic breasts Sized Apparel.\nDefault: true");
*/ */
Widgets.EndScrollView();
listingStandard.End(); listingStandard.End();
//listingStandard.EndScrollView(ref rect); //listingStandard.EndScrollView(ref rect);

View File

@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using RimWorld; using RimWorld;
using Verse; using Verse;
using Verse.Sound;
using HarmonyLib; using HarmonyLib;
using UnityEngine; using UnityEngine;
using rjw; using rjw;
@ -13,18 +14,37 @@ using System.Reflection.Emit;
namespace SizedApparel namespace SizedApparel
{ {
//TODO...?
//[HarmonyPatch(typeof(Dialog_StylingStation), "DrawTabs")] [HarmonyPatch(typeof(Dialog_StylingStation), "DrawTabs")]
public class SizedApparelStyleStationDrawTabsPatch public class SizedApparelStyleStationDrawTabsPatch
{ {
public static void Postfix(Rect rect, ref Vector2 ___hairScrollPosition, Dialog_StylingStation __instance, List<TabRecord> ___tabs, Dialog_StylingStation.StylingTab ___curTab, float ___viewRectHeight, List<StyleItemDef> ___tmpStyleItems, bool ___devEditMode, Pawn ___pawn) public static void Postfix(Rect rect, ref Vector2 ___hairScrollPosition, Dialog_StylingStation __instance, List<TabRecord> ___tabs, Dialog_StylingStation.StylingTab ___curTab, float ___viewRectHeight, ref List<StyleItemDef> ___tmpStyleItems, bool ___devEditMode, Pawn ___pawn, Color ___desiredHairColor)
{ {
if (!SizedApparelSettings.drawPubicHair)
return;
//Widgets.DrawMenuSection(rect);
//TabDrawer.DrawTabs<TabRecord>(rect, ___tabs, 200f);
//rect = rect.ContractedBy(18f);
switch (___curTab) switch (___curTab)
{ {
case (Dialog_StylingStation.StylingTab)24: case (Dialog_StylingStation.StylingTab)24:
//Draw PubicHair Tab Code here! //Draw PubicHair Tab Code here!
//rect.yMax -= ___colorsHeight;
DrawStylingTypePubicHair(ref __instance, ref ___viewRectHeight, ref ___tmpStyleItems, ___devEditMode, ___pawn, ___desiredHairColor, rect, ref ___hairScrollPosition, delegate (Rect r, PubicHairDef h)
{
GUI.color = ___desiredHairColor;
Widgets.DefIcon(r, h, null, 1.25f, null, false, null);
//Widgets.DrawTextureFitted(r, h.Icon, 1.25f, null);
GUI.color = Color.white;
}, delegate (PubicHairDef h)
{
___pawn.GetComp<ApparelRecorderComp>().pubicHairDef = h;
//___pawn.story.hairDef = h;
}, (StyleItemDef h) => ___pawn.GetComp<ApparelRecorderComp>().pubicHairDef == h, (StyleItemDef h) => ___pawn.GetComp<ApparelRecorderComp>().initialPubicHairDef == h, null, false);
return; return;
default: default:
@ -32,13 +52,162 @@ namespace SizedApparel
} }
} }
static void DrawStylingTypePubicHair(Dialog_StylingStation dialog_StylingStation, Rect rect) //Some Copy Code from Rimnudeworld
//maybe Some Var has to be ref
static void DrawStylingTypePubicHair(ref Dialog_StylingStation dialog_StylingStation, ref float viewRectHeight, ref List<StyleItemDef> tmpStyleItems, bool devEditMode, Pawn pawn, Color desiredHairColor, Rect rect, ref Vector2 scrollPosition, Action<Rect, PubicHairDef> drawAction, Action<PubicHairDef> selectAction, Func<StyleItemDef, bool> hasStyleItem, Func<StyleItemDef, bool> hadStyleItem, Func<StyleItemDef, bool> extraValidator = null, bool doColors = false)
{ {
//Color desiredHairColor = AccessTools.FieldRefAccess<Dialog_StylingStation, Color>(dialog_StylingStation, "desiredHairColor");
int total_pubes_count = 0;
total_pubes_count = DefDatabase<PubicHairDef>.AllDefs.Count();
//need child patch?
if (total_pubes_count <= 0)
{
Widgets.NoneLabelCenteredVertically(rect, "(" + "NoneUsableForPawn".Translate(pawn.Named("PAWN")) + ")");
return;
} }
ApparelRecorderComp comp = pawn.GetComp<ApparelRecorderComp>();
Rect viewRect = new Rect(rect.x, rect.y, rect.width - 16f, viewRectHeight);
int num = Mathf.FloorToInt(viewRect.width / 60f) - 1;
float num2 = (viewRect.width - (float)num * 60f - (float)(num - 1) * 10f) / 2f;
int num3 = 0;
int num4 = 0;
int num5 = 0;
tmpStyleItems.Clear();
/*
tmpStyleItems.AddRange(from x in DefDatabase<PubicHairDef>.AllDefs
where (devEditMode || PawnStyleItemChooser.WantsToUseStyle(pawn, x, null) || hadStyleItem(x)) && (extraValidator == null || extraValidator(x))
select x);*/
tmpStyleItems.AddRange(DefDatabase<PubicHairDef>.AllDefs);// just add All Pubic Hair def.
tmpStyleItems.SortBy((StyleItemDef x) => -PawnStyleItemChooser.StyleItemChoiceLikelihoodFor(x, pawn));
if (tmpStyleItems.NullOrEmpty<StyleItemDef>())
{
Widgets.NoneLabelCenteredVertically(rect, "(" + "NoneUsableForPawn".Translate(pawn.Named("PAWN")) + ")");
}
else
{
Widgets.BeginScrollView(rect, ref scrollPosition, viewRect, true);
foreach (StyleItemDef styleItemDef in tmpStyleItems)
{
if (num5 >= num - 1)
{
num5 = 0;
num4++;
}
else if (num3 > 0)
{
num5++;
}
Rect rect2 = new Rect(rect.x + num2 + (float)num5 * 60f + (float)num5 * 10f, rect.y + (float)num4 * 60f + (float)num4 * 10f, 60f, 60f);
Widgets.DrawHighlight(rect2);
if (Mouse.IsOver(rect2))
{
Widgets.DrawHighlight(rect2);
TooltipHandler.TipRegion(rect2, styleItemDef.LabelCap);
}
if (drawAction != null)
{
drawAction(rect2, styleItemDef as PubicHairDef);
}
if (hasStyleItem(styleItemDef))
{
Widgets.DrawBox(rect2, 2, null);
}
if (Widgets.ButtonInvisible(rect2, true))
{
if (selectAction != null)
{
selectAction(styleItemDef as PubicHairDef);
}
SoundDefOf.Tick_High.PlayOneShotOnCamera(null);
pawn.Drawer.renderer.graphics.SetAllGraphicsDirty();
PortraitsCache.SetDirty(pawn);
}
num3++;
}
if (Event.current.type == EventType.Layout)
{
viewRectHeight = (float)(num4 + 1) * 60f + (float)num4 * 10f + 10f;
}
Widgets.EndScrollView();
}
if (doColors)
{
//dialog_StylingStation.DrawHairColors(new Rect(rect.x, rect.yMax + 10f, rect.width, dialog_StylingStation.colorsHeight));
//Copy From RimnudeWorld
/*
Rect newrect = new Rect(rect.x, rect.yMax - 10f, rect.width, colorsHeight);
Color _desiredHairColor = desiredHairColor;
float numC = newrect.y;
float height;
Widgets.ColorSelector(new Rect(newrect.x, numC, newrect.width, 92f), ref _desiredHairColor, AllHairColors, null, 22, 2);
if (_desiredHairColor != desiredHairColor)
{
var desiredHairColor_ = dialog_StylingStation.GetType().GetField("desiredHairColor", System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Instance);
desiredHairColor_.SetValue(dialog_StylingStation, _desiredHairColor);
}
numC += 60f;
if (desiredHairColor != pawn.story.hairColor && desiredHairColor != pawn.style.nextHairColor)
{
Widgets.ThingIcon(new Rect(newrect.x, numC, Text.LineHeight, Text.LineHeight), ThingDefOf.Dye, null, null, 1.1f, null);
string text = "Required".Translate() + ": 1 " + ThingDefOf.Dye.label;
float x = Text.CalcSize(text).x;
Widgets.Label(new Rect(newrect.x + Text.LineHeight + 4f, numC, x, Text.LineHeight), text);
Rect rect2 = new Rect(newrect.x, numC, x + Text.LineHeight + 8f, Text.LineHeight);
if (Mouse.IsOver(rect2))
{
Widgets.DrawHighlight(rect2);
TooltipHandler.TipRegionByKey(rect2, "TooltipDyeExplanation");
}
numC += Text.LineHeight;
if (pawn.Map.resourceCounter.GetCount(ThingDefOf.Dye) < 1)
{
rect2 = new Rect(newrect.x, numC, newrect.width, Text.LineHeight);
Color color = GUI.color;
GUI.color = ColorLibrary.RedReadable;
Widgets.Label(rect2, "NotEnoughDye".Translate() + " " + "NotEnoughDyeWillRecolorHair".Translate());
GUI.color = color;
numC += rect2.height;
}
}*/
}
}
private static List<Color> allHairColors;
private static List<Color> AllHairColors
{
get
{
if (allHairColors == null)
{
allHairColors = (from ic in DefDatabase<ColorDef>.AllDefsListForReading
select ic.color).ToList<Color>();
allHairColors.SortByColor((Color x) => x);
}
return allHairColors;
}
}
static void AddPubicHairTab(Dialog_StylingStation stylingStation, List<TabRecord> tabs) static void AddPubicHairTab(Dialog_StylingStation stylingStation, List<TabRecord> tabs)
{ {
if (!SizedApparelSettings.drawPubicHair)
return;
var curTabField = AccessTools.Field(typeof(Dialog_StylingStation), "curTab"); var curTabField = AccessTools.Field(typeof(Dialog_StylingStation), "curTab");
tabs.Add(new TabRecord("PubicHair".Translate().CapitalizeFirst(), delegate () tabs.Add(new TabRecord("PubicHair".Translate().CapitalizeFirst(), delegate ()
{ {
@ -98,5 +267,32 @@ namespace SizedApparel
yield break; yield break;
} }
} }
[HarmonyPatch(typeof(Dialog_StylingStation), "Reset")]
public class SizedApparelStyleStationResetPatch
{
public static void Prefix(Pawn ___pawn)
{
ApparelRecorderComp comp = ___pawn.GetComp<ApparelRecorderComp>();
//this.pawn.story.hairDef = this.initialHairDef;
comp.pubicHairDef = comp.initialPubicHairDef;
comp.initialPubicHairDef = null;
}
}
//Patching Constructors
[HarmonyPatch(typeof(Dialog_StylingStation), MethodType.Constructor, new Type[] { typeof(Pawn), typeof(Thing) })]
public class SizedApparelDialogStylingStationPatch
{
public static void Postfix(Pawn pawn)
{
var comp = pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
comp.initialPubicHairDef = comp.pubicHairDef;
}
}
} }

View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace SizedApparel
{
//Consider Graphic and Graphic_Multi(Graphic with Facing such as south)
public class SizedApparelTexturePointDef : Def
{
//Path must be texture file name with path
//Path example: "Things/Pawn/Humanlike/Bodies/Naked_Female_BaseBody"
//Facing Text such as "_south" must not be included.
//Use "/" instead of "\"
public string Path;
public List<BodyPartPoint> SouthBodyPartPoints = new List<BodyPartPoint>();
public List<BodyPartPoint> NorthBodyPartPoints = new List<BodyPartPoint>();
public List<BodyPartPoint> EastBodyPartPoints = new List<BodyPartPoint>();
//can be null. then use EastBodyPartPoints
public List<BodyPartPoint> WestBodyPartPoints = new List<BodyPartPoint>();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SizedApparel</RootNamespace> <RootNamespace>SizedApparel</RootNamespace>
<AssemblyName>SizedApparelforRJW</AssemblyName> <AssemblyName>SizedApparelforRJW</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
@ -18,7 +18,7 @@
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>..\..\1.3\Assemblies\</OutputPath> <OutputPath>..\..\Assemblies\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
@ -28,7 +28,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType> <DebugType>none</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>..\..\1.3\Assemblies\</OutputPath> <OutputPath>..\..\Assemblies\</OutputPath>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
@ -37,23 +37,31 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="0Harmony"> <Reference Include="0Harmony">
<HintPath>..\..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath> <HintPath>..\..\..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="Assembly-CSharp"> <Reference Include="Assembly-CSharp">
<HintPath>..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath> <HintPath>..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="HugsLib"> <Reference Include="HugsLib">
<HintPath>..\..\..\..\..\..\workshop\content\294100\818773962\v1.1\Assemblies\HugsLib.dll</HintPath> <HintPath>..\..\..\..\..\..\..\workshop\content\294100\818773962\v1.3\Assemblies\HugsLib.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="RimNudeWorld"> <Reference Include="RimNudeWorld">
<HintPath>..\..\..\rimnude-unofficial\1.3 Assembly\Assemblies\RimNudeWorld.dll</HintPath> <HintPath>..\..\..\..\rimnude-unofficial\Assembly Folders\1.3 Assembly\Assemblies\RimNudeWorld.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Rimworld-Animations">
<HintPath>..\..\..\..\rimworld-animations\1.3\Assemblies\Rimworld-Animations.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="RJW"> <Reference Include="RJW">
<HintPath>..\..\..\RJW\1.3\Assemblies\RJW.dll</HintPath> <HintPath>..\..\..\..\rjw\1.3\Assemblies\RJW.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="RJW_Menstruation">
<HintPath>..\..\..\..\rjw_menstruation\1.3\Assemblies\RJW_Menstruation.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
@ -62,16 +70,16 @@
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="UnityEngine">
<HintPath>..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.CoreModule"> <Reference Include="UnityEngine.CoreModule">
<HintPath>..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath> <HintPath>..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="UnityEngine.IMGUIModule"> <Reference Include="UnityEngine.IMGUIModule">
<HintPath>..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath> <HintPath>..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.TextRenderingModule">
<HintPath>..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
@ -79,23 +87,29 @@
<Compile Include="AlienRaceSupport.cs" /> <Compile Include="AlienRaceSupport.cs" />
<Compile Include="Graphic_BodyParts.cs" /> <Compile Include="Graphic_BodyParts.cs" />
<Compile Include="Graphic_SizedApparel.cs" /> <Compile Include="Graphic_SizedApparel.cs" />
<Compile Include="Patch-Animation.cs" />
<Compile Include="Patch-Menstruation.cs" />
<Compile Include="Patch-StatueOfColonist.cs" />
<Compile Include="SizedAppareIdeoPatch.cs" /> <Compile Include="SizedAppareIdeoPatch.cs" />
<Compile Include="SizedApparelApparelBuilder.cs" /> <Compile Include="SizedApparelApparelBuilder.cs" />
<Compile Include="SizedApparelBodyPart.cs" /> <Compile Include="SizedApparelBodyPart.cs" />
<Compile Include="SizedApparelBodyPartDef.cs" />
<Compile Include="SizedApparelBodyPartDetail.cs" /> <Compile Include="SizedApparelBodyPartDetail.cs" />
<Compile Include="SizedApparelBodyPartEditor.cs" /> <Compile Include="SizedApparelBodyPartEditor.cs" />
<Compile Include="SizedApparelComp.cs" /> <Compile Include="SizedApparelComp.cs" />
<Compile Include="HarmonyPatches.cs" /> <Compile Include="HarmonyPatches.cs" />
<Compile Include="SizedApparelDubsApparelPatch.cs" /> <Compile Include="SizedApparelDef.cs" />
<Compile Include="Patch-DubsApparelPatch.cs" />
<Compile Include="SizedApparelMain.cs" /> <Compile Include="SizedApparelMain.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SizedApparelPoseSet.cs" /> <Compile Include="SizedApparelPoseSet.cs" />
<Compile Include="SizedApparelPubicHair.cs" /> <Compile Include="SizedApparelPubicHair.cs" />
<Compile Include="SizedApparelRJWPatch.cs" /> <Compile Include="Patch-RimJobWorld.cs" />
<Compile Include="SizedApparelRNWPatch.cs" /> <Compile Include="Patch-RimNudeWorld.cs" />
<Compile Include="SizedApparelsDatabase.cs" /> <Compile Include="SizedApparelsDatabase.cs" />
<Compile Include="SizedApparelSettingcs.cs" /> <Compile Include="SizedApparelSettingcs.cs" />
<Compile Include="SizedApparelStyleStationPatch.cs" /> <Compile Include="SizedApparelStyleStationPatch.cs" />
<Compile Include="SizedApparelTexturePointDef.cs" />
<Compile Include="SizedApparelUtility.cs" /> <Compile Include="SizedApparelUtility.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@ -11,6 +11,27 @@ using rjw;
namespace SizedApparel namespace SizedApparel
{ {
public class BodyTypeAndPath
{
public string BodyType;
public string Path;
}
public class ApparelData
{
public string WornPath;
public List<BodyTypeAndPath> Data;
}
public class PreDefinedApparelDate : Def
{
public string HediffName;
public bool IsBreasts = false;
public List<BodyTypeAndPath> Data;
}
public class PreDefinedBodyPartGraphicDate : Def
{
}
public static class SizedApparelsDatabase public static class SizedApparelsDatabase
{ {
@ -20,6 +41,12 @@ namespace SizedApparel
} }
public static void LoadPreDefinedData()
{
}
public struct SizedApparelDatabaseKey public struct SizedApparelDatabaseKey
{ {
@ -107,18 +134,23 @@ namespace SizedApparel
public bool isUnsupportedHumanlikePath; public bool isUnsupportedHumanlikePath;
public bool isCustomPose; public bool isCustomPose;
public string hediffName; public string hediffName;
public Dictionary<string, BodyPartPoint> points; public string bodyType; // useful for bodypart Graphic (body addons).
public string raceName; // for check is Human or Alien or Alien as Human.
public SizedApparelTexturePointDef points;
public PathAndSize(string path, int index, bool unsupportedHumanlike = false, bool customPose = false, string hediff = null ,Dictionary<string, BodyPartPoint> pointsInput = null) public PathAndSize(string path, int index, bool unsupportedHumanlike = false, bool customPose = false, string hediff = null, string bodytype = null, string raceName = null, SizedApparelTexturePointDef pointsInput = null)
{ {
this.pathWithSizeIndex = path; this.pathWithSizeIndex = path;
this.size = index; this.size = index;
this.isUnsupportedHumanlikePath = unsupportedHumanlike; this.isUnsupportedHumanlikePath = unsupportedHumanlike;
this.isCustomPose = customPose; this.isCustomPose = customPose;
this.hediffName = hediff; this.hediffName = hediff;
this.bodyType = bodytype;
this.points = pointsInput; this.points = pointsInput;
this.raceName = raceName;
} }
} }
private static Dictionary<Pawn, ApparelRecorderComp> ApparelRecordersCache = new Dictionary<Pawn, ApparelRecorderComp>();
private static Dictionary<BodyGraphicKey, Graphic> SizedApparelBodyGraphic = new Dictionary<BodyGraphicKey, Graphic>(); // TODO private static Dictionary<BodyGraphicKey, Graphic> SizedApparelBodyGraphic = new Dictionary<BodyGraphicKey, Graphic>(); // TODO
private static Dictionary<SizedApparelDatabaseKey, PathAndSize> SupportedApparelResultPath = new Dictionary<SizedApparelDatabaseKey, PathAndSize>(new SizedApparelDatabaseKeyComparer()); private static Dictionary<SizedApparelDatabaseKey, PathAndSize> SupportedApparelResultPath = new Dictionary<SizedApparelDatabaseKey, PathAndSize>(new SizedApparelDatabaseKeyComparer());
@ -128,6 +160,14 @@ namespace SizedApparel
//AlienRace AllowHumanlike. Need to Restart or Clear cache to change options //AlienRace AllowHumanlike. Need to Restart or Clear cache to change options
public static ApparelRecorderComp GetApparelCompFast(Pawn pawn)
{
if (ApparelRecordersCache.ContainsKey(pawn))
return ApparelRecordersCache[pawn];
ApparelRecorderComp comp = pawn.GetComp<ApparelRecorderComp>(); // comp can be null
ApparelRecordersCache.Add(pawn, comp);
return comp;
}
public static Dictionary<string, bool> AlienRaceUseHumanlike = new Dictionary<string, bool>(); public static Dictionary<string, bool> AlienRaceUseHumanlike = new Dictionary<string, bool>();
private static void ResetAlienRaceUseHumanlike() private static void ResetAlienRaceUseHumanlike()
@ -143,6 +183,7 @@ namespace SizedApparel
} }
} }
[Obsolete]
public static bool GetAlienRaceUseHumanlike(string raceDef) public static bool GetAlienRaceUseHumanlike(string raceDef)
{ {
if (AlienRaceUseHumanlike.NullOrEmpty()) if (AlienRaceUseHumanlike.NullOrEmpty())
@ -255,7 +296,7 @@ namespace SizedApparel
//Try Find Different Target Size //Try Find Different Target Size
if (flag == true) if (flag == true)
{ {
result = new PathAndSize(graphic.path, indexOut, false, customPose, hediffResult); result = new PathAndSize(graphic.path, indexOut, false, customPose, hediffResult, key.bodyTypeName, key.raceName);
SupportedApparelResultPath.SetOrAdd(key, result); SupportedApparelResultPath.SetOrAdd(key, result);
SupportedApparelOriginalPath.SetOrAdd(result.pathWithSizeIndex, key.pathWithoutSizeIndex); SupportedApparelOriginalPath.SetOrAdd(result.pathWithSizeIndex, key.pathWithoutSizeIndex);
} }
@ -270,27 +311,43 @@ namespace SizedApparel
public static PathAndSize GetSupportedBodyPartPath(BodyPartDatabaseKey key, bool isBreast, string folderName, string defaultHediffName) public static PathAndSize GetSupportedBodyPartPath(BodyPartDatabaseKey key, bool isBreast, string folderName, string defaultHediffName)
{ {
PathAndSize result; PathAndSize result;
if (SupportedBodyPartResultPath.ContainsKey(key)) if (SupportedBodyPartResultPath.ContainsKey(key))
return SupportedBodyPartResultPath.TryGetValue(key); return SupportedBodyPartResultPath.TryGetValue(key);
int currentSize = -1; int currentSize = -1;
string hediffResult; string hediffResult;
Graphic graphic = null; Graphic graphic = null;
//Find Points from result's path
//TODO: Build SizedApparel DataBase separate?
if (key.customPose != null) if (key.customPose != null)
{ {
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName+"/CustomPose/"+key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName+"/CustomPose/"+key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult); result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult, key.bodyTypeName, key.raceName);
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
//SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
return result; return result;
} }
if (key.bodyTypeName != null) if (key.bodyTypeName != null)
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName + "/CustomPose/" + key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName + "/CustomPose/" + key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult); result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult , null, key.raceName);
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
//SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
return result; return result;
} }
@ -298,8 +355,14 @@ namespace SizedApparel
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, false, key.customPose == null ? true : false, hediffResult); //SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
result = new PathAndSize(graphic.path, currentSize, false, key.customPose == null ? true : false, hediffResult , key.bodyTypeName, key.raceName);
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
return result; return result;
} }
@ -307,7 +370,12 @@ namespace SizedApparel
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, null, key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, false, key.customPose == null ? true : false, hediffResult); //SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
result = new PathAndSize(graphic.path, currentSize, false, key.customPose == null ? true : false, hediffResult, null, key.raceName);
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
return result; return result;
} }
@ -315,8 +383,9 @@ namespace SizedApparel
//SizedApparelMod.CheckAndLoadAlienRaces(); //SizedApparelMod.CheckAndLoadAlienRaces();
//HumanLike Search //HumanLike Search
var raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == key.raceName); AlienRaceSetting raceSetting;
if (raceSetting !=null && !raceSetting.asHumanlike) //old: !SizedApparelSettings.UnsupportedRaceToUseHumanlike raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == key.raceName);
if (raceSetting !=null && key.raceName == "Human" || !raceSetting.asHuman) //old: !SizedApparelSettings.UnsupportedRaceToUseHumanlike
{ {
//Cannot find Any result //Cannot find Any result
result = new PathAndSize(null, -1); result = new PathAndSize(null, -1);
@ -326,36 +395,56 @@ namespace SizedApparel
if (key.customPose != null) if (key.customPose != null)
{ {
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName + "/CustomPose/" + key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Humanlike", key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName + "/CustomPose/" + key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Human", key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, true, true, hediffResult); //SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
result = new PathAndSize(graphic.path, currentSize, true, true, hediffResult, key.bodyTypeName);
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
return result; return result;
} }
if (key.bodyTypeName != null) if (key.bodyTypeName != null)
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName + "/CustomPose/" + key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Humanlike", key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName + "/CustomPose/" + key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Human", key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, true, true, hediffResult); //SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
result = new PathAndSize(graphic.path, currentSize, true, true, hediffResult, null);
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
return result; return result;
} }
} }
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Humanlike", key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Human", key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, true, key.customPose == null ? true : false, hediffResult); //SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
result = new PathAndSize(graphic.path, currentSize, true, key.customPose == null ? true : false, hediffResult, key.bodyTypeName, "Human");
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
return result; return result;
} }
if (key.bodyTypeName != null) if (key.bodyTypeName != null)
graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Humanlike", key.variation, key.gender); graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, null, key.hediffName, isBreast, key.targetSize, folderName, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Human", key.variation, key.gender);
if (graphic != null) if (graphic != null)
{ {
result = new PathAndSize(graphic.path, currentSize, true, key.customPose == null ? true : false, hediffResult); //SizedApparelTexturePointDef PointsDef = DefDatabase<SizedApparelTexturePointDef>.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphic.path);
//if (SizedApparelSettings.Debug && PointsDef != null)
//{
// Log.Message("[SizedApparel] : Points Def Found : " + PointsDef.defName);
//}
result = new PathAndSize(graphic.path, currentSize, true, key.customPose == null ? true : false, hediffResult, null, "Human");
SupportedBodyPartResultPath.SetOrAdd(key, result); SupportedBodyPartResultPath.SetOrAdd(key, result);
return result; return result;
} }
@ -368,5 +457,95 @@ namespace SizedApparel
return result; return result;
} }
public static void RandomPreCacheForBodyParts()
{
//variationDef = DefDatabase<SizedApparelBodyPartVariationDef>.AllDefsListForReading;
BodyPartDatabaseKey key;
for (int i = 0; i<11; i++)
{
key = new BodyPartDatabaseKey("Human", "Female", "Breasts", "Breasts", Gender.Female, i);
GetSupportedBodyPartPath(key, true, "Breasts", "Breasts");
key = new BodyPartDatabaseKey("Human", "Thin", "Breasts", "Breasts", Gender.Female, i);
GetSupportedBodyPartPath(key, true, "Breasts", "Breasts");
}
for (int i = 0; i < 6; i++)
{
key = new BodyPartDatabaseKey("Human", "Female", "Vagina", "Vagina", Gender.Female, i);
GetSupportedBodyPartPath(key, false, "Vagina", "Vagina");
key = new BodyPartDatabaseKey("Human", "Thin", "Vagina", "Vagina", Gender.Female, i);
GetSupportedBodyPartPath(key, false, "Vagina", "Vagina");
}
for (int i = 0; i < 6; i++)
{
key = new BodyPartDatabaseKey("Human", "Female", "Anus", "Anus", Gender.Female, i);
GetSupportedBodyPartPath(key, false, "Anus", "Anus");
key = new BodyPartDatabaseKey("Human", "Thin", "Anus", "Anus", Gender.Female, i);
GetSupportedBodyPartPath(key, false, "Anus", "Anus");
key = new BodyPartDatabaseKey("Human", "Male", "Anus", "Anus", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Anus", "Anus");
key = new BodyPartDatabaseKey("Human", "Thin", "Anus", "Anus", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Anus", "Anus");
}
for (int i = 0; i < 6; i++)
{
key = new BodyPartDatabaseKey("Human", "Male", "Penis", "Penis", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
key = new BodyPartDatabaseKey("Human", "Male", "Penis", "Penis/Balls", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
key = new BodyPartDatabaseKey("Human", "Thin", "Penis", "Penis", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
key = new BodyPartDatabaseKey("Human", "Thin", "Penis", "Penis/Balls", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
key = new BodyPartDatabaseKey("Human", "Fat", "Penis", "Penis", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
key = new BodyPartDatabaseKey("Human", "Fat", "Penis", "Penis/Balls", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
key = new BodyPartDatabaseKey("Human", "Hulk", "Penis", "Penis", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
key = new BodyPartDatabaseKey("Human", "Hulk", "Penis", "Penis/Balls", Gender.Male, i);
GetSupportedBodyPartPath(key, false, "Penis", "Penis");
}
}
public static void RandomPreCacheForApparels()
{
//random precache should be useful. so it target female and thin body only.
//don't target male because the male doesn't need breasts textures usually.
List<string> bodyTypes = new List<string>();
bodyTypes.Add("Female");
bodyTypes.Add("Thin");
// DefDatabase<BodyTypeDef>.AllDefsListForReading
foreach (ThingDef thingDef in DefDatabase<ThingDef>.AllDefsListForReading)
{
if (thingDef.IsApparel && !thingDef.apparel.wornGraphicPath.NullOrEmpty())
{
for(int i = 0; i<11; i++)
{
var key = new SizedApparelDatabaseKey(thingDef.apparel.wornGraphicPath, "Human", "Female", Gender.Female, "Breasts", i);
GetSupportedApparelSizedPath(key);
key = new SizedApparelDatabaseKey(thingDef.apparel.wornGraphicPath, "Human", "Thin", Gender.Female, "Breasts", i);
GetSupportedApparelSizedPath(key);
//need Humanlike Cache?
}
}
}
}
} }
} }

View File

@ -1,4 +1,4 @@
// <autogenerated /> // <autogenerated />
using System; using System;
using System.Reflection; using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>AOC</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Alien_Bori</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Alien_Miho</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Rabbie</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Ratkin</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Ratkin_Su</defName>
<bodies>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs>
<SizedApparel.BodyDef>
<defName>Alien_SP</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -0,0 +1,717 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.BodyDef>
<defName>Human</defName>
<bodies>
<li>
<bodyType>Female</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<!-- "isBreasts" is used for step count -->
<!-- rjw private parts and breasts has different step method with serverity. -->
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<!-- Wip -->
<!-- <li> -->
<!-- <partName>Nipples</partName> -->
<!-- <boneName>Breasts</boneName> -->
<!-- <defaultHediffName>Breasts</defaultHediffName> -->
<!-- <bodyPartOf>Breasts</bodyPartOf> -->
<!-- <colorType>Nipple</colorType> -->
<!-- <isBreasts>true</isBreasts> -->
<!-- <mustHaveBone>false</mustHaveBone> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0114</south> -->
<!-- <north>0.0011</north> -->
<!-- <east>0.0114</east> -->
<!-- <west>0.0114</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Thin</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Male</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Hulk</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Fat</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset>
</li>
<li>
<partName>PubicHair</partName>
<boneName>PubicHair</boneName>
<defaultHediffName>Default</defaultHediffName>
<bodyPartOf>PubicHair</bodyPartOf>
<colorType>Hair</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> -->
<depthOffset>
<south>0.0099</south>
<north>0.0099</north>
<east>0.0099</east>
<west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Child</bodyType>
<Addons>
<!-- <li> -->
<!-- <partName>Breasts</partName> -->
<!-- <boneName>Breasts</boneName> -->
<!-- <defaultHediffName>Breasts</defaultHediffName> -->
<!-- <bodyPartOf>Breasts</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>true</isBreasts> -->
<!-- <mustHaveBone>false</mustHaveBone> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0113</south> -->
<!-- <north>0.001</north> -->
<!-- <east>0.0113</east> -->
<!-- <west>0.0113</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Vagina</partName> -->
<!-- <boneName>Vagina</boneName> -->
<!-- <defaultHediffName>Vagina</defaultHediffName> -->
<!-- <bodyPartOf>Vagina</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <mustHaveBone>true</mustHaveBone> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0088</south> -->
<!-- <north>0.0100</north> -->
<!-- <east>0.0088</east> -->
<!-- <west>0.0088</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Anus</partName> -->
<!-- <boneName>Anus</boneName> -->
<!-- <defaultHediffName>Anus</defaultHediffName> -->
<!-- <bodyPartOf>Anus</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0093</south> -->
<!-- <north>0.0105</north> -->
<!-- <east>0.0093</east> -->
<!-- <west>0.0093</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Belly</partName> -->
<!-- <boneName>Belly</boneName> -->
<!-- <defaultHediffName>BellyBulge</defaultHediffName> -->
<!-- <bodyPartOf>Belly</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0098</south> -->
<!-- <north>0.0002</north> -->
<!-- <east>0.0098</east> -->
<!-- <west>0.0098</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Penis</partName> -->
<!-- <boneName>Penis</boneName> -->
<!-- <defaultHediffName>Penis</defaultHediffName> -->
<!-- <bodyPartOf>Penis</bodyPartOf> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0108</south> -->
<!-- <north>0.0025</north> -->
<!-- <east>0.0108</east> -->
<!-- <west>0.0108</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<!-- <li> -->
<!-- <partName>Balls</partName> -->
<!-- <boneName>Balls</boneName> -->
<!-- <defaultHediffName>Penis</defaultHediffName> -->
<!-- <bodyPartOf>Balls</bodyPartOf> -->
<!-- <customPath>Penis/Balls</customPath> -->
<!-- <colorType>Skin</colorType> -->
<!-- <isBreasts>false</isBreasts> -->
<!-- <centeredTexture>true</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0096</south> -->
<!-- <north>0.0085</north> -->
<!-- <east>0.0096</east> -->
<!-- <west>0.0096</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
</Addons>
</li>
</bodies>
</SizedApparel.BodyDef>
</Defs>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- this is Wip Def. Not work yet. -->
<Defs> <Defs>
<SizedApparel.BodyDef> <SizedApparel.BodyDef>
<defName>Human</defName> <defName>Human</defName>
@ -26,6 +25,23 @@
<west>0.0113</west> <west>0.0113</west>
</depthOffset> </depthOffset>
</li> </li>
<!-- Wip -->
<!-- <li> -->
<!-- <partName>Nipples</partName> -->
<!-- <boneName>Breasts</boneName> -->
<!-- <defaultHediffName>Breasts</defaultHediffName> -->
<!-- <bodyPartOf>Breasts</bodyPartOf> -->
<!-- <colorType>Nipple</colorType> -->
<!-- <isBreasts>true</isBreasts> -->
<!-- <mustHaveBone>false</mustHaveBone> -->
<!-- <centeredTexture>false</centeredTexture> -->
<!-- <depthOffset> -->
<!-- <south>0.0114</south> -->
<!-- <north>0.0011</north> -->
<!-- <east>0.0114</east> -->
<!-- <west>0.0114</west> -->
<!-- </depthOffset> -->
<!-- </li> -->
<li> <li>
<partName>Vagina</partName> <partName>Vagina</partName>
<boneName>Vagina</boneName> <boneName>Vagina</boneName>
@ -33,6 +49,7 @@
<bodyPartOf>Vagina</bodyPartOf> <bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType> <colorType>Skin</colorType>
<isBreasts>false</isBreasts> <isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>true</centeredTexture> <centeredTexture>true</centeredTexture>
<!-- TODO? <TexturePaths/> --> <!-- TODO? <TexturePaths/> -->
<depthOffset> <depthOffset>
@ -119,8 +136,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -237,8 +254,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -355,8 +372,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -473,8 +490,8 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>
@ -591,8 +608,106 @@
<depthOffset> <depthOffset>
<south>0.0099</south> <south>0.0099</south>
<north>0.0099</north> <north>0.0099</north>
<east>0.0089</east> <east>0.0099</east>
<west>0.0089</west> <west>0.0099</west>
</depthOffset>
</li>
</Addons>
</li>
<li>
<bodyType>Child</bodyType>
<Addons>
<li>
<partName>Breasts</partName>
<boneName>Breasts</boneName>
<defaultHediffName>Breasts</defaultHediffName>
<bodyPartOf>Breasts</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>true</isBreasts>
<mustHaveBone>false</mustHaveBone>
<centeredTexture>false</centeredTexture>
<depthOffset>
<south>0.0113</south>
<north>0.001</north>
<east>0.0113</east>
<west>0.0113</west>
</depthOffset>
</li>
<li>
<partName>Vagina</partName>
<boneName>Vagina</boneName>
<defaultHediffName>Vagina</defaultHediffName>
<bodyPartOf>Vagina</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<mustHaveBone>true</mustHaveBone>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0088</south>
<north>0.0100</north>
<east>0.0088</east>
<west>0.0088</west>
</depthOffset>
</li>
<li>
<partName>Anus</partName>
<boneName>Anus</boneName>
<defaultHediffName>Anus</defaultHediffName>
<bodyPartOf>Anus</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0093</south>
<north>0.0105</north>
<east>0.0093</east>
<west>0.0093</west>
</depthOffset>
</li>
<li>
<partName>Belly</partName>
<boneName>Belly</boneName>
<defaultHediffName>BellyBulge</defaultHediffName>
<bodyPartOf>Belly</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>false</centeredTexture>
<depthOffset>
<south>0.0098</south>
<north>0.0002</north>
<east>0.0098</east>
<west>0.0098</west>
</depthOffset>
</li>
<li>
<partName>Penis</partName>
<boneName>Penis</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Penis</bodyPartOf>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0108</south>
<north>0.0025</north>
<east>0.0108</east>
<west>0.0108</west>
</depthOffset>
</li>
<li>
<partName>Balls</partName>
<boneName>Balls</boneName>
<defaultHediffName>Penis</defaultHediffName>
<bodyPartOf>Balls</bodyPartOf>
<customPath>Penis/Balls</customPath>
<colorType>Skin</colorType>
<isBreasts>false</isBreasts>
<centeredTexture>true</centeredTexture>
<depthOffset>
<south>0.0096</south>
<north>0.0085</north>
<east>0.0096</east>
<west>0.0096</west>
</depthOffset> </depthOffset>
</li> </li>
</Addons> </Addons>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>AOC</defName>
<skeletons>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Alien_Bori</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Alien_Miho</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.148)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.150)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.006, 0, -0.143)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.129)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.139</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.061, 0, -0.155)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141))</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.121)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.109)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.004, 0, -0.123)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.148)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.150)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.006, 0, -0.143)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.129)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.061, 0, -0.155)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.141)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.004, 0, -0.139)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.004, 0, -0.123))</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.121)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.109)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.004, 0, -0.123)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Rabbie</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Ratkin</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Ratkin_Su</defName>
<skeletons>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Alien_SP</defName>
<skeletons>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -9,11 +9,11 @@
<li> <li>
<name>Vagina</name> <name>Vagina</name>
<south> <south>
<InitialPosition>(-0.004, 0, -0.340)</InitialPosition> <InitialPosition>(-0.002, 0, -0.340)</InitialPosition>
<InitialAngle>0</InitialAngle> <InitialAngle>0</InitialAngle>
</south> </south>
<north> <north>
<InitialPosition>(-0.008, 0, -0.346)</InitialPosition> <InitialPosition>(-0.006, 0, -0.346)</InitialPosition>
<InitialAngle>0</InitialAngle> <InitialAngle>0</InitialAngle>
</north> </north>
<east> <east>
@ -556,6 +556,111 @@
<li> <li>
<bodyType>Child</bodyType> <bodyType>Child</bodyType>
<Bones> <Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.002, 0, -0.209)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.205)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.043, 0, -0.174)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.164)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.084, 0, -0.127)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.166)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.164)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.057, 0, -0.145)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones> </Bones>
</li> </li>
</skeletons> </skeletons>

View File

@ -0,0 +1,668 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<SizedApparel.SkeletonDef>
<defName>Human</defName>
<skeletons>
<li>
<bodyType>Female</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(-0.002, 0, -0.340)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.346)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.238)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.174, 0, 0.254)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.01, 0, -0.338)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.062, 0, -0.221)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.01, 0, -0.338)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.062, 0, -0.221)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.301)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.318)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.059, 0, -0.186)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Thin</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.312)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.006, 0, -0.318)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.006, 0, -0.256)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.260)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.266)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.137, 0, -0.211)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.307)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.305)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.008, 0, -0.248)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.307)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.305)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.007, 0, -0.248)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.281)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.291)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.021, 0, -0.219)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Male</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.311)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.057, 0, -0.258)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.268)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.252)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.113, 0, -0.234)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.301)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.311)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.068, 0, -0.250)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0.0, 0, -0.301)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.0, 0, -0.311)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.066, 0, -0.250)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.275)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.277)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.066, 0, -0.219)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Hulk</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.004, 0, -0.434)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.453)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.020, 0, -0.395)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0.006, 0, -0.383)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.406)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.238, 0, -0.328)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.436)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.0, 0, -0.445)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.029, 0, -0.387)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.436)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.445)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.028, 0, -0.387)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.395)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.027, 0, -0.375)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, -0.424)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Fat</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.002, 0, -0.352)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.359)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.148, 0, -0.352)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.297)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.297)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.238, 0, -0.271)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(0, 0, -0.357)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.363)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.168, 0, -0.348)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(0, 0, -0.357)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.363)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.168, 0, -0.348)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>PubicHair</name>
<south>
<InitialPosition>(0, 0, -0.307)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.320)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.158, 0, -0.338)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
</Bones>
</li>
<li>
<bodyType>Child</bodyType>
<Bones>
<li>
<name>Vagina</name>
<south>
<InitialPosition>(0.002, 0, -0.209)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, -0.205)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.043, 0, -0.174)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Breasts</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Anus</name>
<south>
<InitialPosition>(0, 0, -0.289)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0.002, 0, -0.164)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(-0.084, 0, -0.127)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Penis</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Balls</name>
<south>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(-0.002, 0, -0.195)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0.047, 0, -0.170)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<li>
<name>Belly</name>
<south>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</south>
<north>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</north>
<east>
<InitialPosition>(0, 0, 0)</InitialPosition>
<InitialAngle>0</InitialAngle>
</east>
</li>
<!-- <li> -->
<!-- <name>PubicHair</name> -->
<!-- <south> -->
<!-- <InitialPosition>(0, 0, -0.166)</InitialPosition> -->
<!-- <InitialAngle>0</InitialAngle> -->
<!-- </south> -->
<!-- <north> -->
<!-- <InitialPosition>(-0.002, 0, -0.164)</InitialPosition> -->
<!-- <InitialAngle>0</InitialAngle> -->
<!-- </north> -->
<!-- <east> -->
<!-- <InitialPosition>(0.057, 0, -0.145)</InitialPosition> -->
<!-- <InitialAngle>0</InitialAngle> -->
<!-- </east> -->
<!-- </li> -->
</Bones>
</li>
</skeletons>
</SizedApparel.SkeletonDef>
</Defs>

View File

@ -27,6 +27,25 @@
</value> </value>
</match> </match>
</li> </li>
<li Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel</xpath>
<value>
<tags>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</tags>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags</xpath>
<value>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</value>
</match>
</li>
</operations> </operations>
</match> </match>
</Operation> </Operation>

View File

@ -15,6 +15,7 @@
<value> <value>
<tags> <tags>
<li>SizedApparel_IgnorBreastSize</li> <li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</tags> </tags>
</value> </value>
</nomatch> </nomatch>
@ -22,6 +23,26 @@
<xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags</xpath> <xpath>Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags</xpath>
<value> <value>
<li>SizedApparel_IgnorBreastSize</li> <li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</value>
</match>
</li>
<li Class="PatchOperationConditional">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel</xpath>
<value>
<tags>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</tags>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThingDef[defName = "Apparel_HeavyBandolier"]/apparel/tags</xpath>
<value>
<li>SizedApparel_IgnorBreastSize</li>
<li>SizedApparel_ShowPrivateCrotch</li>
</value> </value>
</match> </match>
</li> </li>

View File

@ -32,6 +32,7 @@ zero112
<li>rim.job.world</li> <li>rim.job.world</li>
<li>shauaputa.rimnudeworld</li> <li>shauaputa.rimnudeworld</li>
<li>c0ffee.rimworld.animations</li> <li>c0ffee.rimworld.animations</li>
<li>tammybee.statueofcolonist</li>
</loadAfter> </loadAfter>
<incompatibleWith> <incompatibleWith>

View File

@ -16,6 +16,7 @@ I'm planning to at least all vanilla apparels will be supported.
[special thanks] [special thanks]
leoinc leoinc
zero112
</description> </description>
<modDependencies> <modDependencies>
<li> <li>

Some files were not shown because too many files have changed in this diff Show More