src/newgrf.cpp
changeset 7148 8de751a801a8
parent 7145 07c1f0c9e645
child 7155 d7f32c08076b
--- a/src/newgrf.cpp	Sat May 19 21:47:14 2007 +0000
+++ b/src/newgrf.cpp	Sat May 19 22:37:24 2007 +0000
@@ -3094,11 +3094,18 @@
 
 		grfmsg(8, "CfgApply: Applying %u bytes from parameter 0x%02X at offset 0x%04X", param_size, param_num, offset);
 
+		bool carry = false;
 		for (i = 0; i < param_size; i++) {
 			uint32 value = GetParamVal(param_num + i / 4, NULL);
+			/* Reset carry flag for each iteration of the variable (only really
+			 * matters if param_size is greater than 4) */
+			if (i == 0) carry = false;
 
 			if (add_value) {
-				_preload_sprite[offset + i] += GB(value, (i % 4) * 8, 8);
+				uint new_value = _preload_sprite[offset + i] + GB(value, (i % 4) * 8, 8) + (carry ? 1 : 0);
+				_preload_sprite[offset + i] = GB(new_value, 0, 8);
+				/* Check if the addition overflowed */
+				carry = new_value >= 256;
 			} else {
 				_preload_sprite[offset + i] = GB(value, (i % 4) * 8, 8);
 			}