This isn't a total overhaul of the Recreation page, despite how many edits I made to it. I have yet to check some things regarding gather spots, reigning from a throne, or anything regarding caravans or recreation fall rate. I just wanted to put the information that I found out about recreation gain rate while filling out the Anima Tree page in and then realized this one needed a lot of work, so let's do this point by point:
- "10 types of recreation": With the book system introduced in 1.5, there are now 9->10 distinct types of recreation. To be sure, I checked for all mentions of '</JoyKindDef>' using the Find in Files tool on the entire RimWorld folder, and then also checked to make sure there are no def classes that are derivatives of JoyKindDef.
- "Recreation gain rate": this is handled via the Need_Joy.GainJoy method. I found this referenced in JoyUtility.JoyTickCheckEnd (which itself is appended to every tick of every recreational activity's JobDriver), on every tick of JobDriver_VisitSickPawn (used to give the sick pawn joy as well), BabyPlayUtility.PlayTickCheckEnd (gives joy to pawns for playing with babies), and a couple other methods that I haven't had time to look at yet (pertaining to parties, caravans, ritual duels, and food/drug ingestion). In the three cases I looked at, the "base" joy gain is defined as 0.000144 (or 0.36/2500) per tick, which is why I call 36% the base gain rate per hour. In the case of JoyTickCheckEnd and PlayTickCheckEnd, this is then multiplied by the joy gain factor stat of the joy source building (if any); since VisitSickPawn never involves a joy source building, we can generalize this rather than noting the technical backend exception. In the case of JoyTickCheckEnd and VisitSickPawn, it is also multiplied by the recreation-seeker's job's joyGainRate, so I did another thorough Find in Files search for </joyGainRate> and noted down all the joy gain rates I could find (if a JobDef's XML does not specify, it defaults to 1x). Regardless of where it's used, GainJoy always multiplies the amount by the relevant recreation tolerance.
- "Activities table": was missing Reading, obviously, but was also missing Baby Play, which is easy to miss as it is not technically a JoyGiver - I only caught due to the searches I carried out in the previous point. Duration of meditation was wrong (source: XML). Gain Rate was misrepresented as a static value for some activities. There was no explanation for duration; while what it does is kind of obvious to anyone who has played the game, I both read the C# and tested in-game (along with altering the values in XML between tests) to verify that the explanation I have included as a footnote is correct. Cheering up a patient misleadingly claimed "Injured" as a required capacity, which wrongly implies that the pawn seeking recreation must themselves be injured - I felt it was better to leave that blank and just describe in detail in the dedicated text section for that activity below.
- "Activities": I went and read the JobDrivers and JoyGivers for every single one of them, and then implemented tests in a modless testing file to verify my understanding. I also wanted to ensure that each subsection actually details at least the following information: what conditions must be fulfilled for this activity to be available, where a pawn can perform this activity, and what pawns do when performing this activity.
(Cheering up a Patient and Watching Television were entirely missing, despite neither one being more intuitive than Going For a Walk; Praying and Meditating were falsely equivocated with each other, and along with various other activities were incredibly sparsely detailed which was starkly funny when compared to Relaxing Socially having an entire prescriptive (and somewhat incorrect) digression on the best way to handle gather spots.)