(svn r11766) -Codechange: Last fine tunings on smooth economy, by Sirkoz.
authorbelugas
Sun, 06 Jan 2008 01:06:12 +0000
changeset 8203 0e805a0ce012
parent 8202 6ebbaeb5f4b5
child 8204 b017e732f925
(svn r11766) -Codechange: Last fine tunings on smooth economy, by Sirkoz.
src/industry_cmd.cpp
--- a/src/industry_cmd.cpp	Sat Jan 05 22:34:04 2008 +0000
+++ b/src/industry_cmd.cpp	Sun Jan 06 01:06:12 2008 +0000
@@ -1994,6 +1994,7 @@
 
 enum {
 	PERCENT_TRANSPORTED_60 = 153,
+	PERCENT_TRANSPORTED_80 = 204,
 };
 
 /** Change industry production or do closure
@@ -2055,18 +2056,26 @@
 		if (smooth_economy) {
 			closeit = true;
 			for (byte j = 0; j < 2 && i->produced_cargo[j] != CT_INVALID; j++){
+				uint32 r = Random();
 				int old_prod, new_prod, percent;
+				/* If over 60% is transported, mult is 1, else mult is -1. */
 				int mult = (i->last_month_pct_transported[j] > PERCENT_TRANSPORTED_60) ? 1 : -1;
 
 				new_prod = old_prod = i->production_rate[j];
 
+				/* For industries with only_decrease flags (temperate terrain Oil Wells),
+				 * the multiplier will always be -1 so they will only decrease. */
 				if (only_decrease) {
 					mult = -1;
-				} else if (Chance16(1, 3)) {
+				/* For normal industries, if over 60% is transported, 33% chance for decrease.
+				 * Bonus for very high station ratings (over 80%): 16% chance for decrease. */
+				} else if (Chance16I(1, ((i->last_month_pct_transported[j] > PERCENT_TRANSPORTED_80) ? 6 : 3), r)) {
 					mult *= -1;
 				}
 
-				if (Chance16(1, 22)) {
+				/* 4.5% chance for 3-23% (or 1 unit for very low productions) production change,
+				 * determined by mult value. If mult = 1 prod. increases, else (-1) it decreases. */
+				if (Chance16I(1, 22, r >> 16)) {
 					new_prod += mult * (max(((RandomRange(50) + 10) * old_prod) >> 8, 1U));
 				}
 
@@ -2094,7 +2103,7 @@
 			}
 		} else {
 			if (only_decrease || Chance16(1, 3)) {
-				/* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
+				/* If more than 60% transported, 66% chance of increase, else 33% chance of increase */
 				if (!only_decrease && (i->last_month_pct_transported[0] > PERCENT_TRANSPORTED_60) != Chance16(1, 3)) {
 					mul = 1; // Increase production
 				} else {