Mercurial > hg > openttd
changeset 3642:bfc6ee3dab11 draft
(svn r4551) - NewGRF: add string handling for newstations.
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Sun, 23 Apr 2006 18:37:06 +0000 |
parents | 0dc7cec7ee0c |
children | 25fe7b69e90e |
files | newgrf.c newgrf_station.c newgrf_station.h |
diffstat | 3 files changed, 50 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/newgrf.c +++ b/newgrf.c @@ -1716,7 +1716,6 @@ * (completely new scenarios changing all graphics and logically also * factory names etc). We should then also support all languages (by * name), not only the original four ones. --pasky - * TODO: Support for custom station class/type names. * All of the above are coming. In Time. Some sooner than others :)*/ uint8 feature; @@ -1760,17 +1759,22 @@ break; } -#if 0 - case GSF_STATION: + case GSF_STATION: { + byte station = GB(id, 0, 8); + if (station >= _cur_grffile->num_stations) { + grfmsg(GMS_WARN, "VehicleNewName: Attempt to name undefined station 0x%X, ignoring.", station); + break; + } + switch (GB(id, 8, 8)) { case 0xC4: { /* Station class name */ - StationClassID sclass = _cur_grffile->stations[GB(id, 0, 8)].sclass; - SetStationClassName(sclass, AddGRFString(_cur_grffile->grfid, id, lang, name)); + StationClassID sclass = _cur_grffile->stations[station].sclass; + SetStationClassName(sclass, AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name)); break; } case 0xC5: /* Station name */ - _cur_grffile->stations[GB(id, 0, 8)].name = AddGRFString(_cur_grffile->grfid, id, lang, name); + _cur_grffile->stations[station].name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name); break; default: @@ -1778,7 +1782,9 @@ break; } break; - + } + +#if 0 case GSF_CANAL : case GSF_BRIDGE : case GSF_TOWNHOUSE :
--- a/newgrf_station.c +++ b/newgrf_station.c @@ -68,6 +68,39 @@ return STAT_CLASS_DFLT; } +/** Set the name of a custom station class */ +void SetStationClassName(StationClassID sclass, StringID name) +{ + assert(sclass < STAT_CLASS_MAX); + station_classes[sclass].name = name; +} + +/** Retrieve the name of a custom station class */ +StringID GetStationClassName(StationClassID sclass) +{ + assert(sclass < STAT_CLASS_MAX); + return station_classes[sclass].name; +} + +/** Build a list of station class name StringIDs to use in a dropdown list + * @return Pointer to a (static) array of StringIDs + */ +StringID *BuildStationClassDropdown(void) +{ + /* Allow room for all station classes, plus a terminator entry */ + static StringID names[STAT_CLASS_MAX + 1]; + uint i; + + /* Add each name */ + for (i = 0; i < STAT_CLASS_MAX && station_classes[i].id != 0; i++) { + names[i] = station_classes[i].name; + } + /* Terminate the list */ + names[i] = INVALID_STRING_ID; + + return names; +} + /** * Get the number of station classes in use. * @return Number of station classes.
--- a/newgrf_station.h +++ b/newgrf_station.h @@ -84,6 +84,10 @@ void ResetStationClasses(void); StationClassID AllocateStationClass(uint32 class); +void SetStationClassName(StationClassID sclass, StringID name); +StringID GetStationClassName(StationClassID sclass); +StringID *BuildStationClassDropdown(void); + uint GetNumStationClasses(void); uint GetNumCustomStations(StationClassID sclass);