diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll
similarity index 100%
rename from 1.6/Assemblies/WulaFallenEmpire.dll
rename to 1.6/1.6/Assemblies/WulaFallenEmpire.dll
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/Constant/Constant.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/Constant/Constant.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/Constant/Constant.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/Constant/Constant.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/Constant/Thoughts.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/Constant/Thoughts.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/Constant/Thoughts.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/Constant/Thoughts.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackMelee.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackMelee.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackMelee.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackMelee.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackStatic.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackStatic.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackStatic.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/AttackStatic.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/DoBill.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/DoBill.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/DoBill.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/DoBill.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Goto.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Goto.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Goto.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Goto.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Ingest.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Ingest.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Ingest.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Ingest.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/LayDown.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/LayDown.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/LayDown.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/LayDown.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Lovin.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Lovin.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Lovin.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Lovin.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Mine.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Mine.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Mine.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Mine.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/RemoveApparel.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/RemoveApparel.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/RemoveApparel.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/RemoveApparel.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Research.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Research.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Research.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Research.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/SocialRelax.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/SocialRelax.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/SocialRelax.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/SocialRelax.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/StandAndBeSociallyActive.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/StandAndBeSociallyActive.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/StandAndBeSociallyActive.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/StandAndBeSociallyActive.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Strip.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Strip.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Strip.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Strip.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/WaitCombat.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/WaitCombat.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/WaitCombat.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/WaitCombat.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wait_Downed.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wait_Downed.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wait_Downed.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wait_Downed.xml
diff --git a/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wear.xml b/1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wear.xml
similarity index 100%
rename from 1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wear.xml
rename to 1.6/1.6/Defs/AnimationDefs/WulaSpecies/ForJobs/Wear.xml
diff --git a/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml b/1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
similarity index 100%
rename from 1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
rename to 1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
diff --git a/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml b/1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml
similarity index 100%
rename from 1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml
rename to 1.6/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml
diff --git a/1.6/Defs/BodyAndPartDefs/Bodyparts_WULA.xml b/1.6/1.6/Defs/BodyAndPartDefs/Bodyparts_WULA.xml
similarity index 100%
rename from 1.6/Defs/BodyAndPartDefs/Bodyparts_WULA.xml
rename to 1.6/1.6/Defs/BodyAndPartDefs/Bodyparts_WULA.xml
diff --git a/1.6/Defs/DamageDefs/Damages_Wula.xml b/1.6/1.6/Defs/DamageDefs/Damages_Wula.xml
similarity index 100%
rename from 1.6/Defs/DamageDefs/Damages_Wula.xml
rename to 1.6/1.6/Defs/DamageDefs/Damages_Wula.xml
diff --git a/1.6/Defs/DesignationCategoryDefs/WULA_DesignationCategoryDefs.xml b/1.6/1.6/Defs/DesignationCategoryDefs/WULA_DesignationCategoryDefs.xml
similarity index 100%
rename from 1.6/Defs/DesignationCategoryDefs/WULA_DesignationCategoryDefs.xml
rename to 1.6/1.6/Defs/DesignationCategoryDefs/WULA_DesignationCategoryDefs.xml
diff --git a/1.6/Defs/Effects/Mote_Wula.xml b/1.6/1.6/Defs/Effects/Mote_Wula.xml
similarity index 100%
rename from 1.6/Defs/Effects/Mote_Wula.xml
rename to 1.6/1.6/Defs/Effects/Mote_Wula.xml
diff --git a/1.6/Defs/EventDefs/EventDef_Examples.xml b/1.6/1.6/Defs/EventDefs/EventDef_Examples.xml
similarity index 100%
rename from 1.6/Defs/EventDefs/EventDef_Examples.xml
rename to 1.6/1.6/Defs/EventDefs/EventDef_Examples.xml
diff --git a/1.6/Defs/EventDefs/EventDef_VariableTest.xml b/1.6/1.6/Defs/EventDefs/EventDef_VariableTest.xml
similarity index 100%
rename from 1.6/Defs/EventDefs/EventDef_VariableTest.xml
rename to 1.6/1.6/Defs/EventDefs/EventDef_VariableTest.xml
diff --git a/1.6/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml b/1.6/1.6/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml
rename to 1.6/1.6/Defs/EventDefs/EventDef_WULA_FE_Spiritualist.xml
diff --git a/1.6/Defs/EventDefs/EventDef_Wula.xml b/1.6/1.6/Defs/EventDefs/EventDef_Wula.xml
similarity index 100%
rename from 1.6/Defs/EventDefs/EventDef_Wula.xml
rename to 1.6/1.6/Defs/EventDefs/EventDef_Wula.xml
diff --git a/1.6/Defs/FaceShapeDefs/BrowShape.xml b/1.6/1.6/Defs/FaceShapeDefs/BrowShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/BrowShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/BrowShape.xml
diff --git a/1.6/Defs/FaceShapeDefs/EmotionShape.xml b/1.6/1.6/Defs/FaceShapeDefs/EmotionShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/EmotionShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/EmotionShape.xml
diff --git a/1.6/Defs/FaceShapeDefs/EyeShape.xml b/1.6/1.6/Defs/FaceShapeDefs/EyeShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/EyeShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/EyeShape.xml
diff --git a/1.6/Defs/FaceShapeDefs/HeadShape.xml b/1.6/1.6/Defs/FaceShapeDefs/HeadShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/HeadShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/HeadShape.xml
diff --git a/1.6/Defs/FaceShapeDefs/LidOptionShape.xml b/1.6/1.6/Defs/FaceShapeDefs/LidOptionShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/LidOptionShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/LidOptionShape.xml
diff --git a/1.6/Defs/FaceShapeDefs/LidShape.xml b/1.6/1.6/Defs/FaceShapeDefs/LidShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/LidShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/LidShape.xml
diff --git a/1.6/Defs/FaceShapeDefs/MouthShape.xml b/1.6/1.6/Defs/FaceShapeDefs/MouthShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/MouthShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/MouthShape.xml
diff --git a/1.6/Defs/FaceShapeDefs/SkinShape.xml b/1.6/1.6/Defs/FaceShapeDefs/SkinShape.xml
similarity index 100%
rename from 1.6/Defs/FaceShapeDefs/SkinShape.xml
rename to 1.6/1.6/Defs/FaceShapeDefs/SkinShape.xml
diff --git a/1.6/Defs/FaceTypeDefs/WulaSpecies/BrowType.xml b/1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/BrowType.xml
similarity index 100%
rename from 1.6/Defs/FaceTypeDefs/WulaSpecies/BrowType.xml
rename to 1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/BrowType.xml
diff --git a/1.6/Defs/FaceTypeDefs/WulaSpecies/EmotionType.xml b/1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/EmotionType.xml
similarity index 100%
rename from 1.6/Defs/FaceTypeDefs/WulaSpecies/EmotionType.xml
rename to 1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/EmotionType.xml
diff --git a/1.6/Defs/FaceTypeDefs/WulaSpecies/EyeType.xml b/1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/EyeType.xml
similarity index 100%
rename from 1.6/Defs/FaceTypeDefs/WulaSpecies/EyeType.xml
rename to 1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/EyeType.xml
diff --git a/1.6/Defs/FaceTypeDefs/WulaSpecies/HeadType.xml b/1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/HeadType.xml
similarity index 100%
rename from 1.6/Defs/FaceTypeDefs/WulaSpecies/HeadType.xml
rename to 1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/HeadType.xml
diff --git a/1.6/Defs/FaceTypeDefs/WulaSpecies/LidType.xml b/1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/LidType.xml
similarity index 100%
rename from 1.6/Defs/FaceTypeDefs/WulaSpecies/LidType.xml
rename to 1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/LidType.xml
diff --git a/1.6/Defs/FaceTypeDefs/WulaSpecies/MouthType.xml b/1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/MouthType.xml
similarity index 100%
rename from 1.6/Defs/FaceTypeDefs/WulaSpecies/MouthType.xml
rename to 1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/MouthType.xml
diff --git a/1.6/Defs/FaceTypeDefs/WulaSpecies/SkinType.xml b/1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/SkinType.xml
similarity index 100%
rename from 1.6/Defs/FaceTypeDefs/WulaSpecies/SkinType.xml
rename to 1.6/1.6/Defs/FaceTypeDefs/WulaSpecies/SkinType.xml
diff --git a/1.6/Defs/FactionDefs/Factions_Player_WULA.xml b/1.6/1.6/Defs/FactionDefs/Factions_Player_WULA.xml
similarity index 100%
rename from 1.6/Defs/FactionDefs/Factions_Player_WULA.xml
rename to 1.6/1.6/Defs/FactionDefs/Factions_Player_WULA.xml
diff --git a/1.6/Defs/FleshTypeDefs/FleshType_WULA.xml b/1.6/1.6/Defs/FleshTypeDefs/FleshType_WULA.xml
similarity index 100%
rename from 1.6/Defs/FleshTypeDefs/FleshType_WULA.xml
rename to 1.6/1.6/Defs/FleshTypeDefs/FleshType_WULA.xml
diff --git a/1.6/Defs/HairDefs/WULA_Hairs.xml b/1.6/1.6/Defs/HairDefs/WULA_Hairs.xml
similarity index 100%
rename from 1.6/Defs/HairDefs/WULA_Hairs.xml
rename to 1.6/1.6/Defs/HairDefs/WULA_Hairs.xml
diff --git a/1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml b/1.6/1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml
similarity index 100%
rename from 1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml
rename to 1.6/1.6/Defs/HediffDefs/Hediffs_BodyParts_WULA.xml
diff --git a/1.6/Defs/HediffDefs/Hediffs_WULA.xml b/1.6/1.6/Defs/HediffDefs/Hediffs_WULA.xml
similarity index 100%
rename from 1.6/Defs/HediffDefs/Hediffs_WULA.xml
rename to 1.6/1.6/Defs/HediffDefs/Hediffs_WULA.xml
diff --git a/1.6/Defs/HediffDefs/Hediffs_WULA_Damage_Effect.xml b/1.6/1.6/Defs/HediffDefs/Hediffs_WULA_Damage_Effect.xml
similarity index 100%
rename from 1.6/Defs/HediffDefs/Hediffs_WULA_Damage_Effect.xml
rename to 1.6/1.6/Defs/HediffDefs/Hediffs_WULA_Damage_Effect.xml
diff --git a/1.6/Defs/HediffDefs/Hediffs_WULA_Maintenance.xml b/1.6/1.6/Defs/HediffDefs/Hediffs_WULA_Maintenance.xml
similarity index 100%
rename from 1.6/Defs/HediffDefs/Hediffs_WULA_Maintenance.xml
rename to 1.6/1.6/Defs/HediffDefs/Hediffs_WULA_Maintenance.xml
diff --git a/1.6/Defs/IncidentDefs/Wula_ScheduledIncidents.xml b/1.6/1.6/Defs/IncidentDefs/Wula_ScheduledIncidents.xml
similarity index 100%
rename from 1.6/Defs/IncidentDefs/Wula_ScheduledIncidents.xml
rename to 1.6/1.6/Defs/IncidentDefs/Wula_ScheduledIncidents.xml
diff --git a/1.6/Defs/JobDefs/WULA_JobDefs.xml b/1.6/1.6/Defs/JobDefs/WULA_JobDefs.xml
similarity index 100%
rename from 1.6/Defs/JobDefs/WULA_JobDefs.xml
rename to 1.6/1.6/Defs/JobDefs/WULA_JobDefs.xml
diff --git a/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml b/1.6/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml
similarity index 100%
rename from 1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml
rename to 1.6/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml
diff --git a/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml b/1.6/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml
similarity index 100%
rename from 1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml
rename to 1.6/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml
diff --git a/1.6/Defs/NeedDefs/WULA_Needs.xml b/1.6/1.6/Defs/NeedDefs/WULA_Needs.xml
similarity index 100%
rename from 1.6/Defs/NeedDefs/WULA_Needs.xml
rename to 1.6/1.6/Defs/NeedDefs/WULA_Needs.xml
diff --git a/1.6/Defs/PawnKinds/PawnKinds_Wula.xml b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
similarity index 100%
rename from 1.6/Defs/PawnKinds/PawnKinds_Wula.xml
rename to 1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
diff --git a/1.6/Defs/QuestScriptDefs/Wula_ScheduledEvents.xml b/1.6/1.6/Defs/QuestScriptDefs/Wula_ScheduledEvents.xml
similarity index 100%
rename from 1.6/Defs/QuestScriptDefs/Wula_ScheduledEvents.xml
rename to 1.6/1.6/Defs/QuestScriptDefs/Wula_ScheduledEvents.xml
diff --git a/1.6/Defs/RecipeDefs/Recipes_WULA.xml b/1.6/1.6/Defs/RecipeDefs/Recipes_WULA.xml
similarity index 100%
rename from 1.6/Defs/RecipeDefs/Recipes_WULA.xml
rename to 1.6/1.6/Defs/RecipeDefs/Recipes_WULA.xml
diff --git a/1.6/Defs/ResearchProjectDefs/ResearchProjects_WULA.xml b/1.6/1.6/Defs/ResearchProjectDefs/ResearchProjects_WULA.xml
similarity index 100%
rename from 1.6/Defs/ResearchProjectDefs/ResearchProjects_WULA.xml
rename to 1.6/1.6/Defs/ResearchProjectDefs/ResearchProjects_WULA.xml
diff --git a/1.6/Defs/ResearchTabDef/ResearchTabs_WULA.xml b/1.6/1.6/Defs/ResearchTabDef/ResearchTabs_WULA.xml
similarity index 100%
rename from 1.6/Defs/ResearchTabDef/ResearchTabs_WULA.xml
rename to 1.6/1.6/Defs/ResearchTabDef/ResearchTabs_WULA.xml
diff --git a/1.6/Defs/RulePackDefs/RulePacks_Namers_Factions_Wula.xml b/1.6/1.6/Defs/RulePackDefs/RulePacks_Namers_Factions_Wula.xml
similarity index 100%
rename from 1.6/Defs/RulePackDefs/RulePacks_Namers_Factions_Wula.xml
rename to 1.6/1.6/Defs/RulePackDefs/RulePacks_Namers_Factions_Wula.xml
diff --git a/1.6/Defs/Scenarios/Scenarios_WULA.xml b/1.6/1.6/Defs/Scenarios/Scenarios_WULA.xml
similarity index 100%
rename from 1.6/Defs/Scenarios/Scenarios_WULA.xml
rename to 1.6/1.6/Defs/Scenarios/Scenarios_WULA.xml
diff --git a/1.6/Defs/StatDefs/WULA_Stats.xml b/1.6/1.6/Defs/StatDefs/WULA_Stats.xml
similarity index 100%
rename from 1.6/Defs/StatDefs/WULA_Stats.xml
rename to 1.6/1.6/Defs/StatDefs/WULA_Stats.xml
diff --git a/1.6/Defs/StoryTellers/WULA_Storytellers.xml b/1.6/1.6/Defs/StoryTellers/WULA_Storytellers.xml
similarity index 100%
rename from 1.6/Defs/StoryTellers/WULA_Storytellers.xml
rename to 1.6/1.6/Defs/StoryTellers/WULA_Storytellers.xml
diff --git a/1.6/Defs/StyleItemCategoryDefs/WULA_StyleItemCategoryDefs.xml b/1.6/1.6/Defs/StyleItemCategoryDefs/WULA_StyleItemCategoryDefs.xml
similarity index 100%
rename from 1.6/Defs/StyleItemCategoryDefs/WULA_StyleItemCategoryDefs.xml
rename to 1.6/1.6/Defs/StyleItemCategoryDefs/WULA_StyleItemCategoryDefs.xml
diff --git a/1.6/Defs/ThingDefs/WULA_Item.xml b/1.6/1.6/Defs/ThingDefs/WULA_Item.xml
similarity index 100%
rename from 1.6/Defs/ThingDefs/WULA_Item.xml
rename to 1.6/1.6/Defs/ThingDefs/WULA_Item.xml
diff --git a/1.6/Defs/ThingDefs_Buildings/Buildings_Structure.xml b/1.6/1.6/Defs/ThingDefs_Buildings/Buildings_Structure.xml
similarity index 100%
rename from 1.6/Defs/ThingDefs_Buildings/Buildings_Structure.xml
rename to 1.6/1.6/Defs/ThingDefs_Buildings/Buildings_Structure.xml
diff --git a/1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml b/1.6/1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml
similarity index 100%
rename from 1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml
rename to 1.6/1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml
diff --git a/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml
similarity index 100%
rename from 1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml
rename to 1.6/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml
diff --git a/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml b/1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml
similarity index 100%
rename from 1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml
rename to 1.6/1.6/Defs/ThingDefs_Misc/Apperals/WULA_Apparel.xml
diff --git a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
similarity index 100%
rename from 1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
rename to 1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
diff --git a/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml b/1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
similarity index 100%
rename from 1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
rename to 1.6/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
diff --git a/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml
similarity index 100%
rename from 1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml
rename to 1.6/1.6/Defs/ThinkTreeDefs/WULA_ThinkTrees.xml
diff --git a/1.6/Defs/ThoughtDefs/Thoughts_WULA.xml b/1.6/1.6/Defs/ThoughtDefs/Thoughts_WULA.xml
similarity index 100%
rename from 1.6/Defs/ThoughtDefs/Thoughts_WULA.xml
rename to 1.6/1.6/Defs/ThoughtDefs/Thoughts_WULA.xml
diff --git a/1.6/Defs/TraitDefs/Traits_WULA.xml b/1.6/1.6/Defs/TraitDefs/Traits_WULA.xml
similarity index 100%
rename from 1.6/Defs/TraitDefs/Traits_WULA.xml
rename to 1.6/1.6/Defs/TraitDefs/Traits_WULA.xml
diff --git a/1.6/Defs/WeaponTraitDefs/WULA_WeaponCategoryDefs.xml b/1.6/1.6/Defs/WeaponTraitDefs/WULA_WeaponCategoryDefs.xml
similarity index 100%
rename from 1.6/Defs/WeaponTraitDefs/WULA_WeaponCategoryDefs.xml
rename to 1.6/1.6/Defs/WeaponTraitDefs/WULA_WeaponCategoryDefs.xml
diff --git a/1.6/Defs/WeaponTraitDefs/WULA_WeaponTraitDefs.xml b/1.6/1.6/Defs/WeaponTraitDefs/WULA_WeaponTraitDefs.xml
similarity index 100%
rename from 1.6/Defs/WeaponTraitDefs/WULA_WeaponTraitDefs.xml
rename to 1.6/1.6/Defs/WeaponTraitDefs/WULA_WeaponTraitDefs.xml
diff --git a/1.6/Defs/WorkGivers/Wula_WorkGivers.xml b/1.6/1.6/Defs/WorkGivers/Wula_WorkGivers.xml
similarity index 100%
rename from 1.6/Defs/WorkGivers/Wula_WorkGivers.xml
rename to 1.6/1.6/Defs/WorkGivers/Wula_WorkGivers.xml
diff --git a/1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml b/1.6/1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml
similarity index 100%
rename from 1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml
rename to 1.6/1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml
diff --git a/1.6/Defs/WulaMiscSettingDefs/LetterDefs/EventLetter.xml b/1.6/1.6/Defs/WulaMiscSettingDefs/LetterDefs/EventLetter.xml
similarity index 100%
rename from 1.6/Defs/WulaMiscSettingDefs/LetterDefs/EventLetter.xml
rename to 1.6/1.6/Defs/WulaMiscSettingDefs/LetterDefs/EventLetter.xml
diff --git a/1.6/Defs/WulaMiscSettingDefs/LifeStageDefs/LifeStages_WULA.xml b/1.6/1.6/Defs/WulaMiscSettingDefs/LifeStageDefs/LifeStages_WULA.xml
similarity index 100%
rename from 1.6/Defs/WulaMiscSettingDefs/LifeStageDefs/LifeStages_WULA.xml
rename to 1.6/1.6/Defs/WulaMiscSettingDefs/LifeStageDefs/LifeStages_WULA.xml
diff --git a/1.6/Defs/WulaMiscSettingDefs/WulaCaravanEnergyDefs.xml b/1.6/1.6/Defs/WulaMiscSettingDefs/WulaCaravanEnergyDefs.xml
similarity index 100%
rename from 1.6/Defs/WulaMiscSettingDefs/WulaCaravanEnergyDefs.xml
rename to 1.6/1.6/Defs/WulaMiscSettingDefs/WulaCaravanEnergyDefs.xml
diff --git a/1.6/Defs/WulaMiscSettingDefs/WulaHullDef.xml b/1.6/1.6/Defs/WulaMiscSettingDefs/WulaHullDef.xml
similarity index 100%
rename from 1.6/Defs/WulaMiscSettingDefs/WulaHullDef.xml
rename to 1.6/1.6/Defs/WulaMiscSettingDefs/WulaHullDef.xml
diff --git a/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml
similarity index 100%
rename from Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml
rename to 1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml
diff --git a/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Ritual_Keys.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Ritual_Keys.xml
similarity index 100%
rename from Languages/ChineseSimplified (简体中文)/Keyed/WULA_Ritual_Keys.xml
rename to 1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Ritual_Keys.xml
diff --git a/Languages/ChineseSimplified (简体中文)/Keyed/WULA_SkillTrainer.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_SkillTrainer.xml
similarity index 100%
rename from Languages/ChineseSimplified (简体中文)/Keyed/WULA_SkillTrainer.xml
rename to 1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_SkillTrainer.xml
diff --git a/Patches/Patch.xml b/1.6/1.6/Patches/Patch.xml
similarity index 100%
rename from Patches/Patch.xml
rename to 1.6/1.6/Patches/Patch.xml
diff --git a/1.6/Mods/Anomaly/BodyAndPartDefs/Bodyparts_WULA_FE_Spiritualist.xml b/1.6/Anomaly/BodyAndPartDefs/Bodyparts_WULA_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/BodyAndPartDefs/Bodyparts_WULA_FE_Spiritualist.xml
rename to 1.6/Anomaly/BodyAndPartDefs/Bodyparts_WULA_FE_Spiritualist.xml
diff --git a/1.6/Mods/Anomaly/FactionDefs/Factions_WULA_FE_Spiritualist.xml b/1.6/Anomaly/FactionDefs/Factions_WULA_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/FactionDefs/Factions_WULA_FE_Spiritualist.xml
rename to 1.6/Anomaly/FactionDefs/Factions_WULA_FE_Spiritualist.xml
diff --git a/1.6/Mods/Anomaly/HediffDefs/Hediffs_WULA_FE_Spiritualist.xml b/1.6/Anomaly/HediffDefs/Hediffs_WULA_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/HediffDefs/Hediffs_WULA_FE_Spiritualist.xml
rename to 1.6/Anomaly/HediffDefs/Hediffs_WULA_FE_Spiritualist.xml
diff --git a/1.6/Mods/Anomaly/PawnKinds/PawnKinds_Wula_FE_Spiritualist.xml b/1.6/Anomaly/PawnKinds/PawnKinds_Wula_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/PawnKinds/PawnKinds_Wula_FE_Spiritualist.xml
rename to 1.6/Anomaly/PawnKinds/PawnKinds_Wula_FE_Spiritualist.xml
diff --git a/1.6/Mods/Anomaly/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml b/1.6/Anomaly/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml
rename to 1.6/Anomaly/PsychicRitualDefs/WULA_FE_Spiritualist_Rituals.xml
diff --git a/1.6/Mods/Anomaly/ResearchProjectDefs/ResearchProjects_WULA_FE_Spiritualist.xml b/1.6/Anomaly/ResearchProjectDefs/ResearchProjects_WULA_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/ResearchProjectDefs/ResearchProjects_WULA_FE_Spiritualist.xml
rename to 1.6/Anomaly/ResearchProjectDefs/ResearchProjects_WULA_FE_Spiritualist.xml
diff --git a/1.6/Mods/Anomaly/ResearchTabDef/ResearchTabs_WULA_FE_Spiritualist.xml b/1.6/Anomaly/ResearchTabDef/ResearchTabs_WULA_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/ResearchTabDef/ResearchTabs_WULA_FE_Spiritualist.xml
rename to 1.6/Anomaly/ResearchTabDef/ResearchTabs_WULA_FE_Spiritualist.xml
diff --git a/1.6/Mods/Anomaly/ThingDefs/WULA_FE_Spiritualist_Item.xml b/1.6/Anomaly/ThingDefs/WULA_FE_Spiritualist_Item.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/ThingDefs/WULA_FE_Spiritualist_Item.xml
rename to 1.6/Anomaly/ThingDefs/WULA_FE_Spiritualist_Item.xml
diff --git a/1.6/Mods/Anomaly/ThingDefs_Misc/Apperals/WULA_FE_Spiritualist_Apparel.xml b/1.6/Anomaly/ThingDefs_Misc/Apperals/WULA_FE_Spiritualist_Apparel.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/ThingDefs_Misc/Apperals/WULA_FE_Spiritualist_Apparel.xml
rename to 1.6/Anomaly/ThingDefs_Misc/Apperals/WULA_FE_Spiritualist_Apparel.xml
diff --git a/1.6/Mods/Anomaly/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml b/1.6/Anomaly/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml
rename to 1.6/Anomaly/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml
diff --git a/1.6/Mods/Anomaly/ThingDefs_Races/Races_Wulaspecies_FE_Spiritualist.xml b/1.6/Anomaly/ThingDefs_Races/Races_Wulaspecies_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/ThingDefs_Races/Races_Wulaspecies_FE_Spiritualist.xml
rename to 1.6/Anomaly/ThingDefs_Races/Races_Wulaspecies_FE_Spiritualist.xml
diff --git a/1.6/Mods/Anomaly/TraderKindDefs/TraderKinds_WULA_FE_Spiritualist.xml b/1.6/Anomaly/TraderKindDefs/TraderKinds_WULA_FE_Spiritualist.xml
similarity index 100%
rename from 1.6/Mods/Anomaly/TraderKindDefs/TraderKinds_WULA_FE_Spiritualist.xml
rename to 1.6/Anomaly/TraderKindDefs/TraderKinds_WULA_FE_Spiritualist.xml
diff --git a/Textures/Wula/Apparel/WULA_Apperal_Empty.png b/Content/Textures/Wula/Apparel/WULA_Apperal_Empty.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Apperal_Empty.png
rename to Content/Textures/Wula/Apparel/WULA_Apperal_Empty.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_Helmet.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_east.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_east.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_east.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_north.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_north.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_north.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_south.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_south.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_Helmet_south.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Assault_Troop_PowerArmor_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Body_Suit.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Body_Suit.png
rename to Content/Textures/Wula/Apparel/WULA_Body_Suit.png
diff --git a/Textures/Wula/Apparel/WULA_Body_Suit_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Body_Suit_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Body_Suit_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Body_Suit_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Body_Suit_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Body_Suit_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Body_Suit_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking_White.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking_White.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking_White.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Bodystocking_White_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_east.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_east.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_east.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_north.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_north.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_north.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_south.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_south.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_Helmet_south.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Heavy_Infantry_PowerArmor_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_Helmet.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_Helmet.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_Helmet.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_Helmet_east.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_Helmet_east.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_Helmet_east.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_Helmet_north.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_Helmet_north.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_Helmet_north.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_Helmet_south.png b/Content/Textures/Wula/Apparel/WULA_Knight_Helmet_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_Helmet_south.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_Helmet_south.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_PowerArmor.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_PowerArmor.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_west.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_west.png
rename to Content/Textures/Wula/Apparel/WULA_Knight_PowerArmor_Thin_west.png
diff --git a/Textures/Wula/Apparel/WULA_Maid_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Maid_Uniform.png
rename to Content/Textures/Wula/Apparel/WULA_Maid_Uniform.png
diff --git a/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png
rename to Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband.png
diff --git a/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png
rename to Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_east.png
diff --git a/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png
rename to Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Headband_south.png
diff --git a/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Maid_Uniform_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_Uniform.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_Uniform.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_west.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_west.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_Uniform_Thin_west.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_veil.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_veil.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_veil.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_veil_east.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_veil_east.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_veil_east.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_veil_north.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_veil_north.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_veil_north.png
diff --git a/Textures/Wula/Apparel/WULA_Nun_veil_south.png b/Content/Textures/Wula/Apparel/WULA_Nun_veil_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nun_veil_south.png
rename to Content/Textures/Wula/Apparel/WULA_Nun_veil_south.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_east.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_east.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_east.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_north.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_north.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_north.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_south.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_south.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Headband_south.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_west.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_west.png
rename to Content/Textures/Wula/Apparel/WULA_Nurse_Uniform_Thin_west.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Hat.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Hat.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Hat.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Hat_east.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Hat_east.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Hat_east.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Hat_north.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Hat_north.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Hat_north.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Hat_south.png b/Content/Textures/Wula/Apparel/WULA_Priest_Hat_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Hat_south.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Hat_south.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Uniform.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Uniform.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Priest_Uniform_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Qipao.png b/Content/Textures/Wula/Apparel/WULA_Qipao.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Qipao.png
rename to Content/Textures/Wula/Apparel/WULA_Qipao.png
diff --git a/Textures/Wula/Apparel/WULA_Qipao_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Qipao_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Qipao_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Qipao_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Qipao_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Qipao_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Qipao_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Qipao_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Qipao_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Qipao_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Sailor_Dress.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Sailor_Dress.png
rename to Content/Textures/Wula/Apparel/WULA_Sailor_Dress.png
diff --git a/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Sailor_Dress_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Base.png b/Content/Textures/Wula/Apparel/WULA_Shield_Base.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Base.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Base.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Base_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Shield_Base_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Base_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Base_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Base_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Shield_Base_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Base_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Base_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Base_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Shield_Base_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Base_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Base_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Prismatic.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Prismatic.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Prismatic.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Shield_Prismatic_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_Uniform.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_Uniform.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_Uniform_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_veil.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_veil.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_veil.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_veil_east.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_veil_east.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_veil_east.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_veil_north.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_veil_north.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_veil_north.png
diff --git a/Textures/Wula/Apparel/WULA_Skitarii_veil_south.png b/Content/Textures/Wula/Apparel/WULA_Skitarii_veil_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_Skitarii_veil_south.png
rename to Content/Textures/Wula/Apparel/WULA_Skitarii_veil_south.png
diff --git a/Textures/Wula/Apparel/WULA_official_uniform.png b/Content/Textures/Wula/Apparel/WULA_official_uniform.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_official_uniform.png
rename to Content/Textures/Wula/Apparel/WULA_official_uniform.png
diff --git a/Textures/Wula/Apparel/WULA_official_uniform_Thin_east.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_east.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_official_uniform_Thin_east.png
rename to Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_east.png
diff --git a/Textures/Wula/Apparel/WULA_official_uniform_Thin_north.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_north.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_official_uniform_Thin_north.png
rename to Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_north.png
diff --git a/Textures/Wula/Apparel/WULA_official_uniform_Thin_south.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_south.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_official_uniform_Thin_south.png
rename to Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_south.png
diff --git a/Textures/Wula/Apparel/WULA_official_uniform_Thin_west.png b/Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_west.png
similarity index 100%
rename from Textures/Wula/Apparel/WULA_official_uniform_Thin_west.png
rename to Content/Textures/Wula/Apparel/WULA_official_uniform_Thin_west.png
diff --git a/Textures/Wula/Building/Door/WulaAutodoor.png b/Content/Textures/Wula/Building/Door/WulaAutodoor.png
similarity index 100%
rename from Textures/Wula/Building/Door/WulaAutodoor.png
rename to Content/Textures/Wula/Building/Door/WulaAutodoor.png
diff --git a/Textures/Wula/Building/Door/WulaAutodoor_BluePrint.png b/Content/Textures/Wula/Building/Door/WulaAutodoor_BluePrint.png
similarity index 100%
rename from Textures/Wula/Building/Door/WulaAutodoor_BluePrint.png
rename to Content/Textures/Wula/Building/Door/WulaAutodoor_BluePrint.png
diff --git a/Textures/Wula/Building/Door/WulaAutodoor_Mover.png b/Content/Textures/Wula/Building/Door/WulaAutodoor_Mover.png
similarity index 100%
rename from Textures/Wula/Building/Door/WulaAutodoor_Mover.png
rename to Content/Textures/Wula/Building/Door/WulaAutodoor_Mover.png
diff --git a/Textures/Wula/Building/Door/WulaAutodoor_Mover_east.png b/Content/Textures/Wula/Building/Door/WulaAutodoor_Mover_east.png
similarity index 100%
rename from Textures/Wula/Building/Door/WulaAutodoor_Mover_east.png
rename to Content/Textures/Wula/Building/Door/WulaAutodoor_Mover_east.png
diff --git a/Textures/Wula/Building/Door/WulaAutodoor_Mover_south.png b/Content/Textures/Wula/Building/Door/WulaAutodoor_Mover_south.png
similarity index 100%
rename from Textures/Wula/Building/Door/WulaAutodoor_Mover_south.png
rename to Content/Textures/Wula/Building/Door/WulaAutodoor_Mover_south.png
diff --git a/Textures/Wula/Building/Door/WulaAutodoor_east.png b/Content/Textures/Wula/Building/Door/WulaAutodoor_east.png
similarity index 100%
rename from Textures/Wula/Building/Door/WulaAutodoor_east.png
rename to Content/Textures/Wula/Building/Door/WulaAutodoor_east.png
diff --git a/Textures/Wula/Building/Door/WulaAutodoor_south.png b/Content/Textures/Wula/Building/Door/WulaAutodoor_south.png
similarity index 100%
rename from Textures/Wula/Building/Door/WulaAutodoor_south.png
rename to Content/Textures/Wula/Building/Door/WulaAutodoor_south.png
diff --git a/Textures/Wula/Building/Linked/WULA_Fortress_Wall_Blueprint.png b/Content/Textures/Wula/Building/Linked/WULA_Fortress_Wall_Blueprint.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WULA_Fortress_Wall_Blueprint.png
rename to Content/Textures/Wula/Building/Linked/WULA_Fortress_Wall_Blueprint.png
diff --git a/Textures/Wula/Building/Linked/WULA_Fortress_Wall_MenuIcon.png b/Content/Textures/Wula/Building/Linked/WULA_Fortress_Wall_MenuIcon.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WULA_Fortress_Wall_MenuIcon.png
rename to Content/Textures/Wula/Building/Linked/WULA_Fortress_Wall_MenuIcon.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northeast.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northeast.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northeast.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northeast.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northwest.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northwest.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northwest.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_northwest.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southeast.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southeast.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southeast.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southeast.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southwest.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southwest.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southwest.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_Partial_southwest.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northeast.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northeast.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northeast.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northeast.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northwest.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northwest.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northwest.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_northwest.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southeast.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southeast.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southeast.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southeast.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southwest.png b/Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southwest.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southwest.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/AngledWulaWall_southwest.png
diff --git a/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_east.psd b/Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_east.psd
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_east.psd
rename to Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_east.psd
diff --git a/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_west.psd b/Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_west.psd
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_west.psd
rename to Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Full_west.psd
diff --git a/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_east.psd b/Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_east.psd
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_east.psd
rename to Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_east.psd
diff --git a/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_west.psd b/Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_west.psd
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_west.psd
rename to Content/Textures/Wula/Building/Linked/WulaWall/SubstructureCorner_Tip_west.psd
diff --git a/Textures/Wula/Building/Linked/WulaWall/WulaWall_Atlas.png b/Content/Textures/Wula/Building/Linked/WulaWall/WulaWall_Atlas.png
similarity index 100%
rename from Textures/Wula/Building/Linked/WulaWall/WulaWall_Atlas.png
rename to Content/Textures/Wula/Building/Linked/WulaWall/WulaWall_Atlas.png
diff --git a/Textures/Wula/Building/WULA_Charging_Station_Synth_east.png b/Content/Textures/Wula/Building/WULA_Charging_Station_Synth_east.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Charging_Station_Synth_east.png
rename to Content/Textures/Wula/Building/WULA_Charging_Station_Synth_east.png
diff --git a/Textures/Wula/Building/WULA_Charging_Station_Synth_north.png b/Content/Textures/Wula/Building/WULA_Charging_Station_Synth_north.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Charging_Station_Synth_north.png
rename to Content/Textures/Wula/Building/WULA_Charging_Station_Synth_north.png
diff --git a/Textures/Wula/Building/WULA_Charging_Station_Synth_south.png b/Content/Textures/Wula/Building/WULA_Charging_Station_Synth_south.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Charging_Station_Synth_south.png
rename to Content/Textures/Wula/Building/WULA_Charging_Station_Synth_south.png
diff --git a/Textures/Wula/Building/WULA_Communicator_Station.png b/Content/Textures/Wula/Building/WULA_Communicator_Station.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Communicator_Station.png
rename to Content/Textures/Wula/Building/WULA_Communicator_Station.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_BIO_east.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_east.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_BIO_east.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_east.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_BIO_north.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_north.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_BIO_north.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_north.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_BIO_south.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_south.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_BIO_south.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_BIO_south.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_Component_east.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_Component_east.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_Component_east.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_Component_east.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_Component_north.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_Component_north.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_Component_north.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_Component_north.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_Component_south.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_Component_south.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_Component_south.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_Component_south.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_Energy_east.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_Energy_east.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_Energy_east.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_Energy_east.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_Energy_north.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_Energy_north.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_Energy_north.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_Energy_north.png
diff --git a/Textures/Wula/Building/WULA_Cube_Productor_Energy_south.png b/Content/Textures/Wula/Building/WULA_Cube_Productor_Energy_south.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Cube_Productor_Energy_south.png
rename to Content/Textures/Wula/Building/WULA_Cube_Productor_Energy_south.png
diff --git a/Textures/Wula/Building/WULA_Floor.png b/Content/Textures/Wula/Building/WULA_Floor.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Floor.png
rename to Content/Textures/Wula/Building/WULA_Floor.png
diff --git a/Textures/Wula/Building/WULA_Floor_Icon.png b/Content/Textures/Wula/Building/WULA_Floor_Icon.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Floor_Icon.png
rename to Content/Textures/Wula/Building/WULA_Floor_Icon.png
diff --git a/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_east.png b/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_east.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_east.png
rename to Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_east.png
diff --git a/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_north.png b/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_north.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_north.png
rename to Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_north.png
diff --git a/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_south.png b/Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_south.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_south.png
rename to Content/Textures/Wula/Building/WULA_Heavy_War_Machine_Productor_south.png
diff --git a/Textures/Wula/Building/WULA_Nourishment_Center_Unit.png b/Content/Textures/Wula/Building/WULA_Nourishment_Center_Unit.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Nourishment_Center_Unit.png
rename to Content/Textures/Wula/Building/WULA_Nourishment_Center_Unit.png
diff --git a/Textures/Wula/Building/WULA_Synth_Maintainer_south.png b/Content/Textures/Wula/Building/WULA_Synth_Maintainer_south.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Synth_Maintainer_south.png
rename to Content/Textures/Wula/Building/WULA_Synth_Maintainer_south.png
diff --git a/Textures/Wula/Building/WULA_Synth_Server_east.png b/Content/Textures/Wula/Building/WULA_Synth_Server_east.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Synth_Server_east.png
rename to Content/Textures/Wula/Building/WULA_Synth_Server_east.png
diff --git a/Textures/Wula/Building/WULA_Synth_Server_north.png b/Content/Textures/Wula/Building/WULA_Synth_Server_north.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Synth_Server_north.png
rename to Content/Textures/Wula/Building/WULA_Synth_Server_north.png
diff --git a/Textures/Wula/Building/WULA_Synth_Server_south.png b/Content/Textures/Wula/Building/WULA_Synth_Server_south.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Synth_Server_south.png
rename to Content/Textures/Wula/Building/WULA_Synth_Server_south.png
diff --git a/Textures/Wula/Building/WULA_Turret_Component.png b/Content/Textures/Wula/Building/WULA_Turret_Component.png
similarity index 100%
rename from Textures/Wula/Building/WULA_Turret_Component.png
rename to Content/Textures/Wula/Building/WULA_Turret_Component.png
diff --git a/Textures/Wula/Building/WULA_WM_Panzer_Autocannon.png b/Content/Textures/Wula/Building/WULA_WM_Panzer_Autocannon.png
similarity index 100%
rename from Textures/Wula/Building/WULA_WM_Panzer_Autocannon.png
rename to Content/Textures/Wula/Building/WULA_WM_Panzer_Autocannon.png
diff --git a/Textures/Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret.png b/Content/Textures/Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret.png
similarity index 100%
rename from Textures/Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret.png
rename to Content/Textures/Wula/Building/Wula_AI_Heavy_Panzer_Gunnery_Turret.png
diff --git a/Textures/Wula/Building/Wula_DarkEnergy_FuelTank.png b/Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank.png
similarity index 100%
rename from Textures/Wula/Building/Wula_DarkEnergy_FuelTank.png
rename to Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank.png
diff --git a/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_east.png b/Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_east.png
similarity index 100%
rename from Textures/Wula/Building/Wula_DarkEnergy_FuelTank_east.png
rename to Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_east.png
diff --git a/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_north.png b/Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_north.png
similarity index 100%
rename from Textures/Wula/Building/Wula_DarkEnergy_FuelTank_north.png
rename to Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_north.png
diff --git a/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_south.png b/Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_south.png
similarity index 100%
rename from Textures/Wula/Building/Wula_DarkEnergy_FuelTank_south.png
rename to Content/Textures/Wula/Building/Wula_DarkEnergy_FuelTank_south.png
diff --git a/Textures/Wula/Events/Portraits/WULA_Anisia_1.png b/Content/Textures/Wula/Events/Portraits/WULA_Anisia_1.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_Anisia_1.png
rename to Content/Textures/Wula/Events/Portraits/WULA_Anisia_1.png
diff --git a/Textures/Wula/Events/Portraits/WULA_Anisia_2.png b/Content/Textures/Wula/Events/Portraits/WULA_Anisia_2.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_Anisia_2.png
rename to Content/Textures/Wula/Events/Portraits/WULA_Anisia_2.png
diff --git a/Textures/Wula/Events/Portraits/WULA_Anisia_3.png b/Content/Textures/Wula/Events/Portraits/WULA_Anisia_3.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_Anisia_3.png
rename to Content/Textures/Wula/Events/Portraits/WULA_Anisia_3.png
diff --git a/Textures/Wula/Events/Portraits/WULA_Anisia_4.png b/Content/Textures/Wula/Events/Portraits/WULA_Anisia_4.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_Anisia_4.png
rename to Content/Textures/Wula/Events/Portraits/WULA_Anisia_4.png
diff --git a/Textures/Wula/Events/Portraits/WULA_Anisia_5.png b/Content/Textures/Wula/Events/Portraits/WULA_Anisia_5.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_Anisia_5.png
rename to Content/Textures/Wula/Events/Portraits/WULA_Anisia_5.png
diff --git a/Textures/Wula/Events/Portraits/WULA_Anisia_6.png b/Content/Textures/Wula/Events/Portraits/WULA_Anisia_6.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_Anisia_6.png
rename to Content/Textures/Wula/Events/Portraits/WULA_Anisia_6.png
diff --git a/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_1.png b/Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_1.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_1.png
rename to Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_1.png
diff --git a/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_2.png b/Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_2.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_2.png
rename to Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_2.png
diff --git a/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_3.png b/Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_3.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_3.png
rename to Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_3.png
diff --git a/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_4.png b/Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_4.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_4.png
rename to Content/Textures/Wula/Events/Portraits/WULA_FE_Spiritualist_4.png
diff --git a/Textures/Wula/Events/Portraits/Wula_insignal.png b/Content/Textures/Wula/Events/Portraits/Wula_insignal.png
similarity index 100%
rename from Textures/Wula/Events/Portraits/Wula_insignal.png
rename to Content/Textures/Wula/Events/Portraits/Wula_insignal.png
diff --git a/Textures/Wula/Hair/WULA_Double_Ponytail_Long_east.png b/Content/Textures/Wula/Hair/WULA_Double_Ponytail_Long_east.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Double_Ponytail_Long_east.png
rename to Content/Textures/Wula/Hair/WULA_Double_Ponytail_Long_east.png
diff --git a/Textures/Wula/Hair/WULA_Double_Ponytail_Long_north.png b/Content/Textures/Wula/Hair/WULA_Double_Ponytail_Long_north.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Double_Ponytail_Long_north.png
rename to Content/Textures/Wula/Hair/WULA_Double_Ponytail_Long_north.png
diff --git a/Textures/Wula/Hair/WULA_Double_Ponytail_Long_south.png b/Content/Textures/Wula/Hair/WULA_Double_Ponytail_Long_south.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Double_Ponytail_Long_south.png
rename to Content/Textures/Wula/Hair/WULA_Double_Ponytail_Long_south.png
diff --git a/Textures/Wula/Hair/WULA_High_Ponytail_east.png b/Content/Textures/Wula/Hair/WULA_High_Ponytail_east.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_High_Ponytail_east.png
rename to Content/Textures/Wula/Hair/WULA_High_Ponytail_east.png
diff --git a/Textures/Wula/Hair/WULA_High_Ponytail_north.png b/Content/Textures/Wula/Hair/WULA_High_Ponytail_north.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_High_Ponytail_north.png
rename to Content/Textures/Wula/Hair/WULA_High_Ponytail_north.png
diff --git a/Textures/Wula/Hair/WULA_High_Ponytail_south.png b/Content/Textures/Wula/Hair/WULA_High_Ponytail_south.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_High_Ponytail_south.png
rename to Content/Textures/Wula/Hair/WULA_High_Ponytail_south.png
diff --git a/Textures/Wula/Hair/WULA_One_Side_Ponytail_east.png b/Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_east.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_One_Side_Ponytail_east.png
rename to Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_east.png
diff --git a/Textures/Wula/Hair/WULA_One_Side_Ponytail_north.png b/Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_north.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_One_Side_Ponytail_north.png
rename to Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_north.png
diff --git a/Textures/Wula/Hair/WULA_One_Side_Ponytail_south.png b/Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_south.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_One_Side_Ponytail_south.png
rename to Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_south.png
diff --git a/Textures/Wula/Hair/WULA_One_Side_Ponytail_west.png b/Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_west.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_One_Side_Ponytail_west.png
rename to Content/Textures/Wula/Hair/WULA_One_Side_Ponytail_west.png
diff --git a/Textures/Wula/Hair/WULA_Rotational_Ponytail_east.png b/Content/Textures/Wula/Hair/WULA_Rotational_Ponytail_east.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Rotational_Ponytail_east.png
rename to Content/Textures/Wula/Hair/WULA_Rotational_Ponytail_east.png
diff --git a/Textures/Wula/Hair/WULA_Rotational_Ponytail_north.png b/Content/Textures/Wula/Hair/WULA_Rotational_Ponytail_north.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Rotational_Ponytail_north.png
rename to Content/Textures/Wula/Hair/WULA_Rotational_Ponytail_north.png
diff --git a/Textures/Wula/Hair/WULA_Rotational_Ponytail_south.png b/Content/Textures/Wula/Hair/WULA_Rotational_Ponytail_south.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Rotational_Ponytail_south.png
rename to Content/Textures/Wula/Hair/WULA_Rotational_Ponytail_south.png
diff --git a/Textures/Wula/Hair/WULA_Scattered_Hair_Long_east.png b/Content/Textures/Wula/Hair/WULA_Scattered_Hair_Long_east.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Scattered_Hair_Long_east.png
rename to Content/Textures/Wula/Hair/WULA_Scattered_Hair_Long_east.png
diff --git a/Textures/Wula/Hair/WULA_Scattered_Hair_Long_north.png b/Content/Textures/Wula/Hair/WULA_Scattered_Hair_Long_north.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Scattered_Hair_Long_north.png
rename to Content/Textures/Wula/Hair/WULA_Scattered_Hair_Long_north.png
diff --git a/Textures/Wula/Hair/WULA_Scattered_Hair_Long_south.png b/Content/Textures/Wula/Hair/WULA_Scattered_Hair_Long_south.png
similarity index 100%
rename from Textures/Wula/Hair/WULA_Scattered_Hair_Long_south.png
rename to Content/Textures/Wula/Hair/WULA_Scattered_Hair_Long_south.png
diff --git a/Textures/Wula/Item/WULA_Charge_Cube.png b/Content/Textures/Wula/Item/WULA_Charge_Cube.png
similarity index 100%
rename from Textures/Wula/Item/WULA_Charge_Cube.png
rename to Content/Textures/Wula/Item/WULA_Charge_Cube.png
diff --git a/Textures/Wula/Item/WULA_Dark_Matter_Item.png b/Content/Textures/Wula/Item/WULA_Dark_Matter_Item.png
similarity index 100%
rename from Textures/Wula/Item/WULA_Dark_Matter_Item.png
rename to Content/Textures/Wula/Item/WULA_Dark_Matter_Item.png
diff --git a/Textures/Wula/Item/WULA_Default_Item.png b/Content/Textures/Wula/Item/WULA_Default_Item.png
similarity index 100%
rename from Textures/Wula/Item/WULA_Default_Item.png
rename to Content/Textures/Wula/Item/WULA_Default_Item.png
diff --git a/Textures/Wula/Item/WULA_MechRepairKit.png b/Content/Textures/Wula/Item/WULA_MechRepairKit.png
similarity index 100%
rename from Textures/Wula/Item/WULA_MechRepairKit.png
rename to Content/Textures/Wula/Item/WULA_MechRepairKit.png
diff --git a/Textures/Wula/Item/WULA_Neutronium.png b/Content/Textures/Wula/Item/WULA_Neutronium.png
similarity index 100%
rename from Textures/Wula/Item/WULA_Neutronium.png
rename to Content/Textures/Wula/Item/WULA_Neutronium.png
diff --git a/Textures/Wula/Item/WULA_Soul_Wedge.png b/Content/Textures/Wula/Item/WULA_Soul_Wedge.png
similarity index 100%
rename from Textures/Wula/Item/WULA_Soul_Wedge.png
rename to Content/Textures/Wula/Item/WULA_Soul_Wedge.png
diff --git a/Textures/Wula/Item/WULA_Syhth_Passion_Trainer.png b/Content/Textures/Wula/Item/WULA_Syhth_Passion_Trainer.png
similarity index 100%
rename from Textures/Wula/Item/WULA_Syhth_Passion_Trainer.png
rename to Content/Textures/Wula/Item/WULA_Syhth_Passion_Trainer.png
diff --git a/Textures/Wula/Item/WULA_Syhth_Trainer.png b/Content/Textures/Wula/Item/WULA_Syhth_Trainer.png
similarity index 100%
rename from Textures/Wula/Item/WULA_Syhth_Trainer.png
rename to Content/Textures/Wula/Item/WULA_Syhth_Trainer.png
diff --git a/Textures/Wula/Item/WULA_charge_cube_No_Power.png b/Content/Textures/Wula/Item/WULA_charge_cube_No_Power.png
similarity index 100%
rename from Textures/Wula/Item/WULA_charge_cube_No_Power.png
rename to Content/Textures/Wula/Item/WULA_charge_cube_No_Power.png
diff --git a/Textures/Wula/Item/Wula_Zro.png b/Content/Textures/Wula/Item/Wula_Zro.png
similarity index 100%
rename from Textures/Wula/Item/Wula_Zro.png
rename to Content/Textures/Wula/Item/Wula_Zro.png
diff --git a/Textures/Wula/Mote/WULA_Bullet_Dark_Matter_Beam.png b/Content/Textures/Wula/Mote/WULA_Bullet_Dark_Matter_Beam.png
similarity index 100%
rename from Textures/Wula/Mote/WULA_Bullet_Dark_Matter_Beam.png
rename to Content/Textures/Wula/Mote/WULA_Bullet_Dark_Matter_Beam.png
diff --git a/Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red.png b/Content/Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red.png
similarity index 100%
rename from Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red.png
rename to Content/Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red.png
diff --git a/Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red_Double.png b/Content/Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red_Double.png
similarity index 100%
rename from Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red_Double.png
rename to Content/Textures/Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red_Double.png
diff --git a/Textures/Wula/Projectile/WULA_Bullet_StarDrift_Shotgun_Spear.png b/Content/Textures/Wula/Projectile/WULA_Bullet_StarDrift_Shotgun_Spear.png
similarity index 100%
rename from Textures/Wula/Projectile/WULA_Bullet_StarDrift_Shotgun_Spear.png
rename to Content/Textures/Wula/Projectile/WULA_Bullet_StarDrift_Shotgun_Spear.png
diff --git a/Textures/Wula/Projectile/WULA_Mortar_Shell.png b/Content/Textures/Wula/Projectile/WULA_Mortar_Shell.png
similarity index 100%
rename from Textures/Wula/Projectile/WULA_Mortar_Shell.png
rename to Content/Textures/Wula/Projectile/WULA_Mortar_Shell.png
diff --git a/Textures/Wula/Projectile/WULA_Photon_Missile.png b/Content/Textures/Wula/Projectile/WULA_Photon_Missile.png
similarity index 100%
rename from Textures/Wula/Projectile/WULA_Photon_Missile.png
rename to Content/Textures/Wula/Projectile/WULA_Photon_Missile.png
diff --git a/Textures/Wula/Projectile/WULA_Shrapnel.png b/Content/Textures/Wula/Projectile/WULA_Shrapnel.png
similarity index 100%
rename from Textures/Wula/Projectile/WULA_Shrapnel.png
rename to Content/Textures/Wula/Projectile/WULA_Shrapnel.png
diff --git a/Textures/Wula/Storyteller/WULA_Anisia.png b/Content/Textures/Wula/Storyteller/WULA_Anisia.png
similarity index 100%
rename from Textures/Wula/Storyteller/WULA_Anisia.png
rename to Content/Textures/Wula/Storyteller/WULA_Anisia.png
diff --git a/Textures/Wula/Storyteller/WULA_Anisia_TINY.png b/Content/Textures/Wula/Storyteller/WULA_Anisia_TINY.png
similarity index 100%
rename from Textures/Wula/Storyteller/WULA_Anisia_TINY.png
rename to Content/Textures/Wula/Storyteller/WULA_Anisia_TINY.png
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_east.png b/Content/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_east.png
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_east.png
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_north.png b/Content/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_north.png
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_north.png
diff --git a/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_south.png b/Content/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_south.png
rename to Content/Textures/Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_south.png
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_east.png b/Content/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_east.png
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_east.png
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_north.png b/Content/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_north.png
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_north.png
diff --git a/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_south.png b/Content/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_south.png
rename to Content/Textures/Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_south.png
diff --git a/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/WULA_Cat/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_east.png b/Content/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_east.png
rename to Content/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_east.png
diff --git a/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_north.png b/Content/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_north.png
rename to Content/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_north.png
diff --git a/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_south.png b/Content/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_south.png
rename to Content/Textures/Wula/Things/WULA_Cat/WULA_Cat_Thin_south.png
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_east.png b/Content/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_east.png
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_east.png
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_north.png b/Content/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_north.png
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_north.png
diff --git a/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_south.png b/Content/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_south.png
rename to Content/Textures/Wula/Things/WULA_Commander_Cat/WULA_Cat_Thin_south.png
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_east.png b/Content/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_east.png
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_east.png
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_north.png b/Content/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_north.png
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_north.png
diff --git a/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_south.png b/Content/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_south.png
rename to Content/Textures/Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_south.png
diff --git a/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/WULA_DM_Cat/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_east.png b/Content/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_east.png
rename to Content/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_east.png
diff --git a/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_north.png b/Content/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_north.png
rename to Content/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_north.png
diff --git a/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_south.png b/Content/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_south.png
rename to Content/Textures/Wula/Things/WULA_DM_Cat/WULA_Cat_Thin_south.png
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_east.png b/Content/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_east.png
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_east.png
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_north.png b/Content/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_north.png
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_north.png
diff --git a/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_south.png b/Content/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_south.png
rename to Content/Textures/Wula/Things/WULA_bomb_Cat/WULA_Cat_Thin_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_east.png b/Content/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_north.png b/Content/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_north.png
rename to Content/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_north.png
diff --git a/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_south.png b/Content/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Addons/WULA_Addons_Antenna_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_east.png b/Content/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_north.png
rename to Content/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_north.png
diff --git a/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Bodies/Naked_Thin_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_east.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_south.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/angled_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_east.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_south.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/flat_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_east.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_south.png b/Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Brows/Normal/Unisex/s-shaped_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_east.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_south.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_west.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_west.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_L_west.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_east.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_south.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_west.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_west.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Common/Unisex/normal_R_west.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_east.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_south.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_highlight_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Eyes/Normal/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_north.png b/Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_north.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_north.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_west.png b/Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_west.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads/Average_Normal_west.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_east.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_north.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_north.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_north.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_south.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_west.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_west.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/blush_west.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_north.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_north.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_north.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_west.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_west.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/normal_west.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_east.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_south.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_blush_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Heads_Blank/Normal/Unisex/part_normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_east.png b/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_south.png b/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/close_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Lids/Normal/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_east.png b/Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_south.png b/Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Mouth/Normal/Unisex/open_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_north.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_north.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_north.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_west.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_west.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/LeftChin/Unisex/normal_west.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_north.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_north.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_north.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_west.png b/Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_west.png
rename to Content/Textures/Wula/Things/WulaSpecies/Skins/RightEye/Unisex/normal_west.png
diff --git a/Textures/Wula/Things/WulaSpecies/WULA_Species_Icon.png b/Content/Textures/Wula/Things/WulaSpecies/WULA_Species_Icon.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/WULA_Species_Icon.png
rename to Content/Textures/Wula/Things/WulaSpecies/WULA_Species_Icon.png
diff --git a/Textures/Wula/Things/WulaSpecies/Wounds/WULA_Species_Wound_None.png b/Content/Textures/Wula/Things/WulaSpecies/Wounds/WULA_Species_Wound_None.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpecies/Wounds/WULA_Species_Wound_None.png
rename to Content/Textures/Wula/Things/WulaSpecies/Wounds/WULA_Species_Wound_None.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_east.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_east.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_east.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_north.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_north.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_north.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_south.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_south.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Addons/WULA_Bow_Tie_south.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_east.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_east.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_east.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_north.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_north.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_south.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Bodies/Naked_Thin_south.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_north.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_north.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_north.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_south.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_south.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_south.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_west.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_west.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_west.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads/Average_Normal_west.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_east.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_east.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_east.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_north.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_north.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_north.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_south.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_south.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/blush_south.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_east.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_east.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_east.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_north.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_north.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_north.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_north.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_south.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_south.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/normal_south.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_east.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_east.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_east.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_south.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_south.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_blush_south.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_east.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_east.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_east.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_east.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_south.png b/Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_south.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_south.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/Heads_Blank/Normal/Unisex/part_normal_south.png
diff --git a/Textures/Wula/Things/WulaSpeciesReal/WULA_Species_Icon.png b/Content/Textures/Wula/Things/WulaSpeciesReal/WULA_Species_Icon.png
similarity index 100%
rename from Textures/Wula/Things/WulaSpeciesReal/WULA_Species_Icon.png
rename to Content/Textures/Wula/Things/WulaSpeciesReal/WULA_Species_Icon.png
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_east.png b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_east.png
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_east.png
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_north.png
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_north.png
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_south.png
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Bodies/Naked_Thin_south.png
diff --git a/Textures/Wula/Things/Wula_AI_Bomb_Mother/Wula_AI_Bomb_Mother_Icon.png b/Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Wula_AI_Bomb_Mother_Icon.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Bomb_Mother/Wula_AI_Bomb_Mother_Icon.png
rename to Content/Textures/Wula/Things/Wula_AI_Bomb_Mother/Wula_AI_Bomb_Mother_Icon.png
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.dds b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.dds
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.dds
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.dds
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.png
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_east.png
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.dds b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.dds
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.dds
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.dds
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.png
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_north.png
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.dds b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.dds
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.dds
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.dds
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.png
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/AllegianceOverlays/None_south.png
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_north.png
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_north.png
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_south.png
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_south.png
diff --git a/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png
similarity index 100%
rename from Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png
rename to Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png
diff --git a/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_east.png b/Content/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_east.png
rename to Content/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_east.png
diff --git a/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_north.png
rename to Content/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_north.png
diff --git a/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_south.png
rename to Content/Textures/Wula/Things/Wula_Armour/Bodies/Naked_Thin_south.png
diff --git a/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_east.png b/Content/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_east.png
rename to Content/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_east.png
diff --git a/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_north.png b/Content/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_north.png
rename to Content/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_north.png
diff --git a/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_south.png b/Content/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_south.png
rename to Content/Textures/Wula/Things/Wula_Armour/Heads/Average_Normal_south.png
diff --git a/Textures/Wula/Things/Wula_Armour/Wula_Armour_Icon.png b/Content/Textures/Wula/Things/Wula_Armour/Wula_Armour_Icon.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/Wula_Armour_Icon.png
rename to Content/Textures/Wula/Things/Wula_Armour/Wula_Armour_Icon.png
diff --git a/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_east.png b/Content/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_east.png
rename to Content/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_east.png
diff --git a/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_north.png b/Content/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_north.png
rename to Content/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_north.png
diff --git a/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_south.png b/Content/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_south.png
rename to Content/Textures/Wula/Things/Wula_Armour/abandon/Naked_Thin_south.png
diff --git a/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.png b/Content/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.png
rename to Content/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_east.png
diff --git a/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_north.png
rename to Content/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_north.png
diff --git a/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_south.png
rename to Content/Textures/Wula/Things/Wula_Psi_Titan/Bodies/Naked_Thin_south.png
diff --git a/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_east.png b/Content/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_east.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_east.png
rename to Content/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_east.png
diff --git a/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_north.png b/Content/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_north.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_north.png
rename to Content/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_north.png
diff --git a/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_south.png b/Content/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_south.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_south.png
rename to Content/Textures/Wula/Things/Wula_Psi_Titan/Heads/Average_Normal_south.png
diff --git a/Textures/Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon.png b/Content/Textures/Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon.png
similarity index 100%
rename from Textures/Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon.png
rename to Content/Textures/Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon.png
diff --git a/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_CLoak_Ability.png b/Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_CLoak_Ability.png
similarity index 100%
rename from Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_CLoak_Ability.png
rename to Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_CLoak_Ability.png
diff --git a/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Explosive_Ability.png b/Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Explosive_Ability.png
similarity index 100%
rename from Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Explosive_Ability.png
rename to Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Explosive_Ability.png
diff --git a/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Feather_Ability.png b/Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Feather_Ability.png
similarity index 100%
rename from Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Feather_Ability.png
rename to Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Feather_Ability.png
diff --git a/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Flash_Ability.png b/Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Flash_Ability.png
similarity index 100%
rename from Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Flash_Ability.png
rename to Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Flash_Ability.png
diff --git a/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Lost_Ability.png b/Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Lost_Ability.png
similarity index 100%
rename from Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Lost_Ability.png
rename to Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Lost_Ability.png
diff --git a/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Perception_Ability.png b/Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Perception_Ability.png
similarity index 100%
rename from Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Perception_Ability.png
rename to Content/Textures/Wula/UI/Abilities/WULA_MW_Scepter_Of_Perception_Ability.png
diff --git a/Textures/Wula/UI/Abilities/WULA_Scepter_Of_Heaven_Ability.png b/Content/Textures/Wula/UI/Abilities/WULA_Scepter_Of_Heaven_Ability.png
similarity index 100%
rename from Textures/Wula/UI/Abilities/WULA_Scepter_Of_Heaven_Ability.png
rename to Content/Textures/Wula/UI/Abilities/WULA_Scepter_Of_Heaven_Ability.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Armour_Lance.png b/Content/Textures/Wula/Weapon/WULA_MW_Armour_Lance.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Armour_Lance.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Armour_Lance.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Breaker_Bar.png b/Content/Textures/Wula/Weapon/WULA_MW_Breaker_Bar.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Breaker_Bar.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Breaker_Bar.png
diff --git a/Textures/Wula/Weapon/WULA_MW_ChainSword.png b/Content/Textures/Wula/Weapon/WULA_MW_ChainSword.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_ChainSword.png
rename to Content/Textures/Wula/Weapon/WULA_MW_ChainSword.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Charge_Mace.png b/Content/Textures/Wula/Weapon/WULA_MW_Charge_Mace.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Charge_Mace.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Charge_Mace.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Constructor_Hammer.png b/Content/Textures/Wula/Weapon/WULA_MW_Constructor_Hammer.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Constructor_Hammer.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Constructor_Hammer.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Glaive.png b/Content/Textures/Wula/Weapon/WULA_MW_Glaive.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Glaive.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Glaive.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Lance.png b/Content/Textures/Wula/Weapon/WULA_MW_Lance.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Lance.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Lance.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Mace.png b/Content/Textures/Wula/Weapon/WULA_MW_Mace.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Mace.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Mace.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Scepter_Of_CLoak.png b/Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_CLoak.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Scepter_Of_CLoak.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_CLoak.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Explosive.png b/Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Explosive.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Scepter_Of_Explosive.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Explosive.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Feather.png b/Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Feather.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Scepter_Of_Feather.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Feather.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Flash.png b/Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Flash.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Scepter_Of_Flash.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Flash.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Heaven.png b/Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Heaven.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Scepter_Of_Heaven.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Heaven.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Lost.png b/Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Lost.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Scepter_Of_Lost.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Lost.png
diff --git a/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Perception.png b/Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Perception.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_MW_Scepter_Of_Perception.png
rename to Content/Textures/Wula/Weapon/WULA_MW_Scepter_Of_Perception.png
diff --git a/Textures/Wula/Weapon/WULA_RW_AutoCannon.png b/Content/Textures/Wula/Weapon/WULA_RW_AutoCannon.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_AutoCannon.png
rename to Content/Textures/Wula/Weapon/WULA_RW_AutoCannon.png
diff --git a/Textures/Wula/Weapon/WULA_RW_Auto_GL.png b/Content/Textures/Wula/Weapon/WULA_RW_Auto_GL.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_Auto_GL.png
rename to Content/Textures/Wula/Weapon/WULA_RW_Auto_GL.png
diff --git a/Textures/Wula/Weapon/WULA_RW_Base_AR.png b/Content/Textures/Wula/Weapon/WULA_RW_Base_AR.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_Base_AR.png
rename to Content/Textures/Wula/Weapon/WULA_RW_Base_AR.png
diff --git a/Textures/Wula/Weapon/WULA_RW_Base_AR_Cat.png b/Content/Textures/Wula/Weapon/WULA_RW_Base_AR_Cat.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_Base_AR_Cat.png
rename to Content/Textures/Wula/Weapon/WULA_RW_Base_AR_Cat.png
diff --git a/Textures/Wula/Weapon/WULA_RW_DM_AR.png b/Content/Textures/Wula/Weapon/WULA_RW_DM_AR.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_DM_AR.png
rename to Content/Textures/Wula/Weapon/WULA_RW_DM_AR.png
diff --git a/Textures/Wula/Weapon/WULA_RW_DM_Cannon.png b/Content/Textures/Wula/Weapon/WULA_RW_DM_Cannon.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_DM_Cannon.png
rename to Content/Textures/Wula/Weapon/WULA_RW_DM_Cannon.png
diff --git a/Textures/Wula/Weapon/WULA_RW_Fractal_RF.png b/Content/Textures/Wula/Weapon/WULA_RW_Fractal_RF.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_Fractal_RF.png
rename to Content/Textures/Wula/Weapon/WULA_RW_Fractal_RF.png
diff --git a/Textures/Wula/Weapon/WULA_RW_Handle_Cannon.png b/Content/Textures/Wula/Weapon/WULA_RW_Handle_Cannon.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_Handle_Cannon.png
rename to Content/Textures/Wula/Weapon/WULA_RW_Handle_Cannon.png
diff --git a/Textures/Wula/Weapon/WULA_RW_Photon_Missile.png b/Content/Textures/Wula/Weapon/WULA_RW_Photon_Missile.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_Photon_Missile.png
rename to Content/Textures/Wula/Weapon/WULA_RW_Photon_Missile.png
diff --git a/Textures/Wula/Weapon/WULA_RW_Sphene_MG.png b/Content/Textures/Wula/Weapon/WULA_RW_Sphene_MG.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_Sphene_MG.png
rename to Content/Textures/Wula/Weapon/WULA_RW_Sphene_MG.png
diff --git a/Textures/Wula/Weapon/WULA_RW_StarDrift_SG.png b/Content/Textures/Wula/Weapon/WULA_RW_StarDrift_SG.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_RW_StarDrift_SG.png
rename to Content/Textures/Wula/Weapon/WULA_RW_StarDrift_SG.png
diff --git a/Textures/Wula/Weapon/WULA_SP_Cotton_Counter.png b/Content/Textures/Wula/Weapon/WULA_SP_Cotton_Counter.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_SP_Cotton_Counter.png
rename to Content/Textures/Wula/Weapon/WULA_SP_Cotton_Counter.png
diff --git a/Textures/Wula/Weapon/WULA_SP_Live_Shelter.png b/Content/Textures/Wula/Weapon/WULA_SP_Live_Shelter.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_SP_Live_Shelter.png
rename to Content/Textures/Wula/Weapon/WULA_SP_Live_Shelter.png
diff --git a/Textures/Wula/Weapon/WULA_SP_Mist_Incinerator.png b/Content/Textures/Wula/Weapon/WULA_SP_Mist_Incinerator.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_SP_Mist_Incinerator.png
rename to Content/Textures/Wula/Weapon/WULA_SP_Mist_Incinerator.png
diff --git a/Textures/Wula/Weapon/WULA_SP_Spear_Impale.png b/Content/Textures/Wula/Weapon/WULA_SP_Spear_Impale.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_SP_Spear_Impale.png
rename to Content/Textures/Wula/Weapon/WULA_SP_Spear_Impale.png
diff --git a/Textures/Wula/Weapon/WULA_SP_Spell_Medium.png b/Content/Textures/Wula/Weapon/WULA_SP_Spell_Medium.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_SP_Spell_Medium.png
rename to Content/Textures/Wula/Weapon/WULA_SP_Spell_Medium.png
diff --git a/Textures/Wula/Weapon/WULA_WM_Panzer_Autocannon.png b/Content/Textures/Wula/Weapon/WULA_WM_Panzer_Autocannon.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_WM_Panzer_Autocannon.png
rename to Content/Textures/Wula/Weapon/WULA_WM_Panzer_Autocannon.png
diff --git a/Textures/Wula/Weapon/WULA_WM_Panzer_Turret.png b/Content/Textures/Wula/Weapon/WULA_WM_Panzer_Turret.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_WM_Panzer_Turret.png
rename to Content/Textures/Wula/Weapon/WULA_WM_Panzer_Turret.png
diff --git a/Textures/Wula/Weapon/WULA_Weapon_Empty.png b/Content/Textures/Wula/Weapon/WULA_Weapon_Empty.png
similarity index 100%
rename from Textures/Wula/Weapon/WULA_Weapon_Empty.png
rename to Content/Textures/Wula/Weapon/WULA_Weapon_Empty.png
diff --git a/Textures/Wula/World/WorldObjects/Expanding/Wula_Broken_Personality_Faction.png b/Content/Textures/Wula/World/WorldObjects/Expanding/Wula_Broken_Personality_Faction.png
similarity index 100%
rename from Textures/Wula/World/WorldObjects/Expanding/Wula_Broken_Personality_Faction.png
rename to Content/Textures/Wula/World/WorldObjects/Expanding/Wula_Broken_Personality_Faction.png
diff --git a/Textures/Wula/World/WorldObjects/Expanding/Wula_FE_Faction.png b/Content/Textures/Wula/World/WorldObjects/Expanding/Wula_FE_Faction.png
similarity index 100%
rename from Textures/Wula/World/WorldObjects/Expanding/Wula_FE_Faction.png
rename to Content/Textures/Wula/World/WorldObjects/Expanding/Wula_FE_Faction.png
diff --git a/LoadFolders.xml b/LoadFolders.xml
index 477da22a..f71ccb6a 100644
--- a/LoadFolders.xml
+++ b/LoadFolders.xml
@@ -1,7 +1,7 @@
- /
- 1.6
- 1.6/Mods/Anomaly
+ 1.6/1.6
+ Content
+ 1.6/Anomaly
\ No newline at end of file
diff --git a/MCP/mcpserver.log b/MCP/mcpserver.log
new file mode 100644
index 00000000..e5c7d339
--- /dev/null
+++ b/MCP/mcpserver.log
@@ -0,0 +1,687 @@
+2025-08-03 15:44:02,402 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-03 15:44:02,412 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-03 15:44:02,419 - INFO - Processing request of type ListToolsRequest
+2025-08-03 15:44:02,421 - INFO - Processing request of type ListResourcesRequest
+2025-08-03 15:44:02,422 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-03 15:44:27,828 - INFO - Processing request of type CallToolRequest
+2025-08-03 15:44:27,828 - INFO - 收到问题: 查找 CompProperties_Explosive 的定义和用法
+2025-08-03 15:44:27,828 - INFO - 找到的潜在关键词: [('CompProperties_Explosive', 3)]
+2025-08-03 15:44:27,828 - INFO - 提取到关键词: CompProperties_Explosive
+2025-08-03 15:44:27,828 - INFO - 缓存未命中,开始实时搜索: CompProperties_Explosive
+2025-08-03 15:44:29,235 - INFO - 找到 31 个候选文件,开始向量化处理...
+2025-08-03 15:44:42,863 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 15:50:03,065 - INFO - Processing request of type CallToolRequest
+2025-08-03 15:50:03,065 - INFO - 收到问题: 查找 CompProperties_Explosive 的定义和用法
+2025-08-03 15:50:03,065 - INFO - 找到的潜在关键词: [('CompProperties_Explosive', 3)]
+2025-08-03 15:50:03,065 - INFO - 提取到关键词: CompProperties_Explosive
+2025-08-03 15:50:03,065 - INFO - 缓存命中: 关键词 'CompProperties_Explosive'
+2025-08-03 15:53:04,845 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-03 15:53:04,853 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-03 15:53:51,828 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-03 15:53:51,838 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-03 15:53:51,846 - INFO - Processing request of type ListToolsRequest
+2025-08-03 15:53:51,848 - INFO - Processing request of type ListResourcesRequest
+2025-08-03 15:53:51,848 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-03 15:54:10,754 - INFO - Processing request of type CallToolRequest
+2025-08-03 15:54:10,755 - INFO - 收到问题: 查找 CompProperties_Explosive 的定义
+2025-08-03 15:54:10,755 - INFO - 找到的潜在关键词: [('CompProperties_Explosive', 3)]
+2025-08-03 15:54:10,755 - INFO - 提取到关键词: CompProperties_Explosive
+2025-08-03 15:54:10,755 - INFO - 缓存未命中,开始实时搜索: CompProperties_Explosive
+2025-08-03 15:54:12,401 - INFO - 找到 31 个候选文件,开始向量化处理...
+2025-08-03 15:54:28,384 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 15:54:52,951 - INFO - Processing request of type CallToolRequest
+2025-08-03 15:54:52,951 - INFO - 收到问题: 查找 CompProperties_Explosive 的定义
+2025-08-03 15:54:52,951 - INFO - 找到的潜在关键词: [('CompProperties_Explosive', 3)]
+2025-08-03 15:54:52,951 - INFO - 提取到关键词: CompProperties_Explosive
+2025-08-03 15:54:52,963 - INFO - 缓存命中: 关键词 'CompProperties_Explosive'
+2025-08-03 18:58:03,910 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-03 18:58:03,919 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-03 18:58:03,927 - INFO - Processing request of type ListToolsRequest
+2025-08-03 18:58:03,929 - INFO - Processing request of type ListResourcesRequest
+2025-08-03 18:58:03,930 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-03 18:58:21,536 - INFO - Processing request of type CallToolRequest
+2025-08-03 18:58:21,536 - INFO - 收到问题: AspirationWorker IsCompleted
+2025-08-03 18:58:21,536 - INFO - 找到的潜在关键词: [('AspirationWorker', 2), ('IsCompleted', 2)]
+2025-08-03 18:58:21,536 - INFO - 提取到关键词: AspirationWorker
+2025-08-03 18:58:21,536 - INFO - 缓存未命中,开始实时搜索: AspirationWorker
+2025-08-03 18:58:23,022 - INFO - 未找到与 'AspirationWorker' 相关的文件。
+2025-08-03 21:00:57,503 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-03 21:00:57,518 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-03 21:00:57,531 - INFO - Processing request of type ListToolsRequest
+2025-08-03 21:00:57,533 - INFO - Processing request of type ListResourcesRequest
+2025-08-03 21:00:57,535 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-03 21:12:32,710 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:12:32,713 - INFO - 收到问题: DamageDef additionalHediffsThisPart
+2025-08-03 21:12:32,713 - INFO - 找到的潜在关键词: [('DamageDef', 2), ('additionalHediffsThisPart', 2)]
+2025-08-03 21:12:32,713 - INFO - 提取到关键词: DamageDef
+2025-08-03 21:12:32,713 - INFO - 缓存未命中,开始实时搜索: DamageDef
+2025-08-03 21:12:34,071 - INFO - 找到 226 个候选文件,开始向量化处理...
+2025-08-03 21:13:37,263 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 21:14:01,551 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:14:01,551 - INFO - 收到问题: DamageDef additionalHediffsThisPart
+2025-08-03 21:14:01,551 - INFO - 找到的潜在关键词: [('DamageDef', 2), ('additionalHediffsThisPart', 2)]
+2025-08-03 21:14:01,551 - INFO - 提取到关键词: DamageDef
+2025-08-03 21:14:01,561 - INFO - 缓存命中: 关键词 'DamageDef'
+2025-08-03 21:15:20,068 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:15:20,068 - INFO - 收到问题: DamageWorker Apply additionalHediffsThisPart
+2025-08-03 21:15:20,068 - INFO - 找到的潜在关键词: [('DamageWorker', 2), ('Apply', 2), ('additionalHediffsThisPart', 2)]
+2025-08-03 21:15:20,068 - INFO - 提取到关键词: DamageWorker
+2025-08-03 21:15:20,068 - INFO - 缓存未命中,开始实时搜索: DamageWorker
+2025-08-03 21:15:21,443 - INFO - 找到 37 个候选文件,开始向量化处理...
+2025-08-03 21:15:30,428 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 21:16:16,210 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:16:16,210 - INFO - 收到问题: HediffDef
+2025-08-03 21:16:16,210 - INFO - 找到的潜在关键词: [('HediffDef', 2)]
+2025-08-03 21:16:16,210 - INFO - 提取到关键词: HediffDef
+2025-08-03 21:16:16,211 - INFO - 缓存未命中,开始实时搜索: HediffDef
+2025-08-03 21:16:17,587 - INFO - 找到 428 个候选文件,开始向量化处理...
+2025-08-03 21:18:43,382 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 21:18:43,387 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:18:43,387 - INFO - 收到问题: HediffDef class
+2025-08-03 21:18:43,387 - INFO - 找到的潜在关键词: [('HediffDef', 2)]
+2025-08-03 21:18:43,387 - INFO - 提取到关键词: HediffDef
+2025-08-03 21:18:43,392 - INFO - 缓存命中: 关键词 'HediffDef'
+2025-08-03 21:18:55,913 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:18:55,913 - INFO - 收到问题: HediffMaker.MakeHediff
+2025-08-03 21:18:55,913 - INFO - 找到的潜在关键词: [('HediffMaker.MakeHediff', 2)]
+2025-08-03 21:18:55,913 - INFO - 提取到关键词: HediffMaker.MakeHediff
+2025-08-03 21:18:55,913 - INFO - 缓存未命中,开始实时搜索: HediffMaker.MakeHediff
+2025-08-03 21:18:57,267 - INFO - 找到 54 个候选文件,开始向量化处理...
+2025-08-03 21:19:12,272 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 21:20:38,686 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:20:38,686 - INFO - 收到问题: DamageWorker Apply additionalHediffs
+2025-08-03 21:20:38,686 - INFO - 找到的潜在关键词: [('DamageWorker', 2), ('Apply', 2), ('additionalHediffs', 2)]
+2025-08-03 21:20:38,686 - INFO - 提取到关键词: DamageWorker
+2025-08-03 21:20:38,687 - INFO - 缓存命中: 关键词 'DamageWorker'
+2025-08-03 21:23:10,383 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:23:10,383 - INFO - 收到问题: DamageDefAdditionalHediff
+2025-08-03 21:23:10,383 - INFO - 找到的潜在关键词: [('DamageDefAdditionalHediff', 2)]
+2025-08-03 21:23:10,383 - INFO - 提取到关键词: DamageDefAdditionalHediff
+2025-08-03 21:23:10,383 - INFO - 缓存未命中,开始实时搜索: DamageDefAdditionalHediff
+2025-08-03 21:23:11,759 - INFO - 找到 5 个候选文件,开始向量化处理...
+2025-08-03 21:23:13,303 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 21:40:06,239 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:40:06,239 - INFO - 收到问题: PsychicRitualDef
+2025-08-03 21:40:06,239 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-03 21:40:06,239 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-03 21:40:06,239 - INFO - 缓存未命中,开始实时搜索: PsychicRitualDef
+2025-08-03 21:40:07,588 - INFO - 找到 57 个候选文件,开始向量化处理...
+2025-08-03 21:40:23,047 - WARNING - 未能从 C:\Steam\steamapps\common\RimWorld\Data\Anomaly\Languages\ChineseSimplified (简体中文)\Keyed\Misc_PsychicRituals.xml 提取到完整的代码块。
+2025-08-03 21:40:23,048 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 21:40:38,955 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:40:38,955 - INFO - 收到问题: CompProperties_PsychicRitualSpot
+2025-08-03 21:40:38,955 - INFO - 找到的潜在关键词: [('CompProperties_PsychicRitualSpot', 3)]
+2025-08-03 21:40:38,955 - INFO - 提取到关键词: CompProperties_PsychicRitualSpot
+2025-08-03 21:40:38,955 - INFO - 缓存未命中,开始实时搜索: CompProperties_PsychicRitualSpot
+2025-08-03 21:40:40,281 - INFO - 找到 2 个候选文件,开始向量化处理...
+2025-08-03 21:40:41,046 - INFO - 向量搜索完成。找到了 2 个匹配项并成功提取了代码。
+2025-08-03 21:41:38,879 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:41:38,879 - INFO - 收到问题: PsychicRitualGizmo
+2025-08-03 21:41:38,879 - INFO - 找到的潜在关键词: [('PsychicRitualGizmo', 2)]
+2025-08-03 21:41:38,879 - INFO - 提取到关键词: PsychicRitualGizmo
+2025-08-03 21:41:38,879 - INFO - 缓存未命中,开始实时搜索: PsychicRitualGizmo
+2025-08-03 21:41:40,315 - INFO - 找到 3 个候选文件,开始向量化处理...
+2025-08-03 21:41:41,300 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 21:43:48,740 - INFO - Processing request of type CallToolRequest
+2025-08-03 21:43:48,740 - INFO - 收到问题: PsychicRitualDef_InvocationCircle
+2025-08-03 21:43:48,740 - INFO - 找到的潜在关键词: [('PsychicRitualDef_InvocationCircle', 3)]
+2025-08-03 21:43:48,740 - INFO - 提取到关键词: PsychicRitualDef_InvocationCircle
+2025-08-03 21:43:48,740 - INFO - 缓存未命中,开始实时搜索: PsychicRitualDef_InvocationCircle
+2025-08-03 21:43:50,020 - INFO - 找到 26 个候选文件,开始向量化处理...
+2025-08-03 21:43:55,992 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 22:01:51,554 - INFO - Processing request of type CallToolRequest
+2025-08-03 22:01:51,554 - INFO - 收到问题: Show the C# source code for the CompPsychicRitualSpot class, specifically the CompGetGizmosExtra method. I need to see how it creates the ritual selection gizmo and what it passes to the dialog window.
+2025-08-03 22:01:51,554 - INFO - 找到的潜在关键词: [('Show', 2), ('CompPsychicRitualSpot', 2), ('CompGetGizmosExtra', 2)]
+2025-08-03 22:01:51,554 - INFO - 提取到关键词: Show
+2025-08-03 22:01:51,555 - INFO - 缓存未命中,开始实时搜索: Show
+2025-08-03 22:01:52,936 - INFO - 找到 840 个候选文件,开始向量化处理...
+2025-08-03 22:06:16,237 - WARNING - 未能从 C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\RitualTargetUseReport.txt 提取到完整的代码块。
+2025-08-03 22:06:16,237 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 22:13:55,178 - INFO - Processing request of type CallToolRequest
+2025-08-03 22:13:55,178 - INFO - 收到问题: Show the C# source code for the PsychicRitualDef class and the Dialog_BeginPsychicRitual class. I need to see the correct properties for Icon, cooldowns, roles, and the exact constructor signature for the dialog.
+2025-08-03 22:13:55,178 - INFO - 找到的潜在关键词: [('Dialog_BeginPsychicRitual', 3), ('Show', 2), ('PsychicRitualDef', 2), ('Icon', 2)]
+2025-08-03 22:13:55,178 - INFO - 提取到关键词: Dialog_BeginPsychicRitual
+2025-08-03 22:13:55,178 - INFO - 缓存未命中,开始实时搜索: Dialog_BeginPsychicRitual
+2025-08-03 22:13:56,380 - INFO - 找到 8 个候选文件,开始向量化处理...
+2025-08-03 22:13:58,927 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 22:30:34,550 - INFO - Processing request of type CallToolRequest
+2025-08-03 22:30:34,550 - INFO - 收到问题: PsychicRitualDef_InvocationCircle class definition
+2025-08-03 22:30:34,550 - INFO - 找到的潜在关键词: [('PsychicRitualDef_InvocationCircle', 3)]
+2025-08-03 22:30:34,550 - INFO - 提取到关键词: PsychicRitualDef_InvocationCircle
+2025-08-03 22:30:34,558 - INFO - 缓存命中: 关键词 'PsychicRitualDef_InvocationCircle'
+2025-08-03 22:59:18,371 - INFO - Processing request of type CallToolRequest
+2025-08-03 22:59:18,371 - INFO - 收到问题: CompPsychicRitualSpot CompGetGizmosExtra
+2025-08-03 22:59:18,371 - INFO - 找到的潜在关键词: [('CompPsychicRitualSpot', 2), ('CompGetGizmosExtra', 2)]
+2025-08-03 22:59:18,371 - INFO - 提取到关键词: CompPsychicRitualSpot
+2025-08-03 22:59:18,371 - INFO - 缓存未命中,开始实时搜索: CompPsychicRitualSpot
+2025-08-03 22:59:31,774 - INFO - 找到 4 个候选文件,开始向量化处理...
+2025-08-03 22:59:33,291 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-03 22:59:51,745 - INFO - Processing request of type CallToolRequest
+2025-08-03 22:59:51,745 - INFO - 收到问题: PsychicRitualGizmo GetGizmos
+2025-08-03 22:59:51,745 - INFO - 找到的潜在关键词: [('PsychicRitualGizmo', 2), ('GetGizmos', 2)]
+2025-08-03 22:59:51,745 - INFO - 提取到关键词: PsychicRitualGizmo
+2025-08-03 22:59:51,758 - INFO - 缓存命中: 关键词 'PsychicRitualGizmo'
+2025-08-03 23:28:19,476 - INFO - Processing request of type CallToolRequest
+2025-08-03 23:28:19,476 - INFO - 收到问题: PsychicRitualDef LabelCap usage
+2025-08-03 23:28:19,476 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2), ('LabelCap', 2)]
+2025-08-03 23:28:19,476 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-03 23:28:19,486 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-03 23:36:54,188 - INFO - Processing request of type CallToolRequest
+2025-08-03 23:36:54,189 - INFO - 收到问题: PsychicRitualDef reward
+2025-08-03 23:36:54,189 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-03 23:36:54,189 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-03 23:36:54,189 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-03 23:43:11,852 - INFO - Processing request of type CallToolRequest
+2025-08-03 23:43:11,852 - INFO - 收到问题: PsychicRitualDef create item
+2025-08-03 23:43:11,852 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-03 23:43:11,852 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-03 23:43:11,852 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-03 23:54:25,993 - INFO - Processing request of type CallToolRequest
+2025-08-03 23:54:25,993 - INFO - 收到问题: CompProperties_PsychicRitualSpot PsychicRitualGizmo
+2025-08-03 23:54:25,994 - INFO - 找到的潜在关键词: [('CompProperties_PsychicRitualSpot', 3), ('PsychicRitualGizmo', 2)]
+2025-08-03 23:54:25,994 - INFO - 提取到关键词: CompProperties_PsychicRitualSpot
+2025-08-03 23:54:26,001 - INFO - 缓存命中: 关键词 'CompProperties_PsychicRitualSpot'
+2025-08-03 23:54:38,820 - INFO - Processing request of type CallToolRequest
+2025-08-03 23:54:38,820 - INFO - 收到问题: CompPsychicRitualSpot CompGetGizmosExtra
+2025-08-03 23:54:38,820 - INFO - 找到的潜在关键词: [('CompPsychicRitualSpot', 2), ('CompGetGizmosExtra', 2)]
+2025-08-03 23:54:38,820 - INFO - 提取到关键词: CompPsychicRitualSpot
+2025-08-03 23:54:38,831 - INFO - 缓存命中: 关键词 'CompPsychicRitualSpot'
+2025-08-03 23:55:28,827 - INFO - Processing request of type CallToolRequest
+2025-08-03 23:55:28,828 - INFO - 收到问题: PsychicRitualGizmo GetGizmos
+2025-08-03 23:55:28,828 - INFO - 找到的潜在关键词: [('PsychicRitualGizmo', 2), ('GetGizmos', 2)]
+2025-08-03 23:55:28,828 - INFO - 提取到关键词: PsychicRitualGizmo
+2025-08-03 23:55:28,840 - INFO - 缓存命中: 关键词 'PsychicRitualGizmo'
+2025-08-03 23:57:23,467 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-03 23:57:23,479 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-03 23:57:23,492 - INFO - Processing request of type ListToolsRequest
+2025-08-03 23:57:23,494 - INFO - Processing request of type ListResourcesRequest
+2025-08-03 23:57:23,495 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-04 00:00:37,307 - INFO - Processing request of type CallToolRequest
+2025-08-04 00:00:37,307 - INFO - 收到问题: PsychicRitualDef
+2025-08-04 00:00:37,307 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-04 00:00:37,307 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-04 00:00:37,317 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-04 00:00:55,095 - INFO - Processing request of type CallToolRequest
+2025-08-04 00:00:55,095 - INFO - 收到问题: class PsychicRitualDef
+2025-08-04 00:00:55,095 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-04 00:00:55,095 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-04 00:00:55,095 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-04 00:09:55,831 - INFO - Processing request of type CallToolRequest
+2025-08-04 00:09:55,831 - INFO - 收到问题: public class PsychicRitualDef : Def
+2025-08-04 00:09:55,832 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-04 00:09:55,832 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-04 00:09:55,832 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-04 07:20:33,529 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-04 07:20:33,539 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-04 07:20:33,547 - INFO - Processing request of type ListToolsRequest
+2025-08-04 07:20:33,549 - INFO - Processing request of type ListResourcesRequest
+2025-08-04 07:20:33,551 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-04 07:20:33,559 - INFO - Processing request of type ListToolsRequest
+2025-08-04 07:20:33,560 - INFO - Processing request of type ListToolsRequest
+2025-08-04 07:20:35,996 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-04 07:20:36,004 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-04 07:20:36,011 - INFO - Processing request of type ListToolsRequest
+2025-08-04 07:20:36,013 - INFO - Processing request of type ListResourcesRequest
+2025-08-04 07:20:36,013 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-04 07:24:35,273 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:24:35,273 - INFO - 收到问题: public class PsychicRitualDef : Def
+2025-08-04 07:24:35,273 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-04 07:24:35,273 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-04 07:24:35,282 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-04 07:26:21,038 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:26:21,038 - INFO - 收到问题: public class PsychicRitualDef : Def
+2025-08-04 07:26:21,038 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-04 07:26:21,038 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-04 07:26:21,038 - INFO - 缓存未命中,开始实时搜索: PsychicRitualDef
+2025-08-04 07:27:10,095 - INFO - 找到 57 个候选文件,开始向量化处理...
+2025-08-04 07:27:28,833 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-04 07:28:17,494 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:28:17,494 - INFO - 收到问题: public class PsychicRitualDef : Def
+2025-08-04 07:28:17,494 - INFO - 找到的潜在关键词: [('PsychicRitualDef', 2)]
+2025-08-04 07:28:17,494 - INFO - 提取到关键词: PsychicRitualDef
+2025-08-04 07:28:17,501 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-04 07:30:47,851 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-04 07:30:47,860 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-04 07:30:47,868 - INFO - Processing request of type ListToolsRequest
+2025-08-04 07:30:47,869 - INFO - Processing request of type ListResourcesRequest
+2025-08-04 07:30:47,870 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-04 07:31:58,371 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:31:58,372 - INFO - 收到问题: PsychicRitualDef
+2025-08-04 07:31:58,372 - INFO - 找到的潜在关键词: ['PsychicRitualDef']
+2025-08-04 07:31:58,372 - INFO - 提取到关键词: ['PsychicRitualDef']
+2025-08-04 07:31:58,372 - INFO - 缓存未命中,开始实时搜索: PsychicRitualDef
+2025-08-04 07:31:59,657 - INFO - 找到 57 个候选文件,开始向量化处理...
+2025-08-04 07:31:59,658 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\PsychicRitualDef.txt
+2025-08-04 07:31:59,658 - WARNING - 候选文件过多 (56),仅处理前 25 个。
+2025-08-04 07:32:06,642 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-04 07:32:54,871 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:32:54,871 - INFO - 收到问题: public class PsychicRitualDef
+2025-08-04 07:32:54,872 - INFO - 找到的潜在关键词: ['PsychicRitualDef']
+2025-08-04 07:32:54,872 - INFO - 提取到关键词: ['PsychicRitualDef']
+2025-08-04 07:32:54,878 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-04 07:35:55,326 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:35:55,326 - INFO - 收到问题: PsychicRitualToil_GatherForInvocation
+2025-08-04 07:35:55,326 - INFO - 找到的潜在关键词: ['PsychicRitualToil_GatherForInvocation']
+2025-08-04 07:35:55,326 - INFO - 提取到关键词: ['PsychicRitualToil_GatherForInvocation']
+2025-08-04 07:35:55,327 - INFO - 缓存未命中,开始实时搜索: PsychicRitualToil_GatherForInvocation
+2025-08-04 07:35:56,578 - INFO - 找到 4 个候选文件,开始向量化处理...
+2025-08-04 07:35:56,578 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse.AI.Group\PsychicRitualToil_GatherForInvocation.txt
+2025-08-04 07:35:58,159 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-04 07:42:57,428 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:42:57,428 - INFO - 收到问题: PsychicRitualDef_InvocationCircle class
+2025-08-04 07:42:57,428 - INFO - 找到的潜在关键词: ['PsychicRitualDef_InvocationCircle']
+2025-08-04 07:42:57,428 - INFO - 提取到关键词: ['PsychicRitualDef_InvocationCircle']
+2025-08-04 07:42:57,429 - INFO - 缓存未命中,开始实时搜索: PsychicRitualDef_InvocationCircle
+2025-08-04 07:42:58,898 - INFO - 找到 26 个候选文件,开始向量化处理...
+2025-08-04 07:42:58,898 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\PsychicRitualDef_InvocationCircle.txt
+2025-08-04 07:43:06,851 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-04 07:43:37,198 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:43:37,198 - INFO - 收到问题: PsychicRitualDef class source
+2025-08-04 07:43:37,198 - INFO - 找到的潜在关键词: ['PsychicRitualDef']
+2025-08-04 07:43:37,198 - INFO - 提取到关键词: ['PsychicRitualDef']
+2025-08-04 07:43:37,199 - INFO - 缓存命中: 关键词 'PsychicRitualDef'
+2025-08-04 07:44:18,730 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:44:18,730 - INFO - 收到问题: PsychicRitualToil_GatherOfferings class source
+2025-08-04 07:44:18,730 - INFO - 找到的潜在关键词: ['PsychicRitualToil_GatherOfferings']
+2025-08-04 07:44:18,730 - INFO - 提取到关键词: ['PsychicRitualToil_GatherOfferings']
+2025-08-04 07:44:18,730 - INFO - 缓存未命中,开始实时搜索: PsychicRitualToil_GatherOfferings
+2025-08-04 07:44:20,107 - INFO - 找到 5 个候选文件,开始向量化处理...
+2025-08-04 07:44:20,107 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse.AI.Group\PsychicRitualToil_GatherOfferings.txt
+2025-08-04 07:44:22,143 - INFO - 向量搜索完成。找到了 4 个匹配项并成功提取了代码。
+2025-08-04 07:53:02,419 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:53:02,419 - INFO - 收到问题: StatDef for melee attack speed
+2025-08-04 07:53:02,419 - INFO - 找到的潜在关键词: ['StatDef']
+2025-08-04 07:53:02,419 - INFO - 提取到关键词: ['StatDef']
+2025-08-04 07:53:02,419 - INFO - 缓存未命中,开始实时搜索: StatDef
+2025-08-04 07:53:03,865 - INFO - 找到 516 个候选文件,开始向量化处理...
+2025-08-04 07:53:03,867 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\StatDef.txt
+2025-08-04 07:53:03,868 - WARNING - 候选文件过多 (515),仅处理前 25 个。
+2025-08-04 07:53:12,872 - INFO - 向量搜索完成。找到了 2 个匹配项并成功提取了代码。
+2025-08-04 07:55:01,722 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:55:01,723 - INFO - 收到问题: AbilityDef for berserk pulse
+2025-08-04 07:55:01,723 - INFO - 找到的潜在关键词: ['AbilityDef']
+2025-08-04 07:55:01,723 - INFO - 提取到关键词: ['AbilityDef']
+2025-08-04 07:55:01,723 - INFO - 缓存未命中,开始实时搜索: AbilityDef
+2025-08-04 07:55:03,037 - INFO - 找到 104 个候选文件,开始向量化处理...
+2025-08-04 07:55:03,037 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\AbilityDef.txt
+2025-08-04 07:55:03,037 - WARNING - 候选文件过多 (103),仅处理前 25 个。
+2025-08-04 07:55:10,617 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-04 07:58:42,495 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:58:42,495 - INFO - 收到问题: 现在我需要找到原版“群体狂暴”灵能的 defName。
+2025-08-04 07:58:42,495 - INFO - 找到的潜在关键词: ['defName。']
+2025-08-04 07:58:42,495 - INFO - 提取到关键词: ['defName。']
+2025-08-04 07:58:42,495 - INFO - 缓存未命中,开始实时搜索: defName。
+2025-08-04 07:58:43,777 - INFO - 未找到与 '['defName。']' 相关的文件。
+2025-08-04 07:59:36,124 - INFO - Processing request of type CallToolRequest
+2025-08-04 07:59:36,124 - INFO - 收到问题: 现在我需要找到原版“群体狂暴”灵能的 defName。
+2025-08-04 07:59:36,124 - INFO - 找到的潜在关键词: ['defName。']
+2025-08-04 07:59:36,124 - INFO - 提取到关键词: ['defName。']
+2025-08-04 07:59:36,124 - INFO - 缓存未命中,开始实时搜索: defName。
+2025-08-04 07:59:37,427 - INFO - 未找到与 '['defName。']' 相关的文件。
+2025-08-04 08:00:44,966 - INFO - Processing request of type CallToolRequest
+2025-08-04 08:00:44,966 - INFO - 收到问题: 现在我需要找到原版“群体狂暴”灵能的 defName。
+2025-08-04 08:00:44,966 - INFO - 找到的潜在关键词: ['defName。']
+2025-08-04 08:00:44,967 - INFO - 提取到关键词: ['defName。']
+2025-08-04 08:00:44,967 - INFO - 缓存未命中,开始实时搜索: defName。
+2025-08-04 08:00:46,237 - INFO - 未找到与 '['defName。']' 相关的文件。
+2025-08-04 08:01:42,734 - INFO - Processing request of type CallToolRequest
+2025-08-04 08:01:42,734 - INFO - 收到问题: 现在我需要找到原版“群体狂暴”灵能的 defName。
+2025-08-04 08:01:42,734 - INFO - 找到的潜在关键词: ['defName。']
+2025-08-04 08:01:42,734 - INFO - 提取到关键词: ['defName。']
+2025-08-04 08:01:42,734 - INFO - 缓存未命中,开始实时搜索: defName。
+2025-08-04 08:01:43,967 - INFO - 未找到与 '['defName。']' 相关的文件。
+2025-08-04 08:54:04,338 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-04 08:54:04,354 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-04 08:54:04,367 - INFO - Processing request of type ListToolsRequest
+2025-08-04 08:54:04,369 - INFO - Processing request of type ListResourcesRequest
+2025-08-04 08:54:04,370 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-04 21:57:57,767 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-04 21:57:57,782 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-04 21:57:57,795 - INFO - Processing request of type ListToolsRequest
+2025-08-04 21:57:57,797 - INFO - Processing request of type ListResourcesRequest
+2025-08-04 21:57:57,798 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-05 18:39:23,841 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-05 18:39:23,858 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-05 18:39:23,871 - INFO - Processing request of type ListToolsRequest
+2025-08-05 18:39:23,873 - INFO - Processing request of type ListResourcesRequest
+2025-08-05 18:39:23,874 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-05 18:47:28,304 - INFO - Processing request of type CallToolRequest
+2025-08-05 18:47:28,306 - INFO - 收到问题: Pawn_InventoryTracker.get_FirstUnloadableThing
+2025-08-05 18:47:28,306 - INFO - 找到的潜在关键词: ['get_FirstUnloadableThing', 'Pawn_InventoryTracker']
+2025-08-05 18:47:28,306 - INFO - 提取到关键词: ['get_FirstUnloadableThing', 'Pawn_InventoryTracker']
+2025-08-05 18:47:28,306 - INFO - 缓存未命中,开始实时搜索: Pawn_InventoryTracker-get_FirstUnloadableThing
+2025-08-05 18:48:42,219 - INFO - 使用最具体的关键词 'get_FirstUnloadableThing' 未找到文件,尝试所有关键词...
+2025-08-05 18:48:44,293 - INFO - 找到 20 个候选文件,开始向量化处理...
+2025-08-05 18:48:44,293 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse\Pawn_InventoryTracker.txt
+2025-08-05 18:48:50,652 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-05 18:49:27,121 - INFO - Processing request of type CallToolRequest
+2025-08-05 18:49:27,121 - INFO - 收到问题: Pawn_InventoryTracker.get_FirstUnloadableThing
+2025-08-05 18:49:27,122 - INFO - 找到的潜在关键词: ['get_FirstUnloadableThing', 'Pawn_InventoryTracker']
+2025-08-05 18:49:27,122 - INFO - 提取到关键词: ['get_FirstUnloadableThing', 'Pawn_InventoryTracker']
+2025-08-05 18:49:27,131 - INFO - 缓存命中: 关键词 'Pawn_InventoryTracker-get_FirstUnloadableThing'
+2025-08-05 19:04:16,910 - INFO - Processing request of type CallToolRequest
+2025-08-05 19:04:16,910 - INFO - 收到问题: Verse.Projectile.TickInterval
+2025-08-05 19:04:16,910 - INFO - 找到的潜在关键词: ['TickInterval', 'Projectile', 'Verse']
+2025-08-05 19:04:16,910 - INFO - 提取到关键词: ['TickInterval', 'Projectile', 'Verse']
+2025-08-05 19:04:16,910 - INFO - 缓存未命中,开始实时搜索: Projectile-TickInterval-Verse
+2025-08-05 19:04:18,552 - INFO - 找到 289 个候选文件,开始向量化处理...
+2025-08-05 19:04:18,553 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse\Projectile.txt
+2025-08-05 19:04:18,554 - WARNING - 候选文件过多 (288),仅处理前 25 个。
+2025-08-05 19:04:28,272 - ERROR - HTTPSConnectionPool(host='dashscope.aliyuncs.com', port=443): Max retries exceeded with url: /api/v1/services/embeddings/text-embedding/text-embedding (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)')))
+2025-08-05 19:04:28,272 - ERROR - 调用向量API时出错: HTTPSConnectionPool(host='dashscope.aliyuncs.com', port=443): Max retries exceeded with url: /api/v1/services/embeddings/text-embedding/text-embedding (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)')))
+urllib3.exceptions.SSLError: [SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\requests\adapters.py", line 667, in send
+ resp = conn.urlopen(
+ ^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen
+ retries = retries.increment(
+ ^^^^^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\urllib3\util\retry.py", line 519, in increment
+ raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='dashscope.aliyuncs.com', port=443): Max retries exceeded with url: /api/v1/services/embeddings/text-embedding/text-embedding (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)')))
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+ File "c:\Steam\steamapps\common\RimWorld\Mods\3516260226\Source\MCP\mcpserver_stdio.py", line 82, in get_embedding
+ response = dashscope.TextEmbedding.call(
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\dashscope\embeddings\text_embedding.py", line 49, in call
+ return super().call(model=model,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\dashscope\client\base_api.py", line 148, in call
+ return request.call()
+ ^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\dashscope\api_entities\http_request.py", line 101, in call
+ output = next(response)
+ ^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\dashscope\api_entities\http_request.py", line 330, in _handle_request
+ raise e
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\dashscope\api_entities\http_request.py", line 313, in _handle_request
+ response = session.post(url=self.url,
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\requests\sessions.py", line 637, in post
+ return self.request("POST", url, data=data, json=json, **kwargs)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\requests\sessions.py", line 589, in request
+ resp = self.send(prep, **send_kwargs)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\requests\sessions.py", line 703, in send
+ r = adapter.send(request, **kwargs)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\Kalo\AppData\Local\Programs\Python\Python312\Lib\site-packages\requests\adapters.py", line 698, in send
+ raise SSLError(e, request=request)
+requests.exceptions.SSLError: HTTPSConnectionPool(host='dashscope.aliyuncs.com', port=443): Max retries exceeded with url: /api/v1/services/embeddings/text-embedding/text-embedding (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)')))
+2025-08-05 19:04:32,638 - INFO - 向量搜索完成。找到了 2 个匹配项并成功提取了代码。
+2025-08-06 19:25:05,631 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-06 19:25:05,642 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-06 19:25:05,651 - INFO - Processing request of type ListToolsRequest
+2025-08-06 19:25:05,653 - INFO - Processing request of type ListResourcesRequest
+2025-08-06 19:25:05,653 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-06 20:19:21,633 - INFO - Processing request of type CallToolRequest
+2025-08-06 20:19:21,638 - INFO - 收到问题: How does RimWorld handle delayed actions or events over a specific number of ticks? I'm looking for schedulers or managers.
+2025-08-06 20:19:21,640 - INFO - 找到的潜在关键词: ['RimWorld']
+2025-08-06 20:19:21,640 - INFO - 提取到关键词: ['RimWorld']
+2025-08-06 20:19:21,640 - INFO - 缓存未命中,开始实时搜索: RimWorld
+2025-08-06 20:19:23,841 - INFO - 找到 8024 个候选文件,开始向量化处理...
+2025-08-06 20:19:23,869 - WARNING - 候选文件过多 (8024),仅处理前 25 个。
+2025-08-08 17:22:58,354 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-08 17:22:58,366 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-08 17:22:58,377 - INFO - Processing request of type ListToolsRequest
+2025-08-08 17:22:58,378 - INFO - Processing request of type ListResourcesRequest
+2025-08-08 17:22:58,379 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-08 17:41:24,024 - INFO - Processing request of type CallToolRequest
+2025-08-08 17:41:24,025 - INFO - 收到问题: Building_Bed
+2025-08-08 17:41:24,026 - INFO - 找到的潜在关键词: ['Building_Bed']
+2025-08-08 17:41:24,026 - INFO - 提取到关键词: ['Building_Bed']
+2025-08-08 17:41:24,026 - INFO - 缓存未命中,开始实时搜索: Building_Bed
+2025-08-08 17:42:44,193 - INFO - 找到 103 个候选文件,开始向量化处理...
+2025-08-08 17:42:44,193 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\Building_Bed.txt
+2025-08-08 17:42:44,197 - WARNING - 候选文件过多 (102),仅处理前 25 个。
+2025-08-08 17:42:51,398 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-08 17:42:51,404 - INFO - Processing request of type CallToolRequest
+2025-08-08 17:42:51,404 - INFO - 收到问题: CryptosleepCasket
+2025-08-08 17:42:51,404 - INFO - 找到的潜在关键词: ['CryptosleepCasket']
+2025-08-08 17:42:51,404 - INFO - 提取到关键词: ['CryptosleepCasket']
+2025-08-08 17:42:51,404 - INFO - 缓存未命中,开始实时搜索: CryptosleepCasket
+2025-08-08 17:42:53,357 - INFO - 找到 56 个候选文件,开始向量化处理...
+2025-08-08 17:42:53,359 - WARNING - 候选文件过多 (56),仅处理前 25 个。
+2025-08-08 17:43:01,261 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-08 17:46:37,047 - INFO - Processing request of type CallToolRequest
+2025-08-08 17:46:37,047 - INFO - 收到问题: BiosculpterPod
+2025-08-08 17:46:37,047 - INFO - 找到的潜在关键词: ['BiosculpterPod']
+2025-08-08 17:46:37,048 - INFO - 提取到关键词: ['BiosculpterPod']
+2025-08-08 17:46:37,048 - INFO - 缓存未命中,开始实时搜索: BiosculpterPod
+2025-08-08 17:46:39,286 - INFO - 找到 42 个候选文件,开始向量化处理...
+2025-08-08 17:46:39,286 - WARNING - 候选文件过多 (42),仅处理前 25 个。
+2025-08-08 17:46:46,223 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-08 17:47:06,637 - INFO - Processing request of type CallToolRequest
+2025-08-08 17:47:06,637 - INFO - 收到问题: Building_BiosculpterPod class
+2025-08-08 17:47:06,637 - INFO - 找到的潜在关键词: ['Building_BiosculpterPod']
+2025-08-08 17:47:06,637 - INFO - 提取到关键词: ['Building_BiosculpterPod']
+2025-08-08 17:47:06,638 - INFO - 缓存未命中,开始实时搜索: Building_BiosculpterPod
+2025-08-08 17:47:08,918 - INFO - 未找到与 '['Building_BiosculpterPod']' 相关的文件。
+2025-08-08 17:56:16,922 - INFO - Processing request of type CallToolRequest
+2025-08-08 17:56:16,922 - INFO - 收到问题: ThingDef of BiosculpterPod
+2025-08-08 17:56:16,922 - INFO - 找到的潜在关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-08 17:56:16,922 - INFO - 提取到关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-08 17:56:16,922 - INFO - 缓存未命中,开始实时搜索: BiosculpterPod-ThingDef
+2025-08-08 17:56:18,882 - INFO - 找到 50 个候选文件,开始向量化处理...
+2025-08-08 17:56:18,882 - WARNING - 候选文件过多 (50),仅处理前 25 个。
+2025-08-08 17:56:25,938 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-08 18:50:39,345 - INFO - Processing request of type CallToolRequest
+2025-08-08 18:50:39,347 - INFO - 收到问题: Building_BiosculpterPod class definition
+2025-08-08 18:50:39,348 - INFO - 找到的潜在关键词: ['Building_BiosculpterPod']
+2025-08-08 18:50:39,348 - INFO - 提取到关键词: ['Building_BiosculpterPod']
+2025-08-08 18:50:39,348 - INFO - 缓存未命中,开始实时搜索: Building_BiosculpterPod
+2025-08-08 18:52:17,079 - INFO - 未找到与 '['Building_BiosculpterPod']' 相关的文件。
+2025-08-08 18:53:58,078 - INFO - Processing request of type CallToolRequest
+2025-08-08 18:53:58,078 - INFO - 收到问题: Building_BiosculpterPod class definition
+2025-08-08 18:53:58,078 - INFO - 找到的潜在关键词: ['Building_BiosculpterPod']
+2025-08-08 18:53:58,078 - INFO - 提取到关键词: ['Building_BiosculpterPod']
+2025-08-08 18:53:58,078 - INFO - 缓存未命中,开始实时搜索: Building_BiosculpterPod
+2025-08-08 18:54:00,558 - INFO - 未找到与 '['Building_BiosculpterPod']' 相关的文件。
+2025-08-08 19:07:28,003 - INFO - Processing request of type CallToolRequest
+2025-08-08 19:07:28,003 - INFO - 收到问题: CompBiosculpterPod and CompProperties_BiosculpterPod
+2025-08-08 19:07:28,003 - INFO - 找到的潜在关键词: ['CompProperties_BiosculpterPod', 'CompBiosculpterPod']
+2025-08-08 19:07:28,003 - INFO - 提取到关键词: ['CompProperties_BiosculpterPod', 'CompBiosculpterPod']
+2025-08-08 19:07:28,004 - INFO - 缓存未命中,开始实时搜索: CompBiosculpterPod-CompProperties_BiosculpterPod
+2025-08-08 19:07:29,829 - INFO - 找到 11 个候选文件,开始向量化处理...
+2025-08-08 19:07:29,829 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompProperties_BiosculpterPod.txt
+2025-08-08 19:07:29,829 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompBiosculpterPod.txt
+2025-08-08 19:07:31,777 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-08 19:35:05,891 - INFO - Processing request of type CallToolRequest
+2025-08-08 19:35:05,891 - INFO - 收到问题: C# class JobDef fields
+2025-08-08 19:35:05,891 - INFO - 找到的潜在关键词: ['JobDef']
+2025-08-08 19:35:05,891 - INFO - 提取到关键词: ['JobDef']
+2025-08-08 19:35:05,891 - INFO - 缓存未命中,开始实时搜索: JobDef
+2025-08-08 19:35:08,071 - INFO - 找到 571 个候选文件,开始向量化处理...
+2025-08-08 19:35:08,072 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse\JobDef.txt
+2025-08-08 19:35:08,073 - WARNING - 候选文件过多 (570),仅处理前 25 个。
+2025-08-08 19:35:13,917 - INFO - 向量搜索完成。找到了 2 个匹配项并成功提取了代码。
+2025-08-08 23:59:20,246 - INFO - Processing request of type CallToolRequest
+2025-08-08 23:59:20,269 - INFO - 收到问题: ThingDef for BiosculpterPod
+2025-08-08 23:59:20,270 - INFO - 找到的潜在关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-08 23:59:20,270 - INFO - 提取到关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-08 23:59:20,302 - INFO - 缓存命中: 关键词 'BiosculpterPod-ThingDef'
+2025-08-09 00:32:44,309 - INFO - Processing request of type CallToolRequest
+2025-08-09 00:32:44,309 - INFO - 收到问题: JobDriver_EnterCryptosleepCasket
+2025-08-09 00:32:44,310 - INFO - 找到的潜在关键词: ['JobDriver_EnterCryptosleepCasket']
+2025-08-09 00:32:44,310 - INFO - 提取到关键词: ['JobDriver_EnterCryptosleepCasket']
+2025-08-09 00:32:44,310 - INFO - 缓存未命中,开始实时搜索: JobDriver_EnterCryptosleepCasket
+2025-08-09 00:33:57,816 - INFO - 找到 2 个候选文件,开始向量化处理...
+2025-08-09 00:33:57,816 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\JobDriver_EnterCryptosleepCasket.txt
+2025-08-09 00:33:58,572 - INFO - 向量搜索完成。找到了 1 个匹配项并成功提取了代码。
+2025-08-09 00:42:26,054 - INFO - Processing request of type CallToolRequest
+2025-08-09 00:42:26,054 - INFO - 收到问题: ThingDef for BiosculpterPod
+2025-08-09 00:42:26,054 - INFO - 找到的潜在关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-09 00:42:26,054 - INFO - 提取到关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-09 00:42:26,069 - INFO - 缓存命中: 关键词 'BiosculpterPod-ThingDef'
+2025-08-09 10:18:42,504 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-09 10:18:42,520 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-09 10:18:42,533 - INFO - Processing request of type ListToolsRequest
+2025-08-09 10:18:42,536 - INFO - Processing request of type ListResourcesRequest
+2025-08-09 10:18:42,537 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-09 11:08:17,356 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-09 11:08:17,366 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-09 11:08:17,375 - INFO - Processing request of type ListToolsRequest
+2025-08-09 11:08:17,377 - INFO - Processing request of type ListResourcesRequest
+2025-08-09 11:08:17,378 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-09 13:01:19,595 - INFO - Processing request of type CallToolRequest
+2025-08-09 13:01:19,600 - INFO - 收到问题: HediffDef named Malnutrition
+2025-08-09 13:01:19,603 - INFO - 找到的潜在关键词: ['HediffDef', 'Malnutrition']
+2025-08-09 13:01:19,603 - INFO - 提取到关键词: ['HediffDef', 'Malnutrition']
+2025-08-09 13:01:19,604 - INFO - 缓存未命中,开始实时搜索: HediffDef-Malnutrition
+2025-08-09 13:01:21,133 - INFO - 找到 20 个候选文件,开始向量化处理...
+2025-08-09 13:01:28,002 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-09 13:02:58,802 - INFO - Processing request of type CallToolRequest
+2025-08-09 13:02:58,803 - INFO - 收到问题: HediffDef named Luciferium
+2025-08-09 13:02:58,803 - INFO - 找到的潜在关键词: ['HediffDef', 'Luciferium']
+2025-08-09 13:02:58,803 - INFO - 提取到关键词: ['HediffDef', 'Luciferium']
+2025-08-09 13:02:58,803 - INFO - 缓存未命中,开始实时搜索: HediffDef-Luciferium
+2025-08-09 13:03:00,318 - INFO - 找到 29 个候选文件,开始向量化处理...
+2025-08-09 13:03:00,318 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\Core\Languages\ChineseSimplified (简体中文)\DefInjected\NeedDef\Luciferium.xml
+2025-08-09 13:03:00,318 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\Core\Defs\Drugs\Luciferium.xml
+2025-08-09 13:03:00,318 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\Core\Languages\ChineseSimplified (简体中文)\DefInjected\ChemicalDef\Luciferium.xml
+2025-08-09 13:03:00,318 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\Core\Languages\ChineseSimplified (简体中文)\DefInjected\ThingDef\Luciferium.xml
+2025-08-09 13:03:00,318 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\Core\Languages\ChineseSimplified (简体中文)\DefInjected\HediffDef\Luciferium.xml
+2025-08-09 13:03:12,903 - INFO - 向量搜索完成。找到了 1 个匹配项并成功提取了代码。
+2025-08-09 13:33:10,729 - INFO - Processing request of type CallToolRequest
+2025-08-09 13:33:10,729 - INFO - 收到问题: ThingDef for Wula race
+2025-08-09 13:33:10,729 - INFO - 找到的潜在关键词: ['Wula', 'ThingDef']
+2025-08-09 13:33:10,729 - INFO - 提取到关键词: ['Wula', 'ThingDef']
+2025-08-09 13:33:10,729 - INFO - 缓存未命中,开始实时搜索: ThingDef-Wula
+2025-08-09 13:33:12,622 - INFO - 找到 2044 个候选文件,开始向量化处理...
+2025-08-09 13:33:12,628 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse\ThingDef.txt
+2025-08-09 13:33:12,629 - WARNING - 候选文件过多 (2043),仅处理前 25 个。
+2025-08-09 13:34:54,603 - INFO - Processing request of type CallToolRequest
+2025-08-09 13:34:54,603 - INFO - 收到问题: LifeStageDef for HumanlikeAdult
+2025-08-09 13:34:54,603 - INFO - 找到的潜在关键词: ['LifeStageDef', 'HumanlikeAdult']
+2025-08-09 13:34:54,603 - INFO - 提取到关键词: ['LifeStageDef', 'HumanlikeAdult']
+2025-08-09 13:34:54,603 - INFO - 缓存未命中,开始实时搜索: HumanlikeAdult-LifeStageDef
+2025-08-09 13:34:56,048 - INFO - 找到 6 个候选文件,开始向量化处理...
+2025-08-09 13:34:58,422 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-09 13:35:56,165 - INFO - Processing request of type CallToolRequest
+2025-08-09 13:35:56,165 - INFO - 收到问题: source code for ColonistBarColonistDrawer.DrawIcons
+2025-08-09 13:35:56,165 - INFO - 找到的潜在关键词: ['DrawIcons', 'ColonistBarColonistDrawer']
+2025-08-09 13:35:56,165 - INFO - 提取到关键词: ['DrawIcons', 'ColonistBarColonistDrawer']
+2025-08-09 13:35:56,165 - INFO - 缓存未命中,开始实时搜索: ColonistBarColonistDrawer-DrawIcons
+2025-08-09 13:35:57,819 - INFO - 找到 2 个候选文件,开始向量化处理...
+2025-08-09 13:35:57,820 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\ColonistBarColonistDrawer.txt
+2025-08-09 13:35:58,503 - INFO - 向量搜索完成。找到了 1 个匹配项并成功提取了代码。
+2025-08-09 19:13:46,499 - INFO - Processing request of type CallToolRequest
+2025-08-09 19:13:46,501 - INFO - 收到问题: PawnKindDef lifeStages
+2025-08-09 19:13:46,502 - INFO - 找到的潜在关键词: ['PawnKindDef', 'lifeStages']
+2025-08-09 19:13:46,502 - INFO - 提取到关键词: ['PawnKindDef', 'lifeStages']
+2025-08-09 19:13:46,502 - INFO - 缓存未命中,开始实时搜索: PawnKindDef-lifeStages
+2025-08-09 19:14:57,492 - INFO - 找到 314 个候选文件,开始向量化处理...
+2025-08-09 19:14:57,492 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse\PawnKindDef.txt
+2025-08-09 19:14:57,493 - WARNING - 候选文件过多 (313),仅处理前 25 个。
+2025-08-09 19:15:07,385 - INFO - 向量搜索完成。找到了 1 个匹配项并成功提取了代码。
+2025-08-09 19:15:07,406 - INFO - Processing request of type CallToolRequest
+2025-08-09 19:15:07,407 - INFO - 收到问题: PawnKindDef lifeStages
+2025-08-09 19:15:07,407 - INFO - 找到的潜在关键词: ['PawnKindDef', 'lifeStages']
+2025-08-09 19:15:07,407 - INFO - 提取到关键词: ['PawnKindDef', 'lifeStages']
+2025-08-09 19:15:07,415 - INFO - 缓存命中: 关键词 'PawnKindDef-lifeStages'
+2025-08-09 19:22:06,405 - INFO - Processing request of type CallToolRequest
+2025-08-09 19:22:06,405 - INFO - 收到问题: CompProperties_Refuelable
+2025-08-09 19:22:06,405 - INFO - 找到的潜在关键词: ['CompProperties_Refuelable']
+2025-08-09 19:22:06,405 - INFO - 提取到关键词: ['CompProperties_Refuelable']
+2025-08-09 19:22:06,405 - INFO - 缓存未命中,开始实时搜索: CompProperties_Refuelable
+2025-08-09 19:22:08,376 - INFO - 找到 18 个候选文件,开始向量化处理...
+2025-08-09 19:22:08,376 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompProperties_Refuelable.txt
+2025-08-09 19:22:17,721 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-09 19:24:09,129 - INFO - Processing request of type CallToolRequest
+2025-08-09 19:24:09,129 - INFO - 收到问题: CompProperties_Refuelable
+2025-08-09 19:24:09,129 - INFO - 找到的潜在关键词: ['CompProperties_Refuelable']
+2025-08-09 19:24:09,129 - INFO - 提取到关键词: ['CompProperties_Refuelable']
+2025-08-09 19:24:09,148 - INFO - 缓存命中: 关键词 'CompProperties_Refuelable'
+2025-08-09 20:37:05,246 - INFO - Processing request of type CallToolRequest
+2025-08-09 20:37:05,247 - INFO - 收到问题: WorkGiver_Scanner class definition, especially methods for float menu options
+2025-08-09 20:37:05,248 - INFO - 找到的潜在关键词: ['WorkGiver_Scanner']
+2025-08-09 20:37:05,248 - INFO - 提取到关键词: ['WorkGiver_Scanner']
+2025-08-09 20:37:05,248 - INFO - 缓存未命中,开始实时搜索: WorkGiver_Scanner
+2025-08-09 20:37:15,713 - INFO - 找到 83 个候选文件,开始向量化处理...
+2025-08-09 20:37:15,714 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\WorkGiver_Scanner.txt
+2025-08-09 20:37:15,714 - WARNING - 候选文件过多 (82),仅处理前 25 个。
+2025-08-09 20:37:21,549 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-09 21:04:45,693 - INFO - Processing request of type CallToolRequest
+2025-08-09 21:04:45,712 - INFO - 收到问题: TargetingParameters.ForRescue
+2025-08-09 21:04:45,712 - INFO - 找到的潜在关键词: ['TargetingParameters', 'ForRescue']
+2025-08-09 21:04:45,712 - INFO - 提取到关键词: ['TargetingParameters', 'ForRescue']
+2025-08-09 21:04:45,746 - INFO - 缓存未命中,开始实时搜索: ForRescue-TargetingParameters
+2025-08-09 21:05:06,716 - INFO - 找到 55 个候选文件,开始向量化处理...
+2025-08-09 21:05:06,717 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\TargetingParameters.txt
+2025-08-09 21:05:06,732 - WARNING - 候选文件过多 (54),仅处理前 25 个。
+2025-08-09 21:05:34,758 - INFO - Processing request of type CallToolRequest
+2025-08-09 21:05:34,758 - INFO - 收到问题: FloatMenuMakerMap AddHumanlikeOrders
+2025-08-09 21:05:34,758 - INFO - 找到的潜在关键词: ['AddHumanlikeOrders', 'FloatMenuMakerMap']
+2025-08-09 21:05:34,758 - INFO - 提取到关键词: ['AddHumanlikeOrders', 'FloatMenuMakerMap']
+2025-08-09 21:05:34,758 - INFO - 缓存未命中,开始实时搜索: AddHumanlikeOrders-FloatMenuMakerMap
+2025-08-09 21:05:36,675 - INFO - 使用最具体的关键词 'AddHumanlikeOrders' 未找到文件,尝试所有关键词...
+2025-08-09 21:05:38,735 - INFO - 找到 9 个候选文件,开始向量化处理...
+2025-08-09 21:05:38,735 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\FloatMenuMakerMap.txt
+2025-08-09 21:05:41,806 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-09 22:01:45,270 - INFO - 成功加载 DASHSCOPE_API_KEY。
+2025-08-09 22:01:45,281 - INFO - RimWorld 向量知识库 (FastMCP版, v2.1-v4-model) 正在启动...
+2025-08-09 22:01:45,293 - INFO - Processing request of type ListToolsRequest
+2025-08-09 22:01:45,294 - INFO - Processing request of type ListResourcesRequest
+2025-08-09 22:01:45,295 - INFO - Processing request of type ListResourceTemplatesRequest
+2025-08-09 22:36:40,663 - INFO - Processing request of type CallToolRequest
+2025-08-09 22:36:40,664 - INFO - 收到问题: Source code for the Toil Toils_Haul.StartCarryThing
+2025-08-09 22:36:40,664 - INFO - 找到的潜在关键词: ['Source', 'Toils_Haul', 'StartCarryThing', 'Toil']
+2025-08-09 22:36:40,664 - INFO - 提取到关键词: ['Source', 'Toils_Haul', 'StartCarryThing', 'Toil']
+2025-08-09 22:36:40,664 - INFO - 缓存未命中,开始实时搜索: Source-StartCarryThing-Toil-Toils_Haul
+2025-08-09 22:36:42,122 - INFO - 找到 58 个候选文件,开始向量化处理...
+2025-08-09 22:36:42,122 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse.AI\Toils_Haul.txt
+2025-08-09 22:36:42,123 - WARNING - 候选文件过多 (57),仅处理前 25 个。
+2025-08-09 22:36:49,931 - INFO - 向量搜索完成。找到了 5 个匹配项并成功提取了代码。
+2025-08-09 22:37:26,949 - INFO - Processing request of type CallToolRequest
+2025-08-09 22:37:26,950 - INFO - 收到问题: ThingDef for the Human race
+2025-08-09 22:37:26,950 - INFO - 找到的潜在关键词: ['Human', 'ThingDef']
+2025-08-09 22:37:26,950 - INFO - 提取到关键词: ['Human', 'ThingDef']
+2025-08-09 22:37:26,950 - INFO - 缓存未命中,开始实时搜索: Human-ThingDef
+2025-08-09 22:37:28,442 - INFO - 找到 2044 个候选文件,开始向量化处理...
+2025-08-09 22:37:28,444 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse\ThingDef.txt
+2025-08-09 22:37:28,449 - WARNING - 候选文件过多 (2043),仅处理前 25 个。
+2025-08-09 22:37:37,558 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-09 22:51:16,961 - INFO - Processing request of type CallToolRequest
+2025-08-09 22:51:16,961 - INFO - 收到问题: WorkGiver_HaulToMaintenancePod
+2025-08-09 22:51:16,961 - INFO - 找到的潜在关键词: ['WorkGiver_HaulToMaintenancePod']
+2025-08-09 22:51:16,961 - INFO - 提取到关键词: ['WorkGiver_HaulToMaintenancePod']
+2025-08-09 22:51:16,961 - INFO - 缓存未命中,开始实时搜索: WorkGiver_HaulToMaintenancePod
+2025-08-09 22:51:18,339 - INFO - 未找到与 '['WorkGiver_HaulToMaintenancePod']' 相关的文件。
+2025-08-09 23:24:17,104 - INFO - Processing request of type CallToolRequest
+2025-08-09 23:24:17,104 - INFO - 收到问题: WorkGiver_HaulToBiosculpterPod, CompBiosculpterPod
+2025-08-09 23:24:17,104 - INFO - 找到的潜在关键词: ['WorkGiver_HaulToBiosculpterPod', 'CompBiosculpterPod']
+2025-08-09 23:24:17,104 - INFO - 提取到关键词: ['WorkGiver_HaulToBiosculpterPod', 'CompBiosculpterPod']
+2025-08-09 23:24:17,104 - INFO - 缓存未命中,开始实时搜索: CompBiosculpterPod-WorkGiver_HaulToBiosculpterPod
+2025-08-09 23:24:18,974 - INFO - 找到 2 个候选文件,开始向量化处理...
+2025-08-09 23:24:18,974 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\WorkGiver_HaulToBiosculpterPod.txt
+2025-08-09 23:24:19,422 - INFO - 向量搜索完成。找到了 1 个匹配项并成功提取了代码。
+2025-08-09 23:30:21,294 - INFO - Processing request of type CallToolRequest
+2025-08-09 23:30:21,294 - INFO - 收到问题: JobDefOf.Rescue, JobDriver_TakeToBed
+2025-08-09 23:30:21,294 - INFO - 找到的潜在关键词: ['JobDriver_TakeToBed', 'Rescue', 'JobDefOf']
+2025-08-09 23:30:21,294 - INFO - 提取到关键词: ['JobDriver_TakeToBed', 'Rescue', 'JobDefOf']
+2025-08-09 23:30:21,294 - INFO - 缓存未命中,开始实时搜索: JobDefOf-JobDriver_TakeToBed-Rescue
+2025-08-09 23:30:22,675 - INFO - 找到 4 个候选文件,开始向量化处理...
+2025-08-09 23:30:22,675 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\JobDriver_TakeToBed.txt
+2025-08-09 23:30:24,295 - INFO - 向量搜索完成。找到了 3 个匹配项并成功提取了代码。
+2025-08-09 23:31:46,828 - INFO - Processing request of type CallToolRequest
+2025-08-09 23:31:46,828 - INFO - 收到问题: ThingDef of BiosculpterPod
+2025-08-09 23:31:46,828 - INFO - 找到的潜在关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-09 23:31:46,829 - INFO - 提取到关键词: ['BiosculpterPod', 'ThingDef']
+2025-08-09 23:31:46,845 - INFO - 缓存命中: 关键词 'BiosculpterPod-ThingDef'
+2025-08-09 23:32:57,437 - INFO - Processing request of type CallToolRequest
+2025-08-09 23:32:57,437 - INFO - 收到问题: JobDefOf.CarryToBiosculpterPod, JobDriver_CarryToBiosculpterPod
+2025-08-09 23:32:57,437 - INFO - 找到的潜在关键词: ['JobDriver_CarryToBiosculpterPod', 'JobDefOf', 'CarryToBiosculpterPod']
+2025-08-09 23:32:57,437 - INFO - 提取到关键词: ['JobDriver_CarryToBiosculpterPod', 'JobDefOf', 'CarryToBiosculpterPod']
+2025-08-09 23:32:57,437 - INFO - 缓存未命中,开始实时搜索: CarryToBiosculpterPod-JobDefOf-JobDriver_CarryToBiosculpterPod
+2025-08-09 23:32:58,909 - INFO - 找到 3 个候选文件,开始向量化处理...
+2025-08-09 23:32:58,910 - INFO - 文件名精确匹配: C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\JobDriver_CarryToBiosculpterPod.txt
+2025-08-09 23:32:59,792 - INFO - 向量搜索完成。找到了 1 个匹配项并成功提取了代码。
diff --git a/Source/MCP/mcpserver_stdio.py b/MCP/mcpserver_stdio.py
similarity index 100%
rename from Source/MCP/mcpserver_stdio.py
rename to MCP/mcpserver_stdio.py
diff --git a/MCP/pid.txt b/MCP/pid.txt
new file mode 100644
index 00000000..32b2ab6a
--- /dev/null
+++ b/MCP/pid.txt
@@ -0,0 +1 @@
+86696
\ No newline at end of file
diff --git a/MCP/vector_cache/AbilityDef.txt b/MCP/vector_cache/AbilityDef.txt
new file mode 100644
index 00000000..08b7ce71
--- /dev/null
+++ b/MCP/vector_cache/AbilityDef.txt
@@ -0,0 +1,621 @@
+根据向量相似度分析,与 'AbilityDef' 最相关的代码定义如下:
+
+---
+**文件路径 (精确匹配):** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\AbilityDef.txt`
+
+```csharp
+public class AbilityDef : Def
+{
+ public Type abilityClass = typeof(Ability);
+
+ public Type gizmoClass = typeof(Command_Ability);
+
+ public List comps = new List();
+
+ public AbilityCategoryDef category;
+
+ public int displayOrder;
+
+ public List statBases;
+
+ public VerbProperties verbProperties;
+
+ public KeyBindingDef hotKey;
+
+ public JobDef jobDef;
+
+ public ThingDef warmupMote;
+
+ public EffecterDef warmupEffecter;
+
+ public FleckDef emittedFleck;
+
+ public int emissionInterval;
+
+ public string warmupMoteSocialSymbol;
+
+ public SoundDef warmupStartSound;
+
+ public SoundDef warmupSound;
+
+ public SoundDef warmupPreEndSound;
+
+ public float warmupPreEndSoundSeconds;
+
+ public Vector3 moteDrawOffset;
+
+ public float moteOffsetAmountTowardsTarget;
+
+ public bool canUseAoeToGetTargets = true;
+
+ public bool useAverageTargetPositionForWarmupEffecter;
+
+ public bool targetRequired = true;
+
+ public bool targetWorldCell;
+
+ public bool showGizmoOnWorldView;
+
+ public bool aiCanUse;
+
+ public bool ai_SearchAOEForTargets;
+
+ public bool ai_IsOffensive = true;
+
+ public bool ai_IsIncendiary = true;
+
+ public bool groupAbility;
+
+ public int level;
+
+ public IntRange cooldownTicksRange;
+
+ public bool cooldownPerCharge;
+
+ public bool hasExternallyHandledCooldown;
+
+ public int charges = -1;
+
+ public AbilityGroupDef groupDef;
+
+ public bool overrideGroupCooldown;
+
+ public List requiredMemes;
+
+ public bool sendLetterOnCooldownComplete;
+
+ public bool sendMessageOnCooldownComplete;
+
+ public bool displayGizmoWhileUndrafted;
+
+ public bool disableGizmoWhileUndrafted = true;
+
+ public bool writeCombatLog;
+
+ public bool stunTargetWhileCasting;
+
+ public bool showPsycastEffects = true;
+
+ public bool showCastingProgressBar;
+
+ public float detectionChanceOverride = -1f;
+
+ public float uiOrder;
+
+ public bool waitForJobEnd;
+
+ public bool showWhenDrafted = true;
+
+ public bool showOnCharacterCard = true;
+
+ public bool hostile = true;
+
+ public bool casterMustBeCapableOfViolence = true;
+
+ [MustTranslate]
+ public string confirmationDialogText;
+
+ [NoTranslate]
+ public string iconPath;
+
+ public Texture2D uiIcon = BaseContent.BadTex;
+
+ private string cachedTooltip;
+
+ private Pawn cachedTooltipPawn;
+
+ private List cachedTargets;
+
+ private int requiredPsyfocusBandCached = -1;
+
+ private bool? anyCompOverridesPsyfocusCost;
+
+ private FloatRange psyfocusCostRange = new FloatRange(-1f, -1f);
+
+ private string psyfocusCostPercent;
+
+ private string psyfocusCostPercentMax;
+
+ private Texture2D warmupMoteSocialSymbolCached;
+
+ public float EntropyGain => statBases.GetStatValueFromList(StatDefOf.Ability_EntropyGain, 0f);
+
+ public float PsyfocusCost => statBases.GetStatValueFromList(StatDefOf.Ability_PsyfocusCost, 0f);
+
+ public float EffectRadius => statBases.GetStatValueFromList(StatDefOf.Ability_EffectRadius, 0f);
+
+ public bool HasAreaOfEffect => EffectRadius > float.Epsilon;
+
+ public float DetectionChance
+ {
+ get
+ {
+ if (!(detectionChanceOverride >= 0f))
+ {
+ return this.GetStatValueAbstract(StatDefOf.Ability_DetectChancePerEntropy);
+ }
+ return detectionChanceOverride;
+ }
+ }
+
+ public bool IsPsycast => typeof(Psycast).IsAssignableFrom(abilityClass);
+
+ public string PsyfocusCostPercent
+ {
+ get
+ {
+ if (psyfocusCostPercent.NullOrEmpty())
+ {
+ psyfocusCostPercent = PsyfocusCost.ToStringPercent();
+ }
+ return psyfocusCostPercent;
+ }
+ }
+
+ public string PsyfocusCostPercentMax
+ {
+ get
+ {
+ if (psyfocusCostPercentMax.NullOrEmpty())
+ {
+ psyfocusCostPercentMax = PsyfocusCostRange.max.ToStringPercent();
+ }
+ return psyfocusCostPercentMax;
+ }
+ }
+
+ public int RequiredPsyfocusBand
+ {
+ get
+ {
+ if (requiredPsyfocusBandCached == -1)
+ {
+ requiredPsyfocusBandCached = Pawn_PsychicEntropyTracker.MaxAbilityLevelPerPsyfocusBand.Count - 1;
+ for (int i = 0; i < Pawn_PsychicEntropyTracker.MaxAbilityLevelPerPsyfocusBand.Count; i++)
+ {
+ int num = Pawn_PsychicEntropyTracker.MaxAbilityLevelPerPsyfocusBand[i];
+ if (level <= num)
+ {
+ requiredPsyfocusBandCached = i;
+ break;
+ }
+ }
+ }
+ return requiredPsyfocusBandCached;
+ }
+ }
+
+ public bool AnyCompOverridesPsyfocusCost
+ {
+ get
+ {
+ if (!anyCompOverridesPsyfocusCost.HasValue)
+ {
+ anyCompOverridesPsyfocusCost = false;
+ if (comps != null)
+ {
+ foreach (AbilityCompProperties comp in comps)
+ {
+ if (comp.OverridesPsyfocusCost)
+ {
+ anyCompOverridesPsyfocusCost = true;
+ break;
+ }
+ }
+ }
+ }
+ return anyCompOverridesPsyfocusCost.Value;
+ }
+ }
+
+ public FloatRange PsyfocusCostRange
+ {
+ get
+ {
+ if (psyfocusCostRange.min < 0f)
+ {
+ if (!AnyCompOverridesPsyfocusCost)
+ {
+ psyfocusCostRange = new FloatRange(PsyfocusCost, PsyfocusCost);
+ }
+ else
+ {
+ foreach (AbilityCompProperties comp in comps)
+ {
+ if (comp.OverridesPsyfocusCost)
+ {
+ psyfocusCostRange = comp.PsyfocusCostRange;
+ break;
+ }
+ }
+ }
+ }
+ return psyfocusCostRange;
+ }
+ }
+
+ public Texture2D WarmupMoteSocialSymbol
+ {
+ get
+ {
+ if (!warmupMoteSocialSymbol.NullOrEmpty() && warmupMoteSocialSymbolCached == null)
+ {
+ warmupMoteSocialSymbolCached = ContentFinder.Get(warmupMoteSocialSymbol);
+ }
+ return warmupMoteSocialSymbolCached;
+ }
+ }
+
+ public IEnumerable StatSummary(Pawn forPawn = null)
+ {
+ string text = null;
+ foreach (AbilityCompProperties comp in comps)
+ {
+ if (comp.OverridesPsyfocusCost)
+ {
+ text = comp.PsyfocusCostExplanation;
+ break;
+ }
+ }
+ if (text == null)
+ {
+ if (PsyfocusCost > float.Epsilon)
+ {
+ yield return "AbilityPsyfocusCost".Translate() + ": " + PsyfocusCost.ToStringPercent();
+ }
+ }
+ else
+ {
+ yield return text;
+ }
+ if (EntropyGain > float.Epsilon)
+ {
+ yield return string.Concat("AbilityEntropyGain".Translate() + ": ", EntropyGain.ToString());
+ }
+ if (verbProperties.warmupTime > float.Epsilon)
+ {
+ yield return string.Concat("AbilityCastingTime".Translate() + ": ", verbProperties.warmupTime.ToString()) + "LetterSecond".Translate();
+ }
+ if (cooldownTicksRange.min == cooldownTicksRange.max && cooldownTicksRange.min > 0)
+ {
+ yield return "StatsReport_Cooldown".Translate() + ": " + cooldownTicksRange.min.ToStringTicksToPeriod(allowSeconds: true, shortForm: false, canUseDecimals: true, allowYears: false);
+ }
+ float num = EffectDuration(forPawn);
+ if (num > float.Epsilon)
+ {
+ int num2 = num.SecondsToTicks();
+ yield return "AbilityDuration".Translate() + ": " + ((num2 >= 2500) ? num2.ToStringTicksToPeriod() : (num.ToString() + "LetterSecond".Translate()));
+ }
+ if (HasAreaOfEffect)
+ {
+ yield return string.Concat("AbilityEffectRadius".Translate() + ": ", Mathf.Ceil(EffectRadius).ToString());
+ }
+ if (comps == null)
+ {
+ yield break;
+ }
+ for (int i = 0; i < comps.Count; i++)
+ {
+ foreach (string item in comps[i].ExtraStatSummary())
+ {
+ yield return item;
+ }
+ }
+ }
+
+ public float EffectDuration(Pawn forPawn = null)
+ {
+ return this.GetStatValueAbstract(StatDefOf.Ability_Duration, forPawn);
+ }
+
+ public override void PostLoad()
+ {
+ if (!string.IsNullOrEmpty(iconPath))
+ {
+ LongEventHandler.ExecuteWhenFinished(delegate
+ {
+ uiIcon = ContentFinder.Get(iconPath);
+ });
+ }
+ }
+
+ public string GetTooltip(Pawn pawn = null)
+ {
+ if (cachedTooltip == null || cachedTooltipPawn != pawn)
+ {
+ cachedTooltip = LabelCap.Colorize(ColoredText.TipSectionTitleColor) + ((level > 0) ? string.Concat("\n" + "Level".Translate().CapitalizeFirst() + " ", level.ToString()) : "") + "\n\n" + description;
+ cachedTooltipPawn = pawn;
+ string text = StatSummary(pawn).ToLineList();
+ if (!text.NullOrEmpty())
+ {
+ cachedTooltip = cachedTooltip + "\n\n" + text;
+ }
+ }
+ if (pawn != null && ModsConfig.RoyaltyActive && IsPsycast && level > 0)
+ {
+ Faction first = Faction.GetMinTitleForImplantAllFactions(HediffDefOf.PsychicAmplifier).First;
+ if (first != null)
+ {
+ RoyalTitleDef minTitleForImplant = first.GetMinTitleForImplant(HediffDefOf.PsychicAmplifier, level);
+ RoyalTitleDef currentTitle = pawn.royalty.GetCurrentTitle(first);
+ if (minTitleForImplant != null && (currentTitle == null || currentTitle.seniority < minTitleForImplant.seniority) && DetectionChance > 0f)
+ {
+ return cachedTooltip + "\n\n" + ((string)"PsycastIsIllegal".Translate(pawn.Named("PAWN"), minTitleForImplant.GetLabelCapFor(pawn).Named("TITLE"))).Colorize(ColoredText.WarningColor);
+ }
+ }
+ }
+ return cachedTooltip;
+ }
+
+ public override IEnumerable SpecialDisplayStats(StatRequest req)
+ {
+ if (cachedTargets == null)
+ {
+ cachedTargets = new List();
+ if (verbProperties.targetParams.canTargetPawns && verbProperties.targetParams.canTargetSelf)
+ {
+ cachedTargets.Add("TargetSelf".Translate());
+ }
+ if (verbProperties.targetParams.canTargetLocations)
+ {
+ cachedTargets.Add("TargetGround".Translate());
+ }
+ if (verbProperties.targetParams.canTargetPawns && verbProperties.targetParams.canTargetHumans)
+ {
+ cachedTargets.Add("TargetHuman".Translate());
+ }
+ if (verbProperties.targetParams.canTargetPawns && verbProperties.targetParams.canTargetAnimals)
+ {
+ cachedTargets.Add("TargetAnimal".Translate());
+ }
+ }
+ int num = comps.OfType().Sum((CompProperties_AbilityEffect e) => e.goodwillImpact);
+ if (num != 0)
+ {
+ yield return new StatDrawEntry(StatCategoryDefOf.Ability, StatDefOf.Ability_GoodwillImpact, num, req);
+ }
+ if (IsPsycast && level != 0)
+ {
+ yield return new StatDrawEntry(StatCategoryDefOf.Ability, StatDefOf.Ability_RequiredPsylink, level, req);
+ }
+ yield return new StatDrawEntry(StatCategoryDefOf.Ability, StatDefOf.Ability_CastingTime, verbProperties.warmupTime, req);
+ if (verbProperties.range > 0f)
+ {
+ yield return new StatDrawEntry(StatCategoryDefOf.Ability, StatDefOf.Ability_Range, verbProperties.range, req);
+ }
+ yield return new StatDrawEntry(StatCategoryDefOf.Ability, "Target".Translate(), cachedTargets.ToCommaList().CapitalizeFirst(), "AbilityTargetDesc".Translate(), 1001);
+ yield return new StatDrawEntry(StatCategoryDefOf.Ability, "AbilityRequiresLOS".Translate(), verbProperties.requireLineOfSight ? "Yes".Translate() : "No".Translate(), "", 1000);
+ }
+
+ public override IEnumerable ConfigErrors()
+ {
+ foreach (string item in base.ConfigErrors())
+ {
+ yield return item;
+ }
+ if (abilityClass == null)
+ {
+ yield return "abilityClass is null";
+ }
+ if (verbProperties == null)
+ {
+ yield return "verbProperties are null";
+ }
+ if (label.NullOrEmpty())
+ {
+ yield return "no label";
+ }
+ if (statBases != null)
+ {
+ foreach (StatModifier statBase in statBases)
+ {
+ if (statBases.Count((StatModifier st) => st.stat == statBase.stat) > 1)
+ {
+ yield return "defines the stat base " + statBase.stat?.ToString() + " more than once.";
+ }
+ }
+ }
+ for (int i = 0; i < comps.Count; i++)
+ {
+ foreach (string item2 in comps[i].ConfigErrors(this))
+ {
+ yield return item2;
+ }
+ }
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\Royalty\Defs\AbilityDefs\Abilities.xml`
+**相似度:** 0.5815
+
+```xml
+
+ Skip
+
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\AbilityStatModifiers.txt`
+**相似度:** 0.5807
+
+```csharp
+public class AbilityStatModifiers
+{
+ public AbilityDef ability;
+
+ public List modifiers;
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\AbilityDefOf.txt`
+**相似度:** 0.5779
+
+```csharp
+public static class AbilityDefOf
+{
+ [MayRequireRoyalty]
+ public static AbilityDef Speech;
+
+ [MayRequireBiotech]
+ public static AbilityDef ReimplantXenogerm;
+
+ [MayRequireBiotech]
+ public static AbilityDef ResurrectionMech;
+
+ [MayRequireAnomaly]
+ public static AbilityDef EntitySkip;
+
+ [MayRequireAnomaly]
+ public static AbilityDef UnnaturalCorpseSkip;
+
+ [MayRequireAnomaly]
+ public static AbilityDef ConsumeLeap_Devourer;
+
+ [MayRequireOdyssey]
+ public static AbilityDef SludgeSpew;
+
+ [MayRequireOdyssey]
+ public static AbilityDef EggSpew;
+
+ static AbilityDefOf()
+ {
+ DefOfHelper.EnsureInitializedInCtor(typeof(AbilityDefOf));
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompAbilityEffect_GiveMentalState.txt`
+**相似度:** 0.5541
+
+```csharp
+public class CompAbilityEffect_GiveMentalState : CompAbilityEffect
+{
+ public new CompProperties_AbilityGiveMentalState Props => (CompProperties_AbilityGiveMentalState)props;
+
+ public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
+ {
+ base.Apply(target, dest);
+ Pawn pawn = (Props.applyToSelf ? parent.pawn : (target.Thing as Pawn));
+ if (pawn != null && !pawn.InMentalState)
+ {
+ TryGiveMentalState(pawn.RaceProps.IsMechanoid ? (Props.stateDefForMechs ?? Props.stateDef) : Props.stateDef, pawn, parent.def, Props.durationMultiplier, parent.pawn, Props.forced);
+ RestUtility.WakeUp(pawn);
+ if (Props.casterEffect != null)
+ {
+ Effecter effecter = Props.casterEffect.SpawnAttached(parent.pawn, parent.pawn.MapHeld);
+ effecter.Trigger(parent.pawn, null);
+ effecter.Cleanup();
+ }
+ if (Props.targetEffect != null)
+ {
+ Effecter effecter2 = Props.targetEffect.SpawnAttached(parent.pawn, parent.pawn.MapHeld);
+ effecter2.Trigger(pawn, null);
+ effecter2.Cleanup();
+ }
+ }
+ }
+
+ public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
+ {
+ if (!base.Valid(target, throwMessages))
+ {
+ return false;
+ }
+ Pawn pawn = target.Pawn;
+ if (pawn != null)
+ {
+ if (!AbilityUtility.ValidateNoMentalState(pawn, throwMessages, parent))
+ {
+ return false;
+ }
+ if (Props.excludeNPCFactions && pawn.Faction != null && !pawn.Faction.IsPlayer)
+ {
+ if (throwMessages)
+ {
+ Messages.Message("CannotUseAbility".Translate(parent.def.label) + ": " + "TargetBelongsToNPCFaction".Translate(), pawn, MessageTypeDefOf.RejectInput, historical: false);
+ }
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static void TryGiveMentalState(MentalStateDef def, Pawn p, AbilityDef ability, StatDef multiplierStat, Pawn caster, bool forced = false)
+ {
+ if (p.mindState.mentalStateHandler.TryStartMentalState(def, null, forced, forceWake: true, causedByMood: false, caster, transitionSilently: false, causedByDamage: false, ability.IsPsycast))
+ {
+ float num = ability.GetStatValueAbstract(StatDefOf.Ability_Duration, caster);
+ if (multiplierStat != null)
+ {
+ num *= p.GetStatValue(multiplierStat);
+ }
+ if (num > 0f)
+ {
+ p.mindState.mentalStateHandler.CurState.forceRecoverAfterTicks = num.SecondsToTicks();
+ }
+ p.mindState.mentalStateHandler.CurState.sourceFaction = caster.Faction;
+ }
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompProperties_ResurrectMech.txt`
+**相似度:** 0.5473
+
+```csharp
+public class CompProperties_ResurrectMech : CompProperties_AbilityEffect
+{
+ public int maxCorpseAgeTicks = int.MaxValue;
+
+ public List costs = new List();
+
+ public EffecterDef appliedEffecterDef;
+
+ public EffecterDef centerEffecterDef;
+
+ public CompProperties_ResurrectMech()
+ {
+ compClass = typeof(CompAbilityEffect_ResurrectMech);
+ }
+
+ public override IEnumerable ConfigErrors(AbilityDef parentDef)
+ {
+ foreach (string item in base.ConfigErrors(parentDef))
+ {
+ yield return item;
+ }
+ if (costs.NullOrEmpty())
+ {
+ yield return "costs list is null";
+ yield break;
+ }
+ foreach (MechChargeCosts cost in costs)
+ {
+ if (cost.weightClass == null)
+ {
+ yield return $"costs list contains null weight class with cost {cost.cost}";
+ }
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/MCP/vector_cache/AddHumanlikeOrders-FloatMenuMakerMap.txt b/MCP/vector_cache/AddHumanlikeOrders-FloatMenuMakerMap.txt
new file mode 100644
index 00000000..96addb59
--- /dev/null
+++ b/MCP/vector_cache/AddHumanlikeOrders-FloatMenuMakerMap.txt
@@ -0,0 +1,519 @@
+根据向量相似度分析,与 'AddHumanlikeOrders, FloatMenuMakerMap' 最相关的代码定义如下:
+
+---
+**文件路径 (精确匹配):** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\FloatMenuMakerMap.txt`
+
+```csharp
+public static class FloatMenuMakerMap
+{
+ private static List providers;
+
+ public static FloatMenuOptionProvider currentProvider;
+
+ public static Pawn makingFor;
+
+ public static void Init()
+ {
+ providers = new List();
+ foreach (Type item in typeof(FloatMenuOptionProvider).AllSubclassesNonAbstract())
+ {
+ providers.Add((FloatMenuOptionProvider)Activator.CreateInstance(item));
+ }
+ }
+
+ public static List GetOptions(List selectedPawns, Vector3 clickPos, out FloatMenuContext context)
+ {
+ List list = new List();
+ context = null;
+ if (!clickPos.InBounds(Find.CurrentMap))
+ {
+ return list;
+ }
+ context = new FloatMenuContext(selectedPawns, clickPos, Find.CurrentMap);
+ if (!context.allSelectedPawns.Any())
+ {
+ return list;
+ }
+ if (!context.ClickedCell.IsValid || !context.ClickedCell.InBounds(Find.CurrentMap))
+ {
+ return list;
+ }
+ if (!context.IsMultiselect)
+ {
+ AcceptanceReport acceptanceReport = ShouldGenerateFloatMenuForPawn(context.FirstSelectedPawn);
+ if (!acceptanceReport.Accepted)
+ {
+ if (!acceptanceReport.Reason.NullOrEmpty())
+ {
+ Messages.Message(acceptanceReport.Reason, context.FirstSelectedPawn, MessageTypeDefOf.RejectInput, historical: false);
+ }
+ return list;
+ }
+ }
+ else
+ {
+ context.allSelectedPawns.RemoveAll((Pawn selectedPawn) => !ShouldGenerateFloatMenuForPawn(selectedPawn));
+ if (!context.allSelectedPawns.Any())
+ {
+ return list;
+ }
+ }
+ if (!context.IsMultiselect)
+ {
+ makingFor = context.FirstSelectedPawn;
+ }
+ GetProviderOptions(context, list);
+ makingFor = null;
+ return list;
+ }
+
+ private static void GetProviderOptions(FloatMenuContext context, List options)
+ {
+ foreach (FloatMenuOptionProvider provider in providers)
+ {
+ try
+ {
+ currentProvider = provider;
+ if (!context.ValidSelectedPawns.Any() || !provider.Applies(context))
+ {
+ continue;
+ }
+ options.AddRange(provider.GetOptions(context));
+ foreach (Thing clickedThing in context.ClickedThings)
+ {
+ if (!provider.TargetThingValid(clickedThing, context))
+ {
+ continue;
+ }
+ Thing thing = clickedThing;
+ if (thing.TryGetComp(out CompSelectProxy comp) && comp.thingToSelect != null)
+ {
+ thing = comp.thingToSelect;
+ }
+ foreach (FloatMenuOption item in provider.GetOptionsFor(thing, context))
+ {
+ FloatMenuOption floatMenuOption = item;
+ if (floatMenuOption.iconThing == null)
+ {
+ floatMenuOption.iconThing = thing;
+ }
+ item.targetsDespawned = !thing.Spawned;
+ options.Add(item);
+ }
+ }
+ foreach (Pawn clickedPawn in context.ClickedPawns)
+ {
+ if (!provider.TargetPawnValid(clickedPawn, context))
+ {
+ continue;
+ }
+ foreach (FloatMenuOption item2 in provider.GetOptionsFor(clickedPawn, context))
+ {
+ FloatMenuOption floatMenuOption = item2;
+ if (floatMenuOption.iconThing == null)
+ {
+ floatMenuOption.iconThing = clickedPawn;
+ }
+ item2.targetsDespawned = !clickedPawn.Spawned;
+ options.Add(item2);
+ }
+ }
+ }
+ catch (Exception arg)
+ {
+ Log.Error($"Error in FloatMenuWorker {provider.GetType().Name}: {arg}");
+ }
+ }
+ currentProvider = null;
+ }
+
+ public static AcceptanceReport ShouldGenerateFloatMenuForPawn(Pawn pawn)
+ {
+ if (pawn.Map != Find.CurrentMap)
+ {
+ return false;
+ }
+ if (pawn.Downed)
+ {
+ return "IsIncapped".Translate(pawn.LabelCap, pawn);
+ }
+ if (ModsConfig.BiotechActive && pawn.Deathresting)
+ {
+ return "IsDeathresting".Translate(pawn.Named("PAWN"));
+ }
+ Lord lord = pawn.GetLord();
+ if (lord != null)
+ {
+ AcceptanceReport result = lord.AllowsFloatMenu(pawn);
+ if (!result.Accepted)
+ {
+ return result;
+ }
+ }
+ return true;
+ }
+
+ public static FloatMenuOption GetAutoTakeOption(List options)
+ {
+ bool flag = true;
+ FloatMenuOption floatMenuOption = null;
+ foreach (FloatMenuOption option in options)
+ {
+ if (option.Disabled || !option.autoTakeable)
+ {
+ flag = false;
+ break;
+ }
+ if (floatMenuOption == null || option.autoTakeablePriority > floatMenuOption.autoTakeablePriority)
+ {
+ floatMenuOption = option;
+ }
+ }
+ if (!flag || floatMenuOption == null)
+ {
+ return null;
+ }
+ return floatMenuOption;
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\FloatMenuContext.txt`
+**相似度:** 0.5788
+
+```csharp
+public class FloatMenuContext
+{
+ public List allSelectedPawns;
+
+ public Vector3 clickPosition;
+
+ public Map map;
+
+ private IntVec3 cachedClickedCell;
+
+ private List cachedClickedThings;
+
+ private List cachedClickedPawns;
+
+ private Room cachedClickedRoom;
+
+ private Zone cachedClickedZone;
+
+ public IntVec3 ClickedCell => cachedClickedCell;
+
+ public Room ClickedRoom => cachedClickedRoom;
+
+ public Zone ClickedZone => cachedClickedZone;
+
+ public List ClickedThings => cachedClickedThings;
+
+ public List ClickedPawns => cachedClickedPawns;
+
+ public bool IsMultiselect => allSelectedPawns.Count > 1;
+
+ public Pawn FirstSelectedPawn
+ {
+ get
+ {
+ foreach (Pawn allSelectedPawn in allSelectedPawns)
+ {
+ if (FloatMenuMakerMap.currentProvider == null || FloatMenuMakerMap.currentProvider.SelectedPawnValid(allSelectedPawn, this))
+ {
+ return allSelectedPawn;
+ }
+ }
+ return null;
+ }
+ }
+
+ public IEnumerable ValidSelectedPawns
+ {
+ get
+ {
+ foreach (Pawn allSelectedPawn in allSelectedPawns)
+ {
+ if (FloatMenuMakerMap.currentProvider == null || FloatMenuMakerMap.currentProvider.SelectedPawnValid(allSelectedPawn, this))
+ {
+ yield return allSelectedPawn;
+ }
+ }
+ }
+ }
+
+ public FloatMenuContext(List selectedPawns, Vector3 clickPosition, Map map)
+ {
+ allSelectedPawns = selectedPawns;
+ this.clickPosition = clickPosition;
+ this.map = map;
+ cachedClickedCell = IntVec3.FromVector3(clickPosition);
+ cachedClickedRoom = cachedClickedCell.GetRoom(map);
+ cachedClickedZone = cachedClickedCell.GetZone(map);
+ cachedClickedThings = GenUI.ThingsUnderMouse(clickPosition, 0.8f, TargetingParameters.ForThing());
+ cachedClickedPawns = GenUI.ThingsUnderMouse(clickPosition, 0.8f, TargetingParameters.ForPawns()).OfType().ToList();
+ selectedPawns.RemoveAll((Pawn pawn) => !pawn.CanTakeOrder);
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse\FloatMenuMap.txt`
+**相似度:** 0.5739
+
+```csharp
+public class FloatMenuMap : FloatMenu
+{
+ private Vector3 clickPos;
+
+ private static Dictionary> cachedChoices = new Dictionary>();
+
+ private List lastOptionsForRevalidation;
+
+ private int nextOptionToRevalidate;
+
+ public const int RevalidateEveryFrame = 4;
+
+ public FloatMenuMap(List options, string title, Vector3 clickPos)
+ : base(options, title)
+ {
+ this.clickPos = clickPos;
+ }
+
+ public override void DoWindowContents(Rect inRect)
+ {
+ if (!Find.Selector.AnyPawnSelected)
+ {
+ Find.WindowStack.TryRemove(this);
+ return;
+ }
+ bool flag = options.Count >= 3;
+ if (Time.frameCount % 4 == 0 || lastOptionsForRevalidation == null)
+ {
+ lastOptionsForRevalidation = FloatMenuMakerMap.GetOptions(Find.Selector.SelectedPawns, clickPos, out var _);
+ cachedChoices.Clear();
+ cachedChoices.Add(clickPos, lastOptionsForRevalidation);
+ if (!flag)
+ {
+ for (int i = 0; i < options.Count; i++)
+ {
+ RevalidateOption(options[i]);
+ }
+ }
+ }
+ else if (flag)
+ {
+ if (nextOptionToRevalidate >= options.Count)
+ {
+ nextOptionToRevalidate = 0;
+ }
+ int num = Mathf.CeilToInt((float)options.Count / 3f);
+ int num2 = nextOptionToRevalidate;
+ int num3 = 0;
+ while (num2 < options.Count && num3 < num)
+ {
+ RevalidateOption(options[num2]);
+ nextOptionToRevalidate++;
+ num2++;
+ num3++;
+ }
+ }
+ base.DoWindowContents(inRect);
+ void RevalidateOption(FloatMenuOption option)
+ {
+ if (!option.Disabled && !StillValid(option, lastOptionsForRevalidation))
+ {
+ option.Disabled = true;
+ }
+ }
+ }
+
+ private static bool StillValid(FloatMenuOption opt, List curOpts)
+ {
+ if (opt.revalidateClickTarget == null)
+ {
+ for (int i = 0; i < curOpts.Count; i++)
+ {
+ if (OptionsMatch(opt, curOpts[i]))
+ {
+ return true;
+ }
+ }
+ }
+ else
+ {
+ if (!opt.targetsDespawned && !opt.revalidateClickTarget.Spawned)
+ {
+ return false;
+ }
+ Vector3 key = opt.revalidateClickTarget.PositionHeld.ToVector3Shifted();
+ if (!cachedChoices.TryGetValue(key, out var value))
+ {
+ FloatMenuContext context;
+ List list = FloatMenuMakerMap.GetOptions(Find.Selector.SelectedPawns, key, out context);
+ cachedChoices.Add(key, list);
+ value = list;
+ }
+ for (int j = 0; j < value.Count; j++)
+ {
+ if (OptionsMatch(opt, value[j]))
+ {
+ return !value[j].Disabled;
+ }
+ }
+ }
+ return false;
+ }
+
+ public override void PreOptionChosen(FloatMenuOption opt)
+ {
+ base.PreOptionChosen(opt);
+ if (!opt.Disabled && !StillValid(opt, FloatMenuMakerMap.GetOptions(Find.Selector.SelectedPawns, clickPos, out var _)))
+ {
+ opt.Disabled = true;
+ }
+ }
+
+ private static bool OptionsMatch(FloatMenuOption a, FloatMenuOption b)
+ {
+ if (a.Label == b.Label)
+ {
+ return true;
+ }
+ return false;
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\FloatMenuOptionProvider.txt`
+**相似度:** 0.5483
+
+```csharp
+public abstract class FloatMenuOptionProvider
+{
+ protected abstract bool Drafted { get; }
+
+ protected abstract bool Undrafted { get; }
+
+ protected abstract bool Multiselect { get; }
+
+ protected virtual bool RequiresManipulation => false;
+
+ protected virtual bool MechanoidCanDo => false;
+
+ protected virtual bool CanSelfTarget => false;
+
+ public virtual bool CanTargetDespawned => false;
+
+ protected virtual bool IgnoreFogged => true;
+
+ public virtual bool SelectedPawnValid(Pawn pawn, FloatMenuContext context)
+ {
+ if (pawn.IsMutant && pawn.mutant.Def.whitelistedFloatMenuProviders != null && !pawn.mutant.Def.whitelistedFloatMenuProviders.Contains(FloatMenuMakerMap.currentProvider.GetType()))
+ {
+ return false;
+ }
+ if (!Drafted && pawn.Drafted)
+ {
+ return false;
+ }
+ if (!Undrafted && !pawn.Drafted)
+ {
+ return false;
+ }
+ if (!MechanoidCanDo && pawn.RaceProps.IsMechanoid)
+ {
+ return false;
+ }
+ if (RequiresManipulation && !pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public virtual bool TargetThingValid(Thing thing, FloatMenuContext context)
+ {
+ if (!CanTargetDespawned && !thing.Spawned)
+ {
+ return false;
+ }
+ if (thing is Pawn pawn && !TargetPawnValid(pawn, context))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public virtual bool TargetPawnValid(Pawn pawn, FloatMenuContext context)
+ {
+ if (!CanSelfTarget && pawn == context.FirstSelectedPawn)
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public virtual bool Applies(FloatMenuContext context)
+ {
+ if (!Multiselect && context.IsMultiselect)
+ {
+ return false;
+ }
+ if (IgnoreFogged && context.ClickedCell.Fogged(context.map))
+ {
+ return false;
+ }
+ if (!AppliesInt(context))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ protected virtual bool AppliesInt(FloatMenuContext context)
+ {
+ return true;
+ }
+
+ public virtual IEnumerable GetOptions(FloatMenuContext context)
+ {
+ FloatMenuOption singleOption = GetSingleOption(context);
+ if (singleOption != null)
+ {
+ yield return singleOption;
+ }
+ }
+
+ public virtual IEnumerable GetOptionsFor(Thing clickedThing, FloatMenuContext context)
+ {
+ FloatMenuOption singleOptionFor = GetSingleOptionFor(clickedThing, context);
+ if (singleOptionFor != null)
+ {
+ yield return singleOptionFor;
+ }
+ }
+
+ public virtual IEnumerable GetOptionsFor(Pawn clickedPawn, FloatMenuContext context)
+ {
+ FloatMenuOption singleOptionFor = GetSingleOptionFor(clickedPawn, context);
+ if (singleOptionFor != null)
+ {
+ yield return singleOptionFor;
+ }
+ }
+
+ protected virtual FloatMenuOption GetSingleOption(FloatMenuContext context)
+ {
+ return null;
+ }
+
+ protected virtual FloatMenuOption GetSingleOptionFor(Thing clickedThing, FloatMenuContext context)
+ {
+ return null;
+ }
+
+ protected virtual FloatMenuOption GetSingleOptionFor(Pawn clickedPawn, FloatMenuContext context)
+ {
+ return null;
+ }
+}
+```
\ No newline at end of file
diff --git a/MCP/vector_cache/BiosculpterPod-ThingDef.txt b/MCP/vector_cache/BiosculpterPod-ThingDef.txt
new file mode 100644
index 00000000..a55a7d7b
--- /dev/null
+++ b/MCP/vector_cache/BiosculpterPod-ThingDef.txt
@@ -0,0 +1,1502 @@
+根据向量相似度分析,与 'BiosculpterPod, ThingDef' 最相关的代码定义如下:
+
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompProperties_BiosculpterPod_BaseCycle.txt`
+**相似度:** 0.7659
+
+```csharp
+public abstract class CompProperties_BiosculpterPod_BaseCycle : CompProperties
+{
+ [NoTranslate]
+ public string key;
+
+ [MustTranslate]
+ public string label;
+
+ [MustTranslate]
+ public string description;
+
+ [NoTranslate]
+ public string iconPath;
+
+ public float durationDays;
+
+ public Color operatingColor = new Color(0.5f, 0.7f, 0.5f);
+
+ public ThoughtDef gainThoughtOnCompletion;
+
+ public List requiredResearch;
+
+ public List extraRequiredIngredients;
+
+ private Texture2D icon;
+
+ public Texture2D Icon
+ {
+ get
+ {
+ if (icon == null)
+ {
+ icon = ContentFinder.Get(iconPath);
+ }
+ return icon;
+ }
+ }
+
+ public string LabelCap => label.CapitalizeFirst();
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompBiosculpterPod.txt`
+**相似度:** 0.7294
+
+```csharp
+public class CompBiosculpterPod : ThingComp, ISuspendableThingHolder, IThingHolder, IThingHolderWithDrawnPawn, IStoreSettingsParent, INotifyHauledTo, ISearchableContents
+{
+ private const int NoPowerEjectCumulativeTicks = 60000;
+
+ private const int BiotunedDuration = 4800000;
+
+ private const float NutritionRequired = 5f;
+
+ private const float CacheForSecs = 2f;
+
+ private static readonly Texture2D InterruptCycleIcon = ContentFinder.Get("UI/Designators/Cancel");
+
+ private static readonly Material BackgroundMat = SolidColorMaterials.NewSolidColorMaterial(new Color(0.082f, 0.078f, 0.063f), ShaderDatabase.SolidColorBehind);
+
+ private const float BackgroundRect_YOff = 0.07317074f;
+
+ private const float Pawn_YOff = 0.03658537f;
+
+ private string currentCycleKey;
+
+ private float currentCycleTicksRemaining;
+
+ private int currentCyclePowerCutTicks;
+
+ private ThingOwner innerContainer;
+
+ private Pawn biotunedTo;
+
+ private int biotunedCountdownTicks;
+
+ private StorageSettings allowedNutritionSettings;
+
+ private float liquifiedNutrition;
+
+ public bool autoLoadNutrition = true;
+
+ public bool devFillPodLatch;
+
+ private bool autoAgeReversal;
+
+ private int tickEntered = -99999;
+
+ public Job queuedEnterJob;
+
+ public Pawn queuedPawn;
+
+ private List chosenExtraItems = new List();
+
+ private List cycleEligiblePawnOptions = new List();
+
+ private Pawn pawnEnteringBiosculpter;
+
+ private Dictionary> cachedExtraIngredients = new Dictionary>();
+
+ private Dictionary cachedAnyPawnEligible = new Dictionary();
+
+ private static Dictionary> cachedBiotunedPods = new Dictionary>();
+
+ private Pawn cacheReachIngredientsPawn;
+
+ private CompBiosculpterPod_Cycle cacheReachIngredientsCycle;
+
+ private float cacheReachIngredientsTime = float.MinValue;
+
+ private bool cacheReachIngredientsResult;
+
+ private Effecter progressBarEffecter;
+
+ private Effecter operatingEffecter;
+
+ private Effecter readyEffecter;
+
+ private Texture2D cachedAutoAgeReverseIcon;
+
+ private List cachedAvailableCycles;
+
+ private Dictionary cycleLookup;
+
+ private static string cachedAgeReversalCycleKey = null;
+
+ private List tmpIngredientsStrings = new List();
+
+ private static readonly List tmpItems = new List();
+
+ private CompPowerTrader powerTraderComp;
+
+ private CompPower powerComp;
+
+ private static List cachedPodDefs;
+
+ public CompProperties_BiosculpterPod Props => props as CompProperties_BiosculpterPod;
+
+ public ThingOwner SearchableContents => innerContainer;
+
+ public bool IsContentsSuspended => true;
+
+ public float RequiredNutritionRemaining => Mathf.Max(5f - liquifiedNutrition, 0f);
+
+ public bool NutritionLoaded => RequiredNutritionRemaining <= 0f;
+
+ public bool AutoAgeReversal => autoAgeReversal;
+
+ private Texture2D AutoAgeReversalIcon
+ {
+ get
+ {
+ if (cachedAutoAgeReverseIcon == null)
+ {
+ cachedAutoAgeReverseIcon = ContentFinder.Get("UI/Gizmos/BiosculpterAutoAgeReversal");
+ }
+ return cachedAutoAgeReverseIcon;
+ }
+ }
+
+ public BiosculpterPodState State
+ {
+ get
+ {
+ if (Occupant != null)
+ {
+ return BiosculpterPodState.Occupied;
+ }
+ if (NutritionLoaded)
+ {
+ return BiosculpterPodState.SelectingCycle;
+ }
+ return BiosculpterPodState.LoadingNutrition;
+ }
+ }
+
+ public Pawn Occupant
+ {
+ get
+ {
+ if (pawnEnteringBiosculpter != null)
+ {
+ return pawnEnteringBiosculpter;
+ }
+ if (currentCycleKey == null)
+ {
+ return null;
+ }
+ if (innerContainer.Count != 1)
+ {
+ return null;
+ }
+ return innerContainer[0] as Pawn;
+ }
+ }
+
+ public CompBiosculpterPod_Cycle CurrentCycle
+ {
+ get
+ {
+ if (currentCycleKey == null)
+ {
+ return null;
+ }
+ foreach (CompBiosculpterPod_Cycle availableCycle in AvailableCycles)
+ {
+ if (availableCycle.Props.key == currentCycleKey)
+ {
+ return availableCycle;
+ }
+ }
+ return null;
+ }
+ }
+
+ public List AvailableCycles
+ {
+ get
+ {
+ if (cachedAvailableCycles == null)
+ {
+ SetupCycleCaches();
+ }
+ return cachedAvailableCycles;
+ }
+ }
+
+ public string AgeReversalCycleKey
+ {
+ get
+ {
+ if (cachedAgeReversalCycleKey == null)
+ {
+ SetupCycleCaches();
+ }
+ return cachedAgeReversalCycleKey;
+ }
+ }
+
+ private float CycleSpeedFactorNoPawn => CleanlinessSpeedFactor * BiotunedSpeedFactor;
+
+ public float CycleSpeedFactor
+ {
+ get
+ {
+ if (Occupant == null)
+ {
+ return Mathf.Max(0.1f, CycleSpeedFactorNoPawn);
+ }
+ return GetCycleSpeedFactorForPawn(Occupant);
+ }
+ }
+
+ private float CleanlinessSpeedFactor => parent.GetStatValue(StatDefOf.BiosculpterPodSpeedFactor);
+
+ private float BiotunedSpeedFactor
+ {
+ get
+ {
+ if (biotunedTo == null)
+ {
+ return 1f;
+ }
+ return Props.biotunedCycleSpeedFactor;
+ }
+ }
+
+ public bool PowerOn => parent.TryGetComp().PowerOn;
+
+ public float HeldPawnDrawPos_Y => parent.DrawPos.y - 0.03658537f;
+
+ public float HeldPawnBodyAngle => parent.Rotation.Opposite.AsAngle;
+
+ public PawnPosture HeldPawnPosture => PawnPosture.LayingOnGroundFaceUp;
+
+ public bool StorageTabVisible => true;
+
+ public CompBiosculpterPod()
+ {
+ innerContainer = new ThingOwner(this);
+ }
+
+ public override void Initialize(CompProperties props)
+ {
+ base.Initialize(props);
+ allowedNutritionSettings = new StorageSettings(this);
+ if (parent.def.building.defaultStorageSettings != null)
+ {
+ allowedNutritionSettings.CopyFrom(parent.def.building.defaultStorageSettings);
+ }
+ }
+
+ public override void PostSpawnSetup(bool respawningAfterLoad)
+ {
+ if (ModLister.CheckIdeology("Biosculpter pod comp"))
+ {
+ base.PostSpawnSetup(respawningAfterLoad);
+ }
+ }
+
+ public override void PostExposeData()
+ {
+ base.PostExposeData();
+ Scribe_Deep.Look(ref innerContainer, "innerContainer", this);
+ Scribe_Values.Look(ref currentCycleKey, "currentCycleKey");
+ Scribe_Values.Look(ref currentCycleTicksRemaining, "currentCycleTicksRemaining", 0f);
+ Scribe_Values.Look(ref currentCyclePowerCutTicks, "currentCyclePowerCutTicks", 0);
+ Scribe_References.Look(ref biotunedTo, "biotunedTo");
+ Scribe_Values.Look(ref biotunedCountdownTicks, "biotunedCountdownTicks", 0);
+ Scribe_Deep.Look(ref allowedNutritionSettings, "allowedNutritionSettings");
+ Scribe_Values.Look(ref liquifiedNutrition, "liquifiedNutrition", 0f);
+ Scribe_Values.Look(ref autoLoadNutrition, "autoLoadNutrition", defaultValue: false);
+ Scribe_Values.Look(ref devFillPodLatch, "devFillPodLatch", defaultValue: false);
+ Scribe_Values.Look(ref autoAgeReversal, "autoAgeReversal", defaultValue: false);
+ Scribe_Values.Look(ref tickEntered, "tickEntered", 0);
+ Scribe_References.Look(ref queuedEnterJob, "queuedEnterJob");
+ Scribe_References.Look(ref queuedPawn, "queuedPawn");
+ if (allowedNutritionSettings == null)
+ {
+ allowedNutritionSettings = new StorageSettings(this);
+ if (parent.def.building.defaultStorageSettings != null)
+ {
+ allowedNutritionSettings.CopyFrom(parent.def.building.defaultStorageSettings);
+ }
+ }
+ if (Scribe.mode == LoadSaveMode.PostLoadInit)
+ {
+ if (currentCycleKey == "healing")
+ {
+ currentCycleKey = "medic";
+ }
+ if (biotunedTo != null)
+ {
+ SetBiotuned(biotunedTo);
+ }
+ LiquifyNutrition();
+ }
+ }
+
+ public CompBiosculpterPod_Cycle GetCycle(string key)
+ {
+ if (cycleLookup == null)
+ {
+ SetupCycleCaches();
+ }
+ return cycleLookup[key];
+ }
+
+ public float GetCycleSpeedFactorForPawn(Pawn p)
+ {
+ return Mathf.Max(0.1f, CycleSpeedFactorNoPawn * p.GetStatValue(StatDefOf.BiosculpterOccupantSpeed));
+ }
+
+ private void SetupCycleCaches()
+ {
+ cachedAvailableCycles = new List();
+ cachedAvailableCycles.AddRange(parent.AllComps.OfType());
+ cycleLookup = new Dictionary();
+ foreach (CompBiosculpterPod_Cycle cachedAvailableCycle in cachedAvailableCycles)
+ {
+ if (cachedAvailableCycle is CompBiosculpterPod_AgeReversalCycle compBiosculpterPod_AgeReversalCycle)
+ {
+ cachedAgeReversalCycleKey = compBiosculpterPod_AgeReversalCycle.Props.key;
+ }
+ cycleLookup[cachedAvailableCycle.Props.key] = cachedAvailableCycle;
+ }
+ }
+
+ public void SetBiotuned(Pawn newBiotunedTo)
+ {
+ if (newBiotunedTo != biotunedTo)
+ {
+ autoAgeReversal = false;
+ }
+ if (biotunedTo != null && cachedBiotunedPods.ContainsKey(biotunedTo))
+ {
+ cachedBiotunedPods[biotunedTo].Remove(this);
+ }
+ if (newBiotunedTo != null && !cachedBiotunedPods.ContainsKey(newBiotunedTo))
+ {
+ cachedBiotunedPods[newBiotunedTo] = new List();
+ }
+ if (newBiotunedTo != null && !cachedBiotunedPods[newBiotunedTo].Contains(this))
+ {
+ cachedBiotunedPods[newBiotunedTo].Add(this);
+ }
+ if (newBiotunedTo != null && newBiotunedTo != biotunedTo)
+ {
+ biotunedCountdownTicks = 4800000;
+ }
+ biotunedTo = newBiotunedTo;
+ }
+
+ public override void PostDestroy(DestroyMode mode, Map previousMap)
+ {
+ SetBiotuned(null);
+ if (mode == DestroyMode.Deconstruct || mode == DestroyMode.KillFinalize)
+ {
+ EjectContents(interrupted: true, playSounds: false, previousMap);
+ }
+ innerContainer.ClearAndDestroyContents();
+ base.PostDestroy(mode, previousMap);
+ }
+
+ public override void PostDeSpawn(Map map, DestroyMode mode = DestroyMode.Vanish)
+ {
+ if (mode != DestroyMode.WillReplace)
+ {
+ EjectContents(interrupted: true, playSounds: false, map);
+ currentCycleKey = null;
+ }
+ progressBarEffecter?.Cleanup();
+ progressBarEffecter = null;
+ operatingEffecter?.Cleanup();
+ operatingEffecter = null;
+ readyEffecter?.Cleanup();
+ readyEffecter = null;
+ }
+
+ public override void DrawGUIOverlay()
+ {
+ base.DrawGUIOverlay();
+ if (!Find.ScreenshotModeHandler.Active && (biotunedTo != null || Occupant != null))
+ {
+ GenMapUI.DrawThingLabel(parent, biotunedTo?.LabelShort ?? Occupant.LabelShort, GenMapUI.DefaultThingLabelColor);
+ }
+ }
+
+ public override string CompInspectStringExtra()
+ {
+ StringBuilder stringBuilder = new StringBuilder();
+ BiosculpterPodState state = State;
+ if (parent.Spawned)
+ {
+ CompBiosculpterPod_Cycle currentCycle = CurrentCycle;
+ if (currentCycle != null)
+ {
+ stringBuilder.AppendLineIfNotEmpty().Append("BiosculpterPodCycleLabel".Translate()).Append(": ")
+ .Append(currentCycle.Props.LabelCap);
+ if (biotunedTo == null)
+ {
+ stringBuilder.Append(" " + "BiosculpterPodCycleWillBiotune".Translate());
+ }
+ }
+ else if (state == BiosculpterPodState.SelectingCycle)
+ {
+ if (PowerOn)
+ {
+ if (queuedEnterJob != null && !queuedEnterJob.biosculpterCycleKey.NullOrEmpty())
+ {
+ stringBuilder.Append("BiosculpterPodCycleStandby".Translate(GetCycle(queuedEnterJob.biosculpterCycleKey).Props.label.Named("CYCLE"), queuedPawn.Named("PAWN")));
+ }
+ else
+ {
+ stringBuilder.Append("BiosculpterPodCycleSelection".Translate().CapitalizeFirst());
+ }
+ }
+ else
+ {
+ stringBuilder.Append("BiosculpterPodCycleSelectionNoPower".Translate().CapitalizeFirst());
+ }
+ }
+ if (state == BiosculpterPodState.LoadingNutrition)
+ {
+ stringBuilder.Append("BiosculpterPodCycleLabelLoading".Translate().CapitalizeFirst());
+ stringBuilder.AppendLineIfNotEmpty().Append("Nutrition".Translate()).Append(": ")
+ .Append(liquifiedNutrition.ToStringByStyle(ToStringStyle.FloatMaxOne))
+ .Append(" / ")
+ .Append(5f);
+ }
+ if (state == BiosculpterPodState.Occupied)
+ {
+ float num = currentCycleTicksRemaining / CycleSpeedFactor;
+ stringBuilder.AppendLineIfNotEmpty().Append("Contains".Translate()).Append(": ")
+ .Append(Occupant.NameShortColored.Resolve());
+ if (!PowerOn)
+ {
+ stringBuilder.AppendLine().Append("BiosculpterCycleNoPowerInterrupt".Translate((60000 - currentCyclePowerCutTicks).ToStringTicksToPeriod().Named("TIME")).Colorize(ColorLibrary.RedReadable));
+ }
+ stringBuilder.AppendLine().Append("BiosculpterCycleTimeRemaining".Translate()).Append(": ")
+ .Append(((int)num).ToStringTicksToPeriod().Colorize(ColoredText.DateTimeColor));
+ Ideo ideo = Occupant.Ideo;
+ if (ideo != null && ideo.HasPrecept(PreceptDefOf.Biosculpting_Accelerated))
+ {
+ stringBuilder.Append(" (" + "BiosculpterCycleAccelerated".Translate() + ")");
+ }
+ if (biotunedTo != null)
+ {
+ stringBuilder.AppendLine().Append("BiosculpterBiotunedSpeedFactor".Translate()).Append(": ")
+ .Append(BiotunedSpeedFactor.ToStringPercent());
+ }
+ stringBuilder.AppendLine().Append("BiosculpterCleanlinessSpeedFactor".Translate()).Append(": ")
+ .Append(CleanlinessSpeedFactor.ToStringPercent());
+ }
+ }
+ if (biotunedTo != null && state != BiosculpterPodState.Occupied)
+ {
+ stringBuilder.AppendLineIfNotEmpty().Append("BiosculpterBiotunedTo".Translate()).Append(": ")
+ .Append(biotunedTo.LabelShort)
+ .Append(" (")
+ .Append(biotunedCountdownTicks.ToStringTicksToPeriod())
+ .Append(")");
+ }
+ if (stringBuilder.Length <= 0)
+ {
+ return null;
+ }
+ return stringBuilder.ToString();
+ }
+
+ public override IEnumerable CompGetGizmosExtra()
+ {
+ BiosculpterPodState state = State;
+ string cycleIndependentCannotUseReason = CannotUseNowReason();
+ foreach (CompBiosculpterPod_Cycle cycle in AvailableCycles)
+ {
+ string text = cycleIndependentCannotUseReason ?? CannotUseNowCycleReason(cycle);
+ Command_Action command_Action = new Command_Action();
+ command_Action.defaultLabel = "BiosculpterPodCycleCommand".Translate(cycle.Props.label) + ((biotunedTo != null) ? (" (" + biotunedTo.LabelShort + ")") : "");
+ command_Action.defaultDesc = CycleDescription(cycle);
+ command_Action.icon = cycle.Props.Icon;
+ command_Action.action = delegate
+ {
+ SelectPawnsForCycleOptions(cycle, out var options2);
+ if (biotunedTo != null && options2.Count > 0)
+ {
+ options2[0].action();
+ if (!(cycle is CompBiosculpterPod_HealingCycle))
+ {
+ Messages.Message("BiosculpterEnteringMessage".Translate(biotunedTo.Named("PAWN"), cycle.Props.label.Named("CYCLE")).CapitalizeFirst(), parent, MessageTypeDefOf.SilentInput, historical: false);
+ }
+ }
+ else
+ {
+ Find.WindowStack.Add(new FloatMenu(options2));
+ }
+ };
+ command_Action.activateSound = SoundDefOf.Tick_Tiny;
+ command_Action.Disabled = text != null;
+ List options;
+ if (text != null)
+ {
+ command_Action.Disable(text);
+ }
+ else if (!SelectPawnsForCycleOptions(cycle, out options, shortCircuit: true))
+ {
+ command_Action.Disable((biotunedTo != null) ? "BiosculpterNoEligiblePawnsBiotuned".Translate(biotunedTo.Named("PAWN")) : "BiosculpterNoEligiblePawns".Translate());
+ }
+ yield return command_Action;
+ }
+ if (state == BiosculpterPodState.Occupied)
+ {
+ Command_Action command_Action2 = new Command_Action();
+ command_Action2.defaultLabel = "BiosculpterInteruptCycle".Translate();
+ command_Action2.defaultDesc = "BiosculpterInteruptCycleDesc".Translate();
+ command_Action2.icon = InterruptCycleIcon;
+ command_Action2.action = delegate
+ {
+ EjectContents(interrupted: true, playSounds: true);
+ };
+ command_Action2.activateSound = SoundDefOf.Designate_Cancel;
+ yield return command_Action2;
+ }
+ Command_Toggle command_Toggle = new Command_Toggle();
+ command_Toggle.defaultLabel = "BiosculpterAutoLoadNutritionLabel".Translate();
+ command_Toggle.defaultDesc = "BiosculpterAutoLoadNutritionDescription".Translate();
+ command_Toggle.icon = (autoLoadNutrition ? TexCommand.ForbidOff : TexCommand.ForbidOn);
+ command_Toggle.isActive = () => autoLoadNutrition;
+ command_Toggle.toggleAction = delegate
+ {
+ autoLoadNutrition = !autoLoadNutrition;
+ };
+ yield return command_Toggle;
+ if ((biotunedTo?.Ideo?.HasPrecept(PreceptDefOf.AgeReversal_Demanded)).GetValueOrDefault())
+ {
+ Command_Toggle command_Toggle2 = new Command_Toggle();
+ command_Toggle2.defaultLabel = "BiosculpterAutoAgeReversalLabel".Translate(biotunedTo.Named("PAWN"));
+ TaggedString taggedString = ((biotunedTo.ageTracker.AgeReversalDemandedDeadlineTicks > 0) ? "BiosculpterAutoAgeReversalDescriptionFuture".Translate(biotunedTo.Named("PAWN"), ((int)biotunedTo.ageTracker.AgeReversalDemandedDeadlineTicks).ToStringTicksToPeriodVague().Named("TIME")) : "BiosculpterAutoAgeReversalDescriptionNow".Translate(biotunedTo.Named("PAWN")));
+ command_Toggle2.defaultDesc = "BiosculpterAutoAgeReversalDescription".Translate(biotunedTo.Named("PAWN"), taggedString.Named("NEXTTREATMENT"));
+ command_Toggle2.icon = AutoAgeReversalIcon;
+ command_Toggle2.isActive = () => AutoAgeReversal;
+ command_Toggle2.toggleAction = delegate
+ {
+ autoAgeReversal = !autoAgeReversal;
+ };
+ if (!CanAgeReverse(biotunedTo))
+ {
+ command_Toggle2.Disable("UnderMinBiosculpterAgeReversalAge".Translate(biotunedTo.ageTracker.AdultMinAge.Named("ADULTAGE")).CapitalizeFirst());
+ autoAgeReversal = false;
+ }
+ yield return command_Toggle2;
+ }
+ foreach (Gizmo item in StorageSettingsClipboard.CopyPasteGizmosFor(allowedNutritionSettings))
+ {
+ yield return item;
+ }
+ Gizmo gizmo = Building.SelectContainedItemGizmo(parent, Occupant);
+ if (gizmo != null)
+ {
+ yield return gizmo;
+ }
+ if (DebugSettings.ShowDevGizmos)
+ {
+ yield return new Command_Action
+ {
+ defaultLabel = "DEV: complete cycle",
+ action = delegate
+ {
+ currentCycleTicksRemaining = 10f;
+ },
+ Disabled = (State != BiosculpterPodState.Occupied)
+ };
+ yield return new Command_Action
+ {
+ defaultLabel = "DEV: advance cycle +1 day",
+ action = delegate
+ {
+ currentCycleTicksRemaining -= 60000f;
+ },
+ Disabled = (State != BiosculpterPodState.Occupied)
+ };
+ yield return new Command_Action
+ {
+ defaultLabel = "DEV: complete biotune timer",
+ action = delegate
+ {
+ biotunedCountdownTicks = 10;
+ },
+ Disabled = (biotunedCountdownTicks <= 0)
+ };
+ yield return new Command_Action
+ {
+ defaultLabel = "DEV: fill nutrition and cycle ingredients",
+ action = delegate
+ {
+ liquifiedNutrition = 5f;
+ devFillPodLatch = true;
+ },
+ Disabled = (State == BiosculpterPodState.Occupied || (devFillPodLatch && liquifiedNutrition == 5f))
+ };
+ }
+ }
+
+ private string IngredientsDescription(CompBiosculpterPod_Cycle cycle)
+ {
+ tmpIngredientsStrings.Clear();
+ if (!cycle.Props.extraRequiredIngredients.NullOrEmpty() && !devFillPodLatch)
+ {
+ for (int i = 0; i < cycle.Props.extraRequiredIngredients.Count; i++)
+ {
+ tmpIngredientsStrings.Add(cycle.Props.extraRequiredIngredients[i].Summary);
+ }
+ }
+ return tmpIngredientsStrings.ToCommaList(useAnd: true);
+ }
+
+ private string CycleDescription(CompBiosculpterPod_Cycle cycle)
+ {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.Append(cycle.Description(biotunedTo));
+ float num = cycle.Props.durationDays / CycleSpeedFactor;
+ float num2 = num / PreceptDefOf.Biosculpting_Accelerated.biosculpterPodCycleSpeedFactor;
+ stringBuilder.AppendLine("\n\n" + "BiosculpterPodCycleDuration".Translate() + ": " + ((int)(num * 60000f)).ToStringTicksToDays());
+ if (!Find.IdeoManager.classicMode)
+ {
+ stringBuilder.Append("BiosculpterPodCycleDurationTranshumanists".Translate() + ": " + ((int)(num2 * 60000f)).ToStringTicksToDays());
+ }
+ return stringBuilder.ToString();
+ }
+
+ public bool PawnCanUseNow(Pawn pawn, CompBiosculpterPod_Cycle cycle)
+ {
+ return (CannotUseNowReason() ?? CannotUseNowPawnReason(pawn) ?? CannotUseNowCycleReason(cycle) ?? CannotUseNowPawnCycleReason(pawn, cycle)) == null;
+ }
+
+ public override IEnumerable CompFloatMenuOptions(Pawn selPawn)
+ {
+ if (selPawn.IsQuestLodger())
+ {
+ yield return new FloatMenuOption("CannotEnter".Translate() + ": " + "CryptosleepCasketGuestsNotAllowed".Translate().CapitalizeFirst(), null);
+ yield break;
+ }
+ string cycleIndependentfailureReason = CannotUseNowReason() ?? CannotUseNowPawnReason(selPawn);
+ foreach (CompBiosculpterPod_Cycle cycle in AvailableCycles)
+ {
+ string text = cycleIndependentfailureReason ?? CannotUseNowCycleReason(cycle) ?? CannotUseNowPawnCycleReason(selPawn, cycle);
+ if (text != null)
+ {
+ yield return new FloatMenuOption(CannotStartText(cycle, text), null);
+ continue;
+ }
+ string label = "EnterBiosculpterPod".Translate(cycle.Props.label, ((int)(cycle.Props.durationDays / GetCycleSpeedFactorForPawn(selPawn) * 60000f)).ToStringTicksToDays());
+ yield return FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(label, delegate
+ {
+ PrepareCycleJob(selPawn, selPawn, cycle, EnterBiosculpterJob());
+ }), selPawn, parent);
+ }
+ }
+
+ public static bool CanAgeReverse(Pawn biosculptee)
+ {
+ return biosculptee.ageTracker.Adult;
+ }
+
+ public static List BiotunedPods(Pawn pawn)
+ {
+ return cachedBiotunedPods.TryGetValue(pawn);
+ }
+
+ public static bool HasBiotunedAutoAgeReversePod(Pawn pawn)
+ {
+ List list = cachedBiotunedPods.TryGetValue(pawn);
+ if (list == null)
+ {
+ return false;
+ }
+ foreach (CompBiosculpterPod item in list)
+ {
+ if (item.AutoAgeReversal)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static string CannotStartText(CompBiosculpterPod_Cycle cycle, string translatedReason)
+ {
+ return "BiosculpterCannotStartCycle".Translate(cycle.Props.label) + ": " + translatedReason.CapitalizeFirst();
+ }
+
+ public string CannotUseNowCycleReason(CompBiosculpterPod_Cycle cycle)
+ {
+ List list = cycle.MissingResearchLabels();
+ if (list.Any())
+ {
+ return "MissingRequiredResearch".Translate() + " " + list.ToCommaList();
+ }
+ return null;
+ }
+
+ public string CannotUseNowPawnCycleReason(Pawn p, CompBiosculpterPod_Cycle cycle, bool checkIngredients = true)
+ {
+ return CannotUseNowPawnCycleReason(p, p, cycle, checkIngredients);
+ }
+
+ private bool CanReachOrHasIngredients(Pawn hauler, Pawn biosculptee, CompBiosculpterPod_Cycle cycle, bool useCache = false)
+ {
+ if (!PawnCarryingExtraCycleIngredients(biosculptee, cycle) && (biosculptee == hauler || !PawnCarryingExtraCycleIngredients(hauler, cycle)))
+ {
+ return CanReachRequiredIngredients(hauler, cycle, useCache);
+ }
+ return true;
+ }
+
+ public string CannotUseNowPawnCycleReason(Pawn hauler, Pawn biosculptee, CompBiosculpterPod_Cycle cycle, bool checkIngredients = true)
+ {
+ if (AgeReversalCycleKey != null && cycle.Props.key == AgeReversalCycleKey && !CanAgeReverse(biosculptee))
+ {
+ return "UnderMinBiosculpterAgeReversalAge".Translate(biosculptee.ageTracker.AdultMinAge.Named("ADULTAGE")).CapitalizeFirst();
+ }
+ if (checkIngredients && !CanReachOrHasIngredients(hauler, biosculptee, cycle, useCache: true))
+ {
+ return "BiosculpterMissingIngredients".Translate(IngredientsDescription(cycle).Named("INGREDIENTS")).CapitalizeFirst();
+ }
+ return null;
+ }
+
+ public string CannotUseNowPawnReason(Pawn p)
+ {
+ if (biotunedTo != null && biotunedTo != p)
+ {
+ return "BiosculpterBiotunedToAnother".Translate().CapitalizeFirst();
+ }
+ if (!p.CanReach(parent, PathEndMode.InteractionCell, Danger.Deadly))
+ {
+ return "NoPath".Translate().CapitalizeFirst();
+ }
+ return null;
+ }
+
+ public string CannotUseNowReason()
+ {
+ if (!PowerOn)
+ {
+ return "NoPower".Translate().CapitalizeFirst();
+ }
+ if (State == BiosculpterPodState.LoadingNutrition)
+ {
+ return "BiosculpterNutritionNotLoaded".Translate().CapitalizeFirst();
+ }
+ if (State == BiosculpterPodState.Occupied)
+ {
+ return "BiosculpterOccupied".Translate().CapitalizeFirst();
+ }
+ return null;
+ }
+
+ private List RequiredIngredients(CompBiosculpterPod_Cycle cycle)
+ {
+ List extraRequiredIngredients = cycle.Props.extraRequiredIngredients;
+ if (extraRequiredIngredients == null || devFillPodLatch)
+ {
+ return null;
+ }
+ if (!cachedExtraIngredients.ContainsKey(cycle))
+ {
+ cachedExtraIngredients[cycle] = extraRequiredIngredients.Select((ThingDefCountClass tc) => tc.ToIngredientCount()).ToList();
+ }
+ return cachedExtraIngredients[cycle];
+ }
+
+ private bool CanReachRequiredIngredients(Pawn pawn, CompBiosculpterPod_Cycle cycle, bool useCache = false)
+ {
+ chosenExtraItems.Clear();
+ if (cycle.Props.extraRequiredIngredients == null || devFillPodLatch)
+ {
+ return true;
+ }
+ float realtimeSinceStartup = Time.realtimeSinceStartup;
+ if (useCache && cacheReachIngredientsPawn == pawn && cacheReachIngredientsCycle == cycle && realtimeSinceStartup < cacheReachIngredientsTime + 2f)
+ {
+ return cacheReachIngredientsResult;
+ }
+ cacheReachIngredientsPawn = pawn;
+ cacheReachIngredientsCycle = cycle;
+ cacheReachIngredientsTime = realtimeSinceStartup;
+ cacheReachIngredientsResult = WorkGiver_DoBill.TryFindBestFixedIngredients(RequiredIngredients(cycle), pawn, parent, chosenExtraItems);
+ return cacheReachIngredientsResult;
+ }
+
+ private bool SelectPawnCycleOption(Pawn pawn, CompBiosculpterPod_Cycle cycle, out FloatMenuOption option)
+ {
+ string text = CannotUseNowPawnReason(pawn) ?? CannotUseNowPawnCycleReason(pawn, cycle, checkIngredients: false);
+ string label = pawn.Label + ((text == null) ? "" : (": " + text));
+ Action action = null;
+ if (text == null)
+ {
+ action = delegate
+ {
+ PrepareCycleJob(pawn, pawn, cycle, EnterBiosculpterJob());
+ };
+ }
+ option = new FloatMenuOption(label, action);
+ return text == null;
+ }
+
+ private bool SelectPawnsForCycleOptions(CompBiosculpterPod_Cycle cycle, out List options, bool shortCircuit = false)
+ {
+ cycleEligiblePawnOptions.Clear();
+ options = cycleEligiblePawnOptions;
+ if (!cachedAnyPawnEligible.ContainsKey(cycle))
+ {
+ cachedAnyPawnEligible[cycle] = new CacheAnyPawnEligibleCycle
+ {
+ gameTime = float.MinValue
+ };
+ }
+ int ticksGame = Find.TickManager.TicksGame;
+ if (shortCircuit && (float)ticksGame < cachedAnyPawnEligible[cycle].gameTime + 2f)
+ {
+ return cachedAnyPawnEligible[cycle].anyEligible;
+ }
+ cachedAnyPawnEligible[cycle].gameTime = ticksGame;
+ if (biotunedTo != null)
+ {
+ if (biotunedTo.Dead || !biotunedTo.Spawned || biotunedTo.Map != parent.Map)
+ {
+ cachedAnyPawnEligible[cycle].anyEligible = false;
+ return cachedAnyPawnEligible[cycle].anyEligible;
+ }
+ if (SelectPawnCycleOption(biotunedTo, cycle, out var option) && shortCircuit)
+ {
+ cachedAnyPawnEligible[cycle].anyEligible = true;
+ return cachedAnyPawnEligible[cycle].anyEligible;
+ }
+ cycleEligiblePawnOptions.Add(option);
+ }
+ else
+ {
+ foreach (Pawn item in parent.Map.mapPawns.FreeColonistsSpawned)
+ {
+ if (SelectPawnCycleOption(item, cycle, out var option2) && shortCircuit)
+ {
+ cachedAnyPawnEligible[cycle].anyEligible = true;
+ return cachedAnyPawnEligible[cycle].anyEligible;
+ }
+ cycleEligiblePawnOptions.Add(option2);
+ }
+ }
+ cachedAnyPawnEligible[cycle].anyEligible = cycleEligiblePawnOptions.Count > 0;
+ return cachedAnyPawnEligible[cycle].anyEligible;
+ }
+
+ public Job EnterBiosculpterJob()
+ {
+ return JobMaker.MakeJob(JobDefOf.EnterBiosculpterPod, parent);
+ }
+
+ public Job MakeCarryToBiosculpterJob(Pawn willBeCarried)
+ {
+ return JobMaker.MakeJob(JobDefOf.CarryToBiosculpterPod, willBeCarried, LocalTargetInfo.Invalid, parent);
+ }
+
+ public void ConfigureJobForCycle(Job job, CompBiosculpterPod_Cycle cycle, List extraIngredients)
+ {
+ if (!extraIngredients.NullOrEmpty())
+ {
+ job.targetQueueB = new List(extraIngredients.Count);
+ job.countQueue = new List(extraIngredients.Count);
+ foreach (ThingCount extraIngredient in extraIngredients)
+ {
+ job.targetQueueB.Add(extraIngredient.Thing);
+ job.countQueue.Add(extraIngredient.Count);
+ }
+ }
+ job.haulMode = HaulMode.ToCellNonStorage;
+ job.biosculpterCycleKey = cycle.Props.key;
+ }
+
+ public void PrepareCycleJob(Pawn hauler, Pawn biosculptee, CompBiosculpterPod_Cycle cycle, Job job)
+ {
+ OrderToPod(cycle, biosculptee, delegate
+ {
+ chosenExtraItems.Clear();
+ if (!CanReachOrHasIngredients(hauler, biosculptee, cycle))
+ {
+ Messages.Message("BiosculpterMissingIngredients".Translate(IngredientsDescription(cycle).Named("INGREDIENTS")).CapitalizeFirst(), parent, MessageTypeDefOf.NegativeEvent, historical: false);
+ }
+ else
+ {
+ ConfigureJobForCycle(job, cycle, chosenExtraItems);
+ if (cycle.Props.extraRequiredIngredients != null && !devFillPodLatch)
+ {
+ if (job.def == JobDefOf.CarryToBiosculpterPod)
+ {
+ Messages.Message("BiosculpterCarryStartedMessage".Translate(hauler.Named("PAWN"), IngredientsDescription(cycle).Named("INGREDIENTS"), biosculptee.Named("DOWNED"), cycle.Props.label.Named("CYCLE")), parent, MessageTypeDefOf.SilentInput, historical: false);
+ }
+ else
+ {
+ Messages.Message("BiosculpterLoadingStartedMessage".Translate(hauler.Named("PAWN"), IngredientsDescription(cycle).Named("INGREDIENTS"), cycle.Props.label.Named("CYCLE")), parent, MessageTypeDefOf.SilentInput, historical: false);
+ }
+ }
+ if (hauler.jobs.TryTakeOrderedJob(job, JobTag.Misc))
+ {
+ SetQueuedInformation(job, biosculptee);
+ }
+ }
+ });
+ }
+
+ public void ClearQueuedInformation()
+ {
+ SetQueuedInformation(null, null);
+ }
+
+ public void SetQueuedInformation(Job job, Pawn biosculptee)
+ {
+ queuedEnterJob = job;
+ queuedPawn = biosculptee;
+ }
+
+ public bool CanAcceptNutrition(Thing thing)
+ {
+ return allowedNutritionSettings.AllowedToAccept(thing);
+ }
+
+ public bool CanAcceptOnceCycleChosen(Pawn pawn)
+ {
+ if (State != BiosculpterPodState.SelectingCycle || !PowerOn)
+ {
+ return false;
+ }
+ if (biotunedTo != null && biotunedTo != pawn)
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public bool PawnCarryingExtraCycleIngredients(Pawn pawn, string cycleKey, bool remove = false)
+ {
+ return PawnCarryingExtraCycleIngredients(pawn, GetCycle(cycleKey), remove);
+ }
+
+ public bool PawnCarryingExtraCycleIngredients(Pawn pawn, CompBiosculpterPod_Cycle cycle, bool remove = false)
+ {
+ if (cycle.Props.extraRequiredIngredients.NullOrEmpty() || devFillPodLatch)
+ {
+ return true;
+ }
+ foreach (ThingDefCountClass extraRequiredIngredient in cycle.Props.extraRequiredIngredients)
+ {
+ if (pawn.inventory.Count(extraRequiredIngredient.thingDef) < extraRequiredIngredient.count)
+ {
+ return false;
+ }
+ }
+ if (remove)
+ {
+ foreach (ThingDefCountClass extraRequiredIngredient2 in cycle.Props.extraRequiredIngredients)
+ {
+ pawn.inventory.RemoveCount(extraRequiredIngredient2.thingDef, extraRequiredIngredient2.count);
+ }
+ }
+ return true;
+ }
+
+ public bool TryAcceptPawn(Pawn pawn, string cycleKey)
+ {
+ return TryAcceptPawn(pawn, GetCycle(cycleKey));
+ }
+
+ public bool TryAcceptPawn(Pawn pawn, CompBiosculpterPod_Cycle cycle)
+ {
+ if (!CanAcceptOnceCycleChosen(pawn))
+ {
+ return false;
+ }
+ if (!PawnCarryingExtraCycleIngredients(pawn, cycle, remove: true))
+ {
+ return false;
+ }
+ currentCycleKey = cycle.Props.key;
+ innerContainer.ClearAndDestroyContents();
+ pawnEnteringBiosculpter = pawn;
+ bool num = pawn.DeSpawnOrDeselect();
+ if (pawn.holdingOwner != null)
+ {
+ pawn.holdingOwner.TryTransferToContainer(pawn, innerContainer);
+ }
+ else
+ {
+ innerContainer.TryAdd(pawn);
+ }
+ if (num)
+ {
+ Find.Selector.Select(pawn, playSound: false, forceDesignatorDeselect: false);
+ }
+ pawnEnteringBiosculpter = null;
+ currentCycleTicksRemaining = cycle.Props.durationDays * 60000f;
+ liquifiedNutrition = 0f;
+ devFillPodLatch = false;
+ ClearQueuedInformation();
+ tickEntered = Find.TickManager.TicksGame;
+ return true;
+ }
+
+ public void EjectContents(bool interrupted, bool playSounds, Map destMap = null)
+ {
+ if (destMap == null)
+ {
+ destMap = parent.Map;
+ }
+ Pawn occupant = Occupant;
+ currentCycleKey = null;
+ currentCycleTicksRemaining = 0f;
+ currentCyclePowerCutTicks = 0;
+ liquifiedNutrition = 0f;
+ devFillPodLatch = false;
+ innerContainer.TryDropAll(parent.InteractionCell, destMap, ThingPlaceMode.Near);
+ if (occupant != null)
+ {
+ FilthMaker.TryMakeFilth(parent.InteractionCell, destMap, ThingDefOf.Filth_PodSlime, new IntRange(3, 6).RandomInRange);
+ if (interrupted)
+ {
+ occupant.needs?.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.SoakingWet);
+ occupant.health?.AddHediff(HediffDefOf.BiosculptingSickness);
+ }
+ }
+ if (playSounds)
+ {
+ Props.exitSound?.PlayOneShot(SoundInfo.InMap(new TargetInfo(parent.Position, parent.Map)));
+ }
+ }
+
+ private void CycleCompleted()
+ {
+ Pawn occupant = Occupant;
+ CompBiosculpterPod_Cycle currentCycle = CurrentCycle;
+ SetBiotuned(occupant);
+ currentCycle.CycleCompleted(occupant);
+ EjectContents(interrupted: false, playSounds: true);
+ if (occupant != null)
+ {
+ Need_Food need_Food = occupant.needs?.food;
+ if (need_Food != null)
+ {
+ need_Food.CurLevelPercentage = 1f;
+ }
+ Need_Rest need_Rest = occupant.needs?.rest;
+ if (need_Rest != null)
+ {
+ need_Rest.CurLevelPercentage = 1f;
+ }
+ if (currentCycle.Props.gainThoughtOnCompletion != null)
+ {
+ occupant.needs?.mood?.thoughts.memories.TryGainMemory(ThoughtDefOf.AgeReversalReceived);
+ }
+ Find.HistoryEventsManager.RecordEvent(new HistoryEvent(HistoryEventDefOf.UsedBiosculpterPod, occupant.Named(HistoryEventArgsNames.Doer)));
+ }
+ if (tickEntered > 0)
+ {
+ occupant.drugs.Notify_LeftSuspension(Find.TickManager.TicksGame - tickEntered);
+ }
+ }
+
+ private void LiquifyNutrition()
+ {
+ tmpItems.AddRange(innerContainer);
+ foreach (Thing tmpItem in tmpItems)
+ {
+ float num = tmpItem.GetStatValue(StatDefOf.Nutrition) * (float)tmpItem.stackCount;
+ if (!(num <= 0f) && !(tmpItem is Pawn))
+ {
+ liquifiedNutrition = Mathf.Min(5f, liquifiedNutrition + num);
+ tmpItem.Destroy();
+ }
+ }
+ tmpItems.Clear();
+ }
+
+ public override void CompTick()
+ {
+ if (!ModLister.CheckIdeology("Biosculpting"))
+ {
+ return;
+ }
+ base.CompTick();
+ if (State != BiosculpterPodState.SelectingCycle || !PowerOn)
+ {
+ readyEffecter?.Cleanup();
+ readyEffecter = null;
+ }
+ else if (Props.readyEffecter != null)
+ {
+ if (readyEffecter == null)
+ {
+ readyEffecter = Props.readyEffecter.Spawn();
+ ColorizeEffecter(readyEffecter, Props.selectCycleColor);
+ readyEffecter.Trigger(parent, new TargetInfo(parent.InteractionCell, parent.Map));
+ }
+ readyEffecter.EffectTick(parent, new TargetInfo(parent.InteractionCell, parent.Map));
+ }
+ if (State != BiosculpterPodState.Occupied)
+ {
+ progressBarEffecter?.Cleanup();
+ progressBarEffecter = null;
+ operatingEffecter?.Cleanup();
+ operatingEffecter = null;
+ }
+ else
+ {
+ Pawn occupant = Occupant;
+ biotunedCountdownTicks = 4800000;
+ if (PowerOn)
+ {
+ int num = 1;
+ currentCycleTicksRemaining -= (float)num * CycleSpeedFactor;
+ if (currentCycleTicksRemaining <= 0f)
+ {
+ CycleCompleted();
+ }
+ }
+ else
+ {
+ currentCyclePowerCutTicks++;
+ if (currentCyclePowerCutTicks >= 60000)
+ {
+ EjectContents(interrupted: true, playSounds: true);
+ Messages.Message("BiosculpterNoPowerEjectedMessage".Translate(occupant.Named("PAWN")), occupant, MessageTypeDefOf.NegativeEvent, historical: false);
+ }
+ }
+ if (currentCycleTicksRemaining > 0f)
+ {
+ if (progressBarEffecter == null)
+ {
+ progressBarEffecter = EffecterDefOf.ProgressBar.Spawn();
+ }
+ progressBarEffecter.EffectTick(parent, TargetInfo.Invalid);
+ MoteProgressBar moteProgressBar = (progressBarEffecter.children[0] as SubEffecter_ProgressBar)?.mote;
+ if (moteProgressBar != null)
+ {
+ float num2 = CurrentCycle.Props.durationDays * 60000f;
+ moteProgressBar.progress = 1f - Mathf.Clamp01(currentCycleTicksRemaining / num2);
+ int num3 = (parent.RotatedSize.z - 1) / 2;
+ moteProgressBar.offsetZ = 0f - ((float)num3 + 0.5f);
+ }
+ if (Props.operatingEffecter != null)
+ {
+ if (!PowerOn)
+ {
+ operatingEffecter?.Cleanup();
+ operatingEffecter = null;
+ }
+ else
+ {
+ if (operatingEffecter == null)
+ {
+ operatingEffecter = Props.operatingEffecter.Spawn();
+ ColorizeEffecter(operatingEffecter, CurrentCycle.Props.operatingColor);
+ operatingEffecter.Trigger(parent, new TargetInfo(parent.InteractionCell, parent.Map));
+ }
+ operatingEffecter.EffectTick(parent, new TargetInfo(parent.InteractionCell, parent.Map));
+ }
+ }
+ }
+ }
+ if (PowerOn && biotunedCountdownTicks > 0)
+ {
+ biotunedCountdownTicks--;
+ }
+ if (biotunedCountdownTicks <= 0)
+ {
+ SetBiotuned(null);
+ }
+ SetPower();
+ if (biotunedTo?.Ideo != null && !biotunedTo.Ideo.HasPrecept(PreceptDefOf.AgeReversal_Demanded))
+ {
+ autoAgeReversal = false;
+ }
+ }
+
+ private void SetPower()
+ {
+ if (powerTraderComp == null)
+ {
+ powerTraderComp = parent.TryGetComp();
+ }
+ if (powerComp == null)
+ {
+ powerComp = parent.TryGetComp();
+ }
+ if (State == BiosculpterPodState.Occupied)
+ {
+ powerTraderComp.PowerOutput = 0f - powerComp.Props.PowerConsumption;
+ }
+ else
+ {
+ powerTraderComp.PowerOutput = 0f - powerComp.Props.idlePowerDraw;
+ }
+ }
+
+ private void ColorizeEffecter(Effecter effecter, Color color)
+ {
+ foreach (SubEffecter child in effecter.children)
+ {
+ if (child is SubEffecter_Sprayer subEffecter_Sprayer)
+ {
+ subEffecter_Sprayer.colorOverride = color * child.def.color;
+ }
+ }
+ }
+
+ public override void PostDraw()
+ {
+ base.PostDraw();
+ Rot4 rotation = parent.Rotation;
+ Vector3 s = new Vector3(parent.def.graphicData.drawSize.x * 0.8f, 1f, parent.def.graphicData.drawSize.y * 0.8f);
+ Vector3 drawPos = parent.DrawPos;
+ drawPos.y -= 0.07317074f;
+ Graphics.DrawMesh(MeshPool.plane10, Matrix4x4.TRS(drawPos, rotation.AsQuat, s), BackgroundMat, 0);
+ if (State == BiosculpterPodState.Occupied)
+ {
+ Pawn occupant = Occupant;
+ Vector3 drawLoc = parent.DrawPos + FloatingOffset(currentCycleTicksRemaining + (float)currentCyclePowerCutTicks);
+ Rot4 rotation2 = parent.Rotation;
+ if (rotation2 == Rot4.East || rotation2 == Rot4.West)
+ {
+ drawLoc.z += 0.2f;
+ }
+ occupant.Drawer.renderer.RenderPawnAt(drawLoc, null, neverAimWeapon: true);
+ }
+ }
+
+ public static Vector3 FloatingOffset(float tickOffset)
+ {
+ float num = tickOffset % 500f / 500f;
+ float num2 = Mathf.Sin(MathF.PI * num);
+ float z = num2 * num2 * 0.04f;
+ return new Vector3(0f, 0f, z);
+ }
+
+ public void GetChildHolders(List outChildren)
+ {
+ ThingOwnerUtility.AppendThingHoldersFromThings(outChildren, GetDirectlyHeldThings());
+ }
+
+ public ThingOwner GetDirectlyHeldThings()
+ {
+ return innerContainer;
+ }
+
+ public StorageSettings GetStoreSettings()
+ {
+ return allowedNutritionSettings;
+ }
+
+ public StorageSettings GetParentStoreSettings()
+ {
+ return parent.def.building.fixedStorageSettings;
+ }
+
+ public void Notify_SettingsChanged()
+ {
+ }
+
+ private static void OrderToPod(CompBiosculpterPod_Cycle cycle, Pawn pawn, Action giveJobAct)
+ {
+ if (cycle is CompBiosculpterPod_HealingCycle compBiosculpterPod_HealingCycle)
+ {
+ string healingDescriptionForPawn = compBiosculpterPod_HealingCycle.GetHealingDescriptionForPawn(pawn);
+ string text = (healingDescriptionForPawn.NullOrEmpty() ? "BiosculpterNoCoditionsToHeal".Translate(pawn.Named("PAWN"), compBiosculpterPod_HealingCycle.Props.label.Named("CYCLE")).Resolve() : ("OnCompletionOfCycle".Translate(compBiosculpterPod_HealingCycle.Props.label.Named("CYCLE")).Resolve() + ":\n\n" + healingDescriptionForPawn));
+ Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation(text, giveJobAct, healingDescriptionForPawn.NullOrEmpty()));
+ }
+ else
+ {
+ giveJobAct();
+ }
+ }
+
+ public static Thing FindPodFor(Pawn pawn, Pawn traveller, bool biotuned)
+ {
+ if (cachedPodDefs.NullOrEmpty())
+ {
+ cachedPodDefs = DefDatabase.AllDefs.Where((ThingDef def) => def.GetCompProperties() != null).ToList();
+ }
+ foreach (ThingDef cachedPodDef in cachedPodDefs)
+ {
+ Thing thing = GenClosest.ClosestThingReachable(traveller.Position, pawn.Map, ThingRequest.ForDef(cachedPodDef), PathEndMode.InteractionCell, TraverseParms.For(pawn), 9999f, Validator);
+ if (thing != null)
+ {
+ return thing;
+ }
+ }
+ return null;
+ bool Validator(Thing t)
+ {
+ CompBiosculpterPod compBiosculpterPod = t.TryGetComp();
+ if (biotuned && compBiosculpterPod.biotunedTo != traveller)
+ {
+ return false;
+ }
+ return compBiosculpterPod.CanAcceptOnceCycleChosen(traveller);
+ }
+ }
+
+ public static bool WasLoadingCanceled(Thing thing)
+ {
+ CompBiosculpterPod compBiosculpterPod = thing.TryGetComp();
+ if (compBiosculpterPod != null && compBiosculpterPod.State != 0)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public void ClearCycle()
+ {
+ currentCycleKey = null;
+ }
+
+ public void Notify_HauledTo(Pawn hauler, Thing thing, int count)
+ {
+ LiquifyNutrition();
+ SoundDefOf.Standard_Drop.PlayOneShot(parent);
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompBiosculpterPod_Cycle.txt`
+**相似度:** 0.7210
+
+```csharp
+public abstract class CompBiosculpterPod_Cycle : ThingComp
+{
+ private List tmpMissingResearchLabels = new List();
+
+ public CompProperties_BiosculpterPod_BaseCycle Props => (CompProperties_BiosculpterPod_BaseCycle)props;
+
+ public abstract void CycleCompleted(Pawn occupant);
+
+ public virtual string Description(Pawn tunedFor)
+ {
+ return Props.description;
+ }
+
+ public List MissingResearchLabels()
+ {
+ tmpMissingResearchLabels.Clear();
+ if (Props.requiredResearch.NullOrEmpty())
+ {
+ return tmpMissingResearchLabels;
+ }
+ foreach (ResearchProjectDef item in Props.requiredResearch)
+ {
+ if (!item.IsFinished)
+ {
+ tmpMissingResearchLabels.Add(item.LabelCap);
+ }
+ }
+ return tmpMissingResearchLabels;
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\WorkGiver_HaulToBiosculpterPod.txt`
+**相似度:** 0.7198
+
+```csharp
+public class WorkGiver_HaulToBiosculpterPod : WorkGiver_Scanner
+{
+ public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForDef(ThingDefOf.BiosculpterPod);
+
+ public override PathEndMode PathEndMode => PathEndMode.Touch;
+
+ public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
+ {
+ if (!ModLister.CheckIdeology("Biosculpting"))
+ {
+ return false;
+ }
+ if (!pawn.CanReserve(t, 1, -1, null, forced))
+ {
+ return false;
+ }
+ if (pawn.Map.designationManager.DesignationOn(t, DesignationDefOf.Deconstruct) != null)
+ {
+ return false;
+ }
+ CompBiosculpterPod compBiosculpterPod = t.TryGetComp();
+ if (compBiosculpterPod == null || !compBiosculpterPod.PowerOn || compBiosculpterPod.State != 0 || (!forced && !compBiosculpterPod.autoLoadNutrition))
+ {
+ return false;
+ }
+ if (t.IsBurning())
+ {
+ return false;
+ }
+ if (compBiosculpterPod.RequiredNutritionRemaining > 0f)
+ {
+ if (FindNutrition(pawn, compBiosculpterPod).Thing == null)
+ {
+ JobFailReason.Is("NoFood".Translate());
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
+ {
+ CompBiosculpterPod compBiosculpterPod = t.TryGetComp();
+ if (compBiosculpterPod == null)
+ {
+ return null;
+ }
+ if (compBiosculpterPod.RequiredNutritionRemaining > 0f)
+ {
+ ThingCount thingCount = FindNutrition(pawn, compBiosculpterPod);
+ if (thingCount.Thing != null)
+ {
+ Job job = HaulAIUtility.HaulToContainerJob(pawn, thingCount.Thing, t);
+ job.count = Mathf.Min(job.count, thingCount.Count);
+ return job;
+ }
+ }
+ return null;
+ }
+
+ private ThingCount FindNutrition(Pawn pawn, CompBiosculpterPod pod)
+ {
+ Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(pawn), 9999f, Validator);
+ if (thing == null)
+ {
+ return default(ThingCount);
+ }
+ int b = Mathf.CeilToInt(pod.RequiredNutritionRemaining / thing.GetStatValue(StatDefOf.Nutrition));
+ return new ThingCount(thing, Mathf.Min(thing.stackCount, b));
+ bool Validator(Thing x)
+ {
+ if (x.IsForbidden(pawn) || !pawn.CanReserve(x))
+ {
+ return false;
+ }
+ if (!pod.CanAcceptNutrition(x))
+ {
+ return false;
+ }
+ return true;
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/MCP/vector_cache/BiosculpterPod.txt b/MCP/vector_cache/BiosculpterPod.txt
new file mode 100644
index 00000000..db82d121
--- /dev/null
+++ b/MCP/vector_cache/BiosculpterPod.txt
@@ -0,0 +1,74 @@
+根据向量相似度分析,与 'BiosculpterPod' 最相关的代码定义如下:
+
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompProperties_BiosculpterPod_BaseCycle.txt`
+**相似度:** 0.6754
+
+```csharp
+public abstract class CompProperties_BiosculpterPod_BaseCycle : CompProperties
+{
+ [NoTranslate]
+ public string key;
+
+ [MustTranslate]
+ public string label;
+
+ [MustTranslate]
+ public string description;
+
+ [NoTranslate]
+ public string iconPath;
+
+ public float durationDays;
+
+ public Color operatingColor = new Color(0.5f, 0.7f, 0.5f);
+
+ public ThoughtDef gainThoughtOnCompletion;
+
+ public List requiredResearch;
+
+ public List extraRequiredIngredients;
+
+ private Texture2D icon;
+
+ public Texture2D Icon
+ {
+ get
+ {
+ if (icon == null)
+ {
+ icon = ContentFinder.Get(iconPath);
+ }
+ return icon;
+ }
+ }
+
+ public string LabelCap => label.CapitalizeFirst();
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompProperties_BiosculpterPod_PleasureCycle.txt`
+**相似度:** 0.6624
+
+```csharp
+public class CompProperties_BiosculpterPod_PleasureCycle : CompProperties_BiosculpterPod_BaseCycle
+{
+ public CompProperties_BiosculpterPod_PleasureCycle()
+ {
+ compClass = typeof(CompBiosculpterPod_PleasureCycle);
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompProperties_BiosculpterPod_AgeReversalCycle.txt`
+**相似度:** 0.6461
+
+```csharp
+public class CompProperties_BiosculpterPod_AgeReversalCycle : CompProperties_BiosculpterPod_BaseCycle
+{
+ public CompProperties_BiosculpterPod_AgeReversalCycle()
+ {
+ compClass = typeof(CompBiosculpterPod_AgeReversalCycle);
+ }
+}
+```
\ No newline at end of file
diff --git a/MCP/vector_cache/Building_Bed.txt b/MCP/vector_cache/Building_Bed.txt
new file mode 100644
index 00000000..10294a2c
--- /dev/null
+++ b/MCP/vector_cache/Building_Bed.txt
@@ -0,0 +1,1122 @@
+根据向量相似度分析,与 'Building_Bed' 最相关的代码定义如下:
+
+---
+**文件路径 (精确匹配):** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\Building_Bed.txt`
+
+```csharp
+public class Building_Bed : Building
+{
+ private BedOwnerType forOwnerType;
+
+ private bool medicalInt;
+
+ private bool alreadySetDefaultMed;
+
+ private static int lastBedOwnerSetChangeFrame = -1;
+
+ private static List tmpOrderedInteractionCells = new List(8);
+
+ private static readonly Color SheetColorNormal = new Color(0.6313726f, 71f / 85f, 0.7058824f);
+
+ private static readonly Color SheetColorRoyal = new Color(57f / 85f, 0.9137255f, 38f / 51f);
+
+ public static readonly Color SheetColorForPrisoner = new Color(1f, 61f / 85f, 11f / 85f);
+
+ private static readonly Color SheetColorMedical = new Color(33f / 85f, 53f / 85f, 0.8862745f);
+
+ private static readonly Color SheetColorMedicalForPrisoner = new Color(0.654902f, 32f / 85f, 13f / 85f);
+
+ private static readonly Color SheetColorForSlave = new Color32(252, 244, 3, byte.MaxValue);
+
+ private static readonly Color SheetColorMedicalForSlave = new Color32(153, 148, 0, byte.MaxValue);
+
+ private static readonly BedInteractionCellSearchPattern defaultBedInteractionCellsOrder = new BedInteractionCellSearchPattern();
+
+ public List OwnersForReading => CompAssignableToPawn.AssignedPawnsForReading;
+
+ public CompAssignableToPawn CompAssignableToPawn => GetComp();
+
+ public bool ForPrisoners
+ {
+ get
+ {
+ return forOwnerType == BedOwnerType.Prisoner;
+ }
+ set
+ {
+ if (value == ForPrisoners || !def.building.bed_humanlike || ForHumanBabies)
+ {
+ return;
+ }
+ if (Current.ProgramState != ProgramState.Playing && Scribe.mode != 0)
+ {
+ Log.Error("Tried to set ForPrisoners while game mode was " + Current.ProgramState);
+ return;
+ }
+ RemoveAllOwners();
+ if (value)
+ {
+ forOwnerType = BedOwnerType.Prisoner;
+ }
+ else
+ {
+ forOwnerType = BedOwnerType.Colonist;
+ Log.Error("Bed ForPrisoners=false, but should it be for for colonists or slaves? Set ForOwnerType instead.");
+ }
+ Notify_ColorChanged();
+ NotifyRoomBedTypeChanged();
+ }
+ }
+
+ public bool ForSlaves => ForOwnerType == BedOwnerType.Slave;
+
+ public bool ForColonists => ForOwnerType == BedOwnerType.Colonist;
+
+ public bool ForHumanBabies
+ {
+ get
+ {
+ if (def.building.bed_humanlike)
+ {
+ return def.building.bed_maxBodySize < LifeStageDefOf.HumanlikeChild.bodySizeFactor;
+ }
+ return false;
+ }
+ }
+
+ public BedOwnerType ForOwnerType
+ {
+ get
+ {
+ return forOwnerType;
+ }
+ set
+ {
+ if (value != forOwnerType && def.building.bed_humanlike && !ForHumanBabies && (value != BedOwnerType.Slave || ModLister.CheckIdeology("Slavery")))
+ {
+ RemoveAllOwners();
+ forOwnerType = value;
+ Notify_ColorChanged();
+ NotifyRoomBedTypeChanged();
+ }
+ }
+ }
+
+ public bool Medical
+ {
+ get
+ {
+ return medicalInt;
+ }
+ set
+ {
+ if (value != medicalInt && (!value || def.building.bed_canBeMedical))
+ {
+ RemoveAllOwners();
+ medicalInt = value;
+ Notify_ColorChanged();
+ if (base.Spawned)
+ {
+ base.Map.mapDrawer.MapMeshDirty(base.Position, MapMeshFlagDefOf.Things);
+ NotifyRoomBedTypeChanged();
+ }
+ FacilityChanged();
+ }
+ }
+ }
+
+ public bool AnyUnownedSleepingSlot
+ {
+ get
+ {
+ if (Medical)
+ {
+ Log.Warning("Tried to check for unowned sleeping slot on medical bed " + this);
+ return false;
+ }
+ return CompAssignableToPawn.HasFreeSlot;
+ }
+ }
+
+ public int TotalSleepingSlots
+ {
+ get
+ {
+ if (Medical)
+ {
+ Log.Warning("Tried to check for total sleeping slots on medical bed " + this);
+ return 0;
+ }
+ return CompAssignableToPawn.TotalSlots;
+ }
+ }
+
+ public bool AnyUnoccupiedSleepingSlot
+ {
+ get
+ {
+ for (int i = 0; i < SleepingSlotsCount; i++)
+ {
+ if (GetCurOccupant(i) == null)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ public IEnumerable CurOccupants
+ {
+ get
+ {
+ for (int i = 0; i < SleepingSlotsCount; i++)
+ {
+ Pawn curOccupant = GetCurOccupant(i);
+ if (curOccupant != null)
+ {
+ yield return curOccupant;
+ }
+ }
+ }
+ }
+
+ public bool AnyOccupants
+ {
+ get
+ {
+ for (int i = 0; i < SleepingSlotsCount; i++)
+ {
+ if (GetCurOccupant(i) != null)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ public override Color DrawColor
+ {
+ get
+ {
+ if (def.MadeFromStuff)
+ {
+ return base.DrawColor;
+ }
+ return DrawColorTwo;
+ }
+ }
+
+ public override Color DrawColorTwo
+ {
+ get
+ {
+ if (def.building != null && !def.building.bed_UseSheetColor)
+ {
+ return base.DrawColorTwo;
+ }
+ bool medical = Medical;
+ switch (forOwnerType)
+ {
+ case BedOwnerType.Prisoner:
+ if (!medical)
+ {
+ return SheetColorForPrisoner;
+ }
+ return SheetColorMedicalForPrisoner;
+ case BedOwnerType.Slave:
+ if (!medical)
+ {
+ return SheetColorForSlave;
+ }
+ return SheetColorMedicalForSlave;
+ default:
+ if (medical)
+ {
+ return SheetColorMedical;
+ }
+ if (def == ThingDefOf.RoyalBed)
+ {
+ return SheetColorRoyal;
+ }
+ return SheetColorNormal;
+ }
+ }
+ }
+
+ public int SleepingSlotsCount => BedUtility.GetSleepingSlotsCount(def.size);
+
+ private bool PlayerCanSeeOwners => CompAssignableToPawn.PlayerCanSeeAssignments;
+
+ public override IntVec3 InteractionCell => FindPreferredInteractionCell(base.Position) ?? base.InteractionCell;
+
+ public override void SpawnSetup(Map map, bool respawningAfterLoad)
+ {
+ base.SpawnSetup(map, respawningAfterLoad);
+ Region validRegionAt_NoRebuild = map.regionGrid.GetValidRegionAt_NoRebuild(base.Position);
+ if (validRegionAt_NoRebuild != null && validRegionAt_NoRebuild.Room.IsPrisonCell)
+ {
+ ForPrisoners = true;
+ }
+ if (!alreadySetDefaultMed)
+ {
+ alreadySetDefaultMed = true;
+ if (def.building.bed_defaultMedical)
+ {
+ Medical = true;
+ }
+ }
+ if (!respawningAfterLoad)
+ {
+ District district = this.GetDistrict();
+ if (district != null)
+ {
+ district.Notify_RoomShapeOrContainedBedsChanged();
+ district.Room.Notify_RoomShapeChanged();
+ }
+ }
+ }
+
+ public override void DeSpawn(DestroyMode mode = DestroyMode.Vanish)
+ {
+ if (mode != DestroyMode.WillReplace)
+ {
+ if (mode != 0)
+ {
+ RemoveAllOwners(mode == DestroyMode.KillFinalize);
+ }
+ else if (InstallBlueprintUtility.ExistingBlueprintFor(this) == null)
+ {
+ foreach (Pawn item in OwnersForReading)
+ {
+ Messages.Message("MessageBedLostAssignment".Translate(def, item), new LookTargets(this, item), MessageTypeDefOf.CautionInput, historical: false);
+ }
+ }
+ ForOwnerType = BedOwnerType.Colonist;
+ Medical = false;
+ alreadySetDefaultMed = false;
+ }
+ District district = this.GetDistrict();
+ base.DeSpawn(mode);
+ if (district != null)
+ {
+ district.Notify_RoomShapeOrContainedBedsChanged();
+ district.Room.Notify_RoomShapeChanged();
+ }
+ }
+
+ public override void ExposeData()
+ {
+ base.ExposeData();
+ Scribe_Values.Look(ref medicalInt, "medical", defaultValue: false);
+ Scribe_Values.Look(ref alreadySetDefaultMed, "alreadySetDefaultMed", defaultValue: false);
+ Scribe_Values.Look(ref forOwnerType, "forOwnerType", BedOwnerType.Colonist);
+ BackCompatibility.PostExposeData(this);
+ }
+
+ public override void DrawExtraSelectionOverlays()
+ {
+ base.DrawExtraSelectionOverlays();
+ Room room = this.GetRoom();
+ if (room != null && RoomCanBePrisonCell(room))
+ {
+ room.DrawFieldEdges();
+ }
+ }
+
+ public static bool RoomCanBePrisonCell(Room r)
+ {
+ if (r.ProperRoom)
+ {
+ return !r.IsHuge;
+ }
+ return false;
+ }
+
+ public override IEnumerable GetGizmos()
+ {
+ foreach (Gizmo gizmo in base.GetGizmos())
+ {
+ yield return gizmo;
+ }
+ if (base.Faction != Faction.OfPlayer)
+ {
+ yield break;
+ }
+ if (def.building.bed_humanlike && !ForHumanBabies)
+ {
+ if (ModsConfig.IdeologyActive)
+ {
+ yield return new Command_SetBedOwnerType(this);
+ }
+ else
+ {
+ Command_Toggle command_Toggle = new Command_Toggle();
+ command_Toggle.defaultLabel = "CommandBedSetForPrisonersLabel".Translate();
+ command_Toggle.defaultDesc = "CommandBedSetForPrisonersDesc".Translate();
+ command_Toggle.icon = ContentFinder.Get("UI/Commands/ForPrisoners");
+ command_Toggle.isActive = () => ForPrisoners;
+ command_Toggle.toggleAction = delegate
+ {
+ SetBedOwnerTypeByInterface((!ForPrisoners) ? BedOwnerType.Prisoner : BedOwnerType.Colonist);
+ };
+ if (!RoomCanBePrisonCell(this.GetRoom()) && !ForPrisoners)
+ {
+ command_Toggle.Disable("CommandBedSetForPrisonersFailOutdoors".Translate());
+ }
+ command_Toggle.hotKey = KeyBindingDefOf.Misc3;
+ command_Toggle.turnOffSound = null;
+ command_Toggle.turnOnSound = null;
+ yield return command_Toggle;
+ }
+ }
+ if (def.building.bed_canBeMedical)
+ {
+ Command_Toggle command_Toggle2 = new Command_Toggle();
+ command_Toggle2.defaultLabel = "CommandBedSetAsMedicalLabel".Translate();
+ command_Toggle2.defaultDesc = "CommandBedSetAsMedicalDesc".Translate();
+ command_Toggle2.icon = ContentFinder.Get("UI/Commands/AsMedical");
+ command_Toggle2.isActive = () => Medical;
+ command_Toggle2.toggleAction = delegate
+ {
+ Medical = !Medical;
+ };
+ command_Toggle2.hotKey = KeyBindingDefOf.Misc2;
+ yield return command_Toggle2;
+ }
+ }
+
+ public void SetBedOwnerTypeByInterface(BedOwnerType ownerType)
+ {
+ if (lastBedOwnerSetChangeFrame == Time.frameCount)
+ {
+ return;
+ }
+ lastBedOwnerSetChangeFrame = Time.frameCount;
+ ((ForOwnerType != ownerType) ? SoundDefOf.Checkbox_TurnedOn : SoundDefOf.Checkbox_TurnedOff).PlayOneShotOnCamera();
+ List bedsToAffect = new List();
+ foreach (Building_Bed item in Find.Selector.SelectedObjects.OfType())
+ {
+ if (item.ForOwnerType == ownerType)
+ {
+ continue;
+ }
+ Room room = item.GetRoom();
+ if (room == null && ownerType != BedOwnerType.Prisoner)
+ {
+ if (!bedsToAffect.Contains(item))
+ {
+ bedsToAffect.Add(item);
+ }
+ continue;
+ }
+ foreach (Building_Bed containedBed in room.ContainedBeds)
+ {
+ if (containedBed.ForOwnerType != ownerType)
+ {
+ if (containedBed.ForOwnerType == BedOwnerType.Prisoner && !bedsToAffect.Contains(containedBed))
+ {
+ bedsToAffect.Add(containedBed);
+ }
+ else if (ownerType == BedOwnerType.Prisoner && RoomCanBePrisonCell(room) && !bedsToAffect.Contains(containedBed))
+ {
+ bedsToAffect.Add(containedBed);
+ }
+ else if (containedBed == item && !bedsToAffect.Contains(containedBed))
+ {
+ bedsToAffect.Add(containedBed);
+ }
+ }
+ }
+ }
+ Action action = delegate
+ {
+ List list = new List();
+ List list2 = new List();
+ foreach (Building_Bed item2 in bedsToAffect)
+ {
+ District district = item2.GetDistrict();
+ Room room2 = district.Room;
+ if (ownerType == BedOwnerType.Prisoner && room2.TouchesMapEdge)
+ {
+ item2.ForOwnerType = BedOwnerType.Colonist;
+ }
+ else
+ {
+ item2.ForOwnerType = ownerType;
+ }
+ if (!room2.TouchesMapEdge)
+ {
+ if (!list2.Contains(room2))
+ {
+ list2.Add(room2);
+ }
+ if (!list.Contains(district))
+ {
+ list.Add(district);
+ }
+ }
+ }
+ foreach (District item3 in list)
+ {
+ item3.Notify_RoomShapeOrContainedBedsChanged();
+ }
+ foreach (Room item4 in list2)
+ {
+ item4.Notify_RoomShapeChanged();
+ }
+ };
+ if (bedsToAffect.Where((Building_Bed b) => b.OwnersForReading.Any((Pawn owner) => owner.RaceProps.Humanlike) && b != this).Count() == 0)
+ {
+ action();
+ return;
+ }
+ StringBuilder stringBuilder = new StringBuilder();
+ if (!ModsConfig.IdeologyActive)
+ {
+ if (ownerType == BedOwnerType.Prisoner)
+ {
+ stringBuilder.Append("TurningOnPrisonerBedWarning".Translate());
+ }
+ else
+ {
+ stringBuilder.Append("TurningOffPrisonerBedWarning".Translate());
+ }
+ }
+ else
+ {
+ stringBuilder.Append("ChangingOwnerTypeBedWarning".Translate());
+ }
+ stringBuilder.AppendLine();
+ foreach (Building_Bed item5 in bedsToAffect)
+ {
+ if (ownerType != item5.ForOwnerType)
+ {
+ for (int i = 0; i < item5.OwnersForReading.Count; i++)
+ {
+ stringBuilder.AppendLine();
+ stringBuilder.Append(item5.OwnersForReading[i].LabelShort);
+ }
+ }
+ }
+ stringBuilder.AppendLine();
+ stringBuilder.AppendLine();
+ stringBuilder.Append("AreYouSure".Translate());
+ Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation(stringBuilder.ToString(), action));
+ }
+
+ public override string GetInspectString()
+ {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.Append(base.GetInspectString());
+ if (def.building.bed_humanlike && def.building.bed_DisplayOwnerType && base.Faction == Faction.OfPlayer)
+ {
+ switch (ForOwnerType)
+ {
+ case BedOwnerType.Prisoner:
+ stringBuilder.AppendInNewLine("ForPrisonerUse".Translate());
+ break;
+ case BedOwnerType.Slave:
+ stringBuilder.AppendInNewLine("ForSlaveUse".Translate());
+ break;
+ case BedOwnerType.Colonist:
+ stringBuilder.AppendInNewLine("ForColonistUse".Translate());
+ break;
+ default:
+ Log.Error($"Unknown bed owner type: {ForOwnerType}");
+ break;
+ }
+ }
+ if (Medical)
+ {
+ stringBuilder.AppendInNewLine("MedicalBed".Translate());
+ if (base.Spawned)
+ {
+ stringBuilder.AppendInNewLine("RoomInfectionChanceFactor".Translate() + ": " + this.GetRoom().GetStat(RoomStatDefOf.InfectionChanceFactor).ToStringPercent());
+ }
+ }
+ else if (PlayerCanSeeOwners && def.building.bed_DisplayOwnersInInspectString)
+ {
+ if (OwnersForReading.Count == 0)
+ {
+ stringBuilder.AppendInNewLine("Owner".Translate() + ": " + "Nobody".Translate());
+ }
+ else if (OwnersForReading.Count == 1)
+ {
+ stringBuilder.AppendInNewLine("Owner".Translate() + ": " + OwnersForReading[0].Label);
+ }
+ else
+ {
+ stringBuilder.AppendInNewLine("Owners".Translate() + ": ");
+ bool flag = false;
+ for (int i = 0; i < OwnersForReading.Count; i++)
+ {
+ if (flag)
+ {
+ stringBuilder.Append(", ");
+ }
+ flag = true;
+ stringBuilder.Append(OwnersForReading[i].LabelShort);
+ }
+ }
+ if (OwnersForReading.Count == 1 && ChildcareUtility.CanSuckle(OwnersForReading[0], out var _))
+ {
+ Pawn p = OwnersForReading[0];
+ float ambientTemperature = base.AmbientTemperature;
+ if (!p.SafeTemperatureRange().IncludesEpsilon(ambientTemperature))
+ {
+ stringBuilder.AppendInNewLine("BedUnsafeTemperature".Translate().Colorize(ColoredText.WarningColor));
+ }
+ else if (!p.ComfortableTemperatureRange().IncludesEpsilon(ambientTemperature))
+ {
+ stringBuilder.AppendInNewLine("BedUncomfortableTemperature".Translate());
+ }
+ }
+ }
+ return stringBuilder.ToString();
+ }
+
+ public override IEnumerable GetFloatMenuOptions(Pawn myPawn)
+ {
+ FloatMenuOption bedRestFloatMenuOption = GetBedRestFloatMenuOption(myPawn);
+ if (bedRestFloatMenuOption != null)
+ {
+ yield return bedRestFloatMenuOption;
+ }
+ }
+
+ public FloatMenuOption GetBedRestFloatMenuOption(Pawn myPawn)
+ {
+ if (myPawn.RaceProps.Humanlike && !ForPrisoners && Medical && !myPawn.Drafted && base.Faction == Faction.OfPlayer && RestUtility.CanUseBedEver(myPawn, def))
+ {
+ if (!HealthAIUtility.ShouldSeekMedicalRest(myPawn))
+ {
+ if (myPawn.health.surgeryBills.AnyShouldDoNow && !WorkGiver_PatientGoToBedTreatment.AnyAvailableDoctorFor(myPawn))
+ {
+ return new FloatMenuOption("UseMedicalBed".Translate() + " (" + "NoDoctor".Translate() + ")", null);
+ }
+ return new FloatMenuOption("UseMedicalBed".Translate() + " (" + "NotInjured".Translate() + ")", null);
+ }
+ if (myPawn.IsSlaveOfColony && !ForSlaves)
+ {
+ return new FloatMenuOption("UseMedicalBed".Translate() + " (" + "NotForSlaves".Translate() + ")", null);
+ }
+ Action action = delegate
+ {
+ if (!ForPrisoners && Medical && myPawn.CanReserveAndReach(this, PathEndMode.ClosestTouch, Danger.Deadly, SleepingSlotsCount, -1, null, ignoreOtherReservations: true))
+ {
+ if (myPawn.CurJobDef == JobDefOf.LayDown && myPawn.CurJob.GetTarget(TargetIndex.A).Thing == this)
+ {
+ myPawn.CurJob.restUntilHealed = true;
+ }
+ else
+ {
+ Job job = JobMaker.MakeJob(JobDefOf.LayDown, this);
+ job.restUntilHealed = true;
+ myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
+ }
+ myPawn.mindState.ResetLastDisturbanceTick();
+ }
+ };
+ return FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("UseMedicalBed".Translate(), action), myPawn, this, (AnyUnoccupiedSleepingSlot ? "ReservedBy" : "SomeoneElseSleeping").CapitalizeFirst());
+ }
+ return null;
+ }
+
+ public override void DrawGUIOverlay()
+ {
+ if (Medical || Find.CameraDriver.CurrentZoom != 0 || !PlayerCanSeeOwners)
+ {
+ return;
+ }
+ Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;
+ if (!OwnersForReading.Any())
+ {
+ GenMapUI.DrawThingLabel(this, "Unowned".Translate(), defaultThingLabelColor);
+ return;
+ }
+ if (OwnersForReading.Count == 1)
+ {
+ Pawn pawn = OwnersForReading[0];
+ if ((!pawn.InBed() || pawn.CurrentBed() != this) && (!pawn.RaceProps.Animal || Prefs.AnimalNameMode.ShouldDisplayAnimalName(pawn)))
+ {
+ GenMapUI.DrawThingLabel(this, pawn.LabelShort, defaultThingLabelColor);
+ }
+ return;
+ }
+ for (int i = 0; i < OwnersForReading.Count; i++)
+ {
+ Pawn pawn2 = OwnersForReading[i];
+ if (!pawn2.InBed() || OwnersForReading[i].CurrentBed() != this || !(pawn2.Position == GetSleepingSlotPos(i)))
+ {
+ if (pawn2.RaceProps.Animal && !Prefs.AnimalNameMode.ShouldDisplayAnimalName(pawn2))
+ {
+ break;
+ }
+ GenMapUI.DrawThingLabel(GetMultiOwnersLabelScreenPosFor(i), pawn2.LabelShort, defaultThingLabelColor);
+ }
+ }
+ }
+
+ public Pawn GetCurOccupant(int slotIndex)
+ {
+ if (!base.Spawned)
+ {
+ return null;
+ }
+ IntVec3 sleepingSlotPos = GetSleepingSlotPos(slotIndex);
+ List list = base.Map.thingGrid.ThingsListAt(sleepingSlotPos);
+ for (int i = 0; i < list.Count; i++)
+ {
+ if (list[i] is Pawn { CurJob: not null } pawn && pawn.GetPosture().InBed())
+ {
+ return pawn;
+ }
+ }
+ return null;
+ }
+
+ public int GetCurOccupantSlotIndex(Pawn curOccupant)
+ {
+ for (int i = 0; i < SleepingSlotsCount; i++)
+ {
+ if (GetCurOccupant(i) == curOccupant)
+ {
+ return i;
+ }
+ }
+ Log.Error("Could not find pawn " + curOccupant?.ToString() + " on any of sleeping slots.");
+ return 0;
+ }
+
+ public Pawn GetCurOccupantAt(IntVec3 pos)
+ {
+ for (int i = 0; i < SleepingSlotsCount; i++)
+ {
+ if (GetSleepingSlotPos(i) == pos)
+ {
+ return GetCurOccupant(i);
+ }
+ }
+ return null;
+ }
+
+ public IntVec3 GetSleepingSlotPos(int index)
+ {
+ return BedUtility.GetSleepingSlotPos(index, base.Position, base.Rotation, def.size);
+ }
+
+ public IntVec3 GetFootSlotPos(int index)
+ {
+ return BedUtility.GetFeetSlotPos(index, base.Position, base.Rotation, def.size);
+ }
+
+ public bool IsOwner(Pawn p)
+ {
+ int? assignedSleepingSlot;
+ return IsOwner(p, out assignedSleepingSlot);
+ }
+
+ public bool IsOwner(Pawn p, out int? assignedSleepingSlot)
+ {
+ int num = GetComp().AssignedPawnsForReading.IndexOf(p);
+ if (num >= 0)
+ {
+ assignedSleepingSlot = num;
+ return true;
+ }
+ assignedSleepingSlot = null;
+ return false;
+ }
+
+ private void RemoveAllOwners(bool destroyed = false)
+ {
+ for (int num = OwnersForReading.Count - 1; num >= 0; num--)
+ {
+ Pawn pawn = OwnersForReading[num];
+ pawn.ownership.UnclaimBed();
+ string key = "MessageBedLostAssignment";
+ if (destroyed)
+ {
+ key = "MessageBedDestroyed";
+ }
+ Messages.Message(key.Translate(def, pawn), new LookTargets(this, pawn), MessageTypeDefOf.CautionInput, historical: false);
+ }
+ }
+
+ private void NotifyRoomBedTypeChanged()
+ {
+ this.GetRoom()?.Notify_BedTypeChanged();
+ }
+
+ public void NotifyRoomAssignedPawnsChanged()
+ {
+ this.GetRoom()?.Notify_BedTypeChanged();
+ }
+
+ private void FacilityChanged()
+ {
+ CompFacility compFacility = this.TryGetComp();
+ CompAffectedByFacilities compAffectedByFacilities = this.TryGetComp();
+ compFacility?.Notify_ThingChanged();
+ compAffectedByFacilities?.Notify_ThingChanged();
+ }
+
+ private Vector3 GetMultiOwnersLabelScreenPosFor(int slotIndex)
+ {
+ IntVec3 sleepingSlotPos = GetSleepingSlotPos(slotIndex);
+ Vector3 drawPos = DrawPos;
+ if (base.Rotation.IsHorizontal)
+ {
+ drawPos.z = (float)sleepingSlotPos.z + 0.6f;
+ }
+ else
+ {
+ drawPos.x = (float)sleepingSlotPos.x + 0.5f;
+ drawPos.z += -0.4f;
+ }
+ Vector2 vector = drawPos.MapToUIPosition();
+ if (!base.Rotation.IsHorizontal && SleepingSlotsCount == 2)
+ {
+ vector = AdjustOwnerLabelPosToAvoidOverlapping(vector, slotIndex);
+ }
+ return vector;
+ }
+
+ private Vector3 AdjustOwnerLabelPosToAvoidOverlapping(Vector3 screenPos, int slotIndex)
+ {
+ Text.Font = GameFont.Tiny;
+ float num = Text.CalcSize(OwnersForReading[slotIndex].LabelShort).x + 1f;
+ Vector2 vector = DrawPos.MapToUIPosition();
+ float num2 = Mathf.Abs(screenPos.x - vector.x);
+ IntVec3 sleepingSlotPos = GetSleepingSlotPos(slotIndex);
+ if (num > num2 * 2f)
+ {
+ float num3 = 0f;
+ num3 = ((slotIndex != 0) ? ((float)GetSleepingSlotPos(0).x) : ((float)GetSleepingSlotPos(1).x));
+ if ((float)sleepingSlotPos.x < num3)
+ {
+ screenPos.x -= (num - num2 * 2f) / 2f;
+ }
+ else
+ {
+ screenPos.x += (num - num2 * 2f) / 2f;
+ }
+ }
+ return screenPos;
+ }
+
+ private bool RemoveLeastDesirableInteractionCells(List cells, Map map)
+ {
+ cells.RemoveAll(map, (Map innerMap, IntVec3 cell) => !cell.Standable(innerMap) || !TouchPathEndModeUtility.IsAdjacentOrInsideAndAllowedToTouch(cell, new LocalTargetInfo(this), map.pathing.Normal));
+ if (cells.RemoveAll_IfNotAll(map, delegate(Map innerMap, IntVec3 cell)
+ {
+ Building building = map.edificeGrid[cell];
+ return building == null || building.def?.IsBed != true;
+ }))
+ {
+ return cells.RemoveAll_IfNotAll(map, (Map innerMap, IntVec3 cell) => cell.GetDoor(map) == null);
+ }
+ return false;
+ }
+
+ public IntVec3? FindPreferredInteractionCell(IntVec3 occupantLocation, CellSearchPattern customSearchPattern = null)
+ {
+ CellRect cellRect = this.OccupiedRect();
+ if (!cellRect.Contains(occupantLocation))
+ {
+ Log.Error($"interiorLocation {occupantLocation} is not within the bounds of this bed {cellRect}.");
+ return null;
+ }
+ tmpOrderedInteractionCells.Clear();
+ (customSearchPattern ?? defaultBedInteractionCellsOrder).AddCellsToList(tmpOrderedInteractionCells, this, cellRect, occupantLocation, base.Rotation);
+ RemoveLeastDesirableInteractionCells(tmpOrderedInteractionCells, base.Map);
+ if (tmpOrderedInteractionCells.Count == 0)
+ {
+ return null;
+ }
+ return tmpOrderedInteractionCells[0];
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\RoomRoleWorker_Bedroom.txt`
+**相似度:** 0.5705
+
+```csharp
+public class RoomRoleWorker_Bedroom : RoomRoleWorker
+{
+ private static List tmpBeds = new List();
+
+ private static List children = new List();
+
+ private static List adults = new List();
+
+ public override float GetScore(Room room)
+ {
+ tmpBeds.Clear();
+ List containedAndAdjacentThings = room.ContainedAndAdjacentThings;
+ int num = 0;
+ for (int i = 0; i < containedAndAdjacentThings.Count; i++)
+ {
+ if (containedAndAdjacentThings[i] is Building_Bed building_Bed && building_Bed.def.building.bed_humanlike && building_Bed.def.building.bed_countsForBedroomOrBarracks)
+ {
+ if (building_Bed.Medical || building_Bed.ForPrisoners)
+ {
+ tmpBeds.Clear();
+ return 0f;
+ }
+ num++;
+ tmpBeds.Add(building_Bed);
+ }
+ }
+ if (num == 0)
+ {
+ tmpBeds.Clear();
+ return 0f;
+ }
+ bool num2 = IsBedroom(tmpBeds);
+ tmpBeds.Clear();
+ if (!num2)
+ {
+ return 0f;
+ }
+ return 100000f;
+ }
+
+ public static bool IsBedroom(List beds)
+ {
+ children.Clear();
+ adults.Clear();
+ bool result = IsBedroomHelper(beds);
+ children.Clear();
+ adults.Clear();
+ return result;
+ }
+
+ private static bool IsBedroomHelper(List beds)
+ {
+ List list = null;
+ int num = 0;
+ int num2 = 0;
+ int num3 = 0;
+ foreach (Building_Bed bed in beds)
+ {
+ List ownersForReading = bed.OwnersForReading;
+ if (ownersForReading.NullOrEmpty() && bed.def.building.bed_emptyCountsForBarracks)
+ {
+ num++;
+ continue;
+ }
+ if (ownersForReading.Count > 0)
+ {
+ num2++;
+ }
+ bool flag = false;
+ foreach (Pawn item in ownersForReading)
+ {
+ if (item.DevelopmentalStage.Juvenile())
+ {
+ children.Add(item);
+ continue;
+ }
+ adults.Add(item);
+ if (list == null)
+ {
+ list = item.GetLoveCluster();
+ }
+ if (!list.Contains(item))
+ {
+ flag = true;
+ }
+ }
+ if (flag)
+ {
+ num3++;
+ }
+ }
+ if (num == 1 && num2 == 0)
+ {
+ return true;
+ }
+ if (num == 0 && num2 == 1)
+ {
+ return true;
+ }
+ if (num > 0)
+ {
+ return false;
+ }
+ if (adults.NullOrEmpty())
+ {
+ return true;
+ }
+ if (num3 > 0)
+ {
+ return false;
+ }
+ foreach (Pawn child in children)
+ {
+ Pawn mother = child.GetMother();
+ Pawn father = child.GetFather();
+ if (!adults.Any((Pawn adult) => adult == mother || adult == father))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\RoomRoleWorker_Barracks.txt`
+**相似度:** 0.5548
+
+```csharp
+public class RoomRoleWorker_Barracks : RoomRoleWorker
+{
+ private static List tmpBeds = new List();
+
+ public override float GetScore(Room room)
+ {
+ tmpBeds.Clear();
+ int num = 0;
+ List containedAndAdjacentThings = room.ContainedAndAdjacentThings;
+ for (int i = 0; i < containedAndAdjacentThings.Count; i++)
+ {
+ if (containedAndAdjacentThings[i] is Building_Bed building_Bed && building_Bed.def.building.bed_humanlike && building_Bed.def.building.bed_countsForBedroomOrBarracks)
+ {
+ if (building_Bed.ForPrisoners)
+ {
+ tmpBeds.Clear();
+ return 0f;
+ }
+ tmpBeds.Add(building_Bed);
+ if (!building_Bed.Medical)
+ {
+ num++;
+ }
+ }
+ }
+ bool num2 = RoomRoleWorker_Bedroom.IsBedroom(tmpBeds);
+ tmpBeds.Clear();
+ if (num2)
+ {
+ return 0f;
+ }
+ return (float)num * 100100f;
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld.BaseGen\SymbolResolver_PrisonerBed.txt`
+**相似度:** 0.5535
+
+```csharp
+public class SymbolResolver_PrisonerBed : SymbolResolver
+{
+ public override void Resolve(ResolveParams rp)
+ {
+ ResolveParams resolveParams = rp;
+ Action prevPostThingSpawn = resolveParams.postThingSpawn;
+ resolveParams.postThingSpawn = delegate(Thing x)
+ {
+ if (prevPostThingSpawn != null)
+ {
+ prevPostThingSpawn(x);
+ }
+ if (x is Building_Bed building_Bed)
+ {
+ building_Bed.ForPrisoners = true;
+ }
+ };
+ BaseGen.symbolStack.Push("bed", resolveParams);
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\WorkGiver_TakeToBed.txt`
+**相似度:** 0.5270
+
+```csharp
+public abstract class WorkGiver_TakeToBed : WorkGiver_Scanner
+{
+ protected Building_Bed FindBed(Pawn pawn, Pawn patient)
+ {
+ return RestUtility.FindBedFor(patient, pawn, checkSocialProperness: false, ignoreOtherReservations: false, patient.GuestStatus);
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\CompAssignableToPawn_DeathrestCasket.txt`
+**相似度:** 0.5238
+
+```csharp
+public class CompAssignableToPawn_DeathrestCasket : CompAssignableToPawn_Bed
+{
+ public override string CompInspectStringExtra()
+ {
+ return null;
+ }
+
+ public override bool AssignedAnything(Pawn pawn)
+ {
+ return pawn.ownership.AssignedDeathrestCasket != null;
+ }
+
+ public override void TryAssignPawn(Pawn pawn)
+ {
+ Building_Bed building_Bed = (Building_Bed)parent;
+ pawn.ownership.ClaimDeathrestCasket(building_Bed);
+ building_Bed.NotifyRoomAssignedPawnsChanged();
+ }
+
+ public override void TryUnassignPawn(Pawn pawn, bool sort = true, bool uninstall = false)
+ {
+ Building_Bed ownedBed = pawn.ownership.OwnedBed;
+ pawn.ownership.UnclaimDeathrestCasket();
+ ownedBed?.NotifyRoomAssignedPawnsChanged();
+ }
+
+ public override AcceptanceReport CanAssignTo(Pawn pawn)
+ {
+ Building_Bed building_Bed = (Building_Bed)parent;
+ if (pawn.BodySize > building_Bed.def.building.bed_maxBodySize)
+ {
+ return "TooLargeForBed".Translate();
+ }
+ if (building_Bed.ForSlaves && !pawn.IsSlave)
+ {
+ return "CannotAssignBedToColonist".Translate();
+ }
+ if (building_Bed.ForColonists && pawn.IsSlave)
+ {
+ return "CannotAssignBedToSlave".Translate();
+ }
+ CompDeathrestBindable compDeathrestBindable = parent.TryGetComp();
+ if (compDeathrestBindable != null && compDeathrestBindable.BoundPawn != null && compDeathrestBindable.BoundPawn != pawn)
+ {
+ return "CannotAssignAlreadyBound".Translate(compDeathrestBindable.BoundPawn);
+ }
+ Gene_Deathrest gene_Deathrest = pawn.genes?.GetFirstGeneOfType();
+ if (gene_Deathrest == null)
+ {
+ return "CannotAssignBedCannotDeathrest".Translate();
+ }
+ if (compDeathrestBindable != null && gene_Deathrest.BindingWillExceedStackLimit(compDeathrestBindable))
+ {
+ return "CannotAssignBedCannotBindToMoreBuildings".Translate(NamedArgumentUtility.Named(parent.def, "BUILDING"));
+ }
+ return AcceptanceReport.WasAccepted;
+ }
+
+ protected override void PostPostExposeData()
+ {
+ if (Scribe.mode == LoadSaveMode.PostLoadInit && ModsConfig.BiotechActive && assignedPawns.RemoveAll((Pawn x) => x.ownership.AssignedDeathrestCasket != parent) > 0)
+ {
+ Log.Warning(parent.ToStringSafe() + " had pawns assigned that don't have it as an assigned bed. Removing.");
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/MCP/vector_cache/CarryToBiosculpterPod-JobDefOf-JobDriver_CarryToBiosculpterPod.txt b/MCP/vector_cache/CarryToBiosculpterPod-JobDefOf-JobDriver_CarryToBiosculpterPod.txt
new file mode 100644
index 00000000..cbec2925
--- /dev/null
+++ b/MCP/vector_cache/CarryToBiosculpterPod-JobDefOf-JobDriver_CarryToBiosculpterPod.txt
@@ -0,0 +1,198 @@
+根据向量相似度分析,与 'JobDriver_CarryToBiosculpterPod, JobDefOf, CarryToBiosculpterPod' 最相关的代码定义如下:
+
+---
+**文件路径 (精确匹配):** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\JobDriver_CarryToBiosculpterPod.txt`
+
+```csharp
+public class JobDriver_CarryToBiosculpterPod : JobDriver
+{
+ private const TargetIndex TakeeInd = TargetIndex.A;
+
+ private const TargetIndex IngredientInd = TargetIndex.B;
+
+ private const TargetIndex PodInd = TargetIndex.C;
+
+ private List pickedUpIngredients = new List();
+
+ private List thingsToTransfer = new List();
+
+ private Pawn Takee => (Pawn)job.GetTarget(TargetIndex.A).Thing;
+
+ private CompBiosculpterPod Pod => job.GetTarget(TargetIndex.C).Thing.TryGetComp();
+
+ public override bool TryMakePreToilReservations(bool errorOnFailed)
+ {
+ if (!pawn.Reserve(Takee, job, 1, -1, null, errorOnFailed) || !pawn.Reserve(Pod.parent, job, 1, -1, null, errorOnFailed))
+ {
+ return false;
+ }
+ List targetQueue = job.GetTargetQueue(TargetIndex.B);
+ for (int i = 0; i < targetQueue.Count; i++)
+ {
+ if (!pawn.Reserve(targetQueue[i], job, 1, -1, null, errorOnFailed))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected override IEnumerable MakeNewToils()
+ {
+ if (!ModLister.CheckIdeology("Biosculpting"))
+ {
+ yield break;
+ }
+ AddFinishAction(delegate
+ {
+ if (Pod != null)
+ {
+ if (Pod.queuedEnterJob == job)
+ {
+ Pod.ClearQueuedInformation();
+ }
+ if (Pod.Occupant != Takee)
+ {
+ foreach (Thing pickedUpIngredient in pickedUpIngredients)
+ {
+ Thing lastResultingThing;
+ if (pawn.inventory.Contains(pickedUpIngredient))
+ {
+ pawn.inventory.innerContainer.TryDrop(pickedUpIngredient, ThingPlaceMode.Near, out lastResultingThing);
+ }
+ else if (Takee.inventory.Contains(pickedUpIngredient))
+ {
+ Takee.inventory.innerContainer.TryDrop(pickedUpIngredient, ThingPlaceMode.Near, out lastResultingThing);
+ }
+ }
+ }
+ }
+ });
+ this.FailOnDestroyedOrNull(TargetIndex.A);
+ this.FailOnDestroyedOrNull(TargetIndex.C);
+ this.FailOnAggroMentalState(TargetIndex.A);
+ this.FailOn(() => job.biosculpterCycleKey == null || !Pod.CanAcceptOnceCycleChosen(Takee));
+ Toil goToTakee = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.OnCell).FailOnDestroyedNullOrForbidden(TargetIndex.A).FailOnDespawnedNullOrForbidden(TargetIndex.C)
+ .FailOn(() => Takee.IsFreeColonist && !Takee.Downed)
+ .FailOnSomeonePhysicallyInteracting(TargetIndex.A);
+ Toil startCarryingTakee = Toils_Haul.StartCarryThing(TargetIndex.A);
+ Toil goToThing = Toils_Goto.GotoThing(TargetIndex.C, PathEndMode.InteractionCell);
+ Toil toil = Toils_Jump.JumpIf(goToThing, () => pawn.IsCarryingPawn(Takee) && job.GetTargetQueue(TargetIndex.B).NullOrEmpty());
+ Toil jumpIfGoToTakee = Toils_Jump.JumpIf(goToTakee, () => job.GetTargetQueue(TargetIndex.B).NullOrEmpty());
+ yield return toil;
+ yield return jumpIfGoToTakee;
+ yield return DropCarryToGrabIngredients();
+ foreach (Toil item in JobDriver_EnterBiosculpterPod.CollectIngredientsToilsHelper(TargetIndex.B, pawn, pickedUpIngredients))
+ {
+ yield return item;
+ }
+ yield return goToTakee;
+ yield return TransferIngredientsAndPrepareCarryDownedPawn();
+ yield return startCarryingTakee;
+ yield return goToThing.FailOn(() => !Pod.PawnCarryingExtraCycleIngredients(Takee, job.biosculpterCycleKey));
+ yield return JobDriver_EnterBiosculpterPod.PrepareToEnterToil(TargetIndex.C);
+ Toil toil2 = ToilMaker.MakeToil("MakeNewToils");
+ toil2.initAction = delegate
+ {
+ Pod.TryAcceptPawn(Takee, job.biosculpterCycleKey);
+ };
+ toil2.defaultCompleteMode = ToilCompleteMode.Instant;
+ yield return toil2;
+ }
+
+ private Toil TransferIngredientsAndPrepareCarryDownedPawn()
+ {
+ Toil toil = ToilMaker.MakeToil("TransferIngredientsAndPrepareCarryDownedPawn");
+ toil.initAction = delegate
+ {
+ List extraRequiredIngredients = Pod.GetCycle(job.biosculpterCycleKey).Props.extraRequiredIngredients;
+ if (extraRequiredIngredients != null && !Pod.devFillPodLatch)
+ {
+ ThingOwner innerContainer = pawn.inventory.innerContainer;
+ foreach (ThingDefCountClass item in extraRequiredIngredients)
+ {
+ if (Takee.inventory.Count(item.thingDef) < item.count)
+ {
+ if (pawn.inventory.Count(item.thingDef) < item.count)
+ {
+ EndJobWith(JobCondition.Incompletable);
+ return;
+ }
+ thingsToTransfer.Clear();
+ int num = 0;
+ foreach (Thing item2 in innerContainer)
+ {
+ if (num >= item.count)
+ {
+ break;
+ }
+ if (item2.def == item.thingDef)
+ {
+ int num2 = Mathf.Min(item.count - num, item2.stackCount);
+ thingsToTransfer.Add(new ThingCount(item2, Mathf.Min(item.count - num, item2.stackCount)));
+ num += num2;
+ }
+ }
+ foreach (ThingCount item3 in thingsToTransfer)
+ {
+ int num3 = Takee.inventory.innerContainer.TryAddOrTransfer(item3.Thing, item3.Count);
+ if (num3 != item3.Count)
+ {
+ Log.Warning($"Only able to transfer x{num3} of the expected x{item3.Count} of {item3.Thing.Label} while CarryToBiosculpter");
+ EndJobWith(JobCondition.Incompletable);
+ return;
+ }
+ }
+ }
+ }
+ }
+ job.count = 1;
+ };
+ toil.defaultCompleteMode = ToilCompleteMode.Instant;
+ return toil;
+ }
+
+ private Toil DropCarryToGrabIngredients()
+ {
+ Toil toil = ToilMaker.MakeToil("DropCarryToGrabIngredients");
+ toil.initAction = delegate
+ {
+ if (pawn.carryTracker.CarriedThing != null)
+ {
+ pawn.carryTracker.TryDropCarriedThing(pawn.Position, ThingPlaceMode.Near, out var _);
+ }
+ };
+ toil.defaultCompleteMode = ToilCompleteMode.Instant;
+ return toil;
+ }
+
+ public override string GetReport()
+ {
+ if (!Pod.PawnCarryingExtraCycleIngredients(Takee, job.biosculpterCycleKey) && !Pod.PawnCarryingExtraCycleIngredients(pawn, job.biosculpterCycleKey))
+ {
+ return "BiosculpterJobReportCollectIngredients".Translate();
+ }
+ return base.GetReport();
+ }
+
+ public override void ExposeData()
+ {
+ base.ExposeData();
+ Scribe_Collections.Look(ref pickedUpIngredients, "pickedUpIngredients", LookMode.Reference);
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\Ideology\Defs\JobDefs\Jobs_Misc.xml`
+**相似度:** 0.5483
+
+```xml
+ CarryToBiosculpterPod
+ JobDriver_CarryToBiosculpterPod
+ carrying TargetA to biosculpter pod.
+ false
+
+
+
+ RecolorApparel
+```
\ No newline at end of file
diff --git a/MCP/vector_cache/ColonistBarColonistDrawer-DrawIcons.txt b/MCP/vector_cache/ColonistBarColonistDrawer-DrawIcons.txt
new file mode 100644
index 00000000..54867b4b
--- /dev/null
+++ b/MCP/vector_cache/ColonistBarColonistDrawer-DrawIcons.txt
@@ -0,0 +1,985 @@
+根据向量相似度分析,与 'DrawIcons, ColonistBarColonistDrawer' 最相关的代码定义如下:
+
+---
+**文件路径 (精确匹配):** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\ColonistBarColonistDrawer.txt`
+
+```csharp
+public class ColonistBarColonistDrawer
+{
+ private struct IconDrawCall
+ {
+ public Texture2D texture;
+
+ public string tooltip;
+
+ public Color? color;
+
+ public IconDrawCall(Texture2D texture, string tooltip = null, Color? color = null)
+ {
+ this.texture = texture;
+ this.tooltip = tooltip;
+ this.color = color;
+ }
+ }
+
+ private Dictionary pawnLabelsCache = new Dictionary();
+
+ private static readonly Texture2D MoodBGTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.4f, 0.47f, 0.53f, 0.44f));
+
+ private static readonly Texture2D MoodAtlas = ContentFinder.Get("UI/Widgets/SubtleGradient");
+
+ private static readonly Texture2D DeadColonistTex = ContentFinder.Get("UI/Misc/DeadColonist");
+
+ private static readonly Texture2D Icon_FormingCaravan = ContentFinder.Get("UI/Icons/ColonistBar/FormingCaravan");
+
+ private static readonly Texture2D Icon_MentalStateNonAggro = ContentFinder.Get("UI/Icons/ColonistBar/MentalStateNonAggro");
+
+ private static readonly Texture2D Icon_MentalStateAggro = ContentFinder.Get("UI/Icons/ColonistBar/MentalStateAggro");
+
+ private static readonly Texture2D Icon_MedicalRest = ContentFinder.Get("UI/Icons/ColonistBar/MedicalRest");
+
+ private static readonly Texture2D Icon_Sleeping = ContentFinder.Get("UI/Icons/ColonistBar/Sleeping");
+
+ private static readonly Texture2D Icon_Fleeing = ContentFinder.Get("UI/Icons/ColonistBar/Fleeing");
+
+ private static readonly Texture2D Icon_Attacking = ContentFinder.Get("UI/Icons/ColonistBar/Attacking");
+
+ private static readonly Texture2D Icon_Idle = ContentFinder.Get("UI/Icons/ColonistBar/Idle");
+
+ private static readonly Texture2D Icon_Burning = ContentFinder.Get("UI/Icons/ColonistBar/Burning");
+
+ private static readonly Texture2D Icon_Inspired = ContentFinder.Get("UI/Icons/ColonistBar/Inspired");
+
+ private static readonly Texture2D MoodGradient = ContentFinder.Get("UI/Widgets/MoodGradient");
+
+ public static readonly Vector2 PawnTextureSize = new Vector2(ColonistBar.BaseSize.x - 2f, 75f);
+
+ public static readonly Vector3 PawnTextureCameraOffset = new Vector3(0f, 0f, 0.3f);
+
+ public const float PawnTextureCameraZoom = 1.28205f;
+
+ private const float PawnTextureHorizontalPadding = 1f;
+
+ private static readonly float BaseIconAreaWidth = PawnTextureSize.x;
+
+ private static readonly float BaseIconMaxSize = 20f;
+
+ private const float BaseGroupFrameMargin = 12f;
+
+ public const float DoubleClickTime = 0.5f;
+
+ public const float FactionIconSpacing = 2f;
+
+ public const float IdeoRoleIconSpacing = 2f;
+
+ public const float SlaveIconSpacing = 2f;
+
+ private const float MoodGradientHeight = 35f;
+
+ private static List tmpIconsToDraw = new List();
+
+ private ColonistBar ColonistBar => Find.ColonistBar;
+
+ public void DrawColonist(Rect rect, Pawn colonist, Map pawnMap, bool highlight, bool reordering)
+ {
+ float alpha = ColonistBar.GetEntryRectAlpha(rect);
+ bool num = Prefs.VisibleMood && colonist.needs?.mood != null && colonist.mindState.mentalBreaker.CanDoRandomMentalBreaks && !colonist.Dead && !colonist.Downed;
+ MoodThreshold moodThreshold = MoodThresholdExtensions.CurrentMoodThresholdFor(colonist);
+ Color color = moodThreshold.GetColor();
+ color.a *= alpha;
+ ApplyEntryInAnotherMapAlphaFactor(pawnMap, ref alpha);
+ if (reordering)
+ {
+ alpha *= 0.5f;
+ }
+ Color color3 = (GUI.color = new Color(1f, 1f, 1f, alpha));
+ if (num && alpha >= 1f)
+ {
+ float num2 = moodThreshold.EdgeExpansion();
+ if (num2 > 0f)
+ {
+ GUI.color = color;
+ Widgets.DrawAtlas(rect.ExpandedBy(num2), MoodAtlas);
+ GUI.color = color3;
+ }
+ }
+ GUI.DrawTexture(rect, ColonistBar.BGTex);
+ if (colonist.needs != null && colonist.needs.mood != null)
+ {
+ Rect position = rect.ContractedBy(2f);
+ float num3 = position.height * colonist.needs.mood.CurLevelPercentage;
+ position.yMin = position.yMax - num3;
+ position.height = num3;
+ GUI.DrawTexture(position, MoodBGTex);
+ }
+ if (num && alpha >= 1f)
+ {
+ float transparency = ((moodThreshold < MoodThreshold.Major) ? 0.1f : 0.15f);
+ Widgets.DrawBoxSolid(rect, moodThreshold.GetColor().ToTransparent(transparency));
+ }
+ if (highlight)
+ {
+ int thickness = ((rect.width <= 22f) ? 2 : 3);
+ GUI.color = Color.white;
+ Widgets.DrawBox(rect, thickness);
+ GUI.color = color3;
+ }
+ Rect rect2 = rect.ContractedBy(-2f * ColonistBar.Scale);
+ if ((colonist.Dead ? Find.Selector.SelectedObjects.Contains(colonist.Corpse) : Find.Selector.SelectedObjects.Contains(colonist)) && !WorldRendererUtility.WorldSelected)
+ {
+ DrawSelectionOverlayOnGUI(colonist, rect2);
+ }
+ else if (WorldRendererUtility.WorldSelected && colonist.IsCaravanMember() && Find.WorldSelector.IsSelected(colonist.GetCaravan()))
+ {
+ DrawCaravanSelectionOverlayOnGUI(colonist.GetCaravan(), rect2);
+ }
+ GUI.DrawTexture(GetPawnTextureRect(rect.position), PortraitsCache.Get(colonist, PawnTextureSize, Rot4.South, PawnTextureCameraOffset, 1.28205f));
+ if (num)
+ {
+ Rect rect3 = rect.ContractedBy(1f);
+ Widgets.BeginGroup(rect3);
+ Rect position2 = rect3.AtZero();
+ position2.yMin = position2.yMax - 35f;
+ GUI.color = color;
+ GUI.DrawTexture(position2, MoodGradient);
+ GUI.color = color3;
+ Widgets.EndGroup();
+ }
+ GUI.color = new Color(1f, 1f, 1f, alpha * 0.8f);
+ DrawIcons(rect, colonist);
+ GUI.color = color3;
+ if (colonist.Dead)
+ {
+ GUI.DrawTexture(rect, DeadColonistTex);
+ }
+ float num4 = 4f * ColonistBar.Scale;
+ Vector2 pos = new Vector2(rect.center.x, rect.yMax - num4);
+ GenMapUI.DrawPawnLabel(colonist, pos, alpha, rect.width + ColonistBar.SpaceBetweenColonistsHorizontal - 2f, pawnLabelsCache);
+ Text.Font = GameFont.Small;
+ GUI.color = Color.white;
+ }
+
+ private Rect GroupFrameRect(int group)
+ {
+ float num = 99999f;
+ float num2 = 0f;
+ float num3 = 0f;
+ List entries = ColonistBar.Entries;
+ List drawLocs = ColonistBar.DrawLocs;
+ for (int i = 0; i < entries.Count; i++)
+ {
+ if (entries[i].group == group)
+ {
+ num = Mathf.Min(num, drawLocs[i].x);
+ num2 = Mathf.Max(num2, drawLocs[i].x + ColonistBar.Size.x);
+ num3 = Mathf.Max(num3, drawLocs[i].y + ColonistBar.Size.y);
+ }
+ }
+ return new Rect(num, 0f, num2 - num, num3 - 0f).ContractedBy(-12f * ColonistBar.Scale);
+ }
+
+ public void DrawGroupFrame(int group)
+ {
+ Rect position = GroupFrameRect(group);
+ Map map = ColonistBar.Entries.Find((ColonistBar.Entry x) => x.group == group).map;
+ float num = ((map == null) ? ((!WorldRendererUtility.WorldSelected) ? 0.75f : 1f) : ((map == Find.CurrentMap && !WorldRendererUtility.WorldSelected) ? 1f : 0.75f));
+ Widgets.DrawRectFast(position, new Color(0.5f, 0.5f, 0.5f, 0.4f * num));
+ }
+
+ private void ApplyEntryInAnotherMapAlphaFactor(Map map, ref float alpha)
+ {
+ if (map == null)
+ {
+ if (!WorldRendererUtility.WorldSelected)
+ {
+ alpha = Mathf.Min(alpha, 0.4f);
+ }
+ }
+ else if (map != Find.CurrentMap || WorldRendererUtility.WorldSelected)
+ {
+ alpha = Mathf.Min(alpha, 0.4f);
+ }
+ }
+
+ public void HandleClicks(Rect rect, Pawn colonist, int reorderableGroup, out bool reordering)
+ {
+ if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 2 && Mouse.IsOver(rect))
+ {
+ Event.current.Use();
+ CameraJumper.TryJump(colonist);
+ }
+ reordering = ReorderableWidget.Reorderable(reorderableGroup, rect, useRightButton: true);
+ if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && Mouse.IsOver(rect))
+ {
+ Event.current.Use();
+ }
+ }
+
+ public void HandleGroupFrameClicks(int group)
+ {
+ Rect rect = GroupFrameRect(group);
+ if (Event.current.type == EventType.MouseUp && Event.current.button == 0 && Mouse.IsOver(rect) && !ColonistBar.AnyColonistOrCorpseAt(UI.MousePositionOnUIInverted))
+ {
+ bool worldSelected = WorldRendererUtility.WorldSelected;
+ if ((!worldSelected && !Find.Selector.dragBox.IsValidAndActive) || (worldSelected && !Find.WorldSelector.dragBox.IsValidAndActive))
+ {
+ Find.Selector.dragBox.active = false;
+ Find.WorldSelector.dragBox.active = false;
+ ColonistBar.Entry entry = ColonistBar.Entries.Find((ColonistBar.Entry x) => x.group == group);
+ Map map = entry.map;
+ if (map == null)
+ {
+ if (WorldRendererUtility.WorldSelected)
+ {
+ CameraJumper.TrySelect(entry.pawn);
+ }
+ else
+ {
+ CameraJumper.TryJumpAndSelect(entry.pawn);
+ }
+ }
+ else
+ {
+ if (!CameraJumper.TryHideWorld() && Find.CurrentMap != map)
+ {
+ SoundDefOf.MapSelected.PlayOneShotOnCamera();
+ }
+ Current.Game.CurrentMap = map;
+ }
+ }
+ }
+ if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && Mouse.IsOver(rect))
+ {
+ Event.current.Use();
+ }
+ }
+
+ public void Notify_RecachedEntries()
+ {
+ pawnLabelsCache.Clear();
+ }
+
+ public void ClearLabelCache()
+ {
+ pawnLabelsCache.Clear();
+ }
+
+ public Rect GetPawnTextureRect(Vector2 pos)
+ {
+ float x = pos.x;
+ float y = pos.y;
+ Vector2 vector = PawnTextureSize * ColonistBar.Scale;
+ return new Rect(x + 1f, y - (vector.y - ColonistBar.Size.y) - 1f, vector.x, vector.y).ContractedBy(1f);
+ }
+
+ private void DrawIcons(Rect rect, Pawn colonist)
+ {
+ if (colonist.Dead)
+ {
+ return;
+ }
+ tmpIconsToDraw.Clear();
+ bool flag = false;
+ if (colonist.CurJob != null)
+ {
+ JobDef def = colonist.CurJob.def;
+ if (def == JobDefOf.AttackMelee || def == JobDefOf.AttackStatic)
+ {
+ flag = true;
+ }
+ else if (def == JobDefOf.Wait_Combat && colonist.stances.curStance is Stance_Busy stance_Busy && stance_Busy.focusTarg.IsValid)
+ {
+ flag = true;
+ }
+ }
+ if (colonist.IsFormingCaravan())
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_FormingCaravan, "ActivityIconFormingCaravan".Translate()));
+ }
+ if (colonist.InAggroMentalState)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_MentalStateAggro, colonist.MentalStateDef.LabelCap));
+ }
+ else if (colonist.InMentalState)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_MentalStateNonAggro, colonist.MentalStateDef.LabelCap));
+ }
+ else if (colonist.InBed() && colonist.CurrentBed().Medical)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_MedicalRest, "ActivityIconMedicalRest".Translate()));
+ }
+ else
+ {
+ if (colonist.CurJob != null && colonist.jobs.curDriver.asleep)
+ {
+ goto IL_01c5;
+ }
+ if (colonist.GetCaravan() != null)
+ {
+ Pawn_NeedsTracker needs = colonist.needs;
+ if (needs != null && needs.rest?.Resting == true)
+ {
+ goto IL_01c5;
+ }
+ }
+ if (colonist.CurJob != null && colonist.CurJob.def == JobDefOf.FleeAndCower)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_Fleeing, "ActivityIconFleeing".Translate()));
+ }
+ else if (flag)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_Attacking, "ActivityIconAttacking".Translate()));
+ }
+ else if (colonist.mindState.IsIdle && GenDate.DaysPassed >= 1)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_Idle, "ActivityIconIdle".Translate()));
+ }
+ }
+ goto IL_02b4;
+ IL_01c5:
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_Sleeping, "ActivityIconSleeping".Translate()));
+ goto IL_02b4;
+ IL_02b4:
+ if (colonist.IsBurning())
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_Burning, "ActivityIconBurning".Translate()));
+ }
+ if (colonist.Inspired)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(Icon_Inspired, colonist.InspirationDef.LabelCap));
+ }
+ if (colonist.IsSlaveOfColony)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(colonist.guest.GetIcon()));
+ }
+ else
+ {
+ bool flag2 = false;
+ if (colonist.Ideo != null)
+ {
+ Ideo ideo = colonist.Ideo;
+ Precept_Role role = ideo.GetRole(colonist);
+ if (role != null)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(role.Icon, null, ideo.Color));
+ flag2 = true;
+ }
+ }
+ if (!flag2)
+ {
+ Faction faction = null;
+ if (colonist.HasExtraMiniFaction())
+ {
+ faction = colonist.GetExtraMiniFaction();
+ }
+ else if (colonist.HasExtraHomeFaction())
+ {
+ faction = colonist.GetExtraHomeFaction();
+ }
+ if (faction != null)
+ {
+ tmpIconsToDraw.Add(new IconDrawCall(faction.def.FactionIcon, null, faction.Color));
+ }
+ }
+ }
+ float num = Mathf.Min(BaseIconAreaWidth / (float)tmpIconsToDraw.Count, BaseIconMaxSize) * ColonistBar.Scale;
+ Vector2 pos = new Vector2(rect.x + 1f, rect.yMax - num - 1f);
+ foreach (IconDrawCall item in tmpIconsToDraw)
+ {
+ GUI.color = item.color ?? Color.white;
+ DrawIcon(item.texture, ref pos, num, item.tooltip);
+ GUI.color = Color.white;
+ }
+ }
+
+ private void DrawIcon(Texture2D icon, ref Vector2 pos, float iconSize, string tooltip = null)
+ {
+ Rect rect = new Rect(pos.x, pos.y, iconSize, iconSize);
+ GUI.DrawTexture(rect, icon);
+ if (tooltip != null)
+ {
+ TooltipHandler.TipRegion(rect, tooltip);
+ }
+ pos.x += iconSize;
+ }
+
+ private void DrawSelectionOverlayOnGUI(Pawn colonist, Rect rect)
+ {
+ Thing target = colonist;
+ if (colonist.Dead)
+ {
+ target = colonist.Corpse;
+ }
+ SelectionDrawerUtility.DrawSelectionOverlayOnGUI(target, rect, 0.4f * ColonistBar.Scale, 20f * ColonistBar.Scale);
+ }
+
+ private void DrawCaravanSelectionOverlayOnGUI(Caravan caravan, Rect rect)
+ {
+ SelectionDrawerUtility.DrawSelectionOverlayOnGUI(caravan, rect, 0.4f * ColonistBar.Scale, 20f * ColonistBar.Scale);
+ }
+}
+```
+---
+**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\ColonistBar.txt`
+**相似度:** 0.7704
+
+```csharp
+public class ColonistBar
+{
+ public struct Entry
+ {
+ public Pawn pawn;
+
+ public Map map;
+
+ public int group;
+
+ public Action reorderAction;
+
+ public Action extraDraggedItemOnGUI;
+
+ public Entry(Pawn pawn, Map map, int group)
+ {
+ this.pawn = pawn;
+ this.map = map;
+ this.group = group;
+ reorderAction = delegate(int from, int to)
+ {
+ Find.ColonistBar.Reorder(from, to, group);
+ };
+ extraDraggedItemOnGUI = delegate(int index, Vector2 dragStartPos)
+ {
+ Find.ColonistBar.DrawColonistMouseAttachment(index, dragStartPos, group);
+ };
+ }
+ }
+
+ public ColonistBarColonistDrawer drawer = new ColonistBarColonistDrawer();
+
+ private ColonistBarDrawLocsFinder drawLocsFinder = new ColonistBarDrawLocsFinder();
+
+ private List cachedEntries = new List();
+
+ private List cachedDrawLocs = new List();
+
+ private List cachedReorderableGroups = new List();
+
+ private float cachedScale = 1f;
+
+ private bool entriesDirty = true;
+
+ private List colonistsToHighlight = new List();
+
+ public static readonly Texture2D BGTex = Command.BGTex;
+
+ public static readonly Vector2 BaseSize = new Vector2(48f, 48f);
+
+ public const float BaseSelectedTexJump = 20f;
+
+ public const float BaseSelectedTexScale = 0.4f;
+
+ public const float EntryInAnotherMapAlpha = 0.4f;
+
+ public const float BaseSpaceBetweenGroups = 25f;
+
+ public const float BaseSpaceBetweenColonistsHorizontal = 24f;
+
+ public const float BaseSpaceBetweenColonistsVertical = 32f;
+
+ private const float WeaponIconOffsetScaleFactor = 1.05f;
+
+ private const float WeaponIconScaleFactor = 0.75f;
+
+ private static List tmpPawns = new List();
+
+ private static List