changeset 13348:0e54bfff3730 draft

(svn r17857) -Fix (r10442): [NewGRF] 'subtract-in' is also signed for production callback version 0.
author frosch <frosch@openttd.org>
date Sat, 24 Oct 2009 18:51:21 +0000
parents 177cb77a3213
children 78eae1f8273b
files src/newgrf.cpp src/newgrf_industries.cpp src/newgrf_spritegroup.h
diffstat 3 files changed, 7 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -2966,15 +2966,15 @@
 					group->version = type;
 					if (type == 0) {
 						for (uint i = 0; i < 3; i++) {
-							group->substract_input[i] = grf_load_word(&buf);
+							group->subtract_input[i] = (int16)grf_load_word(&buf); // signed
 						}
 						for (uint i = 0; i < 2; i++) {
-							group->add_output[i] = grf_load_word(&buf);
+							group->add_output[i] = grf_load_word(&buf); // unsigned
 						}
 						group->again = grf_load_byte(&buf);
 					} else {
 						for (uint i = 0; i < 3; i++) {
-							group->substract_input[i] = grf_load_byte(&buf);
+							group->subtract_input[i] = grf_load_byte(&buf);
 						}
 						for (uint i = 0; i < 2; i++) {
 							group->add_output[i] = grf_load_byte(&buf);
--- a/src/newgrf_industries.cpp
+++ b/src/newgrf_industries.cpp
@@ -502,7 +502,7 @@
 	return true;
 }
 
-static int32 DerefIndProd(uint field, bool use_register)
+static int32 DerefIndProd(int field, bool use_register)
 {
 	return use_register ? (int32)GetRegister(field) : field;
 }
@@ -543,7 +543,7 @@
 		bool deref = (group->version == 1);
 
 		for (uint i = 0; i < 3; i++) {
-			ind->incoming_cargo_waiting[i] = Clamp(ind->incoming_cargo_waiting[i] - DerefIndProd(group->substract_input[i], deref) * multiplier, 0, 0xFFFF);
+			ind->incoming_cargo_waiting[i] = Clamp(ind->incoming_cargo_waiting[i] - DerefIndProd(group->subtract_input[i], deref) * multiplier, 0, 0xFFFF);
 		}
 		for (uint i = 0; i < 2; i++) {
 			ind->produced_cargo_waiting[i] = Clamp(ind->produced_cargo_waiting[i] + max(DerefIndProd(group->add_output[i], deref), 0) * multiplier, 0, 0xFFFF);
--- a/src/newgrf_spritegroup.h
+++ b/src/newgrf_spritegroup.h
@@ -279,8 +279,8 @@
 	IndustryProductionSpriteGroup() : SpriteGroup(SGT_INDUSTRY_PRODUCTION) {}
 
 	uint8 version;
-	uint16 substract_input[3];
-	uint16 add_output[2];
+	int16 subtract_input[3];  // signed
+	uint16 add_output[2];     // unsigned
 	uint8 again;
 };