summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-04-23 18:37:06 +0000
committerpeter1138 <peter1138@openttd.org>2006-04-23 18:37:06 +0000
commitb4ba26bce7a546dccc526aca75068a3fbaf6af5f (patch)
treee57b71a10c177e0c31af9cf1b413ab924f5d04e2
parent87e994c25befa118bd050add511a46582dcbd3e2 (diff)
downloadopenttd-b4ba26bce7a546dccc526aca75068a3fbaf6af5f.tar.xz
(svn r4551) - NewGRF: add string handling for newstations.
-rw-r--r--newgrf.c18
-rw-r--r--newgrf_station.c33
-rw-r--r--newgrf_station.h4
3 files changed, 49 insertions, 6 deletions
diff --git a/newgrf.c b/newgrf.c
index a38dceb49..993b535df 100644
--- a/newgrf.c
+++ b/newgrf.c
@@ -1716,7 +1716,6 @@ static void VehicleNewName(byte *buf, int len)
* (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 @@ static void VehicleNewName(byte *buf, int len)
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 @@ static void VehicleNewName(byte *buf, int len)
break;
}
break;
+ }
+#if 0
case GSF_CANAL :
case GSF_BRIDGE :
case GSF_TOWNHOUSE :
diff --git a/newgrf_station.c b/newgrf_station.c
index 4151fcae3..f47820cb5 100644
--- a/newgrf_station.c
+++ b/newgrf_station.c
@@ -68,6 +68,39 @@ StationClassID AllocateStationClass(uint32 class)
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.
diff --git a/newgrf_station.h b/newgrf_station.h
index 5f6c630ef..64eaeec41 100644
--- a/newgrf_station.h
+++ b/newgrf_station.h
@@ -84,6 +84,10 @@ typedef struct stationclass {
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);