diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 827718b..f3920fc 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/1.6/1.6/Defs/Effects/ARA_Flecks.xml b/1.6/1.6/Defs/Effects/ARA_Flecks.xml index 9cf1eea..003067e 100644 --- a/1.6/1.6/Defs/Effects/ARA_Flecks.xml +++ b/1.6/1.6/Defs/Effects/ARA_Flecks.xml @@ -200,7 +200,7 @@ ARA_Mote_Melee_Attack_Main 1 (170,74,68) - 3.5~4.5 + 6.5~7.5 0.5 -35~35 OnSource @@ -211,7 +211,7 @@ ARA_Mote_Melee_Attack_Main 1 (147,50,28) - 2.5~3.5 + 6.5~7.5 0.5 -15~15 OnSource @@ -227,7 +227,7 @@ ARA_Mote_Melee_Attack_Main 1 (170,74,68) - 3.5~4.5 + 6.5~7.5 0.5 180~196 OnSource @@ -238,7 +238,7 @@ ARA_Mote_Melee_Attack_Main 1 (147,50,28) - 2.5~3.5 + 6.5~7.5 0.5 195~215 OnSource @@ -249,6 +249,29 @@ 0.1 + + ARA_Area_Crush + +
  • + SubEffecter_SprayerTriggered + Fleck_BlastMechBandShockwave + 1 + OnSource + true + 0~0 +
  • +
  • + SubEffecter_SprayerTriggered + Mote_GiantExplosion + 1~1 +
  • +
  • + SubEffecter_SprayerTriggered + Mote_GiantExplosionInner + 5~5 +
  • +
    +
    ARA_Fleck_Icez_Cloud diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBeastSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBeastSwarm.xml index 957632a..da3dc42 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBeastSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBeastSwarm.xml @@ -13,9 +13,9 @@
  • - + -
  • Cut
  • +
  • ARA_PawnBodyWeapon_Cleave
  • 65 2 @@ -23,14 +23,16 @@
    -
  • - 120 - 4 - 0.75 +
  • + 60 + 6 + 1 false - Cut + Cut ARA_Double_Melee_Attack_Hit ARA_Double_Melee_Attack_Hit + true + false
  • @@ -67,6 +69,31 @@ true
  • +
  • + 4 + 120 + Crush + 60 + false + ARA_Area_Crush +
  • - + + ARA_PawnBodyWeapon_Cleave + + + + ARA_PawnBodyWeapon_Cleave + ARA_PawnBodyWeapon_Cleave + + ArachnaeSwarm.Verb_MeleeAttack_BodyWeapon + Cut + + MeleeAttack + Maneuver_Slash_MeleeHit + Maneuver_Slash_MeleeDeflect + Maneuver_Slash_MeleeMiss + Maneuver_Slash_MeleeDodge + + \ No newline at end of file diff --git a/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml b/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml index 5645ed9..dbddbfc 100644 --- a/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml +++ b/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml @@ -215,8 +215,8 @@
  • - 90 - 2.5 + 30 + 3.5 0.5 false Cut diff --git a/1.6/1.6/Defs/Thing_building/ARA_Building.xml b/1.6/1.6/Defs/Thing_building/ARA_Building.xml index 1099980..2933e92 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_Building.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_Building.xml @@ -170,6 +170,7 @@ 阿拉克涅工蜂将硬质材料和甲壳素混合堆起来形成的墙壁,虫族对这片墙壁进行了精心打磨,质地坚硬的同时看起来美观多了。 Things/Building/Linked/WallSmooth_MenuIcon + Things/Building/Linked/RockSmooth_Atlas Graphic_Single @@ -347,6 +348,7 @@ DoorMoveable 1 true + ArachnaeSwarm/Building/Door/ARA_InsectDoor Graphic_Multi diff --git a/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml b/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml index f9ab248..d1a4264 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml @@ -407,6 +407,7 @@ 250 ArachnaeSwarm/Terrain/Surfaces/ARA_InsectJelly_Terrain ARA_InsectCreep + (231, 224, 188) Terrain/Surfaces/AncientMegastructure TerrainFadeRoughSoftLight diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo index 4b2ed52..430b39f 100644 Binary files a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo and b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo differ diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json index fca50ff..6f30f13 100644 --- a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json +++ b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json @@ -1,154 +1,207 @@ { "Version": 1, - "WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", + "WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\ara_configurablemutant\\hediff_configurablemutant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_configurablemutant\\hediff_configurablemutant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\thing_comps\\ara_areaadamage\\compareadamage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:thing_comps\\ara_areaadamage\\compareadamage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\thing_comps\\compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:thing_comps\\compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\thing_comps\\ara_areaadamage\\compproperties_areadamage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:thing_comps\\ara_areaadamage\\compproperties_areadamage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_swarmmaintainer\\compproperties_swarmmaintainer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_swarmmaintainer\\compproperties_swarmmaintainer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\needs\\need_honeyproduction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:needs\\need_honeyproduction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\verbs\\pawnbodyweapon\\compproperties_pawnbodyweapon.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\pawnbodyweapon\\compproperties_pawnbodyweapon.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\thing_comps\\ara_compextraincubationinfo\\compextraincubationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:thing_comps\\ara_compextraincubationinfo\\compextraincubationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ara_hediffdefof.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:ara_hediffdefof.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\verbs\\pawnbodyweapon\\verb_meleeattack_bodyweapon.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\pawnbodyweapon\\verb_meleeattack_bodyweapon.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_refuel_nutrition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_refuel_nutrition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_feedwithhoney\\jobdriver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_feedwithhoney\\jobdriver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_feedwithhoney\\jobdriver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_feedwithhoney\\jobdriver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_feedwithhoney\\thinknode_jobgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_feedwithhoney\\thinknode_jobgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_swarmmaintain\\jobdriver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_swarmmaintain\\jobdriver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\verbs\\cleave\\compcleave.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\cleave\\compcleave.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_swarmmaintenance\\comp_swarmmaintenance.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_swarmmaintenance\\comp_swarmmaintenance.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\needs\\need_chitinarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:needs\\need_chitinarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_dormancyvat\\building_dormancyvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_dormancyvat\\building_dormancyvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_researchblueprintreader\\building_researchblueprintreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_researchblueprintreader\\building_researchblueprintreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\roomrole\\roomroleworker_incubator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:roomrole\\roomroleworker_incubator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_stripchitin\\jobdriver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_stripchitin\\jobdriver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_stripchitin\\compproperties_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_stripchitin\\compproperties_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_stripchitin\\comp_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_stripchitin\\comp_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\verbs\\verb_shootselfunderfoot.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\verb_shootselfunderfoot.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_hediffcomp_topturret\\hediffcomp_topturret.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hediffcomp_topturret\\hediffcomp_topturret.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_corpseconverter\\compcorpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_corpseconverter\\compcorpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_corpseconverter\\compproperties_corpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_corpseconverter\\compproperties_corpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_terrainchanger\\compterrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_terrainchanger\\compterrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_terrainchanger\\compproperties_terrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_terrainchanger\\compproperties_terrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\wula_mutifuelspawner\\comprefuelablenutrition_withkey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\wula_mutifuelspawner\\comprefuelablenutrition_withkey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_ootheca\\compproperties_incubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\compproperties_incubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_ootheca\\oothecaincubatorextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\oothecaincubatorextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_ootheca\\building_ootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\building_ootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_equipmentootheca\\compproperties_equipmentincubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_equipmentootheca\\compproperties_equipmentincubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_equipmentootheca\\building_equipmentootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_equipmentootheca\\building_equipmentootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_equipmentootheca\\building_equipmentootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\verbs\\cleave\\compcleave.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\cleave\\compcleave.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\verbs\\cleave\\verb_meleeattack_cleave.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\cleave\\verb_meleeattack_cleave.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\pawn_comps\\ara_trainingwork\\jobclean\\thinknode_conditionalanimalshoulddocleaningwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_trainingwork\\jobclean\\thinknode_conditionalanimalshoulddocleaningwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\pawn_comps\\ara_trainingwork\\jobclean\\workgiver_arachnaeclean.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_trainingwork\\jobclean\\workgiver_arachnaeclean.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\pawn_comps\\ara_trainingwork\\jobplant\\jobgiver_grower.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_trainingwork\\jobplant\\jobgiver_grower.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\pawn_comps\\ara_compskillexperiencegiver\\compproperties_skillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_compskillexperiencegiver\\compproperties_skillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\arachnaeswarmmod.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:arachnaeswarmmod.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_configurablemutant\\hediff_configurablemutant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_configurablemutant\\hediff_configurablemutant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\thing_comps\\compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:thing_comps\\compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\needs\\need_honeyproduction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:needs\\need_honeyproduction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ara_hediffdefof.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:ara_hediffdefof.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_refuel_nutrition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_refuel_nutrition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_feedwithhoney\\jobdriver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_feedwithhoney\\jobdriver_feedwithhoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\workgivers\\workgiver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:workgivers\\workgiver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_feedwithhoney\\jobdriver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_feedwithhoney\\jobdriver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_feedwithhoney\\thinknode_jobgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_feedwithhoney\\thinknode_jobgiver_extracthoney.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_swarmmaintain\\jobdriver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_swarmmaintain\\jobdriver_swarmmaintain.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_swarmmaintenance\\comp_swarmmaintenance.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_swarmmaintenance\\comp_swarmmaintenance.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\needs\\need_chitinarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:needs\\need_chitinarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_dormancyvat\\building_dormancyvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_dormancyvat\\building_dormancyvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_researchblueprintreader\\building_researchblueprintreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_researchblueprintreader\\building_researchblueprintreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\roomrole\\roomroleworker_incubator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:roomrole\\roomroleworker_incubator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_stripchitin\\jobdriver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_stripchitin\\jobdriver_stripchitin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_stripchitin\\compproperties_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_stripchitin\\compproperties_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_stripchitin\\comp_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_stripchitin\\comp_chitinstripping.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\verbs\\verb_shootselfunderfoot.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\verb_shootselfunderfoot.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_hediffcomp_topturret\\hediffcomp_topturret.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hediffcomp_topturret\\hediffcomp_topturret.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_corpseconverter\\compcorpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_corpseconverter\\compcorpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_corpseconverter\\compproperties_corpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_corpseconverter\\compproperties_corpseconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_terrainchanger\\compterrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_terrainchanger\\compterrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_terrainchanger\\compproperties_terrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_terrainchanger\\compproperties_terrainchanger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\wula_mutifuelspawner\\comprefuelablenutrition_withkey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\wula_mutifuelspawner\\comprefuelablenutrition_withkey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_ootheca\\compproperties_incubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\compproperties_incubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_ootheca\\oothecaincubatorextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\oothecaincubatorextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_ootheca\\building_ootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\building_ootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_equipmentootheca\\compproperties_equipmentincubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_equipmentootheca\\compproperties_equipmentincubatordata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_DraftableAnimal\\JobGiver_DraftedAnimal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_DraftableAnimal\\Patch_Pawn_GetGizmos.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -158,19 +211,227 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 2, + "SelectedChildIndex": 1, "Children": [ + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "CompProperties_AreaDamage.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\ARA_AreaaDamage\\CompProperties_AreaDamage.cs", + "RelativeDocumentMoniker": "Thing_Comps\\ARA_AreaaDamage\\CompProperties_AreaDamage.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\ARA_AreaaDamage\\CompProperties_AreaDamage.cs*", + "RelativeToolTip": "Thing_Comps\\ARA_AreaaDamage\\CompProperties_AreaDamage.cs*", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAXAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T08:30:19.688Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "CompAreaDamage.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\ARA_AreaaDamage\\CompAreaDamage.cs", + "RelativeDocumentMoniker": "Thing_Comps\\ARA_AreaaDamage\\CompAreaDamage.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\ARA_AreaaDamage\\CompAreaDamage.cs*", + "RelativeToolTip": "Thing_Comps\\ARA_AreaaDamage\\CompAreaDamage.cs*", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAASAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T08:30:03.538Z", + "EditorCaption": "" + }, { "$type": "Bookmark", "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" }, { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 4, + "Title": "CompExtraIncubationInfo.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\ARA_CompExtraIncubationInfo\\CompExtraIncubationInfo.cs", + "RelativeDocumentMoniker": "Thing_Comps\\ARA_CompExtraIncubationInfo\\CompExtraIncubationInfo.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\ARA_CompExtraIncubationInfo\\CompExtraIncubationInfo.cs", + "RelativeToolTip": "Thing_Comps\\ARA_CompExtraIncubationInfo\\CompExtraIncubationInfo.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAXAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T08:30:16.009Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "CompProperties_SwarmMaintainer.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmMaintainer\\CompProperties_SwarmMaintainer.cs", + "RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmMaintainer\\CompProperties_SwarmMaintainer.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmMaintainer\\CompProperties_SwarmMaintainer.cs", + "RelativeToolTip": "Pawn_Comps\\ARA_SwarmMaintainer\\CompProperties_SwarmMaintainer.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAlAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T08:19:21.682Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "CompProperties_PawnBodyWeapon.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\PawnBodyWeapon\\CompProperties_PawnBodyWeapon.cs", + "RelativeDocumentMoniker": "Verbs\\PawnBodyWeapon\\CompProperties_PawnBodyWeapon.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\PawnBodyWeapon\\CompProperties_PawnBodyWeapon.cs", + "RelativeToolTip": "Verbs\\PawnBodyWeapon\\CompProperties_PawnBodyWeapon.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAXAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T08:17:52.012Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "Verb_MeleeAttack_BodyWeapon.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\PawnBodyWeapon\\Verb_MeleeAttack_BodyWeapon.cs", + "RelativeDocumentMoniker": "Verbs\\PawnBodyWeapon\\Verb_MeleeAttack_BodyWeapon.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\PawnBodyWeapon\\Verb_MeleeAttack_BodyWeapon.cs", + "RelativeToolTip": "Verbs\\PawnBodyWeapon\\Verb_MeleeAttack_BodyWeapon.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAsAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T08:17:18.317Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_TrainingWork\\JobClean\\ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs", + "RelativeDocumentMoniker": "Pawn_Comps\\ARA_TrainingWork\\JobClean\\ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_TrainingWork\\JobClean\\ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs", + "RelativeToolTip": "Pawn_Comps\\ARA_TrainingWork\\JobClean\\ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T03:16:11.827Z" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "WorkGiver_SwarmMaintain.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_SwarmMaintain.cs", + "RelativeDocumentMoniker": "WorkGivers\\WorkGiver_SwarmMaintain.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_SwarmMaintain.cs", + "RelativeToolTip": "WorkGivers\\WorkGiver_SwarmMaintain.cs", + "ViewState": "AgIAACQAAAAAAAAAAAAowDcAAAAgAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-17T13:13:35.358Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "WorkGiver_ArachnaeClean.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_TrainingWork\\JobClean\\WorkGiver_ArachnaeClean.cs", + "RelativeDocumentMoniker": "Pawn_Comps\\ARA_TrainingWork\\JobClean\\WorkGiver_ArachnaeClean.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_TrainingWork\\JobClean\\WorkGiver_ArachnaeClean.cs", + "RelativeToolTip": "Pawn_Comps\\ARA_TrainingWork\\JobClean\\WorkGiver_ArachnaeClean.cs", + "ViewState": "AgIAAFQAAAAAAAAAAAAYwAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T03:17:01.411Z" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "Verb_MeleeAttack_Cleave.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Cleave\\Verb_MeleeAttack_Cleave.cs", + "RelativeDocumentMoniker": "Verbs\\Cleave\\Verb_MeleeAttack_Cleave.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Cleave\\Verb_MeleeAttack_Cleave.cs", + "RelativeToolTip": "Verbs\\Cleave\\Verb_MeleeAttack_Cleave.cs", + "ViewState": "AgIAABIAAAAAAAAAAAAywGsAAAAWAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T03:30:20.061Z" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "Building_EquipmentOotheca.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "RelativeDocumentMoniker": "Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "RelativeToolTip": "Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "ViewState": "AgIAAF0AAAAAAAAAAAAAwJAAAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-15T18:22:14.171Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "CompCleave.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Cleave\\CompCleave.cs", + "RelativeDocumentMoniker": "Verbs\\Cleave\\CompCleave.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Cleave\\CompCleave.cs", + "RelativeToolTip": "Verbs\\Cleave\\CompCleave.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAvAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-17T13:40:25.528Z" + }, + { + "$type": "Document", + "DocumentIndex": 12, + "Title": "JobGiver_Grower.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_TrainingWork\\JobPlant\\JobGiver_Grower.cs", + "RelativeDocumentMoniker": "Pawn_Comps\\ARA_TrainingWork\\JobPlant\\JobGiver_Grower.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_TrainingWork\\JobPlant\\JobGiver_Grower.cs", + "RelativeToolTip": "Pawn_Comps\\ARA_TrainingWork\\JobPlant\\JobGiver_Grower.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA6AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T03:09:07.494Z" + }, + { + "$type": "Document", + "DocumentIndex": 13, + "Title": "CompProperties_SkillExperienceGiver.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs", + "RelativeDocumentMoniker": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs", + "RelativeToolTip": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T00:29:04.867Z" + }, + { + "$type": "Document", + "DocumentIndex": 14, + "Title": "ArachnaeSwarmMod.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ArachnaeSwarmMod.cs", + "RelativeDocumentMoniker": "ArachnaeSwarmMod.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ArachnaeSwarmMod.cs", + "RelativeToolTip": "ArachnaeSwarmMod.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-18T00:55:39.161Z" + }, + { + "$type": "Document", + "DocumentIndex": 49, + "Title": "JobGiver_DraftedAnimal.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_DraftableAnimal\\JobGiver_DraftedAnimal.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_DraftableAnimal\\JobGiver_DraftedAnimal.cs", + "ViewState": "AgIAAAYAAAAAAAAAAADwvxkAAAARAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-17T18:21:29.425Z" + }, + { + "$type": "Document", + "DocumentIndex": 50, + "Title": "Patch_Pawn_GetGizmos.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_DraftableAnimal\\Patch_Pawn_GetGizmos.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_DraftableAnimal\\Patch_Pawn_GetGizmos.cs", + "ViewState": "AgIAAFMAAAAAAAAAAAAmwGEAAAATAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-12-17T18:17:02.281Z" + }, + { + "$type": "Document", + "DocumentIndex": 16, "Title": "CompApparelInterceptor.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\CompApparelInterceptor.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\CompApparelInterceptor.cs", "RelativeDocumentMoniker": "Thing_Comps\\CompApparelInterceptor.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\CompApparelInterceptor.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Thing_Comps\\CompApparelInterceptor.cs", "RelativeToolTip": "Thing_Comps\\CompApparelInterceptor.cs", "ViewState": "AgIAAFgAAAAAAAAAAAAuwHEAAAAzAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -178,24 +439,23 @@ }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 15, "Title": "Hediff_ConfigurableMutant.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ConfigurableMutant\\Hediff_ConfigurableMutant.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ConfigurableMutant\\Hediff_ConfigurableMutant.cs", "RelativeDocumentMoniker": "Hediffs\\ARA_ConfigurableMutant\\Hediff_ConfigurableMutant.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ConfigurableMutant\\Hediff_ConfigurableMutant.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ConfigurableMutant\\Hediff_ConfigurableMutant.cs", "RelativeToolTip": "Hediffs\\ARA_ConfigurableMutant\\Hediff_ConfigurableMutant.cs", "ViewState": "AgIAAIIAAAAAAAAAAAAQwJkAAAAzAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-12-17T18:13:05.563Z", - "EditorCaption": "" + "WhenOpened": "2025-12-17T18:13:05.563Z" }, { "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 17, "Title": "CompDelayedTerrainSpawn.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", "RelativeToolTip": "Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", "ViewState": "AgIAACMAAAAAAAAAAAAQwCgAAABDAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -203,11 +463,11 @@ }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 21, "Title": "WorkGiver_Refuel_Nutrition.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_Refuel_Nutrition.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_Refuel_Nutrition.cs", "RelativeDocumentMoniker": "WorkGivers\\WorkGiver_Refuel_Nutrition.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_Refuel_Nutrition.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_Refuel_Nutrition.cs", "RelativeToolTip": "WorkGivers\\WorkGiver_Refuel_Nutrition.cs", "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -215,11 +475,11 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 19, "Title": "WorkGiver_FeedWithHoney.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_FeedWithHoney.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_FeedWithHoney.cs", "RelativeDocumentMoniker": "WorkGivers\\WorkGiver_FeedWithHoney.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_FeedWithHoney.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_FeedWithHoney.cs", "RelativeToolTip": "WorkGivers\\WorkGiver_FeedWithHoney.cs", "ViewState": "AgIAAB0AAAAAAAAAAAAQwD0AAAAQAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -227,11 +487,11 @@ }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 24, "Title": "WorkGiver_StripChitin.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_StripChitin.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_StripChitin.cs", "RelativeDocumentMoniker": "WorkGivers\\WorkGiver_StripChitin.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_StripChitin.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_StripChitin.cs", "RelativeToolTip": "WorkGivers\\WorkGiver_StripChitin.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAAZAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -239,11 +499,11 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 23, "Title": "WorkGiver_ExtractHoney.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_ExtractHoney.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_ExtractHoney.cs", "RelativeDocumentMoniker": "WorkGivers\\WorkGiver_ExtractHoney.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_ExtractHoney.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_ExtractHoney.cs", "RelativeToolTip": "WorkGivers\\WorkGiver_ExtractHoney.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAgwB0AAAAyAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -251,11 +511,11 @@ }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 20, "Title": "ARA_HediffDefOf.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_HediffDefOf.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_HediffDefOf.cs", "RelativeDocumentMoniker": "ARA_HediffDefOf.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_HediffDefOf.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_HediffDefOf.cs", "RelativeToolTip": "ARA_HediffDefOf.cs", "ViewState": "AgIAAAAAAAAAAAAAAADwvxIAAAAkAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -263,11 +523,11 @@ }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 18, "Title": "Need_HoneyProduction.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_HoneyProduction.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_HoneyProduction.cs", "RelativeDocumentMoniker": "Needs\\Need_HoneyProduction.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_HoneyProduction.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_HoneyProduction.cs", "RelativeToolTip": "Needs\\Need_HoneyProduction.cs", "ViewState": "AgIAAGIAAAAAAAAAAAAkwG4AAAAJAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -275,11 +535,11 @@ }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 25, "Title": "JobDriver_ExtractHoney.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_ExtractHoney.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_ExtractHoney.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_FeedWithHoney\\JobDriver_ExtractHoney.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_ExtractHoney.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_ExtractHoney.cs", "RelativeToolTip": "Jobs\\JobDriver_FeedWithHoney\\JobDriver_ExtractHoney.cs", "ViewState": "AgIAAA8AAAAAAAAAAAAAwCYAAAAlAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -287,11 +547,11 @@ }, { "$type": "Document", - "DocumentIndex": 11, + "DocumentIndex": 26, "Title": "ThinkNode_JobGiver_ExtractHoney.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\ThinkNode_JobGiver_ExtractHoney.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\ThinkNode_JobGiver_ExtractHoney.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_FeedWithHoney\\ThinkNode_JobGiver_ExtractHoney.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\ThinkNode_JobGiver_ExtractHoney.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\ThinkNode_JobGiver_ExtractHoney.cs", "RelativeToolTip": "Jobs\\JobDriver_FeedWithHoney\\ThinkNode_JobGiver_ExtractHoney.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABQAAAAcAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -299,11 +559,11 @@ }, { "$type": "Document", - "DocumentIndex": 12, + "DocumentIndex": 27, "Title": "JobDriver_SwarmMaintain.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", "RelativeToolTip": "Jobs\\JobDriver_SwarmMaintain\\JobDriver_SwarmMaintain.cs", "ViewState": "AgIAAAAAAAAAAAAAAADwvxcAAAAJAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -311,11 +571,11 @@ }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 22, "Title": "JobDriver_FeedWithHoney.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", "RelativeToolTip": "Jobs\\JobDriver_FeedWithHoney\\JobDriver_FeedWithHoney.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -323,23 +583,11 @@ }, { "$type": "Document", - "DocumentIndex": 13, - "Title": "CompCleave.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Cleave\\CompCleave.cs", - "RelativeDocumentMoniker": "Verbs\\Cleave\\CompCleave.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Cleave\\CompCleave.cs", - "RelativeToolTip": "Verbs\\Cleave\\CompCleave.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAkAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-12-17T13:40:25.528Z" - }, - { - "$type": "Document", - "DocumentIndex": 14, + "DocumentIndex": 28, "Title": "Comp_SwarmMaintenance.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_SwarmMaintenance\\Comp_SwarmMaintenance.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_SwarmMaintenance\\Comp_SwarmMaintenance.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_SwarmMaintenance\\Comp_SwarmMaintenance.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_SwarmMaintenance\\Comp_SwarmMaintenance.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_SwarmMaintenance\\Comp_SwarmMaintenance.cs", "RelativeToolTip": "Building_Comps\\ARA_SwarmMaintenance\\Comp_SwarmMaintenance.cs", "ViewState": "AgIAAKYAAAAAAAAAAAAQwH0AAAAQAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -347,11 +595,11 @@ }, { "$type": "Document", - "DocumentIndex": 15, + "DocumentIndex": 29, "Title": "Need_ChitinArmor.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_ChitinArmor.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_ChitinArmor.cs", "RelativeDocumentMoniker": "Needs\\Need_ChitinArmor.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_ChitinArmor.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Needs\\Need_ChitinArmor.cs", "RelativeToolTip": "Needs\\Need_ChitinArmor.cs", "ViewState": "AgIAAAMAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -359,23 +607,11 @@ }, { "$type": "Document", - "DocumentIndex": 16, - "Title": "WorkGiver_SwarmMaintain.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_SwarmMaintain.cs", - "RelativeDocumentMoniker": "WorkGivers\\WorkGiver_SwarmMaintain.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\WorkGivers\\WorkGiver_SwarmMaintain.cs", - "RelativeToolTip": "WorkGivers\\WorkGiver_SwarmMaintain.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAF0AAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-12-17T13:13:35.358Z" - }, - { - "$type": "Document", - "DocumentIndex": 17, + "DocumentIndex": 30, "Title": "Building_DormancyVat.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_DormancyVat\\Building_DormancyVat.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_DormancyVat\\Building_DormancyVat.cs", "RelativeDocumentMoniker": "Buildings\\Building_DormancyVat\\Building_DormancyVat.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_DormancyVat\\Building_DormancyVat.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_DormancyVat\\Building_DormancyVat.cs", "RelativeToolTip": "Buildings\\Building_DormancyVat\\Building_DormancyVat.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAOcAAAAjAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -383,11 +619,11 @@ }, { "$type": "Document", - "DocumentIndex": 18, + "DocumentIndex": 31, "Title": "Building_ResearchBlueprintReader.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", "RelativeDocumentMoniker": "Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", "RelativeToolTip": "Buildings\\Building_ResearchBlueprintReader\\Building_ResearchBlueprintReader.cs", "ViewState": "AgIAAPQAAAAAAAAAAAAywAoBAABrAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -395,11 +631,11 @@ }, { "$type": "Document", - "DocumentIndex": 20, + "DocumentIndex": 33, "Title": "JobDriver_StripChitin.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", "RelativeToolTip": "Jobs\\JobDriver_StripChitin\\JobDriver_StripChitin.cs", "ViewState": "AgIAAD4AAAAAAAAAAAAAAE0AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -407,11 +643,11 @@ }, { "$type": "Document", - "DocumentIndex": 22, + "DocumentIndex": 35, "Title": "Comp_ChitinStripping.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\Comp_ChitinStripping.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\Comp_ChitinStripping.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_StripChitin\\Comp_ChitinStripping.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\Comp_ChitinStripping.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\Comp_ChitinStripping.cs", "RelativeToolTip": "Jobs\\JobDriver_StripChitin\\Comp_ChitinStripping.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAABWAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -419,11 +655,11 @@ }, { "$type": "Document", - "DocumentIndex": 23, + "DocumentIndex": 36, "Title": "Verb_ShootSelfUnderfoot.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootSelfUnderfoot.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootSelfUnderfoot.cs", "RelativeDocumentMoniker": "Verbs\\Verb_ShootSelfUnderfoot.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootSelfUnderfoot.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootSelfUnderfoot.cs", "RelativeToolTip": "Verbs\\Verb_ShootSelfUnderfoot.cs", "ViewState": "AgIAAJAAAAAAAAAAAAAcwJwAAAAoAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -431,11 +667,11 @@ }, { "$type": "Document", - "DocumentIndex": 24, + "DocumentIndex": 37, "Title": "HediffComp_TopTurret.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs", "RelativeDocumentMoniker": "Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs", "RelativeToolTip": "Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs", "ViewState": "AgIAACcBAAAAAAAAAAAkwD0BAAAjAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -443,11 +679,11 @@ }, { "$type": "Document", - "DocumentIndex": 19, + "DocumentIndex": 32, "Title": "RoomRoleWorker_Incubator.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\RoomRole\\RoomRoleWorker_Incubator.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\RoomRole\\RoomRoleWorker_Incubator.cs", "RelativeDocumentMoniker": "RoomRole\\RoomRoleWorker_Incubator.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\RoomRole\\RoomRoleWorker_Incubator.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\RoomRole\\RoomRoleWorker_Incubator.cs", "RelativeToolTip": "RoomRole\\RoomRoleWorker_Incubator.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -455,11 +691,11 @@ }, { "$type": "Document", - "DocumentIndex": 21, + "DocumentIndex": 34, "Title": "CompProperties_ChitinStripping.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\CompProperties_ChitinStripping.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\CompProperties_ChitinStripping.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_StripChitin\\CompProperties_ChitinStripping.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\CompProperties_ChitinStripping.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_StripChitin\\CompProperties_ChitinStripping.cs", "RelativeToolTip": "Jobs\\JobDriver_StripChitin\\CompProperties_ChitinStripping.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAAAtAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -467,11 +703,11 @@ }, { "$type": "Document", - "DocumentIndex": 25, + "DocumentIndex": 38, "Title": "CompResearchProducer.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs", "RelativeToolTip": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs", "ViewState": "AgIAAAAAAAAAAAAAAADwvy0AAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -479,11 +715,11 @@ }, { "$type": "Document", - "DocumentIndex": 26, + "DocumentIndex": 39, "Title": "CompCorpseConverter.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompCorpseConverter.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompCorpseConverter.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_CorpseConverter\\CompCorpseConverter.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompCorpseConverter.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompCorpseConverter.cs", "RelativeToolTip": "Building_Comps\\ARA_CorpseConverter\\CompCorpseConverter.cs", "ViewState": "AgIAABwDAAAAAAAAAAAIwCoDAAARAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -491,11 +727,11 @@ }, { "$type": "Document", - "DocumentIndex": 27, + "DocumentIndex": 40, "Title": "CompProperties_CorpseConverter.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompProperties_CorpseConverter.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompProperties_CorpseConverter.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_CorpseConverter\\CompProperties_CorpseConverter.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompProperties_CorpseConverter.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CorpseConverter\\CompProperties_CorpseConverter.cs", "RelativeToolTip": "Building_Comps\\ARA_CorpseConverter\\CompProperties_CorpseConverter.cs", "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -503,11 +739,11 @@ }, { "$type": "Document", - "DocumentIndex": 30, + "DocumentIndex": 43, "Title": "CompRefuelableNutrition_WithKey.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\WULA_MutiFuelSpawner\\CompRefuelableNutrition_WithKey.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\WULA_MutiFuelSpawner\\CompRefuelableNutrition_WithKey.cs", "RelativeDocumentMoniker": "Building_Comps\\WULA_MutiFuelSpawner\\CompRefuelableNutrition_WithKey.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\WULA_MutiFuelSpawner\\CompRefuelableNutrition_WithKey.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\WULA_MutiFuelSpawner\\CompRefuelableNutrition_WithKey.cs", "RelativeToolTip": "Building_Comps\\WULA_MutiFuelSpawner\\CompRefuelableNutrition_WithKey.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAACUAAABAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -515,11 +751,11 @@ }, { "$type": "Document", - "DocumentIndex": 28, + "DocumentIndex": 41, "Title": "CompTerrainChanger.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompTerrainChanger.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompTerrainChanger.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_TerrainChanger\\CompTerrainChanger.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompTerrainChanger.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompTerrainChanger.cs", "RelativeToolTip": "Building_Comps\\ARA_TerrainChanger\\CompTerrainChanger.cs", "ViewState": "AgIAAK0CAAAAAAAAAAAcwPYCAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -527,11 +763,11 @@ }, { "$type": "Document", - "DocumentIndex": 29, + "DocumentIndex": 42, "Title": "CompProperties_TerrainChanger.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompProperties_TerrainChanger.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompProperties_TerrainChanger.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_TerrainChanger\\CompProperties_TerrainChanger.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompProperties_TerrainChanger.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_TerrainChanger\\CompProperties_TerrainChanger.cs", "RelativeToolTip": "Building_Comps\\ARA_TerrainChanger\\CompProperties_TerrainChanger.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -539,23 +775,21 @@ }, { "$type": "Document", - "DocumentIndex": 36, + "DocumentIndex": 48, "Title": "Building_RefuelingVat.cs", "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", - "RelativeDocumentMoniker": "Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", - "RelativeToolTip": "Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-12-16T10:28:54.756Z" }, { "$type": "Document", - "DocumentIndex": 31, + "DocumentIndex": 44, "Title": "CompProperties_IncubatorData.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\CompProperties_IncubatorData.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\CompProperties_IncubatorData.cs", "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\CompProperties_IncubatorData.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\CompProperties_IncubatorData.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\CompProperties_IncubatorData.cs", "RelativeToolTip": "Buildings\\Building_Ootheca\\CompProperties_IncubatorData.cs", "ViewState": "AgIAANcAAAAAAAAAAIA1wPoAAAAxAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -563,11 +797,11 @@ }, { "$type": "Document", - "DocumentIndex": 32, + "DocumentIndex": 45, "Title": "OothecaIncubatorExtension.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\OothecaIncubatorExtension.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\OothecaIncubatorExtension.cs", "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\OothecaIncubatorExtension.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\OothecaIncubatorExtension.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\OothecaIncubatorExtension.cs", "RelativeToolTip": "Buildings\\Building_Ootheca\\OothecaIncubatorExtension.cs", "ViewState": "AgIAAAAAAAAAAAAAAADwvxUAAABBAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -575,23 +809,11 @@ }, { "$type": "Document", - "DocumentIndex": 35, - "Title": "Building_EquipmentOotheca.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", - "RelativeDocumentMoniker": "Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", - "RelativeToolTip": "Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", - "ViewState": "AgIAACcAAAAAAAAAAAAAADoDAABSAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-12-15T18:22:14.171Z" - }, - { - "$type": "Document", - "DocumentIndex": 33, + "DocumentIndex": 46, "Title": "Building_Ootheca.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\Building_Ootheca.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", "RelativeToolTip": "Buildings\\Building_Ootheca\\Building_Ootheca.cs", "ViewState": "AgIAALcCAAAAAAAAAAAewNgCAAAVAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -599,11 +821,11 @@ }, { "$type": "Document", - "DocumentIndex": 34, + "DocumentIndex": 47, "Title": "CompProperties_EquipmentIncubatorData.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\CompProperties_EquipmentIncubatorData.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\CompProperties_EquipmentIncubatorData.cs", "RelativeDocumentMoniker": "Buildings\\Building_EquipmentOotheca\\CompProperties_EquipmentIncubatorData.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\CompProperties_EquipmentIncubatorData.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\CompProperties_EquipmentIncubatorData.cs", "RelativeToolTip": "Buildings\\Building_EquipmentOotheca\\CompProperties_EquipmentIncubatorData.cs", "ViewState": "AgIAAA4AAAAAAAAAAADwvyYAAAAaAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 8ee48eb..3bbd5e0 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -211,6 +211,10 @@ + + + + diff --git a/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs b/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs index 2d6886c..130a0be 100644 --- a/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs +++ b/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs @@ -33,27 +33,70 @@ namespace ArachnaeSwarm private float qualityMultiplier = 1.0f; private float qualityProgress = 0f; private float qualityTotal = 0f; - // === 新增:营养液消耗相关字段 === + + // === 修复后的营养液消耗相关字段 === private int totalNutrientCost = 0; // 总共需要的营养液地块数量 private int consumedNutrientCount = 0; // 已消耗的营养液地块数量 private int lastConsumeCheckTick = -1; // 上次检查消耗的时间 private const int ConsumeCheckInterval = 250; // 检查间隔(tick) - private const int ConsumeRadius = 5; // 搜索半径 private List consumedCells = new List(); // 已消耗的单元格记录 - private bool hasStartedConsumption = false; // 是否已开始消耗 - private float consumeProgress = 0f; // 消耗进度(0-1) - + private bool isConsuming = false; // 是否正在消耗营养液 + private int consecutiveFailedConsumptions = 0; // 连续失败的消耗次数 + private const int MaxConsecutiveFailures = 10; // 最大连续失败次数,超过则暂停检查 + private bool nutrientDeficiencyPause = false; // 是否因营养液不足而暂停 + // === 新增属性 === public int TotalNutrientCost => totalNutrientCost; public int ConsumedNutrientCount => consumedNutrientCount; public float NutrientProgress => totalNutrientCost > 0 ? (float)consumedNutrientCount / totalNutrientCost : 0f; public bool HasEnoughNutrients => consumedNutrientCount >= totalNutrientCost; - public bool IsConsuming => hasStartedConsumption && !HasEnoughNutrients && isIncubating; + public bool IsConsuming => isConsuming; + + // 缓存的ModExtension + private OothecaIncubatorExtension cachedExtension; + + // 获取ModExtension的辅助属性 + public OothecaIncubatorExtension Ext + { + get + { + if (cachedExtension == null) + { + cachedExtension = def.GetModExtension() ?? OothecaIncubatorExtension.Default; + } + return cachedExtension; + } + } + + // 属性访问器 + public float SpeedMultiplier + { + get + { + if (lastMultiplierUpdateTick < 0 || Find.TickManager.TicksGame - lastMultiplierUpdateTick >= MultiplierUpdateInterval) + { + UpdateSpeedMultiplier(); + } + return speedMultiplier; + } + } + + // 质量属性 + public float QualityMultiplier => qualityMultiplier; + public float QualityProgress => qualityProgress; + public float QualityPercent => qualityTotal > 0 ? qualityProgress / qualityTotal : 0f; + + // 进度百分比 + public float AdjustedProgressPercent + { + get + { + if (incubationDuration <= 0) return 0f; + return incubationProgress / incubationDuration; + } + } - - // === 新增:营养液消耗方法 === - - // 初始化营养液消耗需求 + // === 修复后的初始化营养液消耗方法 === private void InitializeNutrientConsumption() { if (incubatingThingDef == null) @@ -64,39 +107,80 @@ namespace ArachnaeSwarm if (costStat != null) { totalNutrientCost = Mathf.RoundToInt(incubatingThingDef.GetStatValueAbstract(costStat, null)); + Log.Message($"[ARA] 初始化营养液消耗: {incubatingThingDef.defName} 需要 {totalNutrientCost} 个营养液地块"); } else { - totalNutrientCost = 0; // 如果统计不存在,则不需要消耗 + totalNutrientCost = 0; + Log.Message($"[ARA] 孵化 {incubatingThingDef.defName} 不需要营养液"); } consumedNutrientCount = 0; consumedCells.Clear(); - hasStartedConsumption = false; - consumeProgress = 0f; + isConsuming = true; // 立即开始消耗 + consecutiveFailedConsumptions = 0; + nutrientDeficiencyPause = false; + + // 立即检查一次营养液 + lastConsumeCheckTick = Find.TickManager.TicksGame - ConsumeCheckInterval; // 强制立即检查 } - // 检查并消耗营养液 + // === 修复后的检查并消耗营养液方法 === private void CheckAndConsumeNutrients() { - if (!isIncubating || incubatingThingDef == null || HasEnoughNutrients) + if (!isIncubating || incubatingThingDef == null) return; - // 第一次检查时标记开始消耗 - if (!hasStartedConsumption) + + // 如果已经满足需求,停止消耗 + if (HasEnoughNutrients) { - hasStartedConsumption = true; - Messages.Message("ARA_EquipmentIncubator.StartedNutrientConsumption".Translate(), - this, MessageTypeDefOf.SilentInput); + if (isConsuming) + { + Log.Message($"[ARA] 营养液需求已满足: {consumedNutrientCount}/{totalNutrientCost}"); + isConsuming = false; + nutrientDeficiencyPause = false; // 重置暂停标志 + } + return; } - // 计算本次应该消耗的数量 - // 基于孵化进度来动态计算 + + // 计算需要消耗的数量(基于当前进度) float targetProgress = AdjustedProgressPercent; int targetConsumed = Mathf.RoundToInt(targetProgress * totalNutrientCost); - int toConsume = targetConsumed - consumedNutrientCount; + int toConsume = Mathf.Max(1, targetConsumed - consumedNutrientCount); + if (toConsume <= 0) return; + // 查找可消耗的营养液单元格 List availableCells = FindNutrientCells(); + + if (availableCells.Count == 0) + { + consecutiveFailedConsumptions++; + nutrientDeficiencyPause = true; // 设置为暂停 + + // 如果没有找到营养液,检查是否应该应用伤害 + if (Ext.nutrientDeficiencyDamageEnabled && toConsume > 0) + { + ApplyNutrientDeficiencyDamage(); + + // 显示消息(频率控制) + if (Find.TickManager.TicksGame % 2000 == 0 && Rand.Chance(0.3f)) + { + Messages.Message("ARA_EquipmentIncubator.NoNutrientsFound".Translate(), + this, MessageTypeDefOf.NegativeEvent); + } + + Log.Warning($"[ARA] 未找到营养液,连续失败次数: {consecutiveFailedConsumptions}"); + } + return; + } + + // 重置失败计数和暂停标志 + consecutiveFailedConsumptions = 0; + nutrientDeficiencyPause = false; // 有营养液可用,取消暂停 + + // 开始消耗 int consumedThisTick = 0; for (int i = 0; i < Mathf.Min(toConsume, availableCells.Count); i++) { @@ -104,38 +188,34 @@ namespace ArachnaeSwarm { consumedThisTick++; consumedNutrientCount++; - // 添加到已消耗列表 consumedCells.Add(availableCells[i]); + if (HasEnoughNutrients) break; } } + if (consumedThisTick > 0) { - consumeProgress = NutrientProgress; - // 如果达到需求,显示消息 + Log.Message($"[ARA] 消耗了 {consumedThisTick} 个营养液,总计: {consumedNutrientCount}/{totalNutrientCost}"); + + // 显示消息 + if (consumedThisTick > 0 && Find.TickManager.TicksGame % 1000 == 0) + { + Messages.Message($"ARA_EquipmentIncubator.NutrientConsumed".Translate(consumedThisTick, consumedNutrientCount, totalNutrientCost), + this, MessageTypeDefOf.SilentInput); + } + + // 如果达到需求,显示完成消息 if (HasEnoughNutrients) { Messages.Message("ARA_EquipmentIncubator.NutrientRequirementsMet".Translate(), this, MessageTypeDefOf.PositiveEvent); } } - else if (Ext.nutrientDeficiencyDamageEnabled && toConsume > 0) - { - // === 新增:没有找到营养液,造成伤害 === - ApplyNutrientDeficiencyDamage(); - - // === 新增:如果设置停止孵化,则暂停进度 === - if (Ext.stopIncubationWhenNutrientDeficient) - { - // 暂停孵化进度,直到找到营养液 - // 我们通过不增加incubationProgress来实现 - // 但这里需要特殊处理,我们在Tick方法中处理 - } - } } - // === 新增:应用营养液不足的伤害 === + // === 修复后的应用营养液不足伤害方法 === private void ApplyNutrientDeficiencyDamage() { if (Ext.nutrientDeficiencyDamageAmount <= 0f || Ext.nutrientDamageType == null) @@ -189,30 +269,40 @@ namespace ArachnaeSwarm } } - // 查找可消耗的营养液单元格 + // === 修复后的查找营养液单元格方法 === public List FindNutrientCells() { List availableCells = new List(); var map = Map; if (map == null) return availableCells; - // === 修改:使用ModExtension中定义的营养液检测半径 === - int searchRadius = Ext.NutrientSolutionRadiusInt; // 使用ModExtension中的半径 - + + // 使用ModExtension中定义的营养液检测半径 + int searchRadius = Ext.NutrientSolutionRadiusInt; + TerrainDef nutrientDef = DefDatabase.GetNamedSilentFail("ARA_Incubator_Nutrient_Solution"); if (nutrientDef == null) - return availableCells; - // 搜索矩形区域 - for (int x = -searchRadius; x <= searchRadius; x++) { - for (int z = -searchRadius; z <= searchRadius; z++) + Log.Error("[ARA] 未找到营养液地形定义: ARA_Incubator_Nutrient_Solution"); + return availableCells; + } + + // 优化搜索:先从内圈开始,逐步扩大 + int minRadius = 1; // 最小搜索半径 + int currentRadius = Mathf.Min(searchRadius, Mathf.Max(minRadius, consecutiveFailedConsumptions + 1)); + + for (int x = -currentRadius; x <= currentRadius; x++) + { + for (int z = -currentRadius; z <= currentRadius; z++) { IntVec3 cell = Position + new IntVec3(x, 0, z); - // 排除自己的位置 - if (cell == Position) + + // 排除自己的位置和已消耗的单元格 + if (cell == Position || consumedCells.Contains(cell)) continue; - // 检查是否在边界内且未被消耗过 - if (cell.InBounds(map) && !consumedCells.Contains(cell)) + + // 检查是否在边界内 + if (cell.InBounds(map)) { TerrainDef terrain = map.terrainGrid.TerrainAt(cell); if (terrain == nutrientDef) @@ -222,12 +312,17 @@ namespace ArachnaeSwarm } } } + // 随机排序,避免总是从固定位置开始消耗 - availableCells.Shuffle(); + if (availableCells.Count > 1) + { + availableCells.Shuffle(); + } + return availableCells; } - // 消耗单个营养液单元格 + // === 修复后的消耗单个营养液单元格方法 === private bool ConsumeNutrientCell(IntVec3 cell) { var map = Map; @@ -247,18 +342,6 @@ namespace ArachnaeSwarm // 转换为昆虫爬行地貌 map.terrainGrid.SetTerrain(cell, insectCreepDef); - // 检查是否有物品需要移除(如果有的话) - List thingsAtCell = map.thingGrid.ThingsListAt(cell); - foreach (Thing thing in thingsAtCell) - { - // 如果物品阻碍了地貌转换,可能需要处理 - if (thing.def.passability == Traversability.Impassable) - { - // 可以根据需要处理阻碍物 - continue; - } - } - // 创建营养液蓝图 try { @@ -267,19 +350,20 @@ namespace ArachnaeSwarm nutrientDef, cell, map, - Rot4.North, // 地貌没有旋转,使用默认 + Rot4.North, Faction.OfPlayer, - null // 地貌没有stuff + null ); if (blueprint != null) { // 显示转换效果 - if (Find.TickManager.TicksGame % 10 == 0) // 每10次消耗显示一次效果 + if (Find.TickManager.TicksGame % 10 == 0) { MoteMaker.ThrowText(cell.ToVector3Shifted(), map, "ARA_Consumed".Translate(), Color.yellow); } + return true; } } catch (Exception ex) @@ -290,86 +374,70 @@ namespace ArachnaeSwarm return false; } - return true; + return false; } - // 获取营养液消耗描述 - public string GetNutrientConsumptionDescription() + // === 修复后的Tick方法 === + protected override void Tick() { - var builder = new StringBuilder(); + base.Tick(); - builder.AppendLine("ARA_EquipmentIncubator.NutrientConsumption".Translate()); - builder.AppendLine(); - - if (totalNutrientCost == 0) + if (larvaOperateTicksRemaining > 0) { - builder.AppendLine("ARA_EquipmentIncubator.NoNutrientCost".Translate()); - return builder.ToString().TrimEndNewlines(); + larvaOperateTicksRemaining--; } - builder.AppendLine("ARA_EquipmentIncubator.NutrientRequirement".Translate(totalNutrientCost)); - builder.AppendLine("ARA_EquipmentIncubator.NutrientConsumed".Translate(consumedNutrientCount)); - builder.AppendLine("ARA_EquipmentIncubator.NutrientProgress".Translate(NutrientProgress.ToStringPercent())); - - if (HasEnoughNutrients) - { - builder.AppendLine(); - builder.AppendLine("ARA_EquipmentIncubator.NutrientRequirementsMet".Translate()); - } - else if (IsConsuming) - { - builder.AppendLine(); - builder.AppendLine("ARA_EquipmentIncubator.ConsumingNutrients".Translate()); - } - - return builder.ToString().TrimEndNewlines(); - } - - // 缓存的ModExtension - private OothecaIncubatorExtension cachedExtension; - - // 获取ModExtension的辅助属性 - public OothecaIncubatorExtension Ext - { - get - { - if (cachedExtension == null) - { - cachedExtension = def.GetModExtension() ?? OothecaIncubatorExtension.Default; - } - return cachedExtension; - } - } - - // 属性访问器 - public float SpeedMultiplier - { - get + if (isIncubating) { + // 更新乘数 if (lastMultiplierUpdateTick < 0 || Find.TickManager.TicksGame - lastMultiplierUpdateTick >= MultiplierUpdateInterval) { UpdateSpeedMultiplier(); + UpdateQualityMultiplier(); + } + + // 检查营养液消耗 + if (lastConsumeCheckTick < 0 || Find.TickManager.TicksGame - lastConsumeCheckTick >= ConsumeCheckInterval) + { + lastConsumeCheckTick = Find.TickManager.TicksGame; + CheckAndConsumeNutrients(); + } + + float currentSpeed = SpeedMultiplier; + + // 决定是否应该增加进度 + bool shouldProgress = true; + + // 检查是否因营养液不足而暂停 + if (Ext.stopIncubationWhenNutrientDeficient && + totalNutrientCost > 0 && + !HasEnoughNutrients && + nutrientDeficiencyPause) + { + shouldProgress = false; + + // 显示暂停消息(频率控制) + if (Find.TickManager.TicksGame % 2000 == 0 && Rand.Chance(0.2f)) + { + Messages.Message("ARA_EquipmentIncubator.IncubationPausedNoNutrients".Translate(incubatingThingDef?.LabelCap ?? "Unknown"), + this, MessageTypeDefOf.NeutralEvent); + } + } + + if (shouldProgress) + { + incubationProgress += currentSpeed; + qualityProgress += currentSpeed * QualityMultiplier; + } + + if (incubationProgress >= incubationDuration) + { + CompleteIncubation(); } - return speedMultiplier; - } - } - - // 质量属性 - public float QualityMultiplier => qualityMultiplier; - public float QualityProgress => qualityProgress; - public float QualityPercent => qualityTotal > 0 ? qualityProgress / qualityTotal : 0f; - - // 进度百分比 - public float AdjustedProgressPercent - { - get - { - if (incubationDuration <= 0) return 0f; - return incubationProgress / incubationDuration; } } - // 获取速度因子描述 + // === 获取速度因子描述 === public string GetSpeedFactorsDescription() { var builder = new StringBuilder(); @@ -408,7 +476,7 @@ namespace ArachnaeSwarm return builder.ToString().TrimEndNewlines(); } - // 获取质量因子描述 + // === 获取质量因子描述 === public string GetQualityFactorsDescription() { var builder = new StringBuilder(); @@ -453,8 +521,46 @@ namespace ArachnaeSwarm return builder.ToString().TrimEndNewlines(); } - - // 构建呼叫幼虫描述 + + // === 获取营养液消耗描述 === + public string GetNutrientConsumptionDescription() + { + var builder = new StringBuilder(); + + builder.AppendLine("ARA_EquipmentIncubator.NutrientConsumption".Translate()); + builder.AppendLine(); + + if (totalNutrientCost == 0) + { + builder.AppendLine("ARA_EquipmentIncubator.NoNutrientCost".Translate()); + return builder.ToString().TrimEndNewlines(); + } + + builder.AppendLine("ARA_EquipmentIncubator.NutrientRequirement".Translate(totalNutrientCost)); + builder.AppendLine("ARA_EquipmentIncubator.NutrientConsumed".Translate(consumedNutrientCount)); + builder.AppendLine("ARA_EquipmentIncubator.NutrientProgress".Translate(NutrientProgress.ToStringPercent())); + + if (HasEnoughNutrients) + { + builder.AppendLine(); + builder.AppendLine("ARA_EquipmentIncubator.NutrientRequirementsMet".Translate()); + } + else if (isConsuming) + { + builder.AppendLine(); + builder.AppendLine("ARA_EquipmentIncubator.ConsumingNutrients".Translate()); + } + + if (nutrientDeficiencyPause) + { + builder.AppendLine(); + builder.AppendLine("ARA_EquipmentIncubator.NutrientDeficiencyPaused".Translate()); + } + + return builder.ToString().TrimEndNewlines(); + } + + // === 构建呼叫幼虫描述 === private string BuildCallLarvaDescription(EquipmentIncubationConfig config) { var builder = new StringBuilder(); @@ -473,7 +579,7 @@ namespace ArachnaeSwarm return builder.ToString().TrimEndNewlines(); } - // 呼叫幼虫 + // === 呼叫幼虫 === private void CallLarva() { // 检查是否已经在孵化中 @@ -483,6 +589,7 @@ namespace ArachnaeSwarm MessageTypeDefOf.RejectInput); return; } + // 检查是否有幼虫在任务中 if (assignedLarva != null) { @@ -490,6 +597,7 @@ namespace ArachnaeSwarm MessageTypeDefOf.RejectInput); return; } + // 获取当前选择的配置 var config = EquipmentIncubatorData?.SelectedConfig; if (config == null) @@ -498,6 +606,7 @@ namespace ArachnaeSwarm MessageTypeDefOf.RejectInput); return; } + // 检查研究是否完成 if (!config.IsResearchComplete) { @@ -513,6 +622,7 @@ namespace ArachnaeSwarm } return; } + // 查找幼虫 var larva = FindLarva(); if (larva == null) @@ -521,21 +631,23 @@ namespace ArachnaeSwarm MessageTypeDefOf.RejectInput); return; } + // 给幼虫分配任务 var job = JobMaker.MakeJob(ARA_JobDefOf.ARA_OperateEquipmentIncubator, this); job.count = 1; larva.jobs.TryTakeOrderedJob(job, JobTag.MiscWork); assignedLarva = larva; + Messages.Message("ARA_EquipmentIncubator.LarvaCalled".Translate() + " " + "ARA_EquipmentIncubator.ArriveShortly".Translate(), MessageTypeDefOf.PositiveEvent); } - // 幼虫到达 + // === 幼虫到达 === public void NotifyLarvaArrived(Pawn larva) { if (larva.def.defName != "ArachnaeBase_Race_Larva") { - ArachnaeLog.Debug($"Invalid larva arrived: {larva.def.defName}"); + Log.Error($"[ARA] 无效的幼虫到达: {larva.def.defName}"); return; } @@ -546,42 +658,50 @@ namespace ArachnaeSwarm MessageTypeDefOf.SilentInput); } - // 幼虫完成操作 + // === 幼虫完成操作 === public void NotifyLarvaOperationComplete(Pawn larva) { if (larva != assignedLarva) { - ArachnaeLog.Debug("Larva operation complete called with wrong larva."); + Log.Error("[ARA] 幼虫操作完成调用错误:不是分配的幼虫"); return; } + var config = EquipmentIncubatorData?.SelectedConfig; if (config == null) { - ArachnaeLog.Debug("No incubation config selected when larva completed operation."); + Log.Error("[ARA] 幼虫完成操作时没有选择孵化配置"); return; } + incubatingThingDef = config.thingDef; incubationDuration = config.DaysRequired * 60000f; incubationProgress = 0f; isIncubating = true; qualityTotal = incubationDuration; qualityProgress = 0f; + UpdateQualityMultiplier(); UpdateSpeedMultiplier(); - // === 新增:初始化营养液消耗 === + // 初始化营养液消耗 InitializeNutrientConsumption(); + assignedLarva = null; larvaOperateTicksRemaining = 0; + Messages.Message("ARA_EquipmentIncubator.IncubationStarted".Translate() + " " + incubatingThingDef.LabelCap + ". " + "ARA_EquipmentIncubator.ProcessWillComplete".Translate() + " " + config.DaysRequired + " " + "ARA_EquipmentIncubator.DaysBaseTime".Translate(), MessageTypeDefOf.PositiveEvent); } - // 取消孵化 + // === 取消孵化 === private void CancelIncubation() { if (!isIncubating) return; + + Log.Message($"[ARA] 取消孵化: {incubatingThingDef?.defName}"); + isIncubating = false; incubationProgress = 0f; incubationDuration = 0f; @@ -589,57 +709,59 @@ namespace ArachnaeSwarm qualityProgress = 0f; qualityTotal = 0f; - // === 新增:重置营养液消耗 === - totalNutrientCost = 0; - consumedNutrientCount = 0; - hasStartedConsumption = false; - consumeProgress = 0f; - consumedCells.Clear(); + // 重置营养液消耗状态 + ResetNutrientConsumptionState(); + Messages.Message("ARA_EquipmentIncubator.IncubationCancelled".Translate() + " " + "ARA_EquipmentIncubator.ContentsLost".Translate(), MessageTypeDefOf.NeutralEvent); } - // 完成孵化 + // === 完成孵化 === private void CompleteIncubation() { if (incubatingThingDef == null) return; + + Log.Message($"[ARA] 完成孵化: {incubatingThingDef.defName}"); + float finalQualityPercent = QualityPercent; + + // 检查营养液是否满足要求 + if (totalNutrientCost > 0 && consumedNutrientCount < totalNutrientCost) + { + Messages.Message("ARA_EquipmentIncubator.IncubationCompleteNutrientDeficient".Translate(incubatingThingDef.LabelCap), + this, MessageTypeDefOf.NegativeEvent); + + // 生成物品但应用质量惩罚 + finalQualityPercent *= Mathf.Lerp(0.3f, 1.0f, NutrientProgress); + } + // 生成物品 Thing thing = ThingMaker.MakeThing(incubatingThingDef); - - // 应用质量影响 ApplyQualityEffects(thing, finalQualityPercent); + // 放置物品 var spawnPos = Position; GenPlace.TryPlaceThing(thing, spawnPos, Map, ThingPlaceMode.Near); + // 重置状态 - isIncubating = false; - incubationProgress = 0f; - incubationDuration = 0f; - incubatingThingDef = null; - qualityProgress = 0f; - qualityTotal = 0f; - - // === 新增:清理营养液消耗状态 === - totalNutrientCost = 0; - consumedNutrientCount = 0; - hasStartedConsumption = false; - consumeProgress = 0f; - consumedCells.Clear(); - // 显示消息 + ResetIncubationState(); + + // 显示完成消息 string qualityText = finalQualityPercent >= 0.9f ? "ARA_EquipmentIncubator.QualityExcellent".Translate() : finalQualityPercent >= 0.7f ? "ARA_EquipmentIncubator.QualityGood".Translate() : finalQualityPercent >= 0.5f ? "ARA_EquipmentIncubator.QualityAverage".Translate() : - finalQualityPercent >= 0.3f ? "ARA_EquipmentIncubator.QualityPoor".Translate() : "ARA_EquipmentIncubator.QualityVeryPoor".Translate(); + finalQualityPercent >= 0.3f ? "ARA_EquipmentIncubator.QualityPoor".Translate() : + "ARA_EquipmentIncubator.QualityVeryPoor".Translate(); + Messages.Message("ARA_EquipmentIncubator.IncubationComplete".Translate() + " " + thing.LabelCap + " " + "ARA_EquipmentIncubator.HasEmergedWith".Translate() + " " + qualityText + " " + "ARA_EquipmentIncubator.Quality".Translate() + " (" + finalQualityPercent.ToStringPercent() + ").", MessageTypeDefOf.PositiveEvent); + Destroy(); } - - // 应用质量效果 + // === 应用质量效果 === private void ApplyQualityEffects(Thing thing, float qualityPercent) { // 应用质量效果到装备 @@ -662,8 +784,34 @@ namespace ArachnaeSwarm thing.HitPoints = Mathf.RoundToInt(thing.MaxHitPoints * healthFactor); } } - - // 获取剩余时间 + + // === 重置营养液消耗状态 === + private void ResetNutrientConsumptionState() + { + totalNutrientCost = 0; + consumedNutrientCount = 0; + isConsuming = false; + consumedCells.Clear(); + consecutiveFailedConsumptions = 0; + nutrientDeficiencyPause = false; + lastConsumeCheckTick = -1; + } + + // === 重置孵化状态 === + private void ResetIncubationState() + { + isIncubating = false; + incubationProgress = 0f; + incubationDuration = 0f; + incubatingThingDef = null; + qualityProgress = 0f; + qualityTotal = 0f; + + // 重置营养液消耗状态 + ResetNutrientConsumptionState(); + } + + // === 获取剩余时间 === public float GetRemainingTicks() { if (!isIncubating || incubationDuration <= incubationProgress) return 0f; @@ -687,25 +835,29 @@ namespace ArachnaeSwarm return (remainingTicks % 60000f) / 2500f; } - // 检查字符串 + // === 检查字符串 === public override string GetInspectString() { var baseString = base.GetInspectString(); var builder = new StringBuilder(); + if (!string.IsNullOrEmpty(baseString)) { builder.Append(baseString); } + if (isIncubating && incubatingThingDef != null) { float progressPercent = AdjustedProgressPercent; float daysRemaining = GetRemainingDays(); float hoursRemaining = GetRemainingHours(); + if (builder.Length > 0) builder.AppendLine(); builder.Append("ARA_EquipmentIncubator.Incubating".Translate() + ": " + incubatingThingDef.LabelCap); builder.AppendLine(); builder.Append("ARA_EquipmentIncubator.Progress".Translate() + ": " + progressPercent.ToStringPercent()); builder.AppendLine(); + string timeText = "ARA_EquipmentIncubator.TimeRemaining".Translate() + ": " + daysRemaining.ToString("F1") + " " + "ARA_EquipmentIncubator.Days".Translate(); if (hoursRemaining > 0.1f && daysRemaining < 1f) { @@ -716,18 +868,30 @@ namespace ArachnaeSwarm builder.Append("ARA_EquipmentIncubator.Speed".Translate() + ": " + SpeedMultiplier.ToStringPercent() + ", " + "ARA_EquipmentIncubator.Quality".Translate() + ": " + QualityMultiplier.ToStringPercent()); - // === 新增:显示营养液消耗信息 === + // 显示营养液消耗信息 if (totalNutrientCost > 0) { builder.AppendLine(); builder.Append("ARA_EquipmentIncubator.NutrientConsumption".Translate() + ": " + consumedNutrientCount + " / " + totalNutrientCost + " (" + NutrientProgress.ToStringPercent() + ")"); - - if (!HasEnoughNutrients && IsConsuming) + + if (!HasEnoughNutrients) { builder.AppendLine(); - builder.Append("ARA_EquipmentIncubator.ConsumingNutrients".Translate()); + builder.Append("ARA_EquipmentIncubator.NutrientDeficient".Translate()); + + if (nutrientDeficiencyPause) + { + builder.AppendLine(); + builder.Append("ARA_EquipmentIncubator.NutrientDeficiencyPaused".Translate()); + } + + if (consecutiveFailedConsumptions > 0) + { + builder.AppendLine(); + builder.Append("ARA_EquipmentIncubator.ConsecutiveFailures".Translate(consecutiveFailedConsumptions)); + } } } } @@ -755,7 +919,7 @@ namespace ArachnaeSwarm builder.Append("ARA_EquipmentIncubator.SpeedMultiplier".Translate() + ": " + SpeedMultiplier.ToStringPercent() + ", " + "ARA_EquipmentIncubator.QualityMultiplier".Translate() + ": " + QualityMultiplier.ToStringPercent()); - // === 新增:显示预计的营养液需求 === + // 显示预计的营养液需求 var costStat = DefDatabase.GetNamedSilentFail("ARA_IncubationCost"); if (costStat != null) { @@ -768,10 +932,11 @@ namespace ArachnaeSwarm } } } + return builder.ToString().TrimEndNewlines(); } - // Gizmos + // === Gizmos === public override IEnumerable GetGizmos() { foreach (var gizmo in base.GetGizmos()) @@ -812,7 +977,7 @@ namespace ArachnaeSwarm } } - // 创建切换目标Gizmo - 现在使用装备的图标 + // === 创建切换目标Gizmo === private Gizmo CreateTargetSwitchGizmo() { var configs = EquipmentIncubatorData?.IncubationConfigs; @@ -830,22 +995,18 @@ namespace ArachnaeSwarm hotKey = KeyBindingDefOf.Misc2 }; - // 检查研究是否完成,如果未完成则禁用按钮 - //if (selectedConfig != null && !selectedConfig.IsResearchComplete) - //{ - // if (selectedConfig.requiredResearch != null) - // { - // switchButton.Disable("ARA_EquipmentIncubator.ResearchRequired".Translate() + " " + selectedConfig.requiredResearch.LabelCap); - // } - // else - // { - // switchButton.Disable("ARA_EquipmentIncubator.ResearchNotCompleted".Translate()); - // } - //} - return switchButton; } - // 改进的BuildSwitchButtonDescription方法 + + private string BuildSwitchButtonLabel(EquipmentIncubationConfig config, CompProperties_EquipmentIncubatorData props) + { + if (config != null && config.thingDef != null) + { + return (props?.buttonLabel ?? "ARA_EquipmentIncubator.IncubateLabel").Translate(config.thingDef.LabelCap); + } + return (props?.buttonLabel ?? "ARA_EquipmentIncubator.IncubateLabel").Translate("None"); + } + private string BuildSwitchButtonDescription(EquipmentIncubationConfig config, CompProperties_EquipmentIncubatorData props) { var builder = new StringBuilder(); @@ -888,28 +1049,17 @@ namespace ArachnaeSwarm return builder.ToString().TrimEndNewlines(); } - // 获取配置图标 - 现在直接从ThingDef获取 private Texture2D GetConfigIcon(EquipmentIncubationConfig config) { if (config == null) return BaseContent.BadTex; - // 如果配置中没有缓存图标,尝试直接获取ThingDef的uiIcon if (config.thingDef?.uiIcon != null) return config.thingDef.uiIcon; - // 回退到默认图标 return ContentFinder.Get("UI/Commands/Default", false) ?? BaseContent.BadTex; } - - private string BuildSwitchButtonLabel(EquipmentIncubationConfig config, CompProperties_EquipmentIncubatorData props) - { - if (config != null && config.thingDef != null) - { - return (props?.buttonLabel ?? "ARA_EquipmentIncubator.IncubateLabel").Translate(config.thingDef.LabelCap); - } - return (props?.buttonLabel ?? "ARA_EquipmentIncubator.IncubateLabel").Translate("None"); - } + private void ShowSelectionMenu() { var configs = EquipmentIncubatorData?.IncubationConfigs; @@ -930,42 +1080,37 @@ namespace ArachnaeSwarm string prefix = (i == currentIndex) ? "✓ " : " "; - // 获取图标 Texture2D icon = config.thingDef?.uiIcon; - // 创建选项 FloatMenuOption option; if (icon != null) { - // 使用带有图标的构造函数 option = new FloatMenuOption( prefix + label, () => SwitchToConfig(index), icon, Color.white, MenuOptionPriority.Default, - null, // mouseoverGuiAction - null, // revalidateClickTarget - 0f, // extraPartWidth - null, // extraPartOnGUI - null, // revalidateWorldClickTarget - true, // playSelectionSound - 0, // orderInPriority - HorizontalJustification.Left, // iconJustification - false // extraPartRightJustified + null, + null, + 0f, + null, + null, + true, + 0, + HorizontalJustification.Left, + false ); } else { - // 使用普通构造函数 option = new FloatMenuOption( prefix + label, () => SwitchToConfig(index) ); } - // 设置工具提示 option.tooltip = description; // 如果研究未完成,禁用选项 @@ -988,6 +1133,7 @@ namespace ArachnaeSwarm (props?.menuTitle ?? "ARA_EquipmentIncubator.MenuTitle").Translate())); } } + private void SwitchToConfig(int index) { if (EquipmentIncubatorData != null) @@ -1001,8 +1147,8 @@ namespace ArachnaeSwarm } } } - - // 查找幼虫 + + // === 查找幼虫 === private Pawn FindLarva() { var map = Map; @@ -1033,76 +1179,7 @@ namespace ArachnaeSwarm return null; } - // 每tick更新 - // 修改Tick方法,处理营养液不足时停止孵化的逻辑 - protected override void Tick() - { - base.Tick(); - - if (larvaOperateTicksRemaining > 0) - { - larvaOperateTicksRemaining--; - } - - if (isIncubating) - { - if (lastMultiplierUpdateTick < 0 || Find.TickManager.TicksGame - lastMultiplierUpdateTick >= MultiplierUpdateInterval) - { - UpdateSpeedMultiplier(); - UpdateQualityMultiplier(); - } - - float currentSpeed = SpeedMultiplier; - - // === 新增:检查是否因营养液不足而停止孵化 === - bool shouldProgress = true; - - if (Ext.stopIncubationWhenNutrientDeficient && - !HasEnoughNutrients && - isIncubating && - hasStartedConsumption) - { - // 检查是否有可用的营养液 - var availableCells = FindNutrientCells(); - if (availableCells.Count == 0 && totalNutrientCost > 0 && consumedNutrientCount < totalNutrientCost) - { - shouldProgress = false; - - // 显示停止消息(第一次或偶尔显示) - if (Find.TickManager.TicksGame % 1000 == 0 && Rand.Chance(0.1f)) - { - Messages.Message("ARA_EquipmentIncubator.IncubationPausedNoNutrients".Translate(incubatingThingDef?.LabelCap ?? "Unknown"), - this, MessageTypeDefOf.NeutralEvent); - } - } - } - - if (shouldProgress) - { - incubationProgress += currentSpeed; - qualityProgress += currentSpeed * QualityMultiplier; - } - else - { - // 孵化暂停,但仍然需要检查营养液消耗(可能营养液又出现了) - // 并且仍然应用伤害 - } - - // === 新增:检查营养液消耗 === - if (lastConsumeCheckTick < 0 || Find.TickManager.TicksGame - lastConsumeCheckTick >= ConsumeCheckInterval) - { - lastConsumeCheckTick = Find.TickManager.TicksGame; - CheckAndConsumeNutrients(); - } - - if (incubationProgress >= incubationDuration) - { - CompleteIncubation(); - } - } - } - - // 检查是否在孵化间中 + // === 检查是否在孵化间中 === private bool IsInIncubatorRoom() { if (!Ext.requiresIncubatorRoom) @@ -1114,7 +1191,7 @@ namespace ArachnaeSwarm return room.Role != null && room.Role.defName == "ARA_Incubator_Room"; } - // 计算营养液数量 + // === 计算营养液数量 === private int CountNearbyNutrientSolutions() { var map = Map; @@ -1143,7 +1220,7 @@ namespace ArachnaeSwarm return count; } - // 计算房间质量因子 + // === 计算房间质量因子 === private float GetRoomQualityFactor() { if (!Ext.useRoomQualityFactor) @@ -1161,7 +1238,7 @@ namespace ArachnaeSwarm return 1.0f; } - // 计算附近其他卵的数量 + // === 计算附近其他卵的数量 === private int CountNearbyOtherOothecas() { var map = Map; @@ -1206,7 +1283,7 @@ namespace ArachnaeSwarm return count; } - // 更新速度乘数 + // === 更新速度乘数 === private void UpdateSpeedMultiplier() { float multiplier = 1.0f; @@ -1225,7 +1302,7 @@ namespace ArachnaeSwarm lastMultiplierUpdateTick = Find.TickManager.TicksGame; } - // 更新质量乘数 + // === 更新质量乘数 === private void UpdateQualityMultiplier() { float multiplier = 1.0f; @@ -1249,7 +1326,7 @@ namespace ArachnaeSwarm qualityMultiplier = Mathf.Clamp(multiplier, 0f, 1.0f); } - // 保存/加载 + // === 保存/加载 === public override void ExposeData() { base.ExposeData(); @@ -1266,12 +1343,13 @@ namespace ArachnaeSwarm Scribe_Values.Look(ref qualityProgress, "qualityProgress", 0f); Scribe_Values.Look(ref qualityTotal, "qualityTotal", 0f); - // === 新增:保存营养液消耗状态 === + // 保存营养液消耗状态 Scribe_Values.Look(ref totalNutrientCost, "totalNutrientCost", 0); Scribe_Values.Look(ref consumedNutrientCount, "consumedNutrientCount", 0); Scribe_Values.Look(ref lastConsumeCheckTick, "lastConsumeCheckTick", -1); - Scribe_Values.Look(ref hasStartedConsumption, "hasStartedConsumption", false); - Scribe_Values.Look(ref consumeProgress, "consumeProgress", 0f); + Scribe_Values.Look(ref isConsuming, "isConsuming", false); + Scribe_Values.Look(ref consecutiveFailedConsumptions, "consecutiveFailedConsumptions", 0); + Scribe_Values.Look(ref nutrientDeficiencyPause, "nutrientDeficiencyPause", false); Scribe_Collections.Look(ref consumedCells, "consumedCells", LookMode.Value); if (Scribe.mode == LoadSaveMode.PostLoadInit) @@ -1279,6 +1357,12 @@ namespace ArachnaeSwarm // 确保列表不为null if (consumedCells == null) consumedCells = new List(); + + // 确保状态一致性 + if (isIncubating && totalNutrientCost > 0 && !isConsuming) + { + isConsuming = true; // 加载后恢复消耗状态 + } } } } diff --git a/Source/ArachnaeSwarm/Thing_Comps/ARA_AreaaDamage/CompAreaDamage.cs b/Source/ArachnaeSwarm/Thing_Comps/ARA_AreaaDamage/CompAreaDamage.cs new file mode 100644 index 0000000..a262bb2 --- /dev/null +++ b/Source/ArachnaeSwarm/Thing_Comps/ARA_AreaaDamage/CompAreaDamage.cs @@ -0,0 +1,470 @@ +// File: CompAreaDamage.cs +using System.Collections.Generic; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.Sound; + +namespace ArachnaeSwarm +{ + public class CompAreaDamage : ThingComp + { + private int ticksUntilNextDamage; + private bool enabled; + private List activeEffecters = new List(); // 正在运行的效果 + private int effecterCleanupTick = -1; // 效果清理时间点 + + public CompProperties_AreaDamage Props => (CompProperties_AreaDamage)props; + public bool Enabled => enabled; + + public override void Initialize(CompProperties props) + { + base.Initialize(props); + ticksUntilNextDamage = Props.damageIntervalTicks; + enabled = Props.startEnabled; + } + + public override void CompTick() + { + base.CompTick(); + + if (!parent.Spawned || !enabled) + return; + + // 清理过期的效果 + if (activeEffecters.Count > 0 && Find.TickManager.TicksGame >= effecterCleanupTick) + { + CleanupOldEffecters(); + } + + ticksUntilNextDamage--; + if (ticksUntilNextDamage <= 0) + { + DoAreaDamage(); + PlayEffecter(); + ticksUntilNextDamage = Props.damageIntervalTicks; + } + } + + /// + /// 清理旧的效果 + /// + private void CleanupOldEffecters() + { + for (int i = activeEffecters.Count - 1; i >= 0; i--) + { + try + { + activeEffecters[i].Cleanup(); + } + catch { } + activeEffecters.RemoveAt(i); + } + effecterCleanupTick = -1; + } + + public void Toggle() + { + enabled = !enabled; + } + + public void SetEnabled(bool newState) + { + enabled = newState; + } + + private void DoAreaDamage() + { + Map map = parent.Map; + if (map == null) + return; + + // 获取范围内的所有物体 + List thingsInRange = new List(); + foreach (IntVec3 cell in GenRadial.RadialCellsAround(parent.Position, Props.radius, true)) + { + if (!cell.InBounds(map)) + continue; + + List thingList = cell.GetThingList(map); + foreach (Thing thing in thingList) + { + if (IsValidTargetType(thing) && IsValidTarget(thing) && !thingsInRange.Contains(thing)) + { + thingsInRange.Add(thing); + } + } + } + + // 对每个有效目标造成伤害 + foreach (Thing target in thingsInRange) + { + ApplyDamageToTarget(target); + } + } + + /// + /// 播放区域效果 + /// + private void PlayEffecter() + { + if (Props.areaEffecterDef == null) + return; + + Map map = parent.Map; + if (map == null) + return; + + // 播放音效 + if (Props.effectSoundDef != null) + { + Props.effectSoundDef.PlayOneShot(new TargetInfo(parent.Position, map)); + } + + // 在中心位置播放效果 + if (Props.effectAtCenter) + { + PlayEffectAtPosition(parent.Position, map); + } + + // 如果需要,在每个目标位置播放效果 + if (Props.effectAtTargets || Props.multipleEffects) + { + var targets = GetValidTargetsInRange(); + foreach (var target in targets) + { + PlayEffectAtPosition(target.Position, map); + } + } + + // 设置效果清理时间 + effecterCleanupTick = Find.TickManager.TicksGame + Props.effecterDurationTicks; + } + + /// + /// 在指定位置播放效果 + /// + private void PlayEffectAtPosition(IntVec3 position, Map map) + { + try + { + Effecter effecter = Props.areaEffecterDef.Spawn(); + activeEffecters.Add(effecter); + + // 设置效果缩放 + float scale = Props.effectScaleRange.RandomInRange; + // 注意:Effecter的缩放需要特殊的处理方式,这里使用反射或组件 + + // 触发效果 + TargetInfo sourceInfo = new TargetInfo(position, map); + effecter.Trigger(sourceInfo, sourceInfo); + } + catch (System.Exception ex) + { + Log.Error($"Failed to spawn effecter at {position}: {ex.Message}"); + } + } + + /// + /// 检查目标是否为建筑或Pawn + /// + private bool IsValidTargetType(Thing thing) + { + // 只针对建筑和Pawn + return thing is Building || thing is Pawn; + } + + private bool IsValidTarget(Thing thing) + { + // 首先检查是否为建筑或Pawn(双重检查) + if (!(thing is Building || thing is Pawn)) + { + return false; + } + + // 检查是否为 Pawn + if (thing is Pawn pawn) + { + return IsValidPawnTarget(pawn); + } + // 检查是否为建筑 + else if (thing is Building building) + { + return IsValidBuildingTarget(building); + } + + return false; + } + + /// + /// 检查Pawn是否有效目标 + /// + private bool IsValidPawnTarget(Pawn pawn) + { + // 基础检查:死亡或倒地的Pawn不是有效目标 + if (pawn.Dead || pawn.Downed) + return false; + + // 检查是否影响Pawn + if (!Props.affectPawns) + return false; + + // 检查阵营关系 + return CheckFactionRelationship(pawn.Faction); + } + + /// + /// 检查建筑是否有效目标 + /// + private bool IsValidBuildingTarget(Building building) + { + // 基础检查:建筑必须有生命值且未损坏 + if (building.def.useHitPoints == false || building.HitPoints <= 0) + return false; + + // 检查是否影响建筑 + if (!Props.affectBuildings) + return false; + + // 检查阵营关系 + return CheckFactionRelationship(building.Faction); + } + + /// + /// 检查阵营关系 + /// + private bool CheckFactionRelationship(Faction targetFaction) + { + Faction parentFaction = parent.Faction; + + // 如果忽略所有阵营关系检查,直接返回true + if (Props.ignoreFactionRelations) + return true; + + // 如果影响所有物体,直接返回true + if (Props.affectEverything) + return true; + + // 父物体没有派系的情况 + if (parentFaction == null) + { + // 目标也没有派系 - 检查是否影响中立 + if (targetFaction == null) + return Props.affectNeutral; + + // 目标是玩家 - 检查是否影响友好 + if (targetFaction.IsPlayer) + return Props.affectFriendly; + + // 目标是非玩家派系 - 检查是否影响敌对 + return Props.affectHostile; + } + + // 父物体有派系的情况 + if (targetFaction == null) + { + // 目标没有派系 - 检查是否影响中立 + return Props.affectNeutral; + } + + // 目标与父物体同派系 - 检查是否影响友好 + if (targetFaction == parentFaction) + return Props.affectFriendly; + + // 目标与父物体敌对 - 检查是否影响敌对 + if (targetFaction.HostileTo(parentFaction)) + return Props.affectHostile; + + // 其他情况视为中立 - 检查是否影响中立 + return Props.affectNeutral; + } + + private void ApplyDamageToTarget(Thing target) + { + if (Props.damageDef == null) + return; + + // 计算最终伤害量(应用缩放) + int finalDamageAmount = CalculateFinalDamage(target); + + // 创建伤害信息 + DamageInfo damageInfo = new DamageInfo( + Props.damageDef, + finalDamageAmount, + armorPenetration: Props.armorPenetration, + instigator: parent, + hitPart: null, + weapon: null, + category: DamageInfo.SourceCategory.ThingOrUnknown + ); + + // 应用伤害 + target.TakeDamage(damageInfo); + + // 特殊效果处理 + HandleSpecialEffects(target, damageInfo); + } + + /// + /// 计算最终伤害量,应用心灵敏感度缩放和保底伤害 + /// + private int CalculateFinalDamage(Thing target) + { + float damageFactor = 1.0f; + + // 使用固定缩放值 + if (Props.useFixedScaling) + { + damageFactor = Props.fixedDamageFactor; + } + // 使用心灵敏感度缩放(仅对Pawn有效) + else if (Props.scaleWithPsychicSensitivity && target is Pawn pawn) + { + damageFactor = CalculatePsychicSensitivityFactor(pawn); + } + + // 确保伤害倍率在最小和最大范围内 + damageFactor = Mathf.Clamp(damageFactor, Props.minDamageFactor, Props.maxDamageFactor); + + // 计算最终伤害 + int finalDamage = Mathf.RoundToInt(Props.damageAmount * damageFactor); + + // 确保至少造成1点伤害 + return Mathf.Max(1, finalDamage); + } + + /// + /// 根据目标的心灵敏感度计算伤害倍率 + /// + private float CalculatePsychicSensitivityFactor(Pawn targetPawn) + { + // 获取心灵敏感度(如果目标没有心灵敏感度,使用默认值0.5) + float psychicSensitivity = 0.5f; + + if (targetPawn.health != null && targetPawn.health.capacities != null) + { + psychicSensitivity = targetPawn.GetStatValue(StatDefOf.PsychicSensitivity); + } + + // 返回心灵敏感度作为伤害倍率 + return psychicSensitivity; + } + + /// + /// 处理特殊效果(如伤害类型特定的效果) + /// + private void HandleSpecialEffects(Thing target, DamageInfo damageInfo) + { + // 显示伤害数值(调试用) + if (Props.showDamageNumbers) + { + MoteMaker.ThrowText(target.DrawPos, target.Map, damageInfo.Amount.ToString()); + } + } + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Values.Look(ref ticksUntilNextDamage, "ticksUntilNextDamage", Props.damageIntervalTicks); + Scribe_Values.Look(ref enabled, "enabled", Props.startEnabled); + } + + public override IEnumerable CompGetGizmosExtra() + { + // 只有拥有者可以操作开关 + if (parent.Faction != null && parent.Faction != Faction.OfPlayer && !parent.Faction.IsPlayer) + yield break; + + // 创建切换开关的 Gizmo + Command_Toggle toggleCommand = new Command_Toggle + { + defaultLabel = Props.toggleLabel.Translate(), + defaultDesc = Props.toggleDescription.Translate(), + icon = LoadToggleIcon(), + isActive = () => enabled, + toggleAction = () => Toggle() + }; + + yield return toggleCommand; + } + + private Texture2D LoadToggleIcon() + { + if (!string.IsNullOrEmpty(Props.toggleIconPath)) + { + return ContentFinder.Get(Props.toggleIconPath, false); + } + + // 默认图标 + return TexCommand.DesirePower; + } + + public override string CompInspectStringExtra() + { + string baseString = base.CompInspectStringExtra(); + + // 状态信息 + string statusText = enabled ? + "AreaDamageEnabled".Translate() : + "AreaDamageDisabled".Translate(); + + if (string.IsNullOrEmpty(baseString)) + return statusText; + else + return baseString + "\n" + statusText; + } + + /// + /// 获取范围内所有有效目标(调试和外部调用用) + /// + public List GetValidTargetsInRange() + { + Map map = parent.Map; + List validTargets = new List(); + + if (map == null || !enabled) + return validTargets; + + foreach (IntVec3 cell in GenRadial.RadialCellsAround(parent.Position, Props.radius, true)) + { + if (!cell.InBounds(map)) + continue; + + List thingList = cell.GetThingList(map); + foreach (Thing thing in thingList) + { + if (IsValidTargetType(thing) && IsValidTarget(thing) && !validTargets.Contains(thing)) + { + validTargets.Add(thing); + } + } + } + + return validTargets; + } + + /// + /// 手动触发一次区域伤害(用于外部调用) + /// + public void TriggerAreaDamage() + { + if (parent.Spawned && enabled) + { + DoAreaDamage(); + PlayEffecter(); + ticksUntilNextDamage = Props.damageIntervalTicks; + } + } + + /// + /// 绘制效果范围(用于调试或显示) + /// + public void DrawEffectRange() + { + if (parent.Spawned && enabled) + { + GenDraw.DrawRadiusRing(parent.Position, Props.radius); + } + } + } +} diff --git a/Source/ArachnaeSwarm/Thing_Comps/ARA_AreaaDamage/CompProperties_AreaDamage.cs b/Source/ArachnaeSwarm/Thing_Comps/ARA_AreaaDamage/CompProperties_AreaDamage.cs new file mode 100644 index 0000000..bb941cb --- /dev/null +++ b/Source/ArachnaeSwarm/Thing_Comps/ARA_AreaaDamage/CompProperties_AreaDamage.cs @@ -0,0 +1,58 @@ +// File: CompProperties_AreaDamage.cs +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_AreaDamage : CompProperties + { + public float radius = 5f; // A: 伤害半径 + public int damageIntervalTicks = 60; // B: 伤害间隔(帧数) + public DamageDef damageDef; // C: 伤害类型 + public int damageAmount = 10; // 基础伤害量 + public float armorPenetration = 0f; // 护甲穿透 + + // === 新增:Effecter设置 === + public EffecterDef areaEffecterDef = null; // 区域效果定义 + public int effecterDurationTicks = 30; // 效果持续时间(ticks) + public SoundDef effectSoundDef = null; // 效果音效 + public FloatRange effectScaleRange = new FloatRange(0.8f, 1.2f); // 效果缩放范围 + + // 效果播放位置 + public bool effectAtTargets = false; // 效果是否在目标位置播放 + public bool effectAtCenter = true; // 效果是否在中心位置播放 + public bool multipleEffects = false; // 是否对每个目标播放单独效果 + + // 伤害缩放设置 + public bool scaleWithPsychicSensitivity = false; // 是否随心灵敏感度缩放 + public float minDamageFactor = 0.5f; // 最低伤害倍率(0.0-1.0) + public float maxDamageFactor = 2.0f; // 最高伤害倍率 + public bool useFixedScaling = false; // 是否使用固定缩放值 + public float fixedDamageFactor = 1.0f; // 固定伤害倍率 + + // 目标过滤 + public bool affectFriendly = false; // 是否影响友方 + public bool affectNeutral = true; // 是否影响中立 + public bool affectHostile = true; // 是否影响敌方 + public bool affectBuildings = true; // 是否影响建筑 + public bool affectPawns = true; // 是否影响生物 + + // 特殊设置 + public bool ignoreFactionRelations = false; // 忽略所有阵营关系检查(用于无派系实体) + public bool affectEverything = false; // 影响范围内所有有生命值的物体 + + // 特殊效果 + public bool showDamageNumbers = false; // 显示伤害数值(调试用) + + // 开关设置 + public bool startEnabled = true; // 初始是否启用 + public string toggleLabel = "Toggle Area Damage"; // 开关标签 + public string toggleDescription = "Enable or disable the area damage effect"; // 开关描述 + public string toggleIconPath; // 开关图标路径 + + public CompProperties_AreaDamage() + { + compClass = typeof(CompAreaDamage); + } + } +} diff --git a/Source/ArachnaeSwarm/Verbs/PawnBodyWeapon/CompProperties_PawnBodyWeapon.cs b/Source/ArachnaeSwarm/Verbs/PawnBodyWeapon/CompProperties_PawnBodyWeapon.cs new file mode 100644 index 0000000..6a9cb6d --- /dev/null +++ b/Source/ArachnaeSwarm/Verbs/PawnBodyWeapon/CompProperties_PawnBodyWeapon.cs @@ -0,0 +1,106 @@ +// File: CompPawnBodyWeapon.cs +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_PawnBodyWeapon : CompProperties + { + // 基础伤害设置 + public float cleaveAngle = 90f; + public float cleaveRange = 2.5f; + public float cleaveDamageFactor = 0.7f; + public bool damageDowned = false; + public DamageDef cleaveDamageDef = null; + + // 攻击效果 + public EffecterDef attackEffecter = null; + public EffecterDef cleaveEffecter = null; + public SoundDef attackSound = null; + + // 特殊效果 + public HediffDef applyHediffOnHit = null; // 命中时附加的效果 + public float hediffSeverity = 0.1f; + public float hediffChance = 1.0f; + + // 条件触发 + public bool requiresMeleeSkill = false; // 是否需要近战技能 + public int minMeleeSkillLevel = 0; + public bool onlyWhenDrafted = false; // 是否只在征召时生效 + + public CompProperties_PawnBodyWeapon() + { + this.compClass = typeof(CompPawnBodyWeapon); + } + } + + public class CompPawnBodyWeapon : ThingComp + { + public CompProperties_PawnBodyWeapon Props => (CompProperties_PawnBodyWeapon)this.props; + + private Pawn Pawn => this.parent as Pawn; + + // 检查是否可以使用身体武器 + public bool CanUseBodyWeapon(Verb verb = null) + { + if (Pawn == null || Pawn.Dead || Pawn.Downed) + return false; + + // 检查是否被征召 + if (Props.onlyWhenDrafted && !Pawn.Drafted) + return false; + + // 检查近战技能 + if (Props.requiresMeleeSkill && Pawn.skills != null) + { + var meleeSkill = Pawn.skills.GetSkill(SkillDefOf.Melee); + if (meleeSkill.Level < Props.minMeleeSkillLevel) + return false; + } + + return true; + } + + // 获取实际伤害系数(可以基于技能、状态等调整) + public float GetDamageFactor(Verb verb = null) + { + float factor = Props.cleaveDamageFactor; + + // 如果有近战技能加成 + if (Pawn.skills != null) + { + var meleeSkill = Pawn.skills.GetSkill(SkillDefOf.Melee); + factor *= (1.0f + (meleeSkill.Level * 0.02f)); // 每级增加2%伤害 + } + + // 检查是否有增强状态 + if (Pawn.health?.hediffSet != null) + { + // 这里可以添加基于hediff的伤害加成 + // 例如:狂暴状态增加伤害 + } + + return factor; + } + + // 获取攻击范围 + public float GetCleaveRange(Verb verb = null) + { + float range = Props.cleaveRange; + + // 基于体型调整范围 + if (Pawn.BodySize > 1.0f) + { + range *= Pawn.BodySize * 0.5f; + } + + return range; + } + + // 获取攻击角度 + public float GetCleaveAngle(Verb verb = null) + { + return Props.cleaveAngle; + } + } +} diff --git a/Source/ArachnaeSwarm/Verbs/PawnBodyWeapon/Verb_MeleeAttack_BodyWeapon.cs b/Source/ArachnaeSwarm/Verbs/PawnBodyWeapon/Verb_MeleeAttack_BodyWeapon.cs new file mode 100644 index 0000000..1dae06c --- /dev/null +++ b/Source/ArachnaeSwarm/Verbs/PawnBodyWeapon/Verb_MeleeAttack_BodyWeapon.cs @@ -0,0 +1,226 @@ +// File: Verb_MeleeAttack_BodyWeapon.cs +using RimWorld; +using Verse; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace ArachnaeSwarm +{ + public class Verb_MeleeAttack_BodyWeapon : Verb_MeleeAttack + { + private CompPawnBodyWeapon Comp + { + get + { + return this.CasterPawn?.GetComp(); + } + } + + protected override DamageWorker.DamageResult ApplyMeleeDamageToTarget(LocalTargetInfo target) + { + DamageWorker.DamageResult result = new DamageWorker.DamageResult(); + + // 播放攻击特效 + PlayAttackEffecter(target); + + // 1. 对主目标造成伤害 + DamageInfo dinfo = new DamageInfo( + this.verbProps.meleeDamageDef, + this.verbProps.AdjustedMeleeDamageAmount(this, this.CasterPawn), + this.verbProps.AdjustedArmorPenetration(this, this.CasterPawn), + -1f, + this.CasterPawn, + null, + null // 身体武器没有装备 + ); + dinfo.SetTool(this.tool); + + if (target.HasThing) + { + result = target.Thing.TakeDamage(dinfo); + + // 附加特殊效果 + ApplySpecialEffects(target.Thing); + } + + // 2. 执行溅射伤害 + Pawn casterPawn = this.CasterPawn; + if (casterPawn == null || !target.HasThing) + { + return result; + } + + Thing mainTarget = target.Thing; + Vector3 attackDirection = (mainTarget.Position - casterPawn.Position).ToVector3().normalized; + bool mainTargetIsHostile = mainTarget.HostileTo(casterPawn); + + // 获取溅射参数 + float cleaveRange = this.Comp.GetCleaveRange(this); + float cleaveAngle = this.Comp.GetCleaveAngle(this); + float damageFactor = this.Comp.GetDamageFactor(this); + + // 查找施法者周围的潜在目标 + IEnumerable potentialTargets = GenRadial.RadialDistinctThingsAround( + casterPawn.Position, + casterPawn.Map, + cleaveRange, + useCenter: true + ); + + foreach (Thing thing in potentialTargets) + { + // 跳过主目标、自己和非生物 + if (thing == mainTarget || thing == casterPawn || !(thing is Pawn secondaryTargetPawn)) + { + continue; + } + + // 根据XML配置决定是否跳过倒地的生物 + if (!this.Comp.Props.damageDowned && secondaryTargetPawn.Downed) + { + continue; + } + + // 智能溅射:次要目标的敌对状态必须与主目标一致 + if (secondaryTargetPawn.HostileTo(casterPawn) != mainTargetIsHostile) + { + continue; + } + + // 检查目标是否在攻击扇形范围内 + Vector3 directionToTarget = (thing.Position - casterPawn.Position).ToVector3().normalized; + float angle = Vector3.Angle(attackDirection, directionToTarget); + + if (angle <= cleaveAngle / 2f) + { + // 对次要目标造成伤害 + DamageInfo cleaveDinfo = new DamageInfo( + this.verbProps.meleeDamageDef, + this.verbProps.AdjustedMeleeDamageAmount(this, casterPawn) * damageFactor, + this.verbProps.AdjustedArmorPenetration(this, casterPawn) * damageFactor, + -1f, + casterPawn, + null, + null // 身体武器没有装备 + ); + cleaveDinfo.SetTool(this.tool); + secondaryTargetPawn.TakeDamage(cleaveDinfo); + + // 附加特殊效果 + ApplySpecialEffects(secondaryTargetPawn); + } + } + return result; + } + + /// + /// 播放攻击特效 + /// + private void PlayAttackEffecter(LocalTargetInfo target) + { + if (this.CasterPawn == null || this.CasterPawn.Map == null || this.Comp == null) + return; + + // 播放攻击特效 + if (this.Comp.Props.attackEffecter != null) + { + Effecter attackEffect = this.Comp.Props.attackEffecter.Spawn(); + attackEffect.Trigger(new TargetInfo(this.CasterPawn.Position, this.CasterPawn.Map), target.ToTargetInfo(this.CasterPawn.Map)); + attackEffect.Cleanup(); + } + + // 播放溅射特效 + if (this.Comp.Props.cleaveEffecter != null && target.HasThing) + { + PlayCleaveEffecter(target.Thing); + } + } + + /// + /// 播放溅射特效 + /// + private void PlayCleaveEffecter(Thing mainTarget) + { + if (this.CasterPawn == null || this.CasterPawn.Map == null || mainTarget == null || this.Comp == null) + return; + + Pawn casterPawn = this.CasterPawn; + + // 播放主要的溅射特效 + Effecter cleaveEffect = this.Comp.Props.cleaveEffecter.Spawn(); + cleaveEffect.Trigger(new TargetInfo(casterPawn.Position, casterPawn.Map), new TargetInfo(mainTarget.Position, casterPawn.Map)); + cleaveEffect.Cleanup(); + } + + /// + /// 附加特殊效果 + /// + private void ApplySpecialEffects(Thing target) + { + if (this.Comp == null || this.Comp.Props.applyHediffOnHit == null) + return; + + if (target is Pawn targetPawn) + { + if (Rand.Chance(this.Comp.Props.hediffChance)) + { + Hediff hediff = HediffMaker.MakeHediff(this.Comp.Props.applyHediffOnHit, targetPawn); + hediff.Severity = this.Comp.Props.hediffSeverity; + targetPawn.health.AddHediff(hediff); + } + } + } + + public override void DrawHighlight(LocalTargetInfo target) + { + base.DrawHighlight(target); + + if (target.IsValid && CasterPawn != null && this.Comp != null && this.Comp.CanUseBodyWeapon(this)) + { + GenDraw.DrawFieldEdges(GetCleaveCells(target.Cell)); + } + } + + private List GetCleaveCells(IntVec3 center) + { + if (this.Comp == null || !this.Comp.CanUseBodyWeapon(this)) + { + return new List(); + } + + IntVec3 casterPos = this.CasterPawn.Position; + Map map = this.CasterPawn.Map; + Vector3 attackDirection = (center - casterPos).ToVector3().normalized; + + float cleaveRange = this.Comp.GetCleaveRange(this); + float cleaveAngle = this.Comp.GetCleaveAngle(this); + + return GenRadial.RadialCellsAround(casterPos, cleaveRange, useCenter: true) + .Where(cell => { + if (!cell.InBounds(map)) return false; + Vector3 directionToCell = (cell - casterPos).ToVector3(); + if (directionToCell.sqrMagnitude <= 0.001f) return false; // 排除施法者自身位置 + return Vector3.Angle(attackDirection, directionToCell) <= cleaveAngle / 2f; + }).ToList(); + } + + // 重写此方法以在攻击前检查身体武器状态 + protected override bool TryCastShot() + { + if (this.Comp != null && !this.Comp.CanUseBodyWeapon(this)) + { + // 不能使用身体武器,使用普通攻击 + if (this.CasterPawn != null) + { + // 播放效果(可选) + Messages.Message("ARA_BodyWeapon_CannotUse".Translate(this.CasterPawn.LabelShortCap), + MessageTypeDefOf.NeutralEvent); + } + return base.TryCastShot(); + } + + return base.TryCastShot(); + } + } +}