diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f83ffb8 --- /dev/null +++ b/.gitignore @@ -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 diff --git a/1.3/Assemblies/SizedApparelforRJW.dll b/1.3/Assemblies/SizedApparelforRJW.dll index 1a56d6d..45fd0ce 100644 Binary files a/1.3/Assemblies/SizedApparelforRJW.dll and b/1.3/Assemblies/SizedApparelforRJW.dll differ diff --git a/1.3/AssembliesNotion.txt b/1.3/AssembliesNotion.txt new file mode 100644 index 0000000..a3e6977 --- /dev/null +++ b/1.3/AssembliesNotion.txt @@ -0,0 +1 @@ +latest source build: SizedApparel1.4WIP22 \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/AOCBody.xml b/1.3/Defs/BodyAddonDefs/AOCBody.xml new file mode 100644 index 0000000..e46e302 --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/AOCBody.xml @@ -0,0 +1,131 @@ + + + + + AOC + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/BoriBody.xml b/1.3/Defs/BodyAddonDefs/BoriBody.xml new file mode 100644 index 0000000..e219291 --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/BoriBody.xml @@ -0,0 +1,127 @@ + + + + + Alien_Bori + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/MihoBody.xml b/1.3/Defs/BodyAddonDefs/MihoBody.xml new file mode 100644 index 0000000..f059a1f --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/MihoBody.xml @@ -0,0 +1,249 @@ + + + + + Alien_Miho + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/RabbieBody.xml b/1.3/Defs/BodyAddonDefs/RabbieBody.xml new file mode 100644 index 0000000..58682b0 --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/RabbieBody.xml @@ -0,0 +1,249 @@ + + + + + Rabbie + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/RatkinBody.xml b/1.3/Defs/BodyAddonDefs/RatkinBody.xml new file mode 100644 index 0000000..67ec55d --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/RatkinBody.xml @@ -0,0 +1,249 @@ + + + + + Ratkin + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/Ratkin_SuBody.xml b/1.3/Defs/BodyAddonDefs/Ratkin_SuBody.xml new file mode 100644 index 0000000..be80c0c --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/Ratkin_SuBody.xml @@ -0,0 +1,249 @@ + + + + + Ratkin_Su + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/SPBody.xml b/1.3/Defs/BodyAddonDefs/SPBody.xml new file mode 100644 index 0000000..89abc6b --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/SPBody.xml @@ -0,0 +1,131 @@ + + + + + Alien_SP + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/_HumanBody.xml b/1.3/Defs/BodyAddonDefs/_HumanBody.xml new file mode 100644 index 0000000..7e7a0a1 --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/_HumanBody.xml @@ -0,0 +1,717 @@ + + + + Human + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • + + + + + + + + + + + + + + + + + +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Hulk + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Fat + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Child + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/BodyAddonDefs/_HumanBody.xml.bak b/1.3/Defs/BodyAddonDefs/_HumanBody.xml.bak new file mode 100644 index 0000000..3a6a487 --- /dev/null +++ b/1.3/Defs/BodyAddonDefs/_HumanBody.xml.bak @@ -0,0 +1,717 @@ + + + + Human + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • + + + + + + + + + + + + + + + + + +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Hulk + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Fat + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Child + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + false + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + true + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/Defs/BodyPartDetailDefs/BodypartDetail_Anus.xml b/1.3/Defs/BodyPartDetailDefs/BodypartDetail_Anus.xml similarity index 100% rename from Defs/BodyPartDetailDefs/BodypartDetail_Anus.xml rename to 1.3/Defs/BodyPartDetailDefs/BodypartDetail_Anus.xml diff --git a/Defs/BodyPartDetailDefs/BodypartDetail_Breasts.xml b/1.3/Defs/BodyPartDetailDefs/BodypartDetail_Breasts.xml similarity index 100% rename from Defs/BodyPartDetailDefs/BodypartDetail_Breasts.xml rename to 1.3/Defs/BodyPartDetailDefs/BodypartDetail_Breasts.xml diff --git a/Defs/BodyPartDetailDefs/BodypartDetail_Penis.xml b/1.3/Defs/BodyPartDetailDefs/BodypartDetail_Penis.xml similarity index 100% rename from Defs/BodyPartDetailDefs/BodypartDetail_Penis.xml rename to 1.3/Defs/BodyPartDetailDefs/BodypartDetail_Penis.xml diff --git a/Defs/BodyPartDetailDefs/BodypartDetail_Vagina.xml b/1.3/Defs/BodyPartDetailDefs/BodypartDetail_Vagina.xml similarity index 100% rename from Defs/BodyPartDetailDefs/BodypartDetail_Vagina.xml rename to 1.3/Defs/BodyPartDetailDefs/BodypartDetail_Vagina.xml diff --git a/Defs/Defs(BodyDefsWip).zip b/1.3/Defs/Defs(BodyDefsWip).zip similarity index 100% rename from Defs/Defs(BodyDefsWip).zip rename to 1.3/Defs/Defs(BodyDefsWip).zip diff --git a/Defs/Defs(wip).zip b/1.3/Defs/Defs(wip).zip similarity index 100% rename from Defs/Defs(wip).zip rename to 1.3/Defs/Defs(wip).zip diff --git a/1.3/Defs/PubicHairDefs/PubicHairDefault.xml b/1.3/Defs/PubicHairDefs/PubicHairDefault.xml new file mode 100644 index 0000000..e0e0b0c --- /dev/null +++ b/1.3/Defs/PubicHairDefs/PubicHairDefault.xml @@ -0,0 +1,11 @@ + + + + + Default + + SizedApparel/BodyParts/Human/PubicHair/Default + + + + diff --git a/1.3/Defs/PubicHairDefs/PubicHairLine.xml b/1.3/Defs/PubicHairDefs/PubicHairLine.xml new file mode 100644 index 0000000..f2b027e --- /dev/null +++ b/1.3/Defs/PubicHairDefs/PubicHairLine.xml @@ -0,0 +1,11 @@ + + + + + Line + + SizedApparel/BodyParts/Human/PubicHair/Line + + + + diff --git a/1.3/Defs/PubicHairDefs/PubicHairLine.xml.bak b/1.3/Defs/PubicHairDefs/PubicHairLine.xml.bak new file mode 100644 index 0000000..4bf42a4 --- /dev/null +++ b/1.3/Defs/PubicHairDefs/PubicHairLine.xml.bak @@ -0,0 +1,11 @@ + + + + + Wild + + SizedApparel/BodyParts/Human/PubicHair/Wild + + + + diff --git a/1.3/Defs/PubicHairDefs/PubicHairNone.xml b/1.3/Defs/PubicHairDefs/PubicHairNone.xml new file mode 100644 index 0000000..a49bf4e --- /dev/null +++ b/1.3/Defs/PubicHairDefs/PubicHairNone.xml @@ -0,0 +1,7 @@ + + + + None + true + + diff --git a/1.3/Defs/PubicHairDefs/PubicHairWild.xml b/1.3/Defs/PubicHairDefs/PubicHairWild.xml new file mode 100644 index 0000000..4bf42a4 --- /dev/null +++ b/1.3/Defs/PubicHairDefs/PubicHairWild.xml @@ -0,0 +1,11 @@ + + + + + Wild + + SizedApparel/BodyParts/Human/PubicHair/Wild + + + + diff --git a/1.3/Defs/SkeletonDef/AOCSkeletonDef.xml b/1.3/Defs/SkeletonDef/AOCSkeletonDef.xml new file mode 100644 index 0000000..d927691 --- /dev/null +++ b/1.3/Defs/SkeletonDef/AOCSkeletonDef.xml @@ -0,0 +1,123 @@ + + + + AOC + +
  • + Female + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/BoriSkeletonDef.xml b/1.3/Defs/SkeletonDef/BoriSkeletonDef.xml new file mode 100644 index 0000000..11e2645 --- /dev/null +++ b/1.3/Defs/SkeletonDef/BoriSkeletonDef.xml @@ -0,0 +1,123 @@ + + + + Alien_Bori + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/MihoSkeletonDef.xml b/1.3/Defs/SkeletonDef/MihoSkeletonDef.xml new file mode 100644 index 0000000..d13758e --- /dev/null +++ b/1.3/Defs/SkeletonDef/MihoSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Alien_Miho + +
  • + Thin + +
  • + Vagina + + (0, 0, -0.148) + 0 + + + (-0.006, 0, -0.150) + 0 + + + (-0.006, 0, -0.143) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.129) + 0 + + + (-0.006, 0, -0.139 + 0 + + + (-0.061, 0, -0.155) + 0 + +
  • +
  • + Penis + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Balls + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141)) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.121) + 0 + + + (-0.006, 0, -0.109) + 0 + + + (0.004, 0, -0.123) + 0 + +
  • + + +
  • + Female + +
  • + Vagina + + (0, 0, -0.148) + 0 + + + (-0.006, 0, -0.150) + 0 + + + (-0.006, 0, -0.143) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.129) + 0 + + + (-0.006, 0, -0.139) + 0 + + + (-0.061, 0, -0.155) + 0 + +
  • +
  • + Penis + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Balls + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0.004, 0, -0.123)) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.121) + 0 + + + (-0.006, 0, -0.109) + 0 + + + (0.004, 0, -0.123) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/RabbieSkeletonDef.xml b/1.3/Defs/SkeletonDef/RabbieSkeletonDef.xml new file mode 100644 index 0000000..ebb6a16 --- /dev/null +++ b/1.3/Defs/SkeletonDef/RabbieSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Rabbie + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/RatkinSkeletonDef.xml b/1.3/Defs/SkeletonDef/RatkinSkeletonDef.xml new file mode 100644 index 0000000..850f0dd --- /dev/null +++ b/1.3/Defs/SkeletonDef/RatkinSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Ratkin + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/RatkinSuSkeletonDef.xml b/1.3/Defs/SkeletonDef/RatkinSuSkeletonDef.xml new file mode 100644 index 0000000..73bf8f7 --- /dev/null +++ b/1.3/Defs/SkeletonDef/RatkinSuSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Ratkin_Su + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/SPSkeletonDef.xml b/1.3/Defs/SkeletonDef/SPSkeletonDef.xml new file mode 100644 index 0000000..5dec2cf --- /dev/null +++ b/1.3/Defs/SkeletonDef/SPSkeletonDef.xml @@ -0,0 +1,123 @@ + + + + Alien_SP + +
  • + Female + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/_HumanSkeletonDef.xml b/1.3/Defs/SkeletonDef/_HumanSkeletonDef.xml new file mode 100644 index 0000000..cc1a6c7 --- /dev/null +++ b/1.3/Defs/SkeletonDef/_HumanSkeletonDef.xml @@ -0,0 +1,668 @@ + + + + Human + +
  • + Female + +
  • + Vagina + + (-0.002, 0, -0.340) + 0 + + + (-0.006, 0, -0.346) + 0 + + + (0.047, 0, -0.238) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (-0.006, 0, -0.289) + 0 + + + (-0.174, 0, 0.254) + 0 + +
  • +
  • + Penis + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Balls + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.301) + 0 + + + (0, 0, -0.318) + 0 + + + (0.059, 0, -0.186) + 0 + +
  • + + +
  • + Thin + +
  • + Vagina + + (0, 0, -0.312) + 0 + + + (-0.006, 0, -0.318) + 0 + + + (0.006, 0, -0.256) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.260) + 0 + + + (-0.002, 0, -0.266) + 0 + + + (-0.137, 0, -0.211) + 0 + +
  • +
  • + Penis + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.008, 0, -0.248) + 0 + +
  • +
  • + Balls + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.007, 0, -0.248) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.281) + 0 + + + (0, 0, -0.291) + 0 + + + (0.021, 0, -0.219) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, -0.320) + 0 + + + (0.002, 0, -0.311) + 0 + + + (0.057, 0, -0.258) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.268) + 0 + + + (0, 0, -0.252) + 0 + + + (-0.113, 0, -0.234) + 0 + +
  • +
  • + Penis + + (0, 0, -0.301) + 0 + + + (0, 0, -0.311) + 0 + + + (0.068, 0, -0.250) + 0 + +
  • +
  • + Balls + + (0.0, 0, -0.301) + 0 + + + (0.0, 0, -0.311) + 0 + + + (0.066, 0, -0.250) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.275) + 0 + + + (0, 0, -0.277) + 0 + + + (0.066, 0, -0.219) + 0 + +
  • + + +
  • + Hulk + +
  • + Vagina + + (0.004, 0, -0.434) + 0 + + + (0, 0, -0.453) + 0 + + + (0.020, 0, -0.395) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0.006, 0, -0.383) + 0 + + + (0, 0, -0.406) + 0 + + + (-0.238, 0, -0.328) + 0 + +
  • +
  • + Penis + + (0, 0, -0.436) + 0 + + + (0.0, 0, -0.445) + 0 + + + (0.029, 0, -0.387) + 0 + +
  • +
  • + Balls + + (0, 0, -0.436) + 0 + + + (0, 0, -0.445) + 0 + + + (0.028, 0, -0.387) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.395) + 0 + + + (0.027, 0, -0.375) + 0 + + + (0, 0, -0.424) + 0 + +
  • + + +
  • + Fat + +
  • + Vagina + + (0.002, 0, -0.352) + 0 + + + (0.002, 0, -0.359) + 0 + + + (0.148, 0, -0.352) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.297) + 0 + + + (0, 0, -0.297) + 0 + + + (-0.238, 0, -0.271) + 0 + +
  • +
  • + Penis + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Balls + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.307) + 0 + + + (0, 0, -0.320) + 0 + + + (0.158, 0, -0.338) + 0 + +
  • + + +
  • + Child + +
  • + Vagina + + (0.002, 0, -0.209) + 0 + + + (0, 0, -0.205) + 0 + + + (0.043, 0, -0.174) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (0.002, 0, -0.164) + 0 + + + (-0.084, 0, -0.127) + 0 + +
  • +
  • + Penis + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Balls + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.166) + 0 + + + (-0.002, 0, -0.164) + 0 + + + (0.057, 0, -0.145) + 0 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/SkeletonDef/_HumanSkeletonDef.xml.bak b/1.3/Defs/SkeletonDef/_HumanSkeletonDef.xml.bak new file mode 100644 index 0000000..47e66f0 --- /dev/null +++ b/1.3/Defs/SkeletonDef/_HumanSkeletonDef.xml.bak @@ -0,0 +1,668 @@ + + + + Human + +
  • + Female + +
  • + Vagina + + (-0.002, 0, -0.340) + 0 + + + (-0.006, 0, -0.346) + 0 + + + (0.047, 0, -0.238) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (-0.006, 0, -0.289) + 0 + + + (-0.174, 0, 0.254) + 0 + +
  • +
  • + Penis + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Balls + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.301) + 0 + + + (0, 0, -0.318) + 0 + + + (0.059, 0, -0.186) + 0 + +
  • + + +
  • + Thin + +
  • + Vagina + + (0, 0, -0.312) + 0 + + + (-0.006, 0, -0.318) + 0 + + + (0.006, 0, -0.256) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.260) + 0 + + + (-0.002, 0, -0.266) + 0 + + + (-0.137, 0, -0.211) + 0 + +
  • +
  • + Penis + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.008, 0, -0.248) + 0 + +
  • +
  • + Balls + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.007, 0, -0.248) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.281) + 0 + + + (0, 0, -0.291) + 0 + + + (0.021, 0, -0.219) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, -0.320) + 0 + + + (0.002, 0, -0.311) + 0 + + + (0.057, 0, -0.258) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.268) + 0 + + + (0, 0, -0.252) + 0 + + + (-0.113, 0, -0.234) + 0 + +
  • +
  • + Penis + + (0, 0, -0.301) + 0 + + + (0, 0, -0.311) + 0 + + + (0.068, 0, -0.250) + 0 + +
  • +
  • + Balls + + (0.0, 0, -0.301) + 0 + + + (0.0, 0, -0.311) + 0 + + + (0.066, 0, -0.250) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.275) + 0 + + + (0, 0, -0.277) + 0 + + + (0.066, 0, -0.219) + 0 + +
  • + + +
  • + Hulk + +
  • + Vagina + + (0.004, 0, -0.434) + 0 + + + (0, 0, -0.453) + 0 + + + (0.020, 0, -0.395) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0.006, 0, -0.383) + 0 + + + (0, 0, -0.406) + 0 + + + (-0.238, 0, -0.328) + 0 + +
  • +
  • + Penis + + (0, 0, -0.436) + 0 + + + (0.0, 0, -0.445) + 0 + + + (0.029, 0, -0.387) + 0 + +
  • +
  • + Balls + + (0, 0, -0.436) + 0 + + + (0, 0, -0.445) + 0 + + + (0.028, 0, -0.387) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.395) + 0 + + + (0.027, 0, -0.375) + 0 + + + (0, 0, -0.424) + 0 + +
  • + + +
  • + Fat + +
  • + Vagina + + (0.002, 0, -0.352) + 0 + + + (0.002, 0, -0.359) + 0 + + + (0.148, 0, -0.352) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.297) + 0 + + + (0, 0, -0.297) + 0 + + + (-0.238, 0, -0.271) + 0 + +
  • +
  • + Penis + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Balls + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.307) + 0 + + + (0, 0, -0.320) + 0 + + + (0.158, 0, -0.338) + 0 + +
  • + + +
  • + Child + +
  • + Vagina + + (0.002, 0, -0.209) + 0 + + + (0, 0, -0.205) + 0 + + + (0.043, 0, -0.174) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (0.002, 0, -0.164) + 0 + + + (-0.084, 0, -0.127) + 0 + +
  • +
  • + Penis + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Balls + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/1.3/Defs/TexturePointsDefs/Test.zip b/1.3/Defs/TexturePointsDefs/Test.zip new file mode 100644 index 0000000..d6a1cce Binary files /dev/null and b/1.3/Defs/TexturePointsDefs/Test.zip differ diff --git a/Patches/ApparelPatches/Tip_TagList.txt b/1.3/Patches/ApparelPatches/Tip_TagList.txt similarity index 100% rename from Patches/ApparelPatches/Tip_TagList.txt rename to 1.3/Patches/ApparelPatches/Tip_TagList.txt diff --git a/1.3/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml b/1.3/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml new file mode 100644 index 0000000..f8e424c --- /dev/null +++ b/1.3/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml @@ -0,0 +1,52 @@ + + + + + +
  • Biotech
  • +
    + + Normal + +
  • + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
  • + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/1.3/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml.bak b/1.3/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml.bak new file mode 100644 index 0000000..08e7f34 --- /dev/null +++ b/1.3/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml.bak @@ -0,0 +1,52 @@ + + + + + +
  • Biotech
  • +
    + + Normal + +
  • + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
  • + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_HeavyBandolier"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/Patches/ApparelPatches/VanillaCorePatch/DusterShowCrotchPatch.xml b/1.3/Patches/ApparelPatches/VanillaCorePatch/DusterShowCrotchPatch.xml similarity index 100% rename from Patches/ApparelPatches/VanillaCorePatch/DusterShowCrotchPatch.xml rename to 1.3/Patches/ApparelPatches/VanillaCorePatch/DusterShowCrotchPatch.xml diff --git a/Patches/ApparelPatches/VanillaCorePatch/ShirtBasicShowCrotchPatch.xml b/1.3/Patches/ApparelPatches/VanillaCorePatch/ShirtBasicShowCrotchPatch.xml similarity index 100% rename from Patches/ApparelPatches/VanillaCorePatch/ShirtBasicShowCrotchPatch.xml rename to 1.3/Patches/ApparelPatches/VanillaCorePatch/ShirtBasicShowCrotchPatch.xml diff --git a/Patches/ApparelPatches/VanillaIdeoPatch/IdeoApparelPatch.xml b/1.3/Patches/ApparelPatches/VanillaIdeoPatch/IdeoApparelPatch.xml similarity index 100% rename from Patches/ApparelPatches/VanillaIdeoPatch/IdeoApparelPatch.xml rename to 1.3/Patches/ApparelPatches/VanillaIdeoPatch/IdeoApparelPatch.xml diff --git a/Patches/ApparelRecorderCompPatch.xml b/1.3/Patches/ApparelRecorderCompPatch.xml similarity index 100% rename from Patches/ApparelRecorderCompPatch.xml rename to 1.3/Patches/ApparelRecorderCompPatch.xml diff --git a/Patches/HediffPatches/PrivateHediffPartsPatches.xml b/1.3/Patches/HediffPatches/PrivateHediffPartsPatches.xml similarity index 100% rename from Patches/HediffPatches/PrivateHediffPartsPatches.xml rename to 1.3/Patches/HediffPatches/PrivateHediffPartsPatches.xml diff --git a/Patches/ThingPatches/BodyPartThingPatch.xml b/1.3/Patches/ThingPatches/BodyPartThingPatch.xml similarity index 100% rename from Patches/ThingPatches/BodyPartThingPatch.xml rename to 1.3/Patches/ThingPatches/BodyPartThingPatch.xml diff --git a/1.3/source/SizedApparel/AlienRaceSupport.cs b/1.3/source/SizedApparel/AlienRaceSupport.cs new file mode 100644 index 0000000..a8f1dba --- /dev/null +++ b/1.3/source/SizedApparel/AlienRaceSupport.cs @@ -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 + { + } +} diff --git a/1.3/source/SizedApparel/Graphic_BodyParts.cs b/1.3/source/SizedApparel/Graphic_BodyParts.cs new file mode 100644 index 0000000..f221eda --- /dev/null +++ b/1.3/source/SizedApparel/Graphic_BodyParts.cs @@ -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 + } +} diff --git a/1.3/source/SizedApparel/Graphic_SizedApparel.cs b/1.3/source/SizedApparel/Graphic_SizedApparel.cs new file mode 100644 index 0000000..f84fa77 --- /dev/null +++ b/1.3/source/SizedApparel/Graphic_SizedApparel.cs @@ -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 graphics; + } +} diff --git a/1.3/source/SizedApparel/HarmonyPatches.cs b/1.3/source/SizedApparel/HarmonyPatches.cs new file mode 100644 index 0000000..9b8d881 --- /dev/null +++ b/1.3/source/SizedApparel/HarmonyPatches.cs @@ -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!"); + } + } + + + } +} diff --git a/1.3/source/SizedApparel/Patch-Animation.cs b/1.3/source/SizedApparel/Patch-Animation.cs new file mode 100644 index 0000000..bd92a0d --- /dev/null +++ b/1.3/source/SizedApparel/Patch-Animation.cs @@ -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(); + 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(); + 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().SetBreastJiggle(true); + } + } + else + { + foreach (var actor in __instance.actorsInCurrentAnimation) + { + actor.GetComp().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(); + if (comp == null) + return; + comp.SetBreastJiggle(false, -1); + comp.ForceUpdateTickAnimation = false; + comp.SetPenisAngle(0); + + } + } + +} diff --git a/source/SizedApparel/SizedApparelDubsApparelPatch.cs b/1.3/source/SizedApparel/Patch-DubsApparelPatch.cs similarity index 86% rename from source/SizedApparel/SizedApparelDubsApparelPatch.cs rename to 1.3/source/SizedApparel/Patch-DubsApparelPatch.cs index 8cc6e14..5addbe4 100644 --- a/source/SizedApparel/SizedApparelDubsApparelPatch.cs +++ b/1.3/source/SizedApparel/Patch-DubsApparelPatch.cs @@ -17,7 +17,7 @@ namespace SizedApparel if (graphicSet == null) return; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if (comp == null) return; comp.needToCheckApparelGraphicRecords = true; diff --git a/1.3/source/SizedApparel/Patch-Menstruation.cs b/1.3/source/SizedApparel/Patch-Menstruation.cs new file mode 100644 index 0000000..21c4a84 --- /dev/null +++ b/1.3/source/SizedApparel/Patch-Menstruation.cs @@ -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(); + if (breastcomp == null) + return null; + return breastcomp.NippleColor; + } + + public static float? GetNippleSize(Hediff breastHediff) + { + var breastcomp = breastHediff.TryGetComp(); + if (breastcomp == null) + return null; + return breastcomp.NippleSize; + } + + public static float? GetAreolaSize(Hediff breastHediff) + { + var breastcomp = breastHediff.TryGetComp(); + if (breastcomp == null) + return null; + return breastcomp.AreolaSize; + } + } +} diff --git a/source/SizedApparel/SizedApparelRJWPatch.cs b/1.3/source/SizedApparel/Patch-RimJobWorld.cs similarity index 90% rename from source/SizedApparel/SizedApparelRJWPatch.cs rename to 1.3/source/SizedApparel/Patch-RimJobWorld.cs index bc1aecf..06f8ac6 100644 --- a/source/SizedApparel/SizedApparelRJWPatch.cs +++ b/1.3/source/SizedApparel/Patch-RimJobWorld.cs @@ -18,10 +18,10 @@ namespace SizedApparel { if (!UnityData.IsInMainThread) return; - ApparelRecorderComp comp = pawn?.TryGetComp(); + ApparelRecorderComp comp = pawn?.GetComp(); 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 comp = pawn.GetComp(); if (comp != null) { /* @@ -128,7 +128,7 @@ namespace SizedApparel { if (pawn == null) return; - ApparelRecorderComp comp = pawn.TryGetComp(); + ApparelRecorderComp comp = pawn.GetComp(); if (comp == null) return; comp.SetDirty(); @@ -146,7 +146,7 @@ namespace SizedApparel - ApparelRecorderComp pawnARC = __instance.pawn.TryGetComp(); + ApparelRecorderComp pawnARC = __instance.pawn.GetComp(); 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 partnerARC = partner.GetComp(); if (partnerARC != null) { if (partner.RaceProps.Humanlike) @@ -182,7 +182,7 @@ namespace SizedApparel { - ApparelRecorderComp pawnARC = __instance.pawn.TryGetComp(); + ApparelRecorderComp pawnARC = __instance.pawn.GetComp(); if (pawnARC != null) { @@ -209,7 +209,7 @@ namespace SizedApparel var partner = __instance.Partner as Pawn; if (partner == null) return; - ApparelRecorderComp partnerARC = partner.TryGetComp(); + ApparelRecorderComp partnerARC = partner.GetComp(); if (partnerARC != null) { partnerARC.havingSex = false; diff --git a/source/SizedApparel/SizedApparelRNWPatch.cs b/1.3/source/SizedApparel/Patch-RimNudeWorld.cs similarity index 90% rename from source/SizedApparel/SizedApparelRNWPatch.cs rename to 1.3/source/SizedApparel/Patch-RimNudeWorld.cs index 3971a36..cdc4e93 100644 --- a/source/SizedApparel/SizedApparelRNWPatch.cs +++ b/1.3/source/SizedApparel/Patch-RimNudeWorld.cs @@ -36,7 +36,7 @@ namespace SizedApparel { if (__result == false) return; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if (comp == null) return; if (comp.hasUnsupportedApparel) diff --git a/1.3/source/SizedApparel/Patch-StatueOfColonist.cs b/1.3/source/SizedApparel/Patch-StatueOfColonist.cs new file mode 100644 index 0000000..2aa8860 --- /dev/null +++ b/1.3/source/SizedApparel/Patch-StatueOfColonist.cs @@ -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 + { + + } +} diff --git a/1.3/source/SizedApparel/Properties/AssemblyInfo.cs b/1.3/source/SizedApparel/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..950c1b8 --- /dev/null +++ b/1.3/source/SizedApparel/Properties/AssemblyInfo.cs @@ -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")] diff --git a/1.3/source/SizedApparel/SizedAppareIdeoPatch.cs b/1.3/source/SizedApparel/SizedAppareIdeoPatch.cs new file mode 100644 index 0000000..c263cc1 --- /dev/null +++ b/1.3/source/SizedApparel/SizedAppareIdeoPatch.cs @@ -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) + { + + } + + + + } + +} diff --git a/1.3/source/SizedApparel/SizedApparelApparelBuilder.cs b/1.3/source/SizedApparel/SizedApparelApparelBuilder.cs new file mode 100644 index 0000000..98ad331 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelApparelBuilder.cs @@ -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 + { + + } +} diff --git a/1.3/source/SizedApparel/SizedApparelBodyPart.cs b/1.3/source/SizedApparel/SizedApparelBodyPart.cs new file mode 100644 index 0000000..a8ca96e --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelBodyPart.cs @@ -0,0 +1,1024 @@ +using HarmonyLib; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +//using AlienRace; +using UnityEngine; +using Verse; + +namespace SizedApparel +{ + public class Depth4Offsets + { + public float south=0; + public float north=0; + public float east=0; + public float west=0; + + public Depth4Offsets() { } + + public Depth4Offsets(Vector4 arg) + { + south = arg.x; + north = arg.y; + east = arg.z; + west = arg.w; + } + public Depth4Offsets(float s, float n, float e, float w) + { + south = s; + north = n; + east = e; + west = w; + } + } + + public class Rot4Offsets + { + //X: right and left + //Y: Frong or Back + //Z: Up and Down + Vector3 South; + + Vector3 North; + + Vector3 East; + + Vector3 West; + + public Rot4Offsets(Vector3 vector) + { + South = vector; + North = vector; + East = vector; + West = vector; + } + + public Rot4Offsets(Vector3 south, Vector3 north, Vector3 east, Vector3 west) + { + South = south; + North = north; + East = east; + West = west; + } + + public Vector3 GetOffset(Rot4 rotation) + { + if (rotation == Rot4.East) + return East; + if (rotation == Rot4.West) + return West; + if (rotation == Rot4.South) + return South; + if (rotation == Rot4.North) + return North; + else + return Vector3.zero; + } + + } + + public struct RaceNameAndBodyType + { + public string raceName; + public string bodyType; + } + + public class BodyWithBodyType + { + public string bodyType; + public List Addons = new List(); + } + + public class BodyPart + { + public string partName = null; + public string customPath = null; + public string defaultHediffName = null; // for missing Hediff + public bool isBreasts = false; + public bool centeredTexture = true; + public bool mustMatchBodyType = false; // TODO + + public string boneName = null; + public Bone bone = null; // For Graphic Positioning System + public bool mustHaveBone = true; // when bone is missing, don't draw + + public SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; + public ColorType colorType = ColorType.Skin; + public Depth4Offsets depthOffset = new Depth4Offsets(); + public BodyTypeAndOffset offsets = new BodyTypeAndOffset(); + } + + public class BodyTypeAndOffset + { + //public RaceNameAndBodyType bodyTypeData; + public string bodyType; + public Rot4Offsets offsets = new Rot4Offsets(Vector3.zero); + + public BodyTypeAndOffset() + { + + } + + public BodyTypeAndOffset(bool useCenter) + { + if (useCenter) + { + offsets = new Rot4Offsets(Vector3.zero); + } + } + public BodyTypeAndOffset(Vector3 defaultOffset) + { + offsets = new Rot4Offsets(defaultOffset); + } + } + + public enum ColorType + { + Skin, Hair, Nipple, Custom, None + } + + + public enum SizedApparelBodyPartOf + { + All, Torso, Breasts, Crotch, Penis, Balls, Vagina, Anus, Belly, PubicHair, Udder, Hips, Thighs, hands, feet, None + } + public static class SizedApparelBodyPartOfExtension + { + public static bool IsPartOf(this SizedApparelBodyPartOf source, SizedApparelBodyPartOf target) + { + if (source == SizedApparelBodyPartOf.None) + return false; + + switch (target) + { + case SizedApparelBodyPartOf.All: + return true; + case SizedApparelBodyPartOf.Torso: + if (source == SizedApparelBodyPartOf.hands || source == SizedApparelBodyPartOf.feet) + return false; + return true; + case SizedApparelBodyPartOf.Breasts: + if (source == SizedApparelBodyPartOf.Breasts) + return true; + return false; + case SizedApparelBodyPartOf.Crotch: + if (source == SizedApparelBodyPartOf.Crotch || source == SizedApparelBodyPartOf.Penis || source == SizedApparelBodyPartOf.Vagina || source == SizedApparelBodyPartOf.Anus || source == SizedApparelBodyPartOf.PubicHair || source == SizedApparelBodyPartOf.Balls) + return true; + return false; + case SizedApparelBodyPartOf.Penis: + if (source == SizedApparelBodyPartOf.Penis) + return true; + return false; + case SizedApparelBodyPartOf.Balls: + if (source == SizedApparelBodyPartOf.Balls) + return true; + return false; + case SizedApparelBodyPartOf.Vagina: + if (source == SizedApparelBodyPartOf.Vagina) + return true; + return false; + case SizedApparelBodyPartOf.Anus: + if (source == SizedApparelBodyPartOf.Anus) + return true; + return false; + case SizedApparelBodyPartOf.Belly: + if (source == SizedApparelBodyPartOf.Belly) + return true; + return false; + case SizedApparelBodyPartOf.Udder: + if (source == SizedApparelBodyPartOf.Udder) + return true; + return false; + case SizedApparelBodyPartOf.Hips: + if (source == SizedApparelBodyPartOf.Hips || source == SizedApparelBodyPartOf.Thighs || source == SizedApparelBodyPartOf.Penis || source == SizedApparelBodyPartOf.Vagina || source == SizedApparelBodyPartOf.Anus) + return true; + return false; + case SizedApparelBodyPartOf.Thighs: + if (source == SizedApparelBodyPartOf.Thighs) + return true; + return false; + case SizedApparelBodyPartOf.hands: + if (source == SizedApparelBodyPartOf.hands) + return true; + return false; + case SizedApparelBodyPartOf.feet: + if (source == SizedApparelBodyPartOf.feet) + return true; + return false; + case SizedApparelBodyPartOf.PubicHair: + if (source == SizedApparelBodyPartOf.PubicHair) + return true; + return false; + case SizedApparelBodyPartOf.None: + return false; + + } + Log.Error("[SizedApparel] missing SizedApparelBodyPartOf!"); + return false; + } + } + + + public class GraphicPointsDef : Def + { + public List points; + } + + public class TextureWithGraphicPoints + { + public string texturePath; // texture is already classified with bodytype + public List points = new List(); + } + + public class GraphicPoint + { + public string pointName; + public Vector2 point = Vector2.zero; + } + public class GraphicPointsWithBodyType + { + public string pointName; + public List points = new List(); + } + + public class PointWithBodyType + { + public string bodyTypeName; //null can be used too + public Vector2 point = Vector2.zero; + } + + public class BodyPartPoint + { + string name; + Vector2 position = Vector2.zero;//Uv position. not pixel + } + + [Obsolete]//todo + public struct BodyPartSpline + { + + } + + + //Def for Hediff Graphic color options or else. + public class SizedApparelHeddifDef : Def + { + public HediffDef hediffDef; + //public string hediffDefName; + + } + + //Def per graphic(texture) + [Obsolete] + public class SizedApparelBodyPartGraphicDef : Def + { + public string graphicPath; + public int severityIndex; + public Vector2 pivot = new Vector2(0.5f, 0.5f); // custom pivot of texture. UV. not pixel + //public Dictionary points = new Dictionary(); + //public Dictionary splines = new Dictionary(); + } + + //Def per BodyParts + public class SizedApparelBodyPartDef : Def + { + SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; + public bool canPose = true; + public List TexturePaths; + + } + + public class SizedApparelBodyPart + { + static MethodInfo overrideMatMethod = AccessTools.Method(typeof(PawnRenderer), "OverrideMaterialIfNeeded"); + static Color defaultNippleColor = Color.white;//nipple texture is already colored with pink. so make it white as default to avoid double coloring pink //Strong Pink Color = new ColorInt(255, 121, 121).ToColor + + //this is for RGB Channel Edit + static string texturePath_White = "SizedApparel/Masks/White"; + static string texturePath_Black = "SizedApparel/Masks/Black"; + static string texturePath_Red = "SizedApparel/Masks/Red"; + static string texturePath_Green = "SizedApparel/Masks/Green"; + static string texturePath_Blue = "SizedApparel/Masks/Blue"; + + + public bool AutoOffsetForFurCoveredBody = true; + + public SizedApparelBodyPart(Pawn pawn, ApparelRecorderComp apparelRecorderComp, string bodyPartName, SizedApparelBodyPartOf bodyPartOf, string defaultHediffName, bool isBreast, bool isOverlay, string customPathName = null, ColorType colorOf = ColorType.Skin, bool needBoneToRender = true, Bone parentBone = null, bool isCenteredTexture = false ) + { + this.pawn = pawn; //owner + + this.apparelRecorderCompCache = apparelRecorderComp; //for reduce GetComp Call; if it is null, it will try to get pawn's comp. + + this.bodyPartName = bodyPartName; + + this.def = DefDatabase.AllDefs.FirstOrDefault(b => b.defName == bodyPartName); + + this.bodyPartOf = bodyPartOf; + this.defaultHediffName = defaultHediffName; + this.isBreast = isBreast; + this.isOverlay = isOverlay; + this.customPath = customPathName; + this.colorType = colorOf; + + this.bone = parentBone; + this.mustHaveBone = needBoneToRender; + this.centeredTexture = isCenteredTexture; + } + + public void SetCenteredTexture(bool isCentered) + { + this.centeredTexture = isCentered; + } + + public Vector2 OffsetFromUVOffset(Vector2 vector, Mesh mesh , bool isFliped = false) + { + //treat mesh as plane + //Vector3 width = mesh.vertices[2] - mesh.vertices[1]; + //Vector3 height = mesh.vertices[1] - mesh.vertices[2]; + + + if(!isFliped) + return new Vector2((mesh.vertices[2].x - mesh.vertices[0].x)*vector.x,(mesh.vertices[0].z - mesh.vertices[2].z)*vector.y); + return new Vector2((mesh.vertices[2].x - mesh.vertices[0].x)*vector.x, (mesh.vertices[2].z - mesh.vertices[0].z)*vector.y); + /* + * Vector2 loc = new Vector2(0.5f, 0.5f) - vector; + if(!isFliped) + return new Vector2(Mathf.Lerp(mesh.vertices[0].x, mesh.vertices[2].x, loc.x), Mathf.Lerp(mesh.vertices[0].z, mesh.vertices[2].z, loc.y)); + return new Vector2(Mathf.Lerp(mesh.vertices[3].x, mesh.vertices[1].x, loc.x), Mathf.Lerp(mesh.vertices[3].z, mesh.vertices[1].z, loc.y)); + + + + */ + + } + + //public Vector2 OffestFromUVOffset(Vector2 vector, Vector2 drawSize, bool isFliped = false) + + public SizedApparelBodyPartDef def; + + public Pawn pawn; + public ApparelRecorderComp apparelRecorderCompCache; // for reduce getComp call; + public Bone bone; + private bool mustHaveBone; + + public bool centeredTexture = false; // false to keep original position from mesh. and consider this graphics pivot as bone position + + public string bodyPartName; //breast, penis, belly, pubichair... etc. just name. not like architech something + public string customPath = null; + public SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; + public string defaultHediffName; + + public bool isBreast = false; + + public bool isOverlay = false; //write z cache? + + public string currentHediffName; + + public bool isVisible = true; + + public int lastPoseTick = -1; + + public ColorType colorType = ColorType.Skin; + public Color? customColorOne; + public Color? customColorTwo; + + + //customize + public string customPose = null; + public Vector2? lookAnLocation = null; + public Rot4? rotOverride = null; + + //variation + public string variation = null; + public Color? variationColor; + public colorOverrideMode variationColorMode = colorOverrideMode.Default; + + + //TODO. age setting? + public int minDrawAge = -1; + public int maxDrawAge = -1; + + + public void SetBone(Bone bone) + { + this.bone = bone; + } + + public void SetCustomPose(string newPose, bool autoUpdate = true, bool autoSetPawnGraphicDirty = false) + { + if (customPose == newPose) + return; + if(SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Setting Custom Pose : " + newPose); + customPose = newPose; + if (autoUpdate) + { + this.UpdateGraphic(); + this.lastPoseTick = Find.TickManager.TicksGame; + } + + if(autoSetPawnGraphicDirty) + { + if (pawn == null) + return; + PortraitsCache.SetDirty(pawn); + GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn); + } + } + + public bool CheckCanPose(string targetPose, bool checkApparels, bool checkBodyParts, bool mustMatchSize, bool mustMatchBodytype, bool mustMatchRace) + { + if (checkApparels) + { + if (!SizedApparelUtility.CanPoseApparels(pawn, targetPose, currentHediffName, currentSeverityInt, cappedSeverityInt)) + return false; + } + if (checkBodyParts) + { + Graphic graphic = GetBodyPartGraphics(false, mustMatchSize, mustMatchBodytype, mustMatchRace); + Graphic graphicH = GetBodyPartGraphics(true, mustMatchSize, mustMatchBodytype, mustMatchRace); + if (graphic != null || graphicH != null) + return true; + return false; + } + return true; + } + + + //TODO... + public int currentSeverityInt = -1; + public int cappedSeverityInt = 1000; // supported severity from worn apparel graphics + + public Vector2 pivot = Vector2.zero; + + public Vector2 position = Vector2.zero;//offset from pivot //UV. not pixel + + public SizedApparelTexturePointDef points; + public SizedApparelTexturePointDef pointsHorny; + + + public float rotation = 0; // +: rotate right, -: rotate left + public float scale = 1f; + + public Graphic bodyPartGraphic; + public Graphic bodyPartGraphicHorny; + + + + public Vector2 positionOffset = Vector2.zero; //offset from position //UV. not pixel + public Vector2 positionOffsetSouth = Vector2.zero; + public Vector2 positionOffsetNorth = Vector2.zero; + public Vector2 positionOffsetEast = Vector2.zero; + public Vector2 positionOffsetWest = Vector2.zero; + + public float depthOffset = 0f; + + //0.008f + public float depthOffsetEast = 0.008f; + public float depthOffsetWest = 0.008f; + public float depthOffsetSouth = 0.008f; + public float depthOffsetNorth = 0.008f; + + + //bigger = in front + public void SetDepthOffsets(float south, float north, float east, float west) + { + depthOffsetSouth = south; + depthOffsetNorth = north; + depthOffsetEast = east; + depthOffsetWest = west; + } + public void SetDepthOffsets(Depth4Offsets oppsets) + { + depthOffsetSouth = oppsets.south; + depthOffsetNorth = oppsets.north; + depthOffsetEast = oppsets.east; + depthOffsetWest = oppsets.west; + } + public void SetPositionOffsets(Vector2 south, Vector2 north, Vector2 east, Vector2 west) + { + positionOffsetSouth = south; + positionOffsetNorth = north; + positionOffsetEast = east; + positionOffsetWest = west; + } + public Graphic GetBodyPartGraphics(bool isHorny, bool mustMatchSize = false, bool mustMatchBodytype = false, bool mustMatchRace = false, string poseOverride = null) + { + SizedApparelTexturePointDef var; + return GetBodyPartGraphics(isHorny, out var, mustMatchBodytype, mustMatchSize, mustMatchRace, poseOverride); + } + + public Graphic GetBodyPartGraphics(bool isHorny, out SizedApparelTexturePointDef outPoints, bool mustMatchSize = false, bool mustMatchBodyType = false , bool mustMatchRace = false ,string poseOverride = null, string variationOverride = null) + { + if (pawn == null) + { + outPoints = null; + return null; + } + var comp = apparelRecorderCompCache; + if (comp == null) + comp = pawn.GetComp(); + if (comp == null) + { + outPoints = null; + return null; + } + + string bodyTypeString = pawn.story?.bodyType?.defName; + + var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeString, currentHediffName, customPath==null?bodyPartName: customPath, pawn.gender, Math.Min(currentSeverityInt, cappedSeverityInt), isHorny, poseOverride==null?customPose:poseOverride, variationOverride==null?variation: variationOverride); + var result = SizedApparelsDatabase.GetSupportedBodyPartPath(key, isBreast, customPath == null ? bodyPartName : customPath, defaultHediffName); + + + + + if (mustMatchSize) + if (Math.Min(currentSeverityInt, cappedSeverityInt) != result.size) + { + outPoints = null; + return null; + } + if (mustMatchBodyType) + { + if(result.bodyType != pawn.story?.bodyType?.defName) + { + outPoints = null; + return null; + } + } + if (mustMatchRace) + { + if (result.raceName != pawn.def.defName) + { + outPoints = null; + return null; + } + } + + if (result.pathWithSizeIndex == null) + { + outPoints = null; + return null; + } + outPoints = result.points; + return GraphicDatabase.Get(result.pathWithSizeIndex); + } + + public void UpdateGraphic() + { + bodyPartGraphic = GetBodyPartGraphics(false, out points, false); + bodyPartGraphicHorny = GetBodyPartGraphics(true, out pointsHorny, false); + } + + public void UpdateGraphic(int index, int indexCapped = 1000) + { + this.currentSeverityInt = index; + this.cappedSeverityInt = indexCapped; + + UpdateGraphic(); + } + + public void ResetTransform() + { + this.position = Vector2.zero; + this.scale = 1f; + this.rotation = 0; + } + + public void ClearGraphics() + { + this.bodyPartGraphic = null; + this.bodyPartGraphicHorny = null; + this.points = null; + this.pointsHorny = null; + } + public void Clear() + { + currentHediffName = null; + currentSeverityInt = -1; + cappedSeverityInt = 1000; + customPose = null; + rotOverride = null; + + ClearGraphics(); + } + + /* + public void SetHediffData(string name, int severityIndex , string variation = null) + { + currentHediffName = name; + currentSeverityInt = severityIndex; + }*/ + + public void SetHediffData(string name, int severityIndex, int cappedSeverityIndex = 1000, string variation = null) + { + currentHediffName = name; + currentSeverityInt = severityIndex; + this.cappedSeverityInt = cappedSeverityIndex; + this.variation = variation; + } + + public void DrawBodyPart (Vector3 rootLoc, float angle, Rot4 facing, RotDrawMode bodyDrawType, PawnRenderFlags flags, Mesh bodyMesh) + { + if (!isVisible) + return; + if (scale == 0f) + return; //Don't draw if scale is zero + if (pawn == null) + return; + + if (mustHaveBone && bone == null) + return; + + if (bodyMesh == null) + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] DrawBodyParts But Null Body Mesh! : " + pawn.Name); + return; + } + + + PawnRenderer pawnRenderer = pawn.Drawer.renderer; + Shader shader = shader = ShaderDatabase.CutoutSkinOverlay; + Color drawColor1 = Color.white; + Color drawColor2 = Color.white; + + + bool forceWriteZ = true; + + bool HasFurSkin = false; + //Furskin Check + /* + if (pawn.Drawer.renderer.graphics.furCoveredGraphic != null) + { + HasFurSkin = true; + }*/ + + if (colorType == ColorType.Skin) + { + forceWriteZ = true; + if (bodyDrawType == RotDrawMode.Fresh) + { + if (HasFurSkin) + { + + } + else + { + shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.nakedGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; + } + + } + else if (bodyDrawType == RotDrawMode.Rotting) + { + + shader = pawn.Drawer.renderer.graphics.rottingGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.rottingGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; + } + } + else if (colorType == ColorType.Nipple) + { + forceWriteZ = true; + + //Get SkinColor first. + if (bodyDrawType == RotDrawMode.Fresh) + { + if (HasFurSkin) + { + + } + else + { + shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.nakedGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; + } + + } + else if (bodyDrawType == RotDrawMode.Rotting) + { + + shader = pawn.Drawer.renderer.graphics.rottingGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.rottingGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; + } + + if(apparelRecorderCompCache != null) + { + if(apparelRecorderCompCache.nippleColor != null) + { + drawColor1 = apparelRecorderCompCache.nippleColor.Value; //* drawColor1; + drawColor2 = apparelRecorderCompCache.nippleColor.Value; //* drawColor2; //maybe can be issue + } + else + { + //nipple Color is null + //Ust Default Color for Nipple with SkinColor + drawColor1 = defaultNippleColor * drawColor1; + drawColor2 = defaultNippleColor * drawColor2; + + } + } + + + } + else if (colorType == ColorType.Hair) + { + forceWriteZ = false; + shader = ShaderDatabase.Transparent; + if(pawn.story != null) + drawColor1 = pawn.story.hairColor; + } + else if (colorType == ColorType.Custom) + { + forceWriteZ = true; + shader = ShaderDatabase.Transparent; + if(customColorOne != null) + drawColor1 = customColorOne.Value; + if (customColorTwo != null) + drawColor2 = customColorTwo.Value; + } + else if (colorType == ColorType.None) + { + forceWriteZ = false; + shader = ShaderDatabase.Cutout; + } + if (isOverlay) + { + if (shader == ShaderDatabase.Cutout) + shader = ShaderDatabase.Transparent; + else if (shader == ShaderDatabase.CutoutSkin || shader == ShaderDatabase.CutoutSkinColorOverride) + shader = ShaderDatabase.CutoutSkinOverlay; + else + shader = ShaderDatabase.Transparent; + } + + + Mesh scaledBodyMesh; + + BoneTransform boneTransform = null; + if(bone != null) + { + if (facing == Rot4.South) + { + boneTransform = bone.south; + } + else if (facing == Rot4.North) + { + boneTransform = bone.north; + } + else if (facing == Rot4.East) + { + boneTransform = bone.east; + + } + else if (facing == Rot4.West) + { + boneTransform = bone.west; + if (boneTransform == null) + boneTransform = bone.east; + + } + } + + float drawScale = scale; + float drawRotation = angle; + Vector3 drawPosition = rootLoc; + + /* + if (this.pawn.ageTracker.CurLifeStage.bodyDrawOffset != null) + { + drawPosition += this.pawn.ageTracker.CurLifeStage.bodyDrawOffset.Value; + }*/ + + if (boneTransform != null) + { + //TODO fixed angle for IK? + + float width = (bodyMesh.vertices[2].x - bodyMesh.vertices[0].x); + if (centeredTexture) + { + bool westUsingEast = false; + if (facing == Rot4.West && bone.west == null) + westUsingEast = true; + + drawRotation = boneTransform.InitialAngle + boneTransform.angleOffset; + //not sure it work correct + Vector3 v = (boneTransform.InitialPosition + boneTransform.positionOffset) * width; + var q = Quaternion.AngleAxis (westUsingEast? -angle : angle, Vector3.up); + v = q * v; + drawPosition = (v) ; // calculate rotated point + + //Log.Message(boneTransform.angleOffset.ToString()); + if (westUsingEast) + { + //already scaled with "width"? + //its using east as west. so flip position + drawPosition.Scale(new Vector3(-1f,0f,1f)); + //drawRotation = boneTransform.InitialAngle - boneTransform.angleOffset; + } + drawPosition += rootLoc; + drawRotation += angle ; + } + else + { + //NotCentered Texture not yet support Rotation System. + //wip + Vector3 v = Vector3.zero; + + bool westUsingEast = false; + if (facing == Rot4.West && bone.west == null) + westUsingEast = true; + drawRotation = boneTransform.InitialAngle; // + boneTransform.angleOffset + //not sure it work correct + //Vector3 v = (boneTransform.InitialPosition); //initialpos as custom pivot + //var q = Quaternion.AngleAxis(westUsingEast ? -drawRotation : drawRotation, Vector3.up); + //var q2 = Quaternion.AngleAxis(westUsingEast ? -angle : angle, Vector3.up); + + //v = q * v; // calculate final draw position with torso angle + //v = v + boneTransform.InitialPosition + boneTransform.positionOffset; + //v = q2 * v; //NotCentered Texture not yet support Rotation System. + + drawPosition = (v) * width; + if (westUsingEast) + { + //already scaled with "width"? + //its using east as west. so flip position + drawPosition.Scale(new Vector3(-1f, 0f, 1f)); + //drawRotation = boneTransform.InitialAngle - boneTransform.angleOffset; + } + drawPosition += rootLoc ; // adjust with result + //Log.Message(boneTransform.angleOffset.ToString()); + drawRotation += angle; + } + } + + /* + if (drawScale != 1f) + { + // scale Only Rimworld Plane Mesh + if(bodyMesh.vertexCount == 4) + { + float width = (bodyMesh.vertices[2].x - bodyMesh.vertices[0].x); + + //var meshSet = MeshPool.GetMeshSetForWidth(scale * width); + var meshSet = MeshPool.GetMeshSetForWidth(scale * width); + scaledBodyMesh = meshSet.MeshAt(facing); + } + else + scaledBodyMesh = bodyMesh; + } + else + { + scaledBodyMesh = bodyMesh; + }*/ + scaledBodyMesh = bodyMesh; + + Quaternion quaternion = Quaternion.AngleAxis(drawRotation, Vector3.up); + + + + + Rot4 targetRot = facing; + if (rotOverride != null) + targetRot = rotOverride.Value; + + if (targetRot == Rot4.South) + { + var loc = OffsetFromUVOffset(positionOffsetSouth, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetSouth; + } + else if(targetRot == Rot4.North) + { + var loc = OffsetFromUVOffset(positionOffsetNorth, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetNorth; + } + else if (targetRot == Rot4.East) + { + var loc = OffsetFromUVOffset(positionOffsetEast, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetEast; + } + else if (targetRot == Rot4.West) + { + var loc = OffsetFromUVOffset(positionOffsetWest, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetWest; + } + + + + + Graphic graphic = null; + if (SizedApparelUtility.IsHorny(pawn)) + graphic = bodyPartGraphicHorny; + if (graphic == null) + graphic = bodyPartGraphic; + + if (graphic == null) + return; + + //ForFurskinOffset + if(bodyDrawType == RotDrawMode.Fresh && HasFurSkin && AutoOffsetForFurCoveredBody) + { + //vector.y += 0.009187258f; //in PawnRenderer, it adds 0.009187258f. + + //graphic.maskPath does error? need to check + // worn fur body and naked fur body has different offsets... wtf + //TODO Need to Fix + } + + + + + Material mat; + + //If ForceWriteDepth, draw Cutout mesh for write depth. this is for avoid problem of body addons drawing under other meshes. such as breasts front of body but behind tail. + if (forceWriteZ || (!flags.FlagSet(PawnRenderFlags.Cache) && !isOverlay))// //(!flags.FlagSet(PawnRenderFlags.Cache) && !isOverlay) + { + Graphic Zgraphic = graphic.GetColoredVersion(ShaderDatabase.CutoutComplex, drawColor1, drawColor2); // ShaderDatabase.Cutout + Vector3 drawPositionZ = drawPosition; + drawPositionZ.y = drawPositionZ.y - 0.00001f; //Send Back of body, but it can still write depth. 1.4: send to 0 + + mat = flags.FlagSet(PawnRenderFlags.Cache) ? Zgraphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { Zgraphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); + GenDraw.DrawMeshNowOrLater(scaledBodyMesh, drawPositionZ, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue + } + + //shader must be mask + graphic = graphic.GetColoredVersion(shader, drawColor1, drawColor2); + + if (graphic.maskPath == null) + { + //Test + //graphic.maskPath = texturePath_Red; + } + + //drawPosition.y += 0.00001f; + mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { graphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); + GenDraw.DrawMeshNowOrLater(scaledBodyMesh, drawPosition, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); + + } + } + + + //TODO: Torso Pose? + + + public class BodyDef : Def + { + //public List BodyParts; + + + //defName = raceName ?? could it work? + + public List bodies = new List(); + + + //public List penisOffset; + //public List vaginaOffset; + //public List pubicHairOffset; + //public List udderOffset; + //public List bellyOffset; + //public List breastsOffset; + //public List anusOffset; + + } + + public class SizedApparelBody + { + public string customPoseOfBody = null; + + public bool canCustomPose() + { + //check apparels + return false; + } + } + + public class SizedApparelBodyPartOfssetDef : Def + { + //defName IsRaceName + + } + +} diff --git a/1.3/source/SizedApparel/SizedApparelBodyPartDef.cs b/1.3/source/SizedApparel/SizedApparelBodyPartDef.cs new file mode 100644 index 0000000..742f3f5 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelBodyPartDef.cs @@ -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 graphicBones = new List(); + + //Do Not Directly Use it + public List skeletons = new List(); + + + 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 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(); + + + 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; + } + } + +} diff --git a/1.3/source/SizedApparel/SizedApparelBodyPartDetail.cs b/1.3/source/SizedApparel/SizedApparelBodyPartDetail.cs new file mode 100644 index 0000000..31d6f8c --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelBodyPartDetail.cs @@ -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 ListvarName = new List(); + + } + + public class SizedApparelBodyPartVariationDef : Def + { + public string bodyPartName; + public Listvariations = new List(); + } + + 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(ref this.variation, "variation", null, false); + //Scribe_Values.Look(ref this.colorOverride, "colorOverride",null, false); + //Scribe_Values.Look(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.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.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(ref this.variation, "variation", null, false); + //Scribe_Values.Look(ref this.colorOverride, "colorOverride",null, false); + //Scribe_Values.Look(ref this.colorMode, "colorMode", colorOverrideMode.Default, false); + } + + public void InitComp(Pawn pawn = null) + { + HediffDef named = DefDatabase.GetNamed(this.parent.def.defName, true); + List allMaps_FreeColonistsAndPrisonersSpawned = PawnsFinder.AllMaps_FreeColonistsAndPrisonersSpawned; + pawn = ((allMaps_FreeColonistsAndPrisonersSpawned != null) ? allMaps_FreeColonistsAndPrisonersSpawned.RandomElement() : null); + if (pawn == null) + { + List all_AliveOrDead = PawnsFinder.All_AliveOrDead; + pawn = ((all_AliveOrDead != null) ? all_AliveOrDead.RandomElement() : null); + } + SizedApparelBodyPartDetail compHediffBodyPart = HediffMaker.MakeHediff(named, pawn, null).TryGetComp(); + 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.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 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(); + SizedApparelBodyPartDetail CompHediff = __result.TryGetComp(); + 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(); + SizedApparelBodyPartDetail CompHediff = hd.TryGetComp(); + + CompThing.variation = CompHediff.variation; + } + catch (NullReferenceException e) + { + Log.Error(e.StackTrace); + } + } + } + +} diff --git a/1.3/source/SizedApparel/SizedApparelBodyPartEditor.cs b/1.3/source/SizedApparel/SizedApparelBodyPartEditor.cs new file mode 100644 index 0000000..cc3f2e7 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelBodyPartEditor.cs @@ -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 + { + } +} diff --git a/1.3/source/SizedApparel/SizedApparelComp.cs b/1.3/source/SizedApparel/SizedApparelComp.cs new file mode 100644 index 0000000..2195d3c --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelComp.cs @@ -0,0 +1,1929 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using RimWorld; +using rjw; +using Verse; + +namespace SizedApparel +{ + [StaticConstructorOnStartup] + public class ApparelRecorderComp : ThingComp + { + Pawn pawn;// Parent Cache + + public bool recentClothFlag = true; + + public bool isDrawAge = true; + + public bool testbool = false; + public ApparelRecorderCompProperties Props => (ApparelRecorderCompProperties)this.props; + public bool hasUpdateBefore = false; + public bool hasUpdateBeforeSuccess = false; + public bool hasGraphicUpdatedBefore = false; // not yet + + public bool needToCheckApparelGraphicRecords = false; + public bool isDirty = true; + public bool isHediffDirty = true; + public bool isApparelDirty = true; + public bool isSkeletonDirty = true; + public bool isBodyAddonDirty = true; // reset all body addon graphics. + public bool hasUnsupportedApparel = true; + public bool havingSex = false;//Obsolete + public bool hasUpdateForSex = false;//Obsolete + string cachedBodytype; + + + public List cachedApparelGraphicRecord = new List(); + + + + public Hediff breastHediff = null; + public Hediff vaginaHediff = null; + public List penisHediffs = null; // RJW can attach multiple penis + public Hediff anusHediff = null; + public Hediff udderHediff = null;//RJW 4.6.8: Udder is not partof chest's breast. it attached to torso. + + public Color? nippleColor; //for menstruation cycles Mod + + //TODO Optimize Update Hediff Filter + private bool hasBreastsAddon = false; + private bool hasVaginaAddon = false; + private bool hasPenisAddon = false; + private bool hasAnusAddon = false; + private bool hasUdderAddon = false; + private bool hasPubicHairAddon = false; + + public float breastSeverity = -1; + + public float BreastSeverityCache = 0; + //public float BiggestBreastSeverityInAvailableTextures = 0; + + + //for breasts animation or something. + public bool ForceUpdateTickAnimation = false; + public bool ForceBlockTickAnimation = false; // useful when you have make fixed pose + public bool PrePositionCache; + public Vector3? prePositionCache; + public float? preAngleCache; + public int? preTickCache; + public Vector3 preVelocity = Vector3.zero; + public float preRotation = 0; + public Dictionary tickCache = new Dictionary(); + + + + public BodyDef bodyDef = null; + public List bodyAddons = new List(); // BodyParts Added form Defs + + public SkeletonDef skeletonDef; // for rebuild Skeleton + public Skeleton skeleton; + public bool skipSkeleton = false; + + //native BodyParts + public SizedApparelBodyPart bodyPartBreasts;//TODO: Make this as List + public SizedApparelBodyPart bodyPartNipple;//TODO + public List bodyPartPenises = new List(); + public List bodyPartBalls = new List(); + public SizedApparelBodyPart bodyPartVagina; + public SizedApparelBodyPart bodyPartAnus; + public SizedApparelBodyPart bodyPartBelly; + public SizedApparelBodyPart bodyPartMuscleOverlay;//TODO + public SizedApparelBodyPart bodyPartUdder; + + + public SizedApparelBodyPart bodyPartHips; + public List bodyPartThighs = new List(); + public List bodyPartHands = new List(); + public List bodyPartFeet = new List(); + + public PubicHairDef pubicHairDef = null; + public PubicHairDef initialPubicHairDef = null; // For StyleStaitionWork + public PubicHairDef nextPubicHairDef = null; // For StyleStaitionWork + public SizedApparelBodyPart bodyPartPubicHair; + + + public Graphic graphicSourceNaked = null; //original Graphic + public Graphic graphicSourceRotten = null; //original Graphic + public Graphic graphicSourceFurCovered = null; //original Graphic + + + public Graphic graphicbaseBodyNaked = null; + public SizedApparelTexturePointDef baseBodyNakedPoints; + public Graphic graphicbaseBodyCorpse = null; + public SizedApparelTexturePointDef baseBodyCorpsePoints; + public Graphic graphicbaseBodyRotten = null; + public SizedApparelTexturePointDef baseBodyRottenPoints; + public Graphic graphicbaseBodyFurCovered = null; + public SizedApparelTexturePointDef baseBodyFurCoveredPoints; + + + public AlienRaceSetting raceSetting = null; + + public string customPose = null; + public SizedApparelPose currentCustomPose = null; + + + public bool forceHorny = false; + + + public bool canDrawBreasts = false; + public bool canDrawPenis = false; + public bool canDrawVaginaAndAnus = false; + public bool canDrawTorsoParts = false; //belly and udder + + + //this may reset skeleton animation. also little have process + public void InitSkeleton() + { + skeletonDef = DefDatabase.GetNamedSilentFail(pawn.def.defName); + if (skeletonDef == null) + { + if (raceSetting != null && raceSetting.asHuman == true) //old: !SizedApparelSettings.UnsupportedRaceToUseHumanlike + { + skeletonDef = DefDatabase.GetNamedSilentFail("Human"); + } + } + if (skeletonDef != null) + { + if (this.pawn.story == null || this.pawn.story.bodyType == null) + { + foreach (Skeleton s in skeletonDef.skeletons) + { + if (s.bodyType == null) + { + this.skeleton = new Skeleton(s); + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply SkeletonDef: pawn withouth bodytype " + pawn.Name); + return; + } + } + } + else + { + //Setting Up Skeleton + foreach (Skeleton s in skeletonDef.skeletons) + { + if (s.bodyType == this.pawn.story.bodyType.defName) + { + this.skeleton = new Skeleton(s); + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply SkeletonDef: pawn with bodytype " + pawn.Name + " with SkeletonDef : " + this.pawn.story.bodyType.defName); + return; + } + } + } + this.skeleton = null; + } + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply SkeletonDef: No Skeleton Found for " + pawn.Name); + isSkeletonDirty = false; + } + + public void InitBodyAddons() + { + + bodyAddons.Clear(); + + //TODO + //bodyDef = DefDatabase.GetNamed(pawn.def.defName); + + bodyDef = DefDatabase.GetNamedSilentFail(pawn.def.defName); + + //bodyDef can be null + + if (bodyDef == null) + { + if (raceSetting != null && raceSetting.asHuman) //old: !SizedApparelSettings.UnsupportedRaceToUseHumanlike + { + bodyDef = DefDatabase.GetNamedSilentFail("Human"); + } + } + + + if (bodyDef != null && bodyDef.bodies != null) + { + if (pawn.story?.bodyType == null) + { + if(SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply BodyDef: pawn has no bodytype " + pawn.Name); + BodyWithBodyType body = null; + if(!bodyDef.bodies.NullOrEmpty()) + body = bodyDef.bodies[0]; + if (body != null && body.Addons != null) + { + foreach (var bodyaddon in body.Addons) + { + if (bodyaddon == null) + continue; + var a = new SizedApparelBodyPart(pawn, this, bodyaddon.partName, bodyaddon.bodyPartOf, bodyaddon.defaultHediffName, bodyaddon.isBreasts, false, bodyaddon.customPath, bodyaddon.colorType, bodyaddon.mustHaveBone); + a.SetDepthOffsets(bodyaddon.depthOffset.south, bodyaddon.depthOffset.north, bodyaddon.depthOffset.east, bodyaddon.depthOffset.west); + //a.SetDepthOffsets(bodyaddon.depthOffset); + a.SetCenteredTexture(bodyaddon.centeredTexture); + bodyAddons.Add(a); + break; + } + } + } + else + { + foreach (BodyWithBodyType body in bodyDef.bodies) + { + if (body.bodyType != null && body.bodyType == this.pawn.story.bodyType.defName) + { + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply BodyDef: matched BodyTyped Body for " + pawn.Name); + if (body != null && body.Addons != null) + { + foreach (var bodyaddon in body.Addons) + { + if (bodyaddon == null) + continue; + var a = new SizedApparelBodyPart(pawn, this, bodyaddon.partName, bodyaddon.bodyPartOf, bodyaddon.defaultHediffName, bodyaddon.isBreasts, false, bodyaddon.customPath, bodyaddon.colorType, bodyaddon.mustHaveBone); + a.SetDepthOffsets(bodyaddon.depthOffset.south, bodyaddon.depthOffset.north, bodyaddon.depthOffset.east, bodyaddon.depthOffset.west); + //a.SetDepthOffsets(bodyaddon.depthOffset); + a.SetCenteredTexture(bodyaddon.centeredTexture); + bodyAddons.Add(a); + } + } + break; + } + + } + + } + + } + else + { + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Cannot find BodyDef for " + pawn.def.defName); + } + + //bodyPartBreasts = new SizedApparelBodyPart(pawn, this, "Breasts", SizedApparelBodyPartOf.Breasts, "Breasts", true, false, null); + //bodyPartBreasts.SetDepthOffsets(0.0113f, 0.001f, 0.0113f, 0.0113f); + + //bodyPartBreasts.SetPositionOffsets(Vector2.one, Vector2.one, Vector2.one, Vector2.one); + //bodyPartBreasts.scale = 2f; + //Nipple. should I separate from Breats? + //bodyPartNipple = new SizedApparelBodyPart(pawn, this, "Nippple", SizedApparelBodyPartOf.Breasts, "Breasts", true, false); + //bodyPartBreasts.SetDepthOffsets(0.0114f, 0.000f, 0.0114f, 0.0114f); + + //bodyPartUdder = new SizedApparelBodyPart(pawn, this, "Udder", SizedApparelBodyPartOf.Udder, "UdderBreasts", true, false); + //bodyPartUdder.SetDepthOffsets(0.0112f, 0.0005f, 0.0112f, 0.0112f); + + //UdderNipple...? + //bodyPartUdder = new SizedApparelBodyPart(p, "Udder", SizedApparelBodyPartOf.Udder, "UdderBreasts", true, false); + //bodyPartUdder.SetDepthOffsets(0.0112f, 0.0005f, 0.0112f, 0.0112f);\ + + //bodyPartVagina = new SizedApparelBodyPart(pawn, this, "Vagina", SizedApparelBodyPartOf.Vagina, "Vagina", false, false); + //bodyPartVagina.SetDepthOffsets(0.0088f, 0.0100f, 0.0088f, 0.0088f); + + //bodyPartAnus = new SizedApparelBodyPart(pawn, this, "Anus", SizedApparelBodyPartOf.Anus, "Anus", false, false); + //bodyPartAnus.SetDepthOffsets(0.0093f, 0.0105f, 0.0093f, 0.0093f); + + //bodyPartBelly = new SizedApparelBodyPart(pawn, this, "Belly", SizedApparelBodyPartOf.Belly, "BellyBulge", false, false); + //bodyPartBelly.SetDepthOffsets(0.0098f, 0.0002f, 0.0098f, 0.0098f); + + //bodyPartPubicHair = new SizedApparelBodyPart(pawn, this, "PubicHair", SizedApparelBodyPartOf.PubicHair, "Default", false, false, null, ColorType.Hair); + //bodyPartPubicHair.SetDepthOffsets(0.0099f, 0.0099f, 0.0089f, 0.0089f); + } + + public void ResetBodyAddonBoneLink() + { + string s; + foreach(var a in bodyAddons) + { + s = a.bone?.name; + if (s == null) + continue; + a.SetBone(skeleton.FindBone(s)); + } + } + + public override void Initialize(CompProperties props) + { + base.Initialize(props); + this.pawn = this.parent as Pawn; + + + } + + public override void PostDeSpawn(Map map) + { + base.PostDeSpawn(map); + } + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + UpdateRaceSettingData(); // include race Setting + InitSkeleton(); + InitBodyAddons(); + } + + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Values.Look(ref customPose, "customPose"); // save pawn's custom pose. Each bodyparts will not saved. + Scribe_Defs.Look(ref pubicHairDef, "PubicHairDef"); + if (pubicHairDef == null) + { + pubicHairDef = SizedApparelUtility.GetRandomPubicHair(); + } + + //Scribe_Values.Look<>(); //TODO: save pubic hair data + } + + + + + /* + public override void CompTick() + { + if (PrePositionCache) + { + + } + base.CompTick(); + }*/ + /* + public override void CompTickRare() + { + base.CompTickRare(); + }*/ + + + + float penisAngle = 0; + public void SetPenisAngle(float angle) + { + penisAngle = angle; + + if(this.skeleton != null) + { + Bone penisBone = skeleton.FindBone("Penis"); + if (penisBone != null) + { + //Log.Message("SetPenisAngle : " + angle.ToString()); + penisBone.SetAngle(angle); + } + } + + + bool penisDown = false; + if (angle >= 120 && angle <= 250) + penisDown = true; + foreach (var p in bodyPartPenises) + { + if (penisDown) + { + p.SetCustomPose("PenisDown"); + } + else + { + p.SetCustomPose(null); + } + } + } + //do not call this in character creation from new game. + public void SetBreastJiggle(bool jiggle, int cooltime = 5, bool checkApparelForCanPose = false) + { + //SetJiggle has cooltime. + + + bool flag1 = true; + + //should set apparels pose? + //Use First BodyAddon which is partof Breasts + foreach(var a in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Breasts)) + { + if (flag1) + { + if (Find.TickManager.TicksGame < a.lastPoseTick + cooltime) + return; + flag1 = false; + } + + + if (jiggle) + { + bool flag2 = true; + if (flag2 && checkApparelForCanPose) + { + if (!a.CheckCanPose("JiggleUp", true, false, true, true, false)) + return; + flag2 = false; + } + + //may need to check apparels for aply pose + //bodyPartBreasts.CheckCanPose("JiggleUp",) + a.SetCustomPose("JiggleUp"); + } + else + { + //SetPoseFromPoseSet(null); + a.SetCustomPose(null); + } + } + + + } + + string[] testPose = { null, "JiggleUp", "JiggleCenter" }; + string[] testPose2 = { null, "PenisDown" }; + + public void UpdateTickAnim(Vector3 rootLoc, float angle) // call this in DrawPawnBody <- only called when it rendered + { + if (ForceBlockTickAnimation)// prevent breasts jiggle from other pose + return; + + if (skeleton == null) + return; + + if (Find.CameraDriver == null) + return; + + //do not calculate physics camera is far + if (Find.CameraDriver.CurrentZoom >= CameraZoomRange.Furthest) + return; + //int IdTick = parent.thingIDNumber * 20; //hint from yayo animation mod + + if (!SizedApparelUtility.CanApplySizedApparel(pawn)) + return; + + + if (SizedApparelSettings.breastsPhysics || ForceUpdateTickAnimation)//SizedApparelSettings.autoJiggleBreasts + { + + int tick; + if (this.preTickCache != null) + tick = Find.TickManager.TicksGame - this.preTickCache.Value; + else + tick = Find.TickManager.TicksGame; + + //if tick is not updated, don't update animation. + if (tick == 0) + return; + + Vector3 velocity; + if (this.prePositionCache != null) + velocity = (rootLoc - this.prePositionCache.Value);// /tick + else + velocity = Vector3.zero; + + float rotation; + + if (this.preAngleCache != null) + rotation = angle - this.preAngleCache.Value; + else + rotation = 0; + + float rotAcc = rotation - preRotation; + + + //Log.Message(velocity.ToString() + " , " + preVelocity.ToString()); + //UnityEngine's vector.normalize is safe for zero vector + //(Vector3.Dot(velocity.normalized, preVelocity.normalized)) < 0.2f + + float dotV = Vector3.Dot(velocity.normalized, preVelocity.normalized); + float velocityOffset = (velocity - preVelocity).magnitude; + + //Log.Message(pawn.ToString()); + //Log.Message("rotAcc : " + rotAcc.ToString()); + //Log.Message("Velocity.x : " + velocity.x.ToString()); + //Log.Message("Velocity.z : " + velocity.z.ToString()); + //Log.Message("dotV : " + dotV.ToString()); + //Log.Message("velocityOffset : " + velocityOffset.ToString()); + //&& dotV > 0.4f + if (((preVelocity != Vector3.zero && velocityOffset >= 0.02))|| Mathf.Abs(rotAcc) > 0.5) //(dotV == 0 ? 0:1), Mathf.Abs(dotV) // || Mathf.Abs(rotation) > 20 + { + //tickCache.Add("BreastsJiggleUp", Find.TickManager.TicksGame); + SetBreastJiggle(true,10,true); + + } + else + { + SetBreastJiggle(false,10, false); + } + + + //cache pre data + + this.prePositionCache = rootLoc; + this.preAngleCache = angle; + this.preRotation = rotation; + this.preTickCache = Find.TickManager.TicksGame; + this.preVelocity = velocity; + + + + + } + + //SetPoseFromPoseSet(testPose2.RandomElement()); + } + + + public bool isApparelGraphicRecordChanged() + { + if (pawn == null) + return false; + + var apparelGraphics = pawn.Drawer?.renderer?.graphics?.apparelGraphics; + if (apparelGraphics == null) + return false; + + //return false; //since 1.3 broken. force to return false; + if (!apparelGraphics.SequenceEqual(cachedApparelGraphicRecord)) + { + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel]:" + pawn + "'s apparel Record Changed! need to updating comp"); + return true; + } + + + return false; + } + + public void DrawAllBodyParts(Vector3 rootLoc, float angle, Rot4 facing, RotDrawMode bodyDrawType, PawnRenderFlags flags, Pawn ___pawn, Mesh bodyMesh) + { + if (this.isDrawAge && (!flags.FlagSet(PawnRenderFlags.Clothes) || !this.hasUnsupportedApparel || SizedApparelUtility.isPawnNaked(___pawn))) //TODO : Move it to CanDraw + { + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawVagina && SizedApparelUtility.CanDrawVagina(___pawn, flags)) + { + //if (this.bodyPartVagina != null) + // this.bodyPartVagina.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Vagina)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawAnus && SizedApparelUtility.CanDrawAnus(___pawn, flags)) + { + //if (this.bodyPartAnus != null) + // this.bodyPartAnus.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Anus)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawBelly && SizedApparelUtility.CanDrawBelly(___pawn, flags)) + { + //if (this.bodyPartBelly != null) + // this.bodyPartBelly.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Belly)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + //Draw Pubic Hair + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawPubicHair && SizedApparelUtility.CanDrawPubicHair(___pawn, flags)) + { + if (this.bodyPartPubicHair != null) + this.bodyPartPubicHair.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.PubicHair)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawUdder && SizedApparelUtility.CanDrawUdder(___pawn, flags)) + { + //if (this.bodyPartUdder != null) + // this.bodyPartUdder.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Udder)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + + } + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawBreasts && SizedApparelUtility.CanDrawBreasts(___pawn, flags) && (SizedApparelSettings.drawSizedApparelBreastsOnlyWorn ? !SizedApparelUtility.isPawnNaked(___pawn, flags) : true)) + { + //if (this.bodyPartBreasts != null) + // this.bodyPartBreasts.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Breasts)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawPenis && SizedApparelUtility.CanDrawPenis(___pawn, flags, true)) + { + + if (SizedApparelSettings.hideBallOfFuta ? !Genital_Helper.is_futa(___pawn) : true) + { + /* + foreach (SizedApparelBodyPart b in this.bodyPartBalls) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + }*/ + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Balls)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + /* + foreach (SizedApparelBodyPart p in this.bodyPartPenises) + { + p.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + }*/ + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Penis)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + + }//Draw BodyParts + + //Draw Modular Apparel Parts... TODO...? Is it passible? + if (flags.FlagSet(PawnRenderFlags.Clothes)) + { + + } + + + + + } + + } + + + //not working + public override void PostPostMake() + { + /* + Pawn pawn; + try + { + pawn = (Pawn)parent; + if (pawn != null) + { + if (!pawn.RaceProps.Humanlike) + return; + pawn.Drawer.renderer.graphics.ResolveAllGraphics(); + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparels] Component Inint And Resolve all Graphics for "+ pawn.Name); + } + } + catch + { + + } + */ + } + public void ClearHediffs() + { + breastHediff = null; + vaginaHediff = null; + if(penisHediffs != null) + penisHediffs.Clear(); + anusHediff = null; + udderHediff = null; + } + public void ClearBreastCacheValue() + { + breastHediff = null; + breastSeverity = -1; + BreastSeverityCache = 0; + } + public void ClearPenisCacheValue() + { + //TODO + } + public void ClearCanDraw() + { + canDrawBreasts = false; + canDrawPenis = false; + canDrawTorsoParts = false; + canDrawVaginaAndAnus = false; + } + public void ClearGraphics(bool clearBreasts = true) + { + //Since Injection of base body is now in Matarial. no need to keep + graphicSourceNaked = null; + graphicSourceFurCovered = null; + graphicSourceRotten = null; + + hasGraphicUpdatedBefore = false; + graphicbaseBodyNaked = null; + graphicbaseBodyRotten = null; + graphicbaseBodyFurCovered = null; + + return; + //Clear BodyParts + if (clearBreasts && bodyPartBreasts!= null) + bodyPartBreasts.Clear(); + if(bodyPartAnus != null) + bodyPartAnus.Clear(); + if (bodyPartBelly != null) + bodyPartBelly.Clear(); + if (bodyPartVagina != null) + bodyPartVagina.Clear(); + if (bodyPartPubicHair != null) + bodyPartPubicHair.Clear(); + + foreach(var a in bodyAddons) + { + a.Clear(); + } + + } + public void ClearAll(bool clearGraphics = true) + { + ClearBreastCacheValue(); + if(clearGraphics) + ClearGraphics(); + ClearHediffs(); + ClearCanDraw(); + hasUnsupportedApparel = false; + hasUpdateBefore = false; + hasUpdateBeforeSuccess = false; + needToCheckApparelGraphicRecords = false; + } + + public void SetDirty(bool clearPawnGraphicSet = false, bool dirtyHediff = true, bool dirtyApparel = true, bool dirtySkeleton = false, bool dirtyBodyAddons = false) + { + this.isDirty = true; + this.isHediffDirty = dirtyHediff; + this.isApparelDirty = dirtyApparel; + this.isSkeletonDirty = dirtySkeleton; + this.isBodyAddonDirty = dirtyBodyAddons; + if (clearPawnGraphicSet) + { + if (pawn == null) + return; + if (pawn.Drawer == null) + return; + if (pawn.Drawer.renderer == null) + return; + pawn.Drawer.renderer.graphics.ClearCache(); + } + + } + public void UpdateRaceSettingData() + { + if (pawn == null) + return; + + var loc_raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == pawn.def.defName); + if (loc_raceSetting == null) + return; + raceSetting = loc_raceSetting; + } + + public void CheckAgeChanged() + { + if (pawn == null) + return; + if (pawn.ageTracker == null) + return; + + //TODO. Cleanup + UpdateRaceSettingData(); + if (raceSetting == null) + return; + + if (raceSetting.drawMinAge < 0 || pawn.ageTracker.AgeBiologicalYearsFloat >= raceSetting.drawMinAge) + isDrawAge = true; + else + isDrawAge = false; + } + + public void FindAndApplyBodyGraphic(Pawn pawn, Graphic sourceGraphic, ref Graphic targetGraphicBaseBody, ref Graphic cachedSourceGraphic, string debugName) + { + const string baseBodyString = "_BaseBody"; + string baseBodyStringWithSex; + + if (SizedApparelSettings.useGenderSpecificTexture) + { + if (pawn.gender == Gender.Female) + { + baseBodyStringWithSex = baseBodyString + "F"; + } + else if (pawn.gender == Gender.Male) + { + baseBodyStringWithSex = baseBodyString + "M"; + } + else + { + baseBodyStringWithSex = baseBodyString; // + "N" //Does it need to add N? + } + } + else + baseBodyStringWithSex = baseBodyString; + string targetGraphicPath = null; + if (sourceGraphic != null) + { + //path = path.Insert(Math.Max(path.LastIndexOf('/'), 0), "/CustomPose/"+ customPose); + if (cachedSourceGraphic == null) + cachedSourceGraphic = sourceGraphic; + targetGraphicPath = cachedSourceGraphic.path; + + if (customPose != null) + targetGraphicPath = targetGraphicPath.Insert(Math.Max(targetGraphicPath.LastIndexOf('/'), 0), "/CustomPose/" + customPose); + + if (!targetGraphicPath.Contains(baseBodyString)) + { + if (SizedApparelSettings.useGenderSpecificTexture && pawn.gender != Gender.None) + { + if (targetGraphicBaseBody == null) + { + if (ContentFinder.Get((targetGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyStringWithSex, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else if (customPose != null) + { + targetGraphicPath = sourceGraphic.path; + if (ContentFinder.Get((targetGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyStringWithSex, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for "+ debugName + " Graphic: " + targetGraphicPath + baseBodyStringWithSex + "_south"); + } + } + } + } + if (targetGraphicBaseBody == null) + { + if (ContentFinder.Get((targetGraphicPath + baseBodyString + "_south"), false) != null) + { + // cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyString, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else if (customPose != null) + { + targetGraphicPath = sourceGraphic.path; + if (ContentFinder.Get((targetGraphicPath + baseBodyString + "_south"), false) != null) + { + //cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyString, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for " + debugName + " Graphic: " + targetGraphicPath + baseBodyString + "_south"); + } + + } + } + + } + else + targetGraphicBaseBody = sourceGraphic; + + } + + } + + public void Update(bool cache = true, bool fromGraphicRecord = true, bool updateGraphics = true, bool CheckApparel = true) + { + if (cache) + recentClothFlag = CheckApparel; + + + + isDirty = false; + bool flag = fromGraphicRecord; + needToCheckApparelGraphicRecords = false; + //flag = false; //TODO:fromGraphicRecord is forced not to do for a while. it will update later + + + + UpdateRaceSettingData(); + + + + if (!hasUpdateBefore) + { + InitSkeleton(); + InitBodyAddons(); + hasUpdateBefore = true; + } + else + { + //check is bodytype changed + if(cachedBodytype != pawn.story?.bodyType?.defName) + { + isSkeletonDirty = true; + } + if (isSkeletonDirty) + { + InitSkeleton(); + + if (isBodyAddonDirty) + InitBodyAddons(); + else + ResetBodyAddonBoneLink(); + } + else + { + if (isBodyAddonDirty) + InitBodyAddons(); + } + } + + if (skeleton == null) + { + if (Find.CurrentMap != null) + return; + } + + + if (!SizedApparelUtility.CanApplySizedApparel(pawn)) + return; + + + if (pubicHairDef == null) + { + pubicHairDef = SizedApparelUtility.GetRandomPubicHair(); + } + + + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Updating Component of " + pawn.Name); + if (updateGraphics) + { + ClearGraphics(); + //ClearHediffs(); + } + + + + //float breastSeverityCapped = 1000; + string bodyTypeDefName = null; + if (pawn.story != null) + bodyTypeDefName = pawn.story.bodyType?.defName; + float bellySeverity = 0; + + if (isHediffDirty) //Update Hediff Data + { + ClearHediffs(); + + + if(SizedApparelSettings.drawPenis || SizedApparelSettings.drawVagina || SizedApparelSettings.drawAnus) + { + BodyPartRecord genitalPart = Genital_Helper.get_genitalsBPR(pawn); + if (genitalPart != null) + { + var genitalList = Genital_Helper.get_PartsHediffList(pawn, genitalPart); + if (!genitalList.NullOrEmpty()) + { + if (SizedApparelSettings.Debug) + { + foreach (var g in genitalList) + { + Log.Message(" [SizedApparel] " + pawn.Name + "has hediff in genital (" + g.def.defName + ")"); + } + } + + //penisHediffs = genitalList.FindAll((Hediff h) => SizedApparelUtility.isPenis(h.def.defName)); + penisHediffs = genitalList.FindAll((Hediff h) => Genital_Helper.is_penis(h)); + //vaginaHediff = genitalList.FirstOrDefault((Hediff h) => SizedApparelUtility.isVagina(h.def.defName)); + vaginaHediff = genitalList.FirstOrDefault((Hediff h) => Genital_Helper.is_vagina(h)); + + } + } + } + + if (SizedApparelSettings.drawBelly) + { + //EggImplement as Pregnant + //need to Optimize... TODO... + List pregnancies = pawn.health?.hediffSet?.hediffs?.FindAll((Hediff h) => SizedApparelUtility.isPragnencyHediff(h) || SizedApparelUtility.isRJWEggHediff(h));//pregnancy and pregnant. has some issue with "pregnancy mood" + if (!pregnancies.NullOrEmpty()) + { + foreach (Hediff h in pregnancies) + { + //Set Labor Belly as Big Belly. + + //Code for 1.4 + /* + if (h.def == HediffDefOf.PregnancyLabor || h.def == HediffDefOf.PregnancyLaborPushing) + bellySeverity = Math.Max(bellySeverity, 1f); + else + bellySeverity = Math.Max(bellySeverity, h.Severity); + */ + bellySeverity = Math.Max(bellySeverity, h.Severity); + } + } + + //Licentia Lab Hediff + if (SizedApparelPatch.LicentiaActive) + { + Hediff cumflation = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("Cumflation")); + Hediff cumstuffed = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("Cumstuffed")); + bellySeverity += cumflation != null ? cumflation.Severity : 0; + bellySeverity += cumstuffed != null ? cumstuffed.Severity : 0; + } + + + } + + + + } + + CheckAgeChanged(); + + if (SizedApparelSettings.drawBreasts) + { + SizedApparelUtility.GetBreastSeverity(pawn, out breastSeverity, out breastHediff); + + } + + if (breastHediff != null) + { + + //get nipple color from Menstruation. + if (SizedApparelPatch.MenstruationActive) + { + nippleColor = Patch_Menstruation.GetNippleColor(breastHediff); + } + + + + if (pawn.gender == Gender.Male && !SizedApparelSettings.ApplyApparelPatchForMale) + { + CheckApparel = false; + } + + + if (CheckApparel || this.isApparelDirty) + { + hasUnsupportedApparel = SizedApparelUtility.hasUnSupportedApparelFromWornData(pawn, breastSeverity, breastHediff, true, flag); + + } + else + { + hasUnsupportedApparel = false; + + } + //float validBreastTextureSeverity = SizedApparelUtility.GetBreastSeverityValidTextures(pawn, breastHediff); + if (SizedApparelSettings.useBreastSizeCapForApparels) // && hasUnsupportedApparel + { + BreastSeverityCache = Math.Min(BreastSeverityCache, breastSeverity); + + } + else + { + BreastSeverityCache = 1000; + } + //if (SizedApparelSettings.useBreastSizeCapForApparels) //SizedApparelSettings.useBreastSizeCapForApparels //wip + // breastSeverityCapped = Math.Min(BreastSeverityCache, breastSeverityCapped); + + + //float validBreastTextureSeverity = SizedApparelUtility.GetBreastSeverityValidTextures(pawn, breastHediff); + + //breast cache forApparel brests Check. This ignore variation! + //SizedApparelMod.CheckAndLoadAlienRaces(); + + var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType?.defName, breastHediff.def.defName, "Breasts", pawn.gender ,SizedApparelUtility.BreastSeverityInt(breastHediff.Severity)); + var raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == key.raceName); + + //TODO? Remove ValidBreastsTextureCheck... + float validBreastTextureSeverity = SizedApparelUtility.BreastSizeIndexToSeverity(SizedApparelsDatabase.GetSupportedBodyPartPath(key,true,"Breasts","Breasts").size); + //if (validBreastTextureSeverity < -5 && SizedApparelSettings.alienRaceSettings.settings[key.raceName].asHumanlike)//old: SizedApparelSettings.UnsupportedRaceToUseHumanlike + // validBreastTextureSeverity = SizedApparelUtility.GetBreastSeverityValidTextures(pawn, breastHediff, "Humanlike"); + BreastSeverityCache = Math.Min(BreastSeverityCache, validBreastTextureSeverity); + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] cached Severity : " + BreastSeverityCache); + } + //penisHediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)).FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("penis")); + + //since rjw race support's part name are too variation, not handling it. + + + var anusList = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)); + if(!anusList.NullOrEmpty()) + anusHediff = anusList.FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("anus")); + //udderHediff = Genital_Helper.get_PartsHediffList(pawn, pawn.RaceProps.body.AllParts.Find((BodyPartRecord bpr) => bpr.def.defName == "Torso")).FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("anus")); //not yet supported + + udderHediff = pawn.health?.hediffSet?.hediffs?.FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("udder")); + + var pawnRenderer = pawn.Drawer?.renderer?.graphics; + + if (updateGraphics) + { + + if (pawnRenderer != null) + { + //pawnRenderer.ResolveAllGraphics(); + + + //TODO Use Function To Make Clear Code + /* + FindAndApplyBodyGraphic(pawn, pawnRenderer.nakedGraphic, ref graphicbaseBodyNaked, ref graphicSourceNaked,"Naked"); + FindAndApplyBodyGraphic(pawn, pawnRenderer.rottingGraphic, ref graphicbaseBodyRotten, ref graphicSourceRotten, "Rotting"); + FindAndApplyBodyGraphic(pawn, pawnRenderer.nakedGraphic, ref graphicbaseBodyFurCovered, ref graphicSourceFurCovered, "FurCuvered"); + */ + const string baseBodyString = "_BaseBody"; + string baseBodyStringWithSex; + + if (SizedApparelSettings.useGenderSpecificTexture) + { + if (pawn.gender == Gender.Female) + { + baseBodyStringWithSex = baseBodyString + "F"; + } + else if (pawn.gender == Gender.Male) + { + baseBodyStringWithSex = baseBodyString + "M"; + } + else + { + baseBodyStringWithSex = baseBodyString; // + "N" //Does it need to add N? + } + } + else + baseBodyStringWithSex = baseBodyString; + + string nakedGraphicPath = null; + if (pawnRenderer.nakedGraphic != null) + { + //path = path.Insert(Math.Max(path.LastIndexOf('/'), 0), "/CustomPose/"+ customPose); + if(graphicSourceNaked == null) + graphicSourceNaked = pawnRenderer.nakedGraphic; + nakedGraphicPath = graphicSourceNaked.path; + + if (customPose != null) + nakedGraphicPath = nakedGraphicPath.Insert(Math.Max(nakedGraphicPath.LastIndexOf('/'), 0), "/CustomPose/" + customPose); + + if (!nakedGraphicPath.Contains(baseBodyString)) + { + if (SizedApparelSettings.useGenderSpecificTexture & pawn.gender != Gender.None) + { + if (graphicbaseBodyNaked == null) + { + if (ContentFinder.Get((nakedGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //graphicSourceNaked = pawnRenderer.nakedGraphic; + Shader shader = pawnRenderer.nakedGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; + } + else if (customPose != null) + { + nakedGraphicPath = pawnRenderer.nakedGraphic.path; + if (ContentFinder.Get((nakedGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //graphicSourceNaked = pawnRenderer.nakedGraphic; + Shader shader = pawnRenderer.nakedGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for naked Graphic: " + nakedGraphicPath + baseBodyStringWithSex + "_south"); + } + } + } + } + if (graphicbaseBodyNaked == null) + { + if (ContentFinder.Get((nakedGraphicPath + baseBodyString + "_south"), false) != null) + { + // graphicSourceNaked = pawnRenderer.nakedGraphic; + Shader shader = pawnRenderer.nakedGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyString, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; + } + else if (customPose != null) + { + nakedGraphicPath = pawnRenderer.nakedGraphic.path; + if (ContentFinder.Get((nakedGraphicPath + baseBodyString + "_south"), false) != null) + { + //graphicSourceNaked = pawnRenderer.nakedGraphic; + Shader shader = pawnRenderer.nakedGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyString, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for naked Graphic: " + nakedGraphicPath + baseBodyString + "_south"); + } + + } + } + + } + else + graphicbaseBodyNaked = pawnRenderer.nakedGraphic; + + } + //Finding Texture Points + if (false && graphicbaseBodyNaked != null) + { + SizedApparelTexturePointDef PointsDef = DefDatabase.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphicbaseBodyNaked.path); + if (SizedApparelSettings.Debug && PointsDef != null) + { + Log.Message("[SizedApparel] : NakedBaseBody Texture Points Def Found : " + PointsDef.defName); + } + baseBodyNakedPoints = PointsDef; + } + else + baseBodyNakedPoints = null; + + string rottingGraphicPath = null; + if (pawnRenderer.rottingGraphic != null) + { + if (graphicSourceRotten == null) + graphicSourceRotten = pawnRenderer.rottingGraphic; + rottingGraphicPath = graphicSourceRotten.path; + + if (customPose != null) + rottingGraphicPath = rottingGraphicPath.Insert(Math.Max(rottingGraphicPath.LastIndexOf('/'), 0), "/CustomPose/" + customPose); + + if (!rottingGraphicPath.Contains(baseBodyString)) + { + if (graphicbaseBodyRotten == null) + { + if (ContentFinder.Get((rottingGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //graphicSourceRotten = pawnRenderer.rottingGraphic; + Shader shader = pawnRenderer.rottingGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; + } + else if (customPose != null) + { + rottingGraphicPath = pawnRenderer.rottingGraphic.path; + if (ContentFinder.Get((rottingGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + graphicSourceRotten = pawnRenderer.rottingGraphic; + Shader shader = pawnRenderer.rottingGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for rotting Graphic: " + rottingGraphicPath + baseBodyStringWithSex + "_south"); + } + } + if (graphicbaseBodyRotten == null) + { + if (ContentFinder.Get((rottingGraphicPath + baseBodyString + "_south"), false) != null) + { + //graphicSourceRotten = pawnRenderer.rottingGraphic; + Shader shader = pawnRenderer.rottingGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyString, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; + } + else if (customPose != null) + { + rottingGraphicPath = pawnRenderer.rottingGraphic.path; + if (ContentFinder.Get((rottingGraphicPath + baseBodyString + "_south"), false) != null) + { + graphicSourceRotten = pawnRenderer.rottingGraphic; + Shader shader = pawnRenderer.rottingGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyString, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for rotting Graphic: " + rottingGraphicPath + baseBodyString + "_south"); + } + } + } + } + } + else + graphicbaseBodyRotten = pawnRenderer.rottingGraphic; + + } + //Finding Texture Points + if (false && graphicbaseBodyRotten != null) + { + SizedApparelTexturePointDef PointsDef = DefDatabase.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphicbaseBodyRotten.path); + if (SizedApparelSettings.Debug && PointsDef != null) + { + Log.Message("[SizedApparel] : RottenBaseBody Texture Points Def Found : " + PointsDef.defName); + } + baseBodyRottenPoints = PointsDef; + } + else + baseBodyRottenPoints = null; + + + string furCoveredGraphicPath = null; + + //Finding Texture Points + if (false && graphicbaseBodyFurCovered != null) + { + SizedApparelTexturePointDef PointsDef = DefDatabase.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphicbaseBodyFurCovered.path); + if (SizedApparelSettings.Debug && PointsDef != null) + { + Log.Message("[SizedApparel] : FurCoveredBaseBody Texture Points Def Found : " + PointsDef.defName); + } + baseBodyFurCoveredPoints = PointsDef; + } + else + baseBodyFurCoveredPoints = null; + + + /* + //Try to find sized Body if it's valid + int offset = 9999; + int currentBreastSizeIndex = 0; + float currentBreastSeverity = 0; + bool validNakedTexture = false; + bool validRottingTexture = false; + Graphic nakedGraphic; + Graphic rottingGraphic; + while (offset < SizedApparelUtility.size.Length) + { + string breastSeverityStringCache = SizedApparelUtility.BreastSeverityString(breastSeverity, offset, true, ref currentBreastSizeIndex, ref currentBreastSeverity); + //search bigger + //SizedApparelSettings.matchBodyTextureToMinimumApparelSize? currentBreastSizeIndex <= minSupportedBreasSizeIndex:true + if (validNakedTexture == false && nakedGraphicPath !=null) + { + if ((ContentFinder.Get((nakedGraphicPath + breastSeverityStringCache + "_south"), false) != null)) + { + if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= breastSeverityCapToDraw : true) + { + nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + breastSeverityStringCache, pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + //validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); + pawnRenderer.nakedGraphic = nakedGraphic; + validNakedTexture = true; + } + } + } + if (validRottingTexture == false && rottingGraphicPath != null) + { + if ((ContentFinder.Get((rottingGraphicPath + breastSeverityStringCache + "_south"), false) != null)) + { + if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= breastSeverityCapToDraw : true) + { + rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + breastSeverityStringCache, pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + //validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); + pawnRenderer.rottingGraphic = rottingGraphic; + validRottingTexture = true; + } + } + } + + //search smaller + + breastSeverityStringCache = SizedApparelUtility.BreastSeverityString(breastSeverity, offset, false, ref currentBreastSizeIndex, ref currentBreastSeverity); + + if (validNakedTexture == false) + { + if ((ContentFinder.Get((nakedGraphicPath + breastSeverityStringCache + "_south"), false) != null)) + { + if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= breastSeverityCapToDraw : true) + { + nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + breastSeverityStringCache, pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + //validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); + pawnRenderer.nakedGraphic = nakedGraphic; + validNakedTexture = true; + } + } + } + if (validRottingTexture == false) + { + if ((ContentFinder.Get((rottingGraphicPath + breastSeverityStringCache + "_south"), false) != null)) + { + if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= breastSeverityCapToDraw : true) + { + rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + breastSeverityStringCache, pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + //validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); + pawnRenderer.rottingGraphic = rottingGraphic; + validRottingTexture = true; + } + } + } + + if (validNakedTexture == true && validRottingTexture == true) + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] " + pawn.Name + "'s body texture has changed."); + break; + } + + offset++; + } + */ + } + + //graphicBreasts = SizedApparelUtility.GetBodyPartGraphic(pawn, breastHediff, true, "Breasts", "Breasts"); + //if(graphicBreasts == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) + // graphicBreasts = SizedApparelUtility.GetBodyPartGraphic(pawn, breastHediff, true, "Breasts", "Breasts", false, true, "Humanlike"); + + + if (SizedApparelSettings.drawBodyParts)//body parts update + { + if (SizedApparelSettings.drawBreasts) + { + + if (breastHediff != null) + { + var breastvar = breastHediff.TryGetComp(); + + foreach(var addon in bodyAddons) + { + if(addon.bodyPartOf == SizedApparelBodyPartOf.Breasts) + { + addon.SetHediffData(breastHediff.def.defName, SizedApparelUtility.BreastSeverityInt(breastHediff.Severity), SizedApparelUtility.BreastSeverityInt(BreastSeverityCache), breastvar?.variation); + addon.SetBone(skeleton?.FindBone("Breasts")); + addon.UpdateGraphic(); + } + } + //bodyPartBreasts.SetHediffData(breastHediff.def.defName, SizedApparelUtility.BreastSeverityInt(breastHediff.Severity), SizedApparelUtility.BreastSeverityInt(breastSeverityCapped), breastvar?.variation); + //bodyPartBreasts.UpdateGraphic(); + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Breasts) + { + addon.SetHediffData(null, -1); + } + } + } + + } + + + + + if (SizedApparelSettings.drawUdder) + { + if (udderHediff != null) + { + var udderVar = udderHediff.TryGetComp(); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Udder) + { + addon.SetHediffData(udderHediff.def.defName, SizedApparelUtility.BreastSeverityInt(udderHediff.Severity), 1000, udderVar?.variation); + addon.SetBone(skeleton?.FindBone("Udder")); + addon.UpdateGraphic(); + } + } + //bodyPartUdder.SetHediffData(udderHediff.def.defName, SizedApparelUtility.BreastSeverityInt(udderHediff.Severity), 1000, udderVar?.variation); + //bodyPartUdder.UpdateGraphic(); + + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Udder) + { + addon.SetHediffData(null, -1); + } + } + } + + + } + + + if (SizedApparelSettings.drawBelly) + { + + + + if (bellySeverity >= 0) + { + //var bellyVar = breastHediff.GetComp(); + string BellyVar = null; + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Belly) + { + addon.SetHediffData("BellyBulge", SizedApparelUtility.PrivatePartSeverityInt(bellySeverity), 1000, BellyVar); + addon.SetBone(skeleton?.FindBone("Belly")); + addon.UpdateGraphic(); + } + } + //bodyPartBelly.SetHediffData("BellyBulge", SizedApparelUtility.PrivatePartSeverityInt(bellySeverity), 1000, BellyVar); + //bodyPartBelly.UpdateGraphic(); + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Belly) + { + addon.SetHediffData(null, -1); + } + } + } + + } + + + if (SizedApparelSettings.drawVagina) + { + if (vaginaHediff != null) + { + var vaginaVar = vaginaHediff.TryGetComp(); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Vagina) + { + addon.SetHediffData(vaginaHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), 1000, vaginaVar?.variation); + addon.SetBone(skeleton?.FindBone("Vagina")); + addon.UpdateGraphic(); + + } + } + //bodyPartVagina.SetHediffData(vaginaHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), 1000, vaginaVar?.variation); + //bodyPartVagina.UpdateGraphic(); + + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Vagina) + { + addon.SetHediffData(null, -1); + } + } + } + } + + if (SizedApparelSettings.drawPubicHair) + { + if (pubicHairDef != null && pubicHairDef.defName != "None") // pubicHairDef != null // for testing + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.PubicHair) + { + addon.SetHediffData(pubicHairDef.defName, 0, 1000, null); + addon.SetBone(skeleton?.FindBone("PubicHair")); + addon.UpdateGraphic(); + } + } + + //bodyPartPubicHair.SetHediffData(pubicHairDef.defName, 0, 1000, null); + //bodyPartPubicHair.UpdateGraphic(); + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.PubicHair) + { + addon.SetHediffData(null, -1); + } + } + } + } + + if (SizedApparelSettings.drawPenis) + { + //TODO: Optimize.... memory leak issue? + //bodyPartPenises.Clear(); + //bodyPartBalls.Clear(); + if (!penisHediffs.NullOrEmpty()) + { + var penisHediff = penisHediffs[0]; + + if (penisHediff != null) + { + var penisVar = penisHediff.TryGetComp(); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Penis) + { + addon.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + addon.SetBone(skeleton?.FindBone("Penis")); + addon.UpdateGraphic(); + } + if (addon.bodyPartOf == SizedApparelBodyPartOf.Balls) + { + addon.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + addon.SetBone(skeleton?.FindBone("Balls")); + addon.UpdateGraphic(); + } + } + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Penis) + { + addon.SetHediffData(null, -1); + } + if (addon.bodyPartOf == SizedApparelBodyPartOf.Balls) + { + addon.SetHediffData(null, -1); + } + } + } + + + // Multiple Penis Drawing. obsolte + /* + for (int i = 0; i < penisHediffs.Count; i++) + { + penisHediff = penisHediffs[i]; + float offsetX = 0; // right and left + float offsetZ = 0; // up and down + float t = (i + 1f) / (penisHediffs.Count + 1); + offsetX = Mathf.Lerp(-0.05f, 0.05f, t); + offsetZ = Mathf.Lerp(-0.02f, 0.02f, t); + + if (penisHediff == null) + continue; + + Bone penisBone = null; + Bone ballsBone = null; + if(skeleton != null) + { + penisBone = skeleton.FindBone("Penis"); + ballsBone = skeleton.FindBone("Balls"); + if (ballsBone == null) + ballsBone = penisBone; + } + + + + var penisVar = penisHediff.TryGetComp(); + + SizedApparelBodyPart penis = new SizedApparelBodyPart(pawn, this, "Penis", SizedApparelBodyPartOf.Penis, "Penis", false, false, null,ColorType.Skin, penisBone); + penis.SetDepthOffsets(0.0108f, 0.0025f, 0.0108f, 0.0108f); + penis.SetPositionOffsets(new Vector2(offsetX, 0), new Vector2(-offsetX, 0), new Vector2(offsetX, offsetZ), new Vector2(offsetX, -offsetZ)); + penis.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + penis.centeredTexture = true; // Test Bone + penis.UpdateGraphic(); + bodyPartPenises.Add(penis); + + SizedApparelBodyPart balls = new SizedApparelBodyPart(pawn, this, "Balls", SizedApparelBodyPartOf.Balls, "Penis", false, false, "Penis/Balls", ColorType.Skin, ballsBone); + balls.SetDepthOffsets(0.0096f, 0.0085f, 0.0096f, 0.0096f); + balls.SetPositionOffsets(new Vector2(offsetX, 0), new Vector2(-offsetX, 0), new Vector2(offsetX, offsetZ), new Vector2(offsetX, -offsetZ)); + balls.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + balls.centeredTexture = true; // Test Bone + balls.UpdateGraphic(); + bodyPartBalls.Add(balls); + */ + + } + } + + else + { + bodyPartPenises.Clear(); + bodyPartBalls.Clear(); + } + + if (SizedApparelSettings.drawAnus) + { + + /* + graphicAnus = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus"); + if (graphicAnus == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) + graphicAnus = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", false, true, "Humanlike"); + + graphicAnus_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", true); + if (graphicAnus_horny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) + graphicAnus_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", true, true, "Humanlike"); + */ + if (anusHediff != null) + { + var anusVar = anusHediff.TryGetComp(); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Anus) + { + addon.SetHediffData(anusHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(anusHediff.Severity), 1000, anusVar?.variation); + addon.SetBone(skeleton?.FindBone("Anus")); + addon.UpdateGraphic(); + } + } + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Anus) + { + addon.SetHediffData(null, -1); + } + } + } + } + + } + hasGraphicUpdatedBefore = true; + } + + if(CheckApparel) + cachedApparelGraphicRecord = pawnRenderer.apparelGraphics.ToList(); + else + cachedApparelGraphicRecord = new List(); + + hasUpdateBeforeSuccess = true; + this.isHediffDirty = false; + this.isApparelDirty = false; + this.isSkeletonDirty = false; + } + + + + + + //public bool hasUnsupportedApparel => Props.hasUnsupportedApparel; + //public bool hasUpdateBefore => Props.hasUpdateBefore; + /* + public void SetHasUnsupportedApparel(bool _hasUnsupportedApparel) + { + if(Props !=null) + Props.hasUnsupportedApparel = _hasUnsupportedApparel; + this.hasUnsupportedApparel = _hasUnsupportedApparel; + } + public void SetHasUpdateBefore(bool _hasUpdateBefore) + { + if (Props != null) + Props.hasUpdateBefore = _hasUpdateBefore; + this.hasUpdateBefore = _hasUpdateBefore; + }*/ + public IEnumerable GetAllSizedApparelBodyPart() // can return null bodyparts + { + yield return bodyPartBreasts; + yield return bodyPartNipple; + /* + foreach (SizedApparelBodyPart bp in bodyPartBreasts) + { + yield return bp; + } + foreach (SizedApparelBodyPart bp in bodyPartNipple) + { + yield return bp; + }*/ + foreach (SizedApparelBodyPart bp in bodyPartPenises) + { + yield return bp; + } + foreach (SizedApparelBodyPart bp in bodyPartBalls) + { + yield return bp; + } + yield return bodyPartVagina; + yield return bodyPartAnus; + yield return bodyPartBelly; + yield return bodyPartMuscleOverlay;//TODO + yield return bodyPartUdder; + yield return bodyPartPubicHair; //TODO + yield return bodyPartHips; + foreach (SizedApparelBodyPart bp in bodyPartThighs) + { + yield return bp; + } + foreach (SizedApparelBodyPart bp in bodyPartHands) + { + yield return bp; + } + foreach (SizedApparelBodyPart bp in bodyPartFeet) + { + yield return bp; + } + foreach (SizedApparelBodyPart bp in bodyAddons) + { + yield return bp; + } + } + public IEnumerable GetSizedApparelBodyParts(SizedApparelBodyPartOf targetPartOf, bool returnNullPart = false) + { + foreach(SizedApparelBodyPart bp in GetAllSizedApparelBodyPart()) + { + if (bp == null) + { + if (returnNullPart) + yield return bp; + else + continue; + } + + + if (bp.bodyPartOf.IsPartOf(targetPartOf)) + yield return bp; + } + } + + public void SetPoseFromPoseSet(string poseSetName, bool autoUpdate = true, bool autoSetPawnGraphicDirty = false) + { + if (poseSetName.NullOrEmpty()) + { + ClearAllPose(autoUpdate, autoSetPawnGraphicDirty); + return; + } + + var poseSetDef = DefDatabase.GetNamed(poseSetName,false); + if (poseSetDef == null) + return; + if (poseSetDef.poses.NullOrEmpty()) + return; + foreach (SizedApparelPose pose in poseSetDef.poses) + { + var bodyParts = GetSizedApparelBodyParts(pose.targetBodyPart); + //if (bodyParts == null) + // continue; + if (bodyParts.EnumerableNullOrEmpty()) + continue; + foreach (SizedApparelBodyPart bp in bodyParts.ToList()) + { + if(bp != null) + bp.SetCustomPose(poseSetName, autoUpdate, autoSetPawnGraphicDirty); + } + } + } + public void ClearAllPose(bool autoUpdate = true, bool autoSetPawnGraphicDirty = false) + { + foreach (SizedApparelBodyPart bp in GetAllSizedApparelBodyPart()) + { + if(bp != null) + bp.SetCustomPose(null, autoUpdate, autoSetPawnGraphicDirty); + } + } + public void ClearPose(SizedApparelBodyPartOf targetPartOf , bool autoUpdate = true, bool autoSetPawnGraphicDirty = false) + { + foreach (SizedApparelBodyPart bp in GetSizedApparelBodyParts(targetPartOf)) + { + if(bp != null) + bp.SetCustomPose(null, autoUpdate, autoSetPawnGraphicDirty); + } + } + + } + [StaticConstructorOnStartup] + public class ApparelRecorderCompProperties : CompProperties + { + public bool hasUnsupportedApparel = false; + public bool hasUpdateBefore = false; + + public ApparelRecorderCompProperties() + { + this.compClass = typeof(ApparelRecorderComp); + } + public ApparelRecorderCompProperties(Type compClass) : base(compClass) + { + this.compClass = compClass; + } + + } +} diff --git a/1.3/source/SizedApparel/SizedApparelDef.cs b/1.3/source/SizedApparel/SizedApparelDef.cs new file mode 100644 index 0000000..524457a --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelDef.cs @@ -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 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 SizedTextures; + + public ApparelTexture GetApparelTexture(BodyTypeDef bodytype) + { + if(SizedTextures != null) + { + return SizedTextures.FirstOrDefault(a => a.bodytype == bodytype); + } + return null; + } + } + +} diff --git a/1.3/source/SizedApparel/SizedApparelMain.cs b/1.3/source/SizedApparel/SizedApparelMain.cs new file mode 100644 index 0000000..0f80d38 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelMain.cs @@ -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(); + 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(); + 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(); + 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.Get((pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null) + { + pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic = GraphicDatabase.Get(pawnGraphicSet.nakedGraphic.path + "_UnsupportedApparel", pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo); + validBody = true; + } + if (pawnGraphicSet.dessicatedGraphic != null) + if (ContentFinder.Get((pawnGraphicSet.dessicatedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null) + { + pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get(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.Get(currentPath.Substring(0, currentPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null) + { + pawnGraphicSet.nakedGraphic = GraphicDatabase.Get((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.Get(currentDessicatedPath.Substring(0, currentDessicatedPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null) + { + pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get((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(); + 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(); + 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 __result) + { + var resualtCach = __result; + + if (SizedApparelSettings.drawBodyParts) + { + var privateParts = new List(); + 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 __result) + { + if (__result == null) + return; + int num = facing.AsInt + 1000 * (int)bodyCondition; + List 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(); + + //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(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(); + 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 __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(); + 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(); + 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 __result, bool drawClothes) + { + List loc = new List(); + + 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(); + 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(); + 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(); + 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 __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(); + 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(); + if (comp == null) + return; + } + + } + + + +} + + diff --git a/1.3/source/SizedApparel/SizedApparelPoseSet.cs b/1.3/source/SizedApparel/SizedApparelPoseSet.cs new file mode 100644 index 0000000..4356695 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelPoseSet.cs @@ -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(); + + if (comp == null) + return; + if (comp.customPose == null) + return; + + SizedApparelPoseDef poseDef = DefDatabase.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 poses; + + } + + public class PoseDef : Def + { + + } + + + public class SizedApparelPose + { + //public string poseName; use defName as PoseName + public SizedApparelBodyPartOf targetBodyPart = SizedApparelBodyPartOf.Torso; + //public List headOffset; + + } + +} diff --git a/1.3/source/SizedApparel/SizedApparelPubicHair.cs b/1.3/source/SizedApparel/SizedApparelPubicHair.cs new file mode 100644 index 0000000..a039c84 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelPubicHair.cs @@ -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 + { + + } +} diff --git a/1.3/source/SizedApparel/SizedApparelSettingcs.cs b/1.3/source/SizedApparel/SizedApparelSettingcs.cs new file mode 100644 index 0000000..155822d --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelSettingcs.cs @@ -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 alienRaces = new List(); + public static List alienRacesAllowHumanlikTextures = new List(); //This Value Will be Saved and loaded + public static string alienRaceSearch = ""; + public static Vector2 alienRacesListScrollPos; + public static List alienRaceSettings = new List(); + + //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(ref alienRaceSettings, "alienSettings", LookMode.Deep); + if (Scribe.mode == LoadSaveMode.LoadingVars) + { + if (alienRaceSettings == null) + { + alienRaceSettings = new List(); + } + + 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 alienDefList = new List(); // 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(); + if (true)//alienDefList.Count == 0 + { + IEnumerable HumanlikeRaces; + HumanlikeRaces = DefDatabase.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(); + if (comp != null) + { + comp.UpdateRaceSettingData(); + comp.SetDirty(clearPawnGraphicSet,true,true,true); + } + + } + } + } + + + + + public SizedApparelMod(ModContentPack content) : base(content) + { + this.settings = GetSettings(); + } + + 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 alienSettingListLoc = new List(); + 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 label, ref List 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(alienRacesToAllowHumanlikes); + if (flag3) + { + alienRacesToAllowHumanlikes = new List(); + } + 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(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.GetNamed(label[i], false)); + RaceEditorWindow raceEditorWindow = new RaceEditorWindow(); + raceEditorWindow.alienRace = DefDatabase.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(); + } + } + +} diff --git a/1.3/source/SizedApparel/SizedApparelStyleStationPatch.cs b/1.3/source/SizedApparel/SizedApparelStyleStationPatch.cs new file mode 100644 index 0000000..5964db0 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelStyleStationPatch.cs @@ -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 ___tabs, Dialog_StylingStation.StylingTab ___curTab, float ___viewRectHeight, ref List ___tmpStyleItems, bool ___devEditMode, Pawn ___pawn, Color ___desiredHairColor) + { + + if (!SizedApparelSettings.drawPubicHair) + return; + + + //Widgets.DrawMenuSection(rect); + //TabDrawer.DrawTabs(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().pubicHairDef = h; + //___pawn.story.hairDef = h; + }, (StyleItemDef h) => ___pawn.GetComp().pubicHairDef == h, (StyleItemDef h) => ___pawn.GetComp().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 tmpStyleItems, bool devEditMode, Pawn pawn, Color desiredHairColor, Rect rect, ref Vector2 scrollPosition, Action drawAction, Action selectAction, Func hasStyleItem, Func hadStyleItem, Func extraValidator = null, bool doColors = false) + { + + //Color desiredHairColor = AccessTools.FieldRefAccess(dialog_StylingStation, "desiredHairColor"); + + int total_pubes_count = 0; + total_pubes_count = DefDatabase.AllDefs.Count(); + + //need child patch? + if (total_pubes_count <= 0) + { + Widgets.NoneLabelCenteredVertically(rect, "(" + "NoneUsableForPawn".Translate(pawn.Named("PAWN")) + ")"); + return; + } + + ApparelRecorderComp comp = pawn.GetComp(); + + + + 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.AllDefs + where (devEditMode || PawnStyleItemChooser.WantsToUseStyle(pawn, x, null) || hadStyleItem(x)) && (extraValidator == null || extraValidator(x)) + select x);*/ + tmpStyleItems.AddRange(DefDatabase.AllDefs);// just add All Pubic Hair def. + + tmpStyleItems.SortBy((StyleItemDef x) => -PawnStyleItemChooser.StyleItemChoiceLikelihoodFor(x, pawn)); + if (tmpStyleItems.NullOrEmpty()) + { + 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 allHairColors; + private static List AllHairColors + { + get + { + if (allHairColors == null) + { + allHairColors = (from ic in DefDatabase.AllDefsListForReading + select ic.color).ToList(); + allHairColors.SortByColor((Color x) => x); + } + return allHairColors; + } + } + + + static void AddPubicHairTab(Dialog_StylingStation stylingStation, List 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 Transpiler(IEnumerable instructions) + { + bool isHair = false; + MethodInfo tabAdd = AccessTools.DeclaredMethod(typeof(List),"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(); + + //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(); + if (comp == null) + return; + comp.initialPubicHairDef = comp.pubicHairDef; + } + } + +} + diff --git a/1.3/source/SizedApparel/SizedApparelTexturePointDef.cs b/1.3/source/SizedApparel/SizedApparelTexturePointDef.cs new file mode 100644 index 0000000..f36b5b1 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelTexturePointDef.cs @@ -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 SouthBodyPartPoints = new List(); + public List NorthBodyPartPoints = new List(); + public List EastBodyPartPoints = new List(); + + //can be null. then use EastBodyPartPoints + public List WestBodyPartPoints = new List(); + + + + } +} diff --git a/1.3/source/SizedApparel/SizedApparelUtility.cs b/1.3/source/SizedApparel/SizedApparelUtility.cs new file mode 100644 index 0000000..4bc05cc --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelUtility.cs @@ -0,0 +1,2130 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RimWorld; +using Verse; +using HarmonyLib; +using UnityEngine; +using rjw; + +namespace SizedApparel +{ + public static class SizedApparelUtility + { + //DefName, BodyTypeName, targetTextureInt(index is breasts hediff) + //static Dictionary>> sizedApparelSupportCache = new Dictionary>>(); + + + //those breasts size codes are hard coded. maybe some days, It needs to be fixed + public static string chestString = "Chest"; + public static string breastsString = "Breasts"; + + static string Titanic = "_10"; + static string Colossal = "_9"; + static string Gargantuan = "_8"; + static string Massive = "_7"; + static string Enormous = "_6"; + static string Huge = "_5"; + static string Large = "_4"; + static string Average = "_3"; + static string Small = "_2"; + static string Tiny = "_1"; + static string Nipples = "_0"; + //static String[] size = new string[10] { "_0", "_1", "_2", "_3", "_4", "_5" , "_6", "_7", "_8", "_9"}; + public static string[] breastsSizeStrings = new string[11] { Nipples, Tiny, Small, Average, Large, Huge, Enormous, Massive, Gargantuan, Colossal, Titanic }; + public static string[] commonSizeStrings = new string[6] { Nipples, Tiny, Small, Average, Large, Huge}; + + [Obsolete] + public static int findAvailableSmallerSizeFromSetting(int current) + { + + int target = current; + target = Math.Min(target, breastsSizeStrings.Length - 1); + while (target > 0) + { + if (SizedApparelSettings.getUseSettingFromIndex(target) == false) + target--; + else + break; + } + return target; + } + [Obsolete] + public static int findAvailableBiggerSizeFromSetting(int current) + { + + int target = current; + + while (target < breastsSizeStrings.Length) + { + if (SizedApparelSettings.getUseSettingFromIndex(target) == false) + target++; + else + break; + } + target = Math.Min(target, breastsSizeStrings.Length - 1); + return target; + } + [Obsolete] + public static int findAvailableSizeFromSetting(int current, bool findBigger) + { + if (findBigger) + return findAvailableBiggerSizeFromSetting(current); + else + return findAvailableSmallerSizeFromSetting(current); + } + + + public static bool GetBreastSeverity(Pawn pawn, out float BreastSeverity, out Hediff breastHediff) + { + + //string breastsString = + ; + float _breastSeverity = -1; + Hediff _breastHediff = null; + bool result = false; + + if (SizedApparelPatch.RJWActive || (SizedApparelPatch.SJWActive&&SizedApparelSettings.useSafeJobBreasts)) + { + //__instance.pawn.health.hediffSet.HasHediff(Hediff ,BodyPartRecord ,false); + //__instance.pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined, null, null).Any((BodyPartRecord bpr) => bpr.untranslatedCustomLabel == label || bpr.def.defName == label); + + //-------------------------------------------------------------------------------------------------- + /* + foreach (Hediff hediff in pawn.health.hediffSet.hediffs) + { + if (hediff != null) + { + + if (hediff.Part != null) + { + + if (hediff.Part.def.defName.Equals(chestString)) + { + if (hediff.def.defName.EndsWith(breastsString)) + { + //Log.Message("Found Breast Hediff"); + _breastSeverity = hediff.Severity; + _breastHediff = hediff; + result = true; + //Log.Message(_breastSeverity.ToString()); + } + } + } + } + }*/ + var breastList = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_breastsBPR(pawn)); + Hediff hediff = null; + if(!breastList.NullOrEmpty()) + hediff = breastList.FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("breast")); + if(hediff != null) + { + _breastSeverity = hediff.Severity; + _breastHediff = hediff; + result = true; + } + }//Find Breasts in chest + if(SizedApparelSettings.Debug) + Log.Message("[Sized Apparel]" + pawn.Name + "'s breasts severity: " + _breastSeverity.ToString()); + BreastSeverity = _breastSeverity; + breastHediff = _breastHediff; + return result; + + } + public static Graphic GetSizedApparelGraphic(Graphic sourceGraphic, float breastSeverity, string wearerDefName = null, string breastHediff = null, string customPose = null, Gender gender = Gender.None) + { + int currentBreastSizeIndex = -1; + float currentBreastSeverity = -1; + string s; + bool flag = false; + return GetSizedApparelGraphic(sourceGraphic, breastSeverity, out currentBreastSizeIndex, out currentBreastSeverity, out flag, out s, wearerDefName, breastHediff, customPose, gender); + } + + public static Graphic GetSizedApparelGraphic(Graphic sourceGraphic, float breastSeverity , out int indexOut, out float severityOut, out bool result, out string hediffResult, string wearerDefName = null, string breastHediffName = null, string customPose = null, Gender gender = Gender.None) + { + indexOut = -1; + severityOut = -1; + result = false; + hediffResult = null; + + if (sourceGraphic == null) + { + return null; + } + + + string path; + string extraPath = null; + string raceExtraPath = null; + string racePath = null; + + + + + //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; + path = sourceGraphic.path; + + if (customPose != null) + { + path = path.Insert(Math.Max(path.LastIndexOf('/'), 0), "/CustomPose/"+ customPose); + } + + string genderSting; + if (gender == Gender.Female) + { + genderSting = "F"; + } + if (gender == Gender.Male) + { + genderSting = "M"; + } + else + genderSting = string.Empty; + + path = path + genderSting; + + if (wearerDefName != null) + racePath = path + "_" + wearerDefName; + if (breastHediffName != null) + { + extraPath = path + "_" + breastHediffName; + if (wearerDefName != null) + raceExtraPath = path + "_" + wearerDefName + "_" + breastHediffName; + } + + + + + + + int offset = 0; + //int offsetLimit = 10; + + + bool validTexture = false; + Graphic graphic = null; + bool findBigger = true; // if false : search smaller first + string pathString = ""; + while (offset < SizedApparelUtility.breastsSizeStrings.Length) + { + if (breastHediffName != null) + { + if(raceExtraPath != null) + { + pathString = raceExtraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + validTexture = true; + result = true; + hediffResult = breastHediffName; + //Log.Message(extraPath + BreastSeverityString(breastSeverity, offset, findBigger) + ":Extra Texture Found"); + break; + } + } + + + pathString = extraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + validTexture = true; + result = true; + hediffResult = breastHediffName; + //Log.Message(extraPath + BreastSeverityString(breastSeverity, offset, findBigger) + ":Extra Texture Found"); + break; + } + + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); + + if(racePath != null) + { + pathString = racePath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + validTexture = true; + result = true; + hediffResult = null; + //Log.Message(path + BreastSeverityString(breastSeverity, offset, findBigger) + ":Texture Found"); + break; + } + } + + + pathString = path + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + result = true; + hediffResult = null; + //Log.Message(path + BreastSeverityString(breastSeverity, offset, findBigger) + ":Texture Found"); + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); + + //Log.Warning(path + BreastSeverityString(breastSeverity, offset, findBigger) + ":Texture Not Found. Try bigger Texture."); + offset++; + if (indexOut == -1) + break; + } + if (validTexture == false) + { + offset = 0; + while (offset < SizedApparelUtility.breastsSizeStrings.Length) + { + if (breastHediffName != null) + { + if (raceExtraPath != null) + { + pathString = raceExtraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + result = true; + hediffResult = breastHediffName; + //Log.Message(extraPath + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Extra Texture Found"); + break; + } + } + + pathString = extraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + result = true; + hediffResult = breastHediffName; + //Log.Message(extraPath + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Extra Texture Found"); + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); + + //Log.Warning(extraPath + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); + } + + if(racePath != null) + { + pathString = racePath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + result = true; + hediffResult = null; + //Log.Message(path + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Texture Found"); + break; + } + } + + pathString = path + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); + graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + result = true; + hediffResult = null; + //Log.Message(path + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Texture Found"); + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); + + //Log.Warning(path + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Texture Not Found. Try smaller Texture."); + offset++; + if (indexOut == -1) + break; + } + } + + if (validTexture == false) + { + + //Log.Warning(path + BreastSeverityString(breastSeverity, offset, findBigger) + ":Texture Not Found. try smaller instead of bigger ."); + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] (" + path + ")apparel texture is not patched::missing texture"); + + graphic = sourceGraphic; + } + else + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] (" + path + ")apparel texture has been patched"); + + } + + + + //rec = new ApparelGraphicRecord(graphic, rec.sourceApparel); + result = validTexture; + + + //Find Humanlike for Alien. ps. null for search defealt texturepath + if(result == false & wearerDefName != null) + { + GetSizedApparelGraphic(sourceGraphic, breastSeverity, null , breastHediffName, customPose); + } + return graphic; + + } + + public static bool isPragnencyHediff(Hediff h) + { + + //1.4 + /* + //TODO. remove contain pregnancy side effect hediffs + if (h.def == HediffDefOf.PregnantHuman || h.def == HediffDefOf.Pregnant) + return true; + + //pawn who Giving birth. the pregnant hediff will be removed when the pawn is in labor + if (h.def == HediffDefOf.PregnancyLabor || h.def == HediffDefOf.PregnancyLaborPushing) + return true; + */ + return h.def.defName.ToLower().Contains("rjw_pregnancy") || h.def.defName.ToLower().EndsWith("pregnant") || h.def.defName.ToLower().EndsWith("pregnancy"); // h.def.defName.ToLower().Contains("pregnancy"); + } + public static bool isRJWEggHediff(Hediff h) + { + var e = h as rjw.Hediff_InsectEgg; + if (e == null) + return false; + return true; + } + + public static bool isBellyBulgeHediff(Hediff h) + { + if (isPragnencyHediff(h)) + return true; + if (isRJWEggHediff(h)) + return true; + if (SizedApparelPatch.LicentiaActive) + { + if (h.def.defName.ToLower().Contains("cumflation")) + return true; + if (h.def.defName.ToLower().Contains("cumstuffed")) + return true; + } + return false; + + + } + + public static bool isRJWParts(Hediff h) + { + return (isBreast(h.def.defName) || Genital_Helper.is_penis(h) || Genital_Helper.is_vagina(h) || isAnus(h.def.defName)); + //return (isBreast(defname)|| isPenis(defname)|| isVagina(defname)|| isAnus(defname)); + } + public static bool isBreast(string defname) + { + string lower = defname.ToLower(); + if (lower.Contains("breast")) + return true; + return false; + } + public static bool isUdder(string defname) + { + string lower = defname.ToLower(); + if (lower.Contains("udder")) + return true; + return false; + } + + [Obsolete] + public static bool isPenis(string defname) + { + string lower = defname.ToLower(); + if (lower.Contains("penis") || lower.Contains("dick") || (lower.Contains("tentacle") || lower.Contains("ovipositorm")))//(lower.Contains("tentacle")&&lower.Contains("penis") is for fertility. not for graphic + return true; + return false; + } + [Obsolete] + public static bool isVagina(string defname) + { + string lower = defname.ToLower(); + if (lower.Contains("vagina") || lower.Contains("ovipositorf")) + return true; + return false; + } + public static bool isAnus(string defname) + { + string lower = defname.ToLower(); + if (lower.Contains("anus")) + return true; + return false; + } + + //find valid breasts texture to choose apparel. + public static float GetBreastSeverityValidTextures(Pawn pawn, Hediff hediff, string customDefName = null) + { + ApparelRecorderComp comp = pawn.GetComp(); + if (comp == null) + return -1; + + + if (comp.hasUpdateBefore == false) + { + //comp.Update(true, true); + } + + if (pawn == null) + return -1; + if (hediff == null) + return -1; + string defName; + if (customDefName == null) + defName = pawn.def.defName; + else + defName = customDefName; + + const string bodyPartsFolderPath = "SizedApparel/BodyParts/"; + string defaultHediffName = "Breasts"; + string graphicFolderPath = bodyPartsFolderPath + defName + "/" + "Breasts" + "/"; + string fileName; + string extraFileName; + string bodyType = null; + if (pawn.story != null) + bodyType = pawn.story.bodyType?.defName; + if (bodyType != null) + { + fileName = defaultHediffName + ("_" + bodyType); + extraFileName = hediff.def.defName + ("_" + bodyType); + } + else + { + fileName = defaultHediffName; + extraFileName = hediff.def.defName; + } + string path = graphicFolderPath + fileName; + string extraPath = graphicFolderPath + extraFileName; + //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; + + //SizedApparelsDatabase.BodyPartDatabaseKey key = new SizedApparelsDatabase.BodyPartDatabaseKey(,) + //SizedApparelsDatabase.GetSupportedBodyPartPath() + + int offset = 0; + float targetBreastSeverity = hediff.Severity; + + bool validTexture = false; + bool findBigger = true; // if false : search smaller first + string pathString = ""; + int currentSizeIndex = -1; + float currentSeverity = -1; + while (offset < SizedApparelUtility.breastsSizeStrings.Length) + { + if (hediff != null) + { + pathString = extraPath + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, findBigger, ref currentSizeIndex, ref currentSeverity); + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); + + + validTexture = true; + break; + } + } + + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); + + pathString = path + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, findBigger, ref currentSizeIndex, ref currentSeverity); + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); + + validTexture = true; + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); + + offset++; + if (currentSizeIndex == -1) + break; + } + if (validTexture == false) + { + offset = 0; + while (offset < SizedApparelUtility.breastsSizeStrings.Length) + { + if (hediff != null) + { + pathString = extraPath + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); + + validTexture = true; + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); + + } + else + pathString = path + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); + + validTexture = true; + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); + + offset++; + if (currentSizeIndex == -1) + break; + } + } + + if (validTexture == false) + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] (" + path + ")Breasts texture is not patched::missing texture"); + return -10; + } + else + {// ValidTextureFound + return currentSeverity; + } + + } + + //It's heavy search. Do Not Call this function rapidly + public static Graphic GetBodyPartGraphic(string raceDefName, string bodyTypeName, string hediffDefName, bool isBreast, int sizeIndex, string folderName, string defaultHediffName, out int indexOut, out string hediffResult, bool hornyGraphic = false, string customRaceDefName = null, string variation = null, Gender gender = Gender.None) + { + Graphic graphic = null; //for return + //rec = new ApparelGraphicRecord(null, null); + string defName = raceDefName; + + if (customRaceDefName != null) + defName = customRaceDefName; + + string bodyType = bodyTypeName; + const string bodyPartsFolderPath = "SizedApparel/BodyParts/"; + string graphicFolderPath; + string targetFolderName = folderName; + if (hornyGraphic) + graphicFolderPath = bodyPartsFolderPath + defName + "/" + targetFolderName + "/Horny/"; + else + graphicFolderPath = bodyPartsFolderPath + defName + "/" + targetFolderName + "/"; + string fileName; + string extraFileName = null; + if (bodyType != null) + { + fileName = defaultHediffName + ("_" + bodyType); + if(hediffDefName != null) + extraFileName = hediffDefName + ("_" + bodyType); + } + else + { + fileName = defaultHediffName; + if (hediffDefName != null) + extraFileName = hediffDefName; + } + hediffResult = null; + //if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize) + // BreastSeverity = comp.BreastSeverityCache; + int currentSizeIndex = -1; + float currentSeverity = -1; + //int minSupportedBreastSizeIndex = 1000; + //float minSupportedBreastSeverity = 1000; + + //SizedApparelUtility.GetBreastSeverity(apparel.Wearer, out BreastSeverity, out breastHediff); + + string genderString; + if(gender == Gender.Female) + { + genderString = "F"; + } + if (gender == Gender.Male) + { + genderString = "M"; + } + else + genderString = string.Empty; + + + string path = graphicFolderPath + fileName + genderString; + string extraPath = graphicFolderPath + extraFileName + genderString; + //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; + + + int offset = 0; + int offsetLimit = 10 ; // = SizedApparelUtility.breastsSizeStrings.Length; + + + + float SeverityCapped; + + if (isBreast) + { + SeverityCapped = SizedApparelUtility.BreastSizeIndexToSeverity(sizeIndex); + offsetLimit = SizedApparelUtility.breastsSizeStrings.Length; + } + else + { + SeverityCapped = SizedApparelUtility.PrivatePartSizeIndexToSeverity(sizeIndex); + offsetLimit = SizedApparelUtility.commonSizeStrings.Length; + } + + bool validTexture = false; + + bool findBigger = true; // if false : search smaller first + string pathString = ""; + string pathStringWithVariatione = ""; + while (offset < offsetLimit) + { + if (hediffDefName != null) + { + if (isBreast) + pathString = extraPath + SizedApparelUtility.BreastSeverityString(SeverityCapped, offset, findBigger, ref currentSizeIndex, ref currentSeverity); + else + pathString = extraPath + SizedApparelUtility.PrivatePartsSevertyStringNotBreast(SeverityCapped, offset, findBigger, ref currentSizeIndex, ref currentSeverity); + + if (variation != null) + { + pathStringWithVariatione = pathString + "_" + variation; + if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); + + graphic = GraphicDatabase.Get(pathStringWithVariatione); + validTexture = true; + hediffResult = hediffDefName; + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); + } + + + + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); + + + //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); + //minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); + //graphic = new Graphic(); + graphic = GraphicDatabase.Get(pathString); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + hediffResult = hediffDefName; + //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Found"); + break; + } + //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Not Found."); + } + + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); + + if (isBreast) + pathString = path + SizedApparelUtility.BreastSeverityString(SeverityCapped, offset, findBigger, ref currentSizeIndex, ref currentSeverity); + else + pathString = path + SizedApparelUtility.PrivatePartsSevertyStringNotBreast(SeverityCapped, offset, findBigger, ref currentSizeIndex, ref currentSeverity); + + if (variation != null) + { + pathStringWithVariatione = pathString + "_" + variation; + if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); + + graphic = GraphicDatabase.Get(pathStringWithVariatione); + validTexture = true; + hediffResult = hediffDefName; + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); + } + + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); + + //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); + //minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); + graphic = GraphicDatabase.Get(pathString); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + hediffResult = defaultHediffName; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Found"); + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); + + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. Try bigger Texture."); + offset++; + if (currentSizeIndex == -1) + break; + } + if (validTexture == false) + { + offset = 0; + while (offset < offsetLimit) + { + if (hediffDefName != null) + { + if (isBreast) + pathString = extraPath + SizedApparelUtility.BreastSeverityString(SeverityCapped, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); + else + pathString = extraPath + SizedApparelUtility.PrivatePartsSevertyStringNotBreast(SeverityCapped, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); + + if (variation != null) + { + pathStringWithVariatione = pathString + "_" + variation; + if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); + + graphic = GraphicDatabase.Get(pathStringWithVariatione); + validTexture = true; + hediffResult = hediffDefName; + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); + } + + if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); + + //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); + //minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); + //graphic = new Graphic(); + graphic = GraphicDatabase.Get(pathString); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + hediffResult = hediffDefName; + //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Found"); + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); + + //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); + } + if (isBreast) + pathString = path + SizedApparelUtility.BreastSeverityString(SeverityCapped, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); + else + pathString = path + SizedApparelUtility.PrivatePartsSevertyStringNotBreast(SeverityCapped, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); + + if (variation != null) + { + pathStringWithVariatione = pathString + "_" + variation; + if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); + + graphic = GraphicDatabase.Get(pathStringWithVariatione); + validTexture = true; + hediffResult = hediffDefName; + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); + } + + if ((ContentFinder.Get((pathString + "_south"), false) != null)) + { + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); + + //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); + //minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); + graphic = GraphicDatabase.Get(pathString); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + validTexture = true; + hediffResult = defaultHediffName; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); + break; + } + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); + + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Not Found. Try smaller Texture."); + offset++; + if (currentSizeIndex == -1) + break; + } + } + + if (validTexture == false) + { + + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. try smaller instead of bigger ."); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + //graphic = GraphicDatabase.Get(path, ShaderDatabase.Cutout, agr.graphic.drawSize, agr.graphic.color); + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] (" + path + ")BodyPart texture is not patched::missing texture"); + + } + else + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] (" + path + ")BodyPart texture has been patched"); + + } + + indexOut = currentSizeIndex; + + if(graphic == null & gender != Gender.None) + { + //try search genderless graphic + graphic = GetBodyPartGraphic(raceDefName, bodyTypeName, hediffDefName, isBreast, sizeIndex, folderName, defaultHediffName, out indexOut, out hediffResult, hornyGraphic, customRaceDefName, variation, Gender.None); + } + + if (graphic == null & hornyGraphic == true) + { + //try search normal Graphic instead of HornyGraphic + graphic = GetBodyPartGraphic(raceDefName, bodyTypeName, hediffDefName, isBreast, sizeIndex, folderName, defaultHediffName, out indexOut, out hediffResult, false, customRaceDefName, variation, gender); + } + + return graphic; + + } + + + public static PubicHairDef GetRandomPubicHair() + { + return DefDatabase.GetRandom(); + } + public static PubicHairDef GetPubicHairEmpty() + { + return DefDatabase.GetNamed("None"); + } + + + public static bool IsHorny(Pawn pawn) + { + var comp = pawn.GetComp(); + if(comp != null) + { + if (comp.forceHorny == true) + return true; + } + + JobDriver_Sex sexDriver = null; + if (pawn.jobs != null) + sexDriver = pawn.jobs?.curDriver as rjw.JobDriver_Sex; + if (sexDriver != null) + { + return true; + } + if (pawn.needs == null) + return false; + + bool flag = (xxx.is_hornyorfrustrated(pawn)); + return flag; + bool erect = false; + + Need_Sex needSex = null; + if (pawn.needs != null) + needSex = pawn.needs.TryGetNeed(); + + JobDriver_Sex dri = null; + if (pawn.jobs != null) + dri = pawn.jobs.curDriver as rjw.JobDriver_Sex; + + + //Log.Message("find needSex"); + if (needSex == null) + return false; + + //Log.Warning(needSex.CurLevel.ToString()); + if (needSex.CurLevel >= needSex.thresh_ahegao() || needSex.CurLevel < needSex.thresh_neutral()) + { + erect = true; + } + + + if (dri != null) + { + erect = true; + } + + return false; + } + + + public static float BreastSizeIndexToSeverity(int index) + { + switch (index) + { + case -1: + return 0; + case 0: + return 0.01f; + case 1: + return 0.02f; + case 2: + return 0.2f; + case 3: + return 0.4f; + case 4: + return 0.6f; + case 5: + return 0.8f; + case 6: + return 1.0f; + case 7: + return 1.2f; + case 8: + return 1.4f; + case 9: + return 1.6f; + case 10: + return 1.8f; + + default: + return 0; + } + } + public static float PrivatePartSizeIndexToSeverity(int index) + { + switch (index) + { + case -1: + return 0; + case 0: + return 0.01f; + case 1: + return 0.2f; + case 2: + return 0.4f; + case 3: + return 0.6f; + case 4: + return 0.8f; + case 5: + return 1.01f; + default: + return 0; + } + } + public static int PrivatePartSeverityInt(float Severity) + { + if (Severity < 0f) + { + return -1; + } + else if (Severity < 0.01f) + { + return 0; + } + else if (Severity < 0.2f) + { + return 0; + } + else if (Severity < 0.40f) + { + return 1; + } + else if (Severity < 0.60f) + { + return 2; + } + else if (Severity < 0.80f) + { + return 3; + } + else if (Severity < 1.01f) + { + return 4; + } + else + { + return 5; + } + } + + public static int BreastSeverityInt(float BreastSeverity) + { + if (BreastSeverity < 0f) + { + return -1; + } + if (BreastSeverity < 0.01f) + { + return 0; + } + else if (BreastSeverity < 0.02f) + { + return 0; + } + else if (BreastSeverity < 0.2f) + { + return 1; + } + else if (BreastSeverity < 0.40f) + { + return 2; + } + else if (BreastSeverity < 0.60f) + { + return 3; + } + else if (BreastSeverity < 0.80f) + { + return 4; + } + else if (BreastSeverity < 1.0f) + { + return 5; + } + else if (BreastSeverity < 1.2f) + { + return 6; + } + else if (BreastSeverity < 1.4f) + { + return 7; + } + else if (BreastSeverity < 1.6f) + { + return 8; + } + else if (BreastSeverity < 1.8f) + { + return 9; + } + else + { + return 10; + } + } + + public static string PrivatePartsSevertyStringNotBreast(float severity, int offset, bool findBigger, ref int outTargetIndex, ref float outTargetSeverity) + { + int targetIndex = -1; + float targetSeverity = 0; + int result = -1; + if (offset >= 0) + { + { + if (severity < 0f)//Error Serverity + { + targetIndex = -1; + targetSeverity = 0; + } + else if (severity < 0.2f) + { + targetIndex = 0; + targetSeverity = 0.01f; + } + else if (severity < 0.4f) + { + targetIndex = 1; + targetSeverity = 0.2f; + } + else if (severity < 0.6f) + { + targetIndex = 2; + targetSeverity = 0.4f; + } + else if (severity < 0.8f) + { + targetIndex = 3; + targetSeverity = 0.6f; + } + else if (severity < 1.01f) + { + targetIndex = 4; + targetSeverity = 0.80f; + } + else + { + targetIndex = 5; + targetSeverity = 1.01f; + } + //if (targetIndex - offset < 0) + // return "_-1"; + } + + if (findBigger) + { + if (breastsSizeStrings.Length - (targetIndex + offset) > 0) + { + + //size.Length< targetIndex + offset + /* + if (size[targetIndex + offset] != null) + return size[targetIndex + offset]; + */ + //result = findAvailableBiggerSizeFromSetting(targetIndex + offset); + result = (targetIndex + offset); + outTargetIndex = result; + //targetSeverity = BreastSizeIndexToSeverity(result); + targetSeverity = PrivatePartSizeIndexToSeverity(result); + outTargetSeverity = targetSeverity; + return breastsSizeStrings[result]; + } + } + else + { + if (targetIndex - offset < 0) + return "_-1"; + if (breastsSizeStrings.Length - (targetIndex - offset) > 0) + { + /* + if (size[targetIndex - offset] != null) + return size[targetIndex - offset]; + */ + //result = findAvailableSmallerSizeFromSetting(targetIndex - offset); + result = (targetIndex - offset); + outTargetIndex = result; + //targetSeverity = BreastSizeIndexToSeverity(result); + targetSeverity = PrivatePartSizeIndexToSeverity(result); + outTargetSeverity = targetSeverity; + return breastsSizeStrings[result]; + } + } + } + return "_-1"; + } + + + public static string BreastSeverityString(float BreastSeverity, int offset, bool findBigger) + { + int breastResultIndex = 0; + float breastResultFloat = 0; + return BreastSeverityString(BreastSeverity, offset, findBigger, ref breastResultIndex, ref breastResultFloat); + } + + + + public static string BreastSeverityString(float BreastSeverity, int offset, bool findBigger, ref int outTargetIndex, ref float outTargetSeverity) + { + int targetIndex = -1; + float targetSeverity = 0; + int result = -1; + if (offset >= 0) + { + { + if (BreastSeverity < 0f)//Error Serverity + { + targetIndex = -1; + targetSeverity = 0; + } + else if (BreastSeverity < 0.02f) + { + targetIndex = 0; + //targetIndex = findAvailableSmallerSizeFromSetting(0); + targetSeverity = 0.01f; + } + else if (BreastSeverity < 0.2f) + { + targetIndex = 1; + //targetIndex = findAvailableSmallerSizeFromSetting(1); + targetSeverity = 0.02f; + } + else if (BreastSeverity < 0.40f) + { + targetIndex = 2; + //targetIndex = findAvailableSmallerSizeFromSetting(2); + targetSeverity = 0.2f; + } + else if (BreastSeverity < 0.60f) + { + targetIndex = 3; + //targetIndex = findAvailableSmallerSizeFromSetting(3); + targetSeverity = 0.40f; + } + else if (BreastSeverity < 0.80f) + { + targetIndex = 4; + //targetIndex = findAvailableSmallerSizeFromSetting(4); + targetSeverity = 0.60f; + } + else if (BreastSeverity < 1.0f) + { + targetIndex = 5; + //targetIndex = findAvailableSmallerSizeFromSetting(5); + targetSeverity = 0.80f; + } + else if (BreastSeverity < 1.2f) + { + targetIndex = 6; + //targetIndex = findAvailableSmallerSizeFromSetting(6); + targetSeverity = 1.0f; + } + else if (BreastSeverity < 1.4f) + { + targetIndex = 7; + //targetIndex = findAvailableSmallerSizeFromSetting(7); + targetSeverity = 1.2f; + } + else if (BreastSeverity < 1.6f) + { + targetIndex = 8; + //targetIndex = findAvailableSmallerSizeFromSetting(8); + targetSeverity = 1.4f; + } + else if (BreastSeverity < 1.8f) + { + targetIndex = 9; + //targetIndex = findAvailableSmallerSizeFromSetting(9); + targetSeverity = 1.6f; + } + else + { + targetIndex = 10; + //targetIndex = findAvailableSmallerSizeFromSetting(10); + targetSeverity = 1.8f; + } + //if (targetIndex - offset < 0) + // return "_-1"; + } + + if (findBigger) + { + if (breastsSizeStrings.Length - (targetIndex + offset) > 0) + { + + //size.Length< targetIndex + offset + /* + if (size[targetIndex + offset] != null) + return size[targetIndex + offset]; + */ + result = findAvailableBiggerSizeFromSetting(targetIndex + offset); + outTargetIndex = result; + targetSeverity = BreastSizeIndexToSeverity(result); + outTargetSeverity = targetSeverity; + return breastsSizeStrings[result]; + } + } + else + { + if (targetIndex - offset < 0) + return "_-1"; + if (breastsSizeStrings.Length - (targetIndex - offset) > 0) + { + /* + if (size[targetIndex - offset] != null) + return size[targetIndex - offset]; + */ + result = findAvailableSmallerSizeFromSetting(targetIndex - offset); + outTargetIndex = result; + targetSeverity = BreastSizeIndexToSeverity(result); + outTargetSeverity = targetSeverity; + return breastsSizeStrings[result]; + } + } + } + return "_-1"; + } + + public static bool isPawnNaked(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.Clothes, bool fromGraphicRecord = true) + { + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + if (fromGraphicRecord) + { + if (pawn.Drawer?.renderer?.graphics?.apparelGraphics == null) + return true; + foreach (ApparelGraphicRecord ap in pawn.Drawer.renderer.graphics.apparelGraphics)//Apparel ap in pawn.apparel.WornApparel + { + foreach (BodyPartGroupDef bpgd in ap.sourceApparel.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + if (bpgd.defName == "Chest" || bpgd.defName == "Torso") + { + return false; + } + } + } + } + else + { + if (pawn.apparel == null) + return true; + foreach (Apparel ap in pawn.apparel.WornApparel) + { + foreach (BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + if (bpgd.defName == "Chest" || bpgd.defName == "Torso") + { + return false; + } + } + } + } + + return true; + } + + + + + + + //for displayed apparel only + [Obsolete] + public static bool hasUnSupportedApparel(Pawn pawn, float BreastSeverity, Hediff breastHediff)//only check chest and torso for now + { + + /* + ApparelRecorderComp apparelRecorder = pawn.GetComp(); + if(apparelRecorder == null) + { + Log.Message("No ApparelRecorder Found"); + //Log.Message("Add ApparelRecorder"); + apparelRecorder = new ApparelRecorderComp(); + pawn.AllComps.Add(apparelRecorder); + apparelRecorder.Initialize(new ApparelRecorderCompProperties()); + + + } + */ + //Log.Message("Check hasUnSupportedApparel"); + bool hasUnsupportedApparel = false; + + foreach (ApparelGraphicRecord ap in pawn.Drawer.renderer.graphics.apparelGraphics)//Apparel ap in pawn.apparel.WornApparel + { + bool isChest = false; + foreach (BodyPartGroupDef bpgd in ap.sourceApparel.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + if (bpgd.defName == "Chest" || bpgd.defName == "Torso") + { + isChest = true; + break; + } + } + if (isChest) + { + string path; + string extraPath; + string searchingPath; + int offset = 0; + int currentIndex = 0; + float currentSeverity = 0; + //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; + //path = agr.graphic.path; + //path = ap.def.apparel.wornGraphicPath + "_" + pawn.story.bodyType.defName; + if (pawn.story?.bodyType?.defName != null) + path = ap.sourceApparel.def.apparel.wornGraphicPath + "_" + pawn.story.bodyType.defName; + else + path = ap.sourceApparel.def.apparel.wornGraphicPath; + if (breastHediff != null) + { + extraPath = path + "_" + breastHediff.def.defName; + } + else + extraPath = path; + + bool validTexture = false; + + bool findBigger = true; // if false : search smaller first + while (offset < breastsSizeStrings.Length) + { + if (breastHediff != null) + { + searchingPath = extraPath + BreastSeverityString(BreastSeverity, offset, findBigger,ref currentIndex,ref currentSeverity) + "_south"; + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + + if (ContentFinder.Get((searchingPath), false) != null) // checking special texture like udder + { + validTexture = true; + //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Found"); + break; + } + //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Not Found."); + } + searchingPath = path + BreastSeverityString(BreastSeverity, offset, findBigger, ref currentIndex,ref currentSeverity) + "_south"; + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + if ((ContentFinder.Get((searchingPath), false) != null)) + { + validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Found"); + break; + } + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. Try bigger Texture."); + offset++; + + } + + if (validTexture == false) + { + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. try smaller instead of bigger ."); + } + + + if (validTexture == false) + { + offset = 0; + while (offset < breastsSizeStrings.Length) + { + if (breastHediff != null) + { + searchingPath = extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentIndex,ref currentSeverity) + "_south"; + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + if (ContentFinder.Get((searchingPath), false) != null) // checking special texture like udder + { + validTexture = true; + //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Found"); + break; + } + //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); + } + searchingPath = path + BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentIndex, ref currentSeverity) + "_south"; + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + if ((ContentFinder.Get((searchingPath), false) != null)) + { + validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); + break; + } + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Not Found. Try smaller Texture."); + offset++; + } + } + + if (validTexture == false) + { + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. hide breasts ."); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + //graphic = GraphicDatabase.Get(path, ShaderDatabase.Cutout, agr.graphic.drawSize, agr.graphic.color); + hasUnsupportedApparel = true; + if (SizedApparelSettings.Debug == false) + break; + Log.Warning("[Sized Apparel] " + pawn.Name + "'s Unsupported Apparel: " + path); + } + + } + + + } + + //apparelRecorder.SetHasUnsupportedApparel(hasUnsupportedApparel); + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] "+pawn.Name + " has unsupported apparel?: " + hasUnsupportedApparel.ToString()); + return hasUnsupportedApparel; + } + + public static bool hasUnSupportedApparelFromWornData(Pawn pawn, float BreastSeverity, Hediff breastHediff, bool cacheToComp = false, bool fromGraphicRecord = false)//only check chest and torso for now + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] " + pawn.Name + ": hasUnSupportedApparel Testing..."); + /* + ApparelRecorderComp apparelRecorder = pawn.GetComp(); + if(apparelRecorder == null) + { + Log.Message("No ApparelRecorder Found"); + //Log.Message("Add ApparelRecorder"); + apparelRecorder = new ApparelRecorderComp(); + pawn.AllComps.Add(apparelRecorder); + apparelRecorder.Initialize(new ApparelRecorderCompProperties()); + + + } + */ + //Log.Message("Check hasUnSupportedApparel"); + bool hasUnsupportedApparel = false; + + /* + if (!pawn.RaceProps.Humanlike) //Animals or Mechanoids would have apparels? + return true; + */ + + var comp = pawn.GetComp(); + if (comp == null) + return false; + List apparels = new List(); + if (!fromGraphicRecord) + { + foreach (Apparel worn in pawn.apparel.WornApparel) + { + //Only apparel that has graphic + if(worn.Graphic!=null) + apparels.Add(worn); + } + } + + /* + if (isPawnNaked(pawn, fromGraphicRecord)) + { + if (cacheToComp) + comp.hasUnsupportedApparel = false; + return false; + }*/ + + else + { + foreach (ApparelGraphicRecord agr in pawn.Drawer.renderer.graphics.apparelGraphics) + { + apparels.Add(agr.sourceApparel); + } + } + if(cacheToComp) + comp.BreastSeverityCache = 1000; + + foreach (Apparel ap in apparels)//Apparel ap in pawn.apparel.WornApparel + { + bool isChest = false; + + if (ap.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_IgnorBreastSize".ToLower()))//skip tags + continue; + + foreach (BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + if (bpgd.defName == "Chest" || bpgd.defName == "Torso") + { + isChest = true; + break; + } + } + + + //isChest = (ap.def.apparel.bodyPartGroups.First((BodyPartGroupDef bpgd) => bpgd.defName == "Chest" || bpgd.defName == "Torso")!=null); + if (isChest) + { + /////TODO: caching Apparel Check Data + /* + if (!sizedApparelSupportCache.ContainsKey(ap.def.defName)) + sizedApparelSupportCache.Add(ap.def.defName, new Dictionary>()); + var apparelCache = sizedApparelSupportCache[ap.def.defName]; + if (!apparelCache.ContainsKey(pawn.story.bodyType.defName)) + apparelCache.Add(pawn.story.bodyType.defName, new List()); + var apparelBodyTypeCache = apparelCache[pawn.story.bodyType.defName]; + int breastSeverityInt = BreastSeverityInt(BreastSeverity); + if (apparelBodyTypeCache.Count <= breastSeverityInt) + { + + }*/ + + + string path; + string extraPath; + string searchingPath; + int offset = 0; + int currentIndex = 0; + float currentSeverity = BreastSeverity; + //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; + //path = agr.graphic.path; + //path = ap.def.apparel.wornGraphicPath + "_" + pawn.story.bodyType.defName; + path = ap.WornGraphicPath + "_" + pawn.story.bodyType.defName; + if (breastHediff != null) + { + extraPath = path + "_" + breastHediff.def.defName; + } + else + extraPath = path; + string resultPath = null; + bool resultOut = false; + var key = new SizedApparelsDatabase.SizedApparelDatabaseKey(path, pawn.def.defName, pawn.story?.bodyType?.defName, pawn.gender, breastHediff?.def.defName, SizedApparelUtility.BreastSeverityInt(BreastSeverity)); + if (SizedApparelSettings.useGenderSpecificTexture) + key.gender = Gender.None; + var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(key,out currentIndex, out currentSeverity).pathWithSizeIndex; + if (comp != null) + { + if (cacheToComp) + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] apparel's breasts severity" + currentSeverity); + if (SizedApparelSettings.ForcedSupportApparel) + comp.BreastSeverityCache = currentSeverity; + else + comp.BreastSeverityCache = Math.Min(currentSeverity, comp.BreastSeverityCache); + } + } + if (result == null) + { + if (!SizedApparelSettings.ForcedSupportApparel) + { + hasUnsupportedApparel = true; + break; + } + } + continue; + + bool validTexture = false; + + bool findBigger = true; // if false : search smaller first + while (offset < breastsSizeStrings.Length) + { + if (breastHediff != null) + { + searchingPath = extraPath + BreastSeverityString(BreastSeverity, offset, findBigger, ref currentIndex, ref currentSeverity) + "_south"; + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + if (ContentFinder.Get((searchingPath), false) != null) // checking special texture like udder + { + validTexture = true; + //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Found"); + if (comp != null) + { + if (cacheToComp) + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] apparel's breasts severity" + currentSeverity); + comp.BreastSeverityCache = Math.Min(currentSeverity, comp.BreastSeverityCache); + } + } + break; + } + //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Not Found."); + } + searchingPath = path + BreastSeverityString(BreastSeverity, offset, findBigger, ref currentIndex, ref currentSeverity) + "_south"; + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + if ((ContentFinder.Get((searchingPath), false) != null)) + { + validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Found"); + if (comp != null) + { + if (cacheToComp) + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] apparel's breasts severity" + currentSeverity); + comp.BreastSeverityCache = Math.Min(currentSeverity, comp.BreastSeverityCache); + } + } + break; + } + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. Try bigger Texture."); + offset++; + + } + + if (validTexture == false) + { + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. try smaller instead of bigger ."); + } + + + if (validTexture == false) + { + offset = 0; + while (offset < breastsSizeStrings.Length) + { + if (breastHediff != null) + { + searchingPath = extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentIndex, ref currentSeverity) + "_south"; + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + if (ContentFinder.Get((searchingPath), false) != null) // checking special texture like udder + { + validTexture = true; + //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Found"); + if (comp != null) + { + if (cacheToComp) + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] apparel's breasts severity" + currentSeverity); + comp.BreastSeverityCache = Math.Min(currentSeverity, comp.BreastSeverityCache); + } + } + break; + } + //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); + } + searchingPath = (path + BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentIndex, ref currentSeverity) + "_south"); + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); + if ((ContentFinder.Get(searchingPath, false) != null)) + { + validTexture = true; + //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); + if (comp != null) + { + if (cacheToComp) + { + if (SizedApparelSettings.Debug) + Log.Message("[Sized Apparel] apparel's breasts severity" + currentSeverity); + comp.BreastSeverityCache = Math.Min(currentSeverity, comp.BreastSeverityCache); + } + } + break; + } + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Not Found. Try smaller Texture."); + offset++; + } + } + + if (validTexture == false) + { + //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. hide breasts ."); + //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); + //graphic = GraphicDatabase.Get(path, ShaderDatabase.Cutout, agr.graphic.drawSize, agr.graphic.color); + hasUnsupportedApparel = true; + + if (SizedApparelSettings.Debug == false) + break; + Log.Warning("[Sized Apparel] " + pawn.Name + "'s Unsupported Apparel: " + path); + } + + } + + + } + + //apparelRecorder.SetHasUnsupportedApparel(hasUnsupportedApparel); + if (SizedApparelSettings.Debug) + { + Log.Message("[Sized Apparel]" + pawn.Name + " has unsupported apparel?: " + hasUnsupportedApparel.ToString()); + if(cacheToComp) + Log.Message("[Sized Apparel] cached breasts severity" + comp.BreastSeverityCache); + } + + + + + return hasUnsupportedApparel; + } + + public static void UpdateAllApparel(Pawn pawn, bool onlyGraphicRecords = false)//need to be update before call it + { + + if (pawn == null) + return; + var comp = pawn.GetComp(); + if (comp == null) + return; + PawnGraphicSet pawnGraphicSet = pawn.Drawer?.renderer?.graphics; + if (pawnGraphicSet == null) + return; + if (pawnGraphicSet.apparelGraphics.NullOrEmpty()) + return; + if(onlyGraphicRecords) + { + if (pawn.story == null) + return; + + //List copy = pawnGraphicSet.apparelGraphics.ToList(); + List loc = new List(); + for (int i = 0; i< pawnGraphicSet.apparelGraphics.Count; i++) + { + ApparelGraphicRecord agr = pawnGraphicSet.apparelGraphics[i]; + ApparelGraphicRecord graphicOut; + + BodyTypeDef bodyType = null; + if (pawn.story != null) + bodyType = pawn.story.bodyType; + + if (ApparelGraphicRecordGetter.TryGetGraphicApparel(agr.sourceApparel, bodyType, out graphicOut)) + { + //agr.graphic = graphicOut.graphic; + loc.Add(graphicOut); + } + // + + //bool flag = false; + //GetApparelGraphicFix.Postfix(agr.sourceApparel, pawn.story.bodyType, ref agr, ref flag); + //agr.graphic = graphicOut.graphic; + } + pawnGraphicSet.apparelGraphics = loc; + + return; + } + + //pawnGraphicSet.ResolveApparelGraphics(); + } + + + public static bool CanDrawBreasts(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None, bool fromGraphicRecord = true) + { + if (pawn == null) + return false; + var comp = pawn.GetComp(); + if (comp == null) + return false; + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + if (comp.hasUnsupportedApparel) + return isPawnNaked(pawn, flags, fromGraphicRecord); + return true; + } + + public static bool CanDrawPenis(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None, bool fromGraphicRecord = true)//Notion: like pants, there is apparel with no graphic but still cover penis. + { + if (pawn == null) + return false; + var comp = pawn.GetComp(); + if (comp == null) + return false; + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + if (fromGraphicRecord) + { + if (pawn.Drawer?.renderer?.graphics?.apparelGraphics == null) + return true; + foreach (ApparelGraphicRecord ap in pawn.Drawer.renderer.graphics.apparelGraphics)//Apparel ap in pawn.apparel.WornApparel + { + foreach (BodyPartGroupDef bpgd in ap.sourceApparel.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + + if (ap.sourceApparel.def.apparel.CoversBodyPart(Genital_Helper.get_genitalsBPR(pawn)) || ap.sourceApparel.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs)) + { + if (ap.sourceApparel.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_ShowPrivateCrotch".ToLower())) + { + //if (SizedApparelSettings.Debug) + // Log.Message("[SizedApparel]" + pawn.Name + "'s Genitals has coverd but showing for graphic. apparel:" + ap.sourceApparel.def.defName); + continue; + } + return false; + } + } + } + } + else + { + if (pawn.apparel == null) + return true; + foreach (Apparel ap in pawn.apparel.WornApparel) + { + foreach (BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + if (ap.def.apparel.CoversBodyPart(Genital_Helper.get_genitalsBPR(pawn)) || ap.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs)) + { + if (ap.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_ShowPrivateCrotch".ToLower())) + { + //if (SizedApparelSettings.Debug) + // Log.Message("[SizedApparel]" + pawn.Name + "'s Genitals has coverd but showing for graphic. apparel:" + ap.def.defName); + continue; + } + return false; + } + } + } + } + return true; + } + + public static bool CanDrawVagina(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None) + { + if (pawn == null) + return false; + var comp = pawn.GetComp(); + if (comp == null) + return false; + + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + return true; + } + + public static bool CanDrawPubicHair(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None) + { + if (pawn == null) + return false; + var comp = pawn.GetComp(); + if (comp == null) + return false; + + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + return true; + } + + public static bool CanDrawAnus(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None) + { + if (pawn == null) + return false; + var comp = pawn.GetComp(); + if (comp == null) + return false; + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + + return true; + } + + public static bool CanDrawUdder(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None)//TODO + { + + return false; + + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + } + + public static bool CanDrawBelly(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None, bool fromGraphicRecord = true) + { + if (pawn == null) + return false; + var comp = pawn.GetComp(); + if (comp == null) + return false; + + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + + if (fromGraphicRecord) + { + if (pawn.Drawer?.renderer?.graphics?.apparelGraphics == null) + return true; + foreach (ApparelGraphicRecord ap in pawn.Drawer.renderer.graphics.apparelGraphics)//Apparel ap in pawn.apparel.WornApparel + { + if (ap.sourceApparel.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_ShowBelly".ToLower())) + continue; + foreach (BodyPartGroupDef bpgd in ap.sourceApparel.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + if (bpgd.defName == "Torso") + { + return false; + } + } + } + } + else + { + if (pawn.apparel == null) + return true; + foreach (Apparel ap in pawn.apparel.WornApparel) + { + if (ap.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_ShowBelly".ToLower())) + continue; + foreach (BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups)//BodyPartGroupDef bpgd in ap.def.apparel.bodyPartGroups + { + if (bpgd.defName == "Torso") + { + return false; + } + } + } + } + + return true; + + } + + + public static bool CanApplySizedApparel(Pawn pawn) + { + if (pawn == null) + return false; + + //RaceProps Check + if (!pawn.RaceProps.Humanlike) //apply humanlikes always + { + if (pawn.RaceProps.Animal) + { + if (!SizedApparelSettings.ApplyAnimals) + return false; + } + else if (pawn.RaceProps.IsMechanoid) + { + if (!SizedApparelSettings.ApplyMechanoid) + return false; + } + } + else + { + if (!SizedApparelSettings.ApplyHumanlikes) + return false; + } + //Faction Check TODO + if (pawn.Faction != null && pawn.Faction != Faction.OfPlayer) + { + switch (pawn.Faction.PlayerRelationKind) + { + case FactionRelationKind.Neutral: + break; + case FactionRelationKind.Ally: + break; + case FactionRelationKind.Hostile: + break; + default: + break; + } + } + return true; + } + + + public static bool CanPoseApparels(Pawn pawn, string targetPose, string currentHediffName = null, int currentSeverityInt = 0, int cappedSeverityInt = 1000) + { + if (pawn == null) + return false; + foreach (ApparelGraphicRecord agr in pawn.Drawer.renderer.graphics.apparelGraphics) + { + if (agr.graphic == null) + continue; + /* + if (!agr.sourceApparel.def.apparel.bodyPartGroups.Any(bpgd => bpgd.defName == "Torso" || bpgd.defName == "Chest")) + continue; + + if (agr.sourceApparel.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_IgnorePose".ToLower())) + continue; + */ + //Only Check Torso Apparel Only + if (!agr.sourceApparel.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso)) + continue; + + string originalPath = SizedApparelsDatabase.GetSupportedApparelOriginalPath(agr.graphic.path); + if (originalPath == null) + return false; + + int outInt = -1; + float outFloat = -1; + SizedApparelsDatabase.SizedApparelDatabaseKey key = new SizedApparelsDatabase.SizedApparelDatabaseKey(originalPath, pawn.def.defName, pawn.story?.bodyType?.defName, pawn.gender, currentHediffName, Math.Min(currentSeverityInt, cappedSeverityInt), false, targetPose); + if (SizedApparelSettings.useGenderSpecificTexture) + key.gender = Gender.None; + var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(key, out outInt, out outFloat); + if (!result.isCustomPose) + return false; + } + return true; + } + + + + + + + + } +} diff --git a/1.3/source/SizedApparel/SizedApparelforRJW.csproj b/1.3/source/SizedApparel/SizedApparelforRJW.csproj new file mode 100644 index 0000000..12752c2 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelforRJW.csproj @@ -0,0 +1,116 @@ + + + + + Debug + AnyCPU + {B06471B4-4C6C-478B-B94D-71CC53ABD24D} + Library + Properties + SizedApparel + SizedApparelforRJW + v4.8 + 512 + true + + + + true + full + false + ..\..\Assemblies\ + DEBUG;TRACE + prompt + 4 + false + true + + + none + true + ..\..\Assemblies\ + TRACE + prompt + 4 + false + true + + + + ..\..\..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll + False + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + False + + + ..\..\..\..\..\..\..\workshop\content\294100\818773962\v1.3\Assemblies\HugsLib.dll + False + + + ..\..\..\..\rimnude-unofficial\Assembly Folders\1.3 Assembly\Assemblies\RimNudeWorld.dll + False + + + ..\..\..\..\rimworld-animations\1.3\Assemblies\Rimworld-Animations.dll + False + + + ..\..\..\..\rjw\1.3\Assemblies\RJW.dll + False + + + ..\..\..\..\rjw_menstruation\1.3\Assemblies\RJW_Menstruation.dll + False + + + + + + + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + False + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll + False + + + ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.3/source/SizedApparel/SizedApparelforRJW.sln b/1.3/source/SizedApparel/SizedApparelforRJW.sln new file mode 100644 index 0000000..84732db --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelforRJW.sln @@ -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 diff --git a/1.3/source/SizedApparel/SizedApparelsDatabase.cs b/1.3/source/SizedApparel/SizedApparelsDatabase.cs new file mode 100644 index 0000000..fd87e80 --- /dev/null +++ b/1.3/source/SizedApparel/SizedApparelsDatabase.cs @@ -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 Data; + } + public class PreDefinedApparelDate : Def + { + public string HediffName; + public bool IsBreasts = false; + public List 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 + { + 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 + { + 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 ApparelRecordersCache = new Dictionary(); + + private static Dictionary SizedApparelBodyGraphic = new Dictionary(); // TODO + private static Dictionary SupportedApparelResultPath = new Dictionary(new SizedApparelDatabaseKeyComparer()); + private static Dictionary SupportedBodyPartResultPath = new Dictionary(new BodyPartDatabaseKeyComparer()); + private static Dictionary SupportedApparelOriginalPath = new Dictionary(); + + //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(); // comp can be null + ApparelRecordersCache.Add(pawn, comp); + return comp; + } + + public static Dictionary AlienRaceUseHumanlike = new Dictionary(); + private static void ResetAlienRaceUseHumanlike() + { + AlienRaceUseHumanlike.Clear(); + IEnumerable HumanlikeRaces; + HumanlikeRaces = DefDatabase.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 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 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(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.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.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.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.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.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.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.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.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.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.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 bodyTypes = new List(); + bodyTypes.Add("Female"); + bodyTypes.Add("Thin"); + + + // DefDatabase.AllDefsListForReading + foreach (ThingDef thingDef in DefDatabase.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? + } + + } + } + + + } + + + } +} diff --git a/1.4/Assemblies/SizedApparelforRJW.dll b/1.4/Assemblies/SizedApparelforRJW.dll new file mode 100644 index 0000000..1507973 Binary files /dev/null and b/1.4/Assemblies/SizedApparelforRJW.dll differ diff --git a/1.4/Defs/BodyAddonDefs/AOCBody.xml b/1.4/Defs/BodyAddonDefs/AOCBody.xml new file mode 100644 index 0000000..e46e302 --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/AOCBody.xml @@ -0,0 +1,131 @@ + + + + + AOC + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/BoriBody.xml b/1.4/Defs/BodyAddonDefs/BoriBody.xml new file mode 100644 index 0000000..e219291 --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/BoriBody.xml @@ -0,0 +1,127 @@ + + + + + Alien_Bori + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/MihoBody.xml b/1.4/Defs/BodyAddonDefs/MihoBody.xml new file mode 100644 index 0000000..f059a1f --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/MihoBody.xml @@ -0,0 +1,249 @@ + + + + + Alien_Miho + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/RabbieBody.xml b/1.4/Defs/BodyAddonDefs/RabbieBody.xml new file mode 100644 index 0000000..58682b0 --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/RabbieBody.xml @@ -0,0 +1,249 @@ + + + + + Rabbie + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/RatkinBody.xml b/1.4/Defs/BodyAddonDefs/RatkinBody.xml new file mode 100644 index 0000000..67ec55d --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/RatkinBody.xml @@ -0,0 +1,249 @@ + + + + + Ratkin + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/Ratkin_SuBody.xml b/1.4/Defs/BodyAddonDefs/Ratkin_SuBody.xml new file mode 100644 index 0000000..be80c0c --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/Ratkin_SuBody.xml @@ -0,0 +1,249 @@ + + + + + Ratkin_Su + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/SPBody.xml b/1.4/Defs/BodyAddonDefs/SPBody.xml new file mode 100644 index 0000000..89abc6b --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/SPBody.xml @@ -0,0 +1,131 @@ + + + + + Alien_SP + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + false + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + false + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + false + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + false + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + false + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/_HumanBody.xml b/1.4/Defs/BodyAddonDefs/_HumanBody.xml new file mode 100644 index 0000000..0361176 --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/_HumanBody.xml @@ -0,0 +1,732 @@ + + + + Human + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Nipples + Breasts + Breasts + Breasts + Nipple + true + false + false + + 0.0114 + 0.0011 + 0.0114 + 0.0114 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Nipples + Breasts + Breasts + Breasts + Nipple + true + false + false + + 0.0114 + 0.0011 + 0.0114 + 0.0114 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Hulk + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Fat + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Child + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyAddonDefs/_HumanBody.xml.bak b/1.4/Defs/BodyAddonDefs/_HumanBody.xml.bak new file mode 100644 index 0000000..b214d82 --- /dev/null +++ b/1.4/Defs/BodyAddonDefs/_HumanBody.xml.bak @@ -0,0 +1,716 @@ + + + + Human + +
  • + Female + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + + + false + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Nipples + Breasts + Breasts + Breasts + Nipple + true + false + false + + 0.0114 + 0.0011 + 0.0114 + 0.0114 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Thin + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Male + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Hulk + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Fat + +
  • + Breasts + Breasts + Breasts + Breasts + Skin + true + false + + + 0.0113 + 0.001 + 0.0113 + 0.0113 + +
  • +
  • + Vagina + Vagina + Vagina + Vagina + Skin + false + true + + + 0.0088 + 0.0100 + 0.0088 + 0.0088 + +
  • +
  • + Anus + Anus + Anus + Anus + Skin + false + true + + + 0.0093 + 0.0105 + 0.0093 + 0.0093 + +
  • +
  • + Belly + Belly + BellyBulge + Belly + Skin + false + false + + + 0.0098 + 0.0002 + 0.0098 + 0.0098 + +
  • +
  • + Penis + Penis + Penis + Penis + Skin + false + true + + + 0.0108 + 0.0025 + 0.0108 + 0.0108 + +
  • +
  • + Balls + Balls + Penis + Balls + Penis/Balls + Skin + false + true + + + 0.0096 + 0.0085 + 0.0096 + 0.0096 + +
  • +
  • + PubicHair + PubicHair + Default + PubicHair + Hair + false + true + + + 0.0099 + 0.0099 + 0.0099 + 0.0099 + +
  • + + +
  • + Child + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Anus.xml b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Anus.xml new file mode 100644 index 0000000..8562e93 --- /dev/null +++ b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Anus.xml @@ -0,0 +1,25 @@ + + + + + AnusDetail + Anus + +
  • + + Anus + +
  • default
  • +
  • Donut
  • + + +
  • + + + + + +
  • +
    +
    +
    diff --git a/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Breasts.xml b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Breasts.xml new file mode 100644 index 0000000..98c3e6a --- /dev/null +++ b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Breasts.xml @@ -0,0 +1,25 @@ + + + + + BreastDetail + Breasts + +
  • + + Breasts + +
  • default
  • +
  • InvertedNipple
  • + + +
  • + + + + + +
  • +
    +
    +
    diff --git a/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Penis.xml b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Penis.xml new file mode 100644 index 0000000..d6b7584 --- /dev/null +++ b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Penis.xml @@ -0,0 +1,18 @@ + + + + + PenisDetail + Penis + +
  • + + Penis + +
  • default
  • + + + +
    +
    +
    diff --git a/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Vagina.xml b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Vagina.xml new file mode 100644 index 0000000..50a0c7a --- /dev/null +++ b/1.4/Defs/BodyPartDetailDefs/BodypartDetail_Vagina.xml @@ -0,0 +1,18 @@ + + + + + VaginaDetail + Vagina + +
  • + + Vagina + +
  • default
  • +
  • Puffy
  • + + +
    +
    +
    diff --git a/1.4/Defs/Defs(BodyDefsWip).zip b/1.4/Defs/Defs(BodyDefsWip).zip new file mode 100644 index 0000000..979768c Binary files /dev/null and b/1.4/Defs/Defs(BodyDefsWip).zip differ diff --git a/1.4/Defs/Defs(wip).zip b/1.4/Defs/Defs(wip).zip new file mode 100644 index 0000000..0dde8d5 Binary files /dev/null and b/1.4/Defs/Defs(wip).zip differ diff --git a/1.4/Defs/PubicHairDefs/PubicHairDefault.xml b/1.4/Defs/PubicHairDefs/PubicHairDefault.xml new file mode 100644 index 0000000..e0e0b0c --- /dev/null +++ b/1.4/Defs/PubicHairDefs/PubicHairDefault.xml @@ -0,0 +1,11 @@ + + + + + Default + + SizedApparel/BodyParts/Human/PubicHair/Default + + + + diff --git a/1.4/Defs/PubicHairDefs/PubicHairLine.xml b/1.4/Defs/PubicHairDefs/PubicHairLine.xml new file mode 100644 index 0000000..f2b027e --- /dev/null +++ b/1.4/Defs/PubicHairDefs/PubicHairLine.xml @@ -0,0 +1,11 @@ + + + + + Line + + SizedApparel/BodyParts/Human/PubicHair/Line + + + + diff --git a/1.4/Defs/PubicHairDefs/PubicHairLine.xml.bak b/1.4/Defs/PubicHairDefs/PubicHairLine.xml.bak new file mode 100644 index 0000000..4bf42a4 --- /dev/null +++ b/1.4/Defs/PubicHairDefs/PubicHairLine.xml.bak @@ -0,0 +1,11 @@ + + + + + Wild + + SizedApparel/BodyParts/Human/PubicHair/Wild + + + + diff --git a/1.4/Defs/PubicHairDefs/PubicHairNone.xml b/1.4/Defs/PubicHairDefs/PubicHairNone.xml new file mode 100644 index 0000000..a49bf4e --- /dev/null +++ b/1.4/Defs/PubicHairDefs/PubicHairNone.xml @@ -0,0 +1,7 @@ + + + + None + true + + diff --git a/1.4/Defs/PubicHairDefs/PubicHairWild.xml b/1.4/Defs/PubicHairDefs/PubicHairWild.xml new file mode 100644 index 0000000..4bf42a4 --- /dev/null +++ b/1.4/Defs/PubicHairDefs/PubicHairWild.xml @@ -0,0 +1,11 @@ + + + + + Wild + + SizedApparel/BodyParts/Human/PubicHair/Wild + + + + diff --git a/1.4/Defs/SkeletonDef/AOCSkeletonDef.xml b/1.4/Defs/SkeletonDef/AOCSkeletonDef.xml new file mode 100644 index 0000000..d927691 --- /dev/null +++ b/1.4/Defs/SkeletonDef/AOCSkeletonDef.xml @@ -0,0 +1,123 @@ + + + + AOC + +
  • + Female + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/BoriSkeletonDef.xml b/1.4/Defs/SkeletonDef/BoriSkeletonDef.xml new file mode 100644 index 0000000..11e2645 --- /dev/null +++ b/1.4/Defs/SkeletonDef/BoriSkeletonDef.xml @@ -0,0 +1,123 @@ + + + + Alien_Bori + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/MihoSkeletonDef.xml b/1.4/Defs/SkeletonDef/MihoSkeletonDef.xml new file mode 100644 index 0000000..d13758e --- /dev/null +++ b/1.4/Defs/SkeletonDef/MihoSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Alien_Miho + +
  • + Thin + +
  • + Vagina + + (0, 0, -0.148) + 0 + + + (-0.006, 0, -0.150) + 0 + + + (-0.006, 0, -0.143) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.129) + 0 + + + (-0.006, 0, -0.139 + 0 + + + (-0.061, 0, -0.155) + 0 + +
  • +
  • + Penis + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Balls + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141)) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.121) + 0 + + + (-0.006, 0, -0.109) + 0 + + + (0.004, 0, -0.123) + 0 + +
  • + + +
  • + Female + +
  • + Vagina + + (0, 0, -0.148) + 0 + + + (-0.006, 0, -0.150) + 0 + + + (-0.006, 0, -0.143) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.129) + 0 + + + (-0.006, 0, -0.139) + 0 + + + (-0.061, 0, -0.155) + 0 + +
  • +
  • + Penis + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Balls + + (0, 0, -0.141) + 0 + + + (-0.006, 0, -0.141) + 0 + + + (-0.004, 0, -0.139) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0.004, 0, -0.123)) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.121) + 0 + + + (-0.006, 0, -0.109) + 0 + + + (0.004, 0, -0.123) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/RabbieSkeletonDef.xml b/1.4/Defs/SkeletonDef/RabbieSkeletonDef.xml new file mode 100644 index 0000000..ebb6a16 --- /dev/null +++ b/1.4/Defs/SkeletonDef/RabbieSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Rabbie + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/RatkinSkeletonDef.xml b/1.4/Defs/SkeletonDef/RatkinSkeletonDef.xml new file mode 100644 index 0000000..850f0dd --- /dev/null +++ b/1.4/Defs/SkeletonDef/RatkinSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Ratkin + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/RatkinSuSkeletonDef.xml b/1.4/Defs/SkeletonDef/RatkinSuSkeletonDef.xml new file mode 100644 index 0000000..73bf8f7 --- /dev/null +++ b/1.4/Defs/SkeletonDef/RatkinSuSkeletonDef.xml @@ -0,0 +1,233 @@ + + + + Ratkin_Su + +
  • + Thin + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/SPSkeletonDef.xml b/1.4/Defs/SkeletonDef/SPSkeletonDef.xml new file mode 100644 index 0000000..5dec2cf --- /dev/null +++ b/1.4/Defs/SkeletonDef/SPSkeletonDef.xml @@ -0,0 +1,123 @@ + + + + Alien_SP + +
  • + Female + +
  • + Vagina + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Penis + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Balls + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + +
  • + Child + + +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/_HumanSkeletonDef.xml b/1.4/Defs/SkeletonDef/_HumanSkeletonDef.xml new file mode 100644 index 0000000..cc1a6c7 --- /dev/null +++ b/1.4/Defs/SkeletonDef/_HumanSkeletonDef.xml @@ -0,0 +1,668 @@ + + + + Human + +
  • + Female + +
  • + Vagina + + (-0.002, 0, -0.340) + 0 + + + (-0.006, 0, -0.346) + 0 + + + (0.047, 0, -0.238) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (-0.006, 0, -0.289) + 0 + + + (-0.174, 0, 0.254) + 0 + +
  • +
  • + Penis + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Balls + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.301) + 0 + + + (0, 0, -0.318) + 0 + + + (0.059, 0, -0.186) + 0 + +
  • + + +
  • + Thin + +
  • + Vagina + + (0, 0, -0.312) + 0 + + + (-0.006, 0, -0.318) + 0 + + + (0.006, 0, -0.256) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.260) + 0 + + + (-0.002, 0, -0.266) + 0 + + + (-0.137, 0, -0.211) + 0 + +
  • +
  • + Penis + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.008, 0, -0.248) + 0 + +
  • +
  • + Balls + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.007, 0, -0.248) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.281) + 0 + + + (0, 0, -0.291) + 0 + + + (0.021, 0, -0.219) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, -0.320) + 0 + + + (0.002, 0, -0.311) + 0 + + + (0.057, 0, -0.258) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.268) + 0 + + + (0, 0, -0.252) + 0 + + + (-0.113, 0, -0.234) + 0 + +
  • +
  • + Penis + + (0, 0, -0.301) + 0 + + + (0, 0, -0.311) + 0 + + + (0.068, 0, -0.250) + 0 + +
  • +
  • + Balls + + (0.0, 0, -0.301) + 0 + + + (0.0, 0, -0.311) + 0 + + + (0.066, 0, -0.250) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.275) + 0 + + + (0, 0, -0.277) + 0 + + + (0.066, 0, -0.219) + 0 + +
  • + + +
  • + Hulk + +
  • + Vagina + + (0.004, 0, -0.434) + 0 + + + (0, 0, -0.453) + 0 + + + (0.020, 0, -0.395) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0.006, 0, -0.383) + 0 + + + (0, 0, -0.406) + 0 + + + (-0.238, 0, -0.328) + 0 + +
  • +
  • + Penis + + (0, 0, -0.436) + 0 + + + (0.0, 0, -0.445) + 0 + + + (0.029, 0, -0.387) + 0 + +
  • +
  • + Balls + + (0, 0, -0.436) + 0 + + + (0, 0, -0.445) + 0 + + + (0.028, 0, -0.387) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.395) + 0 + + + (0.027, 0, -0.375) + 0 + + + (0, 0, -0.424) + 0 + +
  • + + +
  • + Fat + +
  • + Vagina + + (0.002, 0, -0.352) + 0 + + + (0.002, 0, -0.359) + 0 + + + (0.148, 0, -0.352) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.297) + 0 + + + (0, 0, -0.297) + 0 + + + (-0.238, 0, -0.271) + 0 + +
  • +
  • + Penis + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Balls + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.307) + 0 + + + (0, 0, -0.320) + 0 + + + (0.158, 0, -0.338) + 0 + +
  • + + +
  • + Child + +
  • + Vagina + + (0.002, 0, -0.209) + 0 + + + (0, 0, -0.205) + 0 + + + (0.043, 0, -0.174) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (0.002, 0, -0.164) + 0 + + + (-0.084, 0, -0.127) + 0 + +
  • +
  • + Penis + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Balls + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.166) + 0 + + + (-0.002, 0, -0.164) + 0 + + + (0.057, 0, -0.145) + 0 + +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/SkeletonDef/_HumanSkeletonDef.xml.bak b/1.4/Defs/SkeletonDef/_HumanSkeletonDef.xml.bak new file mode 100644 index 0000000..47e66f0 --- /dev/null +++ b/1.4/Defs/SkeletonDef/_HumanSkeletonDef.xml.bak @@ -0,0 +1,668 @@ + + + + Human + +
  • + Female + +
  • + Vagina + + (-0.002, 0, -0.340) + 0 + + + (-0.006, 0, -0.346) + 0 + + + (0.047, 0, -0.238) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (-0.006, 0, -0.289) + 0 + + + (-0.174, 0, 0.254) + 0 + +
  • +
  • + Penis + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Balls + + (0, 0, -0.320) + 0 + + + (-0.01, 0, -0.338) + 0 + + + (0.062, 0, -0.221) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.301) + 0 + + + (0, 0, -0.318) + 0 + + + (0.059, 0, -0.186) + 0 + +
  • + + +
  • + Thin + +
  • + Vagina + + (0, 0, -0.312) + 0 + + + (-0.006, 0, -0.318) + 0 + + + (0.006, 0, -0.256) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.260) + 0 + + + (-0.002, 0, -0.266) + 0 + + + (-0.137, 0, -0.211) + 0 + +
  • +
  • + Penis + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.008, 0, -0.248) + 0 + +
  • +
  • + Balls + + (0, 0, -0.307) + 0 + + + (0, 0, -0.305) + 0 + + + (0.007, 0, -0.248) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.281) + 0 + + + (0, 0, -0.291) + 0 + + + (0.021, 0, -0.219) + 0 + +
  • + + +
  • + Male + +
  • + Vagina + + (0, 0, -0.320) + 0 + + + (0.002, 0, -0.311) + 0 + + + (0.057, 0, -0.258) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.268) + 0 + + + (0, 0, -0.252) + 0 + + + (-0.113, 0, -0.234) + 0 + +
  • +
  • + Penis + + (0, 0, -0.301) + 0 + + + (0, 0, -0.311) + 0 + + + (0.068, 0, -0.250) + 0 + +
  • +
  • + Balls + + (0.0, 0, -0.301) + 0 + + + (0.0, 0, -0.311) + 0 + + + (0.066, 0, -0.250) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.275) + 0 + + + (0, 0, -0.277) + 0 + + + (0.066, 0, -0.219) + 0 + +
  • + + +
  • + Hulk + +
  • + Vagina + + (0.004, 0, -0.434) + 0 + + + (0, 0, -0.453) + 0 + + + (0.020, 0, -0.395) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0.006, 0, -0.383) + 0 + + + (0, 0, -0.406) + 0 + + + (-0.238, 0, -0.328) + 0 + +
  • +
  • + Penis + + (0, 0, -0.436) + 0 + + + (0.0, 0, -0.445) + 0 + + + (0.029, 0, -0.387) + 0 + +
  • +
  • + Balls + + (0, 0, -0.436) + 0 + + + (0, 0, -0.445) + 0 + + + (0.028, 0, -0.387) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.395) + 0 + + + (0.027, 0, -0.375) + 0 + + + (0, 0, -0.424) + 0 + +
  • + + +
  • + Fat + +
  • + Vagina + + (0.002, 0, -0.352) + 0 + + + (0.002, 0, -0.359) + 0 + + + (0.148, 0, -0.352) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.297) + 0 + + + (0, 0, -0.297) + 0 + + + (-0.238, 0, -0.271) + 0 + +
  • +
  • + Penis + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Balls + + (0, 0, -0.357) + 0 + + + (0, 0, -0.363) + 0 + + + (0.168, 0, -0.348) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + PubicHair + + (0, 0, -0.307) + 0 + + + (0, 0, -0.320) + 0 + + + (0.158, 0, -0.338) + 0 + +
  • + + +
  • + Child + +
  • + Vagina + + (0.002, 0, -0.209) + 0 + + + (0, 0, -0.205) + 0 + + + (0.043, 0, -0.174) + 0 + +
  • +
  • + Breasts + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • +
  • + Anus + + (0, 0, -0.289) + 0 + + + (0.002, 0, -0.164) + 0 + + + (-0.084, 0, -0.127) + 0 + +
  • +
  • + Penis + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Balls + + (-0.002, 0, -0.195) + 0 + + + (-0.002, 0, -0.195) + 0 + + + (0.047, 0, -0.170) + 0 + +
  • +
  • + Belly + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + + + (0, 0, 0) + 0 + +
  • + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/TexturePointsDefs/Test.zip b/1.4/Defs/TexturePointsDefs/Test.zip new file mode 100644 index 0000000..d6a1cce Binary files /dev/null and b/1.4/Defs/TexturePointsDefs/Test.zip differ diff --git a/1.4/Patches/ApparelPatches/Tip_TagList.txt b/1.4/Patches/ApparelPatches/Tip_TagList.txt new file mode 100644 index 0000000..4ccc66a --- /dev/null +++ b/1.4/Patches/ApparelPatches/Tip_TagList.txt @@ -0,0 +1,18 @@ + +SizedApparel_ShowBelly + -don't hide belly even the apparel covers torso + +SizedApparel_ShowPrivateCrotch + -don't hide crotch(genitals and anus) even the apparel covers genitals + +SizedApparel_ShowUdder + -don't hide udder even the apparel covers udder + -wip (not work yet) + +SizedApparel_IgnorBreastSize + -sized apparel mod will just ignore the apparel during calculate breasts size of apparels + -this tag is useful to skip. good example is ratkin shield (the shield is covering breasts) + +SizedApparel_IgnorePose + -when the custom pose is checking posed apparel texture, skip current apparel + -wip \ No newline at end of file diff --git a/1.4/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml b/1.4/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml new file mode 100644 index 0000000..f8e424c --- /dev/null +++ b/1.4/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml @@ -0,0 +1,52 @@ + + + + + +
  • Biotech
  • +
    + + Normal + +
  • + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
  • + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/1.4/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml.bak b/1.4/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml.bak new file mode 100644 index 0000000..08e7f34 --- /dev/null +++ b/1.4/Patches/ApparelPatches/VanillaBiotechPatch/BiotechApparelPatch.xml.bak @@ -0,0 +1,52 @@ + + + + + +
  • Biotech
  • +
    + + Normal + +
  • + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_Sash"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
  • + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Bandolier"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_HeavyBandolier"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/1.4/Patches/ApparelPatches/VanillaCorePatch/DusterShowCrotchPatch.xml b/1.4/Patches/ApparelPatches/VanillaCorePatch/DusterShowCrotchPatch.xml new file mode 100644 index 0000000..34ede94 --- /dev/null +++ b/1.4/Patches/ApparelPatches/VanillaCorePatch/DusterShowCrotchPatch.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + Normal + +
  • + Defs/ThingDef[defName = "Apparel_Duster"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_Duster"]/apparel + + +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_Duster"]/apparel/tags + +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Patches/ApparelPatches/VanillaCorePatch/ShirtBasicShowCrotchPatch.xml b/1.4/Patches/ApparelPatches/VanillaCorePatch/ShirtBasicShowCrotchPatch.xml new file mode 100644 index 0000000..7840c82 --- /dev/null +++ b/1.4/Patches/ApparelPatches/VanillaCorePatch/ShirtBasicShowCrotchPatch.xml @@ -0,0 +1,25 @@ + + + + Normal + +
  • + Defs/ThingDef[defName = "Apparel_BasicShirt"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_BasicShirt"]/apparel + + +
  • SizedApparel_ShowPrivateCrotch
  • + + + + + Defs/ThingDef[defName = "Apparel_BasicShirt"]/apparel/tags + +
  • SizedApparel_ShowPrivateCrotch
  • +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/1.4/Patches/ApparelPatches/VanillaIdeoPatch/IdeoApparelPatch.xml b/1.4/Patches/ApparelPatches/VanillaIdeoPatch/IdeoApparelPatch.xml new file mode 100644 index 0000000..a548d83 --- /dev/null +++ b/1.4/Patches/ApparelPatches/VanillaIdeoPatch/IdeoApparelPatch.xml @@ -0,0 +1,31 @@ + + + + + +
  • Ideology
  • +
    + + Normal + +
  • + Defs/ThingDef[defName = "Apparel_BodyStrap"]/apparel/tags + + Defs/ThingDef[defName = "Apparel_BodyStrap"]/apparel + + +
  • SizedApparel_IgnorBreastSize
  • + + + + + Defs/ThingDef[defName = "Apparel_BodyStrap"]/apparel/tags + +
  • SizedApparel_IgnorBreastSize
  • +
    +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/1.4/Patches/ApparelRecorderCompPatch.xml b/1.4/Patches/ApparelRecorderCompPatch.xml new file mode 100644 index 0000000..f656b11 --- /dev/null +++ b/1.4/Patches/ApparelRecorderCompPatch.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + /Defs/ThingDef[@Name="BasePawn"]/comps + +
  • + SizedApparel.ApparelRecorderComp +
  • +
    +
    + +
    \ No newline at end of file diff --git a/1.4/Patches/HediffPatches/PrivateHediffPartsPatches.xml b/1.4/Patches/HediffPatches/PrivateHediffPartsPatches.xml new file mode 100644 index 0000000..faec3cd --- /dev/null +++ b/1.4/Patches/HediffPatches/PrivateHediffPartsPatches.xml @@ -0,0 +1,68 @@ + + + + +
  • + /Defs/rjw.HediffDef_PartBase[@Name="RJW_PrivatePartBase"]/comps + + /Defs/rjw.HediffDef_PartBase[@Name="RJW_PrivatePartBase"] + + +
  • + + + + + /Defs/rjw.HediffDef_PartBase[@Name="RJW_PrivatePartBase"]/comps + +
  • + + +
  • + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/1.4/Patches/ThingPatches/BodyPartThingPatch.xml b/1.4/Patches/ThingPatches/BodyPartThingPatch.xml new file mode 100644 index 0000000..19f5f23 --- /dev/null +++ b/1.4/Patches/ThingPatches/BodyPartThingPatch.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + +
  • + /Defs/ThingDef[@Name="rjw_BodyPartBase"]/comps + + /Defs/ThingDef[@Name="rjw_BodyPartBase"] + + +
  • + + + + + /Defs/ThingDef[@Name="rjw_BodyPartBase"]/comps + +
  • + + +
  • + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/About/About.xml b/About/About.xml index 412f697..97702d9 100644 --- a/About/About.xml +++ b/About/About.xml @@ -5,17 +5,18 @@
  • 1.3
  • +
  • 1.4
  • OTYOTY.SizedApparel -[version 0.93.0] -[worked for RJW Version: 4.9.8] - This mod changes apparel texture for matching pawn's breasts size. Also, it has include pawn's private body parts rendering system. I'm planning to at least all vanilla apparels will be supported. +[special thanks] +leoinc +zero112
  • @@ -30,5 +31,10 @@ I'm planning to at least all vanilla apparels will be supported.
  • erdelf.HumanoidAlienRaces
  • rim.job.world
  • shauaputa.rimnudeworld
  • +
  • c0ffee.rimworld.animations
  • +
  • tammybee.statueofcolonist
  • + + + \ No newline at end of file diff --git a/About/About.xml.bak b/About/About.xml.bak new file mode 100644 index 0000000..fd9d475 --- /dev/null +++ b/About/About.xml.bak @@ -0,0 +1,39 @@ + + + Sized Apparel for RJW + OTYOTY + + +
  • 1.3
  • +
  • 1.4
  • +
    + OTYOTY.SizedApparel + +This mod changes apparel texture for matching pawn's breasts size. +Also, it has include pawn's private body parts rendering system. + +I'm planning to at least all vanilla apparels will be supported. + +[special thanks] +leoinc +zero112 + + +
  • + brrainz.harmony + Harmony + steam://url/CommunityFilePage/2009463077 + https://github.com/pardeike/HarmonyRimWorld/releases/latest +
  • +
    + +
  • brrainz.harmony
  • +
  • erdelf.HumanoidAlienRaces
  • +
  • rim.job.world
  • +
  • shauaputa.rimnudeworld
  • +
  • c0ffee.rimworld.animations
  • +
    + + + +
    \ No newline at end of file diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_east.png new file mode 100644 index 0000000..8d551d9 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_north.png new file mode 100644 index 0000000..5ddd1e7 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_south.png new file mode 100644 index 0000000..1bd3260 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_10_south.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_east.png new file mode 100644 index 0000000..3b0c015 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_north.png new file mode 100644 index 0000000..5ef98c6 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_south.png new file mode 100644 index 0000000..35a7d7e Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_7_south.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_east.png new file mode 100644 index 0000000..3b0c015 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_north.png new file mode 100644 index 0000000..5ddd1e7 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_south.png new file mode 100644 index 0000000..69f37ef Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_8_south.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_east.png new file mode 100644 index 0000000..c2c7b56 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_north.png new file mode 100644 index 0000000..5ddd1e7 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_south.png new file mode 100644 index 0000000..76e6310 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Female_9_south.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_east.png new file mode 100644 index 0000000..780b348 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_north.png new file mode 100644 index 0000000..2aba231 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_south.png new file mode 100644 index 0000000..8e102a7 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_10_south.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_east.png new file mode 100644 index 0000000..3fa39fd Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_north.png new file mode 100644 index 0000000..dbf7559 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_south.png new file mode 100644 index 0000000..71832db Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_7_south.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_east.png new file mode 100644 index 0000000..780b348 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_north.png new file mode 100644 index 0000000..2aba231 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_south.png new file mode 100644 index 0000000..c06e02e Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_8_south.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_east.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_east.png new file mode 100644 index 0000000..780b348 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_east.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_north.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_north.png new file mode 100644 index 0000000..2aba231 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_north.png differ diff --git a/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_south.png b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_south.png new file mode 100644 index 0000000..e802545 Binary files /dev/null and b/Textures/Core/Things/Pawn/Humanlike/Apparel/Pants/Pants_Thin_9_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_east.png new file mode 100644 index 0000000..7460307 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_north.png new file mode 100644 index 0000000..e26bfac Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_south.png new file mode 100644 index 0000000..f7aee7c Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_0_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_east.png new file mode 100644 index 0000000..a07f58a Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_north.png new file mode 100644 index 0000000..e26bfac Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_south.png new file mode 100644 index 0000000..f1bb09d Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_2_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_east.png new file mode 100644 index 0000000..5ae0d4f Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_north.png new file mode 100644 index 0000000..8ecedd8 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_south.png new file mode 100644 index 0000000..d23ed13 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_3_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_east.png new file mode 100644 index 0000000..cef94c4 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_north.png new file mode 100644 index 0000000..2fd6a18 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_south.png new file mode 100644 index 0000000..8cb743f Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_4_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_east.png new file mode 100644 index 0000000..73cce82 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_north.png new file mode 100644 index 0000000..9806fb4 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_south.png new file mode 100644 index 0000000..52e0eed Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_5_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_east.png new file mode 100644 index 0000000..b225dd7 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_north.png new file mode 100644 index 0000000..4ffa89d Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_south.png new file mode 100644 index 0000000..ed4fe27 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Female_6_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_east.png new file mode 100644 index 0000000..7460307 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_north.png new file mode 100644 index 0000000..e26bfac Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_south.png new file mode 100644 index 0000000..f7aee7c Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_0_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_east.png new file mode 100644 index 0000000..a07f58a Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_north.png new file mode 100644 index 0000000..e26bfac Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_south.png new file mode 100644 index 0000000..f1bb09d Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_2_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_east.png new file mode 100644 index 0000000..5ae0d4f Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_north.png new file mode 100644 index 0000000..8ecedd8 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_south.png new file mode 100644 index 0000000..d23ed13 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_3_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_east.png new file mode 100644 index 0000000..cef94c4 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_north.png new file mode 100644 index 0000000..2fd6a18 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_south.png new file mode 100644 index 0000000..8cb743f Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_4_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_east.png new file mode 100644 index 0000000..73cce82 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_north.png new file mode 100644 index 0000000..9806fb4 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_south.png new file mode 100644 index 0000000..52e0eed Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_5_south.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_east.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_east.png new file mode 100644 index 0000000..b225dd7 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_east.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_north.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_north.png new file mode 100644 index 0000000..4ffa89d Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_north.png differ diff --git a/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_south.png b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_south.png new file mode 100644 index 0000000..ed4fe27 Binary files /dev/null and b/Textures/Miho/Apparel/OnSkinHoodieNew/OnSkinHoodie_Thin_6_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_east.png new file mode 100644 index 0000000..8fd8d4e Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_south.png new file mode 100644 index 0000000..91b0549 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_1_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_east.png new file mode 100644 index 0000000..8c5b292 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_south.png new file mode 100644 index 0000000..91b0549 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_2_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_east.png new file mode 100644 index 0000000..d7e5583 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_north.png new file mode 100644 index 0000000..4221f51 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_south.png new file mode 100644 index 0000000..469d773 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_3_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_east.png new file mode 100644 index 0000000..092a1c0 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_south.png new file mode 100644 index 0000000..016bb6a Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_4_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_east.png new file mode 100644 index 0000000..e949ead Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_south.png new file mode 100644 index 0000000..115c755 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_5_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_east.png new file mode 100644 index 0000000..2a8b6cf Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_south.png new file mode 100644 index 0000000..e642e6b Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Female_6_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_east.png new file mode 100644 index 0000000..7f67a15 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_north.png new file mode 100644 index 0000000..4221f51 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_south.png new file mode 100644 index 0000000..469d773 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_0_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_east.png new file mode 100644 index 0000000..8fd8d4e Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_south.png new file mode 100644 index 0000000..91b0549 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_1_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_east.png new file mode 100644 index 0000000..8c5b292 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_south.png new file mode 100644 index 0000000..91b0549 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_2_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_east.png new file mode 100644 index 0000000..d7e5583 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_north.png new file mode 100644 index 0000000..4221f51 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_south.png new file mode 100644 index 0000000..469d773 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_3_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_east.png new file mode 100644 index 0000000..092a1c0 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_south.png new file mode 100644 index 0000000..016bb6a Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_4_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_east.png new file mode 100644 index 0000000..e949ead Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_south.png new file mode 100644 index 0000000..115c755 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_5_south.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_east.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_east.png new file mode 100644 index 0000000..2a8b6cf Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_east.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_north.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_north.png new file mode 100644 index 0000000..8d493e1 Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_north.png differ diff --git a/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_south.png b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_south.png new file mode 100644 index 0000000..e642e6b Binary files /dev/null and b/Textures/Miho/Apparel/ShellSorceress/ShellSorceress_Thin_6_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_east.png new file mode 100644 index 0000000..1193eb6 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_north.png new file mode 100644 index 0000000..f80043e Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_south.png new file mode 100644 index 0000000..7afb41b Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_3_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_east.png new file mode 100644 index 0000000..729fa8c Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_north.png new file mode 100644 index 0000000..ed259fe Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_south.png new file mode 100644 index 0000000..5aa4ae4 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_4_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_east.png new file mode 100644 index 0000000..ddd5a07 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_north.png new file mode 100644 index 0000000..ed259fe Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_south.png new file mode 100644 index 0000000..6722fbc Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_5_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_east.png new file mode 100644 index 0000000..ed02afc Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_north.png new file mode 100644 index 0000000..ed259fe Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_south.png new file mode 100644 index 0000000..9b03b37 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Female_6_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_east.png new file mode 100644 index 0000000..1193eb6 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_north.png new file mode 100644 index 0000000..f80043e Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_south.png new file mode 100644 index 0000000..7afb41b Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_3_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_east.png new file mode 100644 index 0000000..729fa8c Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_north.png new file mode 100644 index 0000000..ed259fe Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_south.png new file mode 100644 index 0000000..5aa4ae4 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_4_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_east.png new file mode 100644 index 0000000..ddd5a07 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_north.png new file mode 100644 index 0000000..ed259fe Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_south.png new file mode 100644 index 0000000..6722fbc Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_5_south.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_east.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_east.png new file mode 100644 index 0000000..ed02afc Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_east.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_north.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_north.png new file mode 100644 index 0000000..ed259fe Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_north.png differ diff --git a/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_south.png b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_south.png new file mode 100644 index 0000000..9b03b37 Binary files /dev/null and b/Textures/Miho/Apparel/UnderwearSorceress/UnderwearSorceress_Thin_6_south.png differ diff --git a/Textures/Miho/Body/Naked_Female_BaseBody_east.png b/Textures/Miho/Body/Naked_Female_BaseBody_east.png new file mode 100644 index 0000000..50abe58 Binary files /dev/null and b/Textures/Miho/Body/Naked_Female_BaseBody_east.png differ diff --git a/Textures/Miho/Body/Naked_Female_BaseBody_north.png b/Textures/Miho/Body/Naked_Female_BaseBody_north.png new file mode 100644 index 0000000..78038ae Binary files /dev/null and b/Textures/Miho/Body/Naked_Female_BaseBody_north.png differ diff --git a/Textures/Miho/Body/Naked_Female_BaseBody_south.png b/Textures/Miho/Body/Naked_Female_BaseBody_south.png new file mode 100644 index 0000000..1087522 Binary files /dev/null and b/Textures/Miho/Body/Naked_Female_BaseBody_south.png differ diff --git a/Textures/Miho/Body/Naked_Thin_BaseBody_east.png b/Textures/Miho/Body/Naked_Thin_BaseBody_east.png new file mode 100644 index 0000000..cca867b Binary files /dev/null and b/Textures/Miho/Body/Naked_Thin_BaseBody_east.png differ diff --git a/Textures/Miho/Body/Naked_Thin_BaseBody_north.png b/Textures/Miho/Body/Naked_Thin_BaseBody_north.png new file mode 100644 index 0000000..78038ae Binary files /dev/null and b/Textures/Miho/Body/Naked_Thin_BaseBody_north.png differ diff --git a/Textures/Miho/Body/Naked_Thin_BaseBody_south.png b/Textures/Miho/Body/Naked_Thin_BaseBody_south.png new file mode 100644 index 0000000..98ae14f Binary files /dev/null and b/Textures/Miho/Body/Naked_Thin_BaseBody_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_0_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_0_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_0_east.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_0_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_0_north.png new file mode 100644 index 0000000..19bd490 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_0_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_0_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_0_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_1_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_1_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_1_east.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_1_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_1_north.png new file mode 100644 index 0000000..ecc2554 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_1_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_1_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_1_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_2_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_2_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_2_east.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_2_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_2_north.png new file mode 100644 index 0000000..837dc0e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_2_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_2_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_2_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_3_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_3_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_3_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_3_east.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_3_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_3_north.png new file mode 100644 index 0000000..94f6d6d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_3_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_3_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_3_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_3_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_4_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_4_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_4_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_4_east.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_4_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_4_north.png new file mode 100644 index 0000000..70c56d7 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_4_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_4_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_4_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_4_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_5_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_Donut_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_5_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_Donut_east.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_Donut_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_Donut_north.png new file mode 100644 index 0000000..12a0353 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_Donut_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_5_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_Donut_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_5_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_Donut_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_0_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_east.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_north.png new file mode 100644 index 0000000..1cc4018 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_0_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Anus/Anus_5_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_0_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_0_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_0_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_0_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_0_north.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_0_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_0_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_0_south.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_east.png new file mode 100644 index 0000000..9af7889 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_north.png new file mode 100644 index 0000000..2558627 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_south.png new file mode 100644 index 0000000..2558627 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_east.png new file mode 100644 index 0000000..605f6ec Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_north.png new file mode 100644 index 0000000..52ba6c8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_south.png new file mode 100644 index 0000000..52ba6c8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_east.png new file mode 100644 index 0000000..c382e5e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_north.png new file mode 100644 index 0000000..d5d8a23 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_south.png new file mode 100644 index 0000000..d5d8a23 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_east.png new file mode 100644 index 0000000..a84657d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_north.png new file mode 100644 index 0000000..ef1e368 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_south.png new file mode 100644 index 0000000..ef1e368 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Belly/BellyBulge_Female_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_east.png new file mode 100644 index 0000000..382f32b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_1_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_south.png new file mode 100644 index 0000000..647a95b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_east.png new file mode 100644 index 0000000..24e40cd Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_south.png new file mode 100644 index 0000000..06d2c2e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_east.png new file mode 100644 index 0000000..e2a6393 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_south.png new file mode 100644 index 0000000..dba10fd Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_east.png new file mode 100644 index 0000000..48fea23 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_south.png new file mode 100644 index 0000000..6e4055d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_east.png new file mode 100644 index 0000000..48f0f9b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_north.png new file mode 100644 index 0000000..bf68055 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_south.png new file mode 100644 index 0000000..bf8d0e4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_east.png new file mode 100644 index 0000000..2ade37a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_north.png new file mode 100644 index 0000000..e657c00 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_south.png new file mode 100644 index 0000000..4ac04d3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_east.png new file mode 100644 index 0000000..e2b98a4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_north.png new file mode 100644 index 0000000..6679c86 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_south.png new file mode 100644 index 0000000..203d89c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/Breasts_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_east.png new file mode 100644 index 0000000..382f32b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_1_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_south.png new file mode 100644 index 0000000..647a95b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_east.png new file mode 100644 index 0000000..b6b3fc0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_south.png new file mode 100644 index 0000000..3e468ee Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_east.png new file mode 100644 index 0000000..4ee962d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_south.png new file mode 100644 index 0000000..dba10fd Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_east.png new file mode 100644 index 0000000..48fea23 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_south.png new file mode 100644 index 0000000..6e4055d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_east.png new file mode 100644 index 0000000..48f0f9b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_north.png new file mode 100644 index 0000000..bf68055 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_south.png new file mode 100644 index 0000000..bf8d0e4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_east.png new file mode 100644 index 0000000..2ade37a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_north.png new file mode 100644 index 0000000..e657c00 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_south.png new file mode 100644 index 0000000..4ac04d3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_east.png new file mode 100644 index 0000000..e2b98a4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_north.png new file mode 100644 index 0000000..6679c86 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_south.png new file mode 100644 index 0000000..203d89c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Breasts/CustomPose/JiggleUp/Breasts_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_east.png new file mode 100644 index 0000000..e719be6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_2_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_north.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_south.png new file mode 100644 index 0000000..b9476ba Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Balls/Penis_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_east.png new file mode 100644 index 0000000..395151c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_south.png new file mode 100644 index 0000000..e36e999 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_east.png new file mode 100644 index 0000000..d5bd2a8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_south.png new file mode 100644 index 0000000..d0eb1ce Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_east.png new file mode 100644 index 0000000..4e109b9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_2_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_north.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_south.png new file mode 100644 index 0000000..0bf9571 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_east.png new file mode 100644 index 0000000..f77e312 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_south.png new file mode 100644 index 0000000..3071e8c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_east.png new file mode 100644 index 0000000..5ef392b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_south.png new file mode 100644 index 0000000..2ccf407 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_east.png new file mode 100644 index 0000000..473830b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_south.png new file mode 100644 index 0000000..b533c9a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Horny/Penis_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_east.png new file mode 100644 index 0000000..fffe34c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_3_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_south.png new file mode 100644 index 0000000..94b6e0c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_east.png new file mode 100644 index 0000000..fffe34c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_3_south.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_north.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_south.png new file mode 100644 index 0000000..94b6e0c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_east.png new file mode 100644 index 0000000..fffe34c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_4_east.png rename to Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_north.png diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_south.png new file mode 100644 index 0000000..94b6e0c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Penis/Penis_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_east.png new file mode 100644 index 0000000..90acea4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_south.png new file mode 100644 index 0000000..328b92f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Default_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_east.png new file mode 100644 index 0000000..89d8f17 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_south.png new file mode 100644 index 0000000..e575ca8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Line_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_east.png new file mode 100644 index 0000000..018b141 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_south.png new file mode 100644 index 0000000..44665e1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/PubicHair/Wild_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_east.png new file mode 100644 index 0000000..4f1a5bb Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_north.png new file mode 100644 index 0000000..215e3f9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_south.png new file mode 100644 index 0000000..b20ce79 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_east.png new file mode 100644 index 0000000..4071d87 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_north.png new file mode 100644 index 0000000..0952ca0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_south.png new file mode 100644 index 0000000..944876b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_east.png new file mode 100644 index 0000000..b604a99 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_north.png new file mode 100644 index 0000000..f734e2a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_south.png new file mode 100644 index 0000000..3c08e9b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_east.png new file mode 100644 index 0000000..fa1d865 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_north.png new file mode 100644 index 0000000..ed8f0b3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_south.png new file mode 100644 index 0000000..9ee5031 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_east.png new file mode 100644 index 0000000..93d770b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_north.png new file mode 100644 index 0000000..7017435 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_south.png new file mode 100644 index 0000000..985fa72 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_east.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_east.png new file mode 100644 index 0000000..677a5a7 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_north.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_north.png new file mode 100644 index 0000000..471b1f0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_south.png b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_south.png new file mode 100644 index 0000000..673850a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Alien_Miho/Vagina/Vagina_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus.zip b/Textures/SizedApparel/BodyParts/Human/Anus.zip new file mode 100644 index 0000000..91d1283 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus.zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_0_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_4_south.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_0_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_0_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_0_north.png new file mode 100644 index 0000000..0152937 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_Donut_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_0_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_Donut_east.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_0_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_Donut_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_1_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_Donut_south.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_1_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_1_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_1_north.png new file mode 100644 index 0000000..d165500 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_1_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_east.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_1_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_2_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_south.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_2_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_2_north.png new file mode 100644 index 0000000..ef37abb Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_2_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_2_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_3_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_3_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_3_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_3_north.png new file mode 100644 index 0000000..8cc31e8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_3_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_3_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_4_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_4_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_4_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_4_north.png new file mode 100644 index 0000000..74d2a5b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_4_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_4_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_Donut_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_Donut_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_Donut_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_Donut_north.png new file mode 100644 index 0000000..c1e2223 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_Donut_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_Donut_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_0_east.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_Donut_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_0_south.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_north.png new file mode 100644 index 0000000..04c38fb Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_1_east.png rename to Textures/SizedApparel/BodyParts/Human/Anus/Anus_5_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_2_north.png deleted file mode 100644 index 8a09fb5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_3_north.png deleted file mode 100644 index 28a5a04..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_4_north.png deleted file mode 100644 index 05d648d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_5_north.png deleted file mode 100644 index 1d676ed..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_1_north.png deleted file mode 100644 index 797a3b1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_2_north.png deleted file mode 100644 index 9a274c6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_3_north.png deleted file mode 100644 index 12c7d41..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_4_north.png deleted file mode 100644 index 07cb9fd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_Donut_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_Donut_north.png deleted file mode 100644 index cf5dda3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_Donut_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_north.png deleted file mode 100644 index 8d9bb3e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_east.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_north.png deleted file mode 100644 index 04a711b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_south.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_east.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_north.png deleted file mode 100644 index 560fd60..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_south.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_east.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_north.png deleted file mode 100644 index 2c34840..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_south.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_east.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_north.png deleted file mode 100644 index cff8abb..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_south.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_east.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_north.png deleted file mode 100644 index d86e3c2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_south.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/old/Anus_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts (centered_Wip).zip b/Textures/SizedApparel/BodyParts/Human/Breasts (centered_Wip).zip new file mode 100644 index 0000000..6ce3462 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts (centered_Wip).zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts.zip b/Textures/SizedApparel/BodyParts/Human/Breasts.zip new file mode 100644 index 0000000..80f20de Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts.zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Fat_2_east.png new file mode 100644 index 0000000..2ba52dd Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Fat_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Fat_2_south.png new file mode 100644 index 0000000..46891a9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Fat_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_5_north.png new file mode 100644 index 0000000..a2203d6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_5_south.png new file mode 100644 index 0000000..d91cace Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_east.png new file mode 100644 index 0000000..5d82098 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_north.png new file mode 100644 index 0000000..667ae05 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_south.png new file mode 100644 index 0000000..1526927 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_east.png new file mode 100644 index 0000000..683013a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_north.png new file mode 100644 index 0000000..925ffde Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_south.png new file mode 100644 index 0000000..27c8e7e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_east.png new file mode 100644 index 0000000..a13e692 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_north.png new file mode 100644 index 0000000..f308203 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_south.png new file mode 100644 index 0000000..b84eda8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Female_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Hulk_2_east.png new file mode 100644 index 0000000..c8960a5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Hulk_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Hulk_2_south.png new file mode 100644 index 0000000..e3178a3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Hulk_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_east.png new file mode 100644 index 0000000..82327db Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_north.png new file mode 100644 index 0000000..6b917be Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_south.png new file mode 100644 index 0000000..44dedf0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_east.png new file mode 100644 index 0000000..88b8685 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_north.png new file mode 100644 index 0000000..911726e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_south.png new file mode 100644 index 0000000..7717add Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_east.png new file mode 100644 index 0000000..1a39818 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_north.png new file mode 100644 index 0000000..5ecb35b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_south.png new file mode 100644 index 0000000..03f5988 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_east.png new file mode 100644 index 0000000..333428a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_north.png new file mode 100644 index 0000000..742c3bf Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_south.png new file mode 100644 index 0000000..32a2816 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_east.png new file mode 100644 index 0000000..675cf6c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_north.png new file mode 100644 index 0000000..6260494 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_south.png new file mode 100644 index 0000000..716b5c0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_7_east.png new file mode 100644 index 0000000..a582350 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_7_south.png new file mode 100644 index 0000000..cf6787d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_east.png new file mode 100644 index 0000000..0015273 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_north.png new file mode 100644 index 0000000..969592b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_south.png new file mode 100644 index 0000000..dedb3a8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_east.png new file mode 100644 index 0000000..2891eac Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_north.png new file mode 100644 index 0000000..4e48a49 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_south.png new file mode 100644 index 0000000..5b21fa5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/128/Breasts_Thin_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_east.png new file mode 100644 index 0000000..6d50489 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_north.png new file mode 100644 index 0000000..9411416 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_south.png new file mode 100644 index 0000000..2ab4707 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_east.png new file mode 100644 index 0000000..61d1360 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_north.png new file mode 100644 index 0000000..1724f2e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_south.png new file mode 100644 index 0000000..749c659 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/256/Breasts_Female_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_east.png new file mode 100644 index 0000000..12031c1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_south.png new file mode 100644 index 0000000..a8f21eb Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_east.png new file mode 100644 index 0000000..a4ef5e0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_south.png new file mode 100644 index 0000000..f0efafa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_east.png new file mode 100644 index 0000000..3f4f567 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_south.png new file mode 100644 index 0000000..ddbc0da Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_east.png new file mode 100644 index 0000000..728bd05 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_south.png new file mode 100644 index 0000000..f344c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_east.png new file mode 100644 index 0000000..a53d601 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_north.png new file mode 100644 index 0000000..407aab5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_south.png new file mode 100644 index 0000000..57654e7 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_east.png new file mode 100644 index 0000000..12583aa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_north.png new file mode 100644 index 0000000..5e7927d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_south.png new file mode 100644 index 0000000..0d45338 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_east.png new file mode 100644 index 0000000..211aa0a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_north.png new file mode 100644 index 0000000..aab75ab Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_south.png new file mode 100644 index 0000000..ff30eaa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Fat_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_east.png index de3a540..a1f49f2 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_south.png index 7d320a9..f440c70 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_east.png new file mode 100644 index 0000000..dcdec0e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_north.png new file mode 100644 index 0000000..06aecf1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_south.png new file mode 100644 index 0000000..850c198 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_east.png index f003bf1..43ff4f9 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_south.png index f0c7230..d6eb777 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_east.png index d1dd60d..f7e4282 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_south.png index 2b2a51a..0ddaaba 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_east.png index 22385ee..160bb20 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_south.png index 259db4e..beeb220 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_east.png index c46cccc..70c6707 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_south.png index 56abd02..b4d3a9f 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_east.png index fe7eb25..af9f690 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_south.png index e70bfe4..89f9c0c 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_east.png index 08b75b3..bdc4634 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_south.png index 0dba4d9..9eb9e71 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_east.png index 2e80d11..1529dd1 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_east.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_south.png index cfdce29..1d106a6 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_east.png new file mode 100644 index 0000000..23bf398 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_north.png new file mode 100644 index 0000000..ce604aa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_south.png new file mode 100644 index 0000000..213a762 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_east.png new file mode 100644 index 0000000..8548e1c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_north.png new file mode 100644 index 0000000..2098247 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_south.png new file mode 100644 index 0000000..b6a14f5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_east.png new file mode 100644 index 0000000..7b91684 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_south.png new file mode 100644 index 0000000..5c26891 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_east.png new file mode 100644 index 0000000..fddf6a6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_south.png new file mode 100644 index 0000000..08ce988 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_east.png new file mode 100644 index 0000000..2c9d6ac Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_south.png new file mode 100644 index 0000000..464a19d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_east.png new file mode 100644 index 0000000..3593c1b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_south.png new file mode 100644 index 0000000..3e29eb4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_east.png new file mode 100644 index 0000000..d82e20a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_north.png new file mode 100644 index 0000000..c494bb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_south.png new file mode 100644 index 0000000..4ff70b6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_east.png new file mode 100644 index 0000000..5c8d726 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_north.png new file mode 100644 index 0000000..6e20dc9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_south.png new file mode 100644 index 0000000..fc37b35 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_6_east.png new file mode 100644 index 0000000..5b64872 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Hulk_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_east.png new file mode 100644 index 0000000..19cef9b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_north.png new file mode 100644 index 0000000..df6701d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_south.png new file mode 100644 index 0000000..ce1e0ff Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Male_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_east.png new file mode 100644 index 0000000..910214f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_north.png new file mode 100644 index 0000000..8dd4426 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_south.png new file mode 100644 index 0000000..746da54 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_east.png new file mode 100644 index 0000000..bfccc08 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_north.png new file mode 100644 index 0000000..b77e824 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_south.png new file mode 100644 index 0000000..c2dfd7e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_east.png new file mode 100644 index 0000000..f60289a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_north.png new file mode 100644 index 0000000..829f0bd Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_south.png new file mode 100644 index 0000000..ea55a67 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_east.png new file mode 100644 index 0000000..a5cf5f3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_north.png new file mode 100644 index 0000000..36c26a8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_south.png new file mode 100644 index 0000000..aedebba Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Thin_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_east.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_south.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_east.png new file mode 100644 index 0000000..c8da00c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_north.png new file mode 100644 index 0000000..aac9fd8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_south.png new file mode 100644 index 0000000..f335aa4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_east.png new file mode 100644 index 0000000..bb81077 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_1_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_south.png new file mode 100644 index 0000000..65c526d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_east.png new file mode 100644 index 0000000..741051c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_north.png new file mode 100644 index 0000000..7344a01 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_south.png new file mode 100644 index 0000000..deb3010 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_east.png new file mode 100644 index 0000000..8412c08 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_north.png new file mode 100644 index 0000000..3a0fdaf Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_south.png index 118a3fd..d80a802 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_south.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_east.png new file mode 100644 index 0000000..f296e96 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_north.png new file mode 100644 index 0000000..cdcc59d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_south.png new file mode 100644 index 0000000..e066175 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_east.png new file mode 100644 index 0000000..1b7bc7a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_north.png new file mode 100644 index 0000000..99464b6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_south.png new file mode 100644 index 0000000..8d592cc Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_east.png new file mode 100644 index 0000000..aea6e9f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_north.png new file mode 100644 index 0000000..896226b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_south.png new file mode 100644 index 0000000..b793e5a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_east.png new file mode 100644 index 0000000..964f088 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_north.png new file mode 100644 index 0000000..e9dbb34 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_south.png new file mode 100644 index 0000000..cdc8fd4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_east.png new file mode 100644 index 0000000..e6b60b3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_north.png new file mode 100644 index 0000000..ebe3bbe Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_south.png new file mode 100644 index 0000000..2062d57 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_east.png new file mode 100644 index 0000000..af7b988 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_north.png new file mode 100644 index 0000000..28f6e63 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_south.png new file mode 100644 index 0000000..0f1c408 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Female_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_0_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_0_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_0_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_0_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_0_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_0_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_east.png new file mode 100644 index 0000000..1d8673c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_north.png new file mode 100644 index 0000000..34db081 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_south.png new file mode 100644 index 0000000..42c23ab Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_east.png new file mode 100644 index 0000000..34bf6eb Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_1_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_south.png new file mode 100644 index 0000000..968c2d4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_east.png new file mode 100644 index 0000000..295739e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_north.png new file mode 100644 index 0000000..240c96f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_south.png new file mode 100644 index 0000000..0eaeb89 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_east.png new file mode 100644 index 0000000..711f5fb Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_north.png new file mode 100644 index 0000000..1db8ba6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_south.png new file mode 100644 index 0000000..2be557b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_east.png new file mode 100644 index 0000000..baeae64 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_north.png new file mode 100644 index 0000000..19fdf5e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_south.png new file mode 100644 index 0000000..287e5e5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_east.png new file mode 100644 index 0000000..d7a7c9e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_north.png new file mode 100644 index 0000000..901a825 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_south.png new file mode 100644 index 0000000..d74f9e1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_east.png new file mode 100644 index 0000000..0efb4ae Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_north.png new file mode 100644 index 0000000..91d62fa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_south.png new file mode 100644 index 0000000..bddc985 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_east.png new file mode 100644 index 0000000..9774113 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_north.png new file mode 100644 index 0000000..8a561b9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_south.png new file mode 100644 index 0000000..4f47391 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_east.png new file mode 100644 index 0000000..bdb1de1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_north.png new file mode 100644 index 0000000..1a4386f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_south.png new file mode 100644 index 0000000..316511b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_east.png new file mode 100644 index 0000000..a2990b5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_north.png new file mode 100644 index 0000000..7df5913 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_south.png new file mode 100644 index 0000000..ce34747 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/Breasts_Thin_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_0_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_0_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_0_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_0_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_0_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_0_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_east.png new file mode 100644 index 0000000..cab1b83 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_north.png new file mode 100644 index 0000000..aac9fd8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_south.png new file mode 100644 index 0000000..42c23ab Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_east.png new file mode 100644 index 0000000..f7a7be4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_south.png new file mode 100644 index 0000000..65c526d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_east.png new file mode 100644 index 0000000..7c64d0c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_north.png new file mode 100644 index 0000000..7344a01 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_south.png new file mode 100644 index 0000000..b4405ce Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_east.png new file mode 100644 index 0000000..711f5fb Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_north.png new file mode 100644 index 0000000..3a0fdaf Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/CustomPose/JiggleUp/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/CustomPose/JiggleUp/Breasts_Female_3_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_3_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_east.png new file mode 100644 index 0000000..408eaba Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_north.png new file mode 100644 index 0000000..cdcc59d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_south.png new file mode 100644 index 0000000..6a71272 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_east.png new file mode 100644 index 0000000..e3ebf46 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_north.png new file mode 100644 index 0000000..99464b6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_south.png new file mode 100644 index 0000000..feb710c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_east.png new file mode 100644 index 0000000..1c194ed Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_north.png new file mode 100644 index 0000000..896226b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_south.png new file mode 100644 index 0000000..fde0308 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_east.png new file mode 100644 index 0000000..25994ea Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_north.png new file mode 100644 index 0000000..e9dbb34 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_south.png new file mode 100644 index 0000000..06e0760 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_east.png new file mode 100644 index 0000000..a6ca1c0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_north.png new file mode 100644 index 0000000..ebe3bbe Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_south.png new file mode 100644 index 0000000..b96a013 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_east.png new file mode 100644 index 0000000..d74efac Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_north.png new file mode 100644 index 0000000..28f6e63 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_south.png new file mode 100644 index 0000000..503cae3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/CustomPose/JiggleUp/breasts with nipple (old)/Breasts_Female_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_1_north.png deleted file mode 100644 index 4801d8a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_5_south.png deleted file mode 100644 index da7cde6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_east.png deleted file mode 100644 index 4571773..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_north.png deleted file mode 100644 index fdeebd9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_south.png deleted file mode 100644 index 5ab4f1f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/backup/Breasts_Female_7_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_east.png similarity index 62% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_east.png index 31b309f..de3a540 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Thin_0_north.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_south.png similarity index 53% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_1_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_south.png index 7f11401..7d320a9 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_1_north.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_east.png new file mode 100644 index 0000000..97c3325 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_north.png new file mode 100644 index 0000000..06aecf1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_south.png new file mode 100644 index 0000000..05e6a4e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_1_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_1_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_1_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_1_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_1_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_1_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_1_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_1_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_2_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_2_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_2_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_2_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_2_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_2_south.png new file mode 100644 index 0000000..4883923 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_3_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_3_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_3_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_3_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_3_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_3_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_3_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_3_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_3_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_4_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_4_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_4_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_4_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_4_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_4_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_4_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_4_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_4_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_5_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_5_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_5_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_5_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_5_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_5_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_5_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_5_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_5_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_6_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_6_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_6_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_6_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_6_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_6_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_6_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_6_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_6_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_InvertedNipple_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_InvertedNipple_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_InvertedNipple_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_InvertedNipple_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_InvertedNipple_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_InvertedNipple_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_InvertedNipple_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_InvertedNipple_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_InvertedNipple_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_InvertedNipple_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Breasts/Breasts_Female_7_InvertedNipple_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_InvertedNipple_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_7_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_east.png new file mode 100644 index 0000000..4e8fc95 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_north.png new file mode 100644 index 0000000..ce604aa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_south.png new file mode 100644 index 0000000..cd601f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_east.png new file mode 100644 index 0000000..9a3c708 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_north.png new file mode 100644 index 0000000..2098247 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_south.png new file mode 100644 index 0000000..01ab259 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Female_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_east.png similarity index 64% rename from Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_east.png index 059cc4f..a429b49 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Anus/Anus_Female_0_north.png and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_north.png new file mode 100644 index 0000000..ffa684c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_south.png new file mode 100644 index 0000000..20dce85 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_east.png new file mode 100644 index 0000000..910214f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_north.png new file mode 100644 index 0000000..8dd4426 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_south.png new file mode 100644 index 0000000..746da54 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_1_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_1_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_1_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_1_north.png new file mode 100644 index 0000000..ffa684c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_1_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_1_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_1_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_2_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_2_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_2_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_2_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_2_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_2_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_2_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_2_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_3_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_3_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_3_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_3_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_3_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_3_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_3_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_3_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_3_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_4_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_4_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_4_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_4_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_4_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_4_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_4_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_4_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_4_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_5_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_5_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_5_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_5_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_5_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_5_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_5_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_5_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_5_south.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_6_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_6_east.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_6_east.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_6_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_6_north.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_6_north.png diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_6_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_6_south.png rename to Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_6_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_east.png new file mode 100644 index 0000000..bfccc08 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_north.png new file mode 100644 index 0000000..b77e824 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_south.png new file mode 100644 index 0000000..c2dfd7e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_east.png new file mode 100644 index 0000000..f60289a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_north.png new file mode 100644 index 0000000..829f0bd Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_south.png new file mode 100644 index 0000000..ea55a67 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_east.png new file mode 100644 index 0000000..a5cf5f3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_north.png new file mode 100644 index 0000000..36c26a8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_south.png new file mode 100644 index 0000000..aedebba Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/breasts with nipple (old)/Breasts_Thin_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_10_south.png deleted file mode 100644 index e91c735..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_10_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_5_south.png deleted file mode 100644 index 39f1084..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_7_south.png deleted file mode 100644 index f1c6107..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_7_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_8_south.png deleted file mode 100644 index 816769e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_8_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_9_south.png deleted file mode 100644 index 8df390f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old/Breasts_Female_9_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_east.png deleted file mode 100644 index c202473..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_north.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_south.png deleted file mode 100644 index 469a104..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Fat_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_east.png deleted file mode 100644 index fef9fd1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_south.png deleted file mode 100644 index 6167244..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_east.png deleted file mode 100644 index 2ce4683..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_north.png deleted file mode 100644 index ee8ac67..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_south.png deleted file mode 100644 index 0c5c387..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_east.png deleted file mode 100644 index d45bbac..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_north.png deleted file mode 100644 index 3b9ca59..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_south.png deleted file mode 100644 index 5c0ac19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_east.png deleted file mode 100644 index aa14d4d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_north.png deleted file mode 100644 index d826a19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_south.png deleted file mode 100644 index 2d0c63b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_east.png deleted file mode 100644 index bcedc53..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_north.png deleted file mode 100644 index af67aee..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_south.png deleted file mode 100644 index 965d0a0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_east.png deleted file mode 100644 index 4405559..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_north.png deleted file mode 100644 index 1585165..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_south.png deleted file mode 100644 index 77e223a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_east.png deleted file mode 100644 index 58c826b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_north.png deleted file mode 100644 index d705da8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_south.png deleted file mode 100644 index fb8351f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Female_6_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_east.png deleted file mode 100644 index bc58487..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_north.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_south.png deleted file mode 100644 index adfc3b0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Male_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_east.png deleted file mode 100644 index 944b523..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_south.png deleted file mode 100644 index 7930caf..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_east.png deleted file mode 100644 index 83c4e13..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_north.png deleted file mode 100644 index ee8ac67..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_south.png deleted file mode 100644 index 0c5c387..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_east.png deleted file mode 100644 index 3d25b31..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_north.png deleted file mode 100644 index 3b9ca59..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_south.png deleted file mode 100644 index 5c0ac19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_east.png deleted file mode 100644 index dd00ca4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_north.png deleted file mode 100644 index d826a19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_south.png deleted file mode 100644 index 2d0c63b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_east.png deleted file mode 100644 index edfe2ac..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_north.png deleted file mode 100644 index af67aee..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_south.png deleted file mode 100644 index 965d0a0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_east.png deleted file mode 100644 index 4405559..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_north.png deleted file mode 100644 index 1585165..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_south.png deleted file mode 100644 index e1d3b79..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_east.png deleted file mode 100644 index f2a7d16..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_north.png deleted file mode 100644 index b19bed2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_south.png deleted file mode 100644 index 15443a1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/old2/Breasts_Thin_6_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/olds.zip b/Textures/SizedApparel/BodyParts/Human/Breasts/olds.zip new file mode 100644 index 0000000..b51d78b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Breasts/olds.zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_east.png deleted file mode 100644 index 4571773..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_north.png deleted file mode 100644 index fdeebd9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_south.png deleted file mode 100644 index 5ab4f1f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Breasts/temp/Breasts_Female_7_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_east.png new file mode 100644 index 0000000..de3a540 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_north.png new file mode 100644 index 0000000..ffa684c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_south.png similarity index 53% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_south.png index ff95748..7d320a9 100644 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_north.png and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_east.png new file mode 100644 index 0000000..ccfa898 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_south.png new file mode 100644 index 0000000..9385e52 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_east.png new file mode 100644 index 0000000..c48760b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_north.png new file mode 100644 index 0000000..ffa684c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_south.png new file mode 100644 index 0000000..a4a8461 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_east.png new file mode 100644 index 0000000..d71017d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_south.png new file mode 100644 index 0000000..095ea69 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_east.png new file mode 100644 index 0000000..255e6c9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_south.png new file mode 100644 index 0000000..3d02ff6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_east.png new file mode 100644 index 0000000..43bb2ed Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_south.png new file mode 100644 index 0000000..61fd6dd Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_east.png new file mode 100644 index 0000000..4f25d5e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_south.png new file mode 100644 index 0000000..43f8f4a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_east.png new file mode 100644 index 0000000..600cc87 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_south.png new file mode 100644 index 0000000..8183018 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_east.png new file mode 100644 index 0000000..0cd8b3d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_south.png new file mode 100644 index 0000000..56d2c53 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_InvertedNipple_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_east.png new file mode 100644 index 0000000..5c4475c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_south.png new file mode 100644 index 0000000..829043e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_east.png new file mode 100644 index 0000000..49c279d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_south.png new file mode 100644 index 0000000..57aaf9a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_east.png new file mode 100644 index 0000000..12a536e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_south.png new file mode 100644 index 0000000..31dd236 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Female_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_east.png similarity index 64% rename from Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_east.png index 31b309f..a429b49 100644 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_north.png and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_north.png new file mode 100644 index 0000000..ffa684c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_south.png new file mode 100644 index 0000000..20dce85 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_east.png new file mode 100644 index 0000000..e43dbb2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_south.png new file mode 100644 index 0000000..cac542b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_east.png new file mode 100644 index 0000000..4ad6a19 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_south.png new file mode 100644 index 0000000..63e4eda Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_east.png new file mode 100644 index 0000000..57ecba7 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_south.png new file mode 100644 index 0000000..9c8a435 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_east.png new file mode 100644 index 0000000..dc43950 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_south.png new file mode 100644 index 0000000..01a5534 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_east.png new file mode 100644 index 0000000..848a699 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_south.png new file mode 100644 index 0000000..bb671a5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_east.png new file mode 100644 index 0000000..f464e34 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_south.png new file mode 100644 index 0000000..df1b701 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_east.png new file mode 100644 index 0000000..abd09d3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_south.png new file mode 100644 index 0000000..b95a66b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_east.png new file mode 100644 index 0000000..afb9ee0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_south.png new file mode 100644 index 0000000..30c1cf1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_east.png new file mode 100644 index 0000000..185632f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_south.png new file mode 100644 index 0000000..a40a688 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_east.png new file mode 100644 index 0000000..9a19662 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_south.png new file mode 100644 index 0000000..1f92d6c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/Breasts_Thin_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_east.png new file mode 100644 index 0000000..de3a540 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_north.png new file mode 100644 index 0000000..ffa684c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_south.png new file mode 100644 index 0000000..7d320a9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_east.png new file mode 100644 index 0000000..ca409e3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_south.png new file mode 100644 index 0000000..5213924 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_east.png new file mode 100644 index 0000000..cd2eaf6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_south.png new file mode 100644 index 0000000..b594295 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_east.png new file mode 100644 index 0000000..a75e400 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_south.png new file mode 100644 index 0000000..f4a3827 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_east.png new file mode 100644 index 0000000..de61a98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_south.png new file mode 100644 index 0000000..050eafa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_east.png new file mode 100644 index 0000000..d7d30b0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_south.png new file mode 100644 index 0000000..852245b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_east.png new file mode 100644 index 0000000..f0a943e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_south.png new file mode 100644 index 0000000..d00e8d7 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_east.png new file mode 100644 index 0000000..b19cb27 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_south.png new file mode 100644 index 0000000..69bfab9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_east.png new file mode 100644 index 0000000..26e3350 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_south.png new file mode 100644 index 0000000..3c76fda Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_east.png new file mode 100644 index 0000000..1fb2cf9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_south.png new file mode 100644 index 0000000..71abe36 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_east.png new file mode 100644 index 0000000..b581a3d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_south.png new file mode 100644 index 0000000..0e6dbab Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Female_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_east.png similarity index 64% rename from Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_east.png index 059cc4f..a429b49 100644 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_0_north.png and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_north.png new file mode 100644 index 0000000..ffa684c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_south.png new file mode 100644 index 0000000..20dce85 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_east.png new file mode 100644 index 0000000..5c64752 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_south.png new file mode 100644 index 0000000..8e0ac01 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_10_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_east.png new file mode 100644 index 0000000..5c3bfcc Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_south.png new file mode 100644 index 0000000..7905f50 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_east.png new file mode 100644 index 0000000..5d645f5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_south.png new file mode 100644 index 0000000..d6baea2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_east.png new file mode 100644 index 0000000..0e2469e Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_south.png new file mode 100644 index 0000000..b56d616 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_east.png new file mode 100644 index 0000000..1cc8ce7 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_south.png new file mode 100644 index 0000000..3e7094f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_east.png new file mode 100644 index 0000000..c9cbe3b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_south.png new file mode 100644 index 0000000..d80b833 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_east.png new file mode 100644 index 0000000..2085ac8 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_south.png new file mode 100644 index 0000000..7aefa46 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_6_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_east.png new file mode 100644 index 0000000..b9b316d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_south.png new file mode 100644 index 0000000..6e44784 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_7_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_east.png new file mode 100644 index 0000000..00fd28b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_south.png new file mode 100644 index 0000000..4b4bbfa Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_8_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_east.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_east.png new file mode 100644 index 0000000..d2902f0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_north.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_north.png new file mode 100644 index 0000000..f440c70 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_south.png b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_south.png new file mode 100644 index 0000000..95cf626 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Nipples/CustomPose/JiggleUp/Breasts_Thin_9_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Nipples/_ToModders.txt b/Textures/SizedApparel/BodyParts/Human/Nipples/_ToModders.txt new file mode 100644 index 0000000..5965eab --- /dev/null +++ b/Textures/SizedApparel/BodyParts/Human/Nipples/_ToModders.txt @@ -0,0 +1,3 @@ +You can just draw Nipples on Breasts Textures. +But in that case, you cannot color nipples. +this work is for coloring nipples \ No newline at end of file diff --git a/Textures/SizedApparel/BodyParts/Human/Penis(AllBodyType).zip b/Textures/SizedApparel/BodyParts/Human/Penis(AllBodyType).zip new file mode 100644 index 0000000..1e1b9e4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis(AllBodyType).zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_east.png new file mode 100644 index 0000000..4b2cbe6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_north.png new file mode 100644 index 0000000..528a6ef Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_south.png new file mode 100644 index 0000000..84473a5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_east.png deleted file mode 100644 index 8fa4b4e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_north.png deleted file mode 100644 index df41bbd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_south.png deleted file mode 100644 index a7b06fb..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_east.png deleted file mode 100644 index 9034ea7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_north.png deleted file mode 100644 index 99efe23..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_south.png deleted file mode 100644 index fbb573f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_east.png deleted file mode 100644 index 12911e6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_north.png deleted file mode 100644 index 3bd0221..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_south.png deleted file mode 100644 index 3f63f1e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_east.png deleted file mode 100644 index a3dfd75..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_north.png deleted file mode 100644 index bcaed51..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_south.png deleted file mode 100644 index c43de9c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_east.png deleted file mode 100644 index 40c4933..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_north.png deleted file mode 100644 index 53f167b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_south.png deleted file mode 100644 index c43de9c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_east.png deleted file mode 100644 index a3dfd75..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_north.png deleted file mode 100644 index bcaed51..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_south.png deleted file mode 100644 index c43de9c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/Penis_UndefinedOffset_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_east.png deleted file mode 100644 index 0824c25..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_north.png deleted file mode 100644 index c871a65..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_south.png deleted file mode 100644 index 89653e7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/PegDick_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_east.png deleted file mode 100644 index 51b3bb5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_north.png deleted file mode 100644 index a0938f5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_south.png deleted file mode 100644 index 651d452..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Fat_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_east.png deleted file mode 100644 index 2cac42e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_north.png deleted file mode 100644 index dd62ef5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_south.png deleted file mode 100644 index 838c235..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Hulk_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Hulk_3_south.png deleted file mode 100644 index 15cb559..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Hulk_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_east.png deleted file mode 100644 index e180466..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_north.png deleted file mode 100644 index f6e2709..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_south.png deleted file mode 100644 index fa0ab1f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Male_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_east.png deleted file mode 100644 index 5876a07..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_north.png deleted file mode 100644 index 61fb743..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_south.png deleted file mode 100644 index 85e7aaa..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Balls/old/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown.zip b/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown.zip new file mode 100644 index 0000000..0232303 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown.zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_east.png deleted file mode 100644 index 12bb438..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_north.png deleted file mode 100644 index 7d3f8ae..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_south.png deleted file mode 100644 index 42b8ba5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_east.png new file mode 100644 index 0000000..09fc8f9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_south.png new file mode 100644 index 0000000..3a5966a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_east.png new file mode 100644 index 0000000..e063656 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_south.png new file mode 100644 index 0000000..b6e811c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_east.png new file mode 100644 index 0000000..fc07c78 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_1_south.png rename to Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_south.png new file mode 100644 index 0000000..f58ebb6 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_east.png new file mode 100644 index 0000000..75b8b17 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_south.png new file mode 100644 index 0000000..fae67c5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_east.png new file mode 100644 index 0000000..41670c0 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_south.png new file mode 100644 index 0000000..e7a1b3f Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_east.png new file mode 100644 index 0000000..f7e74c5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_north.png new file mode 100644 index 0000000..a1f49f2 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_south.png new file mode 100644 index 0000000..b14ead3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_east.png deleted file mode 100644 index 3fc883b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_south.png deleted file mode 100644 index b28cbe8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_east.png deleted file mode 100644 index 287388e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_south.png deleted file mode 100644 index 9863353..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_east.png deleted file mode 100644 index 013ef54..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_south.png deleted file mode 100644 index b928031..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_east.png deleted file mode 100644 index 9ca1e0a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_south.png deleted file mode 100644 index 4f25304..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_east.png deleted file mode 100644 index 05500ad..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_south.png deleted file mode 100644 index fc064b2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_east .png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_east .png deleted file mode 100644 index 9ca1e0a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_east .png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_south .png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_south .png deleted file mode 100644 index 4f25304..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/Penis_UndefinedOffset_2_south .png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_east.png deleted file mode 100644 index e8d3904..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_north.png deleted file mode 100644 index 49eb4d6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_south.png deleted file mode 100644 index fc947e4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Fat_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_east.png deleted file mode 100644 index 0ca73cd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_north.png deleted file mode 100644 index a17615c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_south.png deleted file mode 100644 index f7c7b33..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_east.png deleted file mode 100644 index 09b2561..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_north.png deleted file mode 100644 index e346d60..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_south.png deleted file mode 100644 index f091c38..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Male_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_east.png deleted file mode 100644 index 48540b6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_north.png deleted file mode 100644 index 6b082aa..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_south.png deleted file mode 100644 index 594c682..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Horny/old/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_east.png new file mode 100644 index 0000000..3ed10f7 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_north.png new file mode 100644 index 0000000..dea9d3a Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_south.png new file mode 100644 index 0000000..a33afd4 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_east.png new file mode 100644 index 0000000..e959106 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_north.png new file mode 100644 index 0000000..177ae98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_south.png new file mode 100644 index 0000000..5389d20 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_east.png new file mode 100644 index 0000000..1a8c832 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_north.png new file mode 100644 index 0000000..a68fa5c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_south.png new file mode 100644 index 0000000..adabbde Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_east.png deleted file mode 100644 index 407a3e9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_north.png deleted file mode 100644 index 5021af2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_south.png deleted file mode 100644 index 3ec1cb9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_east.png deleted file mode 100644 index f749f00..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_north.png deleted file mode 100644 index b5e2f57..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_south.png deleted file mode 100644 index 001f104..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_east.png deleted file mode 100644 index 09c837d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_north.png deleted file mode 100644 index 459d10c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_south.png deleted file mode 100644 index 1c19ab7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_east.png deleted file mode 100644 index 41eb510..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_north.png deleted file mode 100644 index ff81492..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_south.png deleted file mode 100644 index 0926bd2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_east.png deleted file mode 100644 index 390ce5e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_north.png deleted file mode 100644 index ff81492..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_south.png deleted file mode 100644 index 1488a73..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_2_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_2_north.png deleted file mode 100644 index ff81492..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_2_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_2_south.png deleted file mode 100644 index 0926bd2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_east.png deleted file mode 100644 index 41eb510..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/Penis_UndefinedOffset_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_east.png deleted file mode 100644 index e1b47b8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_eastm.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_eastm.png deleted file mode 100644 index 8ca6c82..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_eastm.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_north.png deleted file mode 100644 index f0f6572..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_northm.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_northm.png deleted file mode 100644 index 8ca6c82..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_northm.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_south.png deleted file mode 100644 index 1e3a737..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_southm.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_southm.png deleted file mode 100644 index 8ca6c82..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/PegDick_Female_3_southm.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_east.png deleted file mode 100644 index 13e3047..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_north.png deleted file mode 100644 index 3754043..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_south.png deleted file mode 100644 index f7b211a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Fat_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_east.png deleted file mode 100644 index 044545b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_north.png deleted file mode 100644 index 38bfad2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_south.png deleted file mode 100644 index 49bf41c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_east.png deleted file mode 100644 index d6dabf6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_north.png deleted file mode 100644 index 542ad81..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_south.png deleted file mode 100644 index 1f4c748..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Male_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_east.png deleted file mode 100644 index 27072c1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_north.png deleted file mode 100644 index 7173c17..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_south.png deleted file mode 100644 index 9fc85c0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Penis/old/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair.zip b/Textures/SizedApparel/BodyParts/Human/PubicHair.zip new file mode 100644 index 0000000..91f4e36 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair.zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_east.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_east.png new file mode 100644 index 0000000..a9fc8ea Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_north.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_south.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_south.png new file mode 100644 index 0000000..2a3395c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_south.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_south.png new file mode 100644 index 0000000..4dac10c Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Default_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_east.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_east.png new file mode 100644 index 0000000..20850cf Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_north.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_south.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_south.png new file mode 100644 index 0000000..1fe462b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_south.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_south.png new file mode 100644 index 0000000..aa2b4ca Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Line_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_east.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_east.png new file mode 100644 index 0000000..8431228 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_east.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_north.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_north.png new file mode 100644 index 0000000..f11ec98 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_south.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_south.png new file mode 100644 index 0000000..f945742 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_south.png b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_south.png new file mode 100644 index 0000000..1e49438 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/PubicHair/Wild_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Thighs/ThighLeft_Female_south.png b/Textures/SizedApparel/BodyParts/Human/Thighs/ThighLeft_Female_south.png new file mode 100644 index 0000000..26d92c9 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Thighs/ThighLeft_Female_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Thighs/ThighRight_Female_south.png b/Textures/SizedApparel/BodyParts/Human/Thighs/ThighRight_Female_south.png new file mode 100644 index 0000000..66a7724 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Thighs/ThighRight_Female_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Thighs/Thighs2_Female_south.png b/Textures/SizedApparel/BodyParts/Human/Thighs/Thighs2_Female_south.png new file mode 100644 index 0000000..b85d7ec Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Thighs/Thighs2_Female_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Thighs/Thighs_Female_south.png b/Textures/SizedApparel/BodyParts/Human/Thighs/Thighs_Female_south.png new file mode 100644 index 0000000..67ddc2d Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Thighs/Thighs_Female_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina.zip b/Textures/SizedApparel/BodyParts/Human/Vagina.zip new file mode 100644 index 0000000..3172e96 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina.zip differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_south.png deleted file mode 100644 index 76aaf0f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_1_south.png deleted file mode 100644 index 7586fb3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_2_south.png deleted file mode 100644 index da5a435..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_north.png deleted file mode 100644 index d653938..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_south.png deleted file mode 100644 index 925736a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_north.png deleted file mode 100644 index ba57344..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_south.png deleted file mode 100644 index 89afd28..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_north.png deleted file mode 100644 index dec22cf..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_south.png deleted file mode 100644 index 213225f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_0_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_0_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_0_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_0_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_0_north.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_0_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_0_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_0_south.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_0_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_1_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_1_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_1_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_1_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_1_north.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_1_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_1_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_1_south.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_1_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_2_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_2_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_2_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_2_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_2_north.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_2_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_2_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_2_south.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_2_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_3_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_3_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_3_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_3_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_3_north.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_3_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_3_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_3_south.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_3_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_4_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_4_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_4_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_4_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_4_north.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_4_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_4_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_4_south.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_4_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_5_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_5_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_5_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_5_north.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_5_north.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_5_north.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_5_south.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Female_5_south.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/HornyTemp/Vagina_5_south.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_0_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_north.png new file mode 100644 index 0000000..f6bd7e3 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_south.png new file mode 100644 index 0000000..9221619 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_0_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_1_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_north.png new file mode 100644 index 0000000..706cb35 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_south.png new file mode 100644 index 0000000..746d8bf Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_1_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_2_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_north.png new file mode 100644 index 0000000..a43d4f5 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_south.png new file mode 100644 index 0000000..cd1b936 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_2_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_3_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_north.png new file mode 100644 index 0000000..f72f585 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_south.png new file mode 100644 index 0000000..2962fde Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_3_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_4_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_north.png new file mode 100644 index 0000000..2fc1c28 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_south.png new file mode 100644 index 0000000..ae193d1 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_4_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_east.png similarity index 100% rename from Textures/SizedApparel/BodyParts/Human/Vagina/Horny/Vagina_Thin_5_east.png rename to Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_east.png diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_north.png new file mode 100644 index 0000000..e688580 Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_north.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_south.png new file mode 100644 index 0000000..122c90b Binary files /dev/null and b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_5_south.png differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_north.png deleted file mode 100644 index 83218fc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_south.png deleted file mode 100644 index ffc2ab1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_north.png deleted file mode 100644 index 8fcd516..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_south.png deleted file mode 100644 index e3f6de2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_north.png deleted file mode 100644 index 70d9a91..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_south.png deleted file mode 100644 index 0be83fe..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_north.png deleted file mode 100644 index 1a98f18..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_south.png deleted file mode 100644 index 5bd6614..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_north.png deleted file mode 100644 index 108de7b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_south.png deleted file mode 100644 index 5c5f238..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_north.png deleted file mode 100644 index a91f7f7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_south.png deleted file mode 100644 index 16c1fc1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_north.png deleted file mode 100644 index ff95748..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_south.png deleted file mode 100644 index 76aaf0f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_north.png deleted file mode 100644 index 56ad1d6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_south.png deleted file mode 100644 index 7586fb3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_north.png deleted file mode 100644 index ae65a17..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_south.png deleted file mode 100644 index da5a435..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_north.png deleted file mode 100644 index d653938..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_south.png deleted file mode 100644 index 925736a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_north.png deleted file mode 100644 index ba57344..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_south.png deleted file mode 100644 index 89afd28..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_north.png deleted file mode 100644 index dec22cf..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_south.png deleted file mode 100644 index 213225f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/Vagina_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old/Vagina_Female_2_south.png deleted file mode 100644 index 9a3bf7d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old/Vagina_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_east.png deleted file mode 100644 index d70c973..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_north.png deleted file mode 100644 index beaedcc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_south.png deleted file mode 100644 index eff8813..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_east.png deleted file mode 100644 index 04ca716..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_north.png deleted file mode 100644 index 4c65ecd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_south.png deleted file mode 100644 index 456417f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_east.png deleted file mode 100644 index c52a24c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_north.png deleted file mode 100644 index c9f2f5d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_south.png deleted file mode 100644 index cd42fd4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_east.png deleted file mode 100644 index 49f5cd9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_north.png deleted file mode 100644 index ef3e52d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_south.png deleted file mode 100644 index d88635b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_east.png deleted file mode 100644 index c48ac69..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_north.png deleted file mode 100644 index 122ffec..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_south.png deleted file mode 100644 index db48c85..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/Vagina/old2/Vagina_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Human/wip.zip.old b/Textures/SizedApparel/BodyParts/Human/wip.zip.old deleted file mode 100644 index be8b3f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Human/wip.zip.old and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_1_north.png deleted file mode 100644 index 7f11401..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_north.png deleted file mode 100644 index 8a09fb5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_north.png deleted file mode 100644 index 28a5a04..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_north.png deleted file mode 100644 index 05d648d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_north.png deleted file mode 100644 index 1d676ed..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_north.png deleted file mode 100644 index 797a3b1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_north.png deleted file mode 100644 index 9a274c6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_north.png deleted file mode 100644 index 12c7d41..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_north.png deleted file mode 100644 index 07cb9fd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_north.png deleted file mode 100644 index cf5dda3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_Donut_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_east.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_north.png deleted file mode 100644 index 8d9bb3e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_south.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/Anus_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_east.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_north.png deleted file mode 100644 index 04a711b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_south.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_east.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_north.png deleted file mode 100644 index 560fd60..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_south.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_east.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_north.png deleted file mode 100644 index 2c34840..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_south.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_east.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_north.png deleted file mode 100644 index cff8abb..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_south.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_east.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_north.png deleted file mode 100644 index d86e3c2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_south.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Anus/old/Anus_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/BaseBody/Naked_OTY_BaseBody_south.png b/Textures/SizedApparel/BodyParts/Humanlike/BaseBody/Naked_OTY_BaseBody_south.png deleted file mode 100644 index c18519b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/BaseBody/Naked_OTY_BaseBody_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_east.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_north.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_south.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_east.png deleted file mode 100644 index 49ee570..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_north.png deleted file mode 100644 index b584d4d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_south.png deleted file mode 100644 index b584d4d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_east.png deleted file mode 100644 index b6f8bb2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_north.png deleted file mode 100644 index 31d758e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_south.png deleted file mode 100644 index 31d758e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_east.png deleted file mode 100644 index 42bd403..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_north.png deleted file mode 100644 index a676423..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_south.png deleted file mode 100644 index a676423..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_east.png deleted file mode 100644 index 0588df8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_north.png deleted file mode 100644 index 273e76d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_south.png deleted file mode 100644 index 273e76d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Fat_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_east.png deleted file mode 100644 index 78320ae..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_north.png deleted file mode 100644 index 0df65d8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_south.png deleted file mode 100644 index 0df65d8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_east.png deleted file mode 100644 index 6a79119..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_north.png deleted file mode 100644 index 283cdae..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_south.png deleted file mode 100644 index 283cdae..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_east.png deleted file mode 100644 index d787143..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_north.png deleted file mode 100644 index 800bfac..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_south.png deleted file mode 100644 index 800bfac..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_east.png deleted file mode 100644 index 65b4183..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_north.png deleted file mode 100644 index f8093af..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_south.png deleted file mode 100644 index f8093af..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_east.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_north.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_south.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_east.png deleted file mode 100644 index bf051fc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_north.png deleted file mode 100644 index f0cf4e1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_south.png deleted file mode 100644 index f0cf4e1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_east.png deleted file mode 100644 index fb16fec..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_north.png deleted file mode 100644 index c053929..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_south.png deleted file mode 100644 index c053929..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_east.png deleted file mode 100644 index 475ecd3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_north.png deleted file mode 100644 index c5f1e3b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_south.png deleted file mode 100644 index c5f1e3b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_east.png deleted file mode 100644 index 802b42d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_north.png deleted file mode 100644 index 3239b4d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_south.png deleted file mode 100644 index 3239b4d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Hulk_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_east.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_north.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_south.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_east.png deleted file mode 100644 index 38219aa..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_north.png deleted file mode 100644 index 99cd2b3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_south.png deleted file mode 100644 index 99cd2b3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_east.png deleted file mode 100644 index 9475884..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_north.png deleted file mode 100644 index b059c7f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_south.png deleted file mode 100644 index b059c7f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_east.png deleted file mode 100644 index 6b1fe60..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_north.png deleted file mode 100644 index 2ef1dc1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_south.png deleted file mode 100644 index 2ef1dc1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_east.png deleted file mode 100644 index 934e029..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_north.png deleted file mode 100644 index dfbd445..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_south.png deleted file mode 100644 index dfbd445..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Male_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_east.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_north.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_south.png deleted file mode 100644 index 6775361..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_east.png deleted file mode 100644 index c7eeae3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_north.png deleted file mode 100644 index 50aa3a5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_south.png deleted file mode 100644 index 50aa3a5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_east.png deleted file mode 100644 index 9ee6311..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_north.png deleted file mode 100644 index b5daff1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_south.png deleted file mode 100644 index b5daff1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_east.png deleted file mode 100644 index 76e6f9d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_north.png deleted file mode 100644 index e2c715d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_south.png deleted file mode 100644 index e2c715d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_east.png deleted file mode 100644 index 2cf96fd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_north.png deleted file mode 100644 index ac41d90..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_south.png deleted file mode 100644 index ac41d90..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Belly/BellyBulge_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_2_south.png deleted file mode 100644 index 2b2a51a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_east.png deleted file mode 100644 index e3e8097..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_north.png deleted file mode 100644 index f2bc10d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_south.png deleted file mode 100644 index e1f8ac3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Female_7_InvertedNipple_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_east.png deleted file mode 100644 index 4a741bb..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_north.png deleted file mode 100644 index 13bebd7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_south.png deleted file mode 100644 index d656f74..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/Breasts_Thin_7_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/CustomPose/JiggleCenter/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/CustomPose/JiggleCenter/Breasts_Female_3_south.png deleted file mode 100644 index 1142c46..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/CustomPose/JiggleCenter/Breasts_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_1_north.png deleted file mode 100644 index 4801d8a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_5_south.png deleted file mode 100644 index da7cde6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_east.png deleted file mode 100644 index 4571773..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_north.png deleted file mode 100644 index fdeebd9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_south.png deleted file mode 100644 index 5ab4f1f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/backup/Breasts_Female_7_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_10_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_10_south.png deleted file mode 100644 index e91c735..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_10_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_5_south.png deleted file mode 100644 index 39f1084..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_7_south.png deleted file mode 100644 index f1c6107..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_7_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_8_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_8_south.png deleted file mode 100644 index 816769e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_8_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_9_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_9_south.png deleted file mode 100644 index 8df390f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old/Breasts_Female_9_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_east.png deleted file mode 100644 index c202473..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_north.png deleted file mode 100644 index 2c52289..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_south.png deleted file mode 100644 index 469a104..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Fat_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_east.png deleted file mode 100644 index fef9fd1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_south.png deleted file mode 100644 index 6167244..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_east.png deleted file mode 100644 index 2ce4683..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_north.png deleted file mode 100644 index ee8ac67..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_south.png deleted file mode 100644 index 0c5c387..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_east.png deleted file mode 100644 index d45bbac..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_north.png deleted file mode 100644 index 3b9ca59..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_south.png deleted file mode 100644 index 5c0ac19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_east.png deleted file mode 100644 index aa14d4d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_north.png deleted file mode 100644 index d826a19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_south.png deleted file mode 100644 index 2d0c63b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_east.png deleted file mode 100644 index bcedc53..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_north.png deleted file mode 100644 index af67aee..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_south.png deleted file mode 100644 index 965d0a0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_east.png deleted file mode 100644 index 4405559..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_north.png deleted file mode 100644 index 1585165..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_south.png deleted file mode 100644 index 77e223a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_east.png deleted file mode 100644 index 58c826b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_north.png deleted file mode 100644 index d705da8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_south.png deleted file mode 100644 index fb8351f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Female_6_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_east.png deleted file mode 100644 index bc58487..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_north.png deleted file mode 100644 index b97b635..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_south.png deleted file mode 100644 index adfc3b0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Male_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_east.png deleted file mode 100644 index 944b523..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_south.png deleted file mode 100644 index 7930caf..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_east.png deleted file mode 100644 index 83c4e13..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_north.png deleted file mode 100644 index ee8ac67..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_south.png deleted file mode 100644 index 0c5c387..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_east.png deleted file mode 100644 index 3d25b31..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_north.png deleted file mode 100644 index 3b9ca59..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_south.png deleted file mode 100644 index 5c0ac19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_east.png deleted file mode 100644 index dd00ca4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_north.png deleted file mode 100644 index d826a19..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_south.png deleted file mode 100644 index 2d0c63b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_east.png deleted file mode 100644 index edfe2ac..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_north.png deleted file mode 100644 index af67aee..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_south.png deleted file mode 100644 index 965d0a0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_east.png deleted file mode 100644 index 4405559..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_north.png deleted file mode 100644 index 1585165..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_south.png deleted file mode 100644 index e1d3b79..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_east.png deleted file mode 100644 index f2a7d16..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_north.png deleted file mode 100644 index b19bed2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_south.png deleted file mode 100644 index 15443a1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/old2/Breasts_Thin_6_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_east.png deleted file mode 100644 index 4571773..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_north.png deleted file mode 100644 index fdeebd9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_south.png deleted file mode 100644 index 5ab4f1f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Breasts/temp/Breasts_Female_7_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Hips/Hips_OTY_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Hips/Hips_OTY_2_south.png deleted file mode 100644 index 5ea7550..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Hips/Hips_OTY_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_east.png deleted file mode 100644 index 8fa4b4e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_north.png deleted file mode 100644 index df41bbd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_south.png deleted file mode 100644 index a7b06fb..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_east.png deleted file mode 100644 index 76a409a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_north.png deleted file mode 100644 index 155b750..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_south.png deleted file mode 100644 index 5a24645..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_east.png deleted file mode 100644 index eae0e4e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_north.png deleted file mode 100644 index 57aac47..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_south.png deleted file mode 100644 index edf53bc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_east.png deleted file mode 100644 index 9034ea7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_north.png deleted file mode 100644 index 99efe23..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_south.png deleted file mode 100644 index fbb573f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_east.png deleted file mode 100644 index b46cad5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_north.png deleted file mode 100644 index 13080f6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_south.png deleted file mode 100644 index ecfd8a7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_east.png deleted file mode 100644 index 788e70c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_north.png deleted file mode 100644 index 6b2a240..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_south.png deleted file mode 100644 index fe9fe39..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_east.png deleted file mode 100644 index ee66cfb..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_north.png deleted file mode 100644 index 0badad7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_south.png deleted file mode 100644 index 71a00c0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_east.png deleted file mode 100644 index 12911e6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_north.png deleted file mode 100644 index 3bd0221..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_south.png deleted file mode 100644 index 3f63f1e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_east.png deleted file mode 100644 index a3dfd75..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_north.png deleted file mode 100644 index bcaed51..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_south.png deleted file mode 100644 index c43de9c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_east.png deleted file mode 100644 index 9f39400..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_north.png deleted file mode 100644 index b4ac34f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_south.png deleted file mode 100644 index ddbb564..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_east.png deleted file mode 100644 index 7943b67..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_north.png deleted file mode 100644 index e0fb1b1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_south.png deleted file mode 100644 index 9ca0736..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_east.png deleted file mode 100644 index 40c4933..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_north.png deleted file mode 100644 index 53f167b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_south.png deleted file mode 100644 index c43de9c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_east.png deleted file mode 100644 index 944eea9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_north.png deleted file mode 100644 index 4259b05..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_south.png deleted file mode 100644 index fba7c0b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_east.png deleted file mode 100644 index 3306f67..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_north.png deleted file mode 100644 index 728d204..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_south.png deleted file mode 100644 index 2126f10..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_east.png deleted file mode 100644 index 922dd85..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_north.png deleted file mode 100644 index 51d60a9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_south.png deleted file mode 100644 index d7264e4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_east.png deleted file mode 100644 index a3dfd75..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_north.png deleted file mode 100644 index bcaed51..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_south.png deleted file mode 100644 index c43de9c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/Penis_UndefinedOffset_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_east.png deleted file mode 100644 index 0824c25..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_north.png deleted file mode 100644 index c871a65..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_south.png deleted file mode 100644 index 89653e7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/PegDick_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_east.png deleted file mode 100644 index 51b3bb5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_north.png deleted file mode 100644 index a0938f5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_south.png deleted file mode 100644 index 651d452..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Fat_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_east.png deleted file mode 100644 index 2cac42e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_north.png deleted file mode 100644 index dd62ef5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_south.png deleted file mode 100644 index 838c235..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Hulk_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Hulk_3_south.png deleted file mode 100644 index 15cb559..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Hulk_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_east.png deleted file mode 100644 index e180466..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_north.png deleted file mode 100644 index f6e2709..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_south.png deleted file mode 100644 index fa0ab1f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Male_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_east.png deleted file mode 100644 index 5876a07..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_north.png deleted file mode 100644 index 61fb743..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_south.png deleted file mode 100644 index 85e7aaa..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Balls/old/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_east.png deleted file mode 100644 index 12bb438..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_north.png deleted file mode 100644 index 7d3f8ae..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_south.png deleted file mode 100644 index 42b8ba5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/CustomPose/PenisDown/Horny/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_east.png deleted file mode 100644 index 3fc883b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_south.png deleted file mode 100644 index b28cbe8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_east.png deleted file mode 100644 index 4e2f9d1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_south.png deleted file mode 100644 index d9fdf2e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_east.png deleted file mode 100644 index 24e2989..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_south.png deleted file mode 100644 index c43c441..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_east.png deleted file mode 100644 index 287388e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_south.png deleted file mode 100644 index 9863353..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_east.png deleted file mode 100644 index b37641e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_south.png deleted file mode 100644 index fb31605..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_east.png deleted file mode 100644 index 16edc84..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_south.png deleted file mode 100644 index b8b7f85..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_east.png deleted file mode 100644 index 3b05456..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_south.png deleted file mode 100644 index 2e568ce..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_east.png deleted file mode 100644 index 013ef54..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_south.png deleted file mode 100644 index b928031..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_east.png deleted file mode 100644 index 9ca1e0a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_south.png deleted file mode 100644 index 4f25304..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_east.png deleted file mode 100644 index a8232b8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_south.png deleted file mode 100644 index 519fb0c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_east.png deleted file mode 100644 index e9a6cbd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_south.png deleted file mode 100644 index 82ac4ff..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_east.png deleted file mode 100644 index 05500ad..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_south.png deleted file mode 100644 index f2cb4c9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_east.png deleted file mode 100644 index 503fdf4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_south.png deleted file mode 100644 index 9e9d988..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_east.png deleted file mode 100644 index 99de71a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_south.png deleted file mode 100644 index 2df13f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_east.png deleted file mode 100644 index 0fd18af..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_south.png deleted file mode 100644 index 82f2b8a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_east .png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_east .png deleted file mode 100644 index 9ca1e0a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_east .png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_north.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_south .png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_south .png deleted file mode 100644 index 4f25304..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/Penis_UndefinedOffset_2_south .png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_east.png deleted file mode 100644 index e8d3904..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_north.png deleted file mode 100644 index 49eb4d6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_south.png deleted file mode 100644 index fc947e4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Fat_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_east.png deleted file mode 100644 index 0ca73cd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_north.png deleted file mode 100644 index a17615c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_south.png deleted file mode 100644 index f7c7b33..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_east.png deleted file mode 100644 index 09b2561..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_north.png deleted file mode 100644 index e346d60..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_south.png deleted file mode 100644 index f091c38..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Male_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_east.png deleted file mode 100644 index 48540b6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_north.png deleted file mode 100644 index 6b082aa..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_south.png deleted file mode 100644 index 594c682..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Horny/old/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_east.png deleted file mode 100644 index 407a3e9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_north.png deleted file mode 100644 index 5021af2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_south.png deleted file mode 100644 index 3ec1cb9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_east.png deleted file mode 100644 index cbc45e6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_north.png deleted file mode 100644 index f663e97..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_south.png deleted file mode 100644 index fa1e8dc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_east.png deleted file mode 100644 index f906c9f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_north.png deleted file mode 100644 index 08e732d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_south.png deleted file mode 100644 index bbb7c8b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_east.png deleted file mode 100644 index f749f00..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_north.png deleted file mode 100644 index b5e2f57..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_south.png deleted file mode 100644 index 001f104..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_east.png deleted file mode 100644 index 93ebdab..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_north.png deleted file mode 100644 index b7232b0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_south.png deleted file mode 100644 index 101cdf5..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_east.png deleted file mode 100644 index be86346..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_north.png deleted file mode 100644 index ad49440..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_south.png deleted file mode 100644 index 72dc3df..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_east.png deleted file mode 100644 index 3127910..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_north.png deleted file mode 100644 index 9bb2fb0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_south.png deleted file mode 100644 index 38b844f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_east.png deleted file mode 100644 index 09c837d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_north.png deleted file mode 100644 index 459d10c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_south.png deleted file mode 100644 index 1c19ab7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_east.png deleted file mode 100644 index 41eb510..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_north.png deleted file mode 100644 index ff81492..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_south.png deleted file mode 100644 index 0926bd2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_east.png deleted file mode 100644 index 6aefbfe..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_north.png deleted file mode 100644 index 53d8128..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_south.png deleted file mode 100644 index 3c4e1e2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_east.png deleted file mode 100644 index 8f69c1c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_north.png deleted file mode 100644 index 1e4f941..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_south.png deleted file mode 100644 index 6022043..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_east.png deleted file mode 100644 index 390ce5e..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_north.png deleted file mode 100644 index ff81492..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_south.png deleted file mode 100644 index 1488a73..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_east.png deleted file mode 100644 index fea17ab..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_north.png deleted file mode 100644 index 4e126e7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_south.png deleted file mode 100644 index c3a182a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_east.png deleted file mode 100644 index be5d7a0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_north.png deleted file mode 100644 index e533fe3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_south.png deleted file mode 100644 index 0acb994..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_east.png deleted file mode 100644 index 789b6cc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_north.png deleted file mode 100644 index 08e6ad1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_south.png deleted file mode 100644 index c048631..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_2_north.png deleted file mode 100644 index ff81492..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_2_south.png deleted file mode 100644 index 0926bd2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_east.png deleted file mode 100644 index 41eb510..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/Penis_UndefinedOffset_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_east.png deleted file mode 100644 index e1b47b8..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_eastm.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_eastm.png deleted file mode 100644 index 8ca6c82..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_eastm.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_north.png deleted file mode 100644 index f0f6572..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_northm.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_northm.png deleted file mode 100644 index 8ca6c82..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_northm.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_south.png deleted file mode 100644 index 1e3a737..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_southm.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_southm.png deleted file mode 100644 index 8ca6c82..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/PegDick_Female_3_southm.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_east.png deleted file mode 100644 index 13e3047..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_north.png deleted file mode 100644 index 3754043..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_south.png deleted file mode 100644 index f7b211a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Fat_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_east.png deleted file mode 100644 index 044545b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_north.png deleted file mode 100644 index 38bfad2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_south.png deleted file mode 100644 index 49bf41c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_east.png deleted file mode 100644 index d6dabf6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_north.png deleted file mode 100644 index 542ad81..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_south.png deleted file mode 100644 index 1f4c748..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Male_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_east.png deleted file mode 100644 index 27072c1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_north.png deleted file mode 100644 index 7173c17..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_south.png deleted file mode 100644 index 9fc85c0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Penis/old/Penis_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/PubicHairs/Clean.png b/Textures/SizedApparel/BodyParts/Humanlike/PubicHairs/Clean.png deleted file mode 100644 index 4012944..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/PubicHairs/Clean.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Thighs/Thigh_OTY_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Thighs/Thigh_OTY_2_south.png deleted file mode 100644 index b85c9b0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Thighs/Thigh_OTY_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_north.png deleted file mode 100644 index 83218fc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_south.png deleted file mode 100644 index ffc2ab1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_north.png deleted file mode 100644 index 8fcd516..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_south.png deleted file mode 100644 index e3f6de2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_north.png deleted file mode 100644 index 70d9a91..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_south.png deleted file mode 100644 index 0be83fe..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_north.png deleted file mode 100644 index 1a98f18..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_south.png deleted file mode 100644 index 5bd6614..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_north.png deleted file mode 100644 index 108de7b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_south.png deleted file mode 100644 index 5c5f238..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_north.png deleted file mode 100644 index a91f7f7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_south.png deleted file mode 100644 index 16c1fc1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_north.png deleted file mode 100644 index ff95748..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_south.png deleted file mode 100644 index 76aaf0f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_1_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_1_south.png deleted file mode 100644 index 7586fb3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_2_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_2_south.png deleted file mode 100644 index da5a435..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_north.png deleted file mode 100644 index d653938..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_south.png deleted file mode 100644 index 925736a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_north.png deleted file mode 100644 index ba57344..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_south.png deleted file mode 100644 index 89afd28..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_north.png deleted file mode 100644 index dec22cf..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_south.png deleted file mode 100644 index 213225f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Horny/Vagina_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_north.png deleted file mode 100644 index 83218fc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_south.png deleted file mode 100644 index ffc2ab1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_north.png deleted file mode 100644 index 8fcd516..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_south.png deleted file mode 100644 index e3f6de2..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_north.png deleted file mode 100644 index 70d9a91..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_south.png deleted file mode 100644 index 0be83fe..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_north.png deleted file mode 100644 index 1a98f18..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_south.png deleted file mode 100644 index 5bd6614..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_north.png deleted file mode 100644 index 108de7b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_south.png deleted file mode 100644 index 5c5f238..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_north.png deleted file mode 100644 index a91f7f7..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_south.png deleted file mode 100644 index 16c1fc1..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Female_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_north.png deleted file mode 100644 index ff95748..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_south.png deleted file mode 100644 index 76aaf0f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_0_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_north.png deleted file mode 100644 index 56ad1d6..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_south.png deleted file mode 100644 index 7586fb3..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_1_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_north.png deleted file mode 100644 index ae65a17..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_south.png deleted file mode 100644 index da5a435..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_north.png deleted file mode 100644 index d653938..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_south.png deleted file mode 100644 index 925736a..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_3_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_north.png deleted file mode 100644 index ba57344..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_south.png deleted file mode 100644 index 89afd28..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_4_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_east.png deleted file mode 100644 index 1f816f0..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_north.png deleted file mode 100644 index dec22cf..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_south.png deleted file mode 100644 index 213225f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/Vagina_Thin_5_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old/Vagina_Female_2_south.png deleted file mode 100644 index 9a3bf7d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old/Vagina_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_east.png deleted file mode 100644 index d70c973..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_north.png deleted file mode 100644 index beaedcc..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_south.png deleted file mode 100644 index eff8813..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Fat_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_east.png deleted file mode 100644 index 04ca716..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_north.png deleted file mode 100644 index 4c65ecd..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_south.png deleted file mode 100644 index 456417f..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Female_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_east.png deleted file mode 100644 index c52a24c..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_north.png deleted file mode 100644 index c9f2f5d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_south.png deleted file mode 100644 index cd42fd4..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Hulk_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_east.png deleted file mode 100644 index 49f5cd9..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_north.png deleted file mode 100644 index ef3e52d..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_south.png deleted file mode 100644 index d88635b..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Male_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_east.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_east.png deleted file mode 100644 index c48ac69..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_east.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_north.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_north.png deleted file mode 100644 index 122ffec..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_north.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_south.png b/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_south.png deleted file mode 100644 index db48c85..0000000 Binary files a/Textures/SizedApparel/BodyParts/Humanlike/Vagina/old2/Vagina_Thin_2_south.png and /dev/null differ diff --git a/Textures/SizedApparel/BodyParts/_RacePreset/Breasts/About Breasts Size.txt b/Textures/SizedApparel/BodyParts/_RacePreset/Breasts/About Breasts Size.txt new file mode 100644 index 0000000..179a43b --- /dev/null +++ b/Textures/SizedApparel/BodyParts/_RacePreset/Breasts/About Breasts Size.txt @@ -0,0 +1,2 @@ +Breasts_3 is Average size of RJW. +So, It's better to match breasts size to default female breasts size of original body texture. \ No newline at end of file diff --git a/Textures/SizedApparel/BodyParts/_RacePreset/Nipples/_ToModders.txt b/Textures/SizedApparel/BodyParts/_RacePreset/Nipples/_ToModders.txt new file mode 100644 index 0000000..5965eab --- /dev/null +++ b/Textures/SizedApparel/BodyParts/_RacePreset/Nipples/_ToModders.txt @@ -0,0 +1,3 @@ +You can just draw Nipples on Breasts Textures. +But in that case, you cannot color nipples. +this work is for coloring nipples \ No newline at end of file diff --git a/Textures/SizedApparel/Masks/Black.png b/Textures/SizedApparel/Masks/Black.png new file mode 100644 index 0000000..4112087 Binary files /dev/null and b/Textures/SizedApparel/Masks/Black.png differ diff --git a/Textures/SizedApparel/Masks/Black_south.png b/Textures/SizedApparel/Masks/Black_south.png new file mode 100644 index 0000000..4112087 Binary files /dev/null and b/Textures/SizedApparel/Masks/Black_south.png differ diff --git a/Textures/SizedApparel/Masks/Blue.png b/Textures/SizedApparel/Masks/Blue.png new file mode 100644 index 0000000..80075bd Binary files /dev/null and b/Textures/SizedApparel/Masks/Blue.png differ diff --git a/Textures/SizedApparel/Masks/Blue_south.png b/Textures/SizedApparel/Masks/Blue_south.png new file mode 100644 index 0000000..80075bd Binary files /dev/null and b/Textures/SizedApparel/Masks/Blue_south.png differ diff --git a/Textures/SizedApparel/Masks/Green.png b/Textures/SizedApparel/Masks/Green.png new file mode 100644 index 0000000..4597ba7 Binary files /dev/null and b/Textures/SizedApparel/Masks/Green.png differ diff --git a/Textures/SizedApparel/Masks/Green_south.png b/Textures/SizedApparel/Masks/Green_south.png new file mode 100644 index 0000000..4597ba7 Binary files /dev/null and b/Textures/SizedApparel/Masks/Green_south.png differ diff --git a/Textures/SizedApparel/Masks/Red.png b/Textures/SizedApparel/Masks/Red.png new file mode 100644 index 0000000..36c0f84 Binary files /dev/null and b/Textures/SizedApparel/Masks/Red.png differ diff --git a/Textures/SizedApparel/Masks/Red_south.png b/Textures/SizedApparel/Masks/Red_south.png new file mode 100644 index 0000000..36c0f84 Binary files /dev/null and b/Textures/SizedApparel/Masks/Red_south.png differ diff --git a/Textures/SizedApparel/Masks/White.png b/Textures/SizedApparel/Masks/White.png new file mode 100644 index 0000000..dcab2ac Binary files /dev/null and b/Textures/SizedApparel/Masks/White.png differ diff --git a/Textures/SizedApparel/Masks/White_south.png b/Textures/SizedApparel/Masks/White_south.png new file mode 100644 index 0000000..dcab2ac Binary files /dev/null and b/Textures/SizedApparel/Masks/White_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_east.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_east.png new file mode 100644 index 0000000..8cdf8a1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_north.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_north.png new file mode 100644 index 0000000..7daad1b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_south.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_south.png new file mode 100644 index 0000000..9fd0ab7 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_3_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_east.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_east.png new file mode 100644 index 0000000..9757639 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_north.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_north.png new file mode 100644 index 0000000..dea0144 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_south.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_south.png new file mode 100644 index 0000000..e457935 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_5_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_east.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_east.png new file mode 100644 index 0000000..120b2da Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_north.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_north.png new file mode 100644 index 0000000..39dd3ad Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_south.png b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_south.png new file mode 100644 index 0000000..d736170 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Burka/Burka_Female_7_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor(old_named).zip b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor(old_named).zip deleted file mode 100644 index 68a6ce2..0000000 Binary files a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor(old_named).zip and /dev/null differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/source/CataphractArmor_Female_east-CAB-a4b7c1832c503b1d92583c6c45f5bec5-14263921838055924587.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_3_east.png similarity index 100% rename from Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/source/CataphractArmor_Female_east-CAB-a4b7c1832c503b1d92583c6c45f5bec5-14263921838055924587.png rename to Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_3_east.png diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/source/CataphractArmor_Female_north-CAB-a4b7c1832c503b1d92583c6c45f5bec5-16419057335381867331.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_3_north.png similarity index 100% rename from Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/source/CataphractArmor_Female_north-CAB-a4b7c1832c503b1d92583c6c45f5bec5-16419057335381867331.png rename to Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_3_north.png diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/source/CataphractArmor_Female_south-CAB-a4b7c1832c503b1d92583c6c45f5bec5-1814284374271471540.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_3_south.png similarity index 100% rename from Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/source/CataphractArmor_Female_south-CAB-a4b7c1832c503b1d92583c6c45f5bec5-1814284374271471540.png rename to Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_3_south.png diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_east.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_east.png new file mode 100644 index 0000000..def8fb2 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_north.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_north.png new file mode 100644 index 0000000..8378435 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_south.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_south.png new file mode 100644 index 0000000..83b9c06 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_5_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_east.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_east.png new file mode 100644 index 0000000..7eae088 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_north.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_north.png new file mode 100644 index 0000000..a9a2f4b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_south.png b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_south.png new file mode 100644 index 0000000..663cecd Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/CataphractArmor/CataphractArmor_Female_7_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Human To _Human(don't run).py b/Textures/Things/Pawn/Humanlike/Apparel/Human To _Human(don't run).py new file mode 100644 index 0000000..ea8a28f --- /dev/null +++ b/Textures/Things/Pawn/Humanlike/Apparel/Human To _Human(don't run).py @@ -0,0 +1,6 @@ +import os + +for filename in os.listdir("."): + new_filename = filename.replace("Human", "_Human") + + os.rename(filename, new_filename) diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_east.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_east.png new file mode 100644 index 0000000..882eaff Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_north.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_north.png new file mode 100644 index 0000000..d10db42 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_south.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_south.png new file mode 100644 index 0000000..98f4b3a Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_0_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_east.png new file mode 100644 index 0000000..b3b8f4d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_north.png new file mode 100644 index 0000000..03f6c08 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_south.png new file mode 100644 index 0000000..548b47b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Fat_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_east.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_east.png new file mode 100644 index 0000000..3bbe128 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_north.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_north.png new file mode 100644 index 0000000..502e774 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_south.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_south.png new file mode 100644 index 0000000..0bdcc44 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_0_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_east.png new file mode 100644 index 0000000..c7beaee Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_north.png new file mode 100644 index 0000000..605900d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_south.png new file mode 100644 index 0000000..e5c6d12 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/Parka/Parka_Hulk_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_east.png new file mode 100644 index 0000000..f3eeb99 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_north.png new file mode 100644 index 0000000..7f6bde3 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_south.png new file mode 100644 index 0000000..af1f205 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_3_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_east.png new file mode 100644 index 0000000..fcbfa7c Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_north.png new file mode 100644 index 0000000..fa26627 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_south.png new file mode 100644 index 0000000..e0e8aa1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_5_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_east.png new file mode 100644 index 0000000..72ea141 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_north.png new file mode 100644 index 0000000..4505bbc Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_south.png new file mode 100644 index 0000000..b078d7b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Female_7_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_east.png new file mode 100644 index 0000000..ee90289 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_north.png new file mode 100644 index 0000000..98f0187 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_south.png new file mode 100644 index 0000000..bbf89c9 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ReconArmor/ReconArmor_Thin_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/SetAsHumanOnly(don't run).py b/Textures/Things/Pawn/Humanlike/Apparel/SetAsHumanOnly(don't run).py new file mode 100644 index 0000000..c93252c --- /dev/null +++ b/Textures/Things/Pawn/Humanlike/Apparel/SetAsHumanOnly(don't run).py @@ -0,0 +1,9 @@ +import os + +for filename in os.listdir("."): + new_filename = filename.replace("_Female", "Human_Female") + new_filename = new_filename.replace("_Thin", "Human_Thin") + new_filename = new_filename.replace("_Male", "Human_Male") + new_filename = new_filename.replace("_Fat", "Human_Fat") + new_filename = new_filename.replace("_Hulk", "Human_Hulk") + os.rename(filename, new_filename) diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_east.png new file mode 100644 index 0000000..983c0e1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_north.png new file mode 100644 index 0000000..cb88859 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_south.png new file mode 100644 index 0000000..6f8e78f Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Fat_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_east.png new file mode 100644 index 0000000..441e978 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_north.png new file mode 100644 index 0000000..74202fe Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_south.png new file mode 100644 index 0000000..6f59a78 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_0_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_east.png new file mode 100644 index 0000000..11f977e Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_north.png new file mode 100644 index 0000000..554d36a Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_south.png new file mode 100644 index 0000000..80f6dde Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/ShirtBasic_Hulk_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/wip/ShirtBasic_Female_8_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/wip/ShirtBasic_Female_8_south.png new file mode 100644 index 0000000..b168fe7 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtBasic/wip/ShirtBasic_Female_8_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_east.png new file mode 100644 index 0000000..9a4be51 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_north.png new file mode 100644 index 0000000..277f57a Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_south.png new file mode 100644 index 0000000..077a5b1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Fat_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_east.png new file mode 100644 index 0000000..947fb10 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_north.png new file mode 100644 index 0000000..a6afc4d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_south.png new file mode 100644 index 0000000..bd6dd92 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/ShirtButton/ShirtButton_Hulk_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_east.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_east.png new file mode 100644 index 0000000..4c9cfb1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_north.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_north.png new file mode 100644 index 0000000..d107bc5 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_south.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_south.png new file mode 100644 index 0000000..7b6f2da Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_0_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_east.png new file mode 100644 index 0000000..4c9cfb1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_north.png new file mode 100644 index 0000000..d107bc5 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_south.png new file mode 100644 index 0000000..a8f38c0 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Fat_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_east.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_east.png new file mode 100644 index 0000000..0c478fe Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_north.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_north.png new file mode 100644 index 0000000..e4e7302 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_south.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_south.png new file mode 100644 index 0000000..d5b374e Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_0_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_east.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_east.png new file mode 100644 index 0000000..0c478fe Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_north.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_north.png new file mode 100644 index 0000000..e4e7302 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_south.png b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_south.png new file mode 100644 index 0000000..bdd4f95 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Apparel/TribalA/TribalA_Hulk_2_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore.png new file mode 100644 index 0000000..b63b859 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_east.png new file mode 100644 index 0000000..d13cc14 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_north.png new file mode 100644 index 0000000..219aa9d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_south.png new file mode 100644 index 0000000..bde197f Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Fat_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_east.png new file mode 100644 index 0000000..0d1e548 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_north.png new file mode 100644 index 0000000..e0b81f6 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_south.png new file mode 100644 index 0000000..0696689 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Female_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_east.png new file mode 100644 index 0000000..aebebb6 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_north.png new file mode 100644 index 0000000..b0af3ad Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_south.png new file mode 100644 index 0000000..b6e3da2 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Hulk_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_east.png new file mode 100644 index 0000000..c3dd82d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_north.png new file mode 100644 index 0000000..7e15d1a Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_south.png new file mode 100644 index 0000000..a3a76dd Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Male_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_east.png new file mode 100644 index 0000000..91ce205 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_north.png new file mode 100644 index 0000000..0e2afbd Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_south.png new file mode 100644 index 0000000..9d11514 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/FlakJacketSpikecore/source/FlakJacketSpikecore_Thin_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_east.png new file mode 100644 index 0000000..3dbe996 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_north.png new file mode 100644 index 0000000..2fb1275 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_south.png new file mode 100644 index 0000000..0682150 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_3_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_east.png new file mode 100644 index 0000000..21ef533 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_north.png new file mode 100644 index 0000000..16979ce Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_south.png new file mode 100644 index 0000000..4fa8798 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/JacketSpikecore_Female_5_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore.png new file mode 100644 index 0000000..da187aa Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_east.png new file mode 100644 index 0000000..c0a5242 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_north.png new file mode 100644 index 0000000..9dd386e Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_south.png new file mode 100644 index 0000000..4e10157 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Fat_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_east.png new file mode 100644 index 0000000..3dbe996 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_north.png new file mode 100644 index 0000000..2fb1275 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_south.png new file mode 100644 index 0000000..eed499a Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Female_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_east.png new file mode 100644 index 0000000..8465d3b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_north.png new file mode 100644 index 0000000..d1b70e9 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_south.png new file mode 100644 index 0000000..981496c Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Hulk_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_east.png new file mode 100644 index 0000000..99c5124 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_north.png new file mode 100644 index 0000000..c5caf30 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_south.png new file mode 100644 index 0000000..6deca90 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Male_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_east.png new file mode 100644 index 0000000..9618498 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_north.png new file mode 100644 index 0000000..e0f244b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_south.png new file mode 100644 index 0000000..4e57143 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/JacketSpikecore/source/JacketSpikecore_Thin_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore.png new file mode 100644 index 0000000..e3c02d9 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_east.png new file mode 100644 index 0000000..77c8472 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_north.png new file mode 100644 index 0000000..c52c5c3 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_south.png new file mode 100644 index 0000000..9449d83 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Fat_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_east.png new file mode 100644 index 0000000..e32b03f Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_north.png new file mode 100644 index 0000000..0c916dc Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_south.png new file mode 100644 index 0000000..f985b6b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Female_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_east.png new file mode 100644 index 0000000..b38efc1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_north.png new file mode 100644 index 0000000..363dd5b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_south.png new file mode 100644 index 0000000..95d3f63 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Hulk_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_east.png new file mode 100644 index 0000000..366c0e6 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_north.png new file mode 100644 index 0000000..6a3d6a1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_south.png new file mode 100644 index 0000000..b652ac1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Male_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_east.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_east.png new file mode 100644 index 0000000..ab8942a Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_north.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_north.png new file mode 100644 index 0000000..ce906b4 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_south.png b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_south.png new file mode 100644 index 0000000..ff9af5d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/ApparelStyles/ParkaSpikecore/source/ParkaSpikecore_Thin_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies.zip b/Textures/Things/Pawn/Humanlike/Bodies.zip new file mode 100644 index 0000000..5787225 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies.zip differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_east.png new file mode 100644 index 0000000..f3f5e4c Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_north.png new file mode 100644 index 0000000..64589c1 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_south.png new file mode 100644 index 0000000..46ab0c4 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Female_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_east.png new file mode 100644 index 0000000..ea5b4c9 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_north.png new file mode 100644 index 0000000..c1399e8 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_south.png new file mode 100644 index 0000000..1281744 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/128/Naked_Thin_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_east.png new file mode 100644 index 0000000..c40352c Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_north.png new file mode 100644 index 0000000..d11bb6c Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_south.png new file mode 100644 index 0000000..2109d5f Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Female_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_east.png new file mode 100644 index 0000000..a614624 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_north.png new file mode 100644 index 0000000..2b437d4 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_south.png new file mode 100644 index 0000000..9c87995 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/256/Naked_Thin_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_east.png new file mode 100644 index 0000000..052c7d8 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_north.png new file mode 100644 index 0000000..a87bf14 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_south.png new file mode 100644 index 0000000..666f313 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Fat_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_east.png new file mode 100644 index 0000000..365c5d0 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_north.png new file mode 100644 index 0000000..ebbb626 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_south.png new file mode 100644 index 0000000..6bace2e Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Hulk_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_east.png new file mode 100644 index 0000000..1f8e47a Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_north.png new file mode 100644 index 0000000..96b9316 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_south.png new file mode 100644 index 0000000..fffc7f6 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/512/Naked_Male_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_east.png new file mode 100644 index 0000000..cfd6920 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_north.png new file mode 100644 index 0000000..48eb22b Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_south.png new file mode 100644 index 0000000..bc86e5e Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Fat_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_east.png new file mode 100644 index 0000000..42acdc0 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_north.png new file mode 100644 index 0000000..9a8dbb7 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_south.png new file mode 100644 index 0000000..1b3a040 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Female_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_east.png new file mode 100644 index 0000000..1cc98d3 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_north.png new file mode 100644 index 0000000..245e1d8 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_south.png new file mode 100644 index 0000000..eeea2f4 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Hulk_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_east.png new file mode 100644 index 0000000..180ebde Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_north.png new file mode 100644 index 0000000..687f1ef Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_south.png new file mode 100644 index 0000000..66352de Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Male_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_east.png new file mode 100644 index 0000000..ad6da88 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_north.png new file mode 100644 index 0000000..83b15b6 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_south.png new file mode 100644 index 0000000..fc1293f Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/FurCovered_Thin_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_east.png new file mode 100644 index 0000000..530046d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_north.png new file mode 100644 index 0000000..bcaa369 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_south.png new file mode 100644 index 0000000..8f250d9 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Child_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_north.png index 303bd5b..a4db64f 100644 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_north.png and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_south.png index 07a15ca..1a65ac8 100644 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_south.png and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Fat_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_east.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_east.png new file mode 100644 index 0000000..ed3e994 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_north.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_north.png new file mode 100644 index 0000000..d4736de Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_south.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_south.png new file mode 100644 index 0000000..4a4f8cd Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBodyF_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_north.png index 4b940ba..f3d16cd 100644 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_north.png and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_south.png index add9fc7..48223d1 100644 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_south.png and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Hulk_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_east.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_east.png index 1e75b07..62e8435 100644 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_east.png and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_north.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_north.png index 347a822..7564e8b 100644 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_north.png and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Male_BaseBody_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_east.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_east.png new file mode 100644 index 0000000..9e5ccd4 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_north.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_north.png new file mode 100644 index 0000000..b6b8711 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_south.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_south.png new file mode 100644 index 0000000..32e5913 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBodyM_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBody_south.png index 6c9b6c6..497cc7a 100644 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBody_south.png and b/Textures/Things/Pawn/Humanlike/Bodies/Naked_Thin_BaseBody_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/backup/Naked_Female_BaseBody_south.png b/Textures/Things/Pawn/Humanlike/Bodies/backup/Naked_Female_BaseBody_south.png deleted file mode 100644 index 088780d..0000000 Binary files a/Textures/Things/Pawn/Humanlike/Bodies/backup/Naked_Female_BaseBody_south.png and /dev/null differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_east.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_east.png new file mode 100644 index 0000000..efc219d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_north.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_north.png new file mode 100644 index 0000000..7d47ecb Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_south.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_south.png new file mode 100644 index 0000000..d717696 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Fat_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_east.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_east.png new file mode 100644 index 0000000..9c1c1e8 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_north.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_north.png new file mode 100644 index 0000000..da931f4 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_south.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_south.png new file mode 100644 index 0000000..8fe3b73 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Female_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_east.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_east.png new file mode 100644 index 0000000..9be4e9d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_north.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_north.png new file mode 100644 index 0000000..6ae491d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_south.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_south.png new file mode 100644 index 0000000..9270f8c Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Hulk_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_east.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_east.png new file mode 100644 index 0000000..397823c Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_north.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_north.png new file mode 100644 index 0000000..f3da1d9 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_south.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_south.png new file mode 100644 index 0000000..7c19354 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Male_south.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_east.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_east.png new file mode 100644 index 0000000..667f18d Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_east.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_north.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_north.png new file mode 100644 index 0000000..867c188 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_north.png differ diff --git a/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_south.png b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_south.png new file mode 100644 index 0000000..68561d3 Binary files /dev/null and b/Textures/Things/Pawn/Humanlike/Bodies/source/FurCovered_Thin_south.png differ diff --git a/Tools/SizedApparelTool/main.py b/Tools/SizedApparelTool/main.py new file mode 100644 index 0000000..889790b --- /dev/null +++ b/Tools/SizedApparelTool/main.py @@ -0,0 +1,128 @@ +import sys +import math +from PyQt5.QtCore import QPoint +from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QToolTip , QMainWindow, QAction, qApp , QHBoxLayout, QVBoxLayout, QFrame +from PyQt5.QtWidgets import QRadioButton, QCheckBox, QGroupBox, QGridLayout, QMenu, QTabWidget, QDesktopWidget, QLabel, QStatusBar +from PyQt5.QtGui import QPixmap +from PyQt5.QtGui import QFont +from PyQt5.QtGui import QIcon +from PyQt5.QtCore import QCoreApplication + + + +class MyApp(QWidget): + graphic_image = QPixmap + lbl_img = QLabel + + def __init__(self): + super().__init__() + self.setWindowTitle('ImagePointFinder') + self.statusbar = QStatusBar() + self.statusbar.showMessage("Click Image to Get Position") + self.initUI() + self.setAcceptDrops(True) + self.posX = 0.0 + self.posY = 0.0 + self.Rot = 0.0 + self.Len = 0 + + #self.setStatusBar(self.statusbar) + + def dragEnterEvent(self, event): + if event.mimeData().hasUrls(): + event.accept() + else: + event.ignore() + + def dropEvent(self, event): + files = [u.toLocalFile() for u in event.mimeData().urls()] + for f in files: + print(f) + self.graphic_image = QPixmap(files[0]) + + self.lbl_img.setPixmap(self.graphic_image.scaled(512,512)) + #self.lbl_img.frame = QFrame(self.lbl_img.frame) + self.lbl_img.setFrameShape(QFrame.Box) + + def mousePressEvent(self, event): + #event.x() + + #print() + self.posX = event.globalX() - self.lbl_img.mapToGlobal(QPoint(0,0)).x() + self.posY = event.globalY() - self.lbl_img.mapToGlobal(QPoint(0,0)).y() + self.Rot = 0.0 + self.Len = 0.0 + U = 0 + V = 0 + if(self.lbl_img.pixmap()): + U = (self.posX / self.lbl_img.pixmap().height())-0.5 + V = (self.posY / self.lbl_img.pixmap().width())*-1 + 0.5 + txt = "Clicked Position ; Position(x,y) =({0:.3f}, {1:.3f}) , Rotation = {2:.1f}, Length = {3:.3f} ".format(U, V, self.Rot, self.Len) + self.statusbar.showMessage(txt) + #print(event.globalX()) + + def mouseMoveEvent(self, event): + target_posX = event.globalX() - self.lbl_img.mapToGlobal(QPoint(0,0)).x() + target_posY = event.globalY() - self.lbl_img.mapToGlobal(QPoint(0,0)).y() + + self.Rot = math.degrees( math.atan2(target_posY - self.posY, target_posX - self.posX)) + 90 + if(self.Rot < 0): + self.Rot = self.Rot + 360 + + + if(self.lbl_img.pixmap()): + U = (self.posX / self.lbl_img.pixmap().height())-0.5 + V = (self.posY / self.lbl_img.pixmap().width())*-1 + 0.5 + tU = target_posX / self.lbl_img.pixmap().height() + tV = target_posY / self.lbl_img.pixmap().width() + self.Len = math.fabs(math.dist((U,V),( tU, tV))) + txt = "Clicked Position ; Position(x,y) =({0:.3f}, {1:.3f}) , Rotation = {2:.1f}, Length = {3:.3f} ".format(U, V, self.Rot, self.Len) + self.statusbar.showMessage(txt) + + def initUI(self): + tab1 = QWidget() + tab2 = QWidget() + + tabs = QTabWidget() + tabs.addTab(tab1, 'Texture Pivot and Point Editor') + #tabs.addTab(tab2, 'Sized Texture List Editor') + + vbox = QVBoxLayout() + vbox.addWidget(tabs) + + self.graphic_image = QPixmap() + self.lbl_img = QLabel() + #self.lbl_img.setPixmap(self.graphic_image) + self.lbl_img.setText("Drag and Drop Image Here") + + vbox2 = QVBoxLayout() + vbox2.addWidget(self.lbl_img) + vbox2.addWidget(self.statusbar) + tab1.setLayout(vbox2) + + + self.setLayout(vbox) + + #print(self.hasMouseTracking()) + self.setMouseTracking(True) + + #print(self.hasMouseTracking()) + + + self.setGeometry(500, 500, 500, 400) + self.center() + + self.show() + #self.statusbar.show() + + def center(self): + qr = self.frameGeometry() + cp = QDesktopWidget().availableGeometry().center() + qr.moveCenter(cp) + self.move(qr.topLeft()) + + +if __name__ == '__main__': + app = QApplication(sys.argv) + ex = MyApp() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/source/SizedApparel/AlienRaceSupport.cs b/source/SizedApparel/AlienRaceSupport.cs index ebfcdd3..a8f1dba 100644 --- a/source/SizedApparel/AlienRaceSupport.cs +++ b/source/SizedApparel/AlienRaceSupport.cs @@ -11,10 +11,4 @@ namespace SizedApparel class AlienRaceSupport { } - - public class SizedApparelPawnDef : Def - { - public bool allowForceHumanlike = false; - - } } diff --git a/source/SizedApparel/Graphic_BodyParts.cs b/source/SizedApparel/Graphic_BodyParts.cs index 50be733..f221eda 100644 --- a/source/SizedApparel/Graphic_BodyParts.cs +++ b/source/SizedApparel/Graphic_BodyParts.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; namespace SizedApparel { + //Does it better to optimize? public class Graphic_BodyParts : Verse.Graphic_Multi { public float serverity; diff --git a/source/SizedApparel/Graphic_SizedApparel.cs b/source/SizedApparel/Graphic_SizedApparel.cs index a0a879c..f84fa77 100644 --- a/source/SizedApparel/Graphic_SizedApparel.cs +++ b/source/SizedApparel/Graphic_SizedApparel.cs @@ -3,11 +3,17 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEngine; +using RimWorld; +using Verse; namespace SizedApparel { - public class Graphic_SizedApparel : Verse.Graphic_Multi + //Does it better to optimize? + public class Graphic_SizedApparel : Graphic_Multi { - + public string TargetBodyParts = "Breats"; + //Sized Graphics. + public List graphics; } } diff --git a/source/SizedApparel/HarmonyPatches.cs b/source/SizedApparel/HarmonyPatches.cs index b723dd3..9b8d881 100644 --- a/source/SizedApparel/HarmonyPatches.cs +++ b/source/SizedApparel/HarmonyPatches.cs @@ -1,15 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using HarmonyLib; using RimWorld; -using Verse; -using HarmonyLib; +//using Rimworld_Animations; //using AlienRace; -using UnityEngine; using rjw; -using RevealingApparel; -using System.Reflection; +using System; +using System.Linq; +using Verse; namespace SizedApparel { @@ -24,6 +20,9 @@ namespace SizedApparel 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() { @@ -85,6 +84,40 @@ namespace SizedApparel { 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"); @@ -137,7 +170,7 @@ namespace SizedApparel } else { - Log.Message("[SizedApparel] RimJobWorld Paatch canceled"); + Log.Message("[SizedApparel] RimJobWorld Patch canceled"); } }))(); } @@ -170,6 +203,31 @@ namespace SizedApparel 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 { diff --git a/source/SizedApparel/Patch-Animation.cs b/source/SizedApparel/Patch-Animation.cs new file mode 100644 index 0000000..bd92a0d --- /dev/null +++ b/source/SizedApparel/Patch-Animation.cs @@ -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(); + 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(); + 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().SetBreastJiggle(true); + } + } + else + { + foreach (var actor in __instance.actorsInCurrentAnimation) + { + actor.GetComp().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(); + if (comp == null) + return; + comp.SetBreastJiggle(false, -1); + comp.ForceUpdateTickAnimation = false; + comp.SetPenisAngle(0); + + } + } + +} diff --git a/source/SizedApparel/Patch-DubsApparelPatch.cs b/source/SizedApparel/Patch-DubsApparelPatch.cs new file mode 100644 index 0000000..5addbe4 --- /dev/null +++ b/source/SizedApparel/Patch-DubsApparelPatch.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; +using HarmonyLib; + +namespace SizedApparel +{ + public static class SizedApparelDubsApparelPatch + { + public static void indoorPostFixPatch(Pawn pawn) + { + PawnGraphicSet graphicSet = pawn.Drawer?.renderer?.graphics; + + if (graphicSet == null) + return; + var comp = pawn.GetComp(); + if (comp == null) + return; + comp.needToCheckApparelGraphicRecords = true; + } + + } +} diff --git a/source/SizedApparel/Patch-Menstruation.cs b/source/SizedApparel/Patch-Menstruation.cs new file mode 100644 index 0000000..21c4a84 --- /dev/null +++ b/source/SizedApparel/Patch-Menstruation.cs @@ -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(); + if (breastcomp == null) + return null; + return breastcomp.NippleColor; + } + + public static float? GetNippleSize(Hediff breastHediff) + { + var breastcomp = breastHediff.TryGetComp(); + if (breastcomp == null) + return null; + return breastcomp.NippleSize; + } + + public static float? GetAreolaSize(Hediff breastHediff) + { + var breastcomp = breastHediff.TryGetComp(); + if (breastcomp == null) + return null; + return breastcomp.AreolaSize; + } + } +} diff --git a/source/SizedApparel/Patch-RimJobWorld.cs b/source/SizedApparel/Patch-RimJobWorld.cs new file mode 100644 index 0000000..06f8ac6 --- /dev/null +++ b/source/SizedApparel/Patch-RimJobWorld.cs @@ -0,0 +1,240 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RimWorld; +using Verse; +using HarmonyLib; +using UnityEngine; +using rjw; + +namespace SizedApparel +{ + + //sexualize_pawn patch + class SexualizePawnPatch + { + static void Postfix(Pawn pawn) + { + if (!UnityData.IsInMainThread) + return; + ApparelRecorderComp comp = pawn?.GetComp(); + if (comp == null) + return; + comp.SetDirty(true,true,true); + /* + comp.ClearAll(); + var graphicSet = pawn.Drawer?.renderer?.graphics; + if (graphicSet != null) + { + pawn.Drawer.renderer.graphics.ResolveAllGraphics(); + //pawn.Drawer.renderer.graphics.ResolveApparelGraphics(); + BodyPatch.SetBodyGraphic(pawn); + }*/ + + /* + float breastSeverity = comp.breastSeverity; + Hediff breastHediff = comp.breastHediff; + SizedApparelUtility.GetBreastSeverity(pawn, out breastSeverity, out breastHediff); + SizedApparelUtility.hasUnSupportedApparelFromWornData(pawn, breastSeverity, breastHediff, true); + comp.hasUpdateBefore = true;*/ + + } + } + //since Sized Apparel Logic Changed, it doesn't need to do job patch for rjw. + [Obsolete] + [StaticConstructorOnStartup] + //[HarmonyPatch(typeof(SexUtility), "DrawNude")] + class DrawNudePatch + { + static void Prefix(Pawn pawn, bool keep_hat_on) + { + + if (!UnityData.IsInMainThread) + return; + + //Log.Message("Hello"); + if (RJWPreferenceSettings.sex_wear == RJWPreferenceSettings.Clothing.Clothed) + { + + } + else + { + //SetBodyGraphic(pawn.Drawer.renderer.graphics, false); + } + } + static void OldPostfix(Pawn pawn) + { + if (pawn == null) + return; + //GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff); + //bool flag = hasUnSupportedApparel(__instance.pawn, breastSeverity, breastHediff); + ApparelRecorderComp comp = pawn.GetComp(); + if (comp != null) + { + /* + LongEventHandler.ExecuteWhenFinished(delegate + { + float breastSeverity; + Hediff breastHediff; + bool flag = false; + GetBreastSeverity(pawn, out breastSeverity, out breastHediff); + flag = hasUnSupportedApparel(pawn, breastSeverity, breastHediff); + if (!comp.hasUpdateBefore) + comp.SetHasUpdateBefore(true); + comp.SetHasUnsupportedApparel(flag); + } + ); + */ + + //Log.Message("CheckApparel"); + if (!comp.hasUpdateBefore) + comp.hasUpdateBefore = true; + if (!comp.hasUpdateForSex) + { + comp.hasUpdateForSex = true; + float breastSeverity; + Hediff breastHediff; + bool flag = false; + SizedApparelUtility.GetBreastSeverity(pawn, out breastSeverity, out breastHediff); + //Log.Message("GetServerity"); + //flag = SizedApparelUtility.hasUnSupportedApparel(pawn, breastSeverity, breastHediff); + flag = SizedApparelUtility.hasUnSupportedApparelFromWornData(pawn, breastSeverity, breastHediff); + comp.hasUnsupportedApparel = flag; + } + + //Log.Message("SetFlag"); + /* + //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); + } + ); + */ + + } + + } + public void todoPostfix(Pawn pawn) + { + if (pawn == null) + return; + ApparelRecorderComp comp = pawn.GetComp(); + if (comp == null) + return; + comp.SetDirty(); + } + } + + [Obsolete] + [StaticConstructorOnStartup] + //[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")] + class SexStartPatch + { + static void Postfix(JobDriver_SexBaseInitiator __instance) + { + //Log.Warning("SexStart"); + + + + ApparelRecorderComp pawnARC = __instance.pawn.GetComp(); + if (pawnARC != null) + { + if (__instance.pawn.RaceProps.Humanlike) + { + pawnARC.havingSex = true; + pawnARC.hasUpdateForSex = false; + __instance.pawn.Drawer.renderer.graphics.SetApparelGraphicsDirty(); + } + } + if (__instance.Partner == null) + return; + var partner = __instance.Partner as Pawn; + if (partner == null) + return; + ApparelRecorderComp partnerARC = partner.GetComp(); + if (partnerARC != null) + { + if (partner.RaceProps.Humanlike) + { + partnerARC.havingSex = true; + pawnARC.hasUpdateForSex = false; + partner.Drawer.renderer.graphics.SetApparelGraphicsDirty(); + } + } + } + } + [Obsolete] + [StaticConstructorOnStartup] + //[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")] + class SexEndPatch + { + static void Postfix(JobDriver_SexBaseInitiator __instance) + { + + + ApparelRecorderComp pawnARC = __instance.pawn.GetComp(); + + if (pawnARC != null) + { + pawnARC.havingSex = false; + pawnARC.hasUpdateForSex = false; + pawnARC.hasUpdateBefore = false; + float breastSeverity; + Hediff breastHediff; + bool flag = true; + if (__instance.pawn.RaceProps.Humanlike) + { + SizedApparelUtility.GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff); + //Log.Message("GetServerity"); + flag = SizedApparelUtility.hasUnSupportedApparelFromWornData(__instance.pawn, breastSeverity, breastHediff); + pawnARC.hasUnsupportedApparel = flag; + PortraitsCache.SetDirty(__instance.pawn); + __instance.pawn.Drawer.renderer.graphics.ResolveApparelGraphics(); + } + pawnARC.hasUnsupportedApparel = flag; + } + + if (__instance.Partner == null) + return; + var partner = __instance.Partner as Pawn; + if (partner == null) + return; + ApparelRecorderComp partnerARC = partner.GetComp(); + if (partnerARC != null) + { + partnerARC.havingSex = false; + partnerARC.hasUpdateForSex = false; + partnerARC.hasUpdateBefore = false; + float breastSeverity; + Hediff breastHediff; + bool flag = true; + + if (partner.RaceProps.Humanlike) + { + SizedApparelUtility.GetBreastSeverity(partner, out breastSeverity, out breastHediff); + //Log.Message("GetServerity"); + flag = SizedApparelUtility.hasUnSupportedApparelFromWornData(partner, breastSeverity, breastHediff); + partnerARC.hasUnsupportedApparel = flag; + partner.Drawer.renderer.graphics.ResolveApparelGraphics(); + PortraitsCache.SetDirty(partner); + } + partnerARC.hasUnsupportedApparel = flag; + + } + + + } + + } + +} diff --git a/source/SizedApparel/Patch-RimNudeWorld.cs b/source/SizedApparel/Patch-RimNudeWorld.cs new file mode 100644 index 0000000..cdc4e93 --- /dev/null +++ b/source/SizedApparel/Patch-RimNudeWorld.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RimWorld; +using Verse; +using HarmonyLib; +//using AlienRace; +using UnityEngine; +using rjw; + + + + +namespace SizedApparel +{ + + //[HarmonyPatch(typeof(RimNudeWorld.GenitalPatch), "Postfix")] + [StaticConstructorOnStartup] + public class SizedApparelRNWPatch + { + static bool Prefix(Pawn pawn) + { + if (pawn == null) + return false; + + return true; + } + + } + + + public class RevealingApparelPatch + { + static void Postfix( Pawn pawn, ref bool __result) + { + if (__result == false) + return; + var comp = pawn.GetComp(); + if (comp == null) + return; + if (comp.hasUnsupportedApparel) + return; + if(pawn.apparel.WornApparel != null) + { + if(pawn.apparel.WornApparel.Any((Apparel ap) =>( ap.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_IgnorBreastSize".ToLower())))) + __result = false; + } + return; + } + } + + +} diff --git a/source/SizedApparel/Patch-StatueOfColonist.cs b/source/SizedApparel/Patch-StatueOfColonist.cs new file mode 100644 index 0000000..2aa8860 --- /dev/null +++ b/source/SizedApparel/Patch-StatueOfColonist.cs @@ -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 + { + + } +} diff --git a/source/SizedApparel/Properties/AssemblyInfo.cs b/source/SizedApparel/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..950c1b8 --- /dev/null +++ b/source/SizedApparel/Properties/AssemblyInfo.cs @@ -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")] diff --git a/source/SizedApparel/SizedApparelBodyPart.cs b/source/SizedApparel/SizedApparelBodyPart.cs index 5ff3a77..3a48899 100644 --- a/source/SizedApparel/SizedApparelBodyPart.cs +++ b/source/SizedApparel/SizedApparelBodyPart.cs @@ -1,33 +1,51 @@ -using System; +using HarmonyLib; +using RimWorld; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using RimWorld; -using Verse; -using HarmonyLib; +using System.Reflection; //using AlienRace; using UnityEngine; -using rjw; -using System.Reflection; +using Verse; namespace SizedApparel { - public struct Depth4Offsets + public class Depth4Offsets { - float South; - float North; - float East; - float West; + public float south=0; + public float north=0; + public float east=0; + public float west=0; + + public Depth4Offsets() { } + + public Depth4Offsets(Vector4 arg) + { + south = arg.x; + north = arg.y; + east = arg.z; + west = arg.w; + } + public Depth4Offsets(float s, float n, float e, float w) + { + south = s; + north = n; + east = e; + west = w; + } } - public struct Rot4Offsets + public class Rot4Offsets { //X: right and left //Y: Frong or Back //Z: Up and Down Vector3 South; + Vector3 North; + Vector3 East; + Vector3 West; public Rot4Offsets(Vector3 vector) @@ -68,11 +86,29 @@ namespace SizedApparel public string bodyType; } + public class BodyWithBodyType + { + public string bodyType; + public List Addons = new List(); + } + public class BodyPart { - public string partName; - public Depth4Offsets depthOffset; - public List offsets; + public string partName = null; + public string customPath = null; + public string defaultHediffName = null; // for missing Hediff + public bool isBreasts = false; + public bool centeredTexture = true; + public bool mustMatchBodyType = false; // TODO + + public string boneName = null; + public Bone bone = null; // For Graphic Positioning System + public bool mustHaveBone = true; // when bone is missing, don't draw + + public SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; + public ColorType colorType = ColorType.Skin; + public Depth4Offsets depthOffset = new Depth4Offsets(); + public BodyTypeAndOffset offsets = new BodyTypeAndOffset(); } public class BodyTypeAndOffset @@ -81,11 +117,16 @@ namespace SizedApparel public string bodyType; public Rot4Offsets offsets = new Rot4Offsets(Vector3.zero); + public BodyTypeAndOffset() + { + + } + public BodyTypeAndOffset(bool useCenter) { if (useCenter) { - offsets = new Rot4Offsets(new Vector3(0.5f, 0, 0.5f)); + offsets = new Rot4Offsets(Vector3.zero); } } public BodyTypeAndOffset(Vector3 defaultOffset) @@ -94,15 +135,15 @@ namespace SizedApparel } } - public enum SizedApparelBodyPartColorOf + public enum ColorType { - Skin, Hair, Custom, None + Skin, Hair, Nipple, Custom, None } public enum SizedApparelBodyPartOf { - All, Torso, Breasts, Crotch, Penis, Vagina, Anus, Belly, Udder, Hips, Thighs, hands, feet, None + All, Torso, Breasts, Nipples, Crotch, Penis, Balls, Vagina, Anus, Belly, PubicHair, Udder, Hips, Thighs, hands, feet, None } public static class SizedApparelBodyPartOfExtension { @@ -120,17 +161,25 @@ namespace SizedApparel return false; return true; case SizedApparelBodyPartOf.Breasts: - if (source == SizedApparelBodyPartOf.Breasts) + if (source == SizedApparelBodyPartOf.Breasts || source == SizedApparelBodyPartOf.Nipples) + return true; + return false; + case SizedApparelBodyPartOf.Nipples: + if (source == SizedApparelBodyPartOf.Nipples) return true; return false; case SizedApparelBodyPartOf.Crotch: - if (source == SizedApparelBodyPartOf.Penis || source == SizedApparelBodyPartOf.Vagina || source == SizedApparelBodyPartOf.Anus) + if (source == SizedApparelBodyPartOf.Crotch || source == SizedApparelBodyPartOf.Penis || source == SizedApparelBodyPartOf.Vagina || source == SizedApparelBodyPartOf.Anus || source == SizedApparelBodyPartOf.PubicHair || source == SizedApparelBodyPartOf.Balls) return true; return false; case SizedApparelBodyPartOf.Penis: if (source == SizedApparelBodyPartOf.Penis) return true; return false; + case SizedApparelBodyPartOf.Balls: + if (source == SizedApparelBodyPartOf.Balls) + return true; + return false; case SizedApparelBodyPartOf.Vagina: if (source == SizedApparelBodyPartOf.Vagina) return true; @@ -163,10 +212,13 @@ namespace SizedApparel if (source == SizedApparelBodyPartOf.feet) return true; return false; + case SizedApparelBodyPartOf.PubicHair: + if (source == SizedApparelBodyPartOf.PubicHair) + return true; + return false; case SizedApparelBodyPartOf.None: return false; - return false; } Log.Error("[SizedApparel] missing SizedApparelBodyPartOf!"); return false; @@ -188,7 +240,7 @@ namespace SizedApparel public class GraphicPoint { public string pointName; - public Vector2 point = new Vector2(0.5f, 0.5f); + public Vector2 point = Vector2.zero; } public class GraphicPointsWithBodyType { @@ -199,13 +251,13 @@ namespace SizedApparel public class PointWithBodyType { public string bodyTypeName; //null can be used too - public Vector2 point = new Vector2(0.5f,0.5f); + public Vector2 point = Vector2.zero; } - public struct BodyPartPoint + public class BodyPartPoint { string name; - Vector2 position;//Uv position. not pixel + Vector2 position = Vector2.zero;//Uv position. not pixel } [Obsolete]//todo @@ -213,8 +265,18 @@ namespace SizedApparel { } - + + + //Def for Hediff Graphic color options or else. + public class SizedApparelHeddifDef : Def + { + public HediffDef hediffDef; + //public string hediffDefName; + + } + //Def per graphic(texture) + [Obsolete] public class SizedApparelBodyPartGraphicDef : Def { public string graphicPath; @@ -222,24 +284,38 @@ namespace SizedApparel public Vector2 pivot = new Vector2(0.5f, 0.5f); // custom pivot of texture. UV. not pixel //public Dictionary points = new Dictionary(); //public Dictionary splines = new Dictionary(); - } //Def per BodyParts public class SizedApparelBodyPartDef : Def { SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; - public bool canPose = false; - public bool canAnimate = false; + public bool canPose = true; + public List TexturePaths; + } public class SizedApparelBodyPart { static MethodInfo overrideMatMethod = AccessTools.Method(typeof(PawnRenderer), "OverrideMaterialIfNeeded"); + static Color defaultNippleColor = Color.white;//nipple texture is already colored with pink. so make it white as default to avoid double coloring pink //Strong Pink Color = new ColorInt(255, 121, 121).ToColor - public SizedApparelBodyPart(Pawn pawn, string bodyPartName, SizedApparelBodyPartOf bodyPartOf, string defaultHediffName, bool isBreast, bool isOverlay , string customPathName = null, SizedApparelBodyPartColorOf colorOf = SizedApparelBodyPartColorOf.Skin) + //this is for RGB Channel Edit + static string texturePath_White = "SizedApparel/Masks/White"; + static string texturePath_Black = "SizedApparel/Masks/Black"; + static string texturePath_Red = "SizedApparel/Masks/Red"; + static string texturePath_Green = "SizedApparel/Masks/Green"; + static string texturePath_Blue = "SizedApparel/Masks/Blue"; + + + public bool AutoOffsetForFurCoveredBody = true; + + public SizedApparelBodyPart(Pawn pawn, ApparelRecorderComp apparelRecorderComp, string bodyPartName, SizedApparelBodyPartOf bodyPartOf, string defaultHediffName, bool isBreast, bool isOverlay, string customPathName = null, ColorType colorOf = ColorType.Skin, bool needBoneToRender = true, Bone parentBone = null, bool isCenteredTexture = false ) { this.pawn = pawn; //owner + + this.apparelRecorderCompCache = apparelRecorderComp; //for reduce GetComp Call; if it is null, it will try to get pawn's comp. + this.bodyPartName = bodyPartName; this.def = DefDatabase.AllDefs.FirstOrDefault(b => b.defName == bodyPartName); @@ -250,6 +326,15 @@ namespace SizedApparel this.isOverlay = isOverlay; this.customPath = customPathName; this.colorType = colorOf; + + this.bone = parentBone; + this.mustHaveBone = needBoneToRender; + this.centeredTexture = isCenteredTexture; + } + + public void SetCenteredTexture(bool isCentered) + { + this.centeredTexture = isCentered; } public Vector2 OffsetFromUVOffset(Vector2 vector, Mesh mesh , bool isFliped = false) @@ -257,10 +342,21 @@ namespace SizedApparel //treat mesh as plane //Vector3 width = mesh.vertices[2] - mesh.vertices[1]; //Vector3 height = mesh.vertices[1] - mesh.vertices[2]; - Vector2 loc = new Vector2(0.5f, 0.5f) - vector; + + if(!isFliped) + return new Vector2((mesh.vertices[2].x - mesh.vertices[0].x)*vector.x,(mesh.vertices[0].z - mesh.vertices[2].z)*vector.y); + return new Vector2((mesh.vertices[2].x - mesh.vertices[0].x)*vector.x, (mesh.vertices[2].z - mesh.vertices[0].z)*vector.y); + /* + * Vector2 loc = new Vector2(0.5f, 0.5f) - vector; + if(!isFliped) return new Vector2(Mathf.Lerp(mesh.vertices[0].x, mesh.vertices[2].x, loc.x), Mathf.Lerp(mesh.vertices[0].z, mesh.vertices[2].z, loc.y)); return new Vector2(Mathf.Lerp(mesh.vertices[3].x, mesh.vertices[1].x, loc.x), Mathf.Lerp(mesh.vertices[3].z, mesh.vertices[1].z, loc.y)); + + + + */ + } //public Vector2 OffestFromUVOffset(Vector2 vector, Vector2 drawSize, bool isFliped = false) @@ -268,19 +364,28 @@ namespace SizedApparel public SizedApparelBodyPartDef def; public Pawn pawn; + public ApparelRecorderComp apparelRecorderCompCache; // for reduce getComp call; + public Bone bone; + private bool mustHaveBone; + + public bool centeredTexture = false; // false to keep original position from mesh. and consider this graphics pivot as bone position + public string bodyPartName; //breast, penis, belly, pubichair... etc. just name. not like architech something public string customPath = null; public SizedApparelBodyPartOf bodyPartOf = SizedApparelBodyPartOf.None; public string defaultHediffName; public bool isBreast = false; + public bool isOverlay = false; //write z cache? public string currentHediffName; public bool isVisible = true; - public SizedApparelBodyPartColorOf colorType = SizedApparelBodyPartColorOf.Skin; + public int lastPoseTick = -1; + + public ColorType colorType = ColorType.Skin; public Color? customColorOne; public Color? customColorTwo; @@ -295,20 +400,29 @@ namespace SizedApparel public Color? variationColor; public colorOverrideMode variationColorMode = colorOverrideMode.Default; - //TODO. age setting? public int minDrawAge = -1; public int maxDrawAge = -1; + public void SetBone(Bone bone) + { + this.bone = bone; + } public void SetCustomPose(string newPose, bool autoUpdate = true, bool autoSetPawnGraphicDirty = false) { if (customPose == newPose) return; + if(SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Setting Custom Pose : " + newPose); customPose = newPose; if (autoUpdate) + { this.UpdateGraphic(); + this.lastPoseTick = Find.TickManager.TicksGame; + } + if(autoSetPawnGraphicDirty) { if (pawn == null) @@ -318,37 +432,22 @@ namespace SizedApparel } } - public bool CheckCanPose(string targetPose, bool checkApparels, bool mustMatchSize) + public bool CheckCanPose(string targetPose, bool checkApparels, bool checkBodyParts, bool mustMatchSize, bool mustMatchBodytype, bool mustMatchRace) { if (checkApparels) { - foreach(ApparelGraphicRecord agr in pawn.Drawer.renderer.graphics.apparelGraphics) - { - /* - if (!agr.sourceApparel.def.apparel.bodyPartGroups.Any(bpgd => bpgd.defName == "Torso" || bpgd.defName == "Chest")) - continue; - - if (agr.sourceApparel.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_IgnorePose".ToLower())) - continue; - */ - - string originalPath = SizedApparelsDatabase.GetSupportedApparelOriginalPath(agr.graphic.path); - if (originalPath == null) - return false; - - int outInt = -1; - float outFloat = -1; - SizedApparelsDatabase.SizedApparelDatabaseKey key = new SizedApparelsDatabase.SizedApparelDatabaseKey(originalPath,pawn.def.defName,pawn.story?.bodyType?.defName, currentHediffName, Math.Min(currentSeverityInt, cappedSeverityInt), false, targetPose); - var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(key, out outInt, out outFloat); - if (!result.isCustomPose) - return false; - } + if (!SizedApparelUtility.CanPoseApparels(pawn, targetPose, currentHediffName, currentSeverityInt, cappedSeverityInt)) + return false; } - Graphic graphic = GetBodyPartGraphics(false, mustMatchSize, targetPose); - Graphic graphicH = GetBodyPartGraphics(true, mustMatchSize, targetPose); - if (graphic != null || graphicH != null) - return true; - return false; + if (checkBodyParts) + { + Graphic graphic = GetBodyPartGraphics(false, mustMatchSize, mustMatchBodytype, mustMatchRace); + Graphic graphicH = GetBodyPartGraphics(true, mustMatchSize, mustMatchBodytype, mustMatchRace); + if (graphic != null || graphicH != null) + return true; + return false; + } + return true; } @@ -356,20 +455,22 @@ namespace SizedApparel public int currentSeverityInt = -1; public int cappedSeverityInt = 1000; // supported severity from worn apparel graphics - public Vector2 pivot = new Vector2(0.5f, 0.5f); + public Vector2 pivot = Vector2.zero; public Vector2 position = Vector2.zero;//offset from pivot //UV. not pixel - public Dictionary points; - public Dictionary pointsHorny; + public SizedApparelTexturePointDef points; + public SizedApparelTexturePointDef pointsHorny; public float rotation = 0; // +: rotate right, -: rotate left - public Vector2 scale = Vector2.one; + public float scale = 1f; public Graphic bodyPartGraphic; public Graphic bodyPartGraphicHorny; + + public Vector2 positionOffset = Vector2.zero; //offset from position //UV. not pixel public Vector2 positionOffsetSouth = Vector2.zero; public Vector2 positionOffsetNorth = Vector2.zero; @@ -378,11 +479,13 @@ namespace SizedApparel public float depthOffset = 0f; + //0.008f public float depthOffsetEast = 0.008f; public float depthOffsetWest = 0.008f; public float depthOffsetSouth = 0.008f; public float depthOffsetNorth = 0.008f; + //bigger = in front public void SetDepthOffsets(float south, float north, float east, float west) { @@ -391,6 +494,13 @@ namespace SizedApparel depthOffsetEast = east; depthOffsetWest = west; } + public void SetDepthOffsets(Depth4Offsets oppsets) + { + depthOffsetSouth = oppsets.south; + depthOffsetNorth = oppsets.north; + depthOffsetEast = oppsets.east; + depthOffsetWest = oppsets.west; + } public void SetPositionOffsets(Vector2 south, Vector2 north, Vector2 east, Vector2 west) { positionOffsetSouth = south; @@ -398,38 +508,58 @@ namespace SizedApparel positionOffsetEast = east; positionOffsetWest = west; } - public Graphic GetBodyPartGraphics(bool isHorny, bool mustMatchSize = false, string poseOverride = null) + public Graphic GetBodyPartGraphics(bool isHorny, bool mustMatchSize = false, bool mustMatchBodytype = false, bool mustMatchRace = false, string poseOverride = null, string variationOverride = null) { - Dictionary var; - return GetBodyPartGraphics(isHorny, out var, mustMatchSize, poseOverride); + SizedApparelTexturePointDef var; + return GetBodyPartGraphics(isHorny, out var, mustMatchBodytype, mustMatchSize, mustMatchRace, poseOverride, variationOverride); } - public Graphic GetBodyPartGraphics(bool isHorny, out Dictionary outPoints, bool mustMatchSize = false ,string poseOverride = null, string variationOverride = null) + public Graphic GetBodyPartGraphics(bool isHorny, out SizedApparelTexturePointDef outPoints, bool mustMatchSize = false, bool mustMatchBodyType = false , bool mustMatchRace = false ,string poseOverride = null, string variationOverride = null) { if (pawn == null) { outPoints = null; return null; } - - var comp = pawn.TryGetComp(); - + var comp = apparelRecorderCompCache; + if (comp == null) + comp = pawn.GetComp(); if (comp == null) { outPoints = null; return null; } - - var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType?.defName, currentHediffName, customPath==null?bodyPartName: customPath, Math.Min(currentSeverityInt, cappedSeverityInt), isHorny, poseOverride==null?customPose:poseOverride, variationOverride==null?variation: variationOverride); + string bodyTypeString = pawn.story?.bodyType?.defName; + + var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeString, currentHediffName, customPath==null?bodyPartName: customPath, pawn.gender, Math.Min(currentSeverityInt, cappedSeverityInt), isHorny, poseOverride==null?customPose:poseOverride, variationOverride==null?variation: variationOverride); var result = SizedApparelsDatabase.GetSupportedBodyPartPath(key, isBreast, customPath == null ? bodyPartName : customPath, defaultHediffName); + + + if (mustMatchSize) if (Math.Min(currentSeverityInt, cappedSeverityInt) != result.size) { outPoints = null; return null; } + if (mustMatchBodyType) + { + if(result.bodyType != pawn.story?.bodyType?.defName) + { + outPoints = null; + return null; + } + } + if (mustMatchRace) + { + if (result.raceName != pawn.def.defName) + { + outPoints = null; + return null; + } + } if (result.pathWithSizeIndex == null) { @@ -457,7 +587,7 @@ namespace SizedApparel public void ResetTransform() { this.position = Vector2.zero; - this.scale = Vector2.one; + this.scale = 1f; this.rotation = 0; } @@ -498,48 +628,134 @@ namespace SizedApparel { if (!isVisible) return; - if (scale == Vector2.zero) + if (scale == 0f) return; //Don't draw if scale is zero if (pawn == null) return; + if (mustHaveBone && bone == null) + return; + + if (bodyMesh == null) + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] DrawBodyParts But Null Body Mesh! : " + pawn.Name); + return; + } + + PawnRenderer pawnRenderer = pawn.Drawer.renderer; - Shader shader = ShaderDatabase.CutoutComplex; + Shader shader = shader = ShaderDatabase.CutoutSkinOverlay; Color drawColor1 = Color.white; Color drawColor2 = Color.white; + bool forceWriteZ = true; - if(colorType == SizedApparelBodyPartColorOf.Skin) + bool HasFurSkin = false; + //Furskin Check + if (pawn.Drawer.renderer.graphics.furCoveredGraphic != null) + { + HasFurSkin = true; + } + + if (colorType == ColorType.Skin) { forceWriteZ = true; if (bodyDrawType == RotDrawMode.Fresh) { + if (HasFurSkin) + { + shader = pawn.Drawer.renderer.graphics.furCoveredGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + shader = pawnRenderer.graphics.furCoveredGraphic.Shader; + drawColor1 = pawnRenderer.graphics.furCoveredGraphic.Color; + drawColor2 = pawnRenderer.graphics.furCoveredGraphic.ColorTwo; + } + else + { + shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.nakedGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; + } - shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader; - if (!ShaderUtility.SupportsMaskTex(shader)) - shader = ShaderDatabase.CutoutSkinOverlay; - drawColor1 = pawn.Drawer.renderer.graphics.nakedGraphic.Color; - drawColor2 = 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; - drawColor1 = pawn.Drawer.renderer.graphics.rottingGraphic.Color; - drawColor2 = pawn.Drawer.renderer.graphics.nakedGraphic.ColorTwo; + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.rottingGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; } } - else if (colorType == SizedApparelBodyPartColorOf.Hair) + else if (colorType == ColorType.Nipple) + { + forceWriteZ = true; + + //Get SkinColor first. + if (bodyDrawType == RotDrawMode.Fresh) + { + if (HasFurSkin) + { + shader = pawn.Drawer.renderer.graphics.furCoveredGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = ShaderDatabase.CutoutSkinOverlay; + shader = pawnRenderer.graphics.furCoveredGraphic.Shader; + drawColor1 = pawnRenderer.graphics.furCoveredGraphic.Color; + drawColor2 = pawnRenderer.graphics.furCoveredGraphic.ColorTwo; + } + else + { + shader = pawn.Drawer.renderer.graphics.nakedGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.nakedGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; + } + + } + else if (bodyDrawType == RotDrawMode.Rotting) + { + + shader = pawn.Drawer.renderer.graphics.rottingGraphic.Shader; + if (!ShaderUtility.SupportsMaskTex(shader)) + shader = shader = ShaderDatabase.CutoutSkinOverlay; + drawColor1 = pawnRenderer.graphics.rottingGraphic.Color; + drawColor2 = pawnRenderer.graphics.nakedGraphic.ColorTwo; + } + + if(apparelRecorderCompCache != null) + { + if(apparelRecorderCompCache.nippleColor != null) + { + drawColor1 = apparelRecorderCompCache.nippleColor.Value; //* drawColor1; + drawColor2 = apparelRecorderCompCache.nippleColor.Value; //* drawColor2; //maybe can be issue + } + else + { + //nipple Color is null + //Ust Default Color for Nipple with SkinColor + drawColor1 = defaultNippleColor * drawColor1; + drawColor2 = defaultNippleColor * drawColor2; + + } + } + + + } + else if (colorType == ColorType.Hair) { forceWriteZ = false; shader = ShaderDatabase.Transparent; if(pawn.story != null) - drawColor1 = pawn.story.hairColor; + drawColor1 = pawn.story.HairColor; } - else if (colorType == SizedApparelBodyPartColorOf.Custom) + else if (colorType == ColorType.Custom) { forceWriteZ = true; shader = ShaderDatabase.Transparent; @@ -548,52 +764,180 @@ namespace SizedApparel if (customColorTwo != null) drawColor2 = customColorTwo.Value; } - else if (colorType == SizedApparelBodyPartColorOf.None) + else if (colorType == ColorType.None) { forceWriteZ = false; shader = ShaderDatabase.Cutout; } + if (isOverlay) + { + if (shader == ShaderDatabase.Cutout) + shader = ShaderDatabase.Transparent; + else if (shader == ShaderDatabase.CutoutSkin || shader == ShaderDatabase.CutoutSkinColorOverride) + shader = ShaderDatabase.CutoutSkinOverlay; + else + shader = ShaderDatabase.Transparent; + } + + + Mesh scaledBodyMesh; + + BoneTransform boneTransform = null; + if(bone != null) + { + if (facing == Rot4.South) + { + boneTransform = bone.south; + } + else if (facing == Rot4.North) + { + boneTransform = bone.north; + } + else if (facing == Rot4.East) + { + boneTransform = bone.east; + + } + else if (facing == Rot4.West) + { + boneTransform = bone.west; + if (boneTransform == null) + boneTransform = bone.east; + + } + } + + float drawScale = scale; + float drawRotation = angle; + Vector3 drawPosition = rootLoc; + + if (this.pawn.ageTracker.CurLifeStage.bodyDrawOffset != null) + { + drawPosition += this.pawn.ageTracker.CurLifeStage.bodyDrawOffset.Value; + } + + if (boneTransform != null) + { + //TODO fixed angle for IK? + + float width = (bodyMesh.vertices[2].x - bodyMesh.vertices[0].x); + if (centeredTexture) + { + bool westUsingEast = false; + if (facing == Rot4.West && bone.west == null) + westUsingEast = true; + + drawRotation = boneTransform.InitialAngle + boneTransform.angleOffset; + //not sure it work correct + Vector3 v = (boneTransform.InitialPosition + boneTransform.positionOffset) * width; + var q = Quaternion.AngleAxis (westUsingEast? -angle : angle, Vector3.up); + v = q * v; + drawPosition = (v) ; // calculate rotated point + + //Log.Message(boneTransform.angleOffset.ToString()); + if (westUsingEast) + { + //already scaled with "width"? + //its using east as west. so flip position + drawPosition.Scale(new Vector3(-1f,0f,1f)); + //drawRotation = boneTransform.InitialAngle - boneTransform.angleOffset; + } + drawPosition += rootLoc; + drawRotation += angle ; + } + else + { + //NotCentered Texture not yet support Rotation System. + //wip + Vector3 v = Vector3.zero; + + bool westUsingEast = false; + if (facing == Rot4.West && bone.west == null) + westUsingEast = true; + drawRotation = boneTransform.InitialAngle; // + boneTransform.angleOffset + //not sure it work correct + //Vector3 v = (boneTransform.InitialPosition); //initialpos as custom pivot + //var q = Quaternion.AngleAxis(westUsingEast ? -drawRotation : drawRotation, Vector3.up); + //var q2 = Quaternion.AngleAxis(westUsingEast ? -angle : angle, Vector3.up); + + //v = q * v; // calculate final draw position with torso angle + //v = v + boneTransform.InitialPosition + boneTransform.positionOffset; + //v = q2 * v; //NotCentered Texture not yet support Rotation System. + + drawPosition = (v) * width; + if (westUsingEast) + { + //already scaled with "width"? + //its using east as west. so flip position + drawPosition.Scale(new Vector3(-1f, 0f, 1f)); + //drawRotation = boneTransform.InitialAngle - boneTransform.angleOffset; + } + drawPosition += rootLoc ; // adjust with result + //Log.Message(boneTransform.angleOffset.ToString()); + drawRotation += angle; + } + } + + if (drawScale != 1f) + { + // scale Only Rimworld Plane Mesh + if(bodyMesh.vertexCount == 4) + { + float width = (bodyMesh.vertices[2].x - bodyMesh.vertices[0].x); + + var meshSet = MeshPool.GetMeshSetForWidth(scale * width); + scaledBodyMesh = meshSet.MeshAt(facing); + } + else + scaledBodyMesh = bodyMesh; + } + else + { + scaledBodyMesh = bodyMesh; + } + + + Quaternion quaternion = Quaternion.AngleAxis(drawRotation, Vector3.up); - Quaternion quaternion = Quaternion.AngleAxis(angle + rotation, Vector3.up); - Vector3 vector = rootLoc; - Rot4 targetRot = facing; if (rotOverride != null) targetRot = rotOverride.Value; if (targetRot == Rot4.South) { - var loc = OffsetFromUVOffset(positionOffsetSouth, bodyMesh); - vector.x += loc.x; - vector.z += loc.y; - vector.y += depthOffsetSouth; + var loc = OffsetFromUVOffset(positionOffsetSouth, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetSouth; } else if(targetRot == Rot4.North) { - var loc = OffsetFromUVOffset(positionOffsetNorth, bodyMesh); - vector.x += loc.x; - vector.z += loc.y; - vector.y += depthOffsetNorth; + var loc = OffsetFromUVOffset(positionOffsetNorth, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetNorth; } else if (targetRot == Rot4.East) { - var loc = OffsetFromUVOffset(positionOffsetEast, bodyMesh); - vector.x += loc.x; - vector.z += loc.y; - vector.y += depthOffsetEast; + var loc = OffsetFromUVOffset(positionOffsetEast, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetEast; } else if (targetRot == Rot4.West) { - var loc = OffsetFromUVOffset(positionOffsetWest, bodyMesh); - vector.x += loc.x; - vector.z += loc.y; - vector.y += depthOffsetWest; + var loc = OffsetFromUVOffset(positionOffsetWest, scaledBodyMesh); + drawPosition.x += loc.x; + drawPosition.z += loc.y; + drawPosition.y += depthOffsetWest; } + + Graphic graphic = null; if (SizedApparelUtility.IsHorny(pawn)) graphic = bodyPartGraphicHorny; @@ -603,18 +947,44 @@ namespace SizedApparel if (graphic == null) return; - Material mat; - if (!flags.FlagSet(PawnRenderFlags.Cache)&&!isOverlay&& forceWriteZ) + //ForFurskinOffset + if(bodyDrawType == RotDrawMode.Fresh && HasFurSkin && AutoOffsetForFurCoveredBody) { - graphic = graphic.GetColoredVersion(ShaderDatabase.Cutout, drawColor1, drawColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { graphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - graphic = graphic.GetColoredVersion(shader, drawColor1, drawColor2); - vector.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { graphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); + //vector.y += 0.009187258f; //in PawnRenderer, it adds 0.009187258f. + //graphic.maskPath does error? need to check + // worn fur body and naked fur body has different offsets... wtf + //TODO Need to Fix + } + + + + + Material mat; + + //If ForceWriteDepth, draw Cutout mesh for write depth. this is for avoid problem of body addons drawing under other meshes. such as breasts front of body but behind tail. + if (forceWriteZ || (!flags.FlagSet(PawnRenderFlags.Cache) && !isOverlay))// //(!flags.FlagSet(PawnRenderFlags.Cache) && !isOverlay) + { + Graphic Zgraphic = graphic.GetColoredVersion(ShaderDatabase.CutoutComplex, drawColor1, drawColor2); // ShaderDatabase.Cutout + Vector3 drawPositionZ = drawPosition; + drawPositionZ.y = 0; //Send Back of body, but it can still write depth. + + mat = flags.FlagSet(PawnRenderFlags.Cache) ? Zgraphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { Zgraphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); + GenDraw.DrawMeshNowOrLater(scaledBodyMesh, drawPositionZ, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue + } + + //shader must be mask + graphic = graphic.GetColoredVersion(shader, drawColor1, drawColor2); + + if (graphic.maskPath == null) + { + //Test + //graphic.maskPath = texturePath_Red; + } + + //drawPosition.y += 0.00001f; + mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(targetRot) : (Material)overrideMatMethod.Invoke(pawnRenderer, new object[] { graphic.MatAt(facing), pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); + GenDraw.DrawMeshNowOrLater(scaledBodyMesh, drawPosition, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); } } @@ -623,23 +993,24 @@ namespace SizedApparel //TODO: Torso Pose? - public class SizedApparelBodyDef : Def + public class BodyDef : Def { //public List BodyParts; //defName = raceName ?? could it work? - public List bodyParts; + public List bodies = new List(); - /* - public List penisOffset; - public List vaginaOffset; //TODO - public List udderOffset; //TODO - public List bellyOffset; //TODO - public List breastsOffset; //TODO - public List anusOffset; //TODO - */ + + //public List penisOffset; + //public List vaginaOffset; + //public List pubicHairOffset; + //public List udderOffset; + //public List bellyOffset; + //public List breastsOffset; + //public List anusOffset; + } public class SizedApparelBody @@ -653,4 +1024,10 @@ namespace SizedApparel } } + public class SizedApparelBodyPartOfssetDef : Def + { + //defName IsRaceName + + } + } diff --git a/source/SizedApparel/SizedApparelBodyPartDef.cs b/source/SizedApparel/SizedApparelBodyPartDef.cs new file mode 100644 index 0000000..742f3f5 --- /dev/null +++ b/source/SizedApparel/SizedApparelBodyPartDef.cs @@ -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 graphicBones = new List(); + + //Do Not Directly Use it + public List skeletons = new List(); + + + 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 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(); + + + 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; + } + } + +} diff --git a/source/SizedApparel/SizedApparelBodyPartDetail.cs b/source/SizedApparel/SizedApparelBodyPartDetail.cs index 19da2a8..31d6f8c 100644 --- a/source/SizedApparel/SizedApparelBodyPartDetail.cs +++ b/source/SizedApparel/SizedApparelBodyPartDetail.cs @@ -52,13 +52,13 @@ namespace SizedApparel if (SizedApparelUtility.isBreast(parent.def.defName)) bodyPartName = "Breasts"; - else if (SizedApparelUtility.isVagina(parent.def.defName)) + 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 (SizedApparelUtility.isPenis(parent.def.defName)) + else if (Genital_Helper.is_penis(parent)) //SizedApparelUtility.isPenis(parent.def.defName) bodyPartName = "Penis"; else diff --git a/source/SizedApparel/SizedApparelComp.cs b/source/SizedApparel/SizedApparelComp.cs index 12dce2f..c151950 100644 --- a/source/SizedApparel/SizedApparelComp.cs +++ b/source/SizedApparel/SizedApparelComp.cs @@ -13,6 +13,9 @@ namespace SizedApparel [StaticConstructorOnStartup] public class ApparelRecorderComp : ThingComp { + Pawn pawn;// Parent Cache + + public bool recentClothFlag = true; public bool isDrawAge = true; @@ -24,36 +27,63 @@ namespace SizedApparel public bool needToCheckApparelGraphicRecords = false; public bool isDirty = true; - + public bool isHediffDirty = true; + public bool isApparelDirty = true; + public bool isSkeletonDirty = true; + public bool isBodyAddonDirty = true; // reset all body addon graphics. public bool hasUnsupportedApparel = true; public bool havingSex = false;//Obsolete public bool hasUpdateForSex = false;//Obsolete + string cachedBodytype; public List cachedApparelGraphicRecord = new List(); - public Hediff breastHediff = null; //TODO: Make this as List + public Hediff breastHediff = null; public Hediff vaginaHediff = null; public List penisHediffs = null; // RJW can attach multiple penis public Hediff anusHediff = null; - public Hediff udderHediff = null;//RJW 4.6.8: Udder is not partof chest's breast. it attached to torso. + public Color? nippleColor; //for menstruation cycles Mod + + //TODO Optimize Update Hediff Filter + private bool hasBreastsAddon = false; + private bool hasVaginaAddon = false; + private bool hasPenisAddon = false; + private bool hasAnusAddon = false; + private bool hasUdderAddon = false; + private bool hasPubicHairAddon = false; + public float breastSeverity = -1; - public float breastSeverityCapToDraw = 1000; public float BreastSeverityCache = 0; //public float BiggestBreastSeverityInAvailableTextures = 0; //for breasts animation or something. + public bool ForceUpdateTickAnimation = false; + public bool ForceBlockTickAnimation = false; // useful when you have make fixed pose + public bool PrePositionCache; public Vector3? prePositionCache; public float? preAngleCache; public int? preTickCache; + public Vector3 preVelocity = Vector3.zero; + public float preRotation = 0; + public Dictionary tickCache = new Dictionary(); + + public BodyDef bodyDef = null; + public List bodyAddons = new List(); // BodyParts Added form Defs + + public SkeletonDef skeletonDef; // for rebuild Skeleton + public Skeleton skeleton; + public bool skipSkeleton = false; + + //native BodyParts public SizedApparelBodyPart bodyPartBreasts;//TODO: Make this as List public SizedApparelBodyPart bodyPartNipple;//TODO public List bodyPartPenises = new List(); @@ -63,54 +93,35 @@ namespace SizedApparel public SizedApparelBodyPart bodyPartBelly; public SizedApparelBodyPart bodyPartMuscleOverlay;//TODO public SizedApparelBodyPart bodyPartUdder; - public SizedApparelBodyPart bodyPartPubicHair; //TODO + + public SizedApparelBodyPart bodyPartHips; public List bodyPartThighs = new List(); public List bodyPartHands = new List(); public List bodyPartFeet = new List(); - public Graphic graphicNaked = null; //original Graphic - public Graphic graphicRotten = null; //original Graphic + public PubicHairDef pubicHairDef = null; + public PubicHairDef initialPubicHairDef = null; // For StyleStaitionWork + public PubicHairDef nextPubicHairDef = null; // For StyleStaitionWork + public SizedApparelBodyPart bodyPartPubicHair; + + + public Graphic graphicSourceNaked = null; //original Graphic + public Graphic graphicSourceRotten = null; //original Graphic + public Graphic graphicSourceFurCovered = null; //original Graphic + public Graphic graphicbaseBodyNaked = null; + public SizedApparelTexturePointDef baseBodyNakedPoints; + public Graphic graphicbaseBodyCorpse = null; + public SizedApparelTexturePointDef baseBodyCorpsePoints; public Graphic graphicbaseBodyRotten = null; + public SizedApparelTexturePointDef baseBodyRottenPoints; + public Graphic graphicbaseBodyFurCovered = null; + public SizedApparelTexturePointDef baseBodyFurCoveredPoints; - [Obsolete] - public Graphic graphicBreasts = null; - [Obsolete] - public Graphic graphicBreasts_horny = null; - [Obsolete] - public Graphic graphicVagina = null; - [Obsolete] - public Graphic graphicVagina_horny = null; - [Obsolete] - public Graphic graphicAnus = null; - [Obsolete] - public Graphic graphicAnus_horny = null; - [Obsolete] - public List graphicPenises = new List(); - [Obsolete] - public List graphicBallsOfPenises = new List(); - [Obsolete] - public Graphic graphicBelly = null; - [Obsolete] - public Graphic graphicUdder = null; //RJW 4.6.8: Udder is not partof chest's breast. it attached to torso. - [Obsolete] - public Graphic graphicUdder_horny = null; - [Obsolete] - public List graphicPenises_horny = new List(); - [Obsolete] - public List graphicBalls_horny = new List();//Does it need? - //size uncapped breasts graphics. - [Obsolete] - public Graphic graphicBreastsNude = null; - [Obsolete] - public Graphic graphicBreastsNude_horny = null; - - private bool drawingBreastsAddon = false; - - public AlienRaceSetting raceSetting = new AlienRaceSetting(); + public AlienRaceSetting raceSetting = null; public string customPose = null; public SizedApparelPose currentCustomPose = null; @@ -124,97 +135,403 @@ namespace SizedApparel public bool canDrawVaginaAndAnus = false; public bool canDrawTorsoParts = false; //belly and udder + + //this may reset skeleton animation. also little have process + public void InitSkeleton() + { + skeletonDef = DefDatabase.GetNamedSilentFail(pawn.def.defName); + if (skeletonDef == null) + { + if (raceSetting != null && raceSetting.asHuman == true) //old: !SizedApparelSettings.UnsupportedRaceToUseHumanlike + { + skeletonDef = DefDatabase.GetNamedSilentFail("Human"); + } + } + if (skeletonDef != null) + { + if (this.pawn.story == null || this.pawn.story.bodyType == null) + { + foreach (Skeleton s in skeletonDef.skeletons) + { + if (s.bodyType == null) + { + this.skeleton = new Skeleton(s); + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply SkeletonDef: pawn withouth bodytype " + pawn.Name); + return; + } + } + } + else + { + //Setting Up Skeleton + foreach (Skeleton s in skeletonDef.skeletons) + { + if (s.bodyType == this.pawn.story.bodyType.defName) + { + this.skeleton = new Skeleton(s); + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply SkeletonDef: pawn with bodytype " + pawn.Name + " with SkeletonDef : " + this.pawn.story.bodyType.defName); + return; + } + } + } + this.skeleton = null; + } + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply SkeletonDef: No Skeleton Found for " + pawn.Name); + isSkeletonDirty = false; + } + + public void InitBodyAddons() + { + + bodyAddons.Clear(); + + //TODO + //bodyDef = DefDatabase.GetNamed(pawn.def.defName); + + bodyDef = DefDatabase.GetNamedSilentFail(pawn.def.defName); + + //bodyDef can be null + + if (bodyDef == null) + { + if (raceSetting != null && raceSetting.asHuman) //old: !SizedApparelSettings.UnsupportedRaceToUseHumanlike + { + bodyDef = DefDatabase.GetNamedSilentFail("Human"); + } + } + + + if (bodyDef != null && bodyDef.bodies != null) + { + if (pawn.story?.bodyType == null) + { + if(SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply BodyDef: pawn has no bodytype " + pawn.Name); + BodyWithBodyType body = null; + if(!bodyDef.bodies.NullOrEmpty()) + body = bodyDef.bodies[0]; + if (body != null && body.Addons != null) + { + foreach (var bodyaddon in body.Addons) + { + if (bodyaddon == null) + continue; + var a = new SizedApparelBodyPart(pawn, this, bodyaddon.partName, bodyaddon.bodyPartOf, bodyaddon.defaultHediffName, bodyaddon.isBreasts, false, bodyaddon.customPath, bodyaddon.colorType, bodyaddon.mustHaveBone); + a.SetDepthOffsets(bodyaddon.depthOffset.south, bodyaddon.depthOffset.north, bodyaddon.depthOffset.east, bodyaddon.depthOffset.west); + //a.SetDepthOffsets(bodyaddon.depthOffset); + a.SetCenteredTexture(bodyaddon.centeredTexture); + bodyAddons.Add(a); + break; + } + } + } + else + { + foreach (BodyWithBodyType body in bodyDef.bodies) + { + if (body.bodyType != null && body.bodyType == this.pawn.story.bodyType.defName) + { + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Apply BodyDef: matched BodyTyped Body for " + pawn.Name); + if (body != null && body.Addons != null) + { + foreach (var bodyaddon in body.Addons) + { + if (bodyaddon == null) + continue; + var a = new SizedApparelBodyPart(pawn, this, bodyaddon.partName, bodyaddon.bodyPartOf, bodyaddon.defaultHediffName, bodyaddon.isBreasts, false, bodyaddon.customPath, bodyaddon.colorType, bodyaddon.mustHaveBone); + a.SetDepthOffsets(bodyaddon.depthOffset.south, bodyaddon.depthOffset.north, bodyaddon.depthOffset.east, bodyaddon.depthOffset.west); + //a.SetDepthOffsets(bodyaddon.depthOffset); + a.SetCenteredTexture(bodyaddon.centeredTexture); + bodyAddons.Add(a); + } + } + break; + } + + } + + } + + } + else + { + if (SizedApparelSettings.Debug) + Log.Message("[SizedApparel] Cannot find BodyDef for " + pawn.def.defName); + } + + //bodyPartBreasts = new SizedApparelBodyPart(pawn, this, "Breasts", SizedApparelBodyPartOf.Breasts, "Breasts", true, false, null); + //bodyPartBreasts.SetDepthOffsets(0.0113f, 0.001f, 0.0113f, 0.0113f); + + //bodyPartBreasts.SetPositionOffsets(Vector2.one, Vector2.one, Vector2.one, Vector2.one); + //bodyPartBreasts.scale = 2f; + //Nipple. should I separate from Breats? + //bodyPartNipple = new SizedApparelBodyPart(pawn, this, "Nippple", SizedApparelBodyPartOf.Breasts, "Breasts", true, false); + //bodyPartBreasts.SetDepthOffsets(0.0114f, 0.000f, 0.0114f, 0.0114f); + + //bodyPartUdder = new SizedApparelBodyPart(pawn, this, "Udder", SizedApparelBodyPartOf.Udder, "UdderBreasts", true, false); + //bodyPartUdder.SetDepthOffsets(0.0112f, 0.0005f, 0.0112f, 0.0112f); + + //UdderNipple...? + //bodyPartUdder = new SizedApparelBodyPart(p, "Udder", SizedApparelBodyPartOf.Udder, "UdderBreasts", true, false); + //bodyPartUdder.SetDepthOffsets(0.0112f, 0.0005f, 0.0112f, 0.0112f);\ + + //bodyPartVagina = new SizedApparelBodyPart(pawn, this, "Vagina", SizedApparelBodyPartOf.Vagina, "Vagina", false, false); + //bodyPartVagina.SetDepthOffsets(0.0088f, 0.0100f, 0.0088f, 0.0088f); + + //bodyPartAnus = new SizedApparelBodyPart(pawn, this, "Anus", SizedApparelBodyPartOf.Anus, "Anus", false, false); + //bodyPartAnus.SetDepthOffsets(0.0093f, 0.0105f, 0.0093f, 0.0093f); + + //bodyPartBelly = new SizedApparelBodyPart(pawn, this, "Belly", SizedApparelBodyPartOf.Belly, "BellyBulge", false, false); + //bodyPartBelly.SetDepthOffsets(0.0098f, 0.0002f, 0.0098f, 0.0098f); + + //bodyPartPubicHair = new SizedApparelBodyPart(pawn, this, "PubicHair", SizedApparelBodyPartOf.PubicHair, "Default", false, false, null, ColorType.Hair); + //bodyPartPubicHair.SetDepthOffsets(0.0099f, 0.0099f, 0.0089f, 0.0089f); + } + + public void ResetBodyAddonBoneLink() + { + string s; + foreach(var a in bodyAddons) + { + s = a.bone?.name; + if (s == null) + continue; + a.SetBone(skeleton.FindBone(s)); + } + } + public override void Initialize(CompProperties props) { base.Initialize(props); - Pawn p = parent as Pawn; - - bodyPartBreasts = new SizedApparelBodyPart(p, "Breasts", SizedApparelBodyPartOf.Breasts, "Breasts", true, false); - bodyPartBreasts.SetDepthOffsets(0.0113f, 0.001f, 0.0113f, 0.0113f); - bodyPartNipple = new SizedApparelBodyPart(p, "Nippple", SizedApparelBodyPartOf.Breasts, "Breasts", true, false); - bodyPartBreasts.SetDepthOffsets(0.0114f, 0.000f, 0.0114f, 0.0114f); + this.pawn = this.parent as Pawn; - bodyPartUdder = new SizedApparelBodyPart(p, "Udder", SizedApparelBodyPartOf.Udder, "UdderBreasts", true, false); - bodyPartUdder.SetDepthOffsets(0.0112f, 0.0005f, 0.0112f, 0.0112f); - //UdderNipple...? - //bodyPartUdder = new SizedApparelBodyPart(p, "Udder", SizedApparelBodyPartOf.Udder, "UdderBreasts", true, false); - //bodyPartUdder.SetDepthOffsets(0.0112f, 0.0005f, 0.0112f, 0.0112f); - bodyPartVagina = new SizedApparelBodyPart(p, "Vagina", SizedApparelBodyPartOf.Vagina, "Vagina", false, false); - bodyPartVagina.SetDepthOffsets(0.0088f, 0.0100f, 0.0088f, 0.0088f); - - bodyPartAnus = new SizedApparelBodyPart(p, "Anus", SizedApparelBodyPartOf.Anus, "Anus", false, false); - bodyPartAnus.SetDepthOffsets(0.0093f, 0.0105f, 0.0093f, 0.0093f); - - bodyPartBelly = new SizedApparelBodyPart(p, "Belly", SizedApparelBodyPartOf.Belly, "BellyBulge", false, false); - bodyPartBelly.SetDepthOffsets(0.0098f, 0.0002f, 0.0098f, 0.0098f); } + public override void PostDeSpawn(Map map) + { + base.PostDeSpawn(map); + } + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + UpdateRaceSettingData(); // include race Setting + InitSkeleton(); + InitBodyAddons(); + } + + public override void PostExposeData() { base.PostExposeData(); - Scribe_Values.Look(ref customPose, "customPose"); // save pawn's custom pose + Scribe_Values.Look(ref customPose, "customPose"); // save pawn's custom pose. Each bodyparts will not saved. + Scribe_Defs.Look(ref pubicHairDef, "PubicHairDef"); + if (pubicHairDef == null) + { + pubicHairDef = SizedApparelUtility.GetRandomPubicHair(); + } + //Scribe_Values.Look<>(); //TODO: save pubic hair data } + /* public override void CompTick() { + if (PrePositionCache) + { + + } base.CompTick(); - - - } - + }*/ + /* public override void CompTickRare() { base.CompTickRare(); }*/ + + + float penisAngle = 0; + public void SetPenisAngle(float angle) + { + penisAngle = angle; + + if(this.skeleton != null) + { + Bone penisBone = skeleton.FindBone("Penis"); + if (penisBone != null) + { + //Log.Message("SetPenisAngle : " + angle.ToString()); + penisBone.SetAngle(angle); + } + } + + + bool penisDown = false; + if (angle >= 120 && angle <= 250) + penisDown = true; + foreach (var p in bodyPartPenises) + { + if (penisDown) + { + p.SetCustomPose("PenisDown"); + } + else + { + p.SetCustomPose(null); + } + } + } + //do not call this in character creation from new game. + public void SetBreastJiggle(bool jiggle, int cooltime = 5, bool checkApparelForCanPose = false) + { + //SetJiggle has cooltime. + + + bool flag1 = true; + + //should set apparels pose? + //Use First BodyAddon which is partof Breasts + foreach(var a in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Breasts)) + { + if (flag1) + { + if (Find.TickManager.TicksGame < a.lastPoseTick + cooltime) + return; + flag1 = false; + } + + + if (jiggle) + { + bool flag2 = true; + if (flag2 && checkApparelForCanPose) + { + if (!a.CheckCanPose("JiggleUp", true, false, true, true, false)) + return; + flag2 = false; + } + + //may need to check apparels for aply pose + //bodyPartBreasts.CheckCanPose("JiggleUp",) + a.SetCustomPose("JiggleUp"); + } + else + { + //SetPoseFromPoseSet(null); + a.SetCustomPose(null); + } + } + + + } + string[] testPose = { null, "JiggleUp", "JiggleCenter" }; string[] testPose2 = { null, "PenisDown" }; - public void DrawUpdate(Vector3 rootLoc, float angle) // call this in DrawPawnBody + public void UpdateTickAnim(Vector3 rootLoc, float angle) // call this in DrawPawnBody <- only called when it rendered { + if (ForceBlockTickAnimation)// prevent breasts jiggle from other pose + return; + + if (skeleton == null) + return; + + if (Find.CameraDriver == null) + return; + + //do not calculate physics camera is far + if (Find.CameraDriver.CurrentZoom >= CameraZoomRange.Furthest) + return; //int IdTick = parent.thingIDNumber * 20; //hint from yayo animation mod - if (SizedApparelSettings.autoJiggleBreasts) + + if (!SizedApparelUtility.CanApplySizedApparel(pawn)) + return; + + + if (SizedApparelSettings.breastsPhysics || ForceUpdateTickAnimation)//SizedApparelSettings.autoJiggleBreasts { - Vector3 velocity; - if (this.prePositionCache != null) - velocity = this.prePositionCache.Value - rootLoc; - else - velocity = Vector3.zero; - - - - float rotation; - if (this.preAngleCache != null) - rotation = this.preAngleCache.Value - angle; - else - rotation = 0; int tick; if (this.preTickCache != null) tick = Find.TickManager.TicksGame - this.preTickCache.Value; else - tick = 1; + tick = Find.TickManager.TicksGame; + + //if tick is not updated, don't update animation. + if (tick == 0) + return; + + Vector3 velocity; + if (this.prePositionCache != null) + velocity = (rootLoc - this.prePositionCache.Value);// /tick + else + velocity = Vector3.zero; + + float rotation; + + if (this.preAngleCache != null) + rotation = angle - this.preAngleCache.Value; + else + rotation = 0; + + float rotAcc = rotation - preRotation; + + + //Log.Message(velocity.ToString() + " , " + preVelocity.ToString()); + //UnityEngine's vector.normalize is safe for zero vector + //(Vector3.Dot(velocity.normalized, preVelocity.normalized)) < 0.2f + + float dotV = Vector3.Dot(velocity.normalized, preVelocity.normalized); + float velocityOffset = (velocity - preVelocity).magnitude; + + //Log.Message(pawn.ToString()); + //Log.Message("rotAcc : " + rotAcc.ToString()); + //Log.Message("Velocity.x : " + velocity.x.ToString()); + //Log.Message("Velocity.z : " + velocity.z.ToString()); + //Log.Message("dotV : " + dotV.ToString()); + //Log.Message("velocityOffset : " + velocityOffset.ToString()); + //&& dotV > 0.4f + if (((preVelocity != Vector3.zero && velocityOffset >= 0.02))|| Mathf.Abs(rotAcc) > 0.5) //(dotV == 0 ? 0:1), Mathf.Abs(dotV) // || Mathf.Abs(rotation) > 20 + { + //tickCache.Add("BreastsJiggleUp", Find.TickManager.TicksGame); + SetBreastJiggle(true,10,true); + + } + else + { + SetBreastJiggle(false,10, false); + } + //cache pre data this.prePositionCache = rootLoc; this.preAngleCache = angle; + this.preRotation = rotation; this.preTickCache = Find.TickManager.TicksGame; + this.preVelocity = velocity; + + + } - SetPoseFromPoseSet(testPose2.RandomElement()); + //SetPoseFromPoseSet(testPose2.RandomElement()); } public bool isApparelGraphicRecordChanged() { - Pawn pawn = parent as Pawn; if (pawn == null) return false; @@ -234,6 +551,111 @@ namespace SizedApparel return false; } + public void DrawAllBodyParts(Vector3 rootLoc, float angle, Rot4 facing, RotDrawMode bodyDrawType, PawnRenderFlags flags, Pawn ___pawn, Mesh bodyMesh) + { + if (this.isDrawAge && (!flags.FlagSet(PawnRenderFlags.Clothes) || !this.hasUnsupportedApparel || SizedApparelUtility.isPawnNaked(___pawn))) //TODO : Move it to CanDraw + { + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawVagina && SizedApparelUtility.CanDrawVagina(___pawn, flags)) + { + //if (this.bodyPartVagina != null) + // this.bodyPartVagina.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Vagina)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawAnus && SizedApparelUtility.CanDrawAnus(___pawn, flags)) + { + //if (this.bodyPartAnus != null) + // this.bodyPartAnus.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Anus)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawBelly && SizedApparelUtility.CanDrawBelly(___pawn, flags)) + { + //if (this.bodyPartBelly != null) + // this.bodyPartBelly.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Belly)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + //Draw Pubic Hair + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawPubicHair && SizedApparelUtility.CanDrawPubicHair(___pawn, flags)) + { + if (this.bodyPartPubicHair != null) + this.bodyPartPubicHair.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.PubicHair)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawUdder && SizedApparelUtility.CanDrawUdder(___pawn, flags)) + { + //if (this.bodyPartUdder != null) + // this.bodyPartUdder.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Udder)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + + } + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawBreasts && SizedApparelUtility.CanDrawBreasts(___pawn, flags) && (SizedApparelSettings.drawSizedApparelBreastsOnlyWorn ? !SizedApparelUtility.isPawnNaked(___pawn, flags) : true)) + { + //if (this.bodyPartBreasts != null) + // this.bodyPartBreasts.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Breasts)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + + if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawPenis && SizedApparelUtility.CanDrawPenis(___pawn, flags, true)) + { + + if (SizedApparelSettings.hideBallOfFuta ? !Genital_Helper.is_futa(___pawn) : true) + { + /* + foreach (SizedApparelBodyPart b in this.bodyPartBalls) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + }*/ + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Balls)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + } + /* + foreach (SizedApparelBodyPart p in this.bodyPartPenises) + { + p.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + }*/ + foreach (var b in GetSizedApparelBodyParts(SizedApparelBodyPartOf.Penis)) + { + b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); + } + + }//Draw BodyParts + + //Draw Modular Apparel Parts... TODO...? Is it passible? + if (flags.FlagSet(PawnRenderFlags.Clothes)) + { + + } + + + + + } + + } + //not working public override void PostPostMake() @@ -257,22 +679,20 @@ namespace SizedApparel } */ - } - public void ClearHediffs() + } + public void ClearHediffs() { breastHediff = null; vaginaHediff = null; if(penisHediffs != null) penisHediffs.Clear(); anusHediff = null; - udderHediff = null; } public void ClearBreastCacheValue() { breastHediff = null; breastSeverity = -1; - breastSeverityCapToDraw = 1000; BreastSeverityCache = 0; } public void ClearPenisCacheValue() @@ -288,44 +708,34 @@ namespace SizedApparel } public void ClearGraphics(bool clearBreasts = true) { + //Since Injection of base body is now in Matarial. no need to keep + graphicSourceNaked = null; + graphicSourceFurCovered = null; + graphicSourceRotten = null; + hasGraphicUpdatedBefore = false; graphicbaseBodyNaked = null; graphicbaseBodyRotten = null; + graphicbaseBodyFurCovered = null; + return; //Clear BodyParts - if(clearBreasts) + if (clearBreasts && bodyPartBreasts!= null) bodyPartBreasts.Clear(); - bodyPartAnus.Clear(); - bodyPartBelly.Clear(); - bodyPartVagina.Clear(); + if(bodyPartAnus != null) + bodyPartAnus.Clear(); + if (bodyPartBelly != null) + bodyPartBelly.Clear(); + if (bodyPartVagina != null) + bodyPartVagina.Clear(); + if (bodyPartPubicHair != null) + bodyPartPubicHair.Clear(); + + foreach(var a in bodyAddons) + { + a.Clear(); + } - graphicBreasts = null; - graphicVagina = null; - graphicAnus = null; - if (graphicPenises == null) - graphicPenises = new List(); - else - graphicPenises.Clear(); - if (graphicBallsOfPenises == null) - graphicBallsOfPenises = new List(); - else - graphicBallsOfPenises.Clear(); - graphicBelly = null; - - graphicUdder = null; - graphicUdder_horny = null; - - graphicBreasts_horny = null; - graphicVagina_horny = null; - graphicAnus_horny = null; - if (graphicPenises_horny == null) - graphicPenises_horny = new List(); - else - graphicPenises_horny.Clear(); - if (graphicBalls_horny == null) - graphicBalls_horny = new List(); - else - graphicBalls_horny.Clear(); } public void ClearAll(bool clearGraphics = true) { @@ -340,12 +750,15 @@ namespace SizedApparel needToCheckApparelGraphicRecords = false; } - public void SetDirty(bool clearPawnGraphicSet = false) + public void SetDirty(bool clearPawnGraphicSet = false, bool dirtyHediff = true, bool dirtyApparel = true, bool dirtySkeleton = false, bool dirtyBodyAddons = false) { this.isDirty = true; + this.isHediffDirty = dirtyHediff; + this.isApparelDirty = dirtyApparel; + this.isSkeletonDirty = dirtySkeleton; + this.isBodyAddonDirty = dirtyBodyAddons; if (clearPawnGraphicSet) { - Pawn pawn = parent as Pawn; if (pawn == null) return; if (pawn.Drawer == null) @@ -353,42 +766,29 @@ namespace SizedApparel if (pawn.Drawer.renderer == null) return; pawn.Drawer.renderer.graphics.ClearCache(); - } } - - public void UpdateIfDirty() + public void UpdateRaceSettingData() { - - } - - public void UpdateBodyGraphics() - { - - } - public void UpdateSettingData() - { - Pawn pawn = parent as Pawn; if (pawn == null) return; var loc_raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == pawn.def.defName); - if (raceSetting == null) + if (loc_raceSetting == null) return; raceSetting = loc_raceSetting; } public void CheckAgeChanged() { - Pawn pawn = parent as Pawn; if (pawn == null) return; if (pawn.ageTracker == null) return; //TODO. Cleanup - UpdateSettingData(); + UpdateRaceSettingData(); if (raceSetting == null) return; @@ -398,49 +798,316 @@ namespace SizedApparel isDrawAge = false; } + public void FindAndApplyBodyGraphic(Pawn pawn, Graphic sourceGraphic, ref Graphic targetGraphicBaseBody, ref Graphic cachedSourceGraphic, string debugName) + { + const string baseBodyString = "_BaseBody"; + string baseBodyStringWithSex; + + if (SizedApparelSettings.useGenderSpecificTexture) + { + if (pawn.gender == Gender.Female) + { + baseBodyStringWithSex = baseBodyString + "F"; + } + else if (pawn.gender == Gender.Male) + { + baseBodyStringWithSex = baseBodyString + "M"; + } + else + { + baseBodyStringWithSex = baseBodyString; // + "N" //Does it need to add N? + } + } + else + baseBodyStringWithSex = baseBodyString; + string targetGraphicPath = null; + if (sourceGraphic != null) + { + //path = path.Insert(Math.Max(path.LastIndexOf('/'), 0), "/CustomPose/"+ customPose); + if (cachedSourceGraphic == null) + cachedSourceGraphic = sourceGraphic; + targetGraphicPath = cachedSourceGraphic.path; + + if (customPose != null) + targetGraphicPath = targetGraphicPath.Insert(Math.Max(targetGraphicPath.LastIndexOf('/'), 0), "/CustomPose/" + customPose); + + if (!targetGraphicPath.Contains(baseBodyString)) + { + if (SizedApparelSettings.useGenderSpecificTexture && pawn.gender != Gender.None) + { + if (targetGraphicBaseBody == null) + { + if (ContentFinder.Get((targetGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyStringWithSex, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else if (customPose != null) + { + targetGraphicPath = sourceGraphic.path; + if (ContentFinder.Get((targetGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyStringWithSex, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for "+ debugName + " Graphic: " + targetGraphicPath + baseBodyStringWithSex + "_south"); + } + } + } + } + if (targetGraphicBaseBody == null) + { + if (ContentFinder.Get((targetGraphicPath + baseBodyString + "_south"), false) != null) + { + // cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyString, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else if (customPose != null) + { + targetGraphicPath = sourceGraphic.path; + if (ContentFinder.Get((targetGraphicPath + baseBodyString + "_south"), false) != null) + { + //cachedSourceGraphic = sourceGraphic; + Shader shader = sourceGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + targetGraphicBaseBody = GraphicDatabase.Get(targetGraphicPath + baseBodyString, shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); + //sourceGraphic = targetGraphicBaseBody; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for " + debugName + " Graphic: " + targetGraphicPath + baseBodyString + "_south"); + } + + } + } + + } + else + targetGraphicBaseBody = sourceGraphic; + + } + + } + public void Update(bool cache = true, bool fromGraphicRecord = true, bool updateGraphics = true, bool CheckApparel = true) { + if (cache) + recentClothFlag = CheckApparel; + + + isDirty = false; bool flag = fromGraphicRecord; needToCheckApparelGraphicRecords = false; //flag = false; //TODO:fromGraphicRecord is forced not to do for a while. it will update later - hasUpdateBefore = true; - Pawn pawn = parent as Pawn; - if (pawn == null) + + + + UpdateRaceSettingData(); + + + + if (!hasUpdateBefore) + { + InitSkeleton(); + InitBodyAddons(); + hasUpdateBefore = true; + } + else + { + //check is bodytype changed + if(cachedBodytype != pawn.story?.bodyType?.defName) + { + isSkeletonDirty = true; + } + if (isSkeletonDirty) + { + InitSkeleton(); + + if (isBodyAddonDirty) + InitBodyAddons(); + else + ResetBodyAddonBoneLink(); + } + else + { + if (isBodyAddonDirty) + InitBodyAddons(); + } + } + + if (skeleton == null) + { + if (Find.CurrentMap != null) + return; + } + + + if (!SizedApparelUtility.CanApplySizedApparel(pawn)) return; + + + if (pubicHairDef == null) + { + pubicHairDef = SizedApparelUtility.GetRandomPubicHair(); + } + + if (SizedApparelSettings.Debug) Log.Message("[SizedApparel] Updating Component of " + pawn.Name); if (updateGraphics) { ClearGraphics(); - ClearHediffs(); + //ClearHediffs(); } + + + + //float breastSeverityCapped = 1000; + string bodyTypeDefName = null; + if (pawn.story != null) + bodyTypeDefName = pawn.story.bodyType?.defName; + float bellySeverity = 0; + + if (isHediffDirty) //Update Hediff Data + { + ClearHediffs(); + + + if(SizedApparelSettings.drawPenis || SizedApparelSettings.drawVagina || SizedApparelSettings.drawAnus) + { + BodyPartRecord genitalPart = Genital_Helper.get_genitalsBPR(pawn); + if (genitalPart != null) + { + var genitalList = Genital_Helper.get_PartsHediffList(pawn, genitalPart); + if (!genitalList.NullOrEmpty()) + { + if (SizedApparelSettings.Debug) + { + foreach (var g in genitalList) + { + Log.Message(" [SizedApparel] " + pawn.Name + "has hediff in genital (" + g.def.defName + ")"); + } + } + + //penisHediffs = genitalList.FindAll((Hediff h) => SizedApparelUtility.isPenis(h.def.defName)); + penisHediffs = genitalList.FindAll((Hediff h) => Genital_Helper.is_penis(h)); + //vaginaHediff = genitalList.FirstOrDefault((Hediff h) => SizedApparelUtility.isVagina(h.def.defName)); + vaginaHediff = genitalList.FirstOrDefault((Hediff h) => Genital_Helper.is_vagina(h)); + + } + } + } + + if (SizedApparelSettings.drawBelly) + { + //EggImplement as Pregnant + //need to Optimize... TODO... + List pregnancies = pawn.health?.hediffSet?.hediffs?.FindAll((Hediff h) => SizedApparelUtility.isPragnencyHediff(h) || SizedApparelUtility.isRJWEggHediff(h));//pregnancy and pregnant. has some issue with "pregnancy mood" + if (!pregnancies.NullOrEmpty()) + { + foreach (Hediff h in pregnancies) + { + //Set Labor Belly as Big Belly. + if (h.def == HediffDefOf.PregnancyLabor || h.def == HediffDefOf.PregnancyLaborPushing) + bellySeverity = Math.Max(bellySeverity, 1f); + else + bellySeverity = Math.Max(bellySeverity, h.Severity); + } + } + + //Licentia Lab Hediff + if (SizedApparelPatch.LicentiaActive) + { + Hediff cumflation = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("Cumflation")); + Hediff cumstuffed = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("Cumstuffed")); + bellySeverity += cumflation != null ? cumflation.Severity : 0; + bellySeverity += cumstuffed != null ? cumstuffed.Severity : 0; + } + + + } + + + + } + CheckAgeChanged(); - SizedApparelUtility.GetBreastSeverity(pawn, out breastSeverity, out breastHediff); + if (SizedApparelSettings.drawBreasts) + { + SizedApparelUtility.GetBreastSeverity(pawn, out breastSeverity, out breastHediff); + + } + if (breastHediff != null) { - BreastSeverityCache = 1000; - if (CheckApparel) + + //get nipple color from Menstruation. + if (SizedApparelPatch.MenstruationActive) + { + nippleColor = Patch_Menstruation.GetNippleColor(breastHediff); + } + + + + if (pawn.gender == Gender.Male && !SizedApparelSettings.ApplyApparelPatchForMale) + { + CheckApparel = false; + } + + + if (CheckApparel || this.isApparelDirty) + { hasUnsupportedApparel = SizedApparelUtility.hasUnSupportedApparelFromWornData(pawn, breastSeverity, breastHediff, true, flag); + + } else + { hasUnsupportedApparel = false; + + } //float validBreastTextureSeverity = SizedApparelUtility.GetBreastSeverityValidTextures(pawn, breastHediff); - if (hasUnsupportedApparel) - BreastSeverityCache = breastSeverity; + if (SizedApparelSettings.useBreastSizeCapForApparels) // && hasUnsupportedApparel + { + BreastSeverityCache = Math.Min(BreastSeverityCache, breastSeverity); + + } + else + { + BreastSeverityCache = 1000; + } + //if (SizedApparelSettings.useBreastSizeCapForApparels) //SizedApparelSettings.useBreastSizeCapForApparels //wip + // breastSeverityCapped = Math.Min(BreastSeverityCache, breastSeverityCapped); + + //float validBreastTextureSeverity = SizedApparelUtility.GetBreastSeverityValidTextures(pawn, breastHediff); //breast cache forApparel brests Check. This ignore variation! //SizedApparelMod.CheckAndLoadAlienRaces(); - - var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType?.defName, breastHediff.def.defName, "Breasts", SizedApparelUtility.BreastSeverityInt(breastHediff.Severity)); + + var key = new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType?.defName, breastHediff.def.defName, "Breasts", pawn.gender ,SizedApparelUtility.BreastSeverityInt(breastHediff.Severity)); var raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == key.raceName); - string customRaceName = null; - if (raceSetting != null && raceSetting.asHumanlike) - { - customRaceName = "Humanlike"; - } - float validBreastTextureSeverity = SizedApparelUtility.BreastSizeIndexToSeverity(SizedApparelsDatabase.GetSupportedBodyPartPath(key,true,"Breasts","Breasts", customRaceName).size); + + //TODO? Remove ValidBreastsTextureCheck... + float validBreastTextureSeverity = SizedApparelUtility.BreastSizeIndexToSeverity(SizedApparelsDatabase.GetSupportedBodyPartPath(key,true,"Breasts","Breasts").size); //if (validBreastTextureSeverity < -5 && SizedApparelSettings.alienRaceSettings.settings[key.raceName].asHumanlike)//old: SizedApparelSettings.UnsupportedRaceToUseHumanlike // validBreastTextureSeverity = SizedApparelUtility.GetBreastSeverityValidTextures(pawn, breastHediff, "Humanlike"); BreastSeverityCache = Math.Min(BreastSeverityCache, validBreastTextureSeverity); @@ -451,17 +1118,7 @@ namespace SizedApparel //since rjw race support's part name are too variation, not handling it. - BodyPartRecord genitalPart = Genital_Helper.get_genitalsBPR(pawn); - if (genitalPart != null) - { - var genitalList = Genital_Helper.get_PartsHediffList(pawn, genitalPart); - if (!genitalList.NullOrEmpty()) - { - penisHediffs = genitalList.FindAll((Hediff h) => SizedApparelUtility.isPenis(h.def.defName)); - vaginaHediff = genitalList.FirstOrDefault((Hediff h) => SizedApparelUtility.isVagina(h.def.defName)); - } - } var anusList = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)); if(!anusList.NullOrEmpty()) anusHediff = anusList.FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("anus")); @@ -474,100 +1131,308 @@ namespace SizedApparel if (updateGraphics) { - if (pawnRenderer != null) { //pawnRenderer.ResolveAllGraphics(); - //TODO. Move BodyTextureSearch to utility + + + //TODO Use Function To Make Clear Code + /* + FindAndApplyBodyGraphic(pawn, pawnRenderer.nakedGraphic, ref graphicbaseBodyNaked, ref graphicSourceNaked,"Naked"); + FindAndApplyBodyGraphic(pawn, pawnRenderer.rottingGraphic, ref graphicbaseBodyRotten, ref graphicSourceRotten, "Rotting"); + FindAndApplyBodyGraphic(pawn, pawnRenderer.nakedGraphic, ref graphicbaseBodyFurCovered, ref graphicSourceFurCovered, "FurCuvered"); + */ + const string baseBodyString = "_BaseBody"; + string baseBodyStringWithSex; + + if (SizedApparelSettings.useGenderSpecificTexture) + { + if (pawn.gender == Gender.Female) + { + baseBodyStringWithSex = baseBodyString + "F"; + } + else if (pawn.gender == Gender.Male) + { + baseBodyStringWithSex = baseBodyString + "M"; + } + else + { + baseBodyStringWithSex = baseBodyString; // + "N" //Does it need to add N? + } + } + else + baseBodyStringWithSex = baseBodyString; + string nakedGraphicPath = null; if (pawnRenderer.nakedGraphic != null) { //path = path.Insert(Math.Max(path.LastIndexOf('/'), 0), "/CustomPose/"+ customPose); + if(graphicSourceNaked == null) + graphicSourceNaked = pawnRenderer.nakedGraphic; + nakedGraphicPath = graphicSourceNaked.path; if (customPose != null) nakedGraphicPath = nakedGraphicPath.Insert(Math.Max(nakedGraphicPath.LastIndexOf('/'), 0), "/CustomPose/" + customPose); - else - nakedGraphicPath = pawnRenderer.nakedGraphic.path; - if (!nakedGraphicPath.Contains("_BaseBody")) + if (!nakedGraphicPath.Contains(baseBodyString)) { - if (ContentFinder.Get((nakedGraphicPath + "_BaseBody" + "_south"), false) != null) + if (SizedApparelSettings.useGenderSpecificTexture & pawn.gender != Gender.None) { - graphicNaked = pawnRenderer.nakedGraphic; - Shader shader = pawnRenderer.nakedGraphic.Shader; - //if (!ShaderUtility.SupportsMaskTex(shader)) - // shader = ShaderDatabase.CutoutSkinOverlay; - graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + "_BaseBody", shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); - //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; - } - else if(customPose != null) - { - nakedGraphicPath = pawnRenderer.nakedGraphic.path; - if (ContentFinder.Get((nakedGraphicPath + "_BaseBody" + "_south"), false) != null) + if (graphicbaseBodyNaked == null) { - graphicNaked = pawnRenderer.nakedGraphic; + if (ContentFinder.Get((nakedGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //graphicSourceNaked = pawnRenderer.nakedGraphic; + Shader shader = pawnRenderer.nakedGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; + } + else if (customPose != null) + { + nakedGraphicPath = pawnRenderer.nakedGraphic.path; + if (ContentFinder.Get((nakedGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + //graphicSourceNaked = pawnRenderer.nakedGraphic; + Shader shader = pawnRenderer.nakedGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for naked Graphic: " + nakedGraphicPath + baseBodyStringWithSex + "_south"); + } + } + } + } + if (graphicbaseBodyNaked == null) + { + if (ContentFinder.Get((nakedGraphicPath + baseBodyString + "_south"), false) != null) + { + // graphicSourceNaked = pawnRenderer.nakedGraphic; Shader shader = pawnRenderer.nakedGraphic.Shader; //if (!ShaderUtility.SupportsMaskTex(shader)) // shader = ShaderDatabase.CutoutSkinOverlay; - graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + "_BaseBody", shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyString, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; } - else + else if (customPose != null) { - if (SizedApparelSettings.Debug) - Log.Warning("[SizedApparel] Missing BaseBodyTexture for naked Graphic: " + nakedGraphicPath + "_BaseBody" + "_south"); - } + nakedGraphicPath = pawnRenderer.nakedGraphic.path; + if (ContentFinder.Get((nakedGraphicPath + baseBodyString + "_south"), false) != null) + { + //graphicSourceNaked = pawnRenderer.nakedGraphic; + Shader shader = pawnRenderer.nakedGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyNaked = GraphicDatabase.Get(nakedGraphicPath + baseBodyString, shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); + //pawnRenderer.nakedGraphic = graphicbaseBodyNaked; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for naked Graphic: " + nakedGraphicPath + baseBodyString + "_south"); + } + } } + } else graphicbaseBodyNaked = pawnRenderer.nakedGraphic; } + //Finding Texture Points + if (false && graphicbaseBodyNaked != null) + { + SizedApparelTexturePointDef PointsDef = DefDatabase.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphicbaseBodyNaked.path); + if (SizedApparelSettings.Debug && PointsDef != null) + { + Log.Message("[SizedApparel] : NakedBaseBody Texture Points Def Found : " + PointsDef.defName); + } + baseBodyNakedPoints = PointsDef; + } + else + baseBodyNakedPoints = null; string rottingGraphicPath = null; if (pawnRenderer.rottingGraphic != null) { + if (graphicSourceRotten == null) + graphicSourceRotten = pawnRenderer.rottingGraphic; + rottingGraphicPath = graphicSourceRotten.path; + if (customPose != null) rottingGraphicPath = rottingGraphicPath.Insert(Math.Max(rottingGraphicPath.LastIndexOf('/'), 0), "/CustomPose/" + customPose); - else - rottingGraphicPath = pawnRenderer.rottingGraphic.path; - if (!rottingGraphicPath.Contains("_BaseBody")) + if (!rottingGraphicPath.Contains(baseBodyString)) { - if (ContentFinder.Get((rottingGraphicPath + "_BaseBody" + "_south"), false) != null) + if (graphicbaseBodyRotten == null) { - graphicRotten = pawnRenderer.rottingGraphic; - Shader shader = pawnRenderer.rottingGraphic.Shader; - //if (!ShaderUtility.SupportsMaskTex(shader)) - // shader = ShaderDatabase.CutoutSkinOverlay; - graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + "_BaseBody", shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); - //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; - } - else if (customPose != null) - { - rottingGraphicPath = pawnRenderer.rottingGraphic.path; - if (ContentFinder.Get((rottingGraphicPath + "_BaseBody" + "_south"), false) != null) + if (ContentFinder.Get((rottingGraphicPath + baseBodyStringWithSex + "_south"), false) != null) { - graphicRotten = pawnRenderer.rottingGraphic; + //graphicSourceRotten = pawnRenderer.rottingGraphic; Shader shader = pawnRenderer.rottingGraphic.Shader; //if (!ShaderUtility.SupportsMaskTex(shader)) // shader = ShaderDatabase.CutoutSkinOverlay; - graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + "_BaseBody", shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; } - else + else if (customPose != null) { - if (SizedApparelSettings.Debug) - Log.Warning("[SizedApparel] Missing BaseBodyTexture for naked Graphic: " + rottingGraphicPath + "_BaseBody" + "_south"); + rottingGraphicPath = pawnRenderer.rottingGraphic.path; + if (ContentFinder.Get((rottingGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + graphicSourceRotten = pawnRenderer.rottingGraphic; + Shader shader = pawnRenderer.rottingGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for rotting Graphic: " + rottingGraphicPath + baseBodyStringWithSex + "_south"); + } + } + if (graphicbaseBodyRotten == null) + { + if (ContentFinder.Get((rottingGraphicPath + baseBodyString + "_south"), false) != null) + { + //graphicSourceRotten = pawnRenderer.rottingGraphic; + Shader shader = pawnRenderer.rottingGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyString, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; + } + else if (customPose != null) + { + rottingGraphicPath = pawnRenderer.rottingGraphic.path; + if (ContentFinder.Get((rottingGraphicPath + baseBodyString + "_south"), false) != null) + { + graphicSourceRotten = pawnRenderer.rottingGraphic; + Shader shader = pawnRenderer.rottingGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyRotten = GraphicDatabase.Get(rottingGraphicPath + baseBodyString, shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); + //pawnRenderer.rottingGraphic = graphicbaseBodyRotten; + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for rotting Graphic: " + rottingGraphicPath + baseBodyString + "_south"); + } + } } - } } else graphicbaseBodyRotten = pawnRenderer.rottingGraphic; } + //Finding Texture Points + if (false && graphicbaseBodyRotten != null) + { + SizedApparelTexturePointDef PointsDef = DefDatabase.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphicbaseBodyRotten.path); + if (SizedApparelSettings.Debug && PointsDef != null) + { + Log.Message("[SizedApparel] : RottenBaseBody Texture Points Def Found : " + PointsDef.defName); + } + baseBodyRottenPoints = PointsDef; + } + else + baseBodyRottenPoints = null; + + + string furCoveredGraphicPath = null; + if (pawnRenderer.furCoveredGraphic != null) + { + if (graphicSourceFurCovered == null) + graphicSourceFurCovered = pawnRenderer.furCoveredGraphic; + furCoveredGraphicPath = graphicSourceFurCovered.path; + + if (customPose != null) + furCoveredGraphicPath = furCoveredGraphicPath.Insert(Math.Max(furCoveredGraphicPath.LastIndexOf('/'), 0), "/CustomPose/" + customPose); + + if (!furCoveredGraphicPath.Contains(baseBodyString)) + { + if (graphicbaseBodyFurCovered == null) + { + if (ContentFinder.Get((furCoveredGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + Shader shader = pawnRenderer.furCoveredGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyFurCovered = GraphicDatabase.Get(furCoveredGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.furCoveredGraphic.drawSize, pawnRenderer.furCoveredGraphic.color, pawnRenderer.furCoveredGraphic.colorTwo, pawnRenderer.furCoveredGraphic.data); + } + else if (customPose != null) + { + furCoveredGraphicPath = pawnRenderer.furCoveredGraphic.path; + if (ContentFinder.Get((furCoveredGraphicPath + baseBodyStringWithSex + "_south"), false) != null) + { + graphicSourceFurCovered = pawnRenderer.furCoveredGraphic; + Shader shader = pawnRenderer.furCoveredGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyFurCovered = GraphicDatabase.Get(furCoveredGraphicPath + baseBodyStringWithSex, shader, pawnRenderer.furCoveredGraphic.drawSize, pawnRenderer.furCoveredGraphic.color, pawnRenderer.furCoveredGraphic.colorTwo, pawnRenderer.furCoveredGraphic.data); + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for furCovered Graphic: " + furCoveredGraphicPath + baseBodyStringWithSex + "_south"); + } + } + if (graphicbaseBodyFurCovered == null) + { + if (ContentFinder.Get((furCoveredGraphicPath + baseBodyString + "_south"), false) != null) + { + Shader shader = pawnRenderer.furCoveredGraphic.Shader; + //if (!ShaderUtility.SupportsMaskTex(shader)) + // shader = ShaderDatabase.CutoutSkinOverlay; + graphicbaseBodyFurCovered = GraphicDatabase.Get(furCoveredGraphicPath + baseBodyString, shader, pawnRenderer.furCoveredGraphic.drawSize, pawnRenderer.furCoveredGraphic.color, pawnRenderer.furCoveredGraphic.colorTwo, pawnRenderer.furCoveredGraphic.data); + } + else if (customPose != null) + { + furCoveredGraphicPath = pawnRenderer.furCoveredGraphic.path; + if (ContentFinder.Get((furCoveredGraphicPath + baseBodyString + "_south"), false) != null) + { + graphicSourceFurCovered = pawnRenderer.furCoveredGraphic; + Shader shader = pawnRenderer.furCoveredGraphic.Shader; + graphicbaseBodyFurCovered = GraphicDatabase.Get(furCoveredGraphicPath + baseBodyString, shader, pawnRenderer.furCoveredGraphic.drawSize, pawnRenderer.furCoveredGraphic.color, pawnRenderer.furCoveredGraphic.colorTwo, pawnRenderer.furCoveredGraphic.data); + + } + else + { + if (SizedApparelSettings.Debug) + Log.Warning("[SizedApparel] Missing BaseBodyTexture for naked Graphic: " + furCoveredGraphicPath + baseBodyString + "_south"); + } + } + } + } + } + else + graphicbaseBodyFurCovered = pawnRenderer.furCoveredGraphic; + + } + //Finding Texture Points + if (false && graphicbaseBodyFurCovered != null) + { + SizedApparelTexturePointDef PointsDef = DefDatabase.AllDefs.FirstOrDefault((SizedApparelTexturePointDef s) => s.Path == graphicbaseBodyFurCovered.path); + if (SizedApparelSettings.Debug && PointsDef != null) + { + Log.Message("[SizedApparel] : FurCoveredBaseBody Texture Points Def Found : " + PointsDef.defName); + } + baseBodyFurCoveredPoints = PointsDef; + } + else + baseBodyFurCoveredPoints = null; + /* //Try to find sized Body if it's valid @@ -664,361 +1529,323 @@ namespace SizedApparel //graphicBreasts = SizedApparelUtility.GetBodyPartGraphic(pawn, breastHediff, true, "Breasts", "Breasts"); //if(graphicBreasts == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) // graphicBreasts = SizedApparelUtility.GetBodyPartGraphic(pawn, breastHediff, true, "Breasts", "Breasts", false, true, "Humanlike"); - string bodyPartPath = null; - SizedApparelsDatabase.PathAndSize cachedPathAndSize; - float breastSeverityCapped = breastSeverity; - if (SizedApparelSettings.useBreastSizeCapForApparels) //SizedApparelSettings.useBreastSizeCapForApparels //wip - breastSeverityCapped = Math.Min(BreastSeverityCache, breastSeverityCapped); - - string bodyTypeDefName = null; - if (pawn.story != null) - bodyTypeDefName = pawn.story.bodyType?.defName; - - if(breastHediff != null) + if (SizedApparelSettings.drawBodyParts)//body parts update { - var breastvar = breastHediff.TryGetComp(); - - bodyPartBreasts.SetHediffData(breastHediff.def.defName, SizedApparelUtility.BreastSeverityInt(breastHediff.Severity), SizedApparelUtility.BreastSeverityInt(breastSeverityCapped), breastvar?.variation); - bodyPartBreasts.UpdateGraphic(); - - - } - - - - - - if (udderHediff != null) - { - var udderVar = udderHediff.TryGetComp(); - - bodyPartUdder.SetHediffData(udderHediff.def.defName, SizedApparelUtility.BreastSeverityInt(udderHediff.Severity), 1000, udderVar?.variation); - bodyPartUdder.UpdateGraphic(); - - } - else - bodyPartUdder.SetHediffData(null, -1); - - - - float bellySeverity = 0; - List pregnancies = pawn.health?.hediffSet?.hediffs?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("pregnancy")); - if (!pregnancies.NullOrEmpty()) - { - foreach (Hediff h in pregnancies) + if (SizedApparelSettings.drawBreasts) { - bellySeverity = Math.Max(bellySeverity, h.Severity); - } - } - /* - List eggs = pawn.health?.hediffSet?.hediffs?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("rjw") && h.def.defName.ToLower().Contains("egg")); - if (!eggs.NullOrEmpty()) - { - foreach (Hediff h in eggs) - { - bellySeverity = Math.Max(bellySeverity, h.Severity); - } - } - List mech = pawn.health?.hediffSet?.hediffs?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("rjw") && h.def.defName.ToLower().Contains("mech")); - if (!mech.NullOrEmpty()) - { - foreach (Hediff h in mech) - { - bellySeverity = Math.Max(bellySeverity, h.Severity); - } - } - List parasite = pawn.health?.hediffSet?.hediffs?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("parasite")); - if (!parasite.NullOrEmpty()) - { - foreach (Hediff h in parasite) - { - bellySeverity = Math.Max(bellySeverity, h.Severity); - } - }*/ - //Licentia Lab Hediff - if (SizedApparelPatch.LicentiaActive) - { - Hediff cumflation = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("Cumflation")); - Hediff cumstuffed = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDef.Named("Cumstuffed")); - bellySeverity += cumflation != null ? cumflation.Severity : 0; - bellySeverity += cumstuffed != null ? cumstuffed.Severity : 0; - } - - if (bellySeverity >= 0) - { - //var bellyVar = breastHediff.TryGetComp(); - string BellyVar = null; - - bodyPartBelly.SetHediffData("BellyBulge", SizedApparelUtility.PrivatePartSeverityInt(bellySeverity),1000, BellyVar); - bodyPartBelly.UpdateGraphic(); - /* - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, "BellyBulge", "Belly", SizedApparelUtility.PrivatePartSeverityInt(bellySeverity), false), false, "Belly", "BellyBulge"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) - { - if (cachedPathAndSize.isUnsupportedHumanlikePath) + if (breastHediff != null) { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - graphicBelly = GraphicDatabase.Get(bodyPartPath); + var breastvar = breastHediff.TryGetComp(); + + foreach(var addon in bodyAddons) + { + if(addon.bodyPartOf == SizedApparelBodyPartOf.Breasts) //Include SizedApparelBodyPartOf.Nipples + { + addon.SetHediffData(breastHediff.def.defName, SizedApparelUtility.BreastSeverityInt(breastHediff.Severity), SizedApparelUtility.BreastSeverityInt(BreastSeverityCache), breastvar?.variation); + addon.SetBone(skeleton?.FindBone("Breasts")); + addon.UpdateGraphic(); + } + + + if (SizedApparelPatch.MenstruationActive) + { + //Nipple Patch? + + + + + } + } + //bodyPartBreasts.SetHediffData(breastHediff.def.defName, SizedApparelUtility.BreastSeverityInt(breastHediff.Severity), SizedApparelUtility.BreastSeverityInt(breastSeverityCapped), breastvar?.variation); + //bodyPartBreasts.UpdateGraphic(); } else - graphicBelly = GraphicDatabase.Get(bodyPartPath); - }*/ - //if (graphicVagina_horny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - //{ - // bodyPartPath = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType.defName, vaginaHediff.def.defName, "Vagina", SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), true), false, "Vagina", "Vagina", "Humanlike").pathWithSizeIndex; - // if (bodyPartPath != null) - // graphicVagina_horny = GraphicDatabase.Get(bodyPartPath); - //} - } - - - - //graphicVagina = SizedApparelUtility.GetBodyPartGraphic(pawn, vaginaHediff, false, "Vagina", "Vagina"); - //if(graphicVagina == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - // graphicVagina = SizedApparelUtility.GetBodyPartGraphic(pawn, vaginaHediff, false, "Vagina", "Vagina", false, true,"Humanlike"); - if (vaginaHediff != null) - { - var vaginaVar = vaginaHediff.TryGetComp(); - bodyPartVagina.SetHediffData(vaginaHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity),1000, vaginaVar?.variation); - bodyPartVagina.UpdateGraphic(); - /* - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, vaginaHediff.def.defName, "Vagina", SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), false), false, "Vagina", "Vagina"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) - { - if (cachedPathAndSize.isUnsupportedHumanlikePath) { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - graphicVagina = GraphicDatabase.Get(bodyPartPath); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Breasts) + { + addon.SetHediffData(null, -1); + } + } } - else - graphicVagina = GraphicDatabase.Get(bodyPartPath); + + + + + } - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, vaginaHediff.def.defName, "Vagina", SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), true), false, "Vagina", "Vagina"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) + + + + + if (SizedApparelSettings.drawUdder) { - if (cachedPathAndSize.isUnsupportedHumanlikePath) + if (udderHediff != null) { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - graphicVagina_horny = GraphicDatabase.Get(bodyPartPath); + var udderVar = udderHediff.TryGetComp(); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Udder) + { + addon.SetHediffData(udderHediff.def.defName, SizedApparelUtility.BreastSeverityInt(udderHediff.Severity), 1000, udderVar?.variation); + addon.SetBone(skeleton?.FindBone("Udder")); + addon.UpdateGraphic(); + } + } + //bodyPartUdder.SetHediffData(udderHediff.def.defName, SizedApparelUtility.BreastSeverityInt(udderHediff.Severity), 1000, udderVar?.variation); + //bodyPartUdder.UpdateGraphic(); + } else - graphicVagina_horny = GraphicDatabase.Get(bodyPartPath); - }*/ - //if (graphicVagina_horny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - //{ - // bodyPartPath = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType.defName, vaginaHediff.def.defName, "Vagina", SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), true), false, "Vagina", "Vagina", "Humanlike").pathWithSizeIndex; - // if (bodyPartPath != null) - // graphicVagina_horny = GraphicDatabase.Get(bodyPartPath); - //} - } - else - bodyPartVagina.SetHediffData(null, -1); - - //graphicVagina_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, vaginaHediff, false, "Vagina", "Vagina", true); - //if(graphicVagina_horny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - // graphicVagina_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, vaginaHediff, false, "Vagina", "Vagina", true, true, "Humanlike"); - /* - graphicPenises.Clear(); - graphicPenises_horny.Clear(); - graphicBallsOfPenises.Clear(); - */ - - //TODO: Optimize - bodyPartPenises.Clear(); - bodyPartBalls.Clear(); - if (penisHediffs != null) - { + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Udder) + { + addon.SetHediffData(null, -1); + } + } + } - for (int i = 0; i < penisHediffs.Count; i++) + } + + + if (SizedApparelSettings.drawBelly) { - Hediff penisHediff = penisHediffs[i]; - float offsetX = 0; // right and left - float offsetZ = 0; // up and down - float t = (i + 1f) / (penisHediffs.Count + 1); - offsetX = Mathf.Lerp(-0.05f, 0.05f, t); - offsetZ = Mathf.Lerp(-0.02f, 0.02f, t); - - if (penisHediff == null) - continue; - - var penisVar = penisHediff.TryGetComp(); - - SizedApparelBodyPart penis = new SizedApparelBodyPart(pawn, "Penis", SizedApparelBodyPartOf.Penis, "Penis", false, false); - penis.SetDepthOffsets(0.0108f, 0.0025f, 0.0108f, 0.0108f); - penis.SetPositionOffsets(new Vector2(offsetX, 0), new Vector2(-offsetX, 0), new Vector2(offsetX, offsetZ), new Vector2(offsetX, -offsetZ)); - penis.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity),1000,penisVar?.variation); - penis.UpdateGraphic(); - bodyPartPenises.Add(penis); - SizedApparelBodyPart balls = new SizedApparelBodyPart(pawn, "Balls", SizedApparelBodyPartOf.Penis, "Penis", false, false, "Penis/Balls"); - balls.SetDepthOffsets(0.0096f, 0.0085f, 0.0096f, 0.0096f); - balls.SetPositionOffsets(new Vector2(offsetX, 0), new Vector2(-offsetX, 0), new Vector2(offsetX, offsetZ), new Vector2(offsetX, -offsetZ)); - balls.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); - balls.UpdateGraphic(); - bodyPartBalls.Add(balls); + if (bellySeverity >= 0) + { + //var bellyVar = breastHediff.GetComp(); + string BellyVar = null; + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Belly) + { + addon.SetHediffData("BellyBulge", SizedApparelUtility.PrivatePartSeverityInt(bellySeverity), 1000, BellyVar); + addon.SetBone(skeleton?.FindBone("Belly")); + addon.UpdateGraphic(); + } + } + //bodyPartBelly.SetHediffData("BellyBulge", SizedApparelUtility.PrivatePartSeverityInt(bellySeverity), 1000, BellyVar); + //bodyPartBelly.UpdateGraphic(); + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Belly) + { + addon.SetHediffData(null, -1); + } + } + } + + } + + + if (SizedApparelSettings.drawVagina) + { + if (vaginaHediff != null) + { + var vaginaVar = vaginaHediff.TryGetComp(); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Vagina) + { + addon.SetHediffData(vaginaHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), 1000, vaginaVar?.variation); + addon.SetBone(skeleton?.FindBone("Vagina")); + addon.UpdateGraphic(); + + } + } + //bodyPartVagina.SetHediffData(vaginaHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(vaginaHediff.Severity), 1000, vaginaVar?.variation); + //bodyPartVagina.UpdateGraphic(); + + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Vagina) + { + addon.SetHediffData(null, -1); + } + } + } + } + + if (SizedApparelSettings.drawPubicHair) + { + if (pubicHairDef != null && pubicHairDef.defName != "None") // pubicHairDef != null // for testing + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.PubicHair) + { + addon.SetHediffData(pubicHairDef.defName, 0, 1000, null); + addon.SetBone(skeleton?.FindBone("PubicHair")); + addon.UpdateGraphic(); + } + } + + //bodyPartPubicHair.SetHediffData(pubicHairDef.defName, 0, 1000, null); + //bodyPartPubicHair.UpdateGraphic(); + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.PubicHair) + { + addon.SetHediffData(null, -1); + } + } + } + } + + if (SizedApparelSettings.drawPenis) + { + //TODO: Optimize.... memory leak issue? + //bodyPartPenises.Clear(); + //bodyPartBalls.Clear(); + if (!penisHediffs.NullOrEmpty()) + { + var penisHediff = penisHediffs[0]; + + if (penisHediff != null) + { + var penisVar = penisHediff.TryGetComp(); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Penis) + { + addon.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + addon.SetBone(skeleton?.FindBone("Penis")); + addon.UpdateGraphic(); + } + if (addon.bodyPartOf == SizedApparelBodyPartOf.Balls) + { + addon.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + addon.SetBone(skeleton?.FindBone("Balls")); + addon.UpdateGraphic(); + } + } + } + else + { + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Penis) + { + addon.SetHediffData(null, -1); + } + if (addon.bodyPartOf == SizedApparelBodyPartOf.Balls) + { + addon.SetHediffData(null, -1); + } + } + } + + + // Multiple Penis Drawing. obsolte + /* + for (int i = 0; i < penisHediffs.Count; i++) + { + penisHediff = penisHediffs[i]; + float offsetX = 0; // right and left + float offsetZ = 0; // up and down + float t = (i + 1f) / (penisHediffs.Count + 1); + offsetX = Mathf.Lerp(-0.05f, 0.05f, t); + offsetZ = Mathf.Lerp(-0.02f, 0.02f, t); + + if (penisHediff == null) + continue; + + Bone penisBone = null; + Bone ballsBone = null; + if(skeleton != null) + { + penisBone = skeleton.FindBone("Penis"); + ballsBone = skeleton.FindBone("Balls"); + if (ballsBone == null) + ballsBone = penisBone; + } + + + + var penisVar = penisHediff.TryGetComp(); + + SizedApparelBodyPart penis = new SizedApparelBodyPart(pawn, this, "Penis", SizedApparelBodyPartOf.Penis, "Penis", false, false, null,ColorType.Skin, penisBone); + penis.SetDepthOffsets(0.0108f, 0.0025f, 0.0108f, 0.0108f); + penis.SetPositionOffsets(new Vector2(offsetX, 0), new Vector2(-offsetX, 0), new Vector2(offsetX, offsetZ), new Vector2(offsetX, -offsetZ)); + penis.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + penis.centeredTexture = true; // Test Bone + penis.UpdateGraphic(); + bodyPartPenises.Add(penis); + + SizedApparelBodyPart balls = new SizedApparelBodyPart(pawn, this, "Balls", SizedApparelBodyPartOf.Balls, "Penis", false, false, "Penis/Balls", ColorType.Skin, ballsBone); + balls.SetDepthOffsets(0.0096f, 0.0085f, 0.0096f, 0.0096f); + balls.SetPositionOffsets(new Vector2(offsetX, 0), new Vector2(-offsetX, 0), new Vector2(offsetX, offsetZ), new Vector2(offsetX, -offsetZ)); + balls.SetHediffData(penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), 1000, penisVar?.variation); + balls.centeredTexture = true; // Test Bone + balls.UpdateGraphic(); + bodyPartBalls.Add(balls); + */ + + } + } + + else + { + bodyPartPenises.Clear(); + bodyPartBalls.Clear(); + } + + if (SizedApparelSettings.drawAnus) + { /* - Graphic penisGraphic = SizedApparelUtility.GetBodyPartGraphic(pawn, penisHediff, false, "Penis", "Penis"); - if (penisGraphic == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - penisGraphic = SizedApparelUtility.GetBodyPartGraphic(pawn, penisHediff, false, "Penis", "Penis", false, true, "Humanlike"); + graphicAnus = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus"); + if (graphicAnus == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) + graphicAnus = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", false, true, "Humanlike"); - Graphic penisGraphicHorny = SizedApparelUtility.GetBodyPartGraphic(pawn, penisHediff, false, "Penis", "Penis", true); - if (penisGraphicHorny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - penisGraphicHorny = SizedApparelUtility.GetBodyPartGraphic(pawn, penisHediff, false, "Penis", "Penis", true, true, "Humanlike"); + graphicAnus_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", true); + if (graphicAnus_horny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) + graphicAnus_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", true, true, "Humanlike"); */ - /* - Graphic penisGraphic = null; - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, penisHediff.def.defName, "Penis", SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), false), false, "Penis", "Penis"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) + if (anusHediff != null) { - if (cachedPathAndSize.isUnsupportedHumanlikePath) + var anusVar = anusHediff.TryGetComp(); + foreach (var addon in bodyAddons) { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - penisGraphic = GraphicDatabase.Get(bodyPartPath); + if (addon.bodyPartOf == SizedApparelBodyPartOf.Anus) + { + addon.SetHediffData(anusHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(anusHediff.Severity), 1000, anusVar?.variation); + addon.SetBone(skeleton?.FindBone("Anus")); + addon.UpdateGraphic(); + } } - else - penisGraphic = GraphicDatabase.Get(bodyPartPath); - } - //if (penisGraphic == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - //{ - // bodyPartPath = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType.defName, penisHediff.def.defName, "Penis", SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), false), false, "Penis", "Penis", "Humanlike").pathWithSizeIndex; - // if (bodyPartPath != null) - // penisGraphic = GraphicDatabase.Get(bodyPartPath); - //} - Graphic penisGraphicHorny = null; - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, penisHediff.def.defName, "Penis", SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), true), false, "Penis", "Penis"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) - { - if (cachedPathAndSize.isUnsupportedHumanlikePath) - { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - penisGraphicHorny = GraphicDatabase.Get(bodyPartPath); - } - else - penisGraphicHorny = GraphicDatabase.Get(bodyPartPath); - } - //if (penisGraphicHorny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - //{ - // bodyPartPath = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType.defName, penisHediff.def.defName, "Penis", SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), true), false, "Penis", "Penis", "Humanlike").pathWithSizeIndex; - // if (bodyPartPath != null) - // penisGraphicHorny = GraphicDatabase.Get(bodyPartPath); - //} - - //balls are no need horny graphic. it wiil share sametime - - //Graphic ballGraphic = SizedApparelUtility.GetBodyPartGraphic(pawn, penisHediff, false, "Penis/Balls", "Penis", false); - //if (ballGraphic == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - // ballGraphic = SizedApparelUtility.GetBodyPartGraphic(pawn, penisHediff, false, "Penis/Balls", "Penis", false, true, "Humanlike"); - - - Graphic ballGraphic = null; - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, "Penis/Balls", penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), false), false, "Penis/Balls", "Penis"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) - { - if (cachedPathAndSize.isUnsupportedHumanlikePath) - { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - ballGraphic = GraphicDatabase.Get(bodyPartPath); - } - else - ballGraphic = GraphicDatabase.Get(bodyPartPath); - } - //if (ballGraphic == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - //{ - // bodyPartPath = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType.defName, "Penis/Balls", penisHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(penisHediff.Severity), false), false, "Penis/Balls", "Penis", "Humanlike").pathWithSizeIndex; - // if (bodyPartPath != null) - // ballGraphic = GraphicDatabase.Get(bodyPartPath); - //} - - - if (true)//penisGraphic != null - { - graphicPenises.Add(penisGraphic); - graphicPenises_horny.Add(penisGraphicHorny); - graphicBallsOfPenises.Add(ballGraphic); - } - */ - } - } - /* - graphicAnus = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus"); - if (graphicAnus == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - graphicAnus = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", false, true, "Humanlike"); - - graphicAnus_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", true); - if (graphicAnus_horny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - graphicAnus_horny = SizedApparelUtility.GetBodyPartGraphic(pawn, anusHediff, false, "Anus", "Anus", true, true, "Humanlike"); - */ - if(anusHediff != null) - { - var anusVar = anusHediff.TryGetComp(); - - bodyPartAnus.SetHediffData(anusHediff.def.defName, SizedApparelUtility.PrivatePartSeverityInt(anusHediff.Severity),1000, anusVar?.variation); - bodyPartAnus.UpdateGraphic(); - - /* - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, anusHediff.def.defName, "Anus", SizedApparelUtility.PrivatePartSeverityInt(anusHediff.Severity), false), false, "Anus", "Anus"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) - { - if (cachedPathAndSize.isUnsupportedHumanlikePath) - { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - graphicAnus = GraphicDatabase.Get(bodyPartPath); } else - graphicAnus = GraphicDatabase.Get(bodyPartPath); - } - //if (graphicAnus == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - //{ - // bodyPartPath = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType.defName, anusHediff.def.defName, "Anus", SizedApparelUtility.PrivatePartSeverityInt(anusHediff.Severity), false), false, "Anus", "Anus", "Humanlike").pathWithSizeIndex; - // if (bodyPartPath != null) - // graphicAnus = GraphicDatabase.Get(bodyPartPath); - //} - bodyPartPath = null; - cachedPathAndSize = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, bodyTypeDefName, anusHediff.def.defName, "Anus", SizedApparelUtility.PrivatePartSeverityInt(anusHediff.Severity), true), false, "Anus", "Anus"); - bodyPartPath = cachedPathAndSize.pathWithSizeIndex; - if (bodyPartPath != null) - { - if (cachedPathAndSize.isUnsupportedHumanlikePath) { - if (SizedApparelSettings.UnsupportedRaceToUseHumanlike && pawn.RaceProps.Humanlike) - graphicAnus_horny = GraphicDatabase.Get(bodyPartPath); + foreach (var addon in bodyAddons) + { + if (addon.bodyPartOf == SizedApparelBodyPartOf.Anus) + { + addon.SetHediffData(null, -1); + } + } } - else - graphicAnus_horny = GraphicDatabase.Get(bodyPartPath); } - //if (graphicAnus_horny == null && pawn.RaceProps.Humanlike && SizedApparelSettings.UnsupportedRaceToUseHumanlike) - //{ - // bodyPartPath = SizedApparelsDatabase.GetSupportedBodyPartPath(new SizedApparelsDatabase.BodyPartDatabaseKey(pawn.def.defName, pawn.story?.bodyType.defName, anusHediff.def.defName, "Anus", SizedApparelUtility.PrivatePartSeverityInt(anusHediff.Severity), true), false, "Anus", "Anus", "Humanlike").pathWithSizeIndex; - // if (bodyPartPath != null) - // graphicAnus_horny = GraphicDatabase.Get(bodyPartPath); - //}*/ + } - else - bodyPartAnus.SetHediffData(null, -1); - - - hasGraphicUpdatedBefore = true; } @@ -1028,6 +1855,9 @@ namespace SizedApparel cachedApparelGraphicRecord = new List(); hasUpdateBeforeSuccess = true; + this.isHediffDirty = false; + this.isApparelDirty = false; + this.isSkeletonDirty = false; } @@ -1089,6 +1919,10 @@ namespace SizedApparel { yield return bp; } + foreach (SizedApparelBodyPart bp in bodyAddons) + { + yield return bp; + } } public IEnumerable GetSizedApparelBodyParts(SizedApparelBodyPartOf targetPartOf, bool returnNullPart = false) { @@ -1110,7 +1944,7 @@ namespace SizedApparel public void SetPoseFromPoseSet(string poseSetName, bool autoUpdate = true, bool autoSetPawnGraphicDirty = false) { - if (poseSetName == null) + if (poseSetName.NullOrEmpty()) { ClearAllPose(autoUpdate, autoSetPawnGraphicDirty); return; diff --git a/source/SizedApparel/SizedApparelDef.cs b/source/SizedApparel/SizedApparelDef.cs new file mode 100644 index 0000000..524457a --- /dev/null +++ b/source/SizedApparel/SizedApparelDef.cs @@ -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 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 SizedTextures; + + public ApparelTexture GetApparelTexture(BodyTypeDef bodytype) + { + if(SizedTextures != null) + { + return SizedTextures.FirstOrDefault(a => a.bodytype == bodytype); + } + return null; + } + } + +} diff --git a/source/SizedApparel/SizedApparelMain.cs b/source/SizedApparel/SizedApparelMain.cs index aff6273..d9ce337 100644 --- a/source/SizedApparel/SizedApparelMain.cs +++ b/source/SizedApparel/SizedApparelMain.cs @@ -7,12 +7,12 @@ 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 @@ -20,8 +20,6 @@ namespace SizedApparel } - - [StaticConstructorOnStartup] [HarmonyPatch(typeof(Pawn_HealthTracker), "Notify_HediffChanged")] public class PawnHealthTrackerPatch @@ -30,16 +28,17 @@ namespace SizedApparel { if (___pawn == null) return; - var comp = ___pawn.TryGetComp(); + var comp = ___pawn.GetComp(); if (comp == null) return; if (hediff == null) return; - if (SizedApparelUtility.isRJWParts(hediff.def.defName))/// + + if (SizedApparelUtility.isRJWParts(hediff))/// { //comp.ClearAll(); //comp.Update(); - comp.SetDirty(); + comp.SetDirty(false,true,false); //already doing set dirty in hediffchange method. //___pawn.Drawer.renderer.graphics.SetApparelGraphicsDirty(); //PortraitsCache.SetDirty(___pawn); @@ -48,7 +47,7 @@ namespace SizedApparel } if (SizedApparelUtility.isBellyBulgeHediff(hediff)) { - comp.SetDirty(); + comp.SetDirty(false, true, false); return; } @@ -56,7 +55,18 @@ namespace SizedApparel } - + [StaticConstructorOnStartup] + [HarmonyPatch(typeof(Pawn_AgeTracker), "PostResolveLifeStageChange")] + public class PawnAgeTrackerPatch + { + public static void Postfix(Pawn ___pawn) + { + var comp = ___pawn.GetComp(); + if (comp == null) + return; + comp.SetDirty(false,false,false,true,true);//Apparel and Hediff will be changed with other reason. just set skeleton dirty. + } + } @@ -99,25 +109,49 @@ namespace SizedApparel - + [Obsolete] [StaticConstructorOnStartup] public class BodyPatch { - public static void SetBodyGraphic(Pawn pawn,bool drawClothFlag = true, bool fromGraphicRecord = true) + 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.TryGetComp(); + ApparelRecorderComp comp = pawn.GetComp(); 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; @@ -135,250 +169,120 @@ namespace SizedApparel { pawnRenderer.ResolveAllGraphics(); }*/ - if (pawnRenderer == null) return; - string nakedGraphicPath = pawnRenderer.nakedGraphic?.path; - //Log.Message("nakedGraphicPath"); - string rottingGraphicPath = pawnRenderer.rottingGraphic?.path; - //Log.Message("rottingGraphicPath"); - int currentBreastSizeIndex = 0; - float currentBreastSeverity = 0; - Graphic nakedGraphic; - Graphic rottingGraphic; - bool validNakedTexture = false; - bool validRottingTexture = false; - int offset = 0; - - - /* - * Obsolete - if (SizedApparelSettings.DontReplaceBodyTextureOnNude == true && SizedApparelUtility.isPawnNaked(pawn)) - { - if (SizedApparelSettings.Debug) - Log.Message("[Sized Apparel] " + pawn.Name + "is Naked. And DontReplaceBodyTextureOnNude Option is active. Changing Body Texture is cancled."); - 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.graphicNaked != null) - pawnRenderer.nakedGraphic = comp.graphicNaked.GetColoredVersion(pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo); - if (comp.graphicRotten != null) - pawnRenderer.rottingGraphic = comp.graphicRotten.GetColoredVersion(pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo); + 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 (false && comp.hasUnsupportedApparel && SizedApparelSettings.useUnsupportedBodyTexture)//old method. no need to do. - { - //Log.Message("hasUnsupportedApparel"); - // SetBodyGraphic(__instance, true); - if (true) - { - if ((ContentFinder.Get((nakedGraphicPath + "_UnsupportedApparel" + "_south"), false) != null)) - { - nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + "_Unsupported", pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - pawnRenderer.nakedGraphic = nakedGraphic; - } - if ((ContentFinder.Get((rottingGraphicPath + "_UnsupportedApparel" + "_south"), false) != null)) - { - rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + "_UnsupportedApparel", pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - pawnRenderer.rottingGraphic = rottingGraphic; - } + /* + 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.Get((pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null) + { + pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic = GraphicDatabase.Get(pawnGraphicSet.nakedGraphic.path + "_UnsupportedApparel", pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo); + validBody = true; + } + if (pawnGraphicSet.dessicatedGraphic != null) + if (ContentFinder.Get((pawnGraphicSet.dessicatedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null) + { + pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get(pawnGraphicSet.dessicatedGraphic.path + "_UnsupportedApparel", pawnGraphicSet.rottingGraphic.Shader, pawnGraphicSet.rottingGraphic.drawSize, pawnGraphicSet.rottingGraphic.color, pawnGraphicSet.rottingGraphic.colorTwo); + validDessicatedBody = true; + } } else { - if(!comp.hasUnsupportedApparel || SizedApparelUtility.isPawnNaked(pawn)) - { - - } - 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); - - return;//no need to replace full body texture anymore. - while (offset < SizedApparelUtility.size.Length) - { - string breastSeverityStringCache = SizedApparelUtility.BreastSeverityString(breastSeverity, offset, true, ref currentBreastSizeIndex, ref currentBreastSeverity); - //search bigger - //SizedApparelSettings.matchBodyTextureToMinimumApparelSize? currentBreastSizeIndex <= minSupportedBreasSizeIndex:true - if (validNakedTexture == false) + //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.Get(currentPath.Substring(0, currentPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null) { - if ((ContentFinder.Get((nakedGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= comp.breastSeverityCapToDraw : true) - { - nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + breastSeverityStringCache, pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - pawnRenderer.nakedGraphic = nakedGraphic; - validNakedTexture = true; - } - } + pawnGraphicSet.nakedGraphic = GraphicDatabase.Get((currentPath.Substring(0, currentPath.Length - "_UnsupportedApparel".Length)), pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo); + } - if (validRottingTexture == false) + if (pawnGraphicSet.dessicatedGraphic != null) + if (ContentFinder.Get(currentDessicatedPath.Substring(0, currentDessicatedPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null) { - if ((ContentFinder.Get((rottingGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= comp.breastSeverityCapToDraw : true) - { - rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + breastSeverityStringCache, pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - pawnRenderer.rottingGraphic = rottingGraphic; - validRottingTexture = true; - } - } + pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get((currentDessicatedPath.Substring(0, currentDessicatedPath.Length - "_UnsupportedApparel".Length)), pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo); + } - //search smaller - - breastSeverityStringCache = SizedApparelUtility.BreastSeverityString(breastSeverity, offset, false, ref currentBreastSizeIndex, ref currentBreastSeverity); - - if (validNakedTexture == false) - { - if ((ContentFinder.Get((nakedGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= comp.breastSeverityCapToDraw : true) - { - nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + breastSeverityStringCache, pawnRenderer.nakedGraphic.Shader, pawnRenderer.nakedGraphic.drawSize, pawnRenderer.nakedGraphic.color, pawnRenderer.nakedGraphic.colorTwo, pawnRenderer.nakedGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - pawnRenderer.nakedGraphic = nakedGraphic; - validNakedTexture = true; - } - } - } - if (validRottingTexture == false) - { - if ((ContentFinder.Get((rottingGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? SizedApparelUtility.BreastSizeIndexToSeverity(currentBreastSizeIndex) <= comp.breastSeverityCapToDraw : true) - { - rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + breastSeverityStringCache, pawnRenderer.rottingGraphic.Shader, pawnRenderer.rottingGraphic.drawSize, pawnRenderer.rottingGraphic.color, pawnRenderer.rottingGraphic.colorTwo, pawnRenderer.rottingGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - pawnRenderer.rottingGraphic = rottingGraphic; - validRottingTexture = true; - } - } - } - - if (validNakedTexture == true && validRottingTexture == true) - { - if (SizedApparelSettings.Debug) - Log.Message("[Sized Apparel] " + pawn.Name + "'s body texture has changed."); - break; - } - - offset++; - } - - } + }*/ + //pawnGraphicSet.ClearCache(); } - - - - return; - /* - 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.Get((pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null) - { - pawnGraphicSet.pawn.Drawer.renderer.graphics.nakedGraphic = GraphicDatabase.Get(pawnGraphicSet.nakedGraphic.path + "_UnsupportedApparel", pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo); - validBody = true; - } - if (pawnGraphicSet.dessicatedGraphic != null) - if (ContentFinder.Get((pawnGraphicSet.dessicatedGraphic.path + "_UnsupportedApparel" + "_south"), false) != null) - { - pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get(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.Get(currentPath.Substring(0, currentPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null) - { - pawnGraphicSet.nakedGraphic = GraphicDatabase.Get((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.Get(currentDessicatedPath.Substring(0, currentDessicatedPath.Length - "_UnsupportedApparel".Length) + "_south", false) != null) - { - pawnGraphicSet.dessicatedGraphic = GraphicDatabase.Get((currentDessicatedPath.Substring(0, currentDessicatedPath.Length - "_UnsupportedApparel".Length)), pawnGraphicSet.nakedGraphic.Shader, pawnGraphicSet.nakedGraphic.drawSize, pawnGraphicSet.nakedGraphic.color, pawnGraphicSet.nakedGraphic.colorTwo); - - } - - }*/ - //pawnGraphicSet.ClearCache(); } @@ -393,62 +297,7 @@ namespace SizedApparel } - - - - - - - - //for worn apparel - - - - - - - - - - - //[HarmonyPatch(typeof(ApparelGraphicRecordGetter), "TryGetGraphicApparel")] - /* - [StaticConstructorOnStartup] - [HarmonyPatch(typeof(PawnGraphicSet), "ResolveAllGraphics")] - class BodyfixForUnsupported - { - static void Prefix(PawnGraphicSet __instance) - { - if (!UnityData.IsInMainThread) - return; - if (__instance.pawn == null) - return; - var comp = __instance.pawn.TryGetComp(); - if (comp == null) - return; - comp.ClearAll(); - //comp.Update(); - } - }*/ - - - /* -[StaticConstructorOnStartup] -[HarmonyPatch(typeof(PawnGenerator), "GeneratePawn", typeof(PawnGenerationRequest) )] -class GeneratePawnPatch -{ - Type[] types = { typeof(PawnGenerationRequest) }; - static void Postfix(PawnGenerationRequest request, Pawn __result) - { - if (!UnityData.IsInMainThread) - return; - if (__result != null) - { - //__result.Drawer.renderer.graphics.ResolveAllGraphics(); - __result.Drawer.renderer.graphics.ResolveApparelGraphics(); - } - } -}*/ + [Obsolete] [StaticConstructorOnStartup] //[HarmonyPatch(typeof(Pawn_ApparelTracker), "ExposeData")] class ApparelTrackerExposePatch @@ -463,7 +312,7 @@ class GeneratePawnPatch return; if (Scribe.mode == LoadSaveMode.PostLoadInit) { - ApparelRecorderComp comp = __instance.pawn.TryGetComp(); + ApparelRecorderComp comp = __instance.pawn.GetComp(); if (comp == null) return; if (!comp.hasUpdateBefore) @@ -498,7 +347,7 @@ class GeneratePawnPatch //GetBreastSeverity(__instance.pawn, out breastSeverity, out breastHediff); //bool flag = hasUnSupportedApparel(__instance.pawn, breastSeverity, breastHediff); - ApparelRecorderComp comp = __instance.pawn.TryGetComp(); + ApparelRecorderComp comp = __instance.pawn.GetComp(); if (comp != null) { //comp.ClearBreastCacheValue(); @@ -514,7 +363,7 @@ class GeneratePawnPatch //comp.Update(true, false);//TODO: Coverd But No Graphic may cause Big Issue!!! //comp.Update(true, true); - comp.SetDirty(); + comp.SetDirty(false,false,true); /* if (SizedApparelSettings.drawBodyParts)//old:SizedApparelSettings.useBodyTexture @@ -612,6 +461,8 @@ class GeneratePawnPatch } + + //Apparel Graphic Texture injection [StaticConstructorOnStartup] [HarmonyPatch(typeof(ApparelGraphicRecordGetter), "TryGetGraphicApparel")] [HarmonyBefore(new string[]{"QualityOfBuilding"})] @@ -628,16 +479,15 @@ class GeneratePawnPatch if (bodyType == null) return; - if (apparel.Wearer != null) { //rec = new ApparelGraphicRecord(null, null); - var comp = apparel.Wearer.TryGetComp(); + var comp = apparel.Wearer.GetComp(); //if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize) // BreastSeverity = comp.BreastSeverityCache; - int currentBreastSizeIndex = 0; - float currentBreastSeverity = -1; + //int currentBreastSizeIndex = 0; + //float currentBreastSeverity = -1; //int minSupportedBreastSizeIndex = 1000; //float minSupportedBreastSeverity = 1000; @@ -679,18 +529,19 @@ class GeneratePawnPatch }*/ } + //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); - - if (comp.hasUnsupportedApparel == false && (comp.bodyPartBreasts.bodyPartGraphic !=null || comp.bodyPartBreasts.bodyPartGraphicHorny != null))//(comp.graphicBreasts!=null|| comp.graphicBreasts_horny != null) + //Log.Message("3"); + if (comp.hasUnsupportedApparel == false)//&& (comp.bodyPartBreasts.bodyPartGraphic !=null || comp.bodyPartBreasts.bodyPartGraphicHorny != null) { Graphic sizedGraphic = null; - - string resultPath = SizedApparelsDatabase.GetSupportedApparelSizedPath(new SizedApparelsDatabase.SizedApparelDatabaseKey(rec.graphic.path, apparel?.Wearer?.def.defName, breastHediff.def.defName, apparel?.Wearer?.story?.bodyType?.defName, SizedApparelUtility.BreastSeverityInt(BreastSeverity))).pathWithSizeIndex; + //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); @@ -727,424 +578,17 @@ class GeneratePawnPatch { return; } - var comp = __instance.pawn.TryGetComp(); + var comp = __instance.pawn.GetComp(); if (comp == null) return; //comp.ClearAll(false); //comp.needToCheckApparelGraphicRecords = true; - comp.SetDirty(); + 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))] - //[HarmonyPatch("ResolveApparelGraphics")] - //[HarmonyBefore(new string[] { "rimworld.erdelf.alien_race.main" })] - [StaticConstructorOnStartup] - //[HarmonyPatch(typeof(PawnGraphicSet), "ResolveApparelGraphics")] - class ApparelFix - { - [Obsolete] - public static bool old_old_Prefix(Apparel apparel, BodyTypeDef bodyType, ApparelGraphicRecord rec, ref bool __result) - { - - bool result = true; - bool flag = apparel.def.apparel.wornGraphicPath.NullOrEmpty(); - if (flag) - { - string text = apparel.def.apparel.wornGraphicPath + "_" + bodyType.defName + "_3"; - - bool flag2 = false; - - flag2 = ContentFinder.Get(text + "_north", true) == null || ContentFinder.Get(text + "_east", true) == null || ContentFinder.Get(text + "_south", true) == null; - if (flag2) - { - bool flag3 = apparel.def.apparel.LastLayer != ApparelLayerDefOf.Overhead; - if (flag3) - { - //text = apparel.def.apparel.wornGraphicPath + "_Female"; - Graphic graphic = GraphicDatabase.Get(text, ShaderDatabase.Cutout, apparel.def.graphicData.drawSize, apparel.DrawColor); - rec = new ApparelGraphicRecord(graphic, apparel); - result = false; - __result = true; - } - } - else - { - bool flag4 = apparel.def.apparel.LastLayer == ApparelLayerDefOf.Overhead; - if (flag4) - { - Graphic graphic2 = GraphicDatabase.Get(text, ShaderDatabase.Cutout, apparel.def.graphicData.drawSize, apparel.DrawColor); - rec = new ApparelGraphicRecord(graphic2, apparel); - result = false; - __result = true; - } - } - } - return result; - } - - [Obsolete] - static void old_Postfix(ref PawnGraphicSet __instance) - { - if (Current.Game.World == null) - return; - - // Log.Message("ResolveGraphic"); - if (__instance.pawn.RaceProps.Humanlike) - { - //Log.Message("ResolveApparelGraphics"); - //__instance.pawn.health.hediffSet.HasHediff(Hediff ,BodyPartRecord ,false); - //__instance.pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined, null, null).Any((BodyPartRecord bpr) => bpr.untranslatedCustomLabel == label || bpr.def.defName == label); - - var comp = __instance.pawn.TryGetComp(); - if (comp != null) - { - bool flag = false; - float BreastSeverity = -1; - Hediff breastHediff = null; - SizedApparelUtility.GetBreastSeverity(__instance.pawn, out BreastSeverity, out breastHediff); - //Log.Message("hasUnsupported? : "+comp.hasUnsupportedApparel.ToString()); - - if (true) //(!comp.hasUpdateBefore) - { - //Log.Message("UpdateFirst"); - /* - if (comp.havingSex) - comp.hasUnsupportedApparel = SizedApparelUtility.hasUnSupportedApparel(__instance.pawn, BreastSeverity, breastHediff); - else - comp.hasUnsupportedApparel = SizedApparelUtility.hasUnSupportedApparelFromWornData(__instance.pawn, BreastSeverity, breastHediff); - */ - comp.hasUnsupportedApparel = SizedApparelUtility.hasUnSupportedApparelFromWornData(__instance.pawn, BreastSeverity, breastHediff); - comp.hasUpdateBefore = true; - } - if (comp.hasUnsupportedApparel == false) - { - int currentBreastSizeIndex = 0; - int minSupportedBreastSizeIndex = 1000; - float currentBreastSeverity = 0; - float minSupportedBreastSeverity = 1000; - List newAgr = new List(); - foreach (ApparelGraphicRecord agr in __instance.apparelGraphics)//ApparelGraphicRecord agr in curAgr - { - /* - if(apparel != null) - { - ApparelGraphicRecord rec; - if (apparel.def.apparel.wornGraphicPath.NullOrEmpty()) - { - rec = new ApparelGraphicRecord(null, null); - newAgr.Add(rec); - continue; - } - string path; - if (apparel.def.apparel.LastLayer == ApparelLayerDefOf.Overhead || apparel.def.apparel.wornGraphicPath == BaseContent.PlaceholderImagePath) - { - path = apparel.def.apparel.wornGraphicPath; - } - else - { - path = apparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; - } - Shader shader = ShaderDatabase.Cutout; - if (apparel.def.apparel.useWornGraphicMask) - { - shader = ShaderDatabase.CutoutComplex; - } - Graphic graphic = GraphicDatabase.Get(path, shader, apparel.def.graphicData.drawSize, apparel.DrawColor); - rec = new ApparelGraphicRecord(graphic, apparel); - //string endstring = (gender == Gender.Female && (ContentFinder.Get(apparel.def.apparel.wornGraphicPath + "_" + bodyType.defName + "_fem_south", false) != null)) ? "_fem" : null; - //string path = (apparel.def.apparel.LastLayer != ApparelLayerDefOf.Overhead) ? (apparel.def.apparel.wornGraphicPath + "_" + bodyType.defName + endstring) : apparel.def.apparel.wornGraphicPath; - //path = agr.sourceApparel.def.graphic.path; - - //var path = agr.graphic.path; - var ExtraPath = path; - string targetPath; - } - */ - - - string path; - string extraPath; - //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; - path = agr.graphic.path; - if (breastHediff != null) - { - extraPath = path + "_" + breastHediff.def.defName; - - } - else - extraPath = path; - - - int offset = 0; - - - bool validTexture = false; - Graphic graphic = null; - bool findBigger = true; // if false : search smaller first - while (offset < SizedApparelUtility.size.Length) - { - if (breastHediff != null) - { - if (ContentFinder.Get((extraPath + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity) + "_south"), false) != null) // checking special texture like udder - { - minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); - minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); - graphic = new Graphic(); - graphic = GraphicDatabase.Get(extraPath + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity), agr.graphic.Shader, agr.graphic.drawSize, agr.graphic.color, agr.graphic.colorTwo, agr.graphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - validTexture = true; - //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Found"); - break; - } - //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Not Found."); - } - - if ((ContentFinder.Get((path + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity) + "_south"), false) != null)) - { - minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); - minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); - graphic = GraphicDatabase.Get(path + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity), agr.graphic.Shader, agr.graphic.drawSize, agr.graphic.color, agr.graphic.colorTwo, agr.graphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Found"); - break; - } - //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. Try bigger Texture."); - offset++; - - } - - if (validTexture == false) - { - //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. try smaller instead of bigger ."); - } - - - if (validTexture == false) - { - offset = 0; - while (offset < SizedApparelUtility.size.Length) - { - if (breastHediff != null) - { - if (ContentFinder.Get((extraPath + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity) + "_south"), false) != null) // checking special texture like udder - { - minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); - minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); - graphic = new Graphic(); - graphic = GraphicDatabase.Get(extraPath + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity), agr.graphic.Shader, agr.graphic.drawSize, agr.graphic.color, agr.graphic.colorTwo, agr.graphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - validTexture = true; - //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Found"); - break; - } - //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); - } - - if ((ContentFinder.Get((path + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity) + "_south"), false) != null)) - { - minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); - minSupportedBreastSeverity = Math.Min(currentBreastSeverity, minSupportedBreastSeverity); - graphic = GraphicDatabase.Get(path + SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentBreastSizeIndex, ref currentBreastSeverity), agr.graphic.Shader, agr.graphic.drawSize, agr.graphic.color, agr.graphic.colorTwo, agr.graphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - break; - } - //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Not Found. Try smaller Texture."); - offset++; - } - } - - if (validTexture == false) - { - //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. try smaller instead of bigger ."); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //graphic = GraphicDatabase.Get(path, ShaderDatabase.Cutout, agr.graphic.drawSize, agr.graphic.color); - graphic = agr.graphic; - } - - - ApparelGraphicRecord _Agr = new ApparelGraphicRecord(graphic, agr.sourceApparel); - - //_Agr.sourceApparel. - newAgr.Add(_Agr); - - - } - __instance.apparelGraphics = newAgr; - comp.breastSeverityCapToDraw = minSupportedBreastSeverity; - - if (SizedApparelSettings.useBodyTexture == true) - { - //Log.Message("useBodyTexture"); - if (__instance.nakedGraphic == null || __instance.rottingGraphic == null) - { - __instance.ResolveAllGraphics(); - return; - } - string nakedGraphicPath = __instance.nakedGraphic.path; - //Log.Message("nakedGraphicPath"); - string rottingGraphicPath = __instance.rottingGraphic.path; - //Log.Message("rottingGraphicPath"); - - Graphic nakedGraphic; - Graphic rottingGraphic; - bool validNakedTexture = false; - bool validRottingTexture = false; - int offset = 0; - if (SizedApparelSettings.DontReplaceBodyTextureOnNude == true && SizedApparelUtility.isPawnNaked(__instance.pawn)) - return; - if (comp.hasUnsupportedApparel && SizedApparelSettings.useUnsupportedBodyTexture) - { - //Log.Message("hasUnsupportedApparel"); - // SetBodyGraphic(__instance, true); - if (true) - { - if ((ContentFinder.Get((nakedGraphicPath + "_UnsupportedApparel" + "_south"), false) != null)) - { - nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + "_Unsupported", __instance.nakedGraphic.Shader, __instance.nakedGraphic.drawSize, __instance.nakedGraphic.color, __instance.nakedGraphic.colorTwo, __instance.nakedGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - __instance.nakedGraphic = nakedGraphic; - } - if ((ContentFinder.Get((rottingGraphicPath + "_UnsupportedApparel" + "_south"), false) != null)) - { - rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + "_UnsupportedApparel", __instance.rottingGraphic.Shader, __instance.rottingGraphic.drawSize, __instance.rottingGraphic.color, __instance.rottingGraphic.colorTwo, __instance.rottingGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - __instance.rottingGraphic = rottingGraphic; - } - - } - } - else - { - while (offset < SizedApparelUtility.size.Length) - { - string breastSeverityStringCache = SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, true, ref currentBreastSizeIndex, ref currentBreastSeverity); - //search bigger - //SizedApparelSettings.matchBodyTextureToMinimumApparelSize? currentBreastSizeIndex <= minSupportedBreasSizeIndex:true - if (validNakedTexture == false) - { - if ((ContentFinder.Get((nakedGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? currentBreastSizeIndex <= minSupportedBreastSizeIndex : true) - { - nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + breastSeverityStringCache, __instance.nakedGraphic.Shader, __instance.nakedGraphic.drawSize, __instance.nakedGraphic.color, __instance.nakedGraphic.colorTwo, __instance.nakedGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - __instance.nakedGraphic = nakedGraphic; - validNakedTexture = true; - } - } - } - if (validRottingTexture == false) - { - if ((ContentFinder.Get((rottingGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? currentBreastSizeIndex <= minSupportedBreastSizeIndex : true) - { - rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + breastSeverityStringCache, __instance.rottingGraphic.Shader, __instance.rottingGraphic.drawSize, __instance.rottingGraphic.color, __instance.rottingGraphic.colorTwo, __instance.rottingGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - __instance.rottingGraphic = rottingGraphic; - validRottingTexture = true; - } - } - } - - //search smaller - - breastSeverityStringCache = SizedApparelUtility.BreastSeverityString(BreastSeverity, offset, false, ref currentBreastSizeIndex, ref currentBreastSeverity); - - if (validNakedTexture == false) - { - if ((ContentFinder.Get((nakedGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? currentBreastSizeIndex <= minSupportedBreastSizeIndex : true) - { - nakedGraphic = GraphicDatabase.Get(nakedGraphicPath + breastSeverityStringCache, __instance.nakedGraphic.Shader, __instance.nakedGraphic.drawSize, __instance.nakedGraphic.color, __instance.nakedGraphic.colorTwo, __instance.nakedGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - __instance.nakedGraphic = nakedGraphic; - validNakedTexture = true; - } - } - } - if (validRottingTexture == false) - { - if ((ContentFinder.Get((rottingGraphicPath + breastSeverityStringCache + "_south"), false) != null)) - { - if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize ? currentBreastSizeIndex <= minSupportedBreastSizeIndex : true) - { - rottingGraphic = GraphicDatabase.Get(rottingGraphicPath + breastSeverityStringCache, __instance.rottingGraphic.Shader, __instance.rottingGraphic.drawSize, __instance.rottingGraphic.color, __instance.rottingGraphic.colorTwo, __instance.rottingGraphic.data); - //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); - //validTexture = true; - //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); - __instance.rottingGraphic = rottingGraphic; - validRottingTexture = true; - } - } - } - - if (validNakedTexture == true && validRottingTexture == true) - break; - - offset++; - } - } - - - - } - } - //SetBodyGraphic(__instance, comp.hasUnsupportedApparel); - } - - - } - - return; - } - - /* - static void Prefix(ref PawnGraphicSet __instance) - { - if (!UnityData.IsInMainThread) - return; - if (__instance.pawn == null) - return; - var comp = __instance.pawn.TryGetComp(); - if (comp == null) - return; - comp.ClearAll(); - comp.Update(); - }*/ - - static void oldPostfix(ref PawnGraphicSet __instance) - { - if (!UnityData.IsInMainThread) - return; - if (false&&SizedApparelSettings.useBodyTexture)//TODO - { - BodyPatch.SetBodyGraphic(__instance.pawn); - } - } - - } - @@ -1169,10 +613,10 @@ class GeneratePawnPatch { public static void Prefix(CompRottable __instance) { - var comp = __instance.parent.TryGetComp(); + var comp = __instance.parent.GetComp(); if (comp == null) return; - comp.SetDirty(); + comp.SetDirty(false,false,false); // should clear graphicSet....? } } @@ -1182,7 +626,7 @@ class GeneratePawnPatch { public static void Postfix(Pawn_AgeTracker __instance, Pawn ___pawn) { - var comp = ___pawn.TryGetComp(); + var comp = ___pawn.GetComp(); if (comp == null) return; comp.CheckAgeChanged(); @@ -1238,24 +682,54 @@ class GeneratePawnPatch } } //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.TryGetComp(); + ApparelRecorderComp apparelRecorder = ___pawn.GetComp(); 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); + //var item = apparelRecorder.currentCustomPose.headOffset.FirstOrDefault(b => b.bodyType == ___pawn.story.bodyType.label); + //__result += item.offsets.GetOffset(rotation); } } } - //RimWorld 1.3 - [HarmonyPatch(typeof(PawnRenderer), "DrawPawnBody")] + [HarmonyPatch(typeof(Pawn_GeneTracker), "Notify_GenesChanged")] + public class GeneChangePatch + { + public static void Postfix(Pawn_GeneTracker __instance, GeneDef addedOrRemovedGene) + { + ApparelRecorderComp apparelRecorder = __instance.pawn.GetComp(); + if (apparelRecorder == null) + return; + if (addedOrRemovedGene.bodyType!= null) + { + /* + apparelRecorder.Update(); + if (SizedApparelSettings.drawBodyParts) + BodyPatch.SetBodyGraphic(__instance.pawn); + */ + apparelRecorder.SetDirty(false,false,false,true); + return; + } + if(addedOrRemovedGene.graphicData != null) + { + if(addedOrRemovedGene.graphicData.fur != null) + { + apparelRecorder.SetDirty(false,false,false,true); + return; + } + } + } + } + + //RimWorld 1.3 , 1.4 + [HarmonyPatch(typeof(PawnRenderer), "DrawPawnBody")] public class DrawPawnBodyPatch { static MethodInfo overrideMatMethod = AccessTools.Method(typeof(PawnRenderer), "OverrideMaterialIfNeeded"); @@ -1267,7 +741,7 @@ class GeneratePawnPatch return; if (___pawn == null) return; - ApparelRecorderComp apparelRecorder = ___pawn.TryGetComp(); + ApparelRecorderComp apparelRecorder = ___pawn.GetComp(); if (apparelRecorder == null) return; //!flags.FlagSet(PawnRenderFlags.StylingStation)&& @@ -1284,10 +758,10 @@ class GeneratePawnPatch { //apparelRecorder.isDirty is allways true - if (false)//StylingStation Doesn't work with cache! patch in postfix + if (true)//StylingStation Doesn't work with cache! patch in postfix { - apparelRecorder.Update(true, true, true, flags.FlagSet(PawnRenderFlags.Clothes)); - //Log.Message(" [Sized Apparel]StylingStation:: isDirty? : " + apparelRecorder.isDirty); + 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); } @@ -1301,6 +775,7 @@ class GeneratePawnPatch 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); } @@ -1311,15 +786,19 @@ class GeneratePawnPatch //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.TryGetComp(); + ApparelRecorderComp apparelRecorder = ___pawn.GetComp(); if (apparelRecorder == null) return; Quaternion quaternion = Quaternion.AngleAxis(angle, Vector3.up); @@ -1332,6 +811,7 @@ class GeneratePawnPatch string defName = __instance.graphics.pawn.def.defName; + /* Shader shader = ___pawn.Drawer.renderer.graphics.nakedGraphic.Shader; Color skinColor = Color.white; Color skinColor2 = Color.white; @@ -1349,8 +829,19 @@ class GeneratePawnPatch if (!ShaderUtility.SupportsMaskTex(shader)) shader = ShaderDatabase.CutoutSkinOverlay; skinColor = ___pawn.Drawer.renderer.graphics.rottingGraphic.Color; - skinColor2 = ___pawn.Drawer.renderer.graphics.nakedGraphic.ColorTwo; - } + 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; + }*/ @@ -1361,289 +852,170 @@ class GeneratePawnPatch } //breasts are only rendered when all of worn apparels are supported or nude. - if (apparelRecorder.isDrawAge && (!flags.FlagSet(PawnRenderFlags.Clothes) || !apparelRecorder.hasUnsupportedApparel || SizedApparelUtility.isPawnNaked(___pawn))) //TODO : Move it to CanDraw + if (__instance.graphics.furCoveredGraphic == null) { - if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawVagina && SizedApparelUtility.CanDrawVagina(___pawn, flags)) - { - if(apparelRecorder.bodyPartVagina != null) - apparelRecorder.bodyPartVagina.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); - /* - //Draw Vagina. AllwaysDraw - Vector3 vector = rootLoc; - if (facing == Rot4.North) - vector.y += 0.0100f;//not sure what to do - else - vector.y += 0.0088f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicVagina_horny; - if (graphic == null) - graphic = apparelRecorder.graphicVagina; - if (graphic != null) - { - Material mat; - if (!flags.FlagSet(PawnRenderFlags.Cache)) - { - graphic = graphic.GetColoredVersion(graphic.Shader, skinColor, skinColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - graphic = graphic.GetColoredVersion(shader, skinColor, skinColor2); - vector.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); - }*/ - } - if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawAnus && SizedApparelUtility.CanDrawAnus(___pawn, flags)) - { - if (apparelRecorder.bodyPartAnus != null) - apparelRecorder.bodyPartAnus.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); - /* - //Draw Anus. //Allways draw - Vector3 vector = rootLoc; - if (facing == Rot4.North) - vector.y += 0.0105f;//not sure what to do - else - vector.y += 0.0093f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicAnus_horny; - if (graphic == null) - graphic = apparelRecorder.graphicAnus; - if (graphic != null) - { - Material mat; - if (!flags.FlagSet(PawnRenderFlags.Cache)) - { - graphic = graphic.GetColoredVersion(graphic.Shader, skinColor, skinColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - graphic = graphic.GetColoredVersion(shader, skinColor, skinColor2); - vector.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); - }*/ - } - - if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawBelly && SizedApparelUtility.CanDrawBelly(___pawn, flags)) - { - if (apparelRecorder.bodyPartBelly != null) - apparelRecorder.bodyPartBelly.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); - /* - //Draw Belly. Need Complex Hiding Calculation - Vector3 vector = rootLoc; - if (facing == Rot4.North) - vector.y += 0.0002f;//not sure what to do - else - vector.y += 0.0098f; - Graphic graphic = apparelRecorder.graphicBelly; - if (graphic != null) - { - Material mat; - if (!flags.FlagSet(PawnRenderFlags.Cache)) - { - graphic = graphic.GetColoredVersion(graphic.Shader, skinColor, skinColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - graphic = graphic.GetColoredVersion(shader, skinColor, skinColor2); - vector.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); - }*/ - } - - if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawUdder && SizedApparelUtility.CanDrawUdder(___pawn, flags)) - { - if (apparelRecorder.bodyPartUdder != null) - apparelRecorder.bodyPartUdder.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); - //Draw Udder. Need Complex Hiding Calculation -> - /* - Vector3 vector = rootLoc; - if (facing == Rot4.North) - vector.y += 0.0015f;//not sure what to do - else - vector.y += 0.0088f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicUdder_horny; - if (graphic == null) - graphic = apparelRecorder.graphicUdder; - if (graphic != null) - { - Material mat; - if (!flags.FlagSet(PawnRenderFlags.Cache)) - { - graphic = graphic.GetColoredVersion(graphic.Shader, skinColor, skinColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - graphic = graphic.GetColoredVersion(shader, skinColor, skinColor2); - vector.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); - }*/ - } - if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawBreasts && SizedApparelUtility.CanDrawBreasts(___pawn, flags) && (SizedApparelSettings.drawSizedApparelBreastsOnlyWorn ? !SizedApparelUtility.isPawnNaked(___pawn, flags) : true)) - { - if (apparelRecorder.bodyPartBreasts != null) - apparelRecorder.bodyPartBreasts.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); - - //Log.Message("DrawBreasts for " + ___pawn.Name); - //if (SizedApparelSettings.Debug) - // Log.Message("trying to draw breasts"); - //Draw Breasts. Allways draw - - /* - Vector3 vector = rootLoc; - if (facing == Rot4.North) - vector.y += 0.001f;//not sure what to do - else - vector.y += 0.0113f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicBreasts_horny; - if (graphic == null) - graphic = apparelRecorder.graphicBreasts; - - - - if (graphic != null) - { - Material mat; - if (!flags.FlagSet(PawnRenderFlags.Cache)) - { - graphic = graphic.GetColoredVersion(graphic.Shader, skinColor, skinColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - graphic = graphic.GetColoredVersion(shader, skinColor, skinColor2); - vector.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? graphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { graphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); - } - else - { - //Log.Warning("[SizedApparel] Missing Breasts Graphic for: " + ___pawn.Name); - - } - */ - - } - - if (bodyDrawType != RotDrawMode.Dessicated && SizedApparelSettings.drawPenis && SizedApparelUtility.CanDrawPenis(___pawn, flags, true)) - { - foreach(SizedApparelBodyPart b in apparelRecorder.bodyPartBalls) - { - b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); - } - foreach (SizedApparelBodyPart b in apparelRecorder.bodyPartPenises) - { - b.DrawBodyPart(rootLoc, angle, facing, bodyDrawType, flags, bodyMesh); - } - /* - //Render Penis And Balls - Vector3 vector = rootLoc; - if (facing == Rot4.North) - vector.y += 0.0025f; - else - vector.y += 0.0108f; - - float offsetX = 0; // right and left - float offsetZ = 0; // up and down - - if(apparelRecorder.graphicPenises != null && apparelRecorder.graphicBallsOfPenises != null) - { - for (int i = 0; i < apparelRecorder.graphicPenises.Count; i++) - { - float t = (i + 1f) / (apparelRecorder.graphicPenises.Count + 1); - offsetX = Mathf.Lerp(-0.1f, 0.1f, t); - offsetZ = Mathf.Lerp(-0.05f, 0.05f, t); - - Graphic penisGraphic = null; - Graphic ballGraphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - { - penisGraphic = apparelRecorder.graphicPenises_horny[i]; - } - if (penisGraphic == null) - penisGraphic = apparelRecorder.graphicPenises[i]; - ballGraphic = apparelRecorder.graphicBallsOfPenises[i];//Balls Doesn't support HornyVariation - if (ballGraphic != null && (SizedApparelSettings.hideBallOfFuta ? Genital_Helper.is_futa(___pawn) : true)) - { - Material mat; - //TODO: vector2.y - Vector3 vector2 = vector; - if (facing == Rot4.North) - vector2.y += 0.0060f; - else - vector2.y -= 0.0012f; - if (facing == Rot4.North || facing == Rot4.South) - vector2.x += offsetX; - else - vector2.x += offsetX * 0.5f; - - if (facing == Rot4.East) - vector2.z += offsetZ; - if (facing == Rot4.West) - vector2.z -= offsetZ; - - if (!flags.FlagSet(PawnRenderFlags.Cache)) - { - ballGraphic = ballGraphic.GetColoredVersion(ballGraphic.Shader, skinColor, skinColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? ballGraphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { ballGraphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector2, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - ballGraphic = ballGraphic.GetColoredVersion(shader, skinColor, skinColor2); - vector2.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? ballGraphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { ballGraphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector2, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); - } - if (penisGraphic != null) - { - Material mat; - Vector3 vector2 = vector; - if (facing == Rot4.North || facing == Rot4.South) - vector2.x += offsetX; - else - vector2.x += offsetX * 0.5f; - - if (facing == Rot4.East) - vector2.z += offsetZ; - if (facing == Rot4.West) - vector2.z -= offsetZ; - - if (!flags.FlagSet(PawnRenderFlags.Cache)) - { - penisGraphic = penisGraphic.GetColoredVersion(penisGraphic.Shader, skinColor, skinColor2); - mat = flags.FlagSet(PawnRenderFlags.Cache) ? penisGraphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { penisGraphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector2, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); // draw for writeZ data to solve shadow issue - } - penisGraphic = penisGraphic.GetColoredVersion(shader, skinColor, skinColor2); - //TODO: vector2.y - vector2.y += 0.00001f; - mat = flags.FlagSet(PawnRenderFlags.Cache) ? penisGraphic.MatAt(facing) : (Material)overrideMatMethod.Invoke(__instance, new object[] { penisGraphic.MatAt(facing), ___pawn, flags.FlagSet(PawnRenderFlags.Portrait) }); - GenDraw.DrawMeshNowOrLater(bodyMesh, vector2, quaternion, mat, flags.FlagSet(PawnRenderFlags.DrawNow)); - } - } - }*/ - - }//Draw BodyParts - - //Draw Modular Apparel Parts - if (flags.FlagSet(PawnRenderFlags.Clothes)) - { - - } - - - + 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 __result, PawnGraphicSet __instance, Rot4 facing, bool dead, RotDrawMode bodyCondition, bool drawClothes) + { + if (!SizedApparelSettings.useBodyTexture) + return; + + if (__result.NullOrEmpty()) + return; + + if (!SizedApparelUtility.CanApplySizedApparel(__instance.pawn)) + return; + + var comp = __instance.pawn.GetComp(); + 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 (dead && __instance.corpseGraphic != null) + { + return; //don't inject for corpse graphic since the mod doesn't support yet. + bodyMat = __instance.corpseGraphic.MatAt(facing, null); + if(comp.graphicbaseBodyCorpse != null) + sizedApparelBaseBodyMat = comp.graphicbaseBodyCorpse.MatAt(facing, null); + } + else 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? + } + } + + [HarmonyPatch(typeof(PawnRenderer), "DrawPawnFur")] + public class DrawPawnFurPatch + { + public static void Prefix() + { + + } + //when this function called, the drawpawnbody did not draw sizedapparel body parts. draw pawn fur will draw those. + //this is for sort graphics in some renderer case, some render are sorted by call order + public static void Postfix(PawnRenderer __instance, Pawn ___pawn, Vector3 shellLoc, Rot4 facing, Quaternion quat, PawnRenderFlags flags) + { + var comp = ___pawn.GetComp(); + if (comp == null) + return; + float angle; + Vector3 v; + //angle = Quaternion.Angle(quat, Quaternion.AngleAxis(0, Vector3.up)); + quat.ToAngleAxis(out angle, out v); + angle = angle * v.y; // Quaternion only gives 180 degree. but angle needs 360 degree + + /* + //for more safe angle calculation, Not need till someone touched pawn's quaternion system. (for now, axis is fixed as Vector.up) + angle = angle * new Vector3(0, v.y, 0).normalized.y; + // + + */ + + //Quaternion.Inverse(quat).ToAngleAxis(out angle, out v); + //angle = angle / 57.29578f; + //angle = Quaternion.Angle(Quaternion.AngleAxis(0, Vector3.up), quat); + Mesh mesh = HumanlikeMeshPoolUtility.GetHumanlikeBodySetForPawn(___pawn).MeshAt(facing); + Vector3 loc = shellLoc; + loc.y -= 0.009187258f; //rimworld 1.4 add 0.009187258f; + + + + comp.UpdateTickAnim(loc, angle); + comp.DrawAllBodyParts(loc, angle, facing, RotDrawMode.Fresh, flags, ___pawn, mesh); + } + } + //Base Body Graphic Injection for FurCovered + [HarmonyPatch(typeof(PawnGraphicSet), "FurMatAt")] + public class MatsFurMatAtPatch + { + //TODO should do in Postfix...? or Prefix? + public static void Postfix(ref Material __result, PawnGraphicSet __instance, Rot4 facing, bool portrait = false, bool cached = false) + { + if (!SizedApparelSettings.useBodyTexture) + return; + + if (__result == null) + return; + var comp = __instance.pawn.GetComp(); + if (comp == null) + return; + Material sizedApparelBaseBodyMat = null; + + if (comp.graphicbaseBodyFurCovered != null) + sizedApparelBaseBodyMat = comp.graphicbaseBodyFurCovered.MatAt(facing, null); + + if (sizedApparelBaseBodyMat == null) + return; + + if (!portrait && __instance.pawn.IsInvisible()) + { + sizedApparelBaseBodyMat = InvisibilityMatPool.GetInvisibleMat(sizedApparelBaseBodyMat); + } + if (!cached) + { + sizedApparelBaseBodyMat = __instance.flasher.GetDamagedMat(sizedApparelBaseBodyMat); + } + + __result = sizedApparelBaseBodyMat; + } + } + //TODO [HarmonyPatch(typeof(PawnRenderer), "BaseHeadOffsetAt")] public class HeadOffsetPatch @@ -1651,7 +1023,7 @@ class GeneratePawnPatch public static void Postfix(PawnRenderer __instance, Pawn ___pawn, Rot4 rotation, ref Vector3 __result) { - var comp = ___pawn.TryGetComp(); + var comp = ___pawn.GetComp(); if (comp == null) return; } @@ -1660,355 +1032,6 @@ class GeneratePawnPatch - [Obsolete] - public class DrawPawnPatch - { - public static void TryDrawBodyPart(ref PawnRenderer __instance,Graphic graphic,Graphic hornyGraphic, Vector3 rootLoc, Vector3 drawOffset, float angle, bool renderBody, Rot4 bodyFacing, Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible) - { - - } - - - - public static void RenderPawnInternalPrefix(ref PawnRenderer __instance, Vector3 rootLoc, float angle, bool renderBody, Rot4 bodyFacing, Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible, Pawn ___pawn) - { - if (!__instance.graphics.AllResolved) - { - __instance.graphics.ResolveAllGraphics(); - } - - if (!SizedApparelSettings.drawBodyParts) - return; - if (___pawn == null) - return; - ApparelRecorderComp apparelRecorder = ___pawn.TryGetComp(); - if (apparelRecorder == null) - return; - if (!apparelRecorder.hasUpdateBefore || apparelRecorder.isDirty) - { - if (SizedApparelSettings.Debug) - Log.Message("[SizedApparel] trying to draw " + ___pawn.Name + " with unupdated component! Updating it."); - apparelRecorder.Update(true,false); - SizedApparelUtility.UpdateAllApparel(___pawn); - } - if (apparelRecorder.needToCheckApparelGraphicRecords) - { - if(apparelRecorder.isApparelGraphicRecordChanged()) - { - //apparelRecorder.Update(true, true); //1.3 - //SizedApparelUtility.UpdateAllApparel(___pawn, true); - } - - } - if (renderBody) - { - BodyPatch.SetBodyGraphic(___pawn,true, false); - } - } - - //Draw Private parts - public static void RenderPawnInternalPostfix(ref PawnRenderer __instance, Vector3 rootLoc, float angle, bool renderBody, Rot4 bodyFacing, Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible, Pawn ___pawn) - { - - - if (___pawn == null) - return; - ApparelRecorderComp apparelRecorder = ___pawn.TryGetComp(); - if (apparelRecorder == null) - return; - Quaternion quaternion = Quaternion.AngleAxis(angle, Vector3.up); - Mesh mesh = null; - - if (!SizedApparelSettings.drawBodyParts) - { - /* - if (SizedApparelPatch.rimNudeWorldActive && SizedApparelSettings.drawSizedApparelBreastsOnlyWorn && !SizedApparelUtility.isPawnNaked(___pawn)) - { - //TODO - - if (__instance.graphics == null) - return; - if (bodyDrawType == RotDrawMode.Dessicated) //don't draw on skeletone - return; - - if (___pawn.RaceProps.Humanlike)//this.pawn.RaceProps.Humanlike - { - mesh = MeshPool.humanlikeBodySet.MeshAt(bodyFacing); - } - else - { - mesh = __instance.graphics.nakedGraphic.MeshAt(bodyFacing); - } - string defName = __instance.graphics.pawn.def.defName; - - - Vector3 loc = rootLoc; - loc.y += 0.009183673f; - - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector.y += 0.001f;//not sure what to do - else - vector.y += 0.012f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicBreasts_horny; - if (graphic == null) - graphic = apparelRecorder.graphicBreasts; - if (graphic != null) - { - Material breastMat = graphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(breastMat) : breastMat; - breastMat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector, quaternion, breastMat, portrait); - } - } - */ - return; - - } - - if (renderBody) - { - if (__instance.graphics == null) - return; - if (bodyDrawType == RotDrawMode.Dessicated) //don't draw on skeletone - return; - - if (___pawn.RaceProps.Humanlike)//this.pawn.RaceProps.Humanlike - { - mesh = MeshPool.humanlikeBodySet.MeshAt(bodyFacing); - } - else - { - mesh = __instance.graphics.nakedGraphic.MeshAt(bodyFacing); - } - string defName = __instance.graphics.pawn.def.defName; - - - Vector3 loc = rootLoc; - loc.y += 0.009183673f; - - - //breasts are only rendered when all of worn apparels are supported or nude. - if (!apparelRecorder.hasUnsupportedApparel || SizedApparelUtility.isPawnNaked(___pawn)) //TODO : Move it to CanDraw - { - //string bodyPartPath = "SizedApparel/BodyParts"; - //string breastsPath; - - //Hediff breastHediff = apparelRecorder.breastHediff; - - //float breastHediffSeverityCap = apparelRecorder.breastSeverityCapToDraw; - //string breastName = breastHediff.def.defName;//Todo - //breastsPath = "SizedApparel/BodyParts/Breasts/Human/testBodyPart_Female"; - /* - if ((ContentFinder.Get((breastsPath + "_south"), false) != null)) - { - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector = vector; - else - vector.y += 0.0092f; - Graphic bodyPartGraphic = GraphicDatabase.Get(breastsPath, ShaderDatabase.Cutout); - Material bodyPartMat = bodyPartGraphic.MatAt(bodyFacing, null); - //bodyPartMat = __instance.OverrideMaterialIfNeeded_NewTemp(bodyPartMat, __instance.pawn, portrait);//private function and values //for damage mat or somthing more - Material baseMat = (!portrait && pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(bodyPartMat) : bodyPartMat; - bodyPartMat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector, quaternion, bodyPartMat, portrait); - } - else - { - if (SizedApparelSettings.Debug) - Log.Warning("[Sized Apparel] Missing Breast Tesxture: " + breastsPath); - //breastName = "Breasts"; - } - */ - if(SizedApparelSettings.drawBreasts && (SizedApparelSettings.drawSizedApparelBreastsOnlyWorn ? !SizedApparelUtility.isPawnNaked(___pawn): true)) - { - //Log.Message("DrawBreasts for " + ___pawn.Name); - //if (SizedApparelSettings.Debug) - // Log.Message("trying to draw breasts"); - //Draw Breasts. Allways draw - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector.y += 0.001f;//not sure what to do - else - vector.y += 0.012f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicBreasts_horny; - if(graphic == null) - graphic = apparelRecorder.graphicBreasts; - - /* - if(graphic == null) - { - apparelRecorder.Update(); - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicBreasts_horny; - if (graphic == null) - graphic = apparelRecorder.graphicBreasts; - }*/ - - - if (graphic != null) - { - Material mat = graphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(mat) : mat; - mat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector, quaternion, mat, portrait); - } - else - { - //Log.Warning("[SizedApparel] Missing Breasts Graphic for: " + ___pawn.Name); - - } - - - } - if(SizedApparelSettings.drawVagina && SizedApparelUtility.CanDrawVagina(___pawn)) - { - //Draw Vagina. AllwaysDraw - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector.y += 0.0100f;//not sure what to do - else - vector.y += 0.0100f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicVagina_horny; - if (graphic == null) - graphic = apparelRecorder.graphicVagina; - if (graphic != null) - { - Material mat = graphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(mat) : mat; - mat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector, quaternion, mat, portrait); - } - } - if(SizedApparelSettings.drawAnus && SizedApparelUtility.CanDrawAnus(___pawn)) - { - //Draw Anus. //Allways draw - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector.y += 0.0105f;//not sure what to do - else - vector.y += 0.010f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicAnus_horny; - if (graphic == null) - graphic = apparelRecorder.graphicAnus; - if (graphic != null) - { - Material mat = graphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(mat) : mat; - mat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector, quaternion, mat, portrait); - } - } - if (SizedApparelSettings.drawUdder && SizedApparelUtility.CanDrawUdder(___pawn)) - { - //Draw Udder. Need Complex Hiding Calculation -> - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector.y += 0.0015f;//not sure what to do - else - vector.y += 0.0095f; - Graphic graphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - graphic = apparelRecorder.graphicUdder_horny; - if (graphic == null) - graphic = apparelRecorder.graphicUdder; - if (graphic != null) - { - Material mat = graphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(mat) : mat; - mat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector, quaternion, mat, portrait); - } - } - if(SizedApparelSettings.drawBelly && SizedApparelUtility.CanDrawBelly(___pawn)) - { - //Draw Belly. Need Complex Hiding Calculation - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector.y += 0.0002f;//not sure what to do - else - vector.y += 0.0105f; - Graphic graphic = apparelRecorder.graphicBelly; - if (graphic != null) - { - Material mat = graphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(mat) : mat; - mat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector, quaternion, mat, portrait); - } - } - - //Rimworld 1.2 doesn't have PawnRenderFlags! - if (SizedApparelSettings.drawPenis && SizedApparelUtility.CanDrawPenis(___pawn,PawnRenderFlags.None, false)) - { - //Render Penis And Balls - Vector3 vector = rootLoc; - if (bodyFacing == Rot4.North) - vector.y += 0.0025f; - else - vector.y += 0.015f; - - float offsetX = 0; - - for (int i = 0; i < apparelRecorder.graphicPenises.Count; i++) - { - float t = (i + 1f) / (apparelRecorder.graphicPenises.Count + 1); - offsetX = Mathf.Lerp(-0.1f, 0.1f, t); - - - Graphic penisGraphic = null; - Graphic ballGraphic = null; - if (SizedApparelUtility.IsHorny(___pawn)) - { - penisGraphic = apparelRecorder.graphicPenises_horny[i]; - } - if (penisGraphic == null) - penisGraphic = apparelRecorder.graphicPenises[i]; - ballGraphic = apparelRecorder.graphicBallsOfPenises[i];//Balls Doesn't support HornyVariation - if (penisGraphic != null) - { - //TODO: vector2.y - Vector3 vector2 = vector; - vector2.x += offsetX; - Material mat = penisGraphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(mat) : mat; - mat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector2, quaternion, mat, portrait); - } - if (SizedApparelSettings.hideBallOfFuta) - if (Genital_Helper.is_futa(___pawn)) - continue;//skip rendering ball - if (ballGraphic != null) - { - //TODO: vector2.y - Vector3 vector2 = vector; - if (bodyFacing == Rot4.North) - vector2.y += 0.0080f; - else - vector2.y -= 0.002f; - vector2.x += offsetX; - Material mat = ballGraphic.MatAt(bodyFacing, null); - Material baseMat = (!portrait && ___pawn.IsInvisible()) ? InvisibilityMatPool.GetInvisibleMat(mat) : mat; - mat = __instance.graphics.flasher.GetDamagedMat(baseMat); - GenDraw.DrawMeshNowOrLater(mesh, vector2, quaternion, mat, portrait); - } - } - } - - } - - } - } - } } diff --git a/source/SizedApparel/SizedApparelPoseSet.cs b/source/SizedApparel/SizedApparelPoseSet.cs index ff7eb81..4356695 100644 --- a/source/SizedApparel/SizedApparelPoseSet.cs +++ b/source/SizedApparel/SizedApparelPoseSet.cs @@ -26,7 +26,7 @@ namespace SizedApparel return; /* - var comp = ___pawn.TryGetComp(); + var comp = ___pawn.GetComp(); if (comp == null) return; @@ -72,12 +72,17 @@ namespace SizedApparel } + public class PoseDef : Def + { + + } + public class SizedApparelPose { //public string poseName; use defName as PoseName public SizedApparelBodyPartOf targetBodyPart = SizedApparelBodyPartOf.Torso; - public List headOffset; + //public List headOffset; } diff --git a/source/SizedApparel/SizedApparelPubicHair.cs b/source/SizedApparel/SizedApparelPubicHair.cs index 38a8ec3..a039c84 100644 --- a/source/SizedApparel/SizedApparelPubicHair.cs +++ b/source/SizedApparel/SizedApparelPubicHair.cs @@ -14,10 +14,13 @@ namespace SizedApparel [HarmonyPatch(typeof(PawnGraphicSet), "CalculateHairMats")] public static class CalculateHairMatsPatch { + public static void Postfix() + { + } } - public abstract class PubicHairDef : StyleItemDef + public class PubicHairDef : StyleItemDef { } diff --git a/source/SizedApparel/SizedApparelSettingcs.cs b/source/SizedApparel/SizedApparelSettingcs.cs index f50de46..db80bb4 100644 --- a/source/SizedApparel/SizedApparelSettingcs.cs +++ b/source/SizedApparel/SizedApparelSettingcs.cs @@ -16,7 +16,8 @@ namespace SizedApparel { public string raceName = null; public bool overrideDef = false; - public bool asHumanlike = false; + public bool asHuman = false; + public bool allowRaceNamedApparel = true; public float drawMinAge = -1; //pawn's Biological age. -1 to ignore. public AlienRaceSetting(string raceName) @@ -32,7 +33,8 @@ namespace SizedApparel { Scribe_Values.Look(ref raceName, "raceName", null); Scribe_Values.Look(ref overrideDef, "overrideDef", false); - Scribe_Values.Look(ref asHumanlike, "asHumanlike", false); + Scribe_Values.Look(ref asHuman, "asHuman", false); + Scribe_Values.Look(ref allowRaceNamedApparel, "allowRaceNamedApparel", true); Scribe_Values.Look(ref drawMinAge, "drawMinAge", -1); } @@ -43,12 +45,17 @@ namespace SizedApparel 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 @@ -59,6 +66,23 @@ namespace SizedApparel + //Apply Target Pawn Category + public static bool ApplyHumanlikes = true; //Always true. + public static bool ApplyAnimals = true; + public static bool ApplyAnimalsPlayerFactionOnly = true; //TODO + public static bool ApplyMechanoid = true; + + public static bool ApplyApparelPatchForMale = false; //only ApparelServerityWork. + + public static bool ApplyColonists = true; + public static bool ApplySlaves = true; + public static bool ApplyPrisoner = true; + public static bool ApplyNeutralAndAlly = true; + public static bool ApplyHostile = false; + + + public static bool AnimationPatch = true; + //TODO: Standalone render bodyparts. public static bool drawBodyParts = true;//for user who not use rimnudeworld public static bool drawBreasts = true; @@ -69,6 +93,7 @@ namespace SizedApparel 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 @@ -76,7 +101,7 @@ namespace SizedApparel public static bool useBodyPartsVariation = true; public static bool showBodyPartsVariation = true; - public static bool autoJiggleBreasts = true; + public static bool breastsPhysics = false; //RimNudeWorld public static bool drawSizedApparelBreastsOnlyWorn = false; @@ -170,7 +195,16 @@ namespace SizedApparel //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); @@ -186,6 +220,32 @@ namespace SizedApparel { alienRaceSettings = new List(); } + + 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) { @@ -215,6 +275,7 @@ namespace SizedApparel 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 @@ -238,6 +299,10 @@ namespace SizedApparel //TODO: Humanlike Setting Per Race //Scribe_Values.Look(ref alienRacesAllowHumanlikTextures, "alienRacesAllowHumanlikTextures"); + //BreastsPhysics + Scribe_Values.Look(ref breastsPhysics, "breastsPhysics", false); + + base.ExposeData(); } @@ -247,8 +312,9 @@ namespace SizedApparel { SizedApparelSettings settings; - private static Vector2 ScrollPos = Vector2.zero; - private static List alienDefList = new List(); // to load aliens and compare with modsetting + private static Vector2 ScrollPosL = Vector2.zero; + private static Vector2 ScrollPosR = Vector2.zero; + public static List alienDefList = new List(); // to load aliens and compare with modsetting public override void WriteSettings() { @@ -261,7 +327,7 @@ namespace SizedApparel { if(alienDefList == null) alienDefList = new List(); - if (alienDefList.Count == 0) + if (true)//alienDefList.Count == 0 { IEnumerable HumanlikeRaces; HumanlikeRaces = DefDatabase.AllDefs.Where(b => b.race?.Humanlike == true); @@ -277,19 +343,27 @@ namespace SizedApparel 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.TryGetComp(); + var comp = pawn.GetComp(); if (comp != null) - comp.SetDirty(clearPawnGraphicSet); + { + comp.UpdateRaceSettingData(); + comp.SetDirty(clearPawnGraphicSet,true,true,true); + } + } } } + + + public SizedApparelMod(ModContentPack content) : base(content) { this.settings = GetSettings(); @@ -300,7 +374,7 @@ namespace SizedApparel const float alienRaceSettingHeight = 120; - CheckAndLoadAlienRaces(); + //CheckAndLoadAlienRaces(); Listing_Standard listingStandard = new Listing_Standard(); //Rect rect = new Rect(0f, 0f, inRect.width, 950); //Rect rect = inRect.ExpandedBy(0.9f); @@ -310,8 +384,8 @@ namespace SizedApparel //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 ScrollPos, scrollRect, true); - leftRect = new Rect(leftRect.x, leftRect.x, leftRect.width - 30f, leftRect.height + Math.Max((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; @@ -330,13 +404,21 @@ namespace SizedApparel { ClearCache(); } + if (listingStandard.ButtonTextLabeled("RandomPreCache", "15 sec ~ 2 min")) + { + SizedApparelsDatabase.RandomPreCacheForApparels(); + SizedApparelsDatabase.RandomPreCacheForBodyParts(); + } } - listingStandard.Gap(); - - listingStandard.Gap(8); - listingStandard.GapLine(5f); + listingStandard.Gap(); + listingStandard.GapLine(); + + + + + /* listingStandard.Label("Optimization",-1,""); //listingStandard.CheckboxLabeled("Debug Log", ref SizedApparelSettings.Debug, "Debug logs.\nDefault: false"); @@ -358,10 +440,8 @@ namespace SizedApparel //} listingStandard.Gap(8); listingStandard.Label("Other Mod Compatibility"); - listingStandard.Gap(8); - listingStandard.GapLine(5f); - listingStandard.CheckboxLabeled(" Forced compatibility of unsupported apparel", ref SizedApparelSettings.ForcedSupportApparel, "It may have clipping issue.\nDefault: false"); + listingStandard.CheckboxLabeled(" Force ignore unsupported apparel", ref SizedApparelSettings.ForcedSupportApparel, "It may have clipping issue from unsupported parts.\nDefault: false"); /* @@ -400,9 +480,21 @@ namespace SizedApparel } 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, ""); @@ -443,26 +535,9 @@ namespace SizedApparel listingStandard.Label(" AlienRace is not Actived ", -1, ""); } - //Rect outRect = new Rect(0f, 35f, rect.width, rect.height - 35f); - /* - const float alienSettingHeight = 80; - Rect outRect = listingStandard.GetRect(listingStandard.CurHeight); - outRect = new Rect(outRect.x, outRect.y, outRect.width, alienSettingHeight); - Rect viewRect = new Rect(0, 0, outRect.width - 16f, 100 );//alienDefList.Count * 30f - Widgets.BeginScrollView(outRect, ref ScrollPos, viewRect, true); - Widgets.Label(new Rect(0f, 0f, 30f, 10f), "hello"); - Widgets.Label(new Rect(0f, 0f, 30f, 10f), "world"); - */ - //Log.Message(alienDefList.Count.ToString()); - //float h = alienDefList.Count <= 1 ? alienRaceSettingHeight : alienRaceSettingHeight * 1.8f; - - - //Rect rect = Race_ListingStandard.GetRect(h); - //rect.x = 0; - //rect.y = 0; - //Rect ScrollViewRect = new Rect(0, 0, rect.width - 16f, alienDefList.Count * alienRaceSettingHeight); - //Widgets.BeginScrollView(rect, ref ScrollPos, ScrollViewRect, true); - + if (alienDefList.NullOrEmpty()) + CheckAndLoadAlienRaces(); + float h = alienDefList.Count * alienRaceSettingHeight; Listing_Standard Race_ListingStandard = listingStandard.BeginSection(h); foreach (var raceName in alienDefList) @@ -485,20 +560,23 @@ namespace SizedApparel raceSetting = new AlienRaceSetting(raceName); SizedApparelSettings.alienRaceSettings.Add(raceSetting); - } - Race_ListingStandard.CheckboxLabeled("If Unsupported, Use Humanlike", ref raceSetting.asHumanlike, "This Race will use Humanlike if it doesn't have own textures. useful for race that Unsupported but simillar to human"); + } + if(raceName != "Human") + Race_ListingStandard.CheckboxLabeled("If Unsupported, As Human race", ref raceSetting.asHuman, "This Race will use Human race if it doesn't have own textures. useful for race that Unsupported but simillar to human"); + Race_ListingStandard.CheckboxLabeled("Allow Race Named Apparel", ref raceSetting.allowRaceNamedApparel, "This Race Can use separated texture from common race. even same BodyType name. \n Default: True"); Race_ListingStandard.Label((raceSetting.drawMinAge <= 100 ? "" : "[overdrive]") + "SA BodyPart Draw Min Age: " + raceSetting.drawMinAge.ToString(), -1, "Lower than this age will not use Sized Apparel. Useful for BnC. -1 for disable"); - raceSetting.drawMinAge = Race_ListingStandard.Slider(raceSetting.drawMinAge, raceSetting.drawMinAge <= 100 ? -1: 100, raceSetting.drawMinAge >= 100 ? 1000 : 100); + raceSetting.drawMinAge = Mathf.Round(Race_ListingStandard.Slider(raceSetting.drawMinAge, raceSetting.drawMinAge <= 100 ? -1: 100, raceSetting.drawMinAge >= 100 ? 1000 : 100)); Race_ListingStandard.Gap(); } listingStandard.EndSection(Race_ListingStandard); Widgets.EndScrollView(); //listingStandard.Gap(alienSettingHeight); - + listingStandard.Gap(8); listingStandard.GapLine(4f); - listingStandard.Gap(16); + 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"); @@ -517,6 +595,7 @@ namespace SizedApparel SizedApparelSettings.drawVagina = false; SizedApparelSettings.drawAnus = false; SizedApparelSettings.drawBelly = false; + SizedApparelSettings.drawPubicHair = false; } @@ -545,35 +624,79 @@ namespace SizedApparel 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) Body Texture", ref SizedApparelSettings.useBodyTexture, "change pawn's body texture when the pawn is wearing supported apparels. Recommanded\nDefault: true"); + listingStandard.CheckboxLabeled(" Use (Sized Apparel) Base Body Texture", ref SizedApparelSettings.useBodyTexture, "change pawn's body texture when the pawn is wearing supported apparels. Recommanded\nDefault: true"); - listingStandard.CheckboxLabeled(" Draw Muscle Overlay (wip)", ref SizedApparelSettings.drawMuscleOverlay, "\nDisable this option when you use RimNudeWorld"); + //listingStandard.CheckboxLabeled(" Draw Muscle Overlay (wip)", ref SizedApparelSettings.drawMuscleOverlay, "\nDisable this option when you use RimNudeWorld"); - listingStandard.CheckboxLabeled(" Draw Breasts", ref SizedApparelSettings.drawBreasts, "this option is why this mod exist.\nDefault: true"); + listingStandard.CheckboxLabeled(" Draw Breasts", ref SizedApparelSettings.drawBreasts, "this option is why this mod exist.\nDefault: true"); if (SizedApparelSettings.drawBreasts) { - 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(" 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 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(" Hide Balls of Futa", ref SizedApparelSettings.hideBallOfFuta, "Hide Balls from penis of Futa.\nDefault: false"); - listingStandard.CheckboxLabeled(" Hide Penis of Man(Not Work yet)", ref SizedApparelSettings.hidePenisOfMale, "this option is for someone who really hate to see male's dick around.\nDefault: false"); + listingStandard.CheckboxLabeled(" 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"); @@ -606,6 +729,7 @@ namespace SizedApparel 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); diff --git a/source/SizedApparel/SizedApparelStyleStationPatch.cs b/source/SizedApparel/SizedApparelStyleStationPatch.cs index 8e82e3f..c2bcc2d 100644 --- a/source/SizedApparel/SizedApparelStyleStationPatch.cs +++ b/source/SizedApparel/SizedApparelStyleStationPatch.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using RimWorld; using Verse; +using Verse.Sound; using HarmonyLib; using UnityEngine; using rjw; @@ -13,18 +14,37 @@ using System.Reflection.Emit; namespace SizedApparel { - //TODO...? - //[HarmonyPatch(typeof(Dialog_StylingStation), "DrawTabs")] + + [HarmonyPatch(typeof(Dialog_StylingStation), "DrawTabs")] public class SizedApparelStyleStationDrawTabsPatch { - public static void Postfix(Rect rect, ref Vector2 ___hairScrollPosition, Dialog_StylingStation __instance, List ___tabs, Dialog_StylingStation.StylingTab ___curTab, float ___viewRectHeight, List ___tmpStyleItems, bool ___devEditMode, Pawn ___pawn) + public static void Postfix(Rect rect, ref Vector2 ___hairScrollPosition, Dialog_StylingStation __instance, List ___tabs, Dialog_StylingStation.StylingTab ___curTab, float ___viewRectHeight, ref List ___tmpStyleItems, bool ___devEditMode, Pawn ___pawn, float ___colorsHeight, Color ___desiredHairColor) { + if (!SizedApparelSettings.drawPubicHair) + return; + + + //Widgets.DrawMenuSection(rect); + //TabDrawer.DrawTabs(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, ___colorsHeight, ___desiredHairColor, rect, ref ___hairScrollPosition, delegate (Rect r, PubicHairDef h) + { + GUI.color = ___desiredHairColor; + Widgets.DefIcon(r, h, null, 1.25f, null, false, null, null, null); + //Widgets.DrawTextureFitted(r, h.Icon, 1.25f, null); + GUI.color = Color.white; + }, delegate (PubicHairDef h) + { + ___pawn.GetComp().pubicHairDef = h; + //___pawn.story.hairDef = h; + }, (StyleItemDef h) => ___pawn.GetComp().pubicHairDef == h, (StyleItemDef h) => ___pawn.GetComp().initialPubicHairDef == h, null, false); return; default: @@ -32,13 +52,159 @@ namespace SizedApparel } } - static void DrawStylingTypePubicHair(Dialog_StylingStation dialog_StylingStation, Rect rect) + //Some Copy Code from Rimnudeworld + //maybe Some Var has to be ref + static void DrawStylingTypePubicHair(ref Dialog_StylingStation dialog_StylingStation, ref float viewRectHeight, ref List tmpStyleItems, bool devEditMode, Pawn pawn, float colorsHeight, Color desiredHairColor, Rect rect, ref Vector2 scrollPosition, Action drawAction, Action selectAction, Func hasStyleItem, Func hadStyleItem, Func extraValidator = null, bool doColors = false) { + //Color desiredHairColor = AccessTools.FieldRefAccess(dialog_StylingStation, "desiredHairColor"); + + int total_pubes_count = 0; + total_pubes_count = DefDatabase.AllDefs.Count(); + + //need child patch? + if (total_pubes_count <= 0) + { + Widgets.NoneLabelCenteredVertically(rect, "(" + "NoneUsableForPawn".Translate(pawn.Named("PAWN")) + ")"); + return; + } + + ApparelRecorderComp comp = pawn.GetComp(); + + + + 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.AllDefs + where (devEditMode || PawnStyleItemChooser.WantsToUseStyle(pawn, x, null) || hadStyleItem(x)) && (extraValidator == null || extraValidator(x)) + select x);*/ + tmpStyleItems.AddRange(DefDatabase.AllDefs);// just add All Pubic Hair def. + + tmpStyleItems.SortBy((StyleItemDef x) => -PawnStyleItemChooser.StyleItemChoiceLikelihoodFor(x, pawn)); + if (tmpStyleItems.NullOrEmpty()) + { + 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, out height, 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 allHairColors; + private static List AllHairColors + { + get + { + if (allHairColors == null) + { + allHairColors = (from ic in DefDatabase.AllDefsListForReading + select ic.color).ToList(); + allHairColors.SortByColor((Color x) => x); + } + return allHairColors; + } + } + static void AddPubicHairTab(Dialog_StylingStation stylingStation, List tabs) { + if (!SizedApparelSettings.drawPubicHair) + return; + var curTabField = AccessTools.Field(typeof(Dialog_StylingStation), "curTab"); tabs.Add(new TabRecord("PubicHair".Translate().CapitalizeFirst(), delegate () { @@ -98,5 +264,32 @@ namespace SizedApparel yield break; } } + + [HarmonyPatch(typeof(Dialog_StylingStation), "Reset")] + public class SizedApparelStyleStationResetPatch + { + public static void Prefix(Pawn ___pawn) + { + ApparelRecorderComp comp = ___pawn.GetComp(); + + //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(); + if (comp == null) + return; + comp.initialPubicHairDef = comp.pubicHairDef; + } + } + } diff --git a/source/SizedApparel/SizedApparelTexturePointDef.cs b/source/SizedApparel/SizedApparelTexturePointDef.cs new file mode 100644 index 0000000..f36b5b1 --- /dev/null +++ b/source/SizedApparel/SizedApparelTexturePointDef.cs @@ -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 SouthBodyPartPoints = new List(); + public List NorthBodyPartPoints = new List(); + public List EastBodyPartPoints = new List(); + + //can be null. then use EastBodyPartPoints + public List WestBodyPartPoints = new List(); + + + + } +} diff --git a/source/SizedApparel/SizedApparelUtility.cs b/source/SizedApparel/SizedApparelUtility.cs index 37c1a94..7b69783 100644 --- a/source/SizedApparel/SizedApparelUtility.cs +++ b/source/SizedApparel/SizedApparelUtility.cs @@ -32,13 +32,15 @@ namespace SizedApparel static string Tiny = "_1"; static string Nipples = "_0"; //static String[] size = new string[10] { "_0", "_1", "_2", "_3", "_4", "_5" , "_6", "_7", "_8", "_9"}; - public static string[] size = new string[11] { Nipples, Tiny, Small, Average, Large, Huge, Enormous, Massive, Gargantuan, Colossal, Titanic }; + public static string[] breastsSizeStrings = new string[11] { Nipples, Tiny, Small, Average, Large, Huge, Enormous, Massive, Gargantuan, Colossal, Titanic }; + public static string[] commonSizeStrings = new string[6] { Nipples, Tiny, Small, Average, Large, Huge}; + [Obsolete] public static int findAvailableSmallerSizeFromSetting(int current) { int target = current; - target = Math.Min(target, size.Length - 1); + target = Math.Min(target, breastsSizeStrings.Length - 1); while (target > 0) { if (SizedApparelSettings.getUseSettingFromIndex(target) == false) @@ -48,21 +50,23 @@ namespace SizedApparel } return target; } + [Obsolete] public static int findAvailableBiggerSizeFromSetting(int current) { int target = current; - while (target < size.Length) + while (target < breastsSizeStrings.Length) { if (SizedApparelSettings.getUseSettingFromIndex(target) == false) target++; else break; } - target = Math.Min(target, size.Length - 1); + target = Math.Min(target, breastsSizeStrings.Length - 1); return target; } + [Obsolete] public static int findAvailableSizeFromSetting(int current, bool findBigger) { if (findBigger) @@ -128,16 +132,16 @@ namespace SizedApparel return result; } - public static Graphic GetSizedApparelGraphic(Graphic sourceGraphic, float breastSeverity, string wearerDefName = null, string breastHediff = null, string customPose = null) + public static Graphic GetSizedApparelGraphic(Graphic sourceGraphic, float breastSeverity, string wearerDefName = null, string breastHediff = null, string customPose = null, Gender gender = Gender.None) { int currentBreastSizeIndex = -1; float currentBreastSeverity = -1; string s; bool flag = false; - return GetSizedApparelGraphic(sourceGraphic, breastSeverity, out currentBreastSizeIndex, out currentBreastSeverity, out flag, out s, wearerDefName, breastHediff); + return GetSizedApparelGraphic(sourceGraphic, breastSeverity, out currentBreastSizeIndex, out currentBreastSeverity, out flag, out s, wearerDefName, breastHediff, customPose, gender); } - public static Graphic GetSizedApparelGraphic(Graphic sourceGraphic, float breastSeverity , out int indexOut, out float severityOut, out bool result, out string hediffResult, string wearerDefName = null, string breastHediffName = null, string customPose = null) + public static Graphic GetSizedApparelGraphic(Graphic sourceGraphic, float breastSeverity , out int indexOut, out float severityOut, out bool result, out string hediffResult, string wearerDefName = null, string breastHediffName = null, string customPose = null, Gender gender = Gender.None) { indexOut = -1; severityOut = -1; @@ -152,10 +156,10 @@ namespace SizedApparel string path; string extraPath = null; - string raceExtraPath = null; - string racePath = null; - + //string raceExtraPath = null; + //string racePath = null; + //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; path = sourceGraphic.path; @@ -164,38 +168,57 @@ namespace SizedApparel path = path.Insert(Math.Max(path.LastIndexOf('/'), 0), "/CustomPose/"+ customPose); } + string genderSting; + if (gender == Gender.Female) + { + genderSting = "F"; + } + if (gender == Gender.Male) + { + genderSting = "M"; + } + else + genderSting = string.Empty; - if(wearerDefName != null) - racePath = path + "_" + wearerDefName; + path = path + genderSting; + + if (wearerDefName != null) + { + //racePath = path + "_" + wearerDefName; + path = path + "_" + wearerDefName; + } if (breastHediffName != null) { extraPath = path + "_" + breastHediffName; - if (wearerDefName != null) - raceExtraPath = path + "_" + wearerDefName + "_" + breastHediffName; + //if (wearerDefName != null) + // raceExtraPath = path + "_" + wearerDefName + "_" + breastHediffName; } - int offset = 0; + int offset = 0; + //int offsetLimit = 10; bool validTexture = false; Graphic graphic = null; bool findBigger = true; // if false : search smaller first string pathString = ""; - while (offset < SizedApparelUtility.size.Length) + + while (offset < SizedApparelUtility.breastsSizeStrings.Length) //Search Bigger { if (breastHediffName != null) { + /* if(raceExtraPath != null) { pathString = raceExtraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); validTexture = true; @@ -204,13 +227,13 @@ namespace SizedApparel //Log.Message(extraPath + BreastSeverityString(breastSeverity, offset, findBigger) + ":Extra Texture Found"); break; } - } + }*/ pathString = extraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); validTexture = true; @@ -221,15 +244,15 @@ namespace SizedApparel } } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); - + /* if(racePath != null) { pathString = racePath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); validTexture = true; @@ -238,13 +261,13 @@ namespace SizedApparel //Log.Message(path + BreastSeverityString(breastSeverity, offset, findBigger) + ":Texture Found"); break; } - } + }*/ pathString = path + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, findBigger, ref indexOut, ref severityOut); if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); @@ -254,7 +277,7 @@ namespace SizedApparel //Log.Message(path + BreastSeverityString(breastSeverity, offset, findBigger) + ":Texture Found"); break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); //Log.Warning(path + BreastSeverityString(breastSeverity, offset, findBigger) + ":Texture Not Found. Try bigger Texture."); @@ -262,19 +285,22 @@ namespace SizedApparel if (indexOut == -1) break; } - if (validTexture == false) + + + if (validTexture == false) // Search Smaller { offset = 0; - while (offset < SizedApparelUtility.size.Length) + while (offset < SizedApparelUtility.breastsSizeStrings.Length) { if (breastHediffName != null) { + /* if (raceExtraPath != null) { pathString = raceExtraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); @@ -285,12 +311,12 @@ namespace SizedApparel //Log.Message(extraPath + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Extra Texture Found"); break; } - } + }*/ pathString = extraPath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); @@ -300,18 +326,18 @@ namespace SizedApparel //Log.Message(extraPath + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Extra Texture Found"); break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); //Log.Warning(extraPath + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); } - + /* if(racePath != null) { pathString = racePath + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); @@ -321,12 +347,12 @@ namespace SizedApparel //Log.Message(path + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Texture Found"); break; } - } + }*/ pathString = path + SizedApparelUtility.BreastSeverityString(breastSeverity, offset, !findBigger, ref indexOut, ref severityOut); if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is found"); graphic = GraphicDatabase.Get(pathString, sourceGraphic.Shader, sourceGraphic.drawSize, sourceGraphic.color, sourceGraphic.colorTwo, sourceGraphic.data); //newAgr.Add(new ApparelGraphicRecord(graphic, agr.sourceApparel)); @@ -336,7 +362,7 @@ namespace SizedApparel //Log.Message(path + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Texture Found"); break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")apparel texture is missing"); //Log.Warning(path + BreastSeverityString(breastSeverity, offset, !findBigger) + ":Texture Not Found. Try smaller Texture."); @@ -368,31 +394,42 @@ namespace SizedApparel result = validTexture; + /* //Find Humanlike for Alien. ps. null for search defealt texturepath if(result == false & wearerDefName != null) { GetSizedApparelGraphic(sourceGraphic, breastSeverity, null , breastHediffName, customPose); - } + }*/ return graphic; } - [Obsolete] - public static SizedApparelBodyPartDef TryGetSizedApparelBodyPart(string bodyPartName) - { - return null; - } - - public static bool isPragnencyHediff(Hediff h) { - return h.def.defName.ToLower().Contains("pregnancy"); + //TODO. remove contain pregnancy side effect hediffs + if (h.def == HediffDefOf.PregnantHuman || h.def == HediffDefOf.Pregnant) + return true; + + //pawn who Giving birth. the pregnant hediff will be removed when the pawn is in labor + if (h.def == HediffDefOf.PregnancyLabor || h.def == HediffDefOf.PregnancyLaborPushing) + return true; + + return h.def.defName.ToLower().Contains("rjw_pregnancy") || h.def.defName.ToLower().EndsWith("pregnant"); // h.def.defName.ToLower().Contains("pregnancy"); + } + public static bool isRJWEggHediff(Hediff h) + { + var e = h as rjw.Hediff_InsectEgg; + if (e == null) + return false; + return true; } public static bool isBellyBulgeHediff(Hediff h) { if (isPragnencyHediff(h)) return true; + if (isRJWEggHediff(h)) + return true; if (SizedApparelPatch.LicentiaActive) { if (h.def.defName.ToLower().Contains("cumflation")) @@ -401,11 +438,14 @@ namespace SizedApparel return true; } return false; + + } - public static bool isRJWParts(string defname) + public static bool isRJWParts(Hediff h) { - return (isBreast(defname)|| isPenis(defname)|| isVagina(defname)|| isAnus(defname)); + return (isBreast(h.def.defName) || Genital_Helper.is_penis(h) || Genital_Helper.is_vagina(h) || isAnus(h.def.defName)); + //return (isBreast(defname)|| isPenis(defname)|| isVagina(defname)|| isAnus(defname)); } public static bool isBreast(string defname) { @@ -422,7 +462,7 @@ namespace SizedApparel return false; } - //To Race Support, you should Patch this! + [Obsolete] public static bool isPenis(string defname) { string lower = defname.ToLower(); @@ -430,6 +470,7 @@ namespace SizedApparel return true; return false; } + [Obsolete] public static bool isVagina(string defname) { string lower = defname.ToLower(); @@ -448,7 +489,7 @@ namespace SizedApparel //find valid breasts texture to choose apparel. public static float GetBreastSeverityValidTextures(Pawn pawn, Hediff hediff, string customDefName = null) { - ApparelRecorderComp comp = pawn.TryGetComp(); + ApparelRecorderComp comp = pawn.GetComp(); if (comp == null) return -1; @@ -468,7 +509,7 @@ namespace SizedApparel else defName = customDefName; - string bodyPartsFolderPath = "SizedApparel/BodyParts/"; + const string bodyPartsFolderPath = "SizedApparel/BodyParts/"; string defaultHediffName = "Breasts"; string graphicFolderPath = bodyPartsFolderPath + defName + "/" + "Breasts" + "/"; string fileName; @@ -501,14 +542,14 @@ namespace SizedApparel string pathString = ""; int currentSizeIndex = -1; float currentSeverity = -1; - while (offset < SizedApparelUtility.size.Length) + while (offset < SizedApparelUtility.breastsSizeStrings.Length) { if (hediff != null) { pathString = extraPath + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, findBigger, ref currentSizeIndex, ref currentSeverity); if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); @@ -517,19 +558,19 @@ namespace SizedApparel } } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); pathString = path + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, findBigger, ref currentSizeIndex, ref currentSeverity); if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); validTexture = true; break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); offset++; @@ -539,20 +580,20 @@ namespace SizedApparel if (validTexture == false) { offset = 0; - while (offset < SizedApparelUtility.size.Length) + while (offset < SizedApparelUtility.breastsSizeStrings.Length) { if (hediff != null) { pathString = extraPath + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); validTexture = true; break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); } @@ -560,13 +601,13 @@ namespace SizedApparel pathString = path + SizedApparelUtility.BreastSeverityString(targetBreastSeverity, offset, !findBigger, ref currentSizeIndex, ref currentSeverity); if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is found"); validTexture = true; break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")Breasts texture is missing"); offset++; @@ -589,15 +630,17 @@ namespace SizedApparel } //It's heavy search. Do Not Call this function rapidly - public static Graphic GetBodyPartGraphic(string raceDefName, string bodyTypeName, string hediffDefName, bool isBreast, int sizeIndex, string folderName, string defaultHediffName, out int indexOut, out string hediffResult, bool hornyGraphic = false, string customRaceDefName = null, string variation = null) + public static Graphic GetBodyPartGraphic(string raceDefName, string bodyTypeName, string hediffDefName, bool isBreast, int sizeIndex, string folderName, string defaultHediffName, out int indexOut, out string hediffResult, bool hornyGraphic = false, string customRaceDefName = null, string variation = null, Gender gender = Gender.None) { Graphic graphic = null; //for return //rec = new ApparelGraphicRecord(null, null); string defName = raceDefName; + if (customRaceDefName != null) defName = customRaceDefName; + string bodyType = bodyTypeName; - string bodyPartsFolderPath = "SizedApparel/BodyParts/"; + const string bodyPartsFolderPath = "SizedApparel/BodyParts/"; string graphicFolderPath; string targetFolderName = folderName; if (hornyGraphic) @@ -628,26 +671,48 @@ namespace SizedApparel //SizedApparelUtility.GetBreastSeverity(apparel.Wearer, out BreastSeverity, out breastHediff); - string path = graphicFolderPath + fileName; - string extraPath = graphicFolderPath + extraFileName; + string genderString; + if(gender == Gender.Female) + { + genderString = "F"; + } + if (gender == Gender.Male) + { + genderString = "M"; + } + else + genderString = string.Empty; + + + string path = graphicFolderPath + fileName + genderString; + string extraPath = graphicFolderPath + extraFileName + genderString; //path = agr.sourceApparel.def.apparel.wornGraphicPath + "_" + __instance.pawn.story.bodyType.defName; int offset = 0; + int offsetLimit = 10 ; // = SizedApparelUtility.breastsSizeStrings.Length; + + float SeverityCapped; if (isBreast) + { SeverityCapped = SizedApparelUtility.BreastSizeIndexToSeverity(sizeIndex); + offsetLimit = SizedApparelUtility.breastsSizeStrings.Length; + } else + { SeverityCapped = SizedApparelUtility.PrivatePartSizeIndexToSeverity(sizeIndex); + offsetLimit = SizedApparelUtility.commonSizeStrings.Length; + } bool validTexture = false; bool findBigger = true; // if false : search smaller first string pathString = ""; string pathStringWithVariatione = ""; - while (offset < SizedApparelUtility.size.Length) + while (offset < offsetLimit) { if (hediffDefName != null) { @@ -661,7 +726,7 @@ namespace SizedApparel pathStringWithVariatione = pathString + "_" + variation; if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); graphic = GraphicDatabase.Get(pathStringWithVariatione); @@ -669,7 +734,7 @@ namespace SizedApparel hediffResult = hediffDefName; break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); } @@ -677,7 +742,7 @@ namespace SizedApparel if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); @@ -694,7 +759,7 @@ namespace SizedApparel //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Not Found."); } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); if (isBreast) @@ -707,7 +772,7 @@ namespace SizedApparel pathStringWithVariatione = pathString + "_" + variation; if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); graphic = GraphicDatabase.Get(pathStringWithVariatione); @@ -715,13 +780,13 @@ namespace SizedApparel hediffResult = hediffDefName; break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); } if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); @@ -733,7 +798,7 @@ namespace SizedApparel //Log.Message(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Found"); break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Texture Not Found. Try bigger Texture."); @@ -744,7 +809,7 @@ namespace SizedApparel if (validTexture == false) { offset = 0; - while (offset < SizedApparelUtility.size.Length) + while (offset < offsetLimit) { if (hediffDefName != null) { @@ -758,7 +823,7 @@ namespace SizedApparel pathStringWithVariatione = pathString + "_" + variation; if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); graphic = GraphicDatabase.Get(pathStringWithVariatione); @@ -766,13 +831,13 @@ namespace SizedApparel hediffResult = hediffDefName; break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); } if (ContentFinder.Get((pathString + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); @@ -785,7 +850,7 @@ namespace SizedApparel //Log.Message(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Found"); break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); @@ -800,7 +865,7 @@ namespace SizedApparel pathStringWithVariatione = pathString + "_" + variation; if (ContentFinder.Get((pathStringWithVariatione + "_south"), false) != null) // checking special texture like udder { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is found"); graphic = GraphicDatabase.Get(pathStringWithVariatione); @@ -808,13 +873,13 @@ namespace SizedApparel hediffResult = hediffDefName; break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathStringWithVariatione + ")BodyPart texture is missing"); } if ((ContentFinder.Get((pathString + "_south"), false) != null)) { - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is found"); //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); @@ -826,7 +891,7 @@ namespace SizedApparel //Log.Message(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Found"); break; } - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] (" + pathString + ")BodyPart texture is missing"); //Log.Warning(path + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Texture Not Found. Try smaller Texture."); @@ -854,148 +919,37 @@ namespace SizedApparel } indexOut = currentSizeIndex; + + if(graphic == null & gender != Gender.None) + { + //try search genderless graphic + graphic = GetBodyPartGraphic(raceDefName, bodyTypeName, hediffDefName, isBreast, sizeIndex, folderName, defaultHediffName, out indexOut, out hediffResult, hornyGraphic, customRaceDefName, variation, Gender.None); + } - if(graphic == null & hornyGraphic == true) + if (graphic == null & hornyGraphic == true) { //try search normal Graphic instead of HornyGraphic - graphic = GetBodyPartGraphic(raceDefName, bodyTypeName, hediffDefName, isBreast, sizeIndex, folderName, defaultHediffName, out indexOut, out hediffResult, false, customRaceDefName, variation); + graphic = GetBodyPartGraphic(raceDefName, bodyTypeName, hediffDefName, isBreast, sizeIndex, folderName, defaultHediffName, out indexOut, out hediffResult, false, customRaceDefName, variation, gender); } return graphic; } - /* - public static Graphic GetBodyPartGraphic(Pawn pawn, Hediff hediff, bool isBreast, string folderName, string defaultHediffName, bool hornyGraphic = false, bool updateComp = false, string customRaceDefName = null) + + + public static PubicHairDef GetRandomPubicHair() { - int i = -1; - string s = null; - return GetBodyPartGraphic(pawn, hediff, isBreast, folderName, defaultHediffName, out i,out s, hornyGraphic, updateComp, customRaceDefName); + return DefDatabase.GetRandom(); + } + public static PubicHairDef GetPubicHairEmpty() + { + return DefDatabase.GetNamed("None"); } - public static Graphic GetBodyPartGraphic(Pawn pawn, Hediff hediff, bool isBreast, string folderName, string defaultHediffName, out int indexOut,out string hediffResult, bool hornyGraphic = false, bool updateComp = false, string customRaceDefName = null) - { - Graphic graphic = null; //for return - indexOut = -1; - hediffResult = null; - if (pawn == null) - return null; - if (hediff == null) - return null; - //rec = new ApparelGraphicRecord(null, null); - Graphic nakedGraphic = pawn.Drawer?.renderer?.graphics?.nakedGraphic; - if (nakedGraphic == null) - return null; - var rotComp = pawn.TryGetComp(); - if (rotComp!=null) - { - if (rotComp.Stage == RotStage.Rotting) - nakedGraphic = pawn.Drawer.renderer.graphics.rottingGraphic; - } - - ApparelRecorderComp comp = pawn.TryGetComp(); - string defName = pawn.def.defName; - if (customRaceDefName != null) - defName = customRaceDefName; - string bodyType = null; - if (pawn.story != null) - bodyType = pawn.story.bodyType?.defName; - string bodyPartsFolderPath = "SizedApparel/BodyParts/"; - string graphicFolderPath; - if (hornyGraphic) - graphicFolderPath = bodyPartsFolderPath + defName + "/" + folderName + "/Horny/"; - else - graphicFolderPath = bodyPartsFolderPath + defName + "/" + folderName + "/"; - string fileName; - string extraFileName; - if(bodyType != null) - { - fileName = defaultHediffName + ("_" + bodyType); - extraFileName = hediff.def.defName + ("_" + bodyType); - } - else - { - fileName = defaultHediffName; - extraFileName = hediff.def.defName; - } - - //if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize) - // BreastSeverity = comp.BreastSeverityCache; - //int currentSizeIndex = 0; - //float currentSeverity = -1; - //int minSupportedBreastSizeIndex = 1000; - //float minSupportedBreastSeverity = 1000; - - //SizedApparelUtility.GetBreastSeverity(apparel.Wearer, out BreastSeverity, out breastHediff); - if (comp != null) - { - - if (comp.hasUpdateBefore == false) - { - if (updateComp) - { - //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,true,false); - } - - } - float SeverityCapped = hediff.Severity; ; - if (isBreast) - { - if (SizedApparelSettings.useBreastSizeCapForApparels) //SizedApparelSettings.useBreastSizeCapForApparels //wip - SeverityCapped = Math.Min(comp.BreastSeverityCache, SeverityCapped); - } - - - - - - if (comp.hasUnsupportedApparel == false) - { - int index; - if (isBreast) - index = SizedApparelUtility.BreastSeverityInt(hediff.Severity); - else - index = SizedApparelUtility.PrivatePartSeverityInt(hediff.Severity); - - Graphic partGraphic = GetBodyPartGraphic(pawn.def.defName, pawn.story?.bodyType?.defName, hediff.def.defName, hornyGraphic, index, folderName, defaultHediffName,out indexOut, out hediffResult, hornyGraphic, customRaceDefName); - if(partGraphic != null) - { - graphic = GraphicDatabase.Get(partGraphic.path, nakedGraphic.Shader, nakedGraphic.drawSize, nakedGraphic.color, nakedGraphic.colorTwo); - } - - - - - - - //minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex); - //comp.breastSeverityCapToDraw = Math.Min(comp.breastSeverityCapToDraw, minSupportedBreastSeverity); - } - } - - else - { - if (SizedApparelSettings.Debug) - Log.Warning("[Sized Apparel] " + pawn.Name + " doesn't have SizedApparel Compoenet!!"); - - } - return graphic; - - }*/ - - //TODO - public static Graphic GetBodyGraphic() - { - return null; - } public static bool IsHorny(Pawn pawn) { - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if(comp != null) { if (comp.forceHorny == true) @@ -1241,7 +1195,7 @@ namespace SizedApparel if (findBigger) { - if (size.Length - (targetIndex + offset) > 0) + if (breastsSizeStrings.Length - (targetIndex + offset) > 0) { //size.Length< targetIndex + offset @@ -1255,14 +1209,14 @@ namespace SizedApparel //targetSeverity = BreastSizeIndexToSeverity(result); targetSeverity = PrivatePartSizeIndexToSeverity(result); outTargetSeverity = targetSeverity; - return size[result]; + return breastsSizeStrings[result]; } } else { if (targetIndex - offset < 0) return "_-1"; - if (size.Length - (targetIndex - offset) > 0) + if (breastsSizeStrings.Length - (targetIndex - offset) > 0) { /* if (size[targetIndex - offset] != null) @@ -1274,7 +1228,7 @@ namespace SizedApparel //targetSeverity = BreastSizeIndexToSeverity(result); targetSeverity = PrivatePartSizeIndexToSeverity(result); outTargetSeverity = targetSeverity; - return size[result]; + return breastsSizeStrings[result]; } } } @@ -1293,108 +1247,6 @@ namespace SizedApparel public static string BreastSeverityString(float BreastSeverity, int offset, bool findBigger, ref int outTargetIndex, ref float outTargetSeverity) { - - { - /* old method - if (offset == 0) - { - if (BreastSeverity <= 0.1f) - return micro; //micro, flat - if (BreastSeverity <= 0.05f) - return small; // small , tight - if (BreastSeverity <= 0.25f) - return average; // average - if (BreastSeverity <= 0.70f) - return large; // large , loose - if (BreastSeverity <= 0.90f) - return huge; // huge , gaping - if (BreastSeverity <= 1.01f) - return oversized; // oversized - return String.Empty; // none - } - if (offset == 1) - { - if (BreastSeverity <= 0.1f) - return micro; //micro, flat - if (BreastSeverity <= 0.05f) - return small; // small , tight - if (BreastSeverity <= 0.25f) - return average; // average - if (BreastSeverity <= 0.70f) - return large; // large , loose - if (BreastSeverity <= 0.90f) - return huge; // huge , gaping - if (BreastSeverity <= 1.01f) - return oversized; // oversized - return String.Empty; // none - } - if (offset == 2) - { - if (BreastSeverity <= 0.1f) - return micro; //micro, flat - if (BreastSeverity <= 0.05f) - return small; // small , tight - if (BreastSeverity <= 0.25f) - return average; // average - if (BreastSeverity <= 0.70f) - return large; // large , loose - if (BreastSeverity <= 0.90f) - return huge; // huge , gaping - if (BreastSeverity <= 1.01f) - return oversized; // oversized - return String.Empty; // none - } - if (offset == 3) - { - if (BreastSeverity <= 0.1f) - return micro; //micro, flat - if (BreastSeverity <= 0.05f) - return small; // small , tight - if (BreastSeverity <= 0.25f) - return average; // average - if (BreastSeverity <= 0.70f) - return large; // large , loose - if (BreastSeverity <= 0.90f) - return huge; // huge , gaping - if (BreastSeverity <= 1.01f) - return oversized; // oversized - return String.Empty; // none - } - if (offset == 4) - { - if (BreastSeverity <= 0.1f) - return micro; //micro, flat - if (BreastSeverity <= 0.05f) - return small; // small , tight - if (BreastSeverity <= 0.25f) - return average; // average - if (BreastSeverity <= 0.70f) - return large; // large , loose - if (BreastSeverity <= 0.90f) - return huge; // huge , gaping - if (BreastSeverity <= 1.01f) - return oversized; // oversized - return String.Empty; // none - } - if (offset == 5) - { - if (BreastSeverity <= 0.1f) - return micro; //micro, flat - if (BreastSeverity <= 0.05f) - return small; // small , tight - if (BreastSeverity <= 0.25f) - return average; // average - if (BreastSeverity <= 0.70f) - return large; // large , loose - if (BreastSeverity <= 0.90f) - return huge; // huge , gaping - if (BreastSeverity <= 1.01f) - return oversized; // oversized - return String.Empty; // none - } - return String.Empty; // none } - */ - }//Old Method int targetIndex = -1; float targetSeverity = 0; int result = -1; @@ -1408,57 +1260,68 @@ namespace SizedApparel } else if (BreastSeverity < 0.02f) { - targetIndex = findAvailableSmallerSizeFromSetting(0); + targetIndex = 0; + //targetIndex = findAvailableSmallerSizeFromSetting(0); targetSeverity = 0.01f; } else if (BreastSeverity < 0.2f) { - targetIndex = findAvailableSmallerSizeFromSetting(1); + targetIndex = 1; + //targetIndex = findAvailableSmallerSizeFromSetting(1); targetSeverity = 0.02f; } else if (BreastSeverity < 0.40f) { - targetIndex = findAvailableSmallerSizeFromSetting(2); + targetIndex = 2; + //targetIndex = findAvailableSmallerSizeFromSetting(2); targetSeverity = 0.2f; } else if (BreastSeverity < 0.60f) { - targetIndex = findAvailableSmallerSizeFromSetting(3); + targetIndex = 3; + //targetIndex = findAvailableSmallerSizeFromSetting(3); targetSeverity = 0.40f; } else if (BreastSeverity < 0.80f) { - targetIndex = findAvailableSmallerSizeFromSetting(4); + targetIndex = 4; + //targetIndex = findAvailableSmallerSizeFromSetting(4); targetSeverity = 0.60f; } else if (BreastSeverity < 1.0f) { - targetIndex = findAvailableSmallerSizeFromSetting(5); + targetIndex = 5; + //targetIndex = findAvailableSmallerSizeFromSetting(5); targetSeverity = 0.80f; } else if (BreastSeverity < 1.2f) { - targetIndex = findAvailableSmallerSizeFromSetting(6); + targetIndex = 6; + //targetIndex = findAvailableSmallerSizeFromSetting(6); targetSeverity = 1.0f; } else if (BreastSeverity < 1.4f) { - targetIndex = findAvailableSmallerSizeFromSetting(7); + targetIndex = 7; + //targetIndex = findAvailableSmallerSizeFromSetting(7); targetSeverity = 1.2f; } else if (BreastSeverity < 1.6f) { - targetIndex = findAvailableSmallerSizeFromSetting(8); + targetIndex = 8; + //targetIndex = findAvailableSmallerSizeFromSetting(8); targetSeverity = 1.4f; } else if (BreastSeverity < 1.8f) { - targetIndex = findAvailableSmallerSizeFromSetting(9); + targetIndex = 9; + //targetIndex = findAvailableSmallerSizeFromSetting(9); targetSeverity = 1.6f; } else { - targetIndex = findAvailableSmallerSizeFromSetting(10); + targetIndex = 10; + //targetIndex = findAvailableSmallerSizeFromSetting(10); targetSeverity = 1.8f; } //if (targetIndex - offset < 0) @@ -1467,7 +1330,7 @@ namespace SizedApparel if (findBigger) { - if (size.Length - (targetIndex + offset) > 0) + if (breastsSizeStrings.Length - (targetIndex + offset) > 0) { //size.Length< targetIndex + offset @@ -1479,14 +1342,14 @@ namespace SizedApparel outTargetIndex = result; targetSeverity = BreastSizeIndexToSeverity(result); outTargetSeverity = targetSeverity; - return size[result]; + return breastsSizeStrings[result]; } } else { if (targetIndex - offset < 0) return "_-1"; - if (size.Length - (targetIndex - offset) > 0) + if (breastsSizeStrings.Length - (targetIndex - offset) > 0) { /* if (size[targetIndex - offset] != null) @@ -1496,7 +1359,7 @@ namespace SizedApparel outTargetIndex = result; targetSeverity = BreastSizeIndexToSeverity(result); outTargetSeverity = targetSeverity; - return size[result]; + return breastsSizeStrings[result]; } } } @@ -1552,7 +1415,7 @@ namespace SizedApparel { /* - ApparelRecorderComp apparelRecorder = pawn.TryGetComp(); + ApparelRecorderComp apparelRecorder = pawn.GetComp(); if(apparelRecorder == null) { Log.Message("No ApparelRecorder Found"); @@ -1603,12 +1466,12 @@ namespace SizedApparel bool validTexture = false; bool findBigger = true; // if false : search smaller first - while (offset < size.Length) + while (offset < breastsSizeStrings.Length) { if (breastHediff != null) { searchingPath = extraPath + BreastSeverityString(BreastSeverity, offset, findBigger,ref currentIndex,ref currentSeverity) + "_south"; - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); if (ContentFinder.Get((searchingPath), false) != null) // checking special texture like udder @@ -1620,7 +1483,7 @@ namespace SizedApparel //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, findBigger) + ":Extra Texture Not Found."); } searchingPath = path + BreastSeverityString(BreastSeverity, offset, findBigger, ref currentIndex,ref currentSeverity) + "_south"; - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); if ((ContentFinder.Get((searchingPath), false) != null)) { @@ -1642,12 +1505,12 @@ namespace SizedApparel if (validTexture == false) { offset = 0; - while (offset < size.Length) + while (offset < breastsSizeStrings.Length) { if (breastHediff != null) { searchingPath = extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentIndex,ref currentSeverity) + "_south"; - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); if (ContentFinder.Get((searchingPath), false) != null) // checking special texture like udder { @@ -1658,7 +1521,7 @@ namespace SizedApparel //Log.Warning(extraPath + BreastSeverityString(BreastSeverity, offset, !findBigger) + ":Extra Texture Not Found."); } searchingPath = path + BreastSeverityString(BreastSeverity, offset, !findBigger, ref currentIndex, ref currentSeverity) + "_south"; - if (SizedApparelSettings.Debug) + if (SizedApparelSettings.Debug && SizedApparelSettings.DetailLog) Log.Message("[Sized Apparel] " + pawn.Name + ": ApparelSearching: " + searchingPath); if ((ContentFinder.Get((searchingPath), false) != null)) { @@ -1698,7 +1561,7 @@ namespace SizedApparel if (SizedApparelSettings.Debug) Log.Message("[Sized Apparel] " + pawn.Name + ": hasUnSupportedApparel Testing..."); /* - ApparelRecorderComp apparelRecorder = pawn.TryGetComp(); + ApparelRecorderComp apparelRecorder = pawn.GetComp(); if(apparelRecorder == null) { Log.Message("No ApparelRecorder Found"); @@ -1712,9 +1575,15 @@ namespace SizedApparel */ //Log.Message("Check hasUnSupportedApparel"); bool hasUnsupportedApparel = false; - var comp = pawn.TryGetComp(); - if (!pawn.RaceProps.Humanlike) + + /* + if (!pawn.RaceProps.Humanlike) //Animals or Mechanoids would have apparels? return true; + */ + + var comp = pawn.GetComp(); + if (comp == null) + return false; List apparels = new List(); if (!fromGraphicRecord) { @@ -1797,7 +1666,10 @@ namespace SizedApparel extraPath = path; string resultPath = null; bool resultOut = false; - var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(new SizedApparelsDatabase.SizedApparelDatabaseKey(path, pawn.def.defName, pawn.story?.bodyType?.defName, breastHediff?.def.defName, SizedApparelUtility.BreastSeverityInt(BreastSeverity)),out currentIndex, out currentSeverity).pathWithSizeIndex; + var key = new SizedApparelsDatabase.SizedApparelDatabaseKey(path, pawn.def.defName, pawn.story?.bodyType?.defName, pawn.gender, breastHediff?.def.defName, SizedApparelUtility.BreastSeverityInt(BreastSeverity)); + if (SizedApparelSettings.useGenderSpecificTexture) + key.gender = Gender.None; + var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(key,out currentIndex, out currentSeverity).pathWithSizeIndex; if (comp != null) { if (cacheToComp) @@ -1823,7 +1695,7 @@ namespace SizedApparel bool validTexture = false; bool findBigger = true; // if false : search smaller first - while (offset < size.Length) + while (offset < breastsSizeStrings.Length) { if (breastHediff != null) { @@ -1879,7 +1751,7 @@ namespace SizedApparel if (validTexture == false) { offset = 0; - while (offset < size.Length) + while (offset < breastsSizeStrings.Length) { if (breastHediff != null) { @@ -1959,9 +1831,10 @@ namespace SizedApparel public static void UpdateAllApparel(Pawn pawn, bool onlyGraphicRecords = false)//need to be update before call it { + if (pawn == null) return; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if (comp == null) return; PawnGraphicSet pawnGraphicSet = pawn.Drawer?.renderer?.graphics; @@ -2001,7 +1874,7 @@ namespace SizedApparel return; } - pawnGraphicSet.ResolveApparelGraphics(); + //pawnGraphicSet.ResolveApparelGraphics(); } @@ -2009,7 +1882,7 @@ namespace SizedApparel { if (pawn == null) return false; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if (comp == null) return false; if (!flags.FlagSet(PawnRenderFlags.Clothes)) @@ -2023,7 +1896,7 @@ namespace SizedApparel { if (pawn == null) return false; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if (comp == null) return false; if (!flags.FlagSet(PawnRenderFlags.Clothes)) @@ -2078,7 +1951,20 @@ namespace SizedApparel { if (pawn == null) return false; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); + if (comp == null) + return false; + + if (!flags.FlagSet(PawnRenderFlags.Clothes)) + return true; + return true; + } + + public static bool CanDrawPubicHair(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None) + { + if (pawn == null) + return false; + var comp = pawn.GetComp(); if (comp == null) return false; @@ -2091,7 +1977,7 @@ namespace SizedApparel { if (pawn == null) return false; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if (comp == null) return false; if (!flags.FlagSet(PawnRenderFlags.Clothes)) @@ -2113,7 +1999,7 @@ namespace SizedApparel { if (pawn == null) return false; - var comp = pawn.TryGetComp(); + var comp = pawn.GetComp(); if (comp == null) return false; @@ -2159,8 +2045,90 @@ namespace SizedApparel } + + public static bool CanApplySizedApparel(Pawn pawn) + { + if (pawn == null) + return false; + + //RaceProps Check + if (!pawn.RaceProps.Humanlike) //apply humanlikes always + { + if (pawn.RaceProps.Animal) + { + if (!SizedApparelSettings.ApplyAnimals) + return false; + } + else if (pawn.RaceProps.IsMechanoid) + { + if (!SizedApparelSettings.ApplyMechanoid) + return false; + } + } + else + { + if (!SizedApparelSettings.ApplyHumanlikes) + return false; + } + //Faction Check TODO + if (pawn.Faction != null && pawn.Faction != Faction.OfPlayer) + { + switch (pawn.Faction.PlayerRelationKind) + { + case FactionRelationKind.Neutral: + break; + case FactionRelationKind.Ally: + break; + case FactionRelationKind.Hostile: + break; + default: + break; + } + } + return true; + } + + + public static bool CanPoseApparels(Pawn pawn, string targetPose, string currentHediffName = null, int currentSeverityInt = 0, int cappedSeverityInt = 1000) + { + if (pawn == null) + return false; + foreach (ApparelGraphicRecord agr in pawn.Drawer.renderer.graphics.apparelGraphics) + { + if (agr.graphic == null) + continue; + /* + if (!agr.sourceApparel.def.apparel.bodyPartGroups.Any(bpgd => bpgd.defName == "Torso" || bpgd.defName == "Chest")) + continue; + + if (agr.sourceApparel.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_IgnorePose".ToLower())) + continue; + */ + //Only Check Torso Apparel Only + if (!agr.sourceApparel.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso)) + continue; + + string originalPath = SizedApparelsDatabase.GetSupportedApparelOriginalPath(agr.graphic.path); + if (originalPath == null) + return false; + + int outInt = -1; + float outFloat = -1; + SizedApparelsDatabase.SizedApparelDatabaseKey key = new SizedApparelsDatabase.SizedApparelDatabaseKey(originalPath, pawn.def.defName, pawn.story?.bodyType?.defName, pawn.gender, currentHediffName, Math.Min(currentSeverityInt, cappedSeverityInt), false, targetPose); + if (SizedApparelSettings.useGenderSpecificTexture) + key.gender = Gender.None; + var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(key, out outInt, out outFloat); + if (!result.isCustomPose) + return false; + } + return true; + } + + + + + + + } - - - } diff --git a/source/SizedApparel/SizedApparelforRJW.csproj b/source/SizedApparel/SizedApparelforRJW.csproj index 50ddab0..60ac641 100644 --- a/source/SizedApparel/SizedApparelforRJW.csproj +++ b/source/SizedApparel/SizedApparelforRJW.csproj @@ -9,7 +9,7 @@ Properties SizedApparel SizedApparelforRJW - v4.7.2 + v4.8 512 true @@ -28,7 +28,7 @@ none true - ..\..\1.3\Assemblies\ + ..\..\1.4\Assemblies\ TRACE prompt 4 @@ -45,15 +45,25 @@ False - ..\..\..\..\..\..\workshop\content\294100\818773962\v1.1\Assemblies\HugsLib.dll + ..\..\..\..\..\..\workshop\content\294100\818773962\v1.4\Assemblies\HugsLib.dll False - ..\..\..\rimnude-unofficial\1.3 Assembly\Assemblies\RimNudeWorld.dll + ..\..\..\rimnude-unofficial\Assembly Folders\1.4 Assembly\Assemblies\RimNudeWorld.dll False + + ..\..\..\rimworld-animations\1.4\Assemblies\Rimworld-Animations.dll + False + False + False + - ..\..\..\RJW\1.3\Assemblies\RJW.dll + ..\..\..\rjw\1.4\Assemblies\RJW.dll + False + + + ..\..\..\rjw_menstruation\1.4\Assemblies\RJW_Menstruation.dll False @@ -74,28 +84,38 @@ ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll False + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll + False + + + + + - + + - - + + + diff --git a/source/SizedApparel/SizedApparelsDatabase.cs b/source/SizedApparel/SizedApparelsDatabase.cs index e59c72f..b586a85 100644 --- a/source/SizedApparel/SizedApparelsDatabase.cs +++ b/source/SizedApparel/SizedApparelsDatabase.cs @@ -11,6 +11,27 @@ using rjw; namespace SizedApparel { + public class BodyTypeAndPath + { + public string BodyType; + public string Path; + } + + public class ApparelData + { + public string WornPath; + public List Data; + } + public class PreDefinedApparelDate : Def + { + public string HediffName; + public bool IsBreasts = false; + public List Data; + } + public class PreDefinedBodyPartGraphicDate : Def + { + + } public static class SizedApparelsDatabase { @@ -20,12 +41,19 @@ namespace SizedApparel } + 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; @@ -33,11 +61,12 @@ namespace SizedApparel public string variation; - public SizedApparelDatabaseKey(string path, string race, string bodyType = null, string hediff = null, int size = -1, bool horny = false, string customPose = null, string variation = null) + 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; @@ -51,7 +80,7 @@ namespace SizedApparel { if (x.targetSize != y.targetSize) return false; - return true && (x.pathWithoutSizeIndex == y.pathWithoutSizeIndex) && (x.bodyTypeName == y.bodyTypeName) && (x.raceName == y.raceName) && (x.hediffName == y.hediffName) && (x.isHorny == y.isHorny) && (x.customPose == y.customPose) && (x.variation == y.variation); + 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) @@ -65,17 +94,19 @@ namespace SizedApparel 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, int size = -1, bool horny = false, string customPose = null, string variation = null) + 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; @@ -88,7 +119,7 @@ namespace SizedApparel { 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.isHorny == y.isHorny) && (x.customPose == y.customPose) && (x.variation == y.variation); + 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) @@ -103,18 +134,23 @@ namespace SizedApparel public bool isUnsupportedHumanlikePath; public bool isCustomPose; public string hediffName; - public Dictionary points; + public string bodyType; // useful for bodypart Graphic (body addons). + public string raceName; // for check is Human or Alien or Alien as Human. + public SizedApparelTexturePointDef points; - public PathAndSize(string path, int index, bool unsupportedHumanlike = false, bool customPose = false, string hediff = null ,Dictionary pointsInput = null) + public PathAndSize(string path, int index, bool unsupportedHumanlike = false, bool customPose = false, string hediff = null, string bodytype = null, string raceName = null, SizedApparelTexturePointDef pointsInput = null) { this.pathWithSizeIndex = path; this.size = index; this.isUnsupportedHumanlikePath = unsupportedHumanlike; this.isCustomPose = customPose; this.hediffName = hediff; + this.bodyType = bodytype; this.points = pointsInput; + this.raceName = raceName; } } + private static Dictionary ApparelRecordersCache = new Dictionary(); private static Dictionary SizedApparelBodyGraphic = new Dictionary(); // TODO private static Dictionary SupportedApparelResultPath = new Dictionary(new SizedApparelDatabaseKeyComparer()); @@ -124,6 +160,14 @@ namespace SizedApparel //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(); // comp can be null + ApparelRecordersCache.Add(pawn, comp); + return comp; + } public static Dictionary AlienRaceUseHumanlike = new Dictionary(); private static void ResetAlienRaceUseHumanlike() @@ -138,7 +182,8 @@ namespace SizedApparel AlienRaceUseHumanlike.Add(raceDef.defName, true); } } - + + [Obsolete] public static bool GetAlienRaceUseHumanlike(string raceDef) { if (AlienRaceUseHumanlike.NullOrEmpty()) @@ -205,6 +250,8 @@ namespace SizedApparel Log.Message("[Sized Apparel] SizedApparelDataBase::Result Path: " + value.pathWithSizeIndex); return value; } + + if (SizedApparelSettings.Debug) Log.Message(" [Sized Apparel] SizedApparelDataBase::Key Not Found: " + key.pathWithoutSizeIndex); @@ -226,71 +273,150 @@ namespace SizedApparel else targetRaceName = key.raceName;*/ + + + AlienRaceSetting raceSetting; + raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == key.raceName); + targetRaceName = key.raceName; + if(raceSetting != null && raceSetting.allowRaceNamedApparel == false) + { + targetRaceName = null; + } + 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.customPose + 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); + 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); + result = new PathAndSize(graphic.path, indexOut, false, customPose, hediffResult, key.bodyTypeName, key.raceName); SupportedApparelResultPath.SetOrAdd(key, result); SupportedApparelOriginalPath.SetOrAdd(result.pathWithSizeIndex, key.pathWithoutSizeIndex); + return result; } else { + //Try Search Human Apparel. then null + if (key.raceName != "Human" && key.raceName != null) // null check for avoid infinite loop + { + if (raceSetting != null && raceSetting.asHuman) + { + var newKey = new SizedApparelDatabaseKey(key.pathWithoutSizeIndex, "Human", key.bodyTypeName, key.gender, key.hediffName, key.targetSize, key.isHorny, key.customPose, key.variation); + result = GetSupportedApparelSizedPath(newKey, out indexOut, out currentSeverityOut); + SupportedApparelResultPath.SetOrAdd(key, result); + SupportedApparelOriginalPath.SetOrAdd(key.pathWithoutSizeIndex, key.pathWithoutSizeIndex); + return result; + } + else + { + var newKey = new SizedApparelDatabaseKey(key.pathWithoutSizeIndex, null, key.bodyTypeName, key.gender, key.hediffName, key.targetSize, key.isHorny, key.customPose, key.variation); + result = GetSupportedApparelSizedPath(newKey, out indexOut, out currentSeverityOut); + SupportedApparelResultPath.SetOrAdd(key, result); + SupportedApparelOriginalPath.SetOrAdd(key.pathWithoutSizeIndex, key.pathWithoutSizeIndex); + return result; + } + } + if (key.raceName == "Human") + { + var newKey = new SizedApparelDatabaseKey(key.pathWithoutSizeIndex, null, key.bodyTypeName, key.gender, key.hediffName, key.targetSize, key.isHorny, key.customPose, key.variation); + result = GetSupportedApparelSizedPath(newKey, out indexOut, out currentSeverityOut); + SupportedApparelResultPath.SetOrAdd(key, result); + SupportedApparelOriginalPath.SetOrAdd(key.pathWithoutSizeIndex, key.pathWithoutSizeIndex); + return result; + } + result = new PathAndSize(null, -1); SupportedApparelResultPath.SetOrAdd(key, result); SupportedApparelOriginalPath.SetOrAdd(key.pathWithoutSizeIndex, key.pathWithoutSizeIndex); + return result; } return result; } - public static PathAndSize GetSupportedBodyPartPath(BodyPartDatabaseKey key, bool isBreast, string folderName, string defaultHediffName, string customRaceDefName = null) + 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, customRaceDefName, key.variation); + 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); + result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult, key.bodyTypeName, key.raceName); SupportedBodyPartResultPath.SetOrAdd(key, result); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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, customRaceDefName, key.variation); + 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); + result = new PathAndSize(graphic.path, currentSize, false, true, hediffResult , null, key.raceName); SupportedBodyPartResultPath.SetOrAdd(key, result); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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, customRaceDefName, key.variation); + 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) { - result = new PathAndSize(graphic.path, currentSize, false, key.customPose == null ? true : false, hediffResult); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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, customRaceDefName, key.variation); + 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) { - result = new PathAndSize(graphic.path, currentSize, false, key.customPose == null ? true : false, hediffResult); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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; } @@ -298,8 +424,9 @@ namespace SizedApparel //SizedApparelMod.CheckAndLoadAlienRaces(); //HumanLike Search - var raceSetting = SizedApparelSettings.alienRaceSettings.FirstOrDefault((AlienRaceSetting s) => s.raceName == key.raceName); - if (raceSetting !=null && !raceSetting.asHumanlike) //old: !SizedApparelSettings.UnsupportedRaceToUseHumanlike + 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); @@ -309,36 +436,56 @@ namespace SizedApparel if (key.customPose != null) { - graphic = SizedApparelUtility.GetBodyPartGraphic(key.raceName, key.bodyTypeName, key.hediffName, isBreast, key.targetSize, folderName + "/CustomPose/" + key.customPose, defaultHediffName, out currentSize, out hediffResult, key.isHorny, "Humanlike", key.variation); + 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) { - result = new PathAndSize(graphic.path, currentSize, true, true, hediffResult); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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, "Humanlike", key.variation); + 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) { - result = new PathAndSize(graphic.path, currentSize, true, true, hediffResult); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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, "Humanlike", key.variation); + 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) { - result = new PathAndSize(graphic.path, currentSize, true, key.customPose == null ? true : false, hediffResult); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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, "Humanlike", key.variation); + 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) { - result = new PathAndSize(graphic.path, currentSize, true, key.customPose == null ? true : false, hediffResult); + //SizedApparelTexturePointDef PointsDef = DefDatabase.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; } @@ -351,5 +498,95 @@ namespace SizedApparel return result; } + public static void RandomPreCacheForBodyParts() + { + //variationDef = DefDatabase.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 bodyTypes = new List(); + bodyTypes.Add("Female"); + bodyTypes.Add("Thin"); + + + // DefDatabase.AllDefsListForReading + foreach (ThingDef thingDef in DefDatabase.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? + } + + } + } + + + } + + } }