+
+ 0.01
+ true
+ 0.05
+ 0~1
+ 10~17
+
+
\ No newline at end of file
diff --git a/1.4/Defs/RecipeDefs/Recipes_ButcheryDrone.xml b/1.4/Defs/RecipeDefs/Recipes_ButcheryDrone.xml
new file mode 100644
index 000000000..e16d0a74d
--- /dev/null
+++ b/1.4/Defs/RecipeDefs/Recipes_ButcheryDrone.xml
@@ -0,0 +1,37 @@
+
+
+
+ ButcherCorpseDrone
+
+ Salvage the materials from a broken drone.
+ Salvaging drone corpse.
+ 300
+ ButcheryMechanoidSpeed
+ Crafting
+ ButcheryMechanoidEfficiency
+ ButcherMechanoid
+ Recipe_ButcherCorpseMechanoid
+
+
+
+
+
Corpses
+
+
+ 1
+
+
+
+
Butchery
+
+
+
+
CorpsesDrone
+
+
+
+
TableMachining
+
TableRoboticMachining
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/RecipeDefs/Recipes_Fermentation.xml b/1.4/Defs/RecipeDefs/Recipes_Fermentation.xml
new file mode 100644
index 000000000..57e1c123e
--- /dev/null
+++ b/1.4/Defs/RecipeDefs/Recipes_Fermentation.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+ BrewBeer_sixpack
+
+ Brew beer in a batch lot of 10 units at once.
+ Brewing beer.
+ Cook
+ Cooking
+ GeneralLaborSpeed
+ Cooking
+ 180000
+
+
+
+
+
Wort
+
+
+ 10
+
+
+
+
+
Wort
+
+
+
+ 10
+
+
+
+
+
+ BrewBeer_case
+
+ Brew beer in a batch lot of 25 units at once.
+ Brewing beer.
+ Cook
+ Cooking
+ GeneralLaborSpeed
+ Cooking
+ 180000
+
+
+
+
+
Wort
+
+
+ 25
+
+
+
+
+
Wort
+
+
+
+ 25
+
+
+
+
+
+
+ BrewBeer_keg
+
+ Brew beer in a batch lot of 50 units at once.
+ Brewing beer.
+ Cook
+ Cooking
+ GeneralLaborSpeed
+ Cooking
+ 180000
+
+
+
+
+
Wort
+
+
+ 50
+
+
+
+
+
Wort
+
+
+
+ 50
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/RecipeDefs/Recipes_Items.xml b/1.4/Defs/RecipeDefs/Recipes_Items.xml
new file mode 100644
index 000000000..9b06b27d7
--- /dev/null
+++ b/1.4/Defs/RecipeDefs/Recipes_Items.xml
@@ -0,0 +1,489 @@
+
+
+
+
+ MakeDataDisk
+
+ Make a roll of magnetic data tape.
+ Making data disk.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 5000
+
+
+
+
+
Steel
+
+
+ 50
+
+
+
+
+
ComponentIndustrial
+
+
+ 1
+
+
+
+
+
Steel
+
ComponentIndustrial
+
+
+
+ 1
+
+
+ 8
+
+ Crafting
+
+
TableMachining
+
TableRoboticMachining
+
+ PRF_MagneticTape
+
+
+
+
+ MakePRF_RoboticArm
+
+ Make a robotic arm.
+ Making robotic arm.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 1000
+
+
+
+
+
ComponentIndustrial
+
+
+ 2
+
+
+
+
+
Steel
+
+
+ 20
+
+
+
+
+
ComponentIndustrial
+
Steel
+
+
+
+ 1
+
+
+ 8
+
+ Crafting
+
+
TableMachining
+
TableRoboticMachining
+
+ PRF_CoreTierI
+
+
+
+
+ MakePRF_ElectronicChip_I
+
+ Make a basic AI chip.
+ Making basic AI chip.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 2000
+
+
+
+
+
ComponentIndustrial
+
+
+ 4
+
+
+
+
+
Steel
+
+
+ 10
+
+
+
+
+
ComponentIndustrial
+
Steel
+
+
+
+ 1
+
+
+ 8
+
+ Crafting
+
+
TableRoboticMachining
+
+ PRF_CoreTierII
+
+
+
+
+ MakePRF_ElectronicChip_II
+
+ Make an advanced AI core.
+ Making advanced AI core.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 4000
+
+
+
+
+
ComponentSpacer
+
+
+ 4
+
+
+
+
+
Steel
+
+
+ 10
+
+
+
+
+
PRF_ElectronicChip_I
+
+
+ 1
+
+
+
+
+
Plasteel
+
+
+ 5
+
+
+
+
+
ComponentSpacer
+
Steel
+
PRF_ElectronicChip_I
+
Plasteel
+
+
+
+ 1
+
+
+ 15
+
+ Crafting
+
+
TableRoboticMachining
+
+ PRF_CoreTierIII
+
+
+
+
+ MakePRF_ElectronicChip_III
+
+ Make a qubit processor.
+ Making qubit processor.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 10000
+
+
+
+
+
ComponentSpacer
+
+
+ 10
+
+
+
+
+
Gold
+
+
+ 10
+
+
+
+
+
PRF_ElectronicChip_II
+
+
+ 5
+
+
+
+
+
Plasteel
+
+
+ 100
+
+
+
+
+
ComponentSpacer
+
Gold
+
PRF_ElectronicChip_II
+
Plasteel
+
+
+
+ 1
+
+
+ 18
+
+ Crafting
+
+
TableRoboticMachining
+
+ PRF_CoreTierIV
+
+
+
+
+ MakePRF_DroneModule
+
+ Make a drone module.
+ Making drone module.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 2000
+
+
+
+
+
Plasteel
+
+
+ 10
+
+
+
+
+
Steel
+
+
+ 30
+
+
+
+
+
ComponentIndustrial
+
+
+ 4
+
+
+
+
+
Plasteel
+
Steel
+
ComponentIndustrial
+
+
+
+ 1
+
+
+ 8
+
+ Crafting
+
+
TableRoboticMachining
+
+ PRF_BasicDrones
+
+
+
+
+ MakeSmallFrame
+
+ Make a small machine frame for use in factory buildings.
+ Making frame.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 1800
+
+
+
+
+
ComponentIndustrial
+
+
+ 5
+
+
+
+
+
Steel
+
+
+ 30
+
+
+
+
+
ComponentIndustrial
+
Steel
+
+
+
+ 1
+
+
+ 6
+
+ Crafting
+
+
TableRoboticMachining
+
+
+
+
+
+ MakeMediumFrame
+
+ Make a medium machine frame for a factory building.
+ Making frame.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 3000
+
+
+
+
+
ComponentIndustrial
+
+
+ 10
+
+
+
+
+
Steel
+
+
+ 50
+
+
+
+
+
Plasteel
+
+
+ 5
+
+
+
+
+
ComponentIndustrial
+
Steel
+
Plasteel
+
+
+
+ 1
+
+
+ 8
+
+ Crafting
+
+
TableRoboticMachining
+
+
+
+
+
+ MakeLargeFrame
+
+ Make an advanced machine frame for factory buildings.
+ Making frame.
+ GeneralLaborSpeed
+ Cook
+ Recipe_Machining
+ 4800
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/RecipeDefs/Recipes_Recycle.xml b/1.4/Defs/RecipeDefs/Recipes_Recycle.xml
new file mode 100644
index 000000000..5ee4a776b
--- /dev/null
+++ b/1.4/Defs/RecipeDefs/Recipes_Recycle.xml
@@ -0,0 +1,183 @@
+
+
+
+
+
+ PRF_Recycle_Apparel
+
+ Recycle apparel back into raw resources.
+ Recycling apparel.
+ 1600
+ GeneralLaborSpeed
+ Tailor
+ Recipe_Tailor
+ Crafting
+
+
+
+
+
Apparel
+
+
+ 1
+
+
+
+
Smelted
+
+
+
+
Apparel
+
+
+
+
PRF_Recycler
+
+
+
+
+
+ PRF_Recycle_Weapon
+
+ Recycle weapons back into raw resources.
+ Smelting weapon.
+ 1600
+ SmeltingSpeed
+ Smelt
+ Recipe_Smelt
+
+
Smelted
+
+
+
+
+
+
Weapons
+
+
+ 1
+
+
+
+
+
Weapons
+
+
+
+
PRF_Recycler
+
+
+
+
+
+ PRF_Destroy_Chunks
+
+ Crush unwanted stone chunks to dust in order to completely destroy them.
+ Chrushing.
+ 600
+ GeneralLaborSpeed
+ Hauling
+ Cremate
+ Recipe_Cremate
+
+
+
+
+
StoneChunks
+
+
+ 1
+
+
+
+
+
StoneChunks
+
+
+
+
+
+
+
+
+
+ PRF_Destroy_Anything
+
+ Destroy anything. This will remove any unwanted stuff quickly.\nSet filters before running this bill or your pawns will melt all your expensive stuff.
+ Pulverizing stuff.
+ 75
+ GeneralLaborSpeed
+ Cremate
+ Recipe_Cremate
+ false
+
+
+
+
+
Foods
+
MeatRaw
+
PlantFoodRaw
+
AnimalProductRaw
+
Manufactured
+
Leathers
+
ResourcesRaw
+
Items
+
NeurotrainersPsycast
+
BodyParts
+
Buildings
+
+
+ 1
+
+
+
+
+
Foods
+
MeatRaw
+
PlantFoodRaw
+
AnimalProductRaw
+
Manufactured
+
Leathers
+
ResourcesRaw
+
Items
+
NeurotrainersPsycast
+
BodyParts
+
Buildings
+
+
+
Wastepack
+
+
+
+
+
+
+
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchProjects_Agriculture.xml b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Agriculture.xml
new file mode 100644
index 000000000..f15932e71
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Agriculture.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+ Automation
+ 0
+ Industrial
+ HiTechResearchBench
+
+
+
+ Automation
+ 2.4
+ Industrial
+ HiTechResearchBench
+
+
+
+
+
+
+
+ PRF_AutomaticFarmingI
+
+ 1500
+ An agricultural drone is an unmanned aerial vehicle used to help optimize agriculture operations, increase crop production, and monitor crop growth. Sensors and digital imaging capabilities can give farmers a richer picture of their fields.
+
+
PRF_BasicDrones
+
+ 4
+
+
+
+
+ PRF_AnimalStations
+
+ 1200
+ The first tier of animal station technology allows animals with harvestable resources to be harvested automatically.
+
+
PRF_CoreTierI
+
+ 3
+
+
+
+
+
+ PRF_AutomaticFarmingII
+
+ 2250
+ Additional improvements to automated agriculture now greatly increase crop production and a more careful tending to your farm by improved labor drones.
+
+
PRF_AutomaticFarmingI
+
PRF_CoreTierII
+
+ 7
+
+
+
+
+ PRF_AnimalStationsII
+
+ 1500
+ The second tier of animal station technology allows for more animal gathering and automated animal slaughtering and breeding control.
+
+
PRF_AnimalStations
+
PRF_CoreTierII
+
+ 6
+
+
+
+
+
+ PRF_AutomaticFarmingIII
+
+ Spacer
+ 3000
+ With advanced use of mechanites and improved AI control, cultivators can now work even without drones or with a buffed drone version. Sprinklers also work faster now.
+
+
PRF_AutomaticFarmingII
+
PRF_CoreTierIII
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 9
+
+
+
+
+ PRF_AnimalStationsIII
+
+ 2000
+ Spacer
+ The third tier of animal station technology allows for more and better automated animal gathering and control.
+
+
+
+ 3
+ The first tier of automated cooking research allows you to make buildings that can cook meals themselves. It's just like your dedicated cook, but these devices won't have mental breaks for silly reasons.\nThis one will unlock simple foodstuff and dedicated machines, a good entry into automation.
+
+
+
+ PRF_SelfCookingII
+
+ 1500
+
+
PRF_SelfCooking
+
PRF_CoreTierII
+
+ 7
+ The second tier of automated cooking allows us to produce even better quality foods from our cookers.
+
+
+
+
+ PRF_MetalRefining
+
+ Spacer
+ 4000
+ A metal refinery able to produce rare metals through polymer lamination by combining chemfuel with steel to create plasteel.
+
+
PRF_CoreTierIII
+
AdvancedFabrication
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 9
+ 2.4
+
+
+
+
+
+
+ PRF_MachineLearning
+
+ 2000
+ Teach machines how to improve their abilities by themselves. This is required for smart assemblers which can learn any recipe.
+
+
PRF_CoreTierII
+
+
+
MultiAnalyzer
+
+ 6
+ 2.9
+
+
+
+ PRF_MagneticTape
+
+ 1000
+
+
PRF_CoreTierII
+
+ 6
+ A specialized industrial tape used for recording audio, a useful method for archiving important instructions and general information.
+ About: Intro to recipe database
+ You have learned how to make and use old-school magnetic tape to store instructions.\nMake data disks at the machining table.\nThis is used to import recipes from any workbench into your recipe database.\nYou do so by placing it near a workbench and clicking import on those recipes you want it to store. Afterward, you can move it to another workbench and copy more. Or you can move it to the assembler you want to link to it.\nRecipes will be stored forever in your database, and you can safely move it around. Please note that if you remove it from your assemblers, they will lose their configured bills.
+
+
+
+ PRF_UniversalAutocrafting
+
+ Make buildings that can craft recipes given to them via a recipe database. Like your dedicated crafters, but they don't sleep or die of flake overdose.
+ 3000
+
+
MultiAnalyzer
+
+
+
PRF_MagneticTape
+
+ 7
+ About: Intro to assemblers
+ You have unlocked your first real type assembler, this is basically a universal machine that can produce anything your workbenches can do. You just copy bills with a recipe database and place it near your assembler to show recipes.\nPlease note that it CAN'T return the same item again so mods like Mend and Recycle will not work on assemblers, as they destroy products they take in.\n\nThis assembler has stats set to 10 which means it can ONLY see recipes with a required level of 10 or less in the database. If you upgrade to the next tier it will be smarter and have a higher skill level.\nThis assembler has a fixed speed and will not get better over time as the next tier will.
+
+
+
+ PRF_SelfCorrectingAssemblers
+
+ Learn how to make a new type of assembler that slowly improves its crafting speed over time.
+ Spacer
+ 2250
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+
+
PRF_CoreTierIII
+
PRF_UniversalAutocrafting
+
+ 9
+
+
+
+ PRF_SelfCorrectingAssemblersII
+
+ Learn how to make two new types of adaptive assemblers. One is super fast but produces very poor quality products, the other one is slow but starts at a good quality.
+ Ultra
+ 5000
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+
+
PRF_CoreTierIV
+
PRF_SelfCorrectingAssemblers
+
+ 10
+
+
\ No newline at end of file
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchProjects_Batteries.xml b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Batteries.xml
new file mode 100644
index 000000000..c8f7bc04a
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Batteries.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+ Automation
+ 3.5
+ Industrial
+
+
+
+ PRF_EnhancedBatteries
+
+ Build large batteries for the efficient storage of electricity. This first tier unlocks the 4k battery cell.
+ 750
+
+
Batteries
+
PRF_CoreTierI
+
+ 3
+ 3
+
+
+
+ PRF_LargeBatteries
+
+ Build even larger batteries for the efficient storage of electricity. The second tier unlocks the 16k and 64k battery cells.
+ 1200
+ HiTechResearchBench
+
+
MultiAnalyzer
+
+
+
PRF_EnhancedBatteries
+
PRF_CoreTierII
+
+ 6
+
+
+
+ PRF_VeryLargeBatteries
+
+ Push the limits of battery storage technology, and create highly efficient 256k battery cells for the mass storage of power.
+ 2000
+ Spacer
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+
+
PRF_LargeBatteries
+
PRF_CoreTierIII
+
+ 9
+
+
+
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchProjects_Common.xml b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Common.xml
new file mode 100644
index 000000000..a515518d2
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Common.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+ Automation
+ 3
+ Industrial
+
+
+
+
+
+ PRF_CoreTierO
+
+ Medieval
+ 400
+ Early industrialization, teaches you how to set up a more advanced way of gathering resources and process them into more useful things. Trash, raw materials, or scrap metal goes in one side and useful products come out the other.\nThese very early devices are made with cogs and chutes and are powered by wood and coal.
+
+
Smithing
+
+ 1
+ Early automation
+ Welcome to Project RimFactory Beta!\n\nWe invite you on a trip through automation, starting with wood and coal-fueled smelters and advancing through AI-controlled self-improving assemblers.\n\nGeneral Usage: Store materials in the white designation input area for the machine to consume. After a bit of work, the machine will place the finished product on its yellow output tile.\n\nThe oldest known clockwork machine is the Antikythera mechanism, found in 1901 in a shipwreck dated 50 BC and Greek in origin. A series of 30 gears was used to predict eclipses and other astronomical phenomena as well as the passage of years. Advanced clockwork mechanisms reached new heights in Europe during the 1800s, and even today automation without computers is used in industry.\n\nCode by:spdskatr, Nobo, Abnerchen, Little White Mouse, Madara Uchiha, Sn1p3rr3c0n.\nArt by: ShotgunFrenzy, Chicken Plucker, Xen, Scythe, totoBrother, "Unknown Alien", Argon, spdskatr, Thornsworth.\nTested by Malkav, Extrien, Daemon976, AerosAtar, and the mandatory Steam volunteers.\nTranslated by: Natsu_Zirok, 十里小飞, AbnerChen, Lucas559-noob.\nSpecial thanks Thornsworth and Nobo, who are no longer with us.\nRest In Productivity.
+
+
+
+
+
+ PRF_CoreTierI
+
+ 750
+ Leonard Euler developed mathematical systems for interactions between physics, geometry and algebra.\nWith these formulas, automated production of basic materials such as stone bricks and simple art is possible.\nPlace items within the white designation for the bills to consume, they will be output to the adjustable green tile.
+
+
Electricity
+
Machining
+
PRF_CoreTierO
+
+ 2
+ True automation begins
+ Leonard Euler developed mathematical systems for interactions between physics, geometry and algebra.\nWith these formulas, automated production of basic materials such as stone bricks and simple art is possible.\nPlace items within the white designation for the bills to consume, they will be output to the adjustable green tile
+
+
+
+
+
+
+ PRF_CoreTierII
+
+ 2000
+ A machine that can predict outcomes will solve many of the design flaws we have been facing. Imagine a machine that could improve itself...\nWe will need a factory research terminal linked to our hi-tech research bench to go further.
+
+
PRF_CoreTierI
+
MicroelectronicsBasics
+
+ HiTechResearchBench
+
+
MultiAnalyzer
+
+ 5
+ Machine learning
+ The mathematical models developed in the 1700s began an industrial revolution all over the world, a series of gears and pressurization allowed the mass processing of basic materials with coal and electricity.\nMoritz von Jacobi managed to propel a boat with an electric motor in 1845, but it wasn't until 1837 when Thomas and Emily Davenport patented the first motor in the US that the promise of electro-mechanical machinery was seen as the next big leap forward.\nRudimentary programming allows storing a bill on a recipe database and importing it into an assembler.\nThe blue region around assemblers and recipe databases indicates the data transfer area.
+
+
+
+
+
+
+ PRF_CoreTierIII
+
+ Spacer
+ 3500
+ Anything can be described as a series of 1s and 0s as long as there enough 1s and 0s.
+
+
PRF_CoreTierII
+
Fabrication
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 8
+ Binary system
+ Refinements to machinery allow sophisticated machines, such as those that self-correct (get faster the more times they complete a job), drills with object recognition to only mine what you want and the first mechanite swarm technologies.\nMechanite machines interact with a couple of random tiles in the area every second.
+
+
+
+
+
+
+ PRF_CoreTierIV
+
+ Ultra
+ 5000
+ Leveraging the quantum nature of reality itself to solve exponentially more demanding computational problems.
+
+
PRF_CoreTierIII
+
ShipBasics
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 11
+ Quantum bit technology: Tier 4 unlocked
+ Qubit technology is all about advanced computing, high-end machines and technology, this might even be on the brink of insanity? whats next?!¤%.\nDrop us suggestions on our Workshop page or Discord.\n\nThanks for playing!
+
+
+
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchProjects_Conveyor.xml b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Conveyor.xml
new file mode 100644
index 000000000..e192cd305
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Conveyor.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+ Automation
+ 5
+ Industrial
+
+
+
+ PRF_BeltsI
+
+ 300
+ The continual movement of raw resources and final products within a factory is tedious but crucial. Understanding the fundamentals of conveyor networks is very important to fulfill manufacturing needs and determine production rates.
+
+
Electricity
+
+ 2
+
+
+
+ PRF_BeltsII
+
+ 400
+ Directing things to the proper area of the factory will streamline and diversify the factory layout.\nUnlocks: Simple puller, growzone puller and belt splitter for normal belts.
+ HiTechResearchBench
+
+
PRF_BeltsI
+
+ 3
+
+
+
+ PRF_BeltsIII
+
+ Industrial
+ 500
+ Sophisticated logistical implementation allows for advanced item sorting.\nUnlocks: Wall and underground belts, splitters, smart hoppers, as well as Mk.II, angle, and wall pullers.
+ HiTechResearchBench
+
+
PRF_BeltsII
+
+ 6
+
+
+
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchProjects_Drones.xml b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Drones.xml
new file mode 100644
index 000000000..1d5887968
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Drones.xml
@@ -0,0 +1,64 @@
+
+
+
+
+ Automation
+ 0
+ Industrial
+
+
+
+
+ PRF_BasicDrones
+
+ 600
+ The first pilotless vehicles were built during the First World War. These early models were launched by catapult or flown using radio control. Much has changed since then and drones are now used for more common tasks.\nThis sets the base stats of drones to level 10.
+
+
PRF_CoreTierI
+
+ 3
+ About: Drones are now level 10
+ You now have basic knowledge about drones and can now start to utilize them for different tasks.\nThis will set any drone's base level to 10.\nUnless other settings for a specific drone station are specified.
+
+
+
+
+
+ PRF_ImprovedDrones
+
+ 2000
+ Further improvements for drones have now enabled the use of more drones and with greater control over tasks they can perform.\nThis sets the base stats of drones to level 15.
+
+
PRF_CoreTierII
+
PRF_BasicDrones
+
+ 6
+ About: Drones are now level 15
+ You have upgraded your drones with better engines and batteries and as such they now do jobs even more efficiently.\nThis will set any drone's base level to 15.\nUnless other settings for a specific drone station are specified.
+
+
+
+
+
+
+ PRF_AdvancedDrones
+
+ Spacer
+ 6000
+ Perfectly aerodynamics higher power engines and AI have created a perfectly balanced super drone that will perform tasks better than most pawns ever will.\nThis sets the base stats of your drones to level 20.
+
+
PRF_CoreTierIII
+
PRF_ImprovedDrones
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 10
+ About: Drones are now level 20
+ You have upgraded your drones with advanced AI cores, this will let them do their tasks better than most humans will do.\nThis will set any drone's base level to 20.\nUnless other settings for a specific drone station are specified.
+
+
+
+
+
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchProjects_Industrial.xml b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Industrial.xml
new file mode 100644
index 000000000..a0c9d3c5b
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchProjects_Industrial.xml
@@ -0,0 +1,60 @@
+
+
+
+
+ Automation
+ 0.7
+ Industrial
+
+
+
+
+ PRF_AutonomousMining
+
+ 1000
+
+
PRF_CoreTierI
+
+ 3
+ Make buildings that can extract random minerals and rocks from deep underground. Most forms of automated mining can attract the attention of insectoids, so keep an eye out for that.
+ About: Intro to autominers
+ You have now researched the auger drill. With this, you have unlocked the tier 1 auto miner.\nThis miner will mine up random items over time, it can start infestations just like vanilla drills.\n\nThe tier 2 miner is the same type of device, it's just faster and will mine steel instead of slag.\n\nTier 3 has two types of miners.\nType one is a random miner like the previous generations, it will mine random rare ores with no stone chunks.\nType two is a new type of miner where you can set exactly what type of ore you want. It will mine mainly that one, but will have a chance to mine junk and rare ores too.\n\nIf you want to enable un-balanced mode for miner and unlock all mod-added ores you can change it in mod settings.
+
+
+
+
+ PRF_AutonomousMiningII
+
+ 3000
+
+
DeepDrilling
+
PRF_CoreTierII
+
PRF_AutonomousMining
+
+
+
MultiAnalyzer
+
+ 6
+ Build more advanced auto-miners that work more quickly, though they'll still attract infestations at the same rate.
+
+
+
+
+
+ PRF_AutonomousMiningIII
+
+ Spacer
+ 4000
+
+
PRF_AutonomousMiningII
+
PRF_CoreTierIII
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 9
+ Build two more advanced forms of miners. One will only produce resources with no stone, and one allows you to target-mine specific resources. Neither of the tier 3 miners will draw infestations thanks to the advanced technology they use to dampen vibrations.
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchProjects_SAL.xml b/1.4/Defs/ResearchProjectDefs/ResearchProjects_SAL.xml
new file mode 100644
index 000000000..8e774dab9
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchProjects_SAL.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+ HiTechResearchBench
+ Automation
+ 4
+
+
+
+
+
+ PRF_SALResearchI
+
+ Industrial
+ 1000
+ Learn how to program machines to be able to perform skilled labor.
+
+
PRF_CoreTierII
+
+
+
MultiAnalyzer
+
+ 6
+ About: S.A.L automation robots
+ With this research you have unlocked S.A.L automation robots.\nThese are placeable robots that you attach to a workbench where a human would stand, and then they will start doing work on that bench.\n\nThe name "S.A.L" is a tribute to the original SAL mod, from whence Project RimFactory is descended.
+
+
+
+ PRF_SALResearchII
+
+ Industrial
+ 3000
+ Advance your understanding of programming autonomous machines, allowing you to make them craft faster, better, and more accurately.
+
+
PRF_SALResearchI
+
+
+
MultiAnalyzer
+
+ 7
+
+
+
+ PRF_SALResearchIII
+
+ Spacer
+ 2000
+ Further advancements in machine programming will allow you to begin to specialize your S.A.L machines into performing specific roles more efficiently.
+
+
PRF_SALResearchII
+
+
+
MultiAnalyzer
+
+ 8
+
+
+
+
+
+
+ PRF_SALResearchIV
+
+ Spacer
+ 2000
+ Learn the ways of hypercomputing and neural networks, allowing machines to create proper semi-decent art.
+
+
PRF_SALResearchIII
+
+
+
MultiAnalyzer
+
+ 9
+
+
+
+ PRF_SALResearchV
+
+ Ultra
+ 3000
+ Combined with overclocking, make your neural networks react much faster, drastically improving the quality of art produced by your machines.
+
+
PRF_SALResearchVI
+
+
+
MultiAnalyzer
+
+ 10
+ 3.7
+
+
+
+
+ PRF_SALResearchVII
+
+ Spacer
+ 2000
+ Learn how to give auto-assemblers enough dexterity and precision for them to efficiently replace your chefs.
+
+
PRF_SALResearchIII
+
+
+
MultiAnalyzer
+
+ 9
+ 5
+
+
+
+
+ PRF_SALResearchVI
+
+ Spacer
+ 5000
+ General S.A.L machines often work too slowly and can result in slow production. Upgrading them with the ability to overclock their operating systems will result in faster production speeds at the cost of some item quality.
+
+
PRF_SALResearchIV
+
PRF_SALResearchVII
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 10
+ 4.3
+
+
+
+ PRF_SALResearchVIII
+
+ Spacer
+ 10000
+ Increases to servo speed and internal visualization computers allow this S.A.L crafter to work even faster than before. Henry Ford would be proud.
+
+
PRF_SALResearchVI
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+ 11
+ 4.3
+
+
+
+
+
+ PRF_SALGodlyCrafting
+
+ Ultra
+ 20000
+ After several rigorous hours of research, one can finally acquire the finest piece of machinery. Prime crafting introduces levels of manufacturing unknown to most of mankind. Only the most advanced societies in existence have achieved this miracle of engineering, but at what cost?
+
+
+
+ HiTechResearchBench
+
+
+
+
+ PRF_StorageIO
+
+ Spacer
+ 4000
+ 9
+ 1.9
+ The holographam artist Thornsworth produced masterpieces for many years despite gradually developing blindness. When holographic data storage was perfected, he was instrumental in developing holographic item storage.\nAllows items to be stored in a digital storage unit, which can transmit and receive wirelessly to any I/O port on the map.\n\nYou will be missed, Thornsworth.
+
+
PRF_SteelCrates
+
PRF_CoreTierIII
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+
+
+
+ PRF_StorageIO_II
+
+ Spacer
+ 1000
+ 9.5
+ 1.9
+ Advancements in wireless storage.\nAllows you to build I/O pushers (and more, soon).
+
+
PRF_StorageIO
+
+
+
MultiAnalyzer
+
PRF_ResearchTerminal
+
+
+
diff --git a/1.4/Defs/ResearchProjectDefs/ResearchTabs.xml b/1.4/Defs/ResearchProjectDefs/ResearchTabs.xml
new file mode 100644
index 000000000..b11e93e1c
--- /dev/null
+++ b/1.4/Defs/ResearchProjectDefs/ResearchTabs.xml
@@ -0,0 +1,7 @@
+
+
+
+ Automation
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/ScenarioDefs/Scenarios_PRF.xml b/1.4/Defs/ScenarioDefs/Scenarios_PRF.xml
new file mode 100644
index 000000000..603a62bf3
--- /dev/null
+++ b/1.4/Defs/ScenarioDefs/Scenarios_PRF.xml
@@ -0,0 +1,169 @@
+
+
+
+ PRF_FactoryEntrepreneur
+
+ A small group of engineers is sent to aid a newly founded factory with a cargo full of new equipment and supplies. On the way, they are attacked by pirates and crash land on a nearby planet. They must now survive and build a new factory.\n\nThere will be a raid in ten days, by the very pirates who shot their ship down. You should quickly prepare.
+
+ 4 crash landed scientists - Project RimFactory experience
+
+ PlayerFaction
+ PlayerColony
+
+
+
+ GameStartDialog
+ A small group of engineers is sent to aid a newly founded factory with a cargo full of new equipment and supplies. On the way, they are attacked by pirates and crash land on a nearby planet. They must now survive and build a new factory.\n\nThere will be a raid in ten days, by the very pirates who shot their ship down. You should quickly prepare.
+ GameStartDialog
+ GameStartSting
+
+
+
+
+
+
+ PRF_GenericAnimalHarvester
+
+ A sophisticated facility boasting a variety of tools to gently extract any kind of animal products, even from the more exotic species.\n\nKeep it stocked with food to lure animals in for processing. Drops the produce where the animal is standing.
+ ProjectRimFactory.AnimalStation.Building_GenericBodyResourceGatherer
+
+ Farm/Harvester
+ (2.1)
+
+
+
+ Standable
+ Projectile
+
+ 50
+ 2110
+ 100
+ 200
+
+ Rare
+ (2,2)
+
+ 1
+ 50
+ 75
+ 4
+ 1
+
+
+
+
+ 8
+
+
+
+
+ PRF_GenericAnimalHarvester_II
+
+ This is an advanced animal harvester that can harvest a wide range of products from animals, it has a front-facing pull zone that can be made larger with a power booster. If RimFridge is installed it will cool food to keep it from spoiling over time.
+ ProjectRimFactory.AnimalStation.Building_GenericBodyResourceGatherer
+
+ Farm/HarvesterT3
+ (2.1)
+
+ Standable
+ Projectile
+
+ 50
+ 2530
+ 250
+ 500
+
+ Rare
+ (2,2)
+
+ 1
+ 50
+ 100
+ 4
+ 2
+
+
+
+
+ 8
+
+
+
+
+ PRF_Slaughterhouse
+ ProjectRimFactory.AutoMachineTool.Building_Slaughterhouse
+
+ A state-of-the-art robotic slaughterhouse designed to harvest meat and other animal products from living animals. It will cut and collect with great precision and will deliver the final product after finishing its task.
+ PRF_AnimalStationsGroup
+ Building
+ Never
+ 10
+
+ 70
+ 2200
+ 200
+ 200
+
+
+ Farm/Slaughter
+ (3.5,3.4)
+ false
+
+
+ 2
+ 1
+ 120
+ 10
+ 1
+
+ true
+
+
+
+
+
+
+
+
+
+
+ PRF_RecipeDatabase
+
+ A portable storage device that can duplicate and transfer bills and recipes from worktables to assemblers. Uploaded recipes and bills will be automatically lost if the portable database is either moved or destroyed.\n\nThe white cells represent the import range for the database.\n\nI wonder what all these other buttons do...
+ ProjectRimFactory.SAL3.Things.Building_RecipeHolder
+ PRF_AssemblerGroup
+
+ SAL3/DISK_HARDWARE4
+ Graphic_Multi
+ (1,1)
+
+ 0.7
+ true
+ Building
+ PassThroughOnly
+ 0.5
+ 70
+ false
+ true
+
+ 800
+ 150
+ 1140
+ 1.0
+ 15
+
+ MinifiedThing
+
+ 1
+ 20
+ 1
+ 1
+
+ Normal
+ true
+ 0.1
+
+
ProjectRimFactory.SAL3.Things.ITab_RecipeHolder
+
+
+
+ CompPowerTrader
+ 250
+
+
+ 3
+ (115,198,206,0)
+
+
+ 5
+ (1,1,1,1)
+
+
+
+
PRF_MagneticTape
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PRF_TypeOneAssembler_I
+
+ An automatic assembler controlled by a computer. Despite being called an assembler, it's also capable of simpler procedures such as cutting stone blocks, and refinery work.\n\nDownloads recipes from an adjacent recipe database.\n\nThe white cells represent the input range; the blue cells represent the database range, and the yellow cell represents the output.
+ PRF_AssemblerGroup
+ ProjectRimFactory.SAL3.Things.Assemblers.Building_SmartAssembler
+
+ Graphic_Single
+ SAL3/smart_assembler
+
+
+ 2
+ 1
+ 120
+ 10
+ 2
+ 1
+
+
+ 250
+ 2500
+ 4725
+
+
+ true
+
+
+
+
+
+ CompPowerTrader
+ 625
+
+
+ CompHeatPusherPowered
+ 3
+
+
+ 3
+ (0,1,1,1)
+
+
+
+
PRF_UniversalAutocrafting
+
+
+
+ true
+ false
+
+
+ ThisOverrides
+ 10
+
+
+ Artistic
+ 9
+
+
+
+
+
+
+
+
+
+
+ PRF_TypeTwoAssembler_I
+
+ An automatic assembler controlled by a primitive AI.\n\nThe simple artificial neural network enables it to learn, to be more precise and efficient at individual recipes. Slowly overwrites currently unused recipe algorithms, as it has limited processing and memory capacity.\n\nDownloads recipes from an adjacent recipe database.\n\nThe white cells represent the input range; the blue cells represent the database range, and the yellow cell represents the output.
+ PRF_AssemblerGroup
+ ProjectRimFactory.SAL3.Things.Assemblers.Special.Building_Assembler_Learning
+
+ Graphic_Single
+ SAL3/correcting_assembler
+
+
+ 2
+ 4
+ 2
+ 1
+ 10
+ 150
+ 2
+
+
+
+
+
+
+
+
+
+ PRF_TypeTwoAssembler_II
+
+ This assembler is an upgraded version that works very slowly, but it starts at normal quality instead of awful and so will ramp up faster. It also has a huge database input range.\n\nThe white cells represent the input range; the blue cells represent the database range, and the yellow cell represents the output.
+ PRF_AssemblerGroup
+ ProjectRimFactory.SAL3.Things.Assemblers.Special.Building_Assembler_Learning
+
+ Graphic_Single
+ SAL3/T4_assembler_I
+
+
+ 2
+ 4
+ 2
+ 1
+ 100
+ 200
+ 5
+
+
+
+
+
+
+
+
+
+ PRF_TypeTwoAssembler_III
+
+ A high-end assembler that works at a high rate starts faster and can ramp up higher than other assemblers. The output isn't very good quality though. The database input range is huge.\n\nThe white cells represent the input range; the blue cells represent the database range, and the yellow cell represents the output.
+ PRF_AssemblerGroup
+ ProjectRimFactory.SAL3.Things.Assemblers.Special.Building_Assembler_Learning
+
+ Graphic_Single
+ SAL3/T4_assembler_II
+
+
+ 2
+ 4
+ 2
+ 1
+ 100
+ 150
+ 5
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/ThingDefs_Buildings/Buildings_Batteries.xml b/1.4/Defs/ThingDefs_Buildings/Buildings_Batteries.xml
new file mode 100644
index 000000000..685099d38
--- /dev/null
+++ b/1.4/Defs/ThingDefs_Buildings/Buildings_Batteries.xml
@@ -0,0 +1,228 @@
+
+
+
+
+ PRF_BatteryGroup
+
+ Graphic_Single
+
+ Damage/Corner
+ Damage/Corner
+ Damage/Corner
+ Damage/Corner
+
+
+ Building
+ PassThroughOnly
+ 70
+ true
+ true
+ 0.40
+ MinifiedThing
+
+
BuildingsPower
+
+ Power
+ 0.5
+ Misc4
+
+
+ PRF_BatteryGroup
+
+
+
+
+
+ PRF_4k_Battery
+
+ ProjectRimFactory.Archo.Things.Building_HexCapacitor
+ A battery capable of storing 4,000 watt-days of power, equivalent to almost seven ordinary batteries. This battery is 50% efficient and will explode if exposed to rain.
+
+ Industry/Battery/PRF_4k_Battery
+ (1,1)
+
+ false
+ true
+ Normal
+
+ 100
+ 800
+ 40
+ 1.0
+ -40
+ 490
+
+ (1,1)
+
+ 150
+ 4
+
+
+
+ 4000
+ 0.5
+ true
+ true
+
+
+ 2
+ (115,198,206,0)
+
+
+
+ Light
+
+
PRF_EnhancedBatteries
+
+
+
+
+
+
+ PRF_16k_Battery
+
+ ProjectRimFactory.Archo.Things.Building_HexCapacitor
+ A battery capable of storing 16,000 watt-days of power, equivalent to almost twenty-seven ordinary batteries. This battery is 50% efficient and will explode if exposed to rain.
+
+ Industry/Battery/PRF_16k_Battery
+ Graphic_Multi
+ (2,1)
+
+ true
+ true
+ Normal
+
+ 100
+ 800
+ 60
+ 1130
+ 1.0
+ -80
+
+ (2,1)
+
+ 300
+ 25
+ 8
+
+
+
+ 16000
+ 0.5
+ true
+ true
+
+
+ 3
+ (115,198,206,0)
+
+
+
+ Medium
+
+
PRF_LargeBatteries
+
+
+
+
+
+ PRF_64k_Battery
+
+ ProjectRimFactory.Archo.Things.Building_HexCapacitor
+ A superior battery capable of storing 64,000 watt-days of power. This ruggedized device is 90% efficient and water-resistant enough to be stored outside, although it's expensive enough that you may want to think twice.
+
+ Industry/Battery/PRF_64k_Battery
+ (2,2)
+
+ false
+ true
+ Normal
+
+ 100
+ 800
+ 5320
+ 80
+ 1.0
+
+ (2,2)
+
+ 500
+ 100
+ 50
+ 15
+ 4
+ 1
+
+
+
+ 64000
+ 0.9
+ false
+ true
+
+
+ 4
+ (115,198,206,0)
+
+
+
+ Heavy
+
+
PRF_VeryLargeBatteries
+
+
+
+
+
+
+ PRF_256k_Battery
+
+ ProjectRimFactory.Archo.Things.Building_HexCapacitor
+ A tremendously powerful battery capable of storing 256,000 watt-days of power. The integrated AI management system reduces inefficiency losses to effectively zero, and the device is waterproof and will never break down, and it's surprisingly beautiful to look at. Watch out for short-circuits though!
+
+ Industry/Battery/PRF_256k_Battery
+ Graphic_Multi
+ (4,2)
+
+ true
+ true
+ Normal
+
+ 100
+ 800
+ 80
+ 14750
+ 1.0
+ 50
+
+ (4,2)
+
+ 1000
+ 200
+ 200
+ 12
+ 1
+ 30
+ 1
+
+
+
+ 256000
+ 1
+ false
+ true
+
+
+ 6
+ (115,198,206,0)
+
+
+ Heavy
+
+
PRF_VeryLargeBatteries
+
+
+
+
+
+
diff --git a/1.4/Defs/ThingDefs_Buildings/Buildings_Common.xml b/1.4/Defs/ThingDefs_Buildings/Buildings_Common.xml
new file mode 100644
index 000000000..3bb53ed67
--- /dev/null
+++ b/1.4/Defs/ThingDefs_Buildings/Buildings_Common.xml
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+ PRF_ResearchTerminal
+
+ Building_ResearchBench
+ Similar to a multi-analyzer, this device links to high-tech research benches, but with some additional capabilities.\nIt works as a simple research table and can research any research that does not require a high-tech research bench itself.\nIn addition to boosting research speed, this terminal is required for certain high-end factory research.
+ 0.85
+
+ Common/Terminal
+ Graphic_Single
+
+ (3.9,3.9)
+
+ Damage/Corner
+ Damage/Corner
+ Damage/Corner
+ Damage/Corner
+
+
+
+ 50
+ 6
+ 60
+ 50
+ 4
+ 4
+
+
+ BuildingDestroyed_Metal_Medium
+
+ Building
+ True
+
+ 200
+ 10000
+ 1.0
+ 2080
+ 0.65
+ 60
+
+ (2,2)
+ PassThroughOnly
+ 70
+
+
+
+
+
+
+
+
+
+
+ PRF_SelfCookerI
+
+ An industrial-grade cooker capable of steadily cooking meals for your colonists. Requires electricity and raw ingredients to operate.\n\nNever ruin a meal again with your one-stop solution to satisfy all your colony's sustenance needs. Just look at it go!\n\nOnly cooks simple foods but with a cooking level of 8 at 1x speed.\n\nThe white cells represent the input range, and the yellow cell represents the output.
+ 0.7
+
+ SAL3/cooker1
+ (2,2)
+
+
+ 250
+ 2000
+ 1380
+ 0
+
+
+ 2
+ 1
+ 10
+
+
+
+
+ CompPowerTrader
+ 400
+
+
+ CompHeatPusherPowered
+ 5
+
+
+
+
MakeNutrientPaste
+
MakeNutrientPasteBulk
+
CookMealSimple
+
CookMealSimpleBulk
+
Make_Pemmican
+
Make_PemmicanBulk
+
+
+ true
+ true
+
+
+
PRF_SelfCooking
+
+
+
+
+
+
+ 1
+ true
+ true
+
+
+ ThisOverrides
+ 5
+
+
+ Cooking
+ 8
+
+
+
+
+
+
+
+
+ PRF_SelfCookerII
+
+ An improved assortment of food processing modules that can peel, mince, chop, mix, cook, steam, grill, and bake ingredients into more or less delicious meals and other edible products.\n\nNever ruin a meal again with your one-stop solution to satisfy all your colony's sustenance needs. Just look at it go!\n\nCopies electric stove recipes at 1.5x speed, with a cooking level of 12.
+
+ SAL3/cooker2
+ (3.3,3.3)
+
+ 3,3
+
+ 250
+ 2500
+ 1575
+ 5
+
+
+ 1
+ 1
+ 10
+ 1
+
+
+
+
+ CompPowerTrader
+ 400
+
+
+ CompHeatPusherPowered
+ 5
+
+
+
+
MakeNutrientPaste
+
MakeNutrientPasteBulk
+
+
+ true
+ true
+
+
+
PRF_SelfCookingII
+
+
+
+
+
ElectricStove
+
+ 1.5
+ true
+ true
+
+
+ ThisOverrides
+ 8
+
+
+ Cooking
+ 12
+
+
+
+
+
+
+
+
+ PRF_SelfCookerIII
+
+ An advanced assortment of food processing modules that can peel, mince, chop, mix, cook, steam, grill, and bake ingredients into more or less delicious meals and other edible products.\n\nNever ruin a meal again with your one-stop solution to satisfy all your colony's sustenance needs. Just look at it go! Cooks at 2x speed with a cooking skill of 20.
+
+ SAL3/SpacerCooker
+
+ 3,3
+
+ 250
+ 3000
+ 3580
+ 20
+
+
+ 1
+ 1
+ 1
+ 10
+
+
+
+
+
+
+
+
+
+ PRF_DroneCultivator_I
+
+ The first automated cultivator, this device utilizes simple drones to sow, water, and harvest your crops. It is slow but still represents a good first step into automated farming.
+ ProjectRimFactory.Drones.Building_DroneCultivator
+
+ Farm/Cultivator
+
+
+ 1
+ 1
+ 30
+ 10
+ 3
+
+
+ 1475
+
+
+
+
+
+
+
+
+ PRF_DroneCultivator_II
+
+ The Mark II automated cultivator. By using improved drones to do your agriculture jobs, the functionality of automated farming operations is greatly improved. The drones will haul to a stockpile, I/O, or crate if it's within range.
+ ProjectRimFactory.Drones.Building_DroneCultivator
+
+ Farm/CultivatorII
+
+
+ 1
+ 2
+ 30
+ 20
+ 1
+ 2
+ 5
+
+
+ 3095
+
+
+
+ CompPowerTrader
+ false
+ 600
+
+
+
+
+
+ 2
+ true
+ 5
+ true
+
+
Growing
+
PlantCutting
+
Hauling
+
+
+
+ ThisOverrides
+ 15
+
+
+
+
+
+
PRF_AutomaticFarmingII
+
+
+
+
+
+ PRF_DroneCultivator_II_sun
+
+ The Mark II automated cultivator. By using improved drones to do your agriculture jobs, the functionality of automated farming operations is greatly improved. The drones will haul to a stockpile, I/O, or crate if it's within range. This version includes an integrated sun lamp, and with specialized research can upgrade the included drones to level 20.
+ ProjectRimFactory.Drones.Building_DroneCultivator
+
+ Farm/CultivatorWithSunLamp
+ (1.1,1.1)
+
+
+ 1
+ 2
+ 65
+ 20
+ 30
+ 1
+ 3
+
+
+ 2137
+
+
+
+ CompPowerTrader
+ false
+ 1000
+
+
+ 14
+ 9
+ (370,370,370,0)
+ PRF_Warm_White
+
+
+ PRF_Magenta
+ (245,10,245,0)
+
+
+
+
+ CompHeatPusherPowered
+ 2
+
+
+
+
+
+ 2
+ true
+ 5
+ true
+
+
Growing
+
PlantCutting
+
Hauling
+
+
+
+ ReserchOverrides
+ 15
+
+
+
+
+
+
PRF_AutomaticFarmingII
+
+
+
+
+
+ PRF_DroneCultivator_III
+
+ The Mark III automated cultivator. With the use of extremely advanced automated drones, this device can take your farming operations to the next level. The included drones will haul to a stockpile, I/O, or crate if it is within range.
+ ProjectRimFactory.Drones.Building_DroneCultivator
+
+ Farm/CultivatorIII
+
+
+ 1
+ 5
+ 50
+ 50
+ 4
+ 15
+ 1
+
+
+ 6428
+
+
+
+
+
+
+
+
+
+
+
+ PRF_OldTypeCultivator_I
+
+ An alternative form of high-tech cultivator that houses worker mechanites instead of drones. The mechanites can sow, harvest and maintain a growzone or hydroponics setup. It will also output onto a cell for further processing.
+ ProjectRimFactory.CultivatorTools.Building_Cultivator
+
+ Farm/Cultivator2
+
+
+ 350
+ 2995
+
+
+ 1
+ 3
+ 100
+ 30
+ 3
+ 2
+ 1
+
+
+
+ CompPowerTrader
+ false
+ 600
+
+
+
+
+
+ 5
+ 50
+
+
+
+
PRF_AutomaticFarmingIII
+
+
+
+
+
+ PRF_OldTypeCultivator_Sun
+
+ An alternative form of the high-tech cultivator that houses worker mechanites instead of drones. The mechanites can sow, harvest and maintain a growzone or hydroponics setup. It will also output onto a cell for further processing. This model has an integrated sun lamp.
+ ProjectRimFactory.CultivatorTools.Building_Cultivator
+
+ Farm/CultivatorB18
+
+
+ 350
+ 3631
+
+
+ 1
+ 3
+ 100
+ 30
+ 30
+ 3
+ 2
+ 1
+
+
+
+ CompPowerTrader
+ false
+ 1000
+
+
+ 14
+ 9
+ (370,370,370,0)
+ PRF_Warm_White
+
+
+ PRF_Magenta
+ (245,10,245,0)
+
+
+
+
+
+
+
+
+ 5
+ 50
+
+
+
+
PRF_AutomaticFarmingIII
+
+
+
+
+
+ PRF_OldTypeCultivator_Xl
+
+ A highly advanced XL cultivator that houses worker mechanites instead of drones. The included mechanites will sow, harvest and maintain a growzone or hydroponics setup. It will also output onto a cell for further processing.
+ ProjectRimFactory.CultivatorTools.Building_Cultivator
+
+ Farm/CultivatorXL
+
+
+ 500
+ 10646
+
+
+ 1
+ 9
+ 800
+ 200
+ 20
+ 10
+ 1
+
+ true
+
+
+ CompPowerTrader
+ false
+ 2400
+
+
+
+
+
+ 11
+ 12
+
+
+
+
PRF_AutomaticFarmingIII
+
+
+
+
+
+
+
+ PRF_Sprinkler_I
+
+ A small sprinkler that waters your plants and increases their growth by one hour per round. Effects are also stackable!
+ ProjectRimFactory.CultivatorTools.Building_Sprinkler
+ PRF_CultivatorGroup
+ MinifiedThing
+
+ Farm/CultivatorTools_Sprinkler
+ Graphic_Single
+ (0.8,0.8)
+
+ (0.05,0.1,0.9,0.9)
+ Damage/Corner
+ Damage/Corner
+
+
+ Building
+ PassThroughOnly
+ 0.5
+ 70
+ true
+
+ 450
+ 150
+ 1.0
+ 360
+ 5
+
+
+ 50
+ 10
+ 4
+
+
+
+ CompPowerTrader
+ 250
+ false
+
+
+
+
+ 12
+
+
+ 50
+ 2000
+
+
+ Normal
+ false
+ 0.3
+
+
PRF_AutomaticFarmingII
+
+
+
+
+
+ PRF_Sprinkler_II
+
+ An upgraded sprinkler using advanced AI to calculate and distribute the fertilizer needs of each plant in each sprinkle, optimizing the growth rate of every plant. Affected plants have their growth increased by two hours per round. Effects are stackable.
+ ProjectRimFactory.CultivatorTools.Building_Sprinkler
+ PRF_CultivatorGroup
+ MinifiedThing
+
+ Farm/CultivatorTools_SprinklerSpacer
+ Graphic_Single
+ (0.8,0.8)
+
+ (0.05,0.1,0.9,0.9)
+ Damage/Corner
+ Damage/Corner
+
+
+ Building
+ PassThroughOnly
+ 0.5
+ 70
+ true
+
+ 1000
+ 200
+ 1.0
+ 1896
+ 5
+
+
+ 50
+ 10
+ 8
+
+
+
+
+ PRF_MiniDroneStationGroup
+
+
+
+
+ PRF_MiniDroneColumn
+
+ A column filled with 2 handy drones that can clean your throneroom or eating hall, put out fires, refuel your braziers, and move your stuff away from the floor. It's also capable of holding up a roof and looks quite nice.
+
+ (1.5,1.5)
+ (0,0,0.2)
+ Drones/DroneColumn
+ Graphic_Single
+ CutoutComplex
+
+
+
+ 0.70
+ 0.75
+ 0
+
+
+ 150
+ 2000
+ 25
+ 2172
+ 1.0
+ 10
+
+
+
+
+
+ 1000
+ 250
+ 2184
+ 1.0
+
+ An automated device akin to an automatic CNC router which is capable of processing stone into bricks, or even some reasonable looking art.
+
+ 400
+ 5
+ 1
+ 2
+
+
+
+
+
+
+
+ 1000
+ 250
+ 2246
+ 1.0
+
+ A recycler that turns almost any apparel or weapon into usable resources, though some of the material will be lost in processing.
+
+ 250
+ 5
+ 1
+ 1
+ 2
+
+
+
+
+
+ 1000
+ 250
+ 5000
+ 1.0
+
+ Thornsworth's art machine, capable of producing art with an art level of 14.\nThorny had a big passion for 3D printers and producing art with his large army of assemblers. He made this machine before he passed away, and now it's finally here to produce an army of sculptures well into the future.\nRIP Thornsworth 2020.
+
+ 250
+ 10
+ 2
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+ PRF_PartAssembler
+
+ This is a preset assembler that creates parts for further production such as components, PRF parts, and more.
+ ProjectRimFactory.SAL3.Things.Assemblers.Building_SimpleAssembler
+
+ Industry/part_assembler
+ (3.1,3.1)
+
+ PRF_IndustryGroup
+ (3,3)
+
+
+
+
+ 0.32
+
+
+
+
+
+
+
+ PRF_FurnaceI
+
+ A simple early-stage furnace with minimal automation. It burns unwanted apparel and smelts raw resources into useful materials.\n\nAutomatically takes input materials (or trash) within the white cells surrounding the furnace - it has an input range of one cell - and outputs (yellow cell) any finished metals into a cell you may specify.\n(Remember to remove quickly so it doesn't clog up.)\nUses wood as fuel to smelt.
+ ProjectRimFactory.SAL3.Things.Assemblers.Building_SimpleAssembler
+ Gas
+
+ Industry/smelter_t0off
+ (5,7.9)
+ CutoutComplex
+
+ (5,5)
+
+ 5000
+ -5
+ -10
+ 1340
+
+
+
+
+
+
+
+
+ PRF_FurnaceIII
+
+ An advanced furnace capable of burning stuff and smelting raw resources into useful materials significantly faster than the previous versions.\n\n(This furnace is the best and fastest in Project RimFactory.)\n\nImports any recipe from the electric smelter and the crematorium.
+ ProjectRimFactory.SAL3.Things.Assemblers.Building_SimpleAssembler
+
+ Industry/smelter_t2off
+ (3.1,3.1)
+
+ (3,3)
+ PRF_FurnaceGroup
+
+ 350
+ 1
+ 1
+ 4934
+
+
+ 350
+ 200
+ 1
+ 10
+ 1
+
+
+
+
+ 6
+
+
+
+
+ PRF_SmartHopper
+
+ An intelligent hopper that gathers objects within its input range (white cells). It can be toggled to only gather items in stockpiles. Does not push objects elsewhere, only gathers them, and will also grab from nearby belts. This device is unrelated to a nutrient dispenser hopper and does not interface with a nutrient dispenser.
+ ProjectRimFactory.SAL3.Things.Building_SmartHopper
+ 0.7
+
+ Storage/vacuum
+ Graphic_Multi
+
+ (0.05,0.1,0.9,0.9)
+ Damage/Corner
+ Damage/Corner
+
+
+ Building
+ PassThroughOnly
+ 0.5
+ 70
+
+ true
+
+ Preferred
+
+
+
+
+
+
+
+
+ PRF_GrowzonePuller_I
+ ProjectRimFactory.AutoMachineTool.Building_HarvestPuller
+
+ A specialized puller that will pull from adjacent grow zones. It must be connected to the grow zone to function properly.
+
+
+
+
+
+
+
+ PRF_SimplePuller_I
+
+ A device that pulls items from the input (white cell) and pushes them to the output (yellow cell). Turn it on after setting the filters.\nThis device is very flexible in its connections and works with stockpiles, storage, belts (all versions), I/O, and others.
+
+ 1
+ 1
+
+
+ 597
+
+ Impassable
+ Building
+
+ Belts/PullerI
+ Graphic_Multi
+ (1.1,1.1)
+
+
+
+
+
+
+
+
+ PRF_SimplePuller_II_Side
+
+ A specialized puller designed to pull items at a 90-degree angle. Functionally similar to the normal puller. Directions can be swapped after placing.
+
+ 5
+ 2
+ 1
+
+
+
+ 959
+
+ Impassable
+ Building
+
+
+
+ None
+
+
+
+ 1
+
+
+
+
+ PRF_Conveyor_Simple_I
+
+ An industrial-grade assembly belt used for the transportation of items in a specific direction to a specific location. Useful for automatically hauling products without having your colonists do it themselves. It will dump into storage or stockpiles - or just leave stuff on the ground when the belts end. Because they are rather unsophisticated, they will happily dump whatever they have off the end if there is room.\nA corner can be made by leading the belt into the side of another belt and it will seamlessly continue.
+ false
+ Belts/v3/BeltConveyorIcon
+
+ [extraData][texPath]Belts/v3/Belts Atlas 640x640 GroundLevel Padded[/texPath][arrowEastDrawOffset](0,0.0,0)[/arrowEastDrawOffset][/extraData]
+ ProjectRimFactory.AutoMachineTool.Graphic_LinkedConveyorTwo
+ true
+ (1, 1)
+
+
+
+ [notActualTexPath>[texPath>Belts/v3/Belts Atlas 640x640 GroundLevel Padded Blueprint[/texPath>[arrowDrawOffset](0,0.2,0)[/arrowDrawOffset][/notActualTexPath>
+ ProjectRimFactory.AutoMachineTool.Graphic_LinkedConveyorTwo
+ true
+ (1, 1)
+
+
+
+
+
+
+ PRF_Conveyor_Simple_II
+
+ An upgraded version of the conveyor belt which transports at twice the speed. Functions similarly to the standard belt, dumping into storage, stockpiles, or empty space.\nA corner can be made by leading the belt into the side of another belt and it will seamlessly continue.
+ false
+
+ 10
+
+ Belts/v3/BeltConveyorIcon2
+
+ [extraData][texPath]Belts/v3/Belts Atlas 640x640 GroundLevel Padded[/texPath][arrowEastDrawOffset](0,0.0,0)[/arrowEastDrawOffset][arrowTexPath1]Belts/T2SmallArrow00[/arrowTexPath1][arrowTexPath2]Belts/T2SmallArrow01[/arrowTexPath2][/extraData]
+ ProjectRimFactory.AutoMachineTool.Graphic_LinkedConveyorTwo
+ true
+ (1, 1)
+
+
+
+ [notActualTexPath>[texPath>Belts/v3/Belts Atlas 640x640 GroundLevel Padded Blueprint[/texPath>[arrowDrawOffset](0,0.2,0)[/arrowDrawOffset][arrowTexPath1]Belts/T2SmallArrow00[/arrowTexPath1][arrowTexPath2]Belts/T2SmallArrow01[/arrowTexPath2][/notActualTexPath>
+ ProjectRimFactory.AutoMachineTool.Graphic_LinkedConveyorTwo
+ true
+ (1, 1)
+
+
+
+
+
+
+
+
+
+ PRF_Conveyor_Simple_III
+
+ An advanced conveyor belt for optimal logistics, moving at three times the speed (or 1.5x its predecessor). Functions similarly to the standard belt, dumping into storage, stockpiles, or empty space.\nA corner can be made by leading the belt into the side of another belt and it will seamlessly continue.
+ false
+
+ 20
+
+ Belts/v3/BeltConveyorIcon3
+
+ [extraData][texPath]Belts/v3/Belts Atlas 640x640 GroundLevel Padded[/texPath][arrowEastDrawOffset](0,0.0,0)[/arrowEastDrawOffset][arrowTexPath1]Belts/T3SmallArrow00[/arrowTexPath1][arrowTexPath2]Belts/T3SmallArrow01[/arrowTexPath2][/extraData]
+ ProjectRimFactory.AutoMachineTool.Graphic_LinkedConveyorTwo
+ true
+ (1, 1)
+
+
+
+ [notActualTexPath>[texPath>Belts/v3/Belts Atlas 640x640 GroundLevel Padded Blueprint[/texPath>[arrowDrawOffset](0,0.2,0)[/arrowDrawOffset][arrowTexPath1]Belts/T3SmallArrow00[/arrowTexPath1][arrowTexPath2]Belts/T3SmallArrow01[/arrowTexPath2][/notActualTexPath>
+ ProjectRimFactory.AutoMachineTool.Graphic_LinkedConveyorTwo
+ true
+ (1, 1)
+
+
+
+
+
+
+
+
+
+ PRF_Conveyor_Wall_I
+
+ Moves items - through walls! You can use these to traverse walls or move items along inside them. When items hit the end, they will move out onto the ground, as long as there is room.
+ PRF_WallBeltsGroup
+ BuildingOnTop
+ 0
+ 0.0
+ false
+
+
+
+
+
+
+
+ PRF_Conveyor_Connector_To_Floor
+
+ Connects the underground conveyor belt to the above-ground conveyor. Provides an exit back to the surface and will drop items on the floor if there is no conveyor.
+
+ AutoMachineTool/Buildings/undergroundOut
+ Graphic_Multi
+ (1,1.1)
+ true
+
+ 70
+
+
+
+
+
+
+ PRF_Conveyor_Splitter_I
+ ProjectRimFactory.AutoMachineTool.Building_BeltSplitter
+
+ An automated unit that directs items on a conveyor belt in different directions depending on filters, handled by a very basic AI. If no filters are set, it will simply split where items passing through go. Directions in settings are output and must be enabled.
+ 120
+ PassThroughOnly
+ true
+
+
+
+
+
+
+
+
+ PRF_DeepQuarry_mkI
+
+ ProjectRimFactory.Industry.Building_DeepQuarry
+ An early automated quarry that continuously extracts resources from the ground, including rock chunks, materials and components. Produces a random resource roughly once every 8 hours.\n\nWARNING: Automated mining operations can draw insectoid infestations to your location!
+
+ Industry/Drill
+ (2,2)
+
+ false
+ (2,2)
+
+ 4000
+ 250
+ 0.5
+ 2175
+ -25
+ 35
+
+
+ 450
+ 5
+ 1
+
+
+
+ 10.0
+ 100.0
+
+
+
WoodLog
+
+
+ true
+ true
+
+
+ 6
+ (217,112,33,0)
+
+
+
+
+ true
+
+
+ CompHeatPusherPowered
+ 6
+
+
+ Drill
+
+
+
+
+ 8
+
+
+
+
+
Gold
+
Uranium
+
ComponentIndustrial
+
Steel
+
Plasteel
+
Jade
+
Silver
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+ 4
+
+
PRF_AutonomousMining
+
+
+
+
+
+ PRF_DeepQuarry_mkII
+
+ ProjectRimFactory.Industry.Building_DeepQuarry
+ An automated quarry that continuously extracts resources from the ground, including rock chunks, materials and components. Produces a random resource roughly once every 3 hours.\n\nWARNING: Automated mining operations can draw insectoid infestations to your location!
+
+ Industry/DeepQuarry
+ (2.4,2.4)
+
+ (2,2)
+
+ 6500
+ 350
+ 2940
+ 0.5
+
+
+ 400
+ 10
+ 50
+ 1
+
+
+
+ CompPowerTrader
+ 800
+
+
+
+
+ true
+
+
+ CompHeatPusherPowered
+ 5
+
+
+ 6
+ (217,112,33,0)
+
+
+ Drill
+
+
+
+
+ 3
+
+
+
+
ComponentIndustrial
+
Plasteel
+
ChunkSandstone
+
ChunkGranite
+
ChunkLimestone
+
ChunkSlate
+
ChunkMarble
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+ 1
+
+
PRF_AutonomousMiningII
+
+
+
+
+
+
+
+
+
+
+
+
+ PRF_DeepQuarry_mkIII
+
+ The most advanced form of the automated quarry, this device uses advanced techniques to safely mine without drawing the attention of insectoids. It will also only produce valuable minerals, never stone.
+ ProjectRimFactory.Industry.Building_DeepQuarry
+
+ Industry/DrillT32
+ (3,3)
+
+ (3,3)
+
+ 6800
+ 800
+ 6893
+ 0.2
+
+
+ 1000
+ 25
+ 5
+ 50
+ 1
+ 1
+
+
+
+ CompPowerTrader
+ 5000
+
+
+ true
+
+
+ CompHeatPusherPowered
+ 20
+
+
+ 6
+ (115,198,206,0)
+
+
+
+
+ 2
+
+
+
+
ComponentIndustrial
+
Plasteel
+
ChunkSandstone
+
ChunkGranite
+
ChunkLimestone
+
ChunkSlate
+
ChunkMarble
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
PRF_AutonomousMiningIII
+
+
+
+
+
+
+
+ PRF_BillTypeMiner_I
+
+ ProjectRimFactory.AutoMachineTool.Building_Miner
+ With highly advanced spacer technology auto mining has been made more precise than ever, and you can now adjust what ores to mine for and even balance power for speed. It will set the primary ore type and receive occasional bonuses in the form of rare ores and junk.
+ Never
+
+ Industry/DrillT3
+ (3,3)
+
+
+ 1000
+ 25
+ 10
+ 100
+ 1
+ 1
+
+
+ 7600
+ 800
+ 8663
+ 0.2
+
+
+
+
+ 5.8
+
+
+
+
+
+ PRF_IndustrialLamp
+
+ Furniture
+ A powerful electric lamp that lights a wide area.\nThis lamp lights up a huge area both indoors and outdoors to light up your factory hall.\nYou may change the color if you've researched colored lights.
+ 0.50
+
+ Misc/IndustrialLamp
+ (1,1)
+
+ Rare
+
+ 2
+ 40
+ 1
+
+
+ 500
+ 0
+ 160
+ 25
+
+ (1,1)
+
+
+ CompPowerTrader
+ 50
+ false
+
+
+ CompHeatPusherPowered
+ 1
+
+
+ 20
+ (252,199,139,0)
+ true
+ true
+
+
+
+
Electricity
+
+ 18
+
+
+
+
+
+ PRF_Floorspotlight
+
+ An electrical lamp that lights an area.\nThis lamp works both inside and outside.\nComes in colored variants if you've researched colored lights.
+ Floor
+ Standable
+ Furniture
+ 0.50
+
+ Misc/FloorSpotlight
+ (0.6)
+
+ Rare
+
+ 2
+ 20
+
+
+ 250
+ 0
+ 65
+ 10
+
+ (1,1)
+
+
+
+
+ false
+
+
+
+
+
+ PRF_AutoCrafterSimple
+
+ A first-generation S.A.L automatic assembler capable of crafting various bills at a base skill level of 5. This machine can also create pieces of art but is extremely limited in skill.\nTo use this machine, simply place the assembler's arrow facing a workbench's interaction spot.
+
+ 75
+ 45
+ 8
+ 1
+ 1
+ 1
+ 1
+
+
+ 2780
+
+
+ (102,102,105,256)
+
+
+
+
+
+
+
+
+ PRF_AutoCrafter
+
+ The Mark II auto-assembler is the backbone of Project S.A.L, a small but powerful building capable of autonomously crafting recipes. Although more advanced than the basic model with a crafting skill of 12, any art produced by this device is still very basic.
+ 10
+
+ 100
+ 75
+ 10
+ 2
+ 1
+ 1
+ 1
+
+
+ 3366
+
+
+
+
+
+
+
+
+ PRF_TheArtMachine
+
+ A specially designed auto crafter that uses heuristic algorithms to produce moderately skilled art at a pace no human could ever match - it pumps out art like a firehose pumps out water.
+ 10
+
+ (133,97,67,256)
+
+
+ 150
+ 100
+ 300
+ 20
+ 4
+ 1
+ 1
+ 2
+
+
+ 5108
+
+
+
+
+
+
+
+
+ PRF_TheArtMaster
+
+ A highly advanced auto-crafter that uses a database of several thousand years of artistic expression to produce master quality art at an absurd pace - a volcanic explosion of art!
+ 10
+
+ (180,60,60,256)
+
+
+ 150
+ 200
+ 800
+ 30
+ 5
+ 1
+ 1
+ 4
+
+
+ 8500
+
+
+
+
+
+
+
+
+ PRF_OverclockedAutoAssembler
+
+ An auto-assembler which has been modified to emphasize speed over quality. Any random idiot in your colony could do better, but this machine works at a ridiculous rate and never takes breaks.
+ 15
+
+ (15,100,130,256)
+
+
+ 500
+ 300
+ 1000
+ 40
+ 8
+ 1
+ 1
+ 1
+
+
+ 10575
+
+
+
+
+
+
+
+
+ PRF_OverclockedAutoAssemblerII
+
+ An advanced overclocked auto-assembler that puts Henry Ford's production lines to shame. The quality is a joke, but it can do the work of an entire team of morons.\n"So it makes you smarter?" "No, it makes you stupid faster."
+ 15
+
+ (15,100,130,256)
+
+
+ 1000
+ 600
+ 2000
+ 50
+ 10
+ 1
+ 1
+ 2
+
+
+ 16147
+
+
+
+
+
+
+
+
+
+
+ PRF_GodlyCrafter
+
+ A device to make even the Archotechs sit up and blink, the Godly S.A.L crafter works so quickly it defies all rationality. Perfect for mass-producing high-quality items, this device is probably as valuable as the rest of your colony combined. May or may not incinerate the universe.\nThis might be the first step into insanity?!#...
+ 18
+
+ (153,0,0,256)
+
+
+ 10000
+ 7500
+ 100000
+ 450
+ 50
+ 1
+ 5
+ 4
+ 5
+
+
+ 293000
+
+
+
+
+
+
+
+
+ PRF_WoodCrate_II
+
+ A large crate that stores 16 stacks. Items stored in the crate do not deteriorate.
+
+ Storage/Wood_Crate6
+ (2.8,2.6)
+ (133,97,67,256)
+
+
+ 10
+ 100
+ 1000
+ 1.0
+ 230
+ -0.5
+
+
+
+ Normal
+
+
+
Manufactured
+
ResourcesRaw
+
Items
+
BuildingsArt
+
Weapons
+
Apparel
+
BodyParts
+
+
+
AllowRotten
+
+
+
+
+ (2,2)
+
+ 80
+ 20
+
+ ConstructWood
+
+
PRF_Crates
+
+ 4
+
+
+ 16
+ true
+
+
+
+
+
+
+ PRF_SteelCrate_I
+
+ A small steel crate that can store 32 stacks. Items stored in the crate do not deteriorate.
+
+ Storage/Steel_Crate
+ (2.8,1.3)
+ (102,102,105,256)
+ false
+
+
+ 10
+ 200
+ 2500
+ 360
+ 0.1
+ -0.1
+
+
+
+ Normal
+
+
+
Manufactured
+
ResourcesRaw
+
Items
+
BuildingsArt
+
Weapons
+
Apparel
+
BodyParts
+
+
+
AllowRotten
+
+
+
+
+ (2,1)
+ true
+
+ 60
+
+ 7
+
+
PRF_SteelCrates
+
+
+
+ 32
+ true
+
+
+
+
+
+
+
+ PRF_SteelCrate_II
+
+ A large crate that can store 64 stacks. Items stored in the crate do not deteriorate.
+
+ Storage/Steel_Crate
+ (2.8,2.6)
+ (102,102,105,256)
+
+
+ 10
+ 200
+ 2500
+ 0.1
+ 480
+ -0.2
+
+
+
+ Normal
+
+
+
Manufactured
+
ResourcesRaw
+
Items
+
BuildingsArt
+
Weapons
+
Apparel
+
BodyParts
+
+
+
AllowRotten
+
+
+
+
+ (2,2)
+
+ 120
+
+ 8
+
+
PRF_SteelCrates
+
+
+
+ 64
+ true
+
+
+
+
+
+
+ PRF_DigitalStorageUnit_I
+
+ A matter-energy conversion-based storage unit that can hold up to 768 stacks, consuming 10 W of power per stack of items. In the event of a power outage, items already inside will be safe, but the DSU will not be able to store more. Don't break it.
+ PRF_IoGroup
+ 0.9
+ ProjectRimFactory.Storage.Building_MassStorageUnitPowered
+
+ Storage/CargoPlatform
+ (3,3)
+
+ (0.0,0,2.9,2.9)
+ Damage/Corner
+ Damage/Corner
+
+
+
+ 50
+ 450
+ 5000
+ 10880
+ 0.05
+ 0.5
+
+
+ true
+ true
+
+ Normal
+
+
+
+
+
+
+
+
+ ProjectRimFactory.Storage.Building_ColdStoragePowered
+ PRF_ColdStorageUnit_I
+
+ A matter-energy conversion-based storage unit that can hold up to 10k stacks, consuming 10 W of power per stack of items. In the event of a power outage, items already inside will be safe, but the archival storage unit will not be able to store more. Don't break it.\n\nItems stored in this device are not spawned and therefore won't be automatically accessible by your pawns. Use I/O ports to interact with it.
+ PRF_IoGroup
+ 0.9
+
+
+
+
+
+
+
+ PRF_IOPort_I
+
+ An advanced connection port for the digital storage unit. It can be set to input/output from any platform remotely within the map.
+ ProjectRimFactory.Storage.Building_StorageUnitIOPort
+ RealtimeOnly
+ 0.7
+ PRF_IoGroup
+
+ Storage/IO_Port
+ Graphic_Single
+ CutoutComplex
+
+ (0.05,0.1,0.9,0.9)
+ Damage/Corner
+ Damage/Corner
+
+
+ Building
+ PassThroughOnly
+ 0.5
+ 70
+
+ true
+ true
+ true
+
+ Normal
+
+
+
+
+
+
+
+
+ PRF_IOPPusher_I
+
+ This modified I/O port allows you to push items directly into the next cell, onto a belt, or anywhere else, saving space instead of using a puller.\nMore of an output port than input/output.
+ ProjectRimFactory.Storage.Building_IOPusher
+ RealtimeOnly
+ 0.7
+ PRF_IoGroup
+ true
+
+ Storage/IO_Pusher
+ Graphic_Multi
+ CutoutComplex
+
+ (0.05,0.1,0.9,0.9)
+ Damage/Corner
+ Damage/Corner
+
+
+ Building
+ PassThroughOnly
+ 0.5
+ 70
+
+ true
+
+ Normal
+
+
+
+
+
+
+
+
+
+ PRF_ItemSlide
+ ProjectRimFactory.Storage.Building_ItemSlide
+
+ This belt chute/hopper is used for pawns or drones to fill a facing belt without the need for a stockpile and a puller. Basically, it's a small stockpile that automatically pushes onto a belt.
+
+ Storage/ItemSlide
+ Graphic_Multi
+
+
+
+
+ 10
+ 100
+ 1000
+ 1.0
+ -0.5
+ 170
+
+
+
+ Normal
+
+
+
Manufactured
+
ResourcesRaw
+
Items
+
BuildingsArt
+
Weapons
+
Apparel
+
BodyParts
+
+
+
AllowRotten
+
+
+
+
+ (1,1)
+ Normal
+
+
ProjectRimFactory.Storage.PlaceWorker_ItemSlide
+
+ true
+
+ 40
+ 10
+
+ ConstructWood
+
+
PRF_BeltsI
+
+ 2
+
+
+ 4
+ true
+
+
+
+
ProjectRimFactory.Common.ITab_ProductionSettings
+
+
+
+
+
+
+
+ PRF_IOPort_II
+
+ An interactive connection port for the digital storage unit. Pawns may request any item from the connected digital storage unit.
+ ProjectRimFactory.Storage.Building_AdvancedStorageUnitIOPort
+ RealtimeOnly
+ 0.7
+ PRF_IoGroup
+
+ Storage/IO_Port
+ Graphic_Single
+ CutoutComplex
+
+ (0.05,0.1,0.9,0.9)
+ Damage/Corner
+ Damage/Corner
+
+
+ Building
+ PassThroughOnly
+ 0.5
+ 70
+
+ true
+ true
+ true
+
+ Normal
+
+
+
+
+ 0
+ ConstructDirt
+ Heavy
+ PRF_ConcreteFloorGroup
+ Floors
+ Rough concrete which is cheap and quick to build.\n\nThis colored version takes slightly longer to build but is also less ugly.
+ Terrain/Surfaces/Concrete
+ Hard
+ 70
+
+ 0
+ 125
+
+
+ 1
+
+ Misc6
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Defs/ThingDefs_Items/Things_Common.xml b/1.4/Defs/ThingDefs_Items/Things_Common.xml
new file mode 100644
index 000000000..ebbbce553
--- /dev/null
+++ b/1.4/Defs/ThingDefs_Items/Things_Common.xml
@@ -0,0 +1,127 @@
+
+
+
+
+
+ PRF_RoboticArm
+
+ An electrically powered robotic arm necessary for the construction of automated buildings. Can be crafted at the robotic machining table.
+
+ Common/RoboticArm
+ Graphic_Single
+
+ Middle
+ Metal_Drop
+ Metal_Drop
+
+ 200
+ 50
+ 1000
+ 2
+
+
+
PRF_CoreTierI
+
+
+
Manufactured
+
+ Industrial
+
+
+
+
+ PRF_ElectronicChip_I
+
+ A tensor processing unit containing the most rudimentary AI. Used for early machines and robots.
+
+ Common/WeakAICore
+ Graphic_Single
+
+ Middle
+ Metal_Drop
+ Metal_Drop
+
+ 350
+ 50
+ 2000
+ 1
+
+
+
Manufactured
+
+ Industrial
+
+
+
+
+ PRF_ElectronicChip_II
+
+ An advanced processing unit containing hi-tech AI, which is used for advanced machines and robots.
+
+ Common/AdvancedAICore
+ Graphic_Single
+
+ Middle
+ Metal_Drop
+ Metal_Drop
+
+ 1615
+ 50
+ 4000
+ 1
+
+
+
Manufactured
+
+
+
+
+
+ PRF_ElectronicChip_III
+
+ In quantum computing, a qubit or quantum bit is the basic unit of quantum information—the quantum version of the classical binary bit physically realized with a two-state device. A qubit is a two-state quantum-mechanical system, one of the simplest quantum systems displaying the peculiarity of quantum mechanics.
+
+ Common/UltraAiCore
+ Graphic_Single
+
+ Middle
+ Metal_Drop
+ Metal_Drop
+
+ 12055
+ 75
+ 10000
+ 1
+
+ Ultra
+
+
Manufactured
+
+
+
+
+
+ PRF_DroneModule
+
+ An unmanned aerial vehicle capable of fulfilling simple tasks. Will need to be installed in a drone station in order to get the right programming installed.
+
+ Common/DroneModule
+ Graphic_Single
+
+ Middle
+ Metal_Drop
+ Metal_Drop
+
+ 475
+ 50
+ 2
+ 2000
+
+
+
Manufactured
+
+ 75
+ Industrial
+
+
+
diff --git a/1.4/Defs/ThingDefs_Items/Things_Schematic.xml b/1.4/Defs/ThingDefs_Items/Things_Schematic.xml
new file mode 100644
index 000000000..af18e532b
--- /dev/null
+++ b/1.4/Defs/ThingDefs_Items/Things_Schematic.xml
@@ -0,0 +1,136 @@
+
+
+
+
+
+ PRF_DataDisk
+
+ ThingWithComps
+ A roll of magnetic tape. Apparently, it can hold 64 megabytes. How primitive... It's used to create recipe databases for PRF machines.
+
+ SAL3/datadisk
+ Graphic_Single
+ 120
+ CutoutComplex
+
+ Middle
+ Metal_Drop
+ Metal_Drop
+ 1
+ true
+
+ 630
+ 100
+ 2
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/Drones/SaveOurShip2.xml b/1.4/Patches/Drones/SaveOurShip2.xml
new file mode 100644
index 000000000..22818912e
--- /dev/null
+++ b/1.4/Patches/Drones/SaveOurShip2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
Save Our Ship 2
+
+
+ /Defs/ThingDef[defName = "PRFDrone"]/statBases
+
+ 1
+ 1
+ 3
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/Drones/Vanilla_Fishing_Expanded.xml b/1.4/Patches/Drones/Vanilla_Fishing_Expanded.xml
new file mode 100644
index 000000000..d837545a8
--- /dev/null
+++ b/1.4/Patches/Drones/Vanilla_Fishing_Expanded.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
Vanilla Fishing Expanded
+
+
+ Always
+
+
+
+ /Defs
+
+
+ PRF_MiniHelperFishing
+
+
+ Drones/MiniDroneStation
+
+ A mini fishing station capable of helping you with catching fish. It will take breaks to prevent circuits from getting too wet.
+
+ 1
+ 1
+ 30
+ 20
+ 1
+ 3
+ 1
+
+
+ 1870
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/Fishing/OnlyIfFish.xml b/1.4/Patches/Fishing/OnlyIfFish.xml
new file mode 100644
index 000000000..02ce0bcb9
--- /dev/null
+++ b/1.4/Patches/Fishing/OnlyIfFish.xml
@@ -0,0 +1,324 @@
+
+
+
+
+
+
+
FishIndustry
+
Fishing Nets
+
[RF] Fishing
+
Thanks For All The Fish
+
Vanilla Fishing Expanded
+
+
+ Always
+
+
+
+ /Defs
+
+
+ PRF_T1_Aquaculture
+
+ An automated fishing machine tasked with fishing in freshwater. To use this machine, simply insert a bill and the machine will perform its task.
+ ProjectRimFactory.SAL3.Things.Assemblers.Building_SimpleAssembler
+
+ Industry/aquaT1
+ (5,5)
+
+ 0.8
+ PRF_AnimalStationsGroup
+ (5,5)
+
+
+ /Defs
+
+
+ PRF_T2_Aquaculture
+
+ An automated fishing machine tasked with fishing in saltwater. To use this machine, simply insert a bill and the machine will perform its task.
+ ProjectRimFactory.SAL3.Things.Assemblers.Building_SimpleAssembler
+
+ Industry/aquaT2
+ (5,5)
+
+ 0.8
+ PRF_AnimalStationsGroup
+ (5,5)
+
+
+ /Defs
+
+
+ Make_PRF_FishFood
+
+ Make fish food by combining raw meat and plants.
+ Making fish food.
+ 250
+ CookSpeed
+ Cook
+ Recipe_CookMeal
+ true
+ IngredientValueGetter_Nutrition
+
+
+
+
+
MeatRaw
+
+
+ 1
+
+
+
+
+
PlantFoodRaw
+
+
+ 1
+
+
+
+ 30
+
+
+
+
FoodRaw
+
PlantFoodRaw
+
+
+ Cooking
+
+
ButcherSpot
+
TableButcher
+
+
+
+
+
+
+ /Defs
+
+
+ PRF_FreshwaterFish
+
+ Start the process of farming freshwater fish.
+ Farming fish.
+ Cook
+ Cooking
+ GeneralLaborSpeed
+ Recipe_CookMeal
+ 3000
+
+
+
+
+
PRF_FishFood
+
+
+ 10
+
+
+
+
+
+
+
+
+
+ /Defs
+
+
+ PRF_OceanwaterFish
+
+ Start the process of farming oceanwater fish.
+ Farming fish.
+ Cook
+ Cooking
+ GeneralLaborSpeed
+ Recipe_CookMeal
+ 4000
+
+
+
+
+
PRF_FishFood
+
+
+ 15
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/Fishing/RF_Fishing.xml b/1.4/Patches/Fishing/RF_Fishing.xml
new file mode 100644
index 000000000..25ab096af
--- /dev/null
+++ b/1.4/Patches/Fishing/RF_Fishing.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/Pawnmorpher.xml b/1.4/Patches/Pawnmorpher.xml
new file mode 100644
index 000000000..5ac33f3cf
--- /dev/null
+++ b/1.4/Patches/Pawnmorpher.xml
@@ -0,0 +1,27 @@
+
+
+
+
Pawnmorpher
+
+
+
+
+ Defs/ThingDef[@Name="PRFBasePawn"]
+
+
+ true
+
+
+
+
+ Defs/ThingDef[@Name="PRFDroneBase"]
+
+
+ true
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.4/Patches/RT_Fuse.xml b/1.4/Patches/RT_Fuse.xml
new file mode 100644
index 000000000..5e9aba120
--- /dev/null
+++ b/1.4/Patches/RT_Fuse.xml
@@ -0,0 +1,161 @@
+
+
+
+
+
RT Fuse
+
ratys.rtfuse
+
+
+ Always
+
+
+ /Defs
+
+
+
+ Building_RTCircuitBreaker_30k
+
+ A set of automatic circuit breakers. Handles up to 30000 Wd discharge, will flick off if tripped.
+ Power
+
+ Building
+ Building
+ MinifiedThing
+
+
+
+
+
+
+
+ Building_RTCircuitBreaker_300k
+
+ A set of automatic circuit breakers. Handles up to 300000 Wd discharge, will flick off if tripped.
+ Power
+
+ Building
+ Building
+ MinifiedThing
+
+
+
+ true
+
+ 800
+ 100
+ 1900
+ 1.0
+ 30
+
+ An advanced connection port for the digital storage unit. It can be set to input/output from any DSU remotely within the map. This version interfaces with RimFridge branded coolers.
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ A RimFridge branded, refrigerated version of the digital storage unit that stores up to 512 stacks of food. Consumes 10 W of power per stack of items. In the event of a power outage, items already inside will be safe, but the DSU will not be able to store more.
+ (3,3)
+ 150
+
+ 300
+ 50
+ 20
+ 20
+ 100
+ 100
+ 15
+ 1
+ 1
+
+ Normal
+
+
+
+ true
+
+ 800
+ 100
+ 1900
+ 1.0
+ 30
+
+ An advanced connection port for the digital storage unit. It can be set to input/output from any DSU remotely within the map. This version interfaces with Simple Utilities: Fridge branded coolers.
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ An Owlchemist branded, refrigerated version of the digital storage unit that stores up to 512 stacks of food. Consumes 10 W of power per stack of items. In the event of a power outage, items already inside will be safe, but the DSU will not be able to store more.
+ (3,3)
+ 150
+
+ 300
+ 50
+ 20
+ 20
+ 100
+ 100
+ 15
+ 1
+ 1
+
+ Normal
+
+
diff --git a/Defs/ThingDefs_Buildings/Buildings_Logistics.xml b/Defs/ThingDefs_Buildings/Buildings_Logistics.xml
index 93df958c3..8687ec456 100644
--- a/Defs/ThingDefs_Buildings/Buildings_Logistics.xml
+++ b/Defs/ThingDefs_Buildings/Buildings_Logistics.xml
@@ -248,7 +248,8 @@
ProjectRimFactory.AutoMachineTool.Building_HarvestPullerA specialized puller that will pull from adjacent grow zones. It must be connected to the grow zone to function properly.
-
+ true
+
@@ -313,7 +314,8 @@
PRF_SimplePuller_IA device that pulls items from the input (white cell) and pushes them to the output (yellow cell). Turn it on after setting the filters.\nThis device is very flexible in its connections and works with stockpiles, storage, belts (all versions), I/O, and others.
-
+ true
+ 11
@@ -366,7 +368,8 @@
PRF_SimplePuller_IIAn optimized puller that runs at higher speeds. Pulls from input (white cell) to output (yellow cell). Very flexible in its connections.
-
+ true
+ 521
@@ -411,7 +414,8 @@
PRF_SimplePuller_II_SideA specialized puller designed to pull items at a 90-degree angle. Functionally similar to the normal puller. Directions can be swapped after placing.
-
+ true
+ 521
diff --git a/Defs/ThingDefs_Races/Races_Base.xml b/Defs/ThingDefs_Races/Races_Base.xml
index 74e539ddc..97c774dce 100644
--- a/Defs/ThingDefs_Races/Races_Base.xml
+++ b/Defs/ThingDefs_Races/Races_Base.xml
@@ -127,6 +127,7 @@
ToolUserPRFDroneDroneConstant
+ Misc
PRFDrone
0.50.8
diff --git a/LoadFolders.xml b/LoadFolders.xml
index 7217ed525..1315be6bf 100644
--- a/LoadFolders.xml
+++ b/LoadFolders.xml
@@ -13,5 +13,9 @@
/
+
1.4
+
+
/
+
diff --git a/Source/ProjectRimFactory/AutoMachineTool/Building_BeltConveyor.cs b/Source/ProjectRimFactory/AutoMachineTool/Building_BeltConveyor.cs
index bc8d491d7..204ea40b6 100644
--- a/Source/ProjectRimFactory/AutoMachineTool/Building_BeltConveyor.cs
+++ b/Source/ProjectRimFactory/AutoMachineTool/Building_BeltConveyor.cs
@@ -125,7 +125,7 @@ public virtual bool IsEndOfLine
}
// force redraw of graphic - links might have changed?
if (Spawned) this.Map.mapDrawer.MapMeshDirty(this.Position,
- MapMeshFlag.Buildings | MapMeshFlag.Things);
+ MapMeshFlagDefOf.Buildings | MapMeshFlagDefOf.Things);
}
}
// Note: it might be worth making link and unlink do something with a cached
@@ -336,21 +336,22 @@ public override void DrawGUIOverlay()
GenMapUI.DrawThingLabel(result, c.stackCount.ToStringCached(), GenMapUI.DefaultThingLabelColor);
}
}
- public override void Draw()
+
+ public override void DynamicDrawPhaseAt(DrawPhase phase, Vector3 drawLoc, bool flip = false)
{
- // Don't draw underground things by default:
+ if (phase != DrawPhase.Draw) return; //Crashes when drawing 2 things at the same time in some of the other phases
if (this.IsUnderground && !OverlayDrawHandler_UGConveyor.ShouldDraw)
{
// 地下コンベアの場合には表示しない.
return;
}
- base.Draw();
+ base.DynamicDrawPhaseAt(phase, drawLoc, flip);
if (this.State != WorkingState.Ready)
{
DrawCarried();
}
}
-
+
//Cache results of expensive calls
Graphic drawCarried_GraphicBase = null;
Graphic drawCarried_GraphicDB = null;
@@ -376,7 +377,7 @@ public virtual void DrawCarried()
if (gd == null) gd = drawCarried_GraphicBase.data;
if (gd == null)
{
- t.DrawAt(CarryPosition());
+ t.DrawNowAt(CarryPosition());
return;
}
drawCarried_GraphicDB ??= GraphicDatabase.Get(gd.graphicClass, gd.texPath, drawCarried_GraphicBase.Shader,
diff --git a/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs b/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs
index 75927b423..ffd6a4418 100644
--- a/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs
+++ b/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs
@@ -124,7 +124,7 @@ public override void DeSpawn(DestroyMode mode = DestroyMode.Vanish)
protected void UpdateGraphic()
{
if (Spawned) this.Map.mapDrawer.MapMeshDirty(this.Position,
- MapMeshFlag.Buildings | MapMeshFlag.Things);
+ MapMeshFlagDefOf.Buildings | MapMeshFlagDefOf.Things);
}
// What does this even mean?
diff --git a/Source/ProjectRimFactory/AutoMachineTool/MoteProgressBar2.cs b/Source/ProjectRimFactory/AutoMachineTool/MoteProgressBar2.cs
index eca666b69..32e2ec56a 100644
--- a/Source/ProjectRimFactory/AutoMachineTool/MoteProgressBar2.cs
+++ b/Source/ProjectRimFactory/AutoMachineTool/MoteProgressBar2.cs
@@ -1,18 +1,20 @@
using RimWorld;
using System;
using UnityEngine;
+using Verse;
namespace ProjectRimFactory.AutoMachineTool
{
public class MoteProgressBar2 : MoteProgressBar
{
- public override void Draw()
+ public override void DynamicDrawPhaseAt(DrawPhase phase, Vector3 drawLoc, bool flip = false)
{
+ if (phase != DrawPhase.Draw) return; //Crashes when drawing 2 things at the same time in some of the other phases
if (progressGetter != null)
{
this.progress = Mathf.Clamp01(this.progressGetter());
}
- base.Draw();
+ base.DynamicDrawPhaseAt(phase, drawLoc, flip);
}
public Func progressGetter;
diff --git a/Source/ProjectRimFactory/AutoMachineTool/Ops.cs b/Source/ProjectRimFactory/AutoMachineTool/Ops.cs
index b4e341f53..c6f6d977e 100644
--- a/Source/ProjectRimFactory/AutoMachineTool/Ops.cs
+++ b/Source/ProjectRimFactory/AutoMachineTool/Ops.cs
@@ -255,7 +255,7 @@ public static TO CopyTo(this FROM bill, TO copy) where FROM : Bill_Pro
copy.deleted = bill.deleted;
copy.hpRange = bill.hpRange;
copy.includeEquipped = bill.includeEquipped;
- copy.includeFromZone = bill.includeFromZone;
+ copy.SetIncludeGroup(bill.GetIncludeSlotGroup());
copy.includeTainted = bill.includeTainted;
copy.ingredientFilter = bill.ingredientFilter;
copy.ingredientSearchRadius = bill.ingredientSearchRadius;
diff --git a/Source/ProjectRimFactory/AutoMachineTool/SAL_TargetBench.cs b/Source/ProjectRimFactory/AutoMachineTool/SAL_TargetBench.cs
index 84838a955..dc2fc30f1 100644
--- a/Source/ProjectRimFactory/AutoMachineTool/SAL_TargetBench.cs
+++ b/Source/ProjectRimFactory/AutoMachineTool/SAL_TargetBench.cs
@@ -471,7 +471,7 @@ public override bool TryStartWork(out float workAmount)
{
thingDef = this.bill.recipe.UsesUnfinishedThing ? this.dominant?.def : null;
}
- workAmount = this.bill.recipe.WorkAmountTotal(thingDef);
+ workAmount = this.bill.recipe.WorkAmountForStuff(thingDef);
float speedfact = my_workTable.GetStatValue(StatDefOf.WorkTableWorkSpeedFactor);
@@ -636,7 +636,8 @@ public SAL_TargetResearch(Building_AutoMachineTool mySAL, IntVec3 position, Map
}
public override bool Ready()
{
- return !(Find.ResearchManager.currentProj == null || !Find.ResearchManager.currentProj.CanBeResearchedAt(researchBench, false));
+ var currentProj = Find.ResearchManager.GetProject(null);
+ return !(currentProj == null || !currentProj.CanBeResearchedAt(researchBench, false));
}
public override void Free()
{
@@ -650,12 +651,13 @@ public override void Reserve()
public override void WorkDone(out List products)
{
products = new List();
- if (Find.ResearchManager.currentProj != null)
+ ResearchProjectDef researchProject = Find.ResearchManager.GetProject(null);
+ if (researchProject != null)
{
float statValue = Mathf.Max(mySAL.powerWorkSetting.GetSpeedFactor() * (mySAL.GetSkillLevel(SkillDefOf.Intellectual) * 0.115f + 0.08f), 0.1f);
statValue *= researchBench.GetStatValue(StatDefOf.ResearchSpeedFactor);
- statValue /= Find.ResearchManager.currentProj.CostFactor(Faction.OfPlayer.def.techLevel);
+ statValue /= researchProject.CostFactor(Faction.OfPlayer.def.techLevel);
//Tuned the factor to 1000 from 100
statValue *= 1000;
@@ -666,7 +668,7 @@ public override void WorkDone(out List products)
public override bool TryStartWork(out float workAmount)
{
workAmount = 0;
- if (Find.ResearchManager.currentProj != null)
+ if (Find.ResearchManager.GetProject(null) != null)
{
workAmount = 1000f;
return true;
diff --git a/Source/ProjectRimFactory/AutoMachineTool/SectionLayer_UGConveyor.cs b/Source/ProjectRimFactory/AutoMachineTool/SectionLayer_UGConveyor.cs
index afd3f4c83..76db34e5d 100644
--- a/Source/ProjectRimFactory/AutoMachineTool/SectionLayer_UGConveyor.cs
+++ b/Source/ProjectRimFactory/AutoMachineTool/SectionLayer_UGConveyor.cs
@@ -9,7 +9,7 @@ public class SectionLayer_UGConveyor : SectionLayer_Things
public SectionLayer_UGConveyor(Section section) : base(section)
{
this.requireAddToMapMesh = false;
- this.relevantChangeTypes = MapMeshFlag.Buildings;
+ this.relevantChangeTypes = MapMeshFlagDefOf.Buildings;
}
public override void DrawLayer()
diff --git a/Source/ProjectRimFactory/Common/CommonGUIFunctions.cs b/Source/ProjectRimFactory/Common/CommonGUIFunctions.cs
index e561ed096..6144aaa98 100644
--- a/Source/ProjectRimFactory/Common/CommonGUIFunctions.cs
+++ b/Source/ProjectRimFactory/Common/CommonGUIFunctions.cs
@@ -18,10 +18,10 @@ public static void Label(Rect rect, string label, GUIStyle gUIStyle)
float num = Prefs.UIScale / 2f;
if (Prefs.UIScale > 1f && Math.Abs(num - Mathf.Floor(num)) > float.Epsilon)
{
- val.xMin = Widgets.AdjustCoordToUIScalingFloor(rect.xMin);
- val.xMax = Widgets.AdjustCoordToUIScalingFloor(rect.xMax);
- val.yMin = Widgets.AdjustCoordToUIScalingFloor(rect.yMin);
- val.yMax = Widgets.AdjustCoordToUIScalingFloor(rect.yMax);
+ val.xMin = LudeonTK.UIScaling.AdjustCoordToUIScalingFloor(rect.xMin);
+ val.xMax = LudeonTK.UIScaling.AdjustCoordToUIScalingFloor(rect.xMax);
+ val.yMin = LudeonTK.UIScaling.AdjustCoordToUIScalingFloor(rect.yMin);
+ val.yMax = LudeonTK.UIScaling.AdjustCoordToUIScalingFloor(rect.yMax);
}
GUI.Label(val, label, gUIStyle);
}
@@ -50,11 +50,18 @@ public static Texture GetThingTextue(Rect rect, Thing thing, out Color color)
}
if (!pawn.RaceProps.Humanlike)
{
- if (!pawn.Drawer.renderer.graphics.AllResolved)
+
+ /*if (!pawn.Drawer.renderer.graphics.AllResolved)
{
pawn.Drawer.renderer.graphics.ResolveAllGraphics();
}
Material obj = pawn.Drawer.renderer.graphics.nakedGraphic.MatAt(Rot4.East);
+ */
+ var Graphic = pawn.Drawer.renderer.BodyGraphic;
+ if (Graphic == null) Log.Error($"PRF Can't get the Body Graphic for {pawn}");
+ Material obj = Graphic.MatAt(Rot4.East);
+
+
color = obj.color;
return obj.mainTexture;
diff --git a/Source/ProjectRimFactory/Common/CompGlowerPulse.cs b/Source/ProjectRimFactory/Common/CompGlowerPulse.cs
index 11def1cd4..75ba19715 100644
--- a/Source/ProjectRimFactory/Common/CompGlowerPulse.cs
+++ b/Source/ProjectRimFactory/Common/CompGlowerPulse.cs
@@ -36,7 +36,8 @@ public void Tick()
if (this.needUpdate || this.Props.pulse)
{
this.Props.Update();
- this.parent.Map.glowGrid.MarkGlowGridDirty(this.parent.Position);
+ // MarkGlowGridDirty
+ this.parent.Map.glowGrid.DirtyCache(this.parent.Position);
this.needUpdate = false;
}
}
diff --git a/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_Building_Storage_GetGizmos.cs b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_Building_Storage_GetGizmos.cs
index 4da5e3207..56b6fb534 100644
--- a/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_Building_Storage_GetGizmos.cs
+++ b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_Building_Storage_GetGizmos.cs
@@ -22,7 +22,7 @@ class Patch_Building_Storage_GetGizmos
static MethodBase TargetMethod()
{
var predicateClass = typeof(Building_Storage).GetNestedTypes(HarmonyLib.AccessTools.all)
- .FirstOrDefault(t => t.FullName.Contains("d__43"));
+ .FirstOrDefault(t => t.FullName.Contains("d__52"));
if (predicateClass == null)
{
Log.Error("PRF Harmony Error - predicateClass == null for Patch_Building_Storage_GetGizmos.TargetMethod()");
diff --git a/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_RecipeWorkerCounter_CountProducts.cs b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_RecipeWorkerCounter_CountProducts.cs
index 22de487d3..717702e61 100644
--- a/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_RecipeWorkerCounter_CountProducts.cs
+++ b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_RecipeWorkerCounter_CountProducts.cs
@@ -21,7 +21,8 @@ class Patch_RecipeWorkerCounter_CountProducts
static void Postfix(RecipeWorkerCounter __instance, ref int __result, Bill_Production bill)
{
//Only run if Check everywhere is set
- if (bill.includeFromZone == null)
+ // TODO Check if that is the correct replacement
+ if (bill.GetIncludeSlotGroup() == null)
{
Map billmap = bill.Map;
int i = 0;
diff --git a/Source/ProjectRimFactory/Common/HarmonyPatches/RacePropertiesPatch.cs b/Source/ProjectRimFactory/Common/HarmonyPatches/RacePropertiesPatch.cs
index c213c068a..18dd8a8c3 100644
--- a/Source/ProjectRimFactory/Common/HarmonyPatches/RacePropertiesPatch.cs
+++ b/Source/ProjectRimFactory/Common/HarmonyPatches/RacePropertiesPatch.cs
@@ -7,10 +7,10 @@ namespace ProjectRimFactory.Common.HarmonyPatches
{
// A patch to the problem of forbidding what drones have mined.
// When mineable yields, if pawn is Drone, Drone will be Colonist.
- [HarmonyPatch(typeof(Mineable), "TrySpawnYield")]
+ [HarmonyPatch(typeof(Mineable), "TrySpawnYield", new System.Type[] { typeof(Map), typeof(bool), typeof(Pawn) })]
static class Patch_Mineable_TrySpawnYield
{
- static void Prefix(Mineable __instance, Map map, float yieldChance, bool moteOnWaste, Pawn pawn)
+ static void Prefix(Mineable __instance, Map map, bool moteOnWaste, Pawn pawn)
{
if (pawn is Pawn_Drone)
{
@@ -18,7 +18,7 @@ static void Prefix(Mineable __instance, Map map, float yieldChance, bool moteOnW
}
}
- static void Postfix(Mineable __instance, Map map, float yieldChance, bool moteOnWaste, Pawn pawn)
+ static void Postfix(Mineable __instance, Map map, bool moteOnWaste, Pawn pawn)
{
if (pawn is Pawn_Drone)
{
diff --git a/Source/ProjectRimFactory/Common/ITab_PowerSupply.cs b/Source/ProjectRimFactory/Common/ITab_PowerSupply.cs
index 4f0a6f347..068cc5d5f 100644
--- a/Source/ProjectRimFactory/Common/ITab_PowerSupply.cs
+++ b/Source/ProjectRimFactory/Common/ITab_PowerSupply.cs
@@ -134,7 +134,7 @@ protected override void FillTab()
list.Gap();
rect = list.GetRect(20f);
- var speed = (int)Widgets.HorizontalSlider_NewTemp(rect, (float)this.Machine.SupplyPowerForSpeed, (float)minPowerSpeed, (float)maxPowerSpeed, true, valueLabelForSpeed,
+ var speed = (int)Widgets.HorizontalSlider(rect, (float)this.Machine.SupplyPowerForSpeed, (float)minPowerSpeed, (float)maxPowerSpeed, true, valueLabelForSpeed,
"PRF.AutoMachineTool.SupplyPower.wdLabel".Translate(minPowerSpeed), "PRF.AutoMachineTool.SupplyPower.wdLabel".Translate(maxPowerSpeed), this.Machine.PowerPerStepSpeed);
this.Machine.SupplyPowerForSpeed = speed;
//Add info Labels below
@@ -175,7 +175,7 @@ protected override void FillTab()
list.Gap();
rect = list.GetRect(20f);
- var range = Widgets.HorizontalSlider_NewTemp(rect, (float)this.Machine.SupplyPowerForRange, (float)minPowerRange, (float)maxPowerRange, true, valueLabelForRange,
+ var range = Widgets.HorizontalSlider(rect, (float)this.Machine.SupplyPowerForRange, (float)minPowerRange, (float)maxPowerRange, true, valueLabelForRange,
"PRF.AutoMachineTool.SupplyPower.wdLabel".Translate(minPowerRange), "PRF.AutoMachineTool.SupplyPower.wdLabel".Translate(maxPowerRange), this.Machine.PowerPerStepRange);
this.Machine.SupplyPowerForRange = range;
//Add info Labels below
diff --git a/Source/ProjectRimFactory/Common/ProjectRimFactory_ModSettings.cs b/Source/ProjectRimFactory/Common/ProjectRimFactory_ModSettings.cs
index bf7ba5840..e0f4ca30a 100644
--- a/Source/ProjectRimFactory/Common/ProjectRimFactory_ModSettings.cs
+++ b/Source/ProjectRimFactory/Common/ProjectRimFactory_ModSettings.cs
@@ -647,7 +647,7 @@ public override void Draw(Listing_Standard list)
var rectSlider = rect.RightHalf();
rectSlider.xMin += 20;
rectSlider.xMax -= 20;
- this.currentValue = Widgets.HorizontalSlider_NewTemp(rectSlider, this.currentValue, this.minValue, this.maxValue, true, this.currentValue.ToString(), this.minValue.ToString(), this.maxValue.ToString(), this.roundTo);
+ this.currentValue = Widgets.HorizontalSlider(rectSlider, this.currentValue, this.minValue, this.maxValue, true, this.currentValue.ToString(), this.minValue.ToString(), this.maxValue.ToString(), this.roundTo);
list.Gap(list.verticalSpacing);
}
}
@@ -670,7 +670,7 @@ public override void Draw(Listing_Standard list)
var rectSlider = rect.RightHalf();
rectSlider.xMin += 20;
rectSlider.xMax -= 20;
- this.currentValue = (int)Widgets.HorizontalSlider_NewTemp(rectSlider, this.currentValue, this.minValue, this.maxValue, true, this.currentValue.ToString(), this.minValue.ToString(), this.maxValue.ToString(), this.roundTo);
+ this.currentValue = (int)Widgets.HorizontalSlider(rectSlider, this.currentValue, this.minValue, this.maxValue, true, this.currentValue.ToString(), this.minValue.ToString(), this.maxValue.ToString(), this.roundTo);
list.Gap(list.verticalSpacing);
}
}
diff --git a/Source/ProjectRimFactory/Drones/Building_DroneStation.cs b/Source/ProjectRimFactory/Drones/Building_DroneStation.cs
index 1b757b919..839f7f94a 100644
--- a/Source/ProjectRimFactory/Drones/Building_DroneStation.cs
+++ b/Source/ProjectRimFactory/Drones/Building_DroneStation.cs
@@ -264,7 +264,7 @@ public void Update_droneAllowedArea_forDrones(Area dr)
for (int i = 0; i < spawnedDrones.Count; i++)
{
- spawnedDrones[i].playerSettings.AreaRestriction = droneAllowedArea;
+ spawnedDrones[i].playerSettings.AreaRestrictionInPawnCurrentMap = droneAllowedArea;
}
}
@@ -406,9 +406,10 @@ private void update_droneAreaSelectorLable(Area a)
}
}
- public override void Draw()
+ public override void DynamicDrawPhaseAt(DrawPhase phase, Vector3 drawLoc, bool flip = false)
{
- base.Draw();
+ base.DynamicDrawPhaseAt(phase, drawLoc, flip);
+ if (phase != DrawPhase.Draw) return; //Crashes when drawing 2 things at the same time in some of the other phases
if (extension.displayDormantDrones)
{
DrawDormantDrones();
diff --git a/Source/ProjectRimFactory/Drones/ITab_DroneStation.cs b/Source/ProjectRimFactory/Drones/ITab_DroneStation.cs
index b444915ef..9be609626 100644
--- a/Source/ProjectRimFactory/Drones/ITab_DroneStation.cs
+++ b/Source/ProjectRimFactory/Drones/ITab_DroneStation.cs
@@ -150,7 +150,7 @@ public Listing_Standard ITab_Settings_AppendContent(Listing_Standard list, Rect
rect = list.GetRect(30f);
list.Gap();
- droneStation.compRefuelable.TargetFuelLevel = Widgets.HorizontalSlider_NewTemp(rect, droneStation.compRefuelable.TargetFuelLevel, 0, droneStation.compRefuelable.Props.fuelCapacity, true, "SetTargetFuelLevel".Translate(droneStation.compRefuelable.TargetFuelLevel), "0", droneStation.compRefuelable.Props.fuelCapacity.ToString(), 1);
+ droneStation.compRefuelable.TargetFuelLevel = Widgets.HorizontalSlider(rect, droneStation.compRefuelable.TargetFuelLevel, 0, droneStation.compRefuelable.Props.fuelCapacity, true, "SetTargetFuelLevel".Translate(droneStation.compRefuelable.TargetFuelLevel), "0", droneStation.compRefuelable.Props.fuelCapacity.ToString(), 1);
}
diff --git a/Source/ProjectRimFactory/Drones/Pawn_Drone.cs b/Source/ProjectRimFactory/Drones/Pawn_Drone.cs
index 27b97f7c7..113f0507d 100644
--- a/Source/ProjectRimFactory/Drones/Pawn_Drone.cs
+++ b/Source/ProjectRimFactory/Drones/Pawn_Drone.cs
@@ -56,7 +56,8 @@ public override void SpawnSetup(Map map, bool respawningAfterLoad)
Name = new NameSingle("PRFDroneName".Translate());
//Set the AreaRestriction. null means Unrestricted
- playerSettings.AreaRestriction = this.station.droneAllowedArea;
+ // TODO Check if that is the correct replacement of if i need that effective thing
+ playerSettings.AreaRestrictionInPawnCurrentMap = this.station.droneAllowedArea;
}
public override void Tick()
diff --git a/Source/ProjectRimFactory/Industry/Building_CustomBattery.cs b/Source/ProjectRimFactory/Industry/Building_CustomBattery.cs
index f01dbdd49..27c0b57ef 100644
--- a/Source/ProjectRimFactory/Industry/Building_CustomBattery.cs
+++ b/Source/ProjectRimFactory/Industry/Building_CustomBattery.cs
@@ -14,9 +14,10 @@ public override void ExposeData()
Scribe_Values.Look(ref ticksToExplode, "ticksToExplode", 0, false);
}
- public override void Draw()
+ public override void DynamicDrawPhaseAt(DrawPhase phase, Vector3 drawLoc, bool flip = false)
{
- base.Draw();
+ base.DynamicDrawPhaseAt(phase, drawLoc, flip);
+ if (phase != DrawPhase.Draw) return; //Crashes when drawing 2 things at the same time in some of the other phases
CompPowerBattery comp = GetComp();
GenDraw.FillableBarRequest r = default(GenDraw.FillableBarRequest);
r.center = DrawPos + Vector3.up * 0.1f + Vector3.forward * 0.25f;
diff --git a/Source/ProjectRimFactory/ProjectRimFactory.csproj b/Source/ProjectRimFactory/ProjectRimFactory.csproj
index 39bb57cee..ee6dd95d5 100644
--- a/Source/ProjectRimFactory/ProjectRimFactory.csproj
+++ b/Source/ProjectRimFactory/ProjectRimFactory.csproj
@@ -35,8 +35,8 @@
Update this either in the GUI (nuget system) or from the command line:
nuget restore
-->
-
-
+
+
diff --git a/Source/ProjectRimFactory/SAL3/Things/Assemblers/Building_ProgrammableAssembler.cs b/Source/ProjectRimFactory/SAL3/Things/Assemblers/Building_ProgrammableAssembler.cs
index 50c233e81..140c212b6 100644
--- a/Source/ProjectRimFactory/SAL3/Things/Assemblers/Building_ProgrammableAssembler.cs
+++ b/Source/ProjectRimFactory/SAL3/Things/Assemblers/Building_ProgrammableAssembler.cs
@@ -25,7 +25,7 @@ public BillReport(Bill b, List list)
{
bill = b;
selected = list;
- workLeft = b.recipe.WorkAmountTotal(ProjectSAL_Utilities.CalculateDominantIngredient(b.recipe, list).def);
+ workLeft = b.recipe.WorkAmountTotal(ProjectSAL_Utilities.CalculateDominantIngredient(b.recipe, list));
}
public Bill bill;
public List selected;
diff --git a/Source/ProjectRimFactory/SAL3/Things/Building_RecipeHolder.cs b/Source/ProjectRimFactory/SAL3/Things/Building_RecipeHolder.cs
index 6e70df0cf..d8a24fee8 100644
--- a/Source/ProjectRimFactory/SAL3/Things/Building_RecipeHolder.cs
+++ b/Source/ProjectRimFactory/SAL3/Things/Building_RecipeHolder.cs
@@ -66,7 +66,7 @@ public virtual IEnumerable GetAllProvidedRecipeDefs()
}
protected virtual float GetLearnRecipeWorkAmount(RecipeDef recipe)
{
- return recipe.WorkAmountTotal(ThingDefOf.Steel);
+ return recipe.WorkAmountForStuff(ThingDefOf.Steel);
}
//================================ Overrides
diff --git a/Source/ProjectRimFactory/Storage/Building_ColdStorage.cs b/Source/ProjectRimFactory/Storage/Building_ColdStorage.cs
index 40440a0d1..ae6fe71b6 100644
--- a/Source/ProjectRimFactory/Storage/Building_ColdStorage.cs
+++ b/Source/ProjectRimFactory/Storage/Building_ColdStorage.cs
@@ -12,7 +12,7 @@
namespace ProjectRimFactory.Storage
{
[StaticConstructorOnStartup]
- public abstract class Building_ColdStorage : Building, IRenameBuilding, IHaulDestination, IStoreSettingsParent, ILinkableStorageParent, IThingHolder
+ public abstract class Building_ColdStorage : Building, IRenameable, IHaulDestination, IStoreSettingsParent, ILinkableStorageParent, IThingHolder
{
private static readonly Texture2D RenameTex = ContentFinder.Get("UI/Buttons/Rename");
@@ -22,9 +22,29 @@ public abstract class Building_ColdStorage : Building, IRenameBuilding, IHaulDes
private List ports = new List();
- public string UniqueName { get => uniqueName; set => uniqueName = value; }
+
private string uniqueName;
- public Building Building => this;
+ //IRenameable
+ public string RenamableLabel
+ {
+ get
+ {
+ return uniqueName ?? LabelCapNoCount;
+ }
+ set
+ {
+ uniqueName = value;
+ }
+ }
+ //IRenameable
+ public string BaseLabel => LabelCapNoCount;
+ //IRenameable
+ public string InspectLabel => LabelCap;
+
+ /* TODO Check if we still need that
+ public override string LabelNoCount => uniqueName ?? base.LabelNoCount;
+ public override string LabelCap => uniqueName ?? base.LabelCap;
+ */
public StorageSettings settings;
@@ -38,8 +58,6 @@ public abstract class Building_ColdStorage : Building, IRenameBuilding, IHaulDes
- def.Size.Area + 1;
public List StoredItems => items;
public int StoredItemsCount => items.Count;
- public override string LabelNoCount => uniqueName ?? base.LabelNoCount;
- public override string LabelCap => uniqueName ?? base.LabelCap;
public virtual bool CanReceiveIO => true;
public virtual bool Powered => true;
@@ -93,7 +111,7 @@ public override IEnumerable GetGizmos()
yield return new Command_Action
{
icon = RenameTex,
- action = () => Find.WindowStack.Add(new Dialog_RenameMassStorageUnit(this)),
+ action = () => Find.WindowStack.Add(new Dialog_RenameColdStorage(this)),
hotKey = KeyBindingDefOf.Misc1,
defaultLabel = "PRFRenameMassStorageUnitLabel".Translate(),
defaultDesc = "PRFRenameMassStorageUnitDesc".Translate()
@@ -219,7 +237,7 @@ public override void DrawGUIOverlay()
{
base.DrawGUIOverlay();
if (Current.CameraDriver.CurrentZoom <= CameraZoomRange.Close)
- GenMapUI.DrawThingLabel(this, LabelCap + "\n\r" + GetUIThingLabel());
+ GenMapUI.DrawThingLabel(this, RenamableLabel + "\n\r" + GetUIThingLabel());
}
public bool OutputItem(Thing item)
diff --git a/Source/ProjectRimFactory/Storage/Building_MassStorageUnit.cs b/Source/ProjectRimFactory/Storage/Building_MassStorageUnit.cs
index e66889a83..6cf92f821 100644
--- a/Source/ProjectRimFactory/Storage/Building_MassStorageUnit.cs
+++ b/Source/ProjectRimFactory/Storage/Building_MassStorageUnit.cs
@@ -13,16 +13,13 @@ namespace ProjectRimFactory.Storage
{
[StaticConstructorOnStartup]
public abstract class Building_MassStorageUnit : Building_Storage, IHideItem, IHideRightClickMenu,
- IForbidPawnOutputItem, IForbidPawnInputItem, IRenameBuilding, ILinkableStorageParent, ILimitWatcher
+ IForbidPawnOutputItem, IForbidPawnInputItem, IRenameable, ILinkableStorageParent, ILimitWatcher
{
private static readonly Texture2D RenameTex = ContentFinder.Get("UI/Buttons/Rename");
private readonly List items = new List();
private List ports = new List();
-
- public string UniqueName { get => uniqueName; set => uniqueName = value; }
- private string uniqueName;
- public Building Building => this;
+
public IntVec3 GetPosition => this.Position;
public StorageSettings GetSettings => settings;
@@ -40,8 +37,7 @@ public abstract class Building_MassStorageUnit : Building_Storage, IHideItem, IH
- def.Size.Area + 1;
public List StoredItems => items;
public int StoredItemsCount => items.Count;
- public override string LabelNoCount => uniqueName ?? base.LabelNoCount;
- public override string LabelCap => uniqueName ?? base.LabelCap;
+
public virtual bool CanReceiveIO => true;
public virtual bool Powered => true;
@@ -51,6 +47,29 @@ public abstract class Building_MassStorageUnit : Building_Storage, IHideItem, IH
private StorageOutputUtil outputUtil = null;
+ /* TODO Check if we still need that
+ public override string LabelNoCount => uniqueName ?? base.LabelNoCount;
+ public override string LabelCap => uniqueName ?? base.LabelCap;
+ */
+
+ private string uniqueName;
+ //IRenameable
+ public string RenamableLabel
+ {
+ get
+ {
+ return uniqueName ?? LabelCapNoCount;
+ }
+ set
+ {
+ uniqueName = value;
+ }
+ }
+ //IRenameable
+ public string BaseLabel => LabelCapNoCount;
+ //IRenameable
+ public string InspectLabel => LabelCap;
+
public override void Notify_ReceivedThing(Thing newItem)
{
base.Notify_ReceivedThing(newItem);
@@ -207,13 +226,14 @@ public override void SpawnSetup(Map map, bool respawningAfterLoad)
}
}
+ this.def.building.groupingLabel = this.LabelCapNoCount;
}
public override void DrawGUIOverlay()
{
base.DrawGUIOverlay();
if (Current.CameraDriver.CurrentZoom <= CameraZoomRange.Close)
- GenMapUI.DrawThingLabel(this, LabelCap + "\n\r" + GetUIThingLabel());
+ GenMapUI.DrawThingLabel(this, RenamableLabel + "\n\r" + GetUIThingLabel());
}
public bool OutputItem(Thing item)
diff --git a/Source/ProjectRimFactory/Storage/Building_StorageUnitIOPort.cs b/Source/ProjectRimFactory/Storage/Building_StorageUnitIOPort.cs
index a53861b74..7d4b6abb1 100644
--- a/Source/ProjectRimFactory/Storage/Building_StorageUnitIOPort.cs
+++ b/Source/ProjectRimFactory/Storage/Building_StorageUnitIOPort.cs
@@ -10,15 +10,8 @@
namespace ProjectRimFactory.Storage
{
- public interface IRenameBuilding
- {
- public string UniqueName { set; get; }
- public Building Building { get; }
- }
-
-
[StaticConstructorOnStartup]
- public abstract class Building_StorageUnitIOBase : Building_Storage, IForbidPawnInputItem, IRenameBuilding
+ public abstract class Building_StorageUnitIOBase : Building_Storage, IForbidPawnInputItem, IRenameable
{
public static readonly Texture2D CargoPlatformTex = ContentFinder.Get("Storage/CargoPlatform");
public static readonly Texture2D IOModeTex = ContentFinder.Get("PRFUi/IoIcon");
@@ -38,11 +31,27 @@ public abstract class Building_StorageUnitIOBase : Building_Storage, IForbidPawn
public virtual bool ShowLimitGizmo => true;
- public string UniqueName { get => uniqueName; set => uniqueName = value; }
private string uniqueName;
- public Building Building => this;
+ //IRenameable
+ public string RenamableLabel
+ {
+ get
+ {
+ return uniqueName ?? LabelCapNoCount;
+ }
+ set
+ {
+ uniqueName = value;
+ }
+ }
+ //IRenameable
+ public string BaseLabel => LabelCapNoCount;
+ //IRenameable
+ public string InspectLabel => LabelCap;
+ /* TODO Check if we still need that
public override string LabelNoCount => uniqueName ?? base.LabelNoCount;
public override string LabelCap => uniqueName ?? base.LabelCap;
+ */
private static readonly Texture2D RenameTex = ContentFinder.Get("UI/Buttons/Rename");
private bool forbidOnPlacement = false;
@@ -154,6 +163,8 @@ public override void SpawnSetup(Map map, bool respawningAfterLoad)
{
BoundStorageUnit = null;
}
+
+ this.def.building.groupingLabel = this.LabelCapNoCount;
}
protected override void ReceiveCompSignal(string signal)
@@ -342,14 +353,14 @@ public override IEnumerable GetGizmos()
foreach (Gizmo g in base.GetGizmos()) yield return g;
yield return new Command_Action()
{
- defaultLabel = "PRFBoundStorageBuilding".Translate() + ": " + (boundStorageUnit?.LabelCap ?? "NoneBrackets".Translate()),
+ defaultLabel = "PRFBoundStorageBuilding".Translate() + ": " + (((IRenameable)boundStorageUnit)?.RenamableLabel ?? "NoneBrackets".Translate()),
action = () =>
{
//ILinkableStorageParent
List mylist = Map.listerBuildings.allBuildingsColonist.Where(b => (b as ILinkableStorageParent) != null && (b as ILinkableStorageParent).CanUseIOPort).ToList();
if (IsAdvancedPort) mylist.RemoveAll(b => !(b as ILinkableStorageParent).AdvancedIOAllowed);
List list = new List(
- mylist.Select(b => new FloatMenuOption(b.LabelCap, () => SelectedPorts().ToList().ForEach(p => p.BoundStorageUnit = (b as ILinkableStorageParent))))
+ mylist.Select(b => new FloatMenuOption(((IRenameable)b).RenamableLabel, () => SelectedPorts().ToList().ForEach(p => p.BoundStorageUnit = (b as ILinkableStorageParent))))
);
if (list.Count == 0)
{
@@ -362,7 +373,7 @@ public override IEnumerable GetGizmos()
yield return new Command_Action
{
icon = RenameTex,
- action = () => Find.WindowStack.Add(new Dialog_RenameMassStorageUnit(this)),
+ action = () => Find.WindowStack.Add(new Dialog_RenameStorageUnitIOBase(this)),
hotKey = KeyBindingDefOf.Misc1,
defaultLabel = "PRFRenameMassStorageUnitLabel".Translate(),
defaultDesc = "PRFRenameMassStorageUnitDesc".Translate()
diff --git a/Source/ProjectRimFactory/Storage/UI/Dialog_RenameColdStorage.cs b/Source/ProjectRimFactory/Storage/UI/Dialog_RenameColdStorage.cs
new file mode 100644
index 000000000..f0270eb07
--- /dev/null
+++ b/Source/ProjectRimFactory/Storage/UI/Dialog_RenameColdStorage.cs
@@ -0,0 +1,24 @@
+using RimWorld;
+using Verse;
+
+namespace ProjectRimFactory.Storage.UI
+{
+ public class Dialog_RenameColdStorage : Dialog_Rename
+ {
+
+ public Dialog_RenameColdStorage(Building_ColdStorage renaming) : base(renaming)
+ {
+ // TODO Check if we need that line
+ curName = ((IRenameable)renaming).RenamableLabel;
+ }
+
+ protected override void OnRenamed(string name)
+ {
+ base.OnRenamed(name);
+ // TODO Check if we still need to set that
+ //building.UniqueName = curName;
+ Messages.Message("PRFStorageBuildingGainsName".Translate(curName), MessageTypeDefOf.TaskCompletion);
+ }
+ }
+}
+
diff --git a/Source/ProjectRimFactory/Storage/UI/Dialog_RenameMassStorageUnit.cs b/Source/ProjectRimFactory/Storage/UI/Dialog_RenameMassStorageUnit.cs
index bebdbb293..35569871d 100644
--- a/Source/ProjectRimFactory/Storage/UI/Dialog_RenameMassStorageUnit.cs
+++ b/Source/ProjectRimFactory/Storage/UI/Dialog_RenameMassStorageUnit.cs
@@ -3,18 +3,21 @@
namespace ProjectRimFactory.Storage.UI
{
- public class Dialog_RenameMassStorageUnit : Dialog_Rename
+ public class Dialog_RenameMassStorageUnit : Dialog_Rename
{
- public Dialog_RenameMassStorageUnit(IRenameBuilding building)
+
+ public Dialog_RenameMassStorageUnit(Building_MassStorageUnit renaming) : base(renaming)
{
- this.building = building;
- curName = building.UniqueName ?? building.Building.LabelNoCount;
+ // TODO Check if we need that line
+ curName = ((IRenameable)renaming).RenamableLabel;
}
- protected override void SetName(string name)
+
+ protected override void OnRenamed(string name)
{
- building.UniqueName = curName;
+ base.OnRenamed(name);
+ // TODO Check if we still need to set that
+ //building.UniqueName = curName;
Messages.Message("PRFStorageBuildingGainsName".Translate(curName), MessageTypeDefOf.TaskCompletion);
}
- IRenameBuilding building;
}
}
diff --git a/Source/ProjectRimFactory/Storage/UI/Dialog_RenameStorageUnitIOBase.cs b/Source/ProjectRimFactory/Storage/UI/Dialog_RenameStorageUnitIOBase.cs
new file mode 100644
index 000000000..f1aff67bc
--- /dev/null
+++ b/Source/ProjectRimFactory/Storage/UI/Dialog_RenameStorageUnitIOBase.cs
@@ -0,0 +1,24 @@
+using RimWorld;
+using Verse;
+
+namespace ProjectRimFactory.Storage.UI
+{
+ public class Dialog_RenameStorageUnitIOBase : Dialog_Rename
+ {
+
+ public Dialog_RenameStorageUnitIOBase(Building_StorageUnitIOBase renaming) : base(renaming)
+ {
+ // TODO Check if we need that line
+ curName = ((IRenameable)renaming).RenamableLabel;
+ }
+
+ protected override void OnRenamed(string name)
+ {
+ base.OnRenamed(name);
+ // TODO Check if we still need to set that
+ //building.UniqueName = curName;
+ Messages.Message("PRFStorageBuildingGainsName".Translate(curName), MessageTypeDefOf.TaskCompletion);
+ }
+ }
+}
+