src/newgrf.cpp
changeset 8794 ccb35d65645b
parent 8778 787d7fe77e9c
child 8819 86c6ce890d61
--- a/src/newgrf.cpp	Tue Jan 15 11:45:29 2008 +0000
+++ b/src/newgrf.cpp	Tue Jan 15 13:19:49 2008 +0000
@@ -1343,7 +1343,7 @@
 				break;
 
 			case 0x12: // Building name ID
-				housespec->building_name = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				housespec->building_name = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x13: // Building availability mask
@@ -1596,25 +1596,25 @@
 				break;
 
 			case 0x09: /* String ID for cargo type name */
-				cs->name = grf_load_word(&buf);
+				cs->name = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0A: /* String for 1 unit of cargo */
-				cs->name_single = grf_load_word(&buf);
+				cs->name_single = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0B:
 				/* String for units of cargo. This is different in OpenTTD to TTDPatch
 				 * (e.g. 10 tonnes of coal) */
-				cs->units_volume = grf_load_word(&buf);
+				cs->units_volume = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0C: /* String for quantity of cargo (e.g. 10 tonnes of coal) */
-				cs->quantifier = grf_load_word(&buf);
+				cs->quantifier = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0D: /* String for two letter cargo abbreviation */
-				cs->abbrev = grf_load_word(&buf);
+				cs->abbrev = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0E: /* Sprite ID for cargo icon */
@@ -1998,15 +1998,15 @@
 				break;
 
 			case 0x0C: // Industry closure message
-				indsp->closure_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				indsp->closure_text = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0D: // Production increase message
-				indsp->production_up_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				indsp->production_up_text = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0E: // Production decrease message
-				indsp->production_down_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				indsp->production_down_text = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x0F: // Fund cost multiplier
@@ -2065,7 +2065,7 @@
 				break;
 
 			case 0x1B: // New industry text ID
-				indsp->new_industry_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				indsp->new_industry_text = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x1C: // Input cargo multipliers for the three input cargo types
@@ -2077,7 +2077,7 @@
 				} break;
 
 			case 0x1F: // Industry name
-				indsp->name = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
+				indsp->name = GRFMappedStringID(grf_load_word(&buf), _cur_grffile->grfid);
 				break;
 
 			case 0x20: // Prospecting success chance
@@ -3208,7 +3208,7 @@
 						if (_cur_grffile->housespec == NULL || _cur_grffile->housespec[GB(id, 0, 8)] == NULL) {
 							grfmsg(1, "FeatureNewName: Attempt to name undefined house 0x%X, ignoring.", GB(id, 0, 8));
 						} else {
-							_cur_grffile->housespec[GB(id, 0, 8)]->building_name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+							_cur_grffile->housespec[GB(id, 0, 8)]->building_name = GRFMappedStringID(AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED), 0);
 						}
 						break;
 
@@ -5284,6 +5284,7 @@
 		for (int i = 0; i < HOUSE_MAX; i++) {
 			HouseSpec *hs = file->housespec[i];
 			if (hs != NULL) {
+				hs->building_name.MapString();
 				_house_mngr.SetEntitySpec(hs);
 				if (hs->min_date < min_date) min_date = hs->min_date;
 			}
@@ -5314,18 +5315,23 @@
 					/* process the conversion of text at the end, so to be sure everything will be fine
 					 * and available.  Check if it does not return undefind marker, which is a very good sign of a
 					 * substitute industry who has not changed the string been examined, thus using it as such */
+					indsp->name.MapString();
 					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->name);
 					if (strid != STR_UNDEFINED) indsp->name = strid;
 
+					indsp->closure_text.MapString();
 					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->closure_text);
 					if (strid != STR_UNDEFINED) indsp->closure_text = strid;
 
+					indsp->production_up_text.MapString();
 					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->production_up_text);
 					if (strid != STR_UNDEFINED) indsp->production_up_text = strid;
 
+					indsp->production_down_text.MapString();
 					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->production_down_text);
 					if (strid != STR_UNDEFINED) indsp->production_down_text = strid;
 
+					indsp->new_industry_text.MapString();
 					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->new_industry_text);
 					if (strid != STR_UNDEFINED) indsp->new_industry_text = strid;
 
@@ -5365,11 +5371,11 @@
 		/* Don't map if the cargo is unavailable or not from NewGRF */
 		if (cs->grfid == 0) continue;
 
-		cs->name         = MapGRFStringID(cs->grfid, cs->name);
-		cs->name_single  = MapGRFStringID(cs->grfid, cs->name_single);
-		cs->units_volume = MapGRFStringID(cs->grfid, cs->units_volume);
-		cs->quantifier   = MapGRFStringID(cs->grfid, cs->quantifier);
-		cs->abbrev       = MapGRFStringID(cs->grfid, cs->abbrev);
+		cs->name.MapString();
+		cs->name_single.MapString();
+		cs->units_volume.MapString();
+		cs->quantifier.MapString();
+		cs->abbrev.MapString();
 	}
 }
 
@@ -5636,3 +5642,11 @@
 {
 	return HasBit(_misc_grf_features, bit);
 }
+
+void GRFMappedStringID::MapString()
+{
+	if (this->grfid == 0) return;
+
+	this->string = MapGRFStringID(this->grfid, this->string);
+	this->grfid = 0;
+}