diff options
author | peter1138 <peter1138@openttd.org> | 2006-05-11 16:27:46 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-05-11 16:27:46 +0000 |
commit | 512d49deee7fff838d6ed271e6fcf61cf489f50c (patch) | |
tree | cc6714fccc50f05852522ec700f928b4645b38f1 | |
parent | bd3ccca31aa6a8c73c20ed578f3316177ff62ed2 (diff) | |
download | openttd-512d49deee7fff838d6ed271e6fcf61cf489f50c.tar.xz |
(svn r4832) - NewGRF: add support for original string ID to newgrf text handling. So far, this is used for vehicles when no English or American translation is provided.
-rw-r--r-- | newgrf.c | 13 | ||||
-rw-r--r-- | newgrf_text.c | 26 | ||||
-rw-r--r-- | newgrf_text.h | 3 |
3 files changed, 30 insertions, 12 deletions
@@ -16,6 +16,7 @@ #include "newgrf.h" #include "variables.h" #include "string.h" +#include "table/strings.h" #include "bridge.h" #include "economy.h" #include "newgrf_engine.h" @@ -1788,8 +1789,12 @@ static void VehicleNewName(byte *buf, int len) case GSF_ROAD: case GSF_SHIP: case GSF_AIRCRAFT: { - StringID string = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name); - if (id < TOTAL_NUM_ENGINES) SetCustomEngineName(id, string); + if (id < TOTAL_NUM_ENGINES) { + StringID string = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_8000_KIRBY_PAUL_TANK_STEAM + id); + SetCustomEngineName(id, string); + } else { + AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, id); + } break; } @@ -1800,7 +1805,7 @@ static void VehicleNewName(byte *buf, int len) grfmsg(GMS_WARN, "VehicleNewName: Attempt to name undefined station 0x%X, ignoring.", GB(id, 0, 8)); } else { StationClassID sclass = _cur_grffile->stations[GB(id, 0, 8)]->sclass; - SetStationClassName(sclass, AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name)); + SetStationClassName(sclass, AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED)); } break; @@ -1808,7 +1813,7 @@ static void VehicleNewName(byte *buf, int len) if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) { grfmsg(GMS_WARN, "VehicleNewName: Attempt to name undefined station 0x%X, ignoring.", GB(id, 0, 8)); } else { - _cur_grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name); + _cur_grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED); } break; diff --git a/newgrf_text.c b/newgrf_text.c index 86ecec502..cc852e861 100644 --- a/newgrf_text.c +++ b/newgrf_text.c @@ -13,6 +13,7 @@ #include "debug.h" #include "openttd.h" #include "string.h" +#include "strings.h" #include "variables.h" #include "macros.h" #include "table/strings.h" @@ -165,7 +166,7 @@ static void TranslateTTDPatchCodes(char *str) /** * Add the new read string into our structure. */ -StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool new_scheme, const char *text_to_add) +StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool new_scheme, const char *text_to_add, StringID def_string) { GRFText *newtext; uint id; @@ -181,9 +182,9 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne langid_to_add = GRFLX_ENGLISH; } else { StringID ret = STR_EMPTY; - if (langid_to_add & GRFLB_GERMAN) ret = AddGRFString(grfid, stringid, 1 << 6 | GRFLX_GERMAN, true, text_to_add); - if (langid_to_add & GRFLB_FRENCH) ret = AddGRFString(grfid, stringid, 1 << 6 | GRFLX_FRENCH, true, text_to_add); - if (langid_to_add & GRFLB_SPANISH) ret = AddGRFString(grfid, stringid, 1 << 6 | GRFLX_SPANISH, true, text_to_add); + if (langid_to_add & GRFLB_GERMAN) ret = AddGRFString(grfid, stringid, 1 << 6 | GRFLX_GERMAN, true, text_to_add, def_string); + if (langid_to_add & GRFLB_FRENCH) ret = AddGRFString(grfid, stringid, 1 << 6 | GRFLX_FRENCH, true, text_to_add, def_string); + if (langid_to_add & GRFLB_SPANISH) ret = AddGRFString(grfid, stringid, 1 << 6 | GRFLX_SPANISH, true, text_to_add, def_string); return ret; } } @@ -210,6 +211,7 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne if (_grf_text[id].textholder == NULL) { _grf_text[id].grfid = grfid; _grf_text[id].stringid = stringid; + _grf_text[id].def_string = def_string; _grf_text[id].textholder = newtext; } else { GRFText *textptr = _grf_text[id].textholder; @@ -242,17 +244,27 @@ StringID GetGRFStringID(uint32 grfid, uint16 stringid) char *GetGRFString(char *buff, uint16 stringid) { GRFText *search_text; + GRFText *default_text = NULL; assert(_grf_text[stringid].grfid != 0); /*Search the list of lang-strings of this stringid for current lang */ for (search_text = _grf_text[stringid].textholder; search_text != NULL; search_text = search_text->next) { - if (search_text->langid == _currentLangID){ + if (search_text->langid == _currentLangID) { return strecpy(buff, search_text->text, NULL); } + + /* If the current string is English or American, set it as the + * fallback language if the specific language isn't available. */ + if (search_text->langid == GRFLX_ENGLISH || search_text->langid == GRFLX_AMERICAN) { + default_text = search_text; + } } - /* Use the first text if the specific language isn't available */ - return strecpy(buff, _grf_text[stringid].textholder->text, NULL); + /* If there is a fallback string, return that */ + if (default_text != NULL) return strecpy(buff, default_text->text, NULL); + + /* Use the default string ID if the fallback string isn't available */ + return GetString(buff, _grf_text[stringid].def_string); } /** diff --git a/newgrf_text.h b/newgrf_text.h index 8d4b3f47f..2b7886c79 100644 --- a/newgrf_text.h +++ b/newgrf_text.h @@ -26,11 +26,12 @@ typedef struct GRFText { typedef struct GRFTextEntry { uint32 grfid; uint16 stringid; + StringID def_string; GRFText *textholder; } GRFTextEntry; -StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid, bool new_scheme, const char *text_to_add); +StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid, bool new_scheme, const char *text_to_add, StringID def_string); StringID GetGRFStringID(uint32 grfid, uint16 stringid); char *GetGRFString(char *buff, uint16 stringid); void CleanUpStrings(void); |