src/strings.cpp
changeset 8258 9fa31acb07bc
parent 8254 1496654ca5e7
child 8264 b1e85998c7d3
equal deleted inserted replaced
8257:3151fdbc73f9 8258:9fa31acb07bc
   136 			if (index >= 0xE4)
   136 			if (index >= 0xE4)
   137 				return GetSpecialPlayerNameString(buffr, index - 0xE4, argv, last);
   137 				return GetSpecialPlayerNameString(buffr, index - 0xE4, argv, last);
   138 			break;
   138 			break;
   139 
   139 
   140 		case 15:
   140 		case 15:
   141 			/* User defined name */
   141 			error("Boo!");
   142 			return GetName(buffr, index, last);
       
   143 
   142 
   144 		case 26:
   143 		case 26:
   145 			/* Include string within newgrf text (format code 81) */
   144 			/* Include string within newgrf text (format code 81) */
   146 			if (HasBit(index, 10)) {
   145 			if (HasBit(index, 10)) {
   147 				StringID string = GetGRFStringID(0, 0xD000 + GB(index, 0, 10));
   146 				StringID string = GetGRFStringID(0, 0xD000 + GB(index, 0, 10));
   819 			case SCC_CURRENCY: // {CURRENCY}
   818 			case SCC_CURRENCY: // {CURRENCY}
   820 				buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), false, last);
   819 				buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), false, last);
   821 				break;
   820 				break;
   822 
   821 
   823 			case SCC_WAYPOINT_NAME: { // {WAYPOINT}
   822 			case SCC_WAYPOINT_NAME: { // {WAYPOINT}
   824 				int64 temp[2];
       
   825 				Waypoint *wp = GetWaypoint(GetInt32(&argv));
   823 				Waypoint *wp = GetWaypoint(GetInt32(&argv));
   826 				StringID str;
   824 
   827 				if (wp->string != STR_NULL) {
   825 				if (!wp->IsValid()) { // waypoint doesn't exist anymore
   828 					str = wp->string;
   826 					buff = GetStringWithArgs(buff, STR_UNKNOWN_DESTINATION, NULL, last);
       
   827 				} else if (wp->name != NULL) {
       
   828 					buff = strecpy(buff, wp->name, last);
   829 				} else {
   829 				} else {
       
   830 					int64 temp[2];
   830 					temp[0] = wp->town_index;
   831 					temp[0] = wp->town_index;
   831 					temp[1] = wp->town_cn + 1;
   832 					temp[1] = wp->town_cn + 1;
   832 					str = wp->town_cn == 0 ? STR_WAYPOINTNAME_CITY : STR_WAYPOINTNAME_CITY_SERIAL;
   833 					StringID str = wp->town_cn == 0 ? STR_WAYPOINTNAME_CITY : STR_WAYPOINTNAME_CITY_SERIAL;
       
   834 
       
   835 					buff = GetStringWithArgs(buff, str, temp, last);
   833 				}
   836 				}
   834 				buff = GetStringWithArgs(buff, str, temp, last);
       
   835 				break;
   837 				break;
   836 			}
   838 			}
   837 
   839 
   838 			case SCC_STATION_NAME: { // {STATION}
   840 			case SCC_STATION_NAME: { // {STATION}
   839 				const Station* st = GetStation(GetInt32(&argv));
   841 				const Station* st = GetStation(GetInt32(&argv));
   840 
   842 
   841 				if (!st->IsValid()) { // station doesn't exist anymore
   843 				if (!st->IsValid()) { // station doesn't exist anymore
   842 					buff = GetStringWithArgs(buff, STR_UNKNOWN_DESTINATION, NULL, last);
   844 					buff = GetStringWithArgs(buff, STR_UNKNOWN_DESTINATION, NULL, last);
       
   845 				} else if (st->name != NULL) {
       
   846 					buff = strecpy(buff, st->name, last);
   843 				} else {
   847 				} else {
   844 					int64 temp[3];
   848 					int64 temp[3];
   845 					temp[0] = STR_TOWN;
   849 					temp[0] = STR_TOWN;
   846 					temp[1] = st->town->index;
   850 					temp[1] = st->town->index;
   847 					temp[2] = st->index;
   851 					temp[2] = st->index;
   857 				assert(t->IsValid());
   861 				assert(t->IsValid());
   858 
   862 
   859 				temp[0] = t->townnameparts;
   863 				temp[0] = t->townnameparts;
   860 				uint32 grfid = t->townnamegrfid;
   864 				uint32 grfid = t->townnamegrfid;
   861 
   865 
   862 				if (grfid == 0) {
   866 				if (t->name != NULL) {
       
   867 					buff = strecpy(buff, t->name, last);
       
   868 				} else if (grfid == 0) {
   863 					/* Original town name */
   869 					/* Original town name */
   864 					buff = GetStringWithArgs(buff, t->townnametype, temp, last);
   870 					buff = GetStringWithArgs(buff, t->townnametype, temp, last);
   865 				} else {
   871 				} else {
   866 					/* Newgrf town name */
   872 					/* Newgrf town name */
   867 					if (GetGRFTownName(grfid) != NULL) {
   873 					if (GetGRFTownName(grfid) != NULL) {
   875 				break;
   881 				break;
   876 			}
   882 			}
   877 
   883 
   878 			case SCC_GROUP_NAME: { // {GROUP}
   884 			case SCC_GROUP_NAME: { // {GROUP}
   879 				const Group *g = GetGroup(GetInt32(&argv));
   885 				const Group *g = GetGroup(GetInt32(&argv));
   880 				int64 args[1];
       
   881 
   886 
   882 				assert(g->IsValid());
   887 				assert(g->IsValid());
   883 
   888 
   884 				args[0] = g->index;
   889 				if (g->name != NULL) {
   885 				buff = GetStringWithArgs(buff, IsCustomName(g->string_id) ? g->string_id : STR_GROUP_NAME_FORMAT, args, last);
   890 					buff = strecpy(buff, g->name, last);
   886 
   891 				} else {
       
   892 					int64 args[1];
       
   893 
       
   894 					args[0] = g->index;
       
   895 					buff = GetStringWithArgs(buff, STR_GROUP_NAME_FORMAT, args, last);
       
   896 				}
   887 				break;
   897 				break;
   888 			}
   898 			}
   889 
   899 
   890 			case SCC_ENGINE_NAME: { // {ENGINE}
   900 			case SCC_ENGINE_NAME: { // {ENGINE}
   891 				EngineID engine = (EngineID)GetInt32(&argv);
   901 				EngineID engine = (EngineID)GetInt32(&argv);
   892 
   902 				const Engine *e = GetEngine(engine);
   893 				buff = GetString(buff, GetCustomEngineName(engine), last);
   903 
       
   904 				if (e->name != NULL) {
       
   905 					buff = strecpy(buff, e->name, last);
       
   906 				} else {
       
   907 					buff = GetStringWithArgs(buff, EngInfo(engine)->string_id, NULL, last);
       
   908 				}
   894 				break;
   909 				break;
   895 			}
   910 			}
   896 
   911 
   897 			case SCC_VEHICLE_NAME: { // {VEHICLE}
   912 			case SCC_VEHICLE_NAME: { // {VEHICLE}
   898 				const Vehicle *v = GetVehicle(GetInt32(&argv));
   913 				const Vehicle *v = GetVehicle(GetInt32(&argv));
   899 
   914 
   900 				int64 args[1];
   915 				if (v->name != NULL) {
   901 				args[0] = v->unitnumber;
   916 					buff = strecpy(buff, v->name, last);
   902 
   917 				} else {
   903 				buff = GetStringWithArgs(buff, v->string_id, args, last);
   918 					int64 args[1];
       
   919 					args[0] = v->unitnumber;
       
   920 
       
   921 					StringID str;
       
   922 					switch (v->type) {
       
   923 						default: NOT_REACHED();
       
   924 						case VEH_TRAIN:    str = STR_SV_TRAIN_NAME; break;
       
   925 						case VEH_ROAD:     str = STR_SV_ROADVEH_NAME; break;
       
   926 						case VEH_SHIP:     str = STR_SV_SHIP_NAME; break;
       
   927 						case VEH_AIRCRAFT: str = STR_SV_AIRCRAFT_NAME; break;
       
   928 					}
       
   929 
       
   930 					buff = GetStringWithArgs(buff, str, args, last);
       
   931 				}
   904 				break;
   932 				break;
   905 			}
   933 			}
   906 
   934 
   907 			case SCC_SIGN_NAME: { // {SIGN}
   935 			case SCC_SIGN_NAME: { // {SIGN}
   908 				const Sign *si = GetSign(GetInt32(&argv));
   936 				const Sign *si = GetSign(GetInt32(&argv));
   909 				buff = GetString(buff, si->str, last);
   937 				if (si->name != NULL) {
       
   938 					buff = strecpy(buff, si->name, last);
       
   939 				} else {
       
   940 					buff = GetStringWithArgs(buff, STR_280A_SIGN, NULL, last);
       
   941 				}
   910 				break;
   942 				break;
   911 			}
   943 			}
   912 
   944 
   913 			case SCC_COMPANY_NAME: { // {COMPANY}
   945 			case SCC_COMPANY_NAME: { // {COMPANY}
   914 				const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
   946 				const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
   915 				int64 args[1];
   947 
   916 				args[0] = p->name_2;
   948 				if (p->name != NULL) {
   917 				buff = GetStringWithArgs(buff, p->name_1, args, last);
   949 					buff = strecpy(buff, p->name, last);
       
   950 				} else {
       
   951 					int64 args[1];
       
   952 					args[0] = p->name_2;
       
   953 					buff = GetStringWithArgs(buff, p->name_1, args, last);
       
   954 				}
   918 				break;
   955 				break;
   919 			}
   956 			}
   920 
   957 
   921 			case SCC_COMPANY_NUM: { // {COMPANYNUM}
   958 			case SCC_COMPANY_NUM: { // {COMPANYNUM}
   922 				PlayerID player = (PlayerID)GetInt32(&argv);
   959 				PlayerID player = (PlayerID)GetInt32(&argv);
   930 				break;
   967 				break;
   931 			}
   968 			}
   932 
   969 
   933 			case SCC_PLAYER_NAME: { // {PLAYERNAME}
   970 			case SCC_PLAYER_NAME: { // {PLAYERNAME}
   934 				const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
   971 				const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
   935 				int64 args[1];
   972 
   936 				args[0] = p->president_name_2;
   973 				if (p->president_name != NULL) {
   937 				buff = GetStringWithArgs(buff, p->president_name_1, args, last);
   974 					buff = strecpy(buff, p->president_name, last);
       
   975 				} else {
       
   976 					int64 args[1];
       
   977 					args[0] = p->president_name_2;
       
   978 					buff = GetStringWithArgs(buff, p->president_name_1, args, last);
       
   979 				}
   938 				break;
   980 				break;
   939 			}
   981 			}
   940 
   982 
   941 			case SCC_SETCASE: { // {SETCASE}
   983 			case SCC_SETCASE: { // {SETCASE}
   942 				/* This is a pseudo command, it's outputted when someone does {STRING.ack}
   984 				/* This is a pseudo command, it's outputted when someone does {STRING.ack}