Compare commits

...

6 Commits

Author SHA1 Message Date
ghostclinic3YTB e47a1fc4f0 Mirror of 1.4.23 from Lovers Lab 2023-04-03 21:48:56 -04:00
ghostclinic3YTB b501ddfb0f Mirror of 1.4.22 from Lovers Lab 2023-04-03 21:48:55 -04:00
ghostclinic3YTB 5d0da3bc88 Mirror of 1.4.18 from Lovers Lab 2023-04-03 21:47:50 -04:00
ghostclinic3YTB ac3b77b5ba Mirror of 1.4.17 from Lovers Lab 2023-04-03 21:47:50 -04:00
ghostclinic3YTB a5ed05c17b Mirror of 1.4.15 from Lovers Lab 2023-04-03 21:47:49 -04:00
ghostclinic3YTB 9a3d9f4185 Mirror of 1.4.7 from Lovers Lab 2023-04-03 21:47:48 -04:00
1863 changed files with 25432 additions and 2494 deletions

398
.gitignore vendored Normal file
View File

@ -0,0 +1,398 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml

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

@ -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

@ -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

@ -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

@ -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

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using Verse;
namespace SizedApparel
{
class AlienRaceSupport
{
}
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SizedApparel
{
//Does it better to optimize?
public class Graphic_BodyParts : Verse.Graphic_Multi
{
public float serverity;
public string bodyPart; // such as breasts, penis
}
}

View File

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

View File

@ -0,0 +1,321 @@
using HarmonyLib;
using RimWorld;
//using Rimworld_Animations;
//using AlienRace;
using rjw;
using System;
using System.Linq;
using Verse;
namespace SizedApparel
{
[StaticConstructorOnStartup]
public class SizedApparelPatch
{
public static bool alienRaceActive = false;
public static bool SJWActive = false;
public static bool RJWActive = false;
public static bool DubsApparelTweaksActive = false;
public static bool rimNudeWorldActive = false;
public static bool OTYNudeActive = 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()
{
//check SJW
if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "SafeJobWorld"))
{
SJWActive = true;
}
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId == "safe.job.world"))
{
SJWActive = true;
}
//check RJW
if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "RimJobWorld"))
{
RJWActive = true;
}
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId == "rim.job.world"))
{
RJWActive = true;
}
//check Dubs Apparel Tweaks
if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Dubs Apparel Tweaks"))
{
DubsApparelTweaksActive = true;
}
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId == "Dubwise.DubsApparelTweaks"))
{
DubsApparelTweaksActive = true;
}
//check Alien Race
if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Humanoid Alien Races 2.0"))
{
alienRaceActive = true;
}
if (LoadedModManager.RunningModsListForReading.Any(x => x.Name.Contains("Humanoid Alien Races")))
{
alienRaceActive = true;
}
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId == "erdelf.HumanoidAlienRaces"))
{
alienRaceActive = true;
}
//check RimNudeWorld
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId == "shauaputa.rimnudeworld"))
{
rimNudeWorldActive = true;
}
//check OTYNude
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId.Contains("OTY")&& x.PackageId.Contains("Nude")))
{
OTYNudeActive = true;
}
//check Licentia Lab
if (LoadedModManager.RunningModsListForReading.Any(x => x.PackageId.ToLower() == "LustLicentia.RJWLabs".ToLower()))
{
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");
var harmony = new Harmony("SizedApparelforRJW");
harmony.PatchAll();
/*
try
{
((Action)(() => {
if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "OTY_NUDE"))
{
Log.Message("Sized Apparel for RJW : OTY_NUDE founded");
usingOversized = true;
usingBackBreaking = true;
}
}))();
}
catch (TypeLoadException ex)
{
}
*/
//RJW Patch
try
{
((Action)(() =>
{
if (RJWActive)
{
Log.Message("[SizedApparel] RimJobWorld Found");
//harmony.Patch(AccessTools.Method(typeof(rjw.JobDriver_SexBaseInitiator), "Start"),
//postfix: new HarmonyMethod(typeof(SexStartPatch), "Postfix"));
//harmony.Patch(AccessTools.Method(typeof(rjw.JobDriver_SexBaseInitiator), "End"),
//postfix: new HarmonyMethod(typeof(SexEndPatch), "Postfix"));
//harmony.Patch(AccessTools.Method(typeof(rjw.SexUtility), "DrawNude"),
//postfix: new HarmonyMethod(typeof(DrawNudePatch), "Postfix"));
harmony.Patch(AccessTools.Method(typeof(Sexualizer), "sexualize_pawn"),
postfix: new HarmonyMethod(typeof(SexualizePawnPatch), "Postfix"));
Log.Message("[SizedApparel] RimJobWorld Patched");
}
else
{
Log.Message("[SizedApparel] RimJobWorld Patch canceled");
}
}))();
}
catch (TypeLoadException ex) { }
//Alien Race Patch
//Alien Race No longer supported.
/*
try
{
((Action)(() =>
{
if (alienRaceActive)
{
Log.Message("[SizedApparel] AlienRace Found");
//harmony.Patch(AccessTools.Method(typeof(AlienRace.HarmonyPatches), "DrawAddons"),
//prefix: new HarmonyMethod(typeof(DrawAddonPatch), "Prefix"));
Log.Message("[SizedApparel] AlienRace Patched");
}
else
{
Log.Message("[SizedApparel] AlienRace Patch canceled");
}
}))();
}
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
try
{
((Action)(() =>
{
if (alienRaceActive && rimNudeWorldActive)
{
Log.Message("[SizedApparel] RimNudeWorld Found");
/*
harmony.Patch(AccessTools.Method(typeof(AlienRace.AlienPartGenerator.BodyAddon), "CanDrawAddon"),
postfix: new HarmonyMethod(typeof(RimNudeWorldBreastHidePatch), "Postfix"));
*/
//harmony.Patch(AccessTools.Method(typeof(RimNudeWorld.GenitalPatch), "Postfix"),
//prefix: new HarmonyMethod(typeof(SizedApparelRNWPatch), "Prefix"));
//Log.Message("SizedApparelforRJW::AlienRacePatch");
Log.Message("[SizedApparel] RimNudeWorld Patching...: RevealingApparel");
harmony.Patch(AccessTools.Method(typeof(RevealingApparel.RevealingApparel), "CanDrawRevealing"),
postfix: new HarmonyMethod(typeof(RevealingApparelPatch), "Postfix"));
Log.Message("[SizedApparel] RimNudeWorld Patched: RevealingApparel");
}
else
{
Log.Message("[SizedApparel] RimNudeWorld Patch canceled");
}
}))();
}
catch (TypeLoadException ex)
{
Log.Warning("[SizedApparel] Activated RimNudeWorld version not match to patch!\nSome patch for RimNudeWorld may not work!");
}
//Dubs Apparel Tweaks Patch
try
{
((Action)(() =>
{
if (DubsApparelTweaksActive)
{
Log.Message("[SizedApparel] Dubs Apparel Tweaks Found");
//harmony.Patch(AccessTools.Method(typeof(QuickFast.bs), "SwitchIndoors"),
//postfix: new HarmonyMethod(typeof(SizedApparelDubsApparelPatch), "indoorPostFixPatch"));
Log.Message("[SizedApparel] Dubs Apparel Tweaks (not) Patched (just debug message)");
}
else
{
Log.Message("[SizedApparel] Dubs Apparel Tweaks Patch canceled");
}
}))();
}
catch (TypeLoadException ex) { }
//SizedApparelPatch
try
{
((Action)(() =>
{
Log.Message("[SizedApparel] doing PawnRenderer Patch");
//disable for 1.3
/*
var original = typeof(PawnRenderer).GetMethod("RenderPawnInternal", BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] {typeof(Vector3),typeof(float), typeof(bool), typeof(Rot4), typeof(Rot4), typeof(RotDrawMode), typeof(bool), typeof(bool), typeof(bool) }, null );
var postfix = typeof(DrawPawnPatch).GetMethod("RenderPawnInternalPostfix");
var prefix = typeof(DrawPawnPatch).GetMethod("RenderPawnInternalPrefix");
harmony.Patch(original, prefix: new HarmonyMethod(prefix), postfix: new HarmonyMethod(postfix));
*/
//1.3
var original0 = typeof(Pawn_ApparelTracker).GetMethod("Notify_ApparelChanged");
var original1 = typeof(Pawn_ApparelTracker).GetMethod("Notify_ApparelAdded");
var original2 = typeof(Pawn_ApparelTracker).GetMethod("Notify_ApparelRemoved");
var postfix = typeof(ApparelTrackerPatch).GetMethod("Changed");
harmony.Patch(original0, postfix: new HarmonyMethod(postfix));
//harmony.Patch(original1, postfix: new HarmonyMethod(postfix));
//harmony.Patch(original2, postfix: new HarmonyMethod(postfix));
Log.Message("[SizedApparel] PawnRenderer Patch complete");
}))();
}
catch (TypeLoadException ex)
{
Log.Error("[SizedApparel] Cannot Patch for \"RenderPawnInternal\" Method! the mod may not work!");
}
}
}
}

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

View File

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

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("SizedApparelforRJW")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SizedApparelforRJW")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("b06471b4-4c6c-478b-b94d-71cc53abd24d")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,37 @@
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 rjw;
namespace SizedApparel
{
//IdeoUIUtility.DoAppearanceItems
[HarmonyPatch(typeof(IdeoUIUtility), "DoAppearanceItems")]
static class SizedApparAppearanceUIPatch
{
//Todo: Use Transpiler
static public void oldPostfix(Ideo ideo, IdeoEditMode editMode, ref float curY, float width)
{
//DrawPubicBlox()
Rect rect = new Rect(4f, curY, IdeoUIUtility.PreceptBoxSize.x, IdeoUIUtility.PreceptBoxSize.y);
Widgets.DrawRectFast(rect, IdeoUIUtility.GetBackgroundColor(PreceptImpact.Medium), null);
string text = "PubicHair".Translate();
}
static void DrawPubicBox(float xOffset, float y, StyleItemTab tab, StyleItemDef defToDisplay)
{
}
}
}

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SizedApparel
{
//apparel build with apparel parts. but how?
public class SizedApparelApparelBuilder
{
}
}

File diff suppressed because it is too large Load Diff

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;
}
}
}

View File

@ -0,0 +1,272 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using rjw;
using HarmonyLib;
using UnityEngine;
using RimWorld;
using Verse;
namespace SizedApparel
{
public enum colorOverrideMode
{
Default, Multiply, Add
}
public class BodyPartVariationWithRace
{
public string hediffName;
public List<string>varName = new List<string>();
}
public class SizedApparelBodyPartVariationDef : Def
{
public string bodyPartName;
public List<BodyPartVariationWithRace>variations = new List<BodyPartVariationWithRace>();
}
public class SizedApparelBodyPartDetail : HediffComp
{
public string variation = null; // null to default
public string bodyPartName;
public SizedApparelBodyPartVariationDef variationDef;
public Color? colorOverride = null;//TODO
public colorOverrideMode colorMode = colorOverrideMode.Default;//TODO
public override string CompTipStringExtra => "Variation: " + (variation == null ? "Default" : variation) + " (sized apparel)";
public override void CompExposeData()
{
Scribe_Values.Look<string>(ref this.variation, "variation", null, false);
//Scribe_Values.Look<Color?>(ref this.colorOverride, "colorOverride",null, false);
//Scribe_Values.Look<colorOverrideMode>(ref this.colorMode, "colorMode", colorOverrideMode.Default, false);
}
public override void CompPostMake()
{
base.CompPostMake();
if (SizedApparelUtility.isBreast(parent.def.defName))
bodyPartName = "Breasts";
else if (Genital_Helper.is_vagina(parent)) // SizedApparelUtility.isVagina(parent.def.defName)
bodyPartName = "Vagina";
else if (SizedApparelUtility.isAnus(parent.def.defName))
bodyPartName = "Anus";
else if (SizedApparelUtility.isUdder(parent.def.defName))
bodyPartName = "Udder";
else if (Genital_Helper.is_penis(parent)) //SizedApparelUtility.isPenis(parent.def.defName)
bodyPartName = "Penis";
else
bodyPartName = parent.def.defName;
if (Pawn == null)
return;
if (DefDatabase<SizedApparelBodyPartVariationDef>.DefCount == 0)
{
Log.Warning("[Sized Apparel] Cannot Find Any BodyPart Variation Def. It can be version issue or other mod's patch issue.");
variation = null;
return;
}
try
{
variationDef = DefDatabase<SizedApparelBodyPartVariationDef>.AllDefs?.FirstOrDefault(b => b.bodyPartName == bodyPartName);
}
catch(ArgumentNullException e)
{
Log.Warning("[Sized Apparel] Cannot Find Any BodyPart Variation Def of ( " + bodyPartName + " )!. It can be version issue or other mod's patch issue.");
variation = null;
return;
}
if (variationDef == null)
return;
if (variationDef.variations == null)
return;
var variations = variationDef.variations?.FirstOrDefault(v => v.hediffName == parent.def.defName);
if (variations == null)
variations = variationDef.variations?.FirstOrDefault(v => v.hediffName == bodyPartName);
if (variations == null)
return;
if (variations.varName.NullOrEmpty())
return;
this.variation = variations.varName.RandomElement();
if (variation.ToLower() == "null" || variation.ToLower() == "default")
{
variation = null;
}
}
}
public class SizedApparelBodyPartDetailProperties : HediffCompProperties
{
public string bodyPartName;
public SizedApparelBodyPartDetailProperties()
{
this.compClass = typeof(SizedApparelBodyPartDetail);
}
}
public class SizedApparelBodyPartDetailGizmo : Command
{
}
public class SizedApparelBodyPartDetailThing : ThingComp
{
public string variation = null; // null to default
public string bodyPartName;
public SizedApparelBodyPartVariationDef variationDef;
public Color? colorOverride = null;//TODO
public colorOverrideMode colorMode = colorOverrideMode.Default;//TODO
public override string GetDescriptionPart()
{
if(SizedApparelSettings.showBodyPartsVariation)
return "Variation: " +( variation == null?"Default":variation) + " (sized apparel)";
return string.Empty;
}
/*
public override string TransformLabel(string label)
{
return label + "Variation: " + variation == null ? "Default" : variation + " (sized apparel)";
}
*/
public override void PostExposeData()
{
Scribe_Values.Look<string>(ref this.variation, "variation", null, false);
//Scribe_Values.Look<Color?>(ref this.colorOverride, "colorOverride",null, false);
//Scribe_Values.Look<colorOverrideMode>(ref this.colorMode, "colorMode", colorOverrideMode.Default, false);
}
public void InitComp(Pawn pawn = null)
{
HediffDef named = DefDatabase<HediffDef>.GetNamed(this.parent.def.defName, true);
List<Pawn> allMaps_FreeColonistsAndPrisonersSpawned = PawnsFinder.AllMaps_FreeColonistsAndPrisonersSpawned;
pawn = ((allMaps_FreeColonistsAndPrisonersSpawned != null) ? allMaps_FreeColonistsAndPrisonersSpawned.RandomElement<Pawn>() : null);
if (pawn == null)
{
List<Pawn> all_AliveOrDead = PawnsFinder.All_AliveOrDead;
pawn = ((all_AliveOrDead != null) ? all_AliveOrDead.RandomElement<Pawn>() : null);
}
SizedApparelBodyPartDetail compHediffBodyPart = HediffMaker.MakeHediff(named, pawn, null).TryGetComp<SizedApparelBodyPartDetail>();
if (compHediffBodyPart != null)
{
//compHediffBodyPart.initComp(pawn, false);
//compHediffBodyPart.updatesize(0f);
this.variation = compHediffBodyPart.variation;
}
}
public override void PostPostMake()
{
base.PostPostMake();
if (SizedApparelUtility.isBreast(parent.def.defName))
bodyPartName = "Breasts";
else if (SizedApparelUtility.isVagina(parent.def.defName))
bodyPartName = "Vagina";
else if (SizedApparelUtility.isAnus(parent.def.defName))
bodyPartName = "Anus";
else if (SizedApparelUtility.isUdder(parent.def.defName))
bodyPartName = "Udder";
else if (SizedApparelUtility.isPenis(parent.def.defName))
bodyPartName = "Penis";
else
bodyPartName = parent.def.defName;
variationDef = DefDatabase<SizedApparelBodyPartVariationDef>.AllDefs?.FirstOrDefault(b => b.bodyPartName == bodyPartName);
if (variationDef == null)
return;
if (variationDef.variations == null)
return;
var variations = variationDef.variations?.FirstOrDefault(v => v.hediffName == parent.def.defName);
if (variations == null)
variations = variationDef.variations?.FirstOrDefault(v => v.hediffName == bodyPartName);
if (variations == null)
return;
if (variations.varName.NullOrEmpty())
return;
this.variation = variations.varName.RandomElement();
if (variation.ToLower() == "null" || variation.ToLower() == "default")
{
variation = null;
}
}
}
public class SizedApparelBodyPartDetailThingProperties : CompProperties
{
public string bodyPartName;
public SizedApparelBodyPartDetailThingProperties()
{
this.compClass = typeof(SizedApparelBodyPartDetailThing);
}
}
[HarmonyPatch(typeof(SexPartAdder), "recipePartAdder")]
public class recipePartAdderPatch
{
public static void Postfix(RecipeDef recipe, Pawn pawn, BodyPartRecord part, List<Thing> ingredients, Hediff __result)
{
if (__result == null)
return;
Thing thing = ingredients.FirstOrDefault(x => x.def.defName == recipe.addsHediff.defName);
if (thing == null)
return;
SizedApparelBodyPartDetailThing CompThing = thing.TryGetComp<SizedApparelBodyPartDetailThing>();
SizedApparelBodyPartDetail CompHediff = __result.TryGetComp<SizedApparelBodyPartDetail>();
CompHediff.variation = CompThing.variation;
}
}
[HarmonyPatch(typeof(SexPartAdder), "recipePartRemover")]
public class recipePartRemoverPatch
{
public static void Postfix(Hediff hd, ref Thing __result)
{
//Thanks! "Stardust" helped
try
{
SizedApparelBodyPartDetailThing CompThing = __result.TryGetComp<SizedApparelBodyPartDetailThing>();
SizedApparelBodyPartDetail CompHediff = hd.TryGetComp<SizedApparelBodyPartDetail>();
CompThing.variation = CompHediff.variation;
}
catch (NullReferenceException e)
{
Log.Error(e.StackTrace);
}
}
}
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SizedApparel
{
//editing offset for alien race? such as penis, anus offsets, except breast.(breasts position must be matched with apparels.)
class SizedApparelBodyPartEditor
{
}
}

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;
}
}
}

View File

@ -0,0 +1,929 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RimWorld;
using Verse;
using HarmonyLib;
using UnityEngine;
using rjw;
using Rimworld_Animations;
using System.Reflection;
//since I test system alot, source cord is very dirty and not optimized.
namespace SizedApparel
{
public struct supportedIndex
{
}
[StaticConstructorOnStartup]
[HarmonyPatch(typeof(Pawn_HealthTracker), "Notify_HediffChanged")]
public class PawnHealthTrackerPatch
{
public static void Postfix(Hediff hediff, Pawn_HealthTracker __instance, ref Pawn ___pawn)
{
if (___pawn == null)
return;
var comp = ___pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
if (hediff == null)
return;
if (SizedApparelUtility.isRJWParts(hediff))///
{
//comp.ClearAll();
//comp.Update();
comp.SetDirty(false,true,false);
//already doing set dirty in hediffchange method.
//___pawn.Drawer.renderer.graphics.SetApparelGraphicsDirty();
//PortraitsCache.SetDirty(___pawn);
//GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(___pawn);
return;
}
if (SizedApparelUtility.isBellyBulgeHediff(hediff))
{
comp.SetDirty(false, true, false);
return;
}
}
}
//for 1.4
/*
[StaticConstructorOnStartup]
[HarmonyPatch(typeof(Pawn_AgeTracker), "PostResolveLifeStageChange")]
public class PawnAgeTrackerPatch
{
public static void Postfix(Pawn ___pawn)
{
var comp = ___pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
comp.SetDirty(false,false,false,true,true);//Apparel and Hediff will be changed with other reason. just set skeleton dirty.
}
}*/
[StaticConstructorOnStartup]
public class HeddifPatchForRimNudeWorld
{
//hediff.get_Severity()
public static void GetSeverityPostFix(Hediff __instance)
{
if (__instance.Part != null)
{
if (__instance.Part.def.defName.Equals(SizedApparelUtility.chestString))
{
if (__instance.def.defName.EndsWith(SizedApparelUtility.breastsString))
{
//Log.Message("Found Breast Hediff");
//_breastSeverity = __instance.Severity;
//_breastHediff = __instance;
//result = true;
//Log.Message(_breastSeverity.ToString());
}
}
}
}
//...get_severity()
/*
public static void BodyAddonHediffSeverityGraphicPatch(AlienRace.AlienPartGenerator.BodyAddonHediffSeverityGraphic __instance, ref float __result)
{
if (!SizedApparelPatch.rimNudeWorldActive) { return; }
if (!SizedApparelSettings.matchBreastToSupportedApparelSize) { return; }
if (__instance.path.Contains(SizedApparelUtility.breastsString))
{
}
}*/
}
[Obsolete]
[StaticConstructorOnStartup]
public class BodyPatch
{
public static void SetBodyGraphic(Pawn pawn, bool drawClothFlag = true, bool fromGraphicRecord = true, bool revert = false)
{
//Pawn_ApparelTracker __instance;
//GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff);
//bool flag = hasUnSupportedApparel(__instance.pawn, breastSeverity, breastHediff);
ApparelRecorderComp comp = pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
if (revert)
{
var pawnRenderer = pawn.Drawer?.renderer?.graphics;
//Log.Message("useBodyTexture");
/*
if (!pawnRenderer.AllResolved)
{
pawnRenderer.ResolveAllGraphics();
}*/
if (pawnRenderer == null)
return;
if (comp.graphicSourceNaked != null)
pawnRenderer.nakedGraphic = comp.graphicSourceNaked.GetColoredVersion(pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo);
if (comp.graphicSourceRotten != null)
pawnRenderer.rottingGraphic = comp.graphicSourceRotten.GetColoredVersion(pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo);
//if (comp.graphicSourceFurCovered != null)
// pawnRenderer.furCoveredGraphic = comp.graphicSourceRotten.GetColoredVersion(pawnRenderer.furCoveredGraphic.Shader, pawnRenderer.furCoveredGraphic.color, pawnRenderer.furCoveredGraphic.colorTwo);
}
if (!comp.hasUpdateBefore)
{
//comp.Update(true, fromGraphicRecord);
}
float breastSeverity = comp.breastSeverity;
Hediff breastHediff = comp.breastHediff;
if (SizedApparelSettings.drawBodyParts == true && SizedApparelSettings.useBodyTexture)//old:SizedApparelSettings.useBodyTexture
{
//if (SizedApparelSettings.Debug)
// Log.Message("[Sized Apparel] Trying to change" + pawn.Name + "'s body texture.");
var pawnRenderer = pawn.Drawer?.renderer?.graphics;
//Log.Message("useBodyTexture");
/*
if (!pawnRenderer.AllResolved)
{
pawnRenderer.ResolveAllGraphics();
}*/
if (pawnRenderer == null)
return;
if (!comp.hasUnsupportedApparel || SizedApparelUtility.isPawnNaked(pawn) || !drawClothFlag)
{
if (comp.graphicbaseBodyNaked != null)
{
pawnRenderer.nakedGraphic = comp.graphicbaseBodyNaked.GetColoredVersion(pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo);
}
if (comp.graphicbaseBodyRotten != null)
{
pawnRenderer.rottingGraphic = comp.graphicbaseBodyRotten.GetColoredVersion(pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo);
}/*
if (comp.graphicbaseBodyFurCovered != null)
{
pawnRenderer.furCoveredGraphic = comp.graphicbaseBodyFurCovered.GetColoredVersion(pawnRenderer.furCoveredGraphic.Shader, pawnRenderer.furCoveredGraphic.color, pawnRenderer.furCoveredGraphic.colorTwo);
}*/
}
else
{
if (comp.graphicSourceNaked != null)
pawnRenderer.nakedGraphic = comp.graphicSourceNaked.GetColoredVersion(pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo);
if (comp.graphicSourceRotten != null)
pawnRenderer.rottingGraphic = comp.graphicSourceRotten.GetColoredVersion(pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo);
//if (comp.graphicSourceFurCovered != null)
// pawnRenderer.furCoveredGraphic = comp.graphicSourceFurCovered.GetColoredVersion(pawnRenderer.furCoveredGraphic.Shader, pawnRenderer.furCoveredGraphic.color, pawnRenderer.furCoveredGraphic.colorTwo);
}
return;//no need to replace full body texture anymore.
/*
if (SizedApparelSettings.useBodyTexture == false)
return;
//Log.Message("Hello");
if (pawnGraphicSet == null)
return;
if (pawnGraphicSet.pawn.RaceProps.Humanlike == false)
return;
return;
//Log.Message("SetBodyGraphic");
//pawnGraphicSet.ClearCache();
string path = pawnGraphicSet.pawn.story.bodyType.bodyNakedGraphicPath;
string path_bodyDessicated = pawnGraphicSet.pawn.story.bodyType.bodyDessicatedGraphicPath;
string filename;
string pathname;
string filename_bodyDessicated;
string pathname_bodyDessicated;
pathname = System.IO.Path.GetDirectoryName(path);
filename = System.IO.Path.GetFileName(path);
filename_bodyDessicated = System.IO.Path.GetFileName(path_bodyDessicated);
pathname_bodyDessicated = System.IO.Path.GetDirectoryName(path_bodyDessicated);
//Log.Message("SetPath");
bool validBody = false;
bool validDessicatedBody = false;
//pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic
//pawnGraphicSet.pawn.Drawer.renderer.graphics.dessicatedGraphic
if (hasUnsupportApparel)
{
//Log.Message("IfhasUnsupportApparel");
//Graphic newBodyGraphic = null;
//Graphic newRottingGraphic = null;
//string path;
//Log.Message("tryUnsupportedApparelBodyTexture");
//OLD::pawnGraphicSet.pawn.Drawer.renderer.graphics
if (pawnGraphicSet.nakedGraphic != null)
if (ContentFinder<Texture2D>.Get((pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null)
{
pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic = GraphicDatabase.Get<Graphic_Multi>(pawnGraphicSet.nakedGraphic.path + "_UnsupportedApparel", pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo);
validBody = true;
}
if (pawnGraphicSet.dessicatedGraphic != null)
if (ContentFinder<Texture2D>.Get((pawnGraphicSet.dessicatedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null)
{
pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get<Graphic_Multi>(pawnGraphicSet.dessicatedGraphic.path + "_UnsupportedApparel", pawnGraphicSet.rottingGraphic.Shader, pawnGraphicSet.rottingGraphic.drawSize, pawnGraphicSet.rottingGraphic.color, pawnGraphicSet.rottingGraphic.colorTwo);
validDessicatedBody = true;
}
}
else
{
//Log.Message("undo");
string currentPath = pawnGraphicSet.nakedGraphic.path;
string currentDessicatedPath = pawnGraphicSet.dessicatedGraphic.path;
//Log.Message(currentPath.Substring(0,currentPath.Length - "_UnsupportedApparel".Length));
if (pawnGraphicSet.nakedGraphic != null)
if (ContentFinder<Texture2D>.Get(currentPath.Substring(0, currentPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null)
{
pawnGraphicSet.nakedGraphic = GraphicDatabase.Get<Graphic_Multi>((currentPath.Substring(0, currentPath.Length - "_UnsupportedApparel".Length)), pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo);
}
if (pawnGraphicSet.dessicatedGraphic != null)
if (ContentFinder<Texture2D>.Get(currentDessicatedPath.Substring(0, currentDessicatedPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null)
{
pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get<Graphic_Multi>((currentDessicatedPath.Substring(0, currentDessicatedPath.Length - "_UnsupportedApparel".Length)), pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo);
}
}*/
//pawnGraphicSet.ClearCache();
}
}
private static void GetBreastSeverity(Pawn pawn, out float breastSeverity, out Hediff breastHediff)
{
throw new NotImplementedException();
}
}
[Obsolete]
[StaticConstructorOnStartup]
//[HarmonyPatch(typeof(Pawn_ApparelTracker), "ExposeData")]
class ApparelTrackerExposePatch
{
static void Postfix(Pawn_ApparelTracker __instance)
{
if (!UnityData.IsInMainThread)
{
return;
}
if (__instance.pawn == null)
return;
if (Scribe.mode == LoadSaveMode.PostLoadInit)
{
ApparelRecorderComp comp = __instance.pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
if (!comp.hasUpdateBefore)
comp.Update(true, false);
}
}
}
//[StaticConstructorOnStartup]
//[HarmonyPatch(typeof(Pawn_ApparelTracker), "Notify_ApparelChanged")]
//rimworld 1.2 => apparelChanged, rimworld 1.3 => apparelAdded, apparelRemoved
public class ApparelTrackerPatch
{
//Prefix
public static void Changed(Pawn_ApparelTracker __instance)
{
/*
if (Current.Game.World == null)
return;
*/
if (!UnityData.IsInMainThread)
{
return;
}
if (__instance.pawn == null)
return;
if (SizedApparelSettings.Debug)
Log.Message("[Sized Apparel] " + __instance.pawn.Name + "'s apparels are changed. updating sizedApparels for it.");
//GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff);
//bool flag = hasUnSupportedApparel(__instance.pawn, breastSeverity, breastHediff);
ApparelRecorderComp comp = __instance.pawn.GetComp<ApparelRecorderComp>();
if (comp != null)
{
//comp.ClearBreastCacheValue();
//comp.ClearAll();
//bool flag = false;
//SizedApparelUtility.GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff);
//flag = SizedApparelUtility.hasUnSupportedApparel(__instance.pawn, breastSeverity, breastHediff);
//flag = SizedApparelUtility.hasUnSupportedApparelFromWornData(__instance.pawn, breastSeverity, breastHediff);
//comp.hasUpdateBefore = true;
//comp.hasUnsupportedApparel = flag;
//comp.breastHediff = breastHediff; ;
//comp.breastSeverity = breastSeverity;
//comp.Update(true, false);//TODO: Coverd But No Graphic may cause Big Issue!!!
//comp.Update(true, true);
comp.SetDirty(false,false,true);
/*
if (SizedApparelSettings.drawBodyParts)//old:SizedApparelSettings.useBodyTexture
BodyPatch.SetBodyGraphic(__instance.pawn);
*/
/*
//Log.Message(comp.testbool.ToString());
//Log.Message("ApparelChanged");
//comp.hasUnsupportedApparel = flag;
//comp.hasUpdateBefore = true;
//comp.SetHasUnsupportedApparel(flag);
//comp.SetHasUpdateBefore(true);
//if (__instance.pawn.Drawer.renderer.graphics != null)
LongEventHandler.ExecuteWhenFinished(delegate
{
SetBodyGraphic(__instance.pawn.Drawer.renderer.graphics, flag);
}
);
*/
}
}
}
[StaticConstructorOnStartup]
//[HarmonyPatch(typeof(PawnGraphicSet), "SetApparelGraphicsDirty")]
class SetApparelGraphicsDirtyPatch
{
public static bool Prefix(PawnGraphicSet __instance)
{
if (SizedApparelSettings.useBodyTexture)
{
//__instance.SetAllGraphicsDirty();
//return false;
}
return true;
}
}
//TODO
[StaticConstructorOnStartup]
//[HarmonyPatch(typeof(PawnGraphicSet), "get_apparelGraphics")]
class PrivatePartsPatch
{
public static void Postfix(PawnGraphicSet __instance, ref List<ApparelGraphicRecord> __result)
{
var resualtCach = __result;
if (SizedApparelSettings.drawBodyParts)
{
var privateParts = new List<ApparelGraphicRecord>();
if (SizedApparelSettings.drawPenis)
{
}
if (SizedApparelSettings.drawVagina)
{
}
if (SizedApparelSettings.drawHips)
{
}
if (SizedApparelSettings.drawHips)
{
}
if (SizedApparelSettings.drawAnus)
{
}
}
}
}
//[HarmonyPatch(typeof(PawnGraphicSet), "MatsBodyBaseAt")]
public class MatBodyBaseAtPatch
{
public static void Postfix(PawnGraphicSet __instance, Rot4 facing, RotDrawMode bodyCondition, bool drawClothes, List<Material> __result)
{
if (__result == null)
return;
int num = facing.AsInt + 1000 * (int)bodyCondition;
List<Material> copy;
copy = __result.ListFullCopy();
for (int i = 0; i<__result.Count; i++)
{
//SizedApparelsDatabase.GetSupportedApparelOriginalPath(__result[i].g)
}
}
}
//Apparel Graphic Texture injection
[StaticConstructorOnStartup]
[HarmonyPatch(typeof(ApparelGraphicRecordGetter), "TryGetGraphicApparel")]
[HarmonyBefore(new string[]{"QualityOfBuilding"})]
public class GetApparelGraphicFix
{
public static void Postfix(Apparel apparel, BodyTypeDef bodyType, ref ApparelGraphicRecord rec, ref bool __result)
{
if (__result == false)
return;
if (apparel == null)
return;
if (bodyType == null)
return;
if (apparel.Wearer != null)
{
//rec = new ApparelGraphicRecord(null, null);
var comp = apparel.Wearer.GetComp<ApparelRecorderComp>();
//if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize)
// BreastSeverity = comp.BreastSeverityCache;
//int currentBreastSizeIndex = 0;
//float currentBreastSeverity = -1;
//int minSupportedBreastSizeIndex = 1000;
//float minSupportedBreastSeverity = 1000;
//SizedApparelUtility.GetBreastSeverity(apparel.Wearer, out BreastSeverity, out breastHediff);
if (comp != null)
{
if (comp.hasUpdateBefore == false)
{
//SizedApparelUtility.GetBreastSeverity(apparel.Wearer, out BreastSeverity, out breastHediff);
//comp.hasUnsupportedApparel = SizedApparelUtility.hasUnSupportedApparelFromWornData(apparel.Wearer, BreastSeverity, breastHediff);
//comp.breastSeverity = BreastSeverity;
//comp.breastHediff = breastHediff;
//comp.hasUpdateBefore = true;
//comp.Update(true,false);
}
if (comp.isDirty == true)
{
//return;
//comp.ClearAll();
//comp.Update(true, false);
}
/*
if (comp.needToCheckApparelGraphicRecords)
{
TODO;
if (comp.isApparelGraphicRecordChanged())
comp.Update(true, false);
}*/
if (comp.needToCheckApparelGraphicRecords)
{
/*
if (comp.isApparelGraphicRecordChanged())
{
//return;
//comp.Update(true, true); //1.3
//SizedApparelUtility.UpdateAllApparel(___pawn, true);
}*/
}
//Log.Message("1");
var breastHediff = comp.breastHediff;
float BreastSeverity = comp.breastSeverity;
//Log.Message("2");
if (SizedApparelSettings.useBreastSizeCapForApparels) //SizedApparelSettings.useBreastSizeCapForApparels //wip
BreastSeverity = Math.Min(comp.BreastSeverityCache, BreastSeverity);
//Log.Message("3");
if (comp.hasUnsupportedApparel == false)//&& (comp.bodyPartBreasts.bodyPartGraphic !=null || comp.bodyPartBreasts.bodyPartGraphicHorny != null)
{
Graphic sizedGraphic = null;
//Log.Message("4");
string resultPath = SizedApparelsDatabase.GetSupportedApparelSizedPath(new SizedApparelsDatabase.SizedApparelDatabaseKey(rec.graphic.path, apparel?.Wearer?.def.defName, breastHediff?.def?.defName, apparel.Wearer.gender, apparel?.Wearer?.story?.bodyType?.defName, SizedApparelUtility.BreastSeverityInt(BreastSeverity))).pathWithSizeIndex;
if(resultPath != null)
{
//sizedGraphic = SizedApparelUtility.GetSizedApparelGraphic(rec.graphic, BreastSeverity, apparel?.Wearer?.def.defName, breastHediff.def.defName);
sizedGraphic = GraphicDatabase.Get<Graphic_Multi>(resultPath, rec.graphic.Shader, rec.graphic.drawSize, rec.graphic.color, rec.graphic.colorTwo);
}
if(sizedGraphic != null)
rec = new ApparelGraphicRecord(sizedGraphic, rec.sourceApparel);
//minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex);
//comp.breastSeverityCapToDraw = Math.Min(comp.breastSeverityCapToDraw, minSupportedBreastSeverity);
}
}
else
{
if (SizedApparelSettings.Debug)
Log.Warning("[Sized Apparel] " + apparel.Wearer.Name + " doesn't have SizedApparel Compoenet!!");
}
}
}
}
[StaticConstructorOnStartup]
[HarmonyPatch(typeof(PawnGraphicSet), "ClearCache")]
class GraphicSetClearFix
{
public static void Postfix(PawnGraphicSet __instance)
{
if (__instance.pawn == null)
{
return;
}
var comp = __instance.pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
//comp.ClearAll(false);
//comp.needToCheckApparelGraphicRecords = true;
comp.SetDirty(false,true,false,false,false); // Check Hediff. If you don't the crotch will not have graphic on first load
}
}
//[HarmonyPatch(typeof(PawnGraphicSet), "MatsBodyBaseAt")]
public class PawnGraphicSetPatch
{
public static void Postfix(ref List<Material> __result, ref PawnGraphicSet __instance, Rot4 facing, RotDrawMode bodyCondition)
{
}
}
//TODO: Patch After RJW (Sexualize_GenerateNewPawnInternal) or just postfix to Sexualize
[HarmonyPatch(typeof(PawnGenerator), "GenerateNewPawnInternal")]
public class PawnGeneratorPatch
{
}
[HarmonyPatch(typeof(Corpse), "RotStageChanged")]
public class RotStagePatch
{
public static void Prefix(CompRottable __instance)
{
var comp = __instance.parent.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
comp.SetDirty(false,false,false); // should clear graphicSet....?
}
}
//Should I Patch this?
//[HarmonyPatch(typeof(Pawn_AgeTracker), "RecalculateLifeStageIndex")]
public class AgePatch
{
public static void Postfix(Pawn_AgeTracker __instance, Pawn ___pawn)
{
var comp = ___pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
comp.CheckAgeChanged();
}
}
//Styling Station patch..? wip
//[HarmonyPatch(typeof(PawnGraphicSet), "MatsBodyBaseAt")]
public class BodyMatPatch
{
public static void Postfix(PawnGraphicSet __instance, RotDrawMode bodyCondition, Rot4 facing, ref List<Material> __result, bool drawClothes)
{
List<Material> loc = new List<Material>();
if (bodyCondition == RotDrawMode.Dessicated)
{
return;
}
for (int i = 0; i< __result.Count; i++)
{
if (bodyCondition == RotDrawMode.Fresh)
{
if (__result[i] == __instance.nakedGraphic.MatAt(facing, null))
{
continue;
}
}
else if (bodyCondition == RotDrawMode.Rotting || __instance.dessicatedGraphic == null)
{
if (__result[i] == __instance.rottingGraphic.MatAt(facing, null))
{
continue;
}
}
if (drawClothes)
{
}
loc.Add(__result[i]);
}
}
}
//RimWorld 1.3
//WIPWIPWIP TODO
[HarmonyPatch(typeof(PawnRenderer), "BaseHeadOffsetAt")]
public class BaseHeadOffsetAtPatch
{
public static void Postfix(ref PawnRenderer __instance, Pawn ___pawn, Rot4 rotation, ref Vector3 __result)
{
ApparelRecorderComp apparelRecorder = ___pawn.GetComp<ApparelRecorderComp>();
if (apparelRecorder == null)
return;
if (apparelRecorder.customPose != null)
{
//var item = apparelRecorder.currentCustomPose.headOffset.FirstOrDefault(b => b.bodyType == ___pawn.story.bodyType.label);
//__result += item.offsets.GetOffset(rotation);
}
}
}
//RimWorld 1.3 Only. Not 1.4
[HarmonyPatch(typeof(PawnRenderer), "DrawPawnBody")]
public class DrawPawnBodyPatch
{
static MethodInfo overrideMatMethod = AccessTools.Method(typeof(PawnRenderer), "OverrideMaterialIfNeeded");
public static void Prefix(ref PawnRenderer __instance, Pawn ___pawn, PawnRenderFlags flags)
{
if (!SizedApparelSettings.drawBodyParts)
return;
if (___pawn == null)
return;
ApparelRecorderComp apparelRecorder = ___pawn.GetComp<ApparelRecorderComp>();
if (apparelRecorder == null)
return;
//!flags.FlagSet(PawnRenderFlags.StylingStation)&&
bool flag = false;
//if (apparelRecorder.needToCheckApparelGraphicRecords && apparelRecorder.isApparelGraphicRecordChanged())
/*
if (apparelRecorder.isApparelGraphicRecordChanged())
{
flag = true;
}
*/
if (false && flags.FlagSet(PawnRenderFlags.StylingStation))//TODO...?
{
//apparelRecorder.isDirty is allways true
if (true)//StylingStation Doesn't work with cache! patch in postfix
{
if(apparelRecorder.recentClothFlag != flags.FlagSet(PawnRenderFlags.Clothes))
apparelRecorder.Update(true, true, true, flags.FlagSet(PawnRenderFlags.Clothes));
if(flags.FlagSet(PawnRenderFlags.Clothes))
SizedApparelUtility.UpdateAllApparel(___pawn, true);
}
}
else
{
if ((!apparelRecorder.hasUpdateBefore || apparelRecorder.isDirty))
{
if (SizedApparelSettings.Debug)
Log.Message("[SizedApparel] trying to draw " + ___pawn.Name + " with unupdated component or SetDirty! Updating it.");
//apparelRecorder.ClearAll();
//Todo. Async Update?
apparelRecorder.Update(true, true, true, flags.FlagSet(PawnRenderFlags.Clothes));
SizedApparelUtility.UpdateAllApparel(___pawn,true);
}
if (flag)
{
//apparelRecorder.Update(true, true, true, flags.FlagSet(PawnRenderFlags.Clothes));
//apparelRecorder.Update(true, true); 1.3
//SizedApparelUtility.UpdateAllApparel(___pawn, true);
}
}
return;
//don't change body graphic file. it will inject material in PawnGraphicSet.MatsBodyBaseAt
if (SizedApparelSettings.drawBodyParts)
BodyPatch.SetBodyGraphic(___pawn, flags.FlagSet(PawnRenderFlags.Clothes), false);
else
BodyPatch.SetBodyGraphic(___pawn, flags.FlagSet(PawnRenderFlags.Clothes), false, false);
}
public static void Postfix(ref PawnRenderer __instance, Vector3 rootLoc, float angle, Rot4 facing, RotDrawMode bodyDrawType, PawnRenderFlags flags, Pawn ___pawn, Mesh bodyMesh)
{
if (___pawn == null)
return;
ApparelRecorderComp apparelRecorder = ___pawn.GetComp<ApparelRecorderComp>();
if (apparelRecorder == null)
return;
Quaternion quaternion = Quaternion.AngleAxis(angle, Vector3.up);
if (bodyMesh == null)
return;
Quaternion quat = Quaternion.AngleAxis(angle, Vector3.up);
string defName = __instance.graphics.pawn.def.defName;
/*
Shader shader = ___pawn.Drawer.renderer.graphics.nakedGraphic.Shader;
Color skinColor = Color.white;
Color skinColor2 = Color.white;
if (bodyDrawType == RotDrawMode.Fresh)
{
shader = ___pawn.Drawer.renderer.graphics.nakedGraphic.Shader;
if (!ShaderUtility.SupportsMaskTex(shader))
shader = ShaderDatabase.CutoutSkinOverlay;
skinColor = ___pawn.Drawer.renderer.graphics.nakedGraphic.Color;
skinColor2 = ___pawn.Drawer.renderer.graphics.nakedGraphic.ColorTwo;
}
else if(bodyDrawType == RotDrawMode.Rotting)
{
shader = ___pawn.Drawer.renderer.graphics.rottingGraphic.Shader;
if (!ShaderUtility.SupportsMaskTex(shader))
shader = ShaderDatabase.CutoutSkinOverlay;
skinColor = ___pawn.Drawer.renderer.graphics.rottingGraphic.Color;
skinColor2 = ___pawn.Drawer.renderer.graphics.rottingGraphic.ColorTwo;
}*/
/*
//FurCoveredColor
if(bodyDrawType == RotDrawMode.Fresh && __instance.graphics.furCoveredGraphic != null)
{
shader = ___pawn.Drawer.renderer.graphics.furCoveredGraphic.Shader;
if (!ShaderUtility.SupportsMaskTex(shader))
shader = ShaderDatabase.CutoutSkinOverlay;
skinColor = ___pawn.Drawer.renderer.graphics.furCoveredGraphic.Color;
skinColor2 = ___pawn.Drawer.renderer.graphics.furCoveredGraphic.ColorTwo;
}*/
if (flags.FlagSet(PawnRenderFlags.StylingStation))//Styling station doesn't affect to real pawn data. so cannot cache to component.
{
}
//breasts are only rendered when all of worn apparels are supported or nude.
if (true)//__instance.graphics.furCoveredGraphic == null
{
apparelRecorder.UpdateTickAnim(rootLoc, angle);
apparelRecorder.DrawAllBodyParts(rootLoc, angle, facing, bodyDrawType, flags, ___pawn, bodyMesh);
}
//else. the DrawPawnFur will draw bodyparts becaust it should be upper
}
}
//Base Body Graphic Injection
[HarmonyPatch(typeof(PawnGraphicSet), "MatsBodyBaseAt")]
public class MatsBodyBastAtPatch
{
public static void Postfix(ref List<Material> __result, PawnGraphicSet __instance, Rot4 facing, RotDrawMode bodyCondition, bool drawClothes)
{
if (!SizedApparelSettings.useBodyTexture)
return;
if (__result.NullOrEmpty())
return;
if (!SizedApparelUtility.CanApplySizedApparel(__instance.pawn))
return;
var comp = __instance.pawn.GetComp<ApparelRecorderComp>();
if (comp == null) // maybe it can be null? but why...? mechanoids?
return;
if (drawClothes)
{
if (comp.hasUnsupportedApparel)
return;
}
Material bodyMat = null;
Material sizedApparelBaseBodyMat = null;
switch (bodyCondition)
{
case RotDrawMode.Fresh:
if(__instance.nakedGraphic != null && comp.graphicbaseBodyNaked != null)
{
bodyMat = __instance.nakedGraphic.MatAt(facing, null);
sizedApparelBaseBodyMat = comp.graphicbaseBodyNaked.MatAt(facing, null);
}
break;
case RotDrawMode.Rotting:
if (__instance.rottingGraphic != null && comp.graphicbaseBodyRotten != null)
{
bodyMat = __instance.rottingGraphic.MatAt(facing, null);
sizedApparelBaseBodyMat = comp.graphicbaseBodyRotten.MatAt(facing, null);
}
break;
case RotDrawMode.Dessicated:
return;// //don't inject for Dessicated graphic. it doesn't need to patch for this
break;
default:
bodyMat = null;
sizedApparelBaseBodyMat = null;
break;
}
if (sizedApparelBaseBodyMat == null)
return;
//the body mat would be in first index but not sure. so search from start
for (int i = 0; i < __result.Count; i++)
{
if(__result[i] == bodyMat)
{
__result[i] = sizedApparelBaseBodyMat;
//should inject body part graphics here?
break;
}
}
//should do something more? such as add body parts or somthing?
}
}
//TODO
[HarmonyPatch(typeof(PawnRenderer), "BaseHeadOffsetAt")]
public class HeadOffsetPatch
{
public static void Postfix(PawnRenderer __instance, Pawn ___pawn, Rot4 rotation, ref Vector3 __result)
{
var comp = ___pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
}
}
}

View File

@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using RimWorld;
using HarmonyLib;
using UnityEngine;
namespace SizedApparel
{
/*
[HarmonyPatch(typeof(PawnRenderer), "BaseHeadOffsetAt")]
[HarmonyAfter(new string[]
{
"rimworld.erdelf.alien_race.main"
})]
*/
//TODO
public static class PawnRenderer_BaseHeadOffsetAt_Patch_For_Pose
{
[HarmonyPostfix]
public static void BaseHeadOffsetAtPostfix_Post(PawnRenderer __instance, Rot4 rotation, ref Vector3 __result, ref Pawn ___pawn)
{
return;
/*
var comp = ___pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return;
if (comp.customPose == null)
return;
SizedApparelPoseDef poseDef = DefDatabase<SizedApparelPoseDef>.GetNamed(comp.customPose);
if (poseDef == null)
return;
Rot4Offsets? headOffset = new Rot4Offsets();
string bodyType = ___pawn.story?.bodyType?.defName;
if (bodyType == null)
{
bodyType = "default";
headOffset = poseDef.headOffset.FirstOrDefault(b => b.bodyType.ToLower() == "default" | b.bodyType.ToLower() == "null").offsets;
}
else
{
headOffset = poseDef.headOffset.FirstOrDefault(b => b.bodyType.ToLower() == bodyType.ToLower()).offsets;
}
if (headOffset == null)
return;
*/
//headOffset.
//TODO: Mesh Based Scaled Offset
//__result = __result + headOffset;
return;
}
}
public class SizedApparelPoseSetDef : Def
{
public List<SizedApparelPose> poses;
}
public class PoseDef : Def
{
}
public class SizedApparelPose
{
//public string poseName; use defName as PoseName
public SizedApparelBodyPartOf targetBodyPart = SizedApparelBodyPartOf.Torso;
//public List<BodyTypeAndOffset> headOffset;
}
}

View File

@ -0,0 +1,37 @@
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 rjw;
namespace SizedApparel
{
[HarmonyPatch(typeof(PawnGraphicSet), "CalculateHairMats")]
public static class CalculateHairMatsPatch
{
public static void Postfix()
{
}
}
public class PubicHairDef : StyleItemDef
{
}
class SizedApparelPubicHair
{
}
public static class IdeoStyleTackerPatch
{
}
}

View File

@ -0,0 +1,856 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity;
using UnityEngine;
using Verse;
namespace SizedApparel
{
//include Human, set humanlike's custom setting
//Only few settings are allow in ModSetting. other needs to be set in Def (xml) file
public class AlienRaceSetting : IExposable
{
public string raceName = null;
public bool overrideDef = false;
public bool asHuman = false;
public float drawMinAge = -1; //pawn's Biological age. -1 to ignore.
public AlienRaceSetting(string raceName)
{
this.raceName = raceName;
}
public AlienRaceSetting()
{
}
public void ExposeData()
{
Scribe_Values.Look(ref raceName, "raceName", null);
Scribe_Values.Look(ref overrideDef, "overrideDef", false);
Scribe_Values.Look(ref asHuman, "asHuman", false);
Scribe_Values.Look(ref drawMinAge, "drawMinAge", -1);
}
//public int ageYoung = -1; //use receDefName_young folder. -1 to ignore
//public int ageOld = -1; //use raceDefName_old folder. -1 to ignore.
}
public class SizedApparelSettings : ModSettings
{
public static bool Debug = false;
public static bool DetailLog = false;
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 useGenderSpecificTexture = true;
public static bool matchBodyTextureToMinimumApparelSize = true;//for avoiding breasts cliping
public static bool useBreastSizeCapForApparels = true;
public static bool DontReplaceBodyTextureOnNude = true;
//public static bool DontReplaceBodyTextureOnUnsupported = true;
//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.
public static bool drawBodyParts = true;//for user who not use rimnudeworld
public static bool drawBreasts = true;
public static bool drawPenis = true;
public static bool drawVagina = true;
public static bool drawMuscleOverlay = true;
public static bool drawHips = true;//TODO
public static bool drawAnus = true;
public static bool drawBelly = false;//TODO
public static bool drawUdder = false;//TODO
public static bool drawPubicHair = true;
public static bool hideBallOfFuta = false;
public static bool hidePenisOfMale = false;
public static bool matchBreastToSupportedApparelSize = true;//for avoiding breasts cliping
public static bool useBodyPartsVariation = true;
public static bool showBodyPartsVariation = true;
public static bool breastsPhysics = false;
//RimNudeWorld
public static bool drawSizedApparelBreastsOnlyWorn = false;
public static bool hideRimNudeWorldBreasts = false;//disable rimnudeworld breasts.
[Obsolete]
public static bool useUnsupportedBodyTexture = true;//bodytexture when wearing unsupported apparel.
public static bool useSafeJobBreasts = true;
public static bool changeBodyType;
public static bool fatToFemale;
public static bool hulkToThin;
public static bool onlyForFemale = true;
public static bool useRandomSize = true;//for user who play without rimjobworld
public static float randomSizeMin = 0.01f;
public static float randomSizeMax = 1.01f;
//Lagacy Variable
public static bool useTitanic = true;
public static bool useColossal = true;
public static bool useGargantuan = true;
public static bool useMassive = true;
public static bool useEnormous = true;
public static bool useHuge = true;
public static bool useLarge = true;
public static bool useAverage = true;
public static bool useSmall = true;
public static bool useTiny = true;
public static bool useNipples = true;
//Alien Race Settings
[Obsolete]
public static bool UnsupportedRaceToUseHumanlike = false;
public static List<string> alienRaces = new List<string>();
public static List<string> alienRacesAllowHumanlikTextures = new List<string>(); //This Value Will be Saved and loaded
public static string alienRaceSearch = "";
public static Vector2 alienRacesListScrollPos;
public static List<AlienRaceSetting> alienRaceSettings = new List<AlienRaceSetting>();
//Force All Apparel as supported
public static bool ForcedSupportApparel = false;
public static bool getUseSettingFromIndex(int target)
{
if (target < 0)
return false;
else if (target == 0)
return useNipples;
else if (target == 1)
return useTiny;
else if (target == 2)
return useSmall;
else if (target == 3)
return useAverage;
else if (target == 4)
return useLarge;
else if (target == 5)
return useHuge;
else if (target == 6)
return useEnormous;
else if (target == 7)
return useMassive;
else if (target == 8)
return useGargantuan;
else if (target == 9)
return useColossal;
else if (target == 10)
return useTitanic;
else
return false;
}
public static bool useUnderBreasts = true;
public static float UnderBreastsOffset = -0.0013f;
public override void ExposeData()
{
Scribe_Values.Look(ref Debug, "Debug", false);
Scribe_Values.Look(ref DetailLog, "DetailLog", false);
Scribe_Values.Look(ref autoClearCacheOnWriteSetting, "autoClearCacheOnWriteSetting", true);
//force to use it. this is important thing.
//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 useGenderSpecificTexture, "useGenderSpecificTexture", true);
Scribe_Values.Look(ref matchBodyTextureToMinimumApparelSize, "matchBodyTextureToMinimumApparelSize", true);
Scribe_Values.Look(ref matchBreastToSupportedApparelSize, "matchBreastToSupportedApparelSize", true);
//Unsurpported to forced Surpported
//Scribe_Values.Look(ref UnsupportedRaceToUseHumanlike, "UnsupportedRaceToUseHumanlike", false);
Scribe_Values.Look(ref ForcedSupportApparel, "ForcedSupportApparel", false);
Scribe_Collections.Look<AlienRaceSetting>(ref alienRaceSettings, "alienSettings", LookMode.Deep);
if (Scribe.mode == LoadSaveMode.LoadingVars)
{
if (alienRaceSettings == null)
{
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(!alienRaceSettings.NullOrEmpty())
alienRaceSettings.RemoveAll((AlienRaceSetting x) => string.IsNullOrEmpty(x.raceName));
}
Scribe_Values.Look(ref useUnsupportedBodyTexture, "useUnsupportedBodyTexture", true);
Scribe_Values.Look(ref DontReplaceBodyTextureOnNude, "DontReplaceBodyTextureOnNude", false);
Scribe_Values.Look(ref hideRimNudeWorldBreasts, "hideRimNudeWorldBreasts", false);
Scribe_Values.Look(ref useSafeJobBreasts, "useSafeJobBreasts", true);
Scribe_Values.Look(ref useRandomSize, "useRandomSize", true);
Scribe_Values.Look(ref randomSizeMin, "randomSizeMin", 0.01f);
Scribe_Values.Look(ref randomSizeMax, "randomSizeMax", 1.01f);
Scribe_Values.Look(ref drawBodyParts, "drawBodyParts", true);
Scribe_Values.Look(ref useBodyPartsVariation, "useBodyPartsVariation", true); // forse true for now. TODO
Scribe_Values.Look(ref showBodyPartsVariation, "showBodyPartsVariation", true);
Scribe_Values.Look(ref drawMuscleOverlay, "drawMuscleOverlay", true);
Scribe_Values.Look(ref drawBreasts, "drawBreasts", true);
Scribe_Values.Look(ref drawSizedApparelBreastsOnlyWorn, "drawSizedApparelBreastsOnlyWorn", false);
Scribe_Values.Look(ref drawPenis, "drawPenis", true);
Scribe_Values.Look(ref drawVagina, "drawVagina", true);
Scribe_Values.Look(ref drawAnus, "drawAnus", true);
Scribe_Values.Look(ref drawUdder, "drawUdder", true);
Scribe_Values.Look(ref drawBelly, "drawBelly", true);
Scribe_Values.Look(ref drawPubicHair, "drawPubicHair", true);
//force to draw all size type
/*
Scribe_Values.Look(ref useTitanic, "useTitanic", true);
Scribe_Values.Look(ref useColossal, "useColossal", true);
Scribe_Values.Look(ref useGargantuan, "useGargantuan", true);
Scribe_Values.Look(ref useMassive, "useMassive", true);
Scribe_Values.Look(ref useEnormous, "useEnormous", true);
Scribe_Values.Look(ref useHuge, "useHuge", true);
Scribe_Values.Look(ref useLarge, "useLarge", true);
Scribe_Values.Look(ref useAverage, "useAverage", true);
Scribe_Values.Look(ref useSmall, "useSmall", true);
Scribe_Values.Look(ref useTiny, "useTiny", true);
Scribe_Values.Look(ref useNipples, "useNipples", true);
*/
Scribe_Values.Look(ref useUnderBreasts, "useUnderBreasts",true);
Scribe_Values.Look(ref UnderBreastsOffset, "UnderBreastsOffset", -0.0013f);
//TODO: Humanlike Setting Per Race
//Scribe_Values.Look(ref alienRacesAllowHumanlikTextures, "alienRacesAllowHumanlikTextures");
//BreastsPhysics
Scribe_Values.Look(ref breastsPhysics, "breastsPhysics", false);
base.ExposeData();
}
}
public class SizedApparelMod : Mod
{
SizedApparelSettings settings;
private static Vector2 ScrollPosL = Vector2.zero;
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()
{
base.WriteSettings();
if(SizedApparelSettings.autoClearCacheOnWriteSetting)
ClearCache();
}
public static void CheckAndLoadAlienRaces()
{
if(alienDefList == null)
alienDefList = new List<string>();
if (true)//alienDefList.Count == 0
{
IEnumerable<ThingDef> HumanlikeRaces;
HumanlikeRaces = DefDatabase<ThingDef>.AllDefs.Where(b => b.race?.Humanlike == true);
foreach (ThingDef raceDef in HumanlikeRaces)
{
//Default Value Is True
alienDefList.Add(raceDef.defName);
}
}
}
public static void ClearCache(bool clearPawnGraphicSet = true)
{
SizedApparelsDatabase.ClearAll();
if (Find.CurrentMap != null)
{
foreach (Pawn pawn in Find.CurrentMap.mapPawns.AllPawns)
{
if (pawn == null)
continue;
var comp = pawn.GetComp<ApparelRecorderComp>();
if (comp != null)
{
comp.UpdateRaceSettingData();
comp.SetDirty(clearPawnGraphicSet,true,true,true);
}
}
}
}
public SizedApparelMod(ModContentPack content) : base(content)
{
this.settings = GetSettings<SizedApparelSettings>();
}
public override void DoSettingsWindowContents(Rect inRect)
{
const float alienRaceSettingHeight = 120;
//CheckAndLoadAlienRaces();
Listing_Standard listingStandard = new Listing_Standard();
//Rect rect = new Rect(0f, 0f, inRect.width, 950);
//Rect rect = inRect.ExpandedBy(0.9f);
Rect leftRect = new Rect(inRect.position, new Vector2(inRect.width / 2, inRect.height));
Rect rightRect = new Rect(inRect.position + new Vector2(inRect.width / 2,0), new Vector2(inRect.width / 2, inRect.height));
//rect.xMax *= 0.9f;
//leftRect = leftRect.ContractedBy(10f);
rightRect = rightRect.ContractedBy(10f);
Rect scrollRect = new Rect(0, 0, leftRect.width - 30f, Math.Max(leftRect.height + (float)alienDefList.Count* alienRaceSettingHeight, 1f));
Widgets.BeginScrollView(leftRect, ref ScrollPosL, scrollRect, true);
leftRect = new Rect(leftRect.x, leftRect.y, leftRect.width - 30f, leftRect.height + Math.Max((float)alienDefList.Count * alienRaceSettingHeight, 1f) + 250f);
listingStandard.Begin(leftRect);
listingStandard.maxOneColumn = true;
listingStandard.CheckboxLabeled("Debug Log", ref SizedApparelSettings.Debug, "Debug logs.\nDefault: false");
if (SizedApparelSettings.Debug)
{
listingStandard.CheckboxLabeled("Debug Log (Detail)", ref SizedApparelSettings.DetailLog, "Debug logs for checking missing textures.\nDefault: false");
}
listingStandard.GapLine(1f);
listingStandard.CheckboxLabeled("Auto Clear Cache On Close Setting", ref SizedApparelSettings.autoClearCacheOnWriteSetting, "Auto clear cache data to apply Setting.\nDefault: true");
if(SizedApparelSettings.autoClearCacheOnWriteSetting == false)
{
listingStandard.Label("If you changed options, try Clear Cache to apply. Some options may need to restart");
if (listingStandard.ButtonTextLabeled("Clear Cache", "Press If you changed Option."))//\n do not push unless you really need. \n if this button still not work. reload savefile. if still not work, reload rimworld"
{
ClearCache();
}
if (listingStandard.ButtonTextLabeled("RandomPreCache", "15 sec ~ 2 min"))
{
SizedApparelsDatabase.RandomPreCacheForApparels();
SizedApparelsDatabase.RandomPreCacheForBodyParts();
}
}
listingStandard.Gap();
listingStandard.GapLine();
/*
listingStandard.Label("Optimization",-1,"");
//listingStandard.CheckboxLabeled("Debug Log", ref SizedApparelSettings.Debug, "Debug logs.\nDefault: false");
listingStandard.Gap(8);
listingStandard.Label("no more optimization setting yet.\n It's hardly optimized already :)", -1, "");
listingStandard.GapLine(5f);
*/
//listingStandard.CheckboxLabeled("Use Breast Size Cap from Apparels(recommended: true)", ref SizedApparelSettings.useBreastSizeCapForApparels, "unite breast size from apparels. Smallest value will be used.\nIf you change this option, you need to redress Pawn\nDefault: true");
//listingStandard.BeginScrollView(rect, ref ScrollPos, ref rect);
//listingStandard.Label("Body(Torso)Texture Option", -1, "");
//listingStandard.CheckboxLabeled("use Body (Torso) Texture", ref SizedApparelSettings.useBodyTexture, "change body texture if the pawn is wearing supported apparels only.\nIt may override bodytexture you use.\nIf you use rimnudeworld, don't use this option.\nDefault: false");
//if (SizedApparelSettings.useBodyTexture == true)
//{
// listingStandard.CheckboxLabeled(" use unsupportedApparel Body Texture", ref SizedApparelSettings.useUnsupportedBodyTexture, "Use \"_UnsupportedApparel\" Body Texture when pawn is wearing unsupported apparel.\nIf this option is false, the body will be default texture.\nDefault: true");
// listingStandard.CheckboxLabeled(" Match BodyTexture To Minimum ApparelSize", ref SizedApparelSettings.matchBodyTextureToMinimumApparelSize, "Avoid Clipping When breasts bigger than supported sized apparel.\nDefault: true");
//
//}
listingStandard.Gap(8);
listingStandard.Label("Other Mod Compatibility");
listingStandard.Gap(8);
listingStandard.CheckboxLabeled(" Force ignore unsupported apparel", ref SizedApparelSettings.ForcedSupportApparel, "It may have clipping issue from unsupported parts.\nDefault: false");
/*
if(SizedApparelPatch.DubsApparelTweaksActive == true)
{
listingStandard.Label(" Dubs Apparel Tweaks Patched! (may not work in 1.3)");
listingStandard.Gap(8);
}*/
//sizeList.EndScrollView(ref rect);
//listingStandard.EndSection(sizeList);
//listingStandard.EndScrollView(ref sizeScrollRect);
listingStandard.Label("Non RimJobWorld Compatibility (wip)", -1, "User Who play without RimJobWorld");
if (!SizedApparelPatch.RJWActive)
{
if (SizedApparelPatch.SJWActive)
{
listingStandard.Label(" SafeJobWorld is Actived ", -1, "");
listingStandard.CheckboxLabeled(" use SafeJobWorld's Breasts(Hidden to player but it exist)", ref SizedApparelSettings.useSafeJobBreasts, "use BreastsSize from SJW.\nDefault: true");
}
if(SizedApparelPatch.SJWActive? SizedApparelSettings.useSafeJobBreasts==false : true)
{
listingStandard.CheckboxLabeled(" use Random Breasts Size(not yet work)", ref SizedApparelSettings.useRandomSize, "use breasts random size for pawn.\nDefault: true");
listingStandard.Label(" random Size Min: " + SizedApparelSettings.UnderBreastsOffset.ToString(), -1, "Defualt: 0.01");
SizedApparelSettings.randomSizeMin = listingStandard.Slider(SizedApparelSettings.randomSizeMin, 0f, 2f);
listingStandard.Label(" random Size Max: " + SizedApparelSettings.UnderBreastsOffset.ToString(), -1, "Defualt: 1.00");
SizedApparelSettings.randomSizeMax = listingStandard.Slider(SizedApparelSettings.randomSizeMax, SizedApparelSettings.randomSizeMin, 2f);
}
if (SizedApparelPatch.SJWActive == false)
{
}
}
else
{
//RimJobWorld is Actived
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.Label("AlienRace Compatibility (wip)", -1, "");
//listingStandard.CheckboxLabeled(" Unsupported race render as \"Humanlike\" ", ref SizedApparelSettings.UnsupportedRaceToUseHumanlike, "If unchecked, unsupported humanlike race will not be patched!\nIf you change this option, you need to restart rimworld or clear cache\nDefault: false");
if (SizedApparelPatch.alienRaceActive)
{
listingStandard.Label(" AlienRace is Actived ", -1, "");
//listingStandard.CheckboxLabeled("Force to use Human's BodyParts for unsuported Alien races", null, "");
//TODO: Allow Humanlike Settings Per Races
/*
SizedApparelSettings.alienRaces = SizedApparelsDatabase.GetAlienRacesDefNames();
listingStandard.Label("Alien Race Settings", -1f, null);
SizedApparelSettings.alienRaceSearch = listingStandard.TextEntry(SizedApparelSettings.alienRaceSearch, 1);
RaceSettings(new Rect(0f, 60f, 16f, 300f), SizedApparelSettings.alienRaces, ref SizedApparelSettings.alienRacesAllowHumanlikTextures, null);
listingStandard.Gap(listingStandard.verticalSpacing);
*/
/*
Widgets.BeginScrollView(aliensRect, ref ScrollPos, leftRect);
List<bool> alienSettingListLoc = new List<bool>();
foreach(var item in SizedApparelsDatabase.AlienRaceUseHumanlike)
{
//Widgets.CheckboxLabeled(aliensRect, item.Key, ref);
}
Widgets.EndScrollView();
*/
}
else
{
listingStandard.Label(" AlienRace is not Actived ", -1, "");
}
if (alienDefList.NullOrEmpty())
CheckAndLoadAlienRaces();
float h = alienDefList.Count * alienRaceSettingHeight;
Listing_Standard Race_ListingStandard = listingStandard.BeginSection(h);
foreach (var raceName in alienDefList)
{
Race_ListingStandard.Label(raceName);
Race_ListingStandard.GapLine(1f);
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(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");
raceSetting.drawMinAge = Mathf.Round(Race_ListingStandard.Slider(raceSetting.drawMinAge, raceSetting.drawMinAge <= 100 ? -1: 100, raceSetting.drawMinAge >= 100 ? 1000 : 100));
Race_ListingStandard.Gap();
}
listingStandard.EndSection(Race_ListingStandard);
Widgets.EndScrollView();
//listingStandard.Gap(alienSettingHeight);
listingStandard.Gap(8);
listingStandard.GapLine(4f);
listingStandard.Gap(8);
listingStandard.Gap(8);
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");
if (SizedApparelPatch.rimNudeWorldActive)
{
listingStandard.Label(" RimNudeWorld is On!. Please check SizedApparel's Body parts render option", -1, "disable all body parts render except the breasts. and set it to only worn option true");
listingStandard.CheckboxLabeled(" use Sized Apparel Breasts graphic when worn.", ref SizedApparelSettings.drawSizedApparelBreastsOnlyWorn, "use Sized Apparel's breasts render for breasts of apparel. it will be hidden when the pawn is naked and rimnudeworld will handle nude. \ndefault = true;");
//listingStandard.CheckboxLabeled(" Hide RimNudeWorld Breasts Addon", ref SizedApparelSettings.hideRimNudeWorldBreasts, "For User Who Use Body(Torso) Texture option, remove double drawn breasts.\nYou can use this option as only using Rimnudeworld genital and else without breasts.\nDefault: False");
if (listingStandard.ButtonTextLabeled("Easy Setting Button", "Apply Rimnude Setting"))
{
SizedApparelSettings.drawSizedApparelBreastsOnlyWorn = true;
SizedApparelSettings.useBodyTexture = false;
SizedApparelSettings.drawBreasts = true;
SizedApparelSettings.drawPenis = false;
SizedApparelSettings.drawVagina = false;
SizedApparelSettings.drawAnus = false;
SizedApparelSettings.drawBelly = false;
SizedApparelSettings.drawPubicHair = false;
}
if (false)//SizedApparelSettings.hideRimNudeWorldBreasts == false
{
//listingStandard.CheckboxLabeled(" match Breast Texture To Minimum ApparelSize (not work)", ref SizedApparelSettings.matchBreastTextureToMinimumApparelSize, "Avoid Clipping When breasts bigger than supported sized apparel.\nDefault: true");
//listingStandard.CheckboxLabeled(" use Under Breasts addon (RimNudeWorld)(not recomanded)", ref SizedApparelSettings.useUnderBreasts, "draw breasts under apparel.");
listingStandard.Label(" Under Breasts Offset: " + SizedApparelSettings.UnderBreastsOffset.ToString(), -1, "offset from defeault layer offset. Defualt: -0.0013");
SizedApparelSettings.UnderBreastsOffset = listingStandard.Slider(SizedApparelSettings.UnderBreastsOffset, -0.025f, 0.025f);
}
if (SizedApparelSettings.useBodyTexture)
{
}
}
else
{
listingStandard.Label(" RimNudeWorld is not Actived ", -1, "");
if (listingStandard.ButtonTextLabeled("Easy Setting Button", "Apply Non Rimnude Setting"))
{
SizedApparelSettings.drawSizedApparelBreastsOnlyWorn = false;
SizedApparelSettings.useBodyTexture = true;
SizedApparelSettings.drawBreasts = true;
SizedApparelSettings.drawPenis = true;
SizedApparelSettings.drawVagina = true;
SizedApparelSettings.drawAnus = 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();
////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.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("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.GapLine(5);
listingStandard.CheckboxLabeled("Draw Body Parts", ref SizedApparelSettings.drawBodyParts, "Draw Breasts..etc. when the pawn is wearing supported apparels. \nDefault: true");
if (SizedApparelSettings.drawBodyParts)
{
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 Breasts", ref SizedApparelSettings.drawBreasts, "this option is why this mod exist.\nDefault: true");
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(" 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 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 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 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.Gap();
//listingStandard.CheckboxLabeled(" Use Body Part Variation", ref SizedApparelSettings.useBodyPartsVariation, "Use graphic variation such as inverted nipple.\nDefault: true");
//listingStandard.CheckboxLabeled(" Show Body Part Variaion Button(WIP)", ref SizedApparelSettings.showBodyPartsVariationIcon, "WIP. Not work for now.\nDefault: true");
listingStandard.Gap();
//listingStandard.CheckboxLabeled(" Use BodyPart Variation", ref SizedApparelSettings.useBodyPartsVariation, ""); //TODO
listingStandard.CheckboxLabeled(" Show BodyPart Variation Description", ref SizedApparelSettings.showBodyPartsVariation, "Show more info in bodyparts that sized apparel added. such as inverted nipple");
}
/*
listingStandard.Gap(4);
listingStandard.Label("Breast Size Toggle Option", -1, "default option is setted for RimnudeWorld. you should not change this unless you have the textures for that size.");
listingStandard.Gap(4);
//Rect sizeScrollRect = new Rect(inRect.position+ new Vector2(0, listingStandard.CurHeight), inRect.size/3);
//Vector2 sizeScrollPosition = new Vector2(0.9f, 0.5f);
//listingStandard.BeginScrollView(sizeScrollRect, ref sizeScrollPosition, ref sizeScrollRect);
//Listing_Standard sizeList = listingStandard.BeginSection_NewTemp(150);
//sizeList.BeginScrollView(rect, ref ScrollPos, ref rect);
listingStandard.CheckboxLabeled(" use Nipples", ref SizedApparelSettings.useNipples, "use Nipples(Flat breasts) Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Tiny", ref SizedApparelSettings.useTiny, "use Tiny breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Small", ref SizedApparelSettings.useSmall, "use Small breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Average", ref SizedApparelSettings.useAverage, "use Average breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Large", ref SizedApparelSettings.useLarge, "use Large breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Huge", ref SizedApparelSettings.useHuge, "use Huge breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Enormous", ref SizedApparelSettings.useEnormous, "use Enormous breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Massive", ref SizedApparelSettings.useMassive, "use Massive breasts Sized Apparel.\nDefault: true");
listingStandard.CheckboxLabeled(" use Gargantuan", ref SizedApparelSettings.useGargantuan, "use Gargantuan 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");
*/
Widgets.EndScrollView();
listingStandard.End();
//listingStandard.EndScrollView(ref rect);
base.DoSettingsWindowContents(inRect);
}
public override string SettingsCategory()
{
return "Sized Apparel for RJW";
}
//copy from BnC
public static bool Contai(string source, string toCheck, StringComparison comp)
{
return source != null && source.IndexOf(toCheck, comp) >= 0;
}
//copy from BnC
public static void RaceSettings(Rect rect, List<string> label, ref List<string> alienRacesToAllowHumanlikes, string tooltip = null)
{
bool flag = !GenText.NullOrEmpty(tooltip);
if (flag)
{
bool flag2 = Mouse.IsOver(rect);
if (flag2)
{
Widgets.DrawHighlight(rect);
}
TooltipHandler.TipRegion(rect, tooltip);
}
bool flag3 = GenList.NullOrEmpty<string>(alienRacesToAllowHumanlikes);
if (flag3)
{
alienRacesToAllowHumanlikes = new List<string>();
}
Listing_Standard listing_Standard = new Listing_Standard();
Rect rect2 = rect;
Rect rect3 = rect;
rect3.height = (float)label.Count * 30f;
rect3.width -= 16f;
Widgets.BeginScrollView(rect2, ref SizedApparelSettings.alienRacesListScrollPos, rect3, true);
listing_Standard.Begin(rect3);
for (int i = 0; i < SizedApparelSettings.alienRaces.Count; i++)
{
bool flag4 = GenList.NullOrEmpty<string>(alienRacesToAllowHumanlikes) || !alienRacesToAllowHumanlikes.Contains(label[i]);
bool flag5 = SizedApparelSettings.alienRaceSearch == null || Contai(SizedApparelSettings.alienRaces[i], SizedApparelSettings.alienRaceSearch.ToLower(), StringComparison.OrdinalIgnoreCase);
if (flag5)
{
WidgetRow widgetRow = new WidgetRow(rect.x,listing_Standard.CurHeight, UIDirection.RightThenUp, 99999f, 1f);
widgetRow.Label(label[i], rect.width * 0.8f, null, -1f);
bool flag6 = label[i] != "Human";
if (flag6)
{
widgetRow.ToggleableIcon(ref flag4, TexButton.IconBook, "Use Shared Body Parts texture (\"Humanlike\" body plarts).\nIf Unchecked, the race will use race's owned texture. \n If the race not have supported textures, try this option.", null, null);
}
else
{
//TODO: should I let human can use humanlike textures?
widgetRow.Icon(TexButton.IconBook, "Human Race is forced to use \"Human\" Textures. not \"Humanlike\"");
}
/*
bool flag7 = widgetRow.ButtonIcon(TexButton.ToggleTweak, "Allow Humanlike Body parts rendering from Sized Apparel(NOT RIMNUDE!)", null, null, null, true, -1f);
if (flag7)
{
bool flag8 = Current.Game != null;
if (flag8)
{
bool flag9 = !Find.WindowStack.TryRemove(typeof(RaceEditorWindow), true);
if (flag9)
{
RaceSettings sizeSettings = RaceUtility.GetSizeSettings(DefDatabase<ThingDef>.GetNamed(label[i], false));
RaceEditorWindow raceEditorWindow = new RaceEditorWindow();
raceEditorWindow.alienRace = DefDatabase<ThingDef>.GetNamed(label[i], true);
bool flag10 = sizeSettings != null;
if (flag10)
{
raceEditorWindow.raceSettings = sizeSettings;
raceEditorWindow.headOffset = sizeSettings.headOffset;
raceEditorWindow.sizeModifier = sizeSettings.sizeModifier;
raceEditorWindow.hairSizeModifier = sizeSettings.hairSizeModifier;
raceEditorWindow.headSizeModifier = sizeSettings.headSizeModifier;
raceEditorWindow.scaleChild = sizeSettings.scaleChild;
raceEditorWindow.scaleTeen = sizeSettings.scaleTeen;
}
Find.WindowStack.Add(raceEditorWindow);
}
}
else
{
Messages.Message("You need to be in-game to open size editor", MessageTypeDefOf.RejectInput, true);
}
}
*/
bool flag11 = !flag4;
if (flag11)
{
bool flag12 = !alienRacesToAllowHumanlikes.Contains(label[i]);
if (flag12)
{
alienRacesToAllowHumanlikes.Add(label[i]);
}
}
else
{
bool flag13 = alienRacesToAllowHumanlikes.Contains(label[i]);
if (flag13)
{
alienRacesToAllowHumanlikes.Remove(label[i]);
}
}
listing_Standard.Gap(30f);
}
}
listing_Standard.End();
Widgets.EndScrollView();
}
}
}

View File

@ -0,0 +1,298 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using Verse;
using Verse.Sound;
using HarmonyLib;
using UnityEngine;
using rjw;
using System.Reflection;
using System.Reflection.Emit;
namespace SizedApparel
{
[HarmonyPatch(typeof(Dialog_StylingStation), "DrawTabs")]
public class SizedApparelStyleStationDrawTabsPatch
{
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)
{
case (Dialog_StylingStation.StylingTab)24:
//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;
default:
return;
}
}
//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)
{
if (!SizedApparelSettings.drawPubicHair)
return;
var curTabField = AccessTools.Field(typeof(Dialog_StylingStation), "curTab");
tabs.Add(new TabRecord("PubicHair".Translate().CapitalizeFirst(), delegate ()
{
curTabField.SetValue(stylingStation, (Dialog_StylingStation.StylingTab)24);
}, (Dialog_StylingStation.StylingTab)curTabField.GetValue(stylingStation) == (Dialog_StylingStation.StylingTab)24));
}
static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
{
bool isHair = false;
MethodInfo tabAdd = AccessTools.DeclaredMethod(typeof(List<TabRecord>),"Add");
foreach (var instruction in instructions)
{
if(instruction.opcode == OpCodes.Ldstr)
{
if (instruction.OperandIs("Hair"))
isHair = true;
else
isHair = false;
}
if (isHair && instruction.opcode == OpCodes.Callvirt && instruction.OperandIs(tabAdd))
{
yield return instruction;//finish add hairTab
yield return new CodeInstruction(OpCodes.Ldarg_0);
yield return new CodeInstruction(OpCodes.Ldarg_0);
//Log.Message("this");
yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(Dialog_StylingStation),"tabs"));
//Log.Message("tabs");
//yield return new CodeInstruction(OpCodes.Ldarg_0);
//Log.Message("this");
//yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(Dialog_StylingStation), "curTab"));
//Log.Message("curtab");
yield return new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(SizedApparelStyleStationDrawTabsPatch), "AddPubicHairTab"));
//Log.Message("call");
//yield return new CodeInstruction(OpCodes.Ldarg_0);
//yield return new CodeInstruction(OpCodes.Ldarg_0);
//yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(Dialog_StylingStation), "tabs"));
//yield return new CodeInstruction(OpCodes.Ldstr,"PubicHair".Translate().CapitalizeFirst());
//yield return new CodeInstruction(OpCodes.Ldarg_0);
//yield return new CodeInstruction(OpCodes.Ldarg_0);
isHair = false;
}
else
yield return instruction;
}
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

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B06471B4-4C6C-478B-B94D-71CC53ABD24D}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SizedApparel</RootNamespace>
<AssemblyName>SizedApparelforRJW</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Assemblies\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Assemblies\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>..\..\..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="HugsLib">
<HintPath>..\..\..\..\..\..\..\workshop\content\294100\818773962\v1.3\Assemblies\HugsLib.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="RimNudeWorld">
<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>
</Reference>
<Reference Include="RJW">
<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>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="UnityEngine.CoreModule">
<HintPath>..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.IMGUIModule">
<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>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AlienRaceSupport.cs" />
<Compile Include="Graphic_BodyParts.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="SizedApparelApparelBuilder.cs" />
<Compile Include="SizedApparelBodyPart.cs" />
<Compile Include="SizedApparelBodyPartDef.cs" />
<Compile Include="SizedApparelBodyPartDetail.cs" />
<Compile Include="SizedApparelBodyPartEditor.cs" />
<Compile Include="SizedApparelComp.cs" />
<Compile Include="HarmonyPatches.cs" />
<Compile Include="SizedApparelDef.cs" />
<Compile Include="Patch-DubsApparelPatch.cs" />
<Compile Include="SizedApparelMain.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SizedApparelPoseSet.cs" />
<Compile Include="SizedApparelPubicHair.cs" />
<Compile Include="Patch-RimJobWorld.cs" />
<Compile Include="Patch-RimNudeWorld.cs" />
<Compile Include="SizedApparelsDatabase.cs" />
<Compile Include="SizedApparelSettingcs.cs" />
<Compile Include="SizedApparelStyleStationPatch.cs" />
<Compile Include="SizedApparelTexturePointDef.cs" />
<Compile Include="SizedApparelUtility.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.1000
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SizedApparelforRJW", "SizedApparelforRJW.csproj", "{B06471B4-4C6C-478B-B94D-71CC53ABD24D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B06471B4-4C6C-478B-B94D-71CC53ABD24D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B06471B4-4C6C-478B-B94D-71CC53ABD24D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B06471B4-4C6C-478B-B94D-71CC53ABD24D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B06471B4-4C6C-478B-B94D-71CC53ABD24D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CF3F9836-AE71-4CAE-8FFC-72BEB9FFBA91}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,551 @@
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 rjw;
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 struct BodyGraphicKey
{
}
public static void LoadPreDefinedData()
{
}
public struct SizedApparelDatabaseKey
{
public string pathWithoutSizeIndex; // Do Not Include Size Data to path! bodytype could be included
public string raceName;
public string bodyTypeName;
public Gender gender;
public string hediffName;
public int targetSize;
public bool isHorny;
public string customPose;
public string variation;
public SizedApparelDatabaseKey(string path, string race, string bodyType = null, Gender genderInput = Gender.None , string hediff = null, int size = -1, bool horny = false, string customPose = null, string variation = null)
{
this.pathWithoutSizeIndex = path;
this.raceName = race;
this.bodyTypeName = bodyType;
this.gender = genderInput;
this.hediffName = hediff;
this.targetSize = size;
this.isHorny = horny;
this.customPose = customPose;
this.variation = variation;
}
}
public struct SizedApparelDatabaseKeyComparer : IEqualityComparer<SizedApparelDatabaseKey>
{
public bool Equals(SizedApparelDatabaseKey x, SizedApparelDatabaseKey y)
{
if (x.targetSize != y.targetSize)
return false;
return true && (x.pathWithoutSizeIndex == y.pathWithoutSizeIndex) && (x.bodyTypeName == y.bodyTypeName) && (x.raceName == y.raceName)&& (x.gender == y.gender) && (x.hediffName == y.hediffName) && (x.isHorny == y.isHorny) && (x.customPose == y.customPose) && (x.variation == y.variation);
}
public int GetHashCode(SizedApparelDatabaseKey obj)
{
return obj.GetHashCode();
}
}
public struct BodyPartDatabaseKey
{
public string raceName;
public string bodyTypeName;
public string hediffName;
public string folderPath;
public Gender gender;
public int targetSize;
public bool isHorny;
public string customPose; // null custom pose as default pose
public string variation; // null variation as default graphic
public BodyPartDatabaseKey(string race, string bodyType = null, string hediff = null, string path = null, Gender pawnGender = Gender.None, int size = -1, bool horny = false, string customPose = null, string variation = null)
{
this.raceName = race;
this.bodyTypeName = bodyType;
this.hediffName = hediff;
this.folderPath = path;
this.gender = pawnGender;
this.targetSize = size;
this.isHorny = horny;
this.customPose = customPose;
this.variation = variation;
}
}
public struct BodyPartDatabaseKeyComparer : IEqualityComparer<BodyPartDatabaseKey>
{
public bool Equals(BodyPartDatabaseKey x, BodyPartDatabaseKey y)
{
if (x.targetSize != y.targetSize)
return false;
return true && (x.raceName == y.raceName) && (x.bodyTypeName == y.bodyTypeName) && (x.hediffName == y.hediffName) && ( x.folderPath == y.folderPath)&& (x.gender == y.gender) && (x.isHorny == y.isHorny) && (x.customPose == y.customPose) && (x.variation == y.variation);
}
public int GetHashCode(BodyPartDatabaseKey obj)
{
return obj.GetHashCode();
}
}
public struct PathAndSize
{
public string pathWithSizeIndex;
public int size;
public bool isUnsupportedHumanlikePath;
public bool isCustomPose;
public string hediffName;
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, string bodytype = null, string raceName = null, SizedApparelTexturePointDef pointsInput = null)
{
this.pathWithSizeIndex = path;
this.size = index;
this.isUnsupportedHumanlikePath = unsupportedHumanlike;
this.isCustomPose = customPose;
this.hediffName = hediff;
this.bodyType = bodytype;
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<SizedApparelDatabaseKey, PathAndSize> SupportedApparelResultPath = new Dictionary<SizedApparelDatabaseKey, PathAndSize>(new SizedApparelDatabaseKeyComparer());
private static Dictionary<BodyPartDatabaseKey, PathAndSize> SupportedBodyPartResultPath = new Dictionary<BodyPartDatabaseKey, PathAndSize>(new BodyPartDatabaseKeyComparer());
private static Dictionary<string, string> SupportedApparelOriginalPath = new Dictionary<string, string>();
//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>();
private static void ResetAlienRaceUseHumanlike()
{
AlienRaceUseHumanlike.Clear();
IEnumerable<ThingDef> HumanlikeRaces;
HumanlikeRaces = DefDatabase<ThingDef>.AllDefs.Where(b =>b.race?.Humanlike == true);
foreach (ThingDef raceDef in HumanlikeRaces)
{
//Default Value Is True
AlienRaceUseHumanlike.Add(raceDef.defName, true);
}
}
[Obsolete]
public static bool GetAlienRaceUseHumanlike(string raceDef)
{
if (AlienRaceUseHumanlike.NullOrEmpty())
{
ResetAlienRaceUseHumanlike();
}
if (AlienRaceUseHumanlike.ContainsKey(raceDef))
return AlienRaceUseHumanlike[raceDef];
return false;
}
public static List<string> GetAlienRacesDefNames()
{
if (AlienRaceUseHumanlike.NullOrEmpty())
{
ResetAlienRaceUseHumanlike();
}
//It must have one or more elements: human.
return AlienRaceUseHumanlike.Keys.ToList();
}
public static void ClearAll()
{
SupportedApparelResultPath.Clear();
SupportedBodyPartResultPath.Clear();
SupportedApparelOriginalPath.Clear();
AlienRaceUseHumanlike.Clear();
}
//Apparels, Bodyparts can be used
public static PathAndSize GetSupportedApparelSizedPath(SizedApparelDatabaseKey key)
{
int currentSize = -1;
float currentSeverity = -1;
return GetSupportedApparelSizedPath(key, out currentSize, out currentSeverity);
}
public static string GetSupportedApparelOriginalPath(string path)
{
string outString;
if (SupportedApparelOriginalPath.TryGetValue(path, out outString))
return outString;
return null;
}
public static Dictionary<string, BodyPartPoint> GetGraphicPoints(string textuerPath)
{
//DefDatabase<>
return null;
}
public static PathAndSize GetSupportedApparelSizedPath(SizedApparelDatabaseKey key, out int indexOut, out float currentSeverityOut)
{
if (SupportedApparelResultPath.ContainsKey(key))
{
if (SizedApparelSettings.Debug)
Log.Message("[Sized Apparel] SizedApparelDataBase::ValidKey: "+ key.pathWithoutSizeIndex);
var value = SupportedApparelResultPath.TryGetValue(key);
indexOut = value.size;
currentSeverityOut = SizedApparelUtility.BreastSizeIndexToSeverity(value.size);
if (SizedApparelSettings.Debug)
Log.Message("[Sized Apparel] SizedApparelDataBase::Result Path: " + value.pathWithSizeIndex);
return value;
}
if (SizedApparelSettings.Debug)
Log.Message(" [Sized Apparel] SizedApparelDataBase::Key Not Found: " + key.pathWithoutSizeIndex);
PathAndSize result;
Graphic sourceGraphic = GraphicDatabase.Get<Graphic_Multi>(key.pathWithoutSizeIndex);
bool flag;
bool customPose = true; //default none pose also custom pose
string hediffResult;
string targetRaceName;
//if (GetAlienRaceUseHumanlike(key.raceName))
//TODO. AlienRaceHumanlike
/*
var pawnDef = DefDatabase<SizedApparelPawnDef>.GetNamed(key.raceName);
if (pawnDef != null)
{
if(pawnDef.isHumanlike)
targetRaceName = "Humanlike";
}
else
targetRaceName = key.raceName;*/
targetRaceName = key.raceName;
Graphic graphic = null;
graphic = SizedApparelUtility.GetSizedApparelGraphic(sourceGraphic, SizedApparelUtility.BreastSizeIndexToSeverity(key.targetSize), out indexOut, out currentSeverityOut, out flag, out hediffResult, targetRaceName, key.hediffName, key.customPose, key.gender);//key.customPose
if(graphic == null && key.gender != Gender.None)
{
//try Genderless
graphic = SizedApparelUtility.GetSizedApparelGraphic(sourceGraphic, SizedApparelUtility.BreastSizeIndexToSeverity(key.targetSize), out indexOut, out currentSeverityOut, out flag, out hediffResult, targetRaceName, key.hediffName, key.customPose, Gender.None);//key.customPose
}
if (key.customPose != null && graphic == null)
{
customPose = false;
graphic = SizedApparelUtility.GetSizedApparelGraphic(sourceGraphic, SizedApparelUtility.BreastSizeIndexToSeverity(key.targetSize), out indexOut, out currentSeverityOut, out flag, out hediffResult , targetRaceName, key.hediffName , null ,key.gender);
if (graphic == null && key.gender != Gender.None)
{
//try Genderless
graphic = SizedApparelUtility.GetSizedApparelGraphic(sourceGraphic, SizedApparelUtility.BreastSizeIndexToSeverity(key.targetSize), out indexOut, out currentSeverityOut, out flag, out hediffResult, targetRaceName, key.hediffName, null, Gender.None);//key.customPose
}
}
//Try Find Different Target Size
if (flag == true)
{
result = new PathAndSize(graphic.path, indexOut, false, customPose, hediffResult, key.bodyTypeName, key.raceName);
SupportedApparelResultPath.SetOrAdd(key, result);
SupportedApparelOriginalPath.SetOrAdd(result.pathWithSizeIndex, key.pathWithoutSizeIndex);
}
else
{
result = new PathAndSize(null, -1);
SupportedApparelResultPath.SetOrAdd(key, result);
SupportedApparelOriginalPath.SetOrAdd(key.pathWithoutSizeIndex, key.pathWithoutSizeIndex);
}
return result;
}
public static PathAndSize GetSupportedBodyPartPath(BodyPartDatabaseKey key, bool isBreast, string folderName, string defaultHediffName)
{
PathAndSize result;
if (SupportedBodyPartResultPath.ContainsKey(key))
return SupportedBodyPartResultPath.TryGetValue(key);
int currentSize = -1;
string hediffResult;
Graphic graphic = null;
//Find Points from result's path
//TODO: Build SizedApparel DataBase separate?
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);
if (graphic != null)
{
result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult, key.bodyTypeName, key.raceName);
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;
}
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);
if (graphic != null)
{
result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult , null, key.raceName);
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;
}
}
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)
{
//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);
return result;
}
if (key.bodyTypeName != null)
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)
{
//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);
return result;
}
//SizedApparelMod.CheckAndLoadAlienRaces();
//HumanLike Search
AlienRaceSetting raceSetting;
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
result = new PathAndSize(null, -1);
SupportedBodyPartResultPath.SetOrAdd(key, result);
return result;
}
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, "Human", key.variation, key.gender);
if (graphic != null)
{
//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);
return result;
}
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, "Human", key.variation, key.gender);
if (graphic != null)
{
//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);
return result;
}
}
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)
{
//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);
return result;
}
if (key.bodyTypeName != null)
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)
{
//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);
return result;
}
//Cannot find Any result
result = new PathAndSize(null, -1);
SupportedBodyPartResultPath.SetOrAdd(key, 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?
}
}
}
}
}
}

Binary file not shown.

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,732 @@
<?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>
<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>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>
<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

@ -0,0 +1,716 @@
<?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>
<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

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- "null" and "default" varName will be no variation. -->
<Defs>
<SizedApparel.SizedApparelBodyPartVariationDef>
<defName>AnusDetail</defName>
<bodyPartName>Anus</bodyPartName>
<variations>
<li>
<!--Default Anus-->
<hediffName>Anus</hediffName>
<varName>
<li>default</li>
<li>Donut</li>
</varName>
</li>
<li>
<!-- <hediffName>SlimeAnus</hediffName> -->
<!-- <varName> -->
<!-- <li>null</li> -->
<!-- <li>InvertedNipple</li> -->
<!-- </varName> -->
</li>
</variations>
</SizedApparel.SizedApparelBodyPartVariationDef>
</Defs>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- "null" and "default" varName will be no variation. -->
<Defs>
<SizedApparel.SizedApparelBodyPartVariationDef>
<defName>BreastDetail</defName>
<bodyPartName>Breasts</bodyPartName>
<variations>
<li>
<!--Default Breasts-->
<hediffName>Breasts</hediffName>
<varName>
<li>default</li>
<li>InvertedNipple</li>
</varName>
</li>
<li>
<!-- <hediffName>SlimeBreasts</hediffName> -->
<!-- <varName> -->
<!-- <li>null</li> -->
<!-- <li>InvertedNipple</li> -->
<!-- </varName> -->
</li>
</variations>
</SizedApparel.SizedApparelBodyPartVariationDef>
</Defs>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- "null" and "default" varName will be no variation. -->
<Defs>
<SizedApparel.SizedApparelBodyPartVariationDef>
<defName>PenisDetail</defName>
<bodyPartName>Penis</bodyPartName>
<variations>
<li>
<!--Default Penis-->
<hediffName>Penis</hediffName>
<varName>
<li>default</li>
<!-- <li>Uncircumcised</li> -->
</varName>
</li>
</variations>
</SizedApparel.SizedApparelBodyPartVariationDef>
</Defs>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- "null" and "default" varName will be no variation. -->
<Defs>
<SizedApparel.SizedApparelBodyPartVariationDef>
<defName>VaginaDetail</defName>
<bodyPartName>Vagina</bodyPartName>
<variations>
<li>
<!--Default Vagina-->
<hediffName>Vagina</hediffName>
<varName>
<li>default</li>
<li>Puffy</li>
</varName>
</li>
</variations>
</SizedApparel.SizedApparelBodyPartVariationDef>
</Defs>

Binary file not shown.

BIN
1.4/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

@ -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>

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