src/newgrf.cpp
changeset 6652 ab91aefc7c0f
parent 6649 4fe2c8ec0ba6
child 6659 dc6f5b564096
equal deleted inserted replaced
6651:671ccc278e9c 6652:ab91aefc7c0f
  3092 			break;
  3092 			break;
  3093 		}
  3093 		}
  3094 
  3094 
  3095 		grfmsg(8, "CfgApply: Applying %u bytes from parameter 0x%02X at offset 0x%04X", param_size, param_num, offset);
  3095 		grfmsg(8, "CfgApply: Applying %u bytes from parameter 0x%02X at offset 0x%04X", param_size, param_num, offset);
  3096 
  3096 
       
  3097 		bool carry = false;
  3097 		for (i = 0; i < param_size; i++) {
  3098 		for (i = 0; i < param_size; i++) {
  3098 			uint32 value = GetParamVal(param_num + i / 4, NULL);
  3099 			uint32 value = GetParamVal(param_num + i / 4, NULL);
       
  3100 			/* Reset carry flag for each iteration of the variable (only really
       
  3101 			 * matters if param_size is greater than 4) */
       
  3102 			if (i == 0) carry = false;
  3099 
  3103 
  3100 			if (add_value) {
  3104 			if (add_value) {
  3101 				_preload_sprite[offset + i] += GB(value, (i % 4) * 8, 8);
  3105 				uint new_value = _preload_sprite[offset + i] + GB(value, (i % 4) * 8, 8) + (carry ? 1 : 0);
       
  3106 				_preload_sprite[offset + i] = GB(new_value, 0, 8);
       
  3107 				/* Check if the addition overflowed */
       
  3108 				carry = new_value >= 256;
  3102 			} else {
  3109 			} else {
  3103 				_preload_sprite[offset + i] = GB(value, (i % 4) * 8, 8);
  3110 				_preload_sprite[offset + i] = GB(value, (i % 4) * 8, 8);
  3104 			}
  3111 			}
  3105 		}
  3112 		}
  3106 	}
  3113 	}