Reading Bonus

The research bonus applies to both Hi-tech and Simple research benches, and is applied multiplicatively, similar to Room Cleanliness.
This is only used to communicate information in the special stats page for bookcases.
It depends entirely on the following room stat:
Room Stat 	Custom Label
Reading bonus	Reading bonus
Reading Bonus is determined by the number of books in bookcases in a room. Books on the floor do not count towards this stat.
There are diminishing returns on reading bonus for the number of books:
Books	Reading Bonus Offset Per Book
1-5 	
6-10 	
11-15	
16+ 	
Books 1-5 give a total of , books 6-10 a total , 11-15 a total , and 16+ a mere per book. To reach the maximum bonus of 120%, it would require a total of 155 books.
Although the stat description might imply that higher quality books give higher reading bonuses, there is no evidence within the code that supports that case. However, there are several factors that do depend on book quality when reading a book:
 Schematic research experience gain:
Quality 	ResearchExp/Tick	 	 	
Awful 	0.008 	0.48	20	480
Poor 	0.012 	0.72	30	720
Normal 	0.016 	0.96	40	960
Good 	0.02 	1.2 	50	1200
Excellent 	0.024 	1.44	60	1440
Masterwork	0.028 	1.68	70	1680
Legendary 	0.032 	1.92	80	1920
 Tome Knowledge experience gain:
Quality 	KnowledgeExp/Tick	 	 	
Awful 	0.00003 	0.0018	0.075	1.8
Poor 	0.00006 	0.0036	0.15 	3.6
Normal 	0.00009 	0.0054	0.225	5.4
Good 	0.00012 	0.0072	0.3 	7.2
Excellent 	0.00015 	0.009 	0.375	9
Masterwork	0.00018 	0.0108	0.45 	10.8
Legendary 	0.00021 	0.0126	0.525	12.6
 Textbook skill experience gain:
Quality 	SkillExp/Tick	 	 	
Awful 	0.05 	3 	125 	3000
Poor 	0.075 	4.5 	187.5	4500
Normal 	0.1 	6 	250 	6000
Good 	0.125 	7.5 	312.5	7500
Excellent 	0.15 	9 	375 	9000
Masterwork	0.175 	10.5	437.5	10500
Legendary 	0.2 	12 	500 	12000
 Novel recreation factor:
Quality 	JoyFactor
Awful 	1.2
Poor 	1.4
Normal 	1.6
Good 	1.8
Excellent 	2
Masterwork	2.25
Legendary 	2.5
All of these factors are further multiplied by the Reading Bonus of the room.
== Calculating Reading Bonus ==
For reference, bookcases hold 5 books per cell, where Bookcases have 2 cells and Small bookcases have 1. Cells Filled Percentage refers to the ratio of books held within a bookcase cell to the maximum, i.e. 5, so each book adds 20%.
Since Reading Bonus depends on Room Reading Bonus, they are essentially the same thing.
Room Reading Bonus is calculated with:
num = 0
num2 = 0
for each bookcase in the room: add Cells Filled Percentage for each cell to num2
num2 = sum of all bookcase cells filled percentages.
num4 = 0
while num2 > 0 and num < 0.2:
# num5 = num2, or 1 if num2 is >= 1
# subtract num5 from num2
# add (num5 * CellFilledFactor[index = the smaller of num4 and 3]) to num
#* add 1 to num4
Index	Factor
0 	0.04
1 	0.02
2 	0.01
3 	0.005
Room Reading Bonus = 1 + the smaller of num and 0.2
So if you have 20 cells worth of full bookcases (100 total books):
num2 = 20
Iteration	num5	num2	num
1 	1 	19 	0.04 (0 + 0.04)
2 	1 	18 	0.06 (0.04 + 0.02)
3 	1 	17 	0.07 (0.06 + 0.01)
4 	1 	16 	0.075 (0.07 + 0.005)
5 	1 	15 	0.08 (0.075 + 0.005)
6 	1 	14 	0.085 (0.08 + 0.005)
With our current example, this would be repeated 14 more times, to where num = 0.155
The Room Reading Bonus would therefore be 1.155, or 115.5%, for 100 books.
Here is a table with the total number of books (in bookcases) in a room, and the resulting room reading bonus:
Books	RoomReadingBonus
0 	1
1 	1.008
2 	1.016
3 	1.024
4 	1.032
5 	1.04
6 	1.044
7 	1.048
8 	1.052
9 	1.056
10 	1.06
11 	1.062
12 	1.064
13 	1.066
14 	1.068
15 	1.07
16 	1.071
17 	1.072
18 	1.073
19 	1.074
20 	1.075
25 	1.08
100 	1.155
155 	1.2
== Stat Def Data ==
Def NameLabelLabel For Full Stat ListOffset LabelAttributes	Description 	Category	Parameters	ComplexParameters	DisplayPriorityInCategory
* Def Name:RoomReadingBonus
* Label:reading bonus 	Provides a bonus to research speed, XP gained from reading, and recreation gained from reading in the same room as the bookcase. This is increased by placing more and higher quality books in the bookcase.	
* Display Order:50
* Def Name:Building
* Label:Building
* Display All By Default:	
* Worker Class: StatWorker_RoomReadingBonus
* Default Base Value: 
* Min Value: 
* To String Style: PercentZero	
* Parts:
** StatPart_RoomStat:
*** Room Stat: Reading bonus'''
*** Custom Label: Reading bonus'''	4200
== Version history ==
* 1.5.4062 - Added.