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);