(svn r6995) - Codechange: NewGRF; strip bit 7 of the language ID earlier and handle handle a language ID of 0x7F as the preferred default language.
This commit is contained in:
		
							
								
								
									
										9
									
								
								newgrf.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								newgrf.c
									
									
									
									
									
								
							@@ -1961,13 +1961,17 @@ static void FeatureNewName(byte *buf, int len)
 | 
				
			|||||||
	uint16 endid;
 | 
						uint16 endid;
 | 
				
			||||||
	const char* name;
 | 
						const char* name;
 | 
				
			||||||
	bool new_scheme = _cur_grffile->grf_version >= 7;
 | 
						bool new_scheme = _cur_grffile->grf_version >= 7;
 | 
				
			||||||
 | 
						bool generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	check_length(len, 6, "FeatureNewName");
 | 
						check_length(len, 6, "FeatureNewName");
 | 
				
			||||||
	buf++;
 | 
						buf++;
 | 
				
			||||||
	feature  = grf_load_byte(&buf);
 | 
						feature  = grf_load_byte(&buf);
 | 
				
			||||||
	lang     = grf_load_byte(&buf);
 | 
						lang     = grf_load_byte(&buf);
 | 
				
			||||||
	num      = grf_load_byte(&buf);
 | 
						num      = grf_load_byte(&buf);
 | 
				
			||||||
	id       = (lang & 0x80) ? grf_load_word(&buf) : grf_load_byte(&buf);
 | 
						generic  = HASBIT(lang, 7);
 | 
				
			||||||
 | 
						id       = generic ? grf_load_word(&buf) : grf_load_byte(&buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						CLRBIT(lang, 7);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (feature <= GSF_AIRCRAFT && id < _vehcounts[feature]) {
 | 
						if (feature <= GSF_AIRCRAFT && id < _vehcounts[feature]) {
 | 
				
			||||||
		id += _vehshifts[feature];
 | 
							id += _vehshifts[feature];
 | 
				
			||||||
@@ -1978,7 +1982,8 @@ static void FeatureNewName(byte *buf, int len)
 | 
				
			|||||||
	               id, endid, feature, lang);
 | 
						               id, endid, feature, lang);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	name = (const char*)buf; /*transfer read value*/
 | 
						name = (const char*)buf; /*transfer read value*/
 | 
				
			||||||
	len -= (lang & 0x80) ? 6 : 5;
 | 
						len -= generic ? 6 : 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (; id < endid && len > 0; id++) {
 | 
						for (; id < endid && len > 0; id++) {
 | 
				
			||||||
		size_t ofs = strlen(name) + 1;
 | 
							size_t ofs = strlen(name) + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -233,7 +233,7 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	newtext = malloc(sizeof(*newtext) + strlen(text_to_add) + 1);
 | 
						newtext = malloc(sizeof(*newtext) + strlen(text_to_add) + 1);
 | 
				
			||||||
	newtext->next   = NULL;
 | 
						newtext->next   = NULL;
 | 
				
			||||||
	newtext->langid = GB(langid_to_add, 0, 6);
 | 
						newtext->langid = langid_to_add;
 | 
				
			||||||
	strcpy(newtext->text, text_to_add);
 | 
						strcpy(newtext->text, text_to_add);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TranslateTTDPatchCodes(newtext->text);
 | 
						TranslateTTDPatchCodes(newtext->text);
 | 
				
			||||||
@@ -252,7 +252,7 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* Loop through all languages and see if we can replace a string */
 | 
							/* Loop through all languages and see if we can replace a string */
 | 
				
			||||||
		for (ptext = &_grf_text[id].textholder; (text = *ptext) != NULL; ptext = &text->next) {
 | 
							for (ptext = &_grf_text[id].textholder; (text = *ptext) != NULL; ptext = &text->next) {
 | 
				
			||||||
			if (text->langid != GB(langid_to_add, 0, 6)) continue;
 | 
								if (text->langid != langid_to_add) continue;
 | 
				
			||||||
			newtext->next = text->next;
 | 
								newtext->next = text->next;
 | 
				
			||||||
			*ptext = newtext;
 | 
								*ptext = newtext;
 | 
				
			||||||
			free(text);
 | 
								free(text);
 | 
				
			||||||
@@ -310,7 +310,7 @@ char *GetGRFString(char *buff, uint16 stringid, const char* last)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* If the current string is English or American, set it as the
 | 
							/* If the current string is English or American, set it as the
 | 
				
			||||||
		 * fallback language if the specific language isn't available. */
 | 
							 * fallback language if the specific language isn't available. */
 | 
				
			||||||
		if (search_text->langid == GRFLX_ENGLISH || search_text->langid == GRFLX_AMERICAN) {
 | 
							if (search_text->langid == GRFLX_UNSPECIFIED || (default_text == NULL && (search_text->langid == GRFLX_ENGLISH || search_text->langid == GRFLX_AMERICAN))) {
 | 
				
			||||||
			default_text = search_text;
 | 
								default_text = search_text;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user