Group :: Games/Strategy
RPM: openttd
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: openttd-0.7.0-alt2.patch
Download
Download
.gear/rules | 2 +
.../tags/6375ce596dffbf3fededfc7a88c1f00441aedc6a | 13 ++
.gear/tags/list | 1 +
config.lib | 2 +-
openttd-installer | 32 ++++
openttd.spec | 196 ++++++++++++++++++++
src/gfxinit.cpp | 13 +-
src/gfxinit.h | 2 +-
src/lang/english.txt | 1 +
src/lang/russian.txt | 1 +
src/namegen.cpp | 7 +
src/openttd.cpp | 16 +-
src/settings.cpp | 18 +-
src/strings_type.h | 3 +-
src/table/namegen.h | 177 ++++++++++++++++++
15 files changed, 459 insertions(+), 25 deletions(-)
diff --git a/.gear/rules b/.gear/rules
new file mode 100644
index 0000000..a4a2460
--- /dev/null
+++ b/.gear/rules
@@ -0,0 +1,2 @@
+tar: v@version@-@release@:. name=openttd-@version@-@release@
+diff: v@version@-@release@:. .
diff --git a/.gear/tags/6375ce596dffbf3fededfc7a88c1f00441aedc6a b/.gear/tags/6375ce596dffbf3fededfc7a88c1f00441aedc6a
new file mode 100644
index 0000000..99e0897
--- /dev/null
+++ b/.gear/tags/6375ce596dffbf3fededfc7a88c1f00441aedc6a
@@ -0,0 +1,13 @@
+object cb9934e32652aa04f640d029c3b6120eca2c3c61
+type commit
+tag v0.7.0-alt2
+tagger Anton Farygin <rider@altlinux.com> 1239410297 +0400
+
+0.7.0
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.11 (GNU/Linux)
+
+iEYEABECAAYFAknf5oUACgkQqohfd2vlwKsv/ACeKawr5L7O/Pw0y3Am0xCH7U1B
+NJsAnAmB0xmMiXzsWpkpem+TtXurx9Oj
+=cFg5
+-----END PGP SIGNATURE-----
diff --git a/.gear/tags/list b/.gear/tags/list
new file mode 100644
index 0000000..7cd6d0f
--- /dev/null
+++ b/.gear/tags/list
@@ -0,0 +1 @@
+6375ce596dffbf3fededfc7a88c1f00441aedc6a v0.7.0-alt2
diff --git a/config.lib b/config.lib
index 547c47c..8264c19 100644
--- a/config.lib
+++ b/config.lib
@@ -36,7 +36,7 @@ set_default() {
install_dir="/"
man_dir="1"
menu_dir="1"
- menu_group="Game;"
+ menu_group="Game;StrategyGame;"
menu_name="OpenTTD"
binary_name="openttd"
enable_debug="0"
diff --git a/openttd-installer b/openttd-installer
new file mode 100755
index 0000000..35a902b
--- /dev/null
+++ b/openttd-installer
@@ -0,0 +1,32 @@
+#!/bin/sh
+DIALOG=Xdialog
+TTDPACK=ttd-graphics.rar
+TTDURL="http://download.transporttycoon.net/files/$TTDPACK"
+DL_PATH="$HOME/.openttd/content_download/data"
+download_content() {
+ $DIALOG --screen-center --wrap --title "Download and Install Transport Tycoon Deluxe content" \
+ --yesno "For start of game OpenTTD it is necessary to load from a Internet 3.2Mb \n with the original data from Transport Tycoon Deluxe. Download ?" 0 0
+
+ case $? in
+ 0)
+ [ -d $DL_PATH ] || mkdir -p $DL_PATH
+ eval "curl -# $TTDURL -o $DL_PATH/$TTDPACK" 2>&1 | tr "\r" "\n"|sed "s,# *,,gm"| $DIALOG --title "Progress" --no-close \
+ --gauge "Downloading ...\n\n" 0 0
+ pushd $DL_PATH
+ if unrar x "$TTDPACK";then
+ $DIALOG --screen-center --wrap --title "Download and Install Transport Tycoon Deluxe content" \
+ --yesno "Complete. Start Game ?" 0 0
+ [ $? -eq 0 ] || exit
+ else
+ $DIALOG --screen-center --wrap --title "Download and Install Transport Tycoon Deluxe content" \
+ --msgbox "Unknown error !" 0 0
+ fi
+ popd
+ ;;
+ esac
+}
+
+openttd
+if [ $? -eq 138 ];then
+download_content && rm -f "$DL_PATH/$TTDPACK" && openttd
+fi
diff --git a/openttd.spec b/openttd.spec
new file mode 100644
index 0000000..f2de430
--- /dev/null
+++ b/openttd.spec
@@ -0,0 +1,196 @@
+Name: openttd
+Version: 0.7.0
+Release: alt2
+
+Summary: An open source clone of the Microprose game "Transport Tycoon Deluxe".
+License: GPL
+Group: Games/Strategy
+URL: http://www.openttd.com/
+Requires: TiMidity++
+Requires: fonts-ttf-dejavu Xdialog %name-data
+Packager: Anton Farygin <rider@altlinux.com>
+
+Source: %name-%version-%release.tar
+
+Patch0: %name-%version-%release.patch
+
+BuildRequires: libSDL-devel libpng-devel libfreetype-devel fontconfig-devel gcc-c++
+
+
+%description
+An open source clone of the Microprose game "Transport Tycoon Deluxe".
+
+You need following files from TTD Win version:
+ - sample.cat
+ - trg1r.grf
+ - trgcr.grf
+ - trghr.grf
+ - trgir.grf
+ - trgtr.grf
+
+To play music tracks you need files from gm directory
+
+%package data
+Buildarch: noarch
+Summary: Data files for %name
+Requires: %name
+Group: Games/Strategy
+
+%description data
+Data files for %name
+
+%prep
+%setup -q -n %name-%version-%release
+%patch0 -p1
+
+%build
+./configure \
+ --prefix-dir=%_prefix \
+ --with-sdl \
+ --with-png \
+ --with-freetype \
+ --with-fontconfig \
+ --revision=%version
+
+%make_build WITH_SDL=1 UNIX=1 RELEASE=%version INSTALL=1 WITH_NETWORK=1 \
+ USE_HOMEDIR=1 VERBOSE=1 PERSONAL_DIR=.%name \
+ PREFIX=%_prefix DATA_DIR=share/games/%name \
+
+%install
+%__mkdir_p %buildroot%_prefix/games
+%__mkdir_p %buildroot%_datadir/games/%name/gm
+%__mkdir_p %buildroot%_datadir/games/%name/lang
+%__mkdir_p %buildroot%_man6dir
+
+%__install -m755 -s bin/%name %buildroot%_prefix/games/%name
+%__install -m755 %name-installer %buildroot%_prefix/games/%name-installer
+%__cp -a bin/data %buildroot%_datadir/games/%name
+%__cp -a bin/lang/*.lng %buildroot%_datadir/games/%name/lang
+%__chmod -x %buildroot%_datadir/games/%name/data/*
+
+#menu
+
+%__install -dm 755 %buildroot%_datadir/applications
+%__install -m644 media/%name.desktop %buildroot%_datadir/applications/%name.desktop
+%__subst "s,Exec=openttd,Exec=openttd-installer," %buildroot%_datadir/applications/%name.desktop
+
+# icons
+%__install -pD -m644 media/%name.16.png %buildroot%_miconsdir/%name.png
+%__install -pD -m644 media/%name.32.png %buildroot%_iconsdir/%name.png
+%__install -pD -m644 media/%name.48.png %buildroot%_liconsdir/%name.png
+%__install -pD -m644 docs/%name.6 %buildroot%_man6dir/
+
+
+%files
+%_prefix/games/%name
+%_prefix/games/%name-installer
+
+%files data
+%doc docs/* bin/scripts readme.txt known-bugs.txt changelog.txt COPYING
+%_datadir/games/%name
+%_datadir/applications/%name.desktop
+%_iconsdir/%name.png
+%_miconsdir/%name.png
+%_liconsdir/%name.png
+%_man6dir/*
+
+%changelog
+* Sat Apr 11 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt2
+- 0.7.0
+
+* Thu Mar 26 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt1.r15828
+- 0.7.0-rc2
+
+* Mon Mar 16 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt1.r15737
+- 0.7.0-rc1
+
+* Fri Mar 13 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt1.r15697
+- updated snapshot (fixed some crash issues)
+
+* Thu Mar 12 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt1.r15676
+- new snapshot (0.7.0-beta2)
+
+* Tue Mar 03 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt1.r15601
+- new snapshot
+- default fonts changed and warning about DejaVu removed
+
+* Sat Feb 28 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt1.r15592
+- new snapshot
+
+* Thu Feb 26 2009 Anton Farygin <rider@altlinux.ru> 0.7.0-alt1.r15587
+- new snapshot (0.7.0-beta1)
+- use official revision number (0.7.0-beta1) for playing over network
+
+* Wed Feb 25 2009 Anton Farygin <rider@altlinux.ru> 0.6.3-alt3.r15578
+- new snapshot
+- squirrel included to maintree
+
+* Fri Feb 20 2009 Anton Farygin <rider@altlinux.ru> 0.6.3-alt2.r15529
+- new snapshot
+
+* Mon Feb 16 2009 Anton Farygin <rider@altlinux.ru> 0.6.3-alt2.r15495
+- fixed revision in game
+- noarch content moved to %name-data subpackage
+
+* Sat Feb 14 2009 Anton Farygin <rider@altlinux.ru> 0.6.3-alt1.svn15476
+- new snapshot from svn
+- added russian towns
+
+* Fri Feb 13 2009 Anton Farygin <rider@altlinux.ru> 0.6.3-alt1.svn15465
+- new snapshot from svn
+- Xdialog added to requires
+
+* Wed Feb 11 2009 Anton Farygin <rider@altlinux.ru> 0.6.3-alt1.svn15447
+- new snapshot from svn
+- added data downloader and installer
+- menu file changed to desktop file
+
+* Tue Feb 03 2009 Anton Farygin <rider@altlinux.ru> 0.6.3-alt1
+- new version (from svn 15322)
+- post-scripts removed
+
+* Fri Jun 06 2008 Andrew Kornilov <hiddenman@altlinux.ru> 0.6.1-alt1
+- New release
+
+* Wed Apr 02 2008 Andrew Kornilov <hiddenman@altlinux.ru> 0.6.0-alt1
+- New release
+- Fonts patch updated (and enabled AA)
+
+* Wed Oct 03 2007 Andrew Kornilov <hiddenman@altlinux.ru> 0.5.3-alt1
+- New release
+- Fonts patch was reworked (fontconfig support seems to be fixed, so
+ hardcoded font paths were removed; uses font names now)
+- Spec updates (to conform openttd's fs hier)
+
+* Wed Apr 25 2007 Andrew Kornilov <hiddenman@altlinux.ru> 0.5.1-alt2
+- New release
+
+* Fri Mar 23 2007 Andrew Kornilov <hiddenman@altlinux.ru> 0.5.1-alt1.RC2
+- Bugfix RC2
+- Spec cleanups
+
+* Thu Mar 01 2007 Andrew Kornilov <hiddenman@altlinux.ru> 0.5.0-alt2
+- Release
+
+* Sun Feb 04 2007 Andrew Kornilov <hiddenman@altlinux.ru> 0.5.0-alt1.svn8588
+- New version from SVN
+- Updated buildreqs
+- Spec cleanups
+- Correct man placement
+- New patch (use correct, but hardcoded fonts)
+- Added missed docs
+
+* Fri Oct 06 2006 Damir Shayhutdinov <damir@altlinux.ru> 0.4.8-alt1
+- 0.4.8
+- Updated buildreqs.
+
+* Thu Jan 27 2005 Kachalov Anton <mouse@altlinux.ru> 0.3.6-alt1
+- 0.3.6
+ + some scenarios in docs/scenario
+ + scripts example in docs/scripts
+
+* Tue Dec 28 2004 Kachalov Anton <mouse@altlinux.ru> 0.3.5-alt1
+- 0.3.5
+
+* Wed Jun 09 2004 Kachalov Anton <mouse@altlinux.ru> 0.3.2.1-alt1
+- first build for Sisyphus
diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp
index 9dad75a..bbbf0c9 100644
--- a/src/gfxinit.cpp
+++ b/src/gfxinit.cpp
@@ -223,20 +223,21 @@ static void DeterminePalette()
*
* @note Also checks sample.cat and other required non-NewGRF GRFs for corruption.
*/
-void CheckExternalFiles()
+bool CheckExternalFiles()
{
DeterminePalette();
DEBUG(grf, 1, "Using the %s base graphics set with the %s palette", _used_graphics_set->name, _use_palette == PAL_DOS ? "DOS" : "Windows");
static const size_t ERROR_MESSAGE_LENGTH = 128;
+ bool ret = true;
char error_msg[ERROR_MESSAGE_LENGTH * (MAX_GFT + 1)];
error_msg[0] = '\0';
char *add_pos = error_msg;
const char *last = lastof(error_msg);
-
for (uint i = 0; i < lengthof(_used_graphics_set->files); i++) {
if (!FileMD5(_used_graphics_set->files[i])) {
+ ret = false;
add_pos += seprintf(add_pos, last, "Your '%s' file is corrupted or missing! %s\n", _used_graphics_set->files[i].filename, _used_graphics_set->files[i].missing_warning);
}
}
@@ -247,10 +248,12 @@ void CheckExternalFiles()
}
if (!sound) {
+ ret = false;
add_pos += seprintf(add_pos, last, "Your 'sample.cat' file is corrupted or missing! You can find 'sample.cat' on your Transport Tycoon Deluxe CD-ROM.\n");
}
if (add_pos != error_msg) ShowInfoF(error_msg);
+ return ret;
}
@@ -500,15 +503,13 @@ bool SetGraphicsSet(const char *name)
{
if (StrEmpty(name)) {
if (!DetermineGraphicsPack()) return false;
- CheckExternalFiles();
- return true;
+ return CheckExternalFiles();
}
for (const GraphicsSet *g = _available_graphics_sets; g != NULL; g = g->next) {
if (strcmp(name, g->name) == 0) {
_used_graphics_set = g;
- CheckExternalFiles();
- return true;
+ return CheckExternalFiles();
}
}
return false;
diff --git a/src/gfxinit.h b/src/gfxinit.h
index 3bee8c2..d3683c8 100644
--- a/src/gfxinit.h
+++ b/src/gfxinit.h
@@ -7,7 +7,7 @@
#include "gfx_type.h"
-void CheckExternalFiles();
+bool CheckExternalFiles();
void GfxLoadSprites();
void LoadSpritesIndexed(int file_index, uint *sprite_id, const SpriteID *index_tbl);
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 9651e0c..ffa36a5 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -796,6 +796,7 @@ STR_TOWNNAME_DANISH :Danish
STR_TOWNNAME_TURKISH :Turkish
STR_TOWNNAME_ITALIAN :Italian
STR_TOWNNAME_CATALAN :Catalan
+STR_TOWNNAME_RUSSIAN :Russian
############ end of townname region
STR_CURR_GBP :Pounds (£)
diff --git a/src/lang/russian.txt b/src/lang/russian.txt
index dab7c2e..1f0060a 100644
--- a/src/lang/russian.txt
+++ b/src/lang/russian.txt
@@ -798,6 +798,7 @@ STR_TOWNNAME_DANISH :Датские
STR_TOWNNAME_TURKISH :Турецкие
STR_TOWNNAME_ITALIAN :Итальянские
STR_TOWNNAME_CATALAN :Каталанские
+STR_TOWNNAME_RUSSIAN :Русские
############ end of townname region
STR_CURR_GBP :Английский фунт (£)
diff --git a/src/namegen.cpp b/src/namegen.cpp
index f7c382a..23099c7 100644
--- a/src/namegen.cpp
+++ b/src/namegen.cpp
@@ -215,6 +215,12 @@ static byte MakeFrenchTownName(char *buf, uint32 seed, const char *last)
return 0;
}
+static byte MakeRussianTownName(char *buf, uint32 seed, const char *last)
+{
+ strecpy(buf, name_russian_real[SeedChance(0, lengthof(name_russian_real), seed)], last);
+ return 0;
+}
+
static byte MakeSillyTownName(char *buf, uint32 seed, const char *last)
{
strecpy(buf, _name_silly_1[SeedChance( 0, lengthof(_name_silly_1), seed)], last);
@@ -755,4 +761,5 @@ TownNameGenerator * const _town_name_generators[] =
MakeTurkishTownName,
MakeItalianTownName,
MakeCatalanTownName,
+ MakeRussianTownName,
};
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 8f61574..4c13379 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -561,6 +561,15 @@ int ttd_main(int argc, char *argv[])
/* initialize all variables that are allocated dynamically */
InitializeDynamicVariables();
+
+ if (graphics_set == NULL) graphics_set = _ini_graphics_set;
+ if (!SetGraphicsSet(graphics_set)) {
+ StrEmpty(graphics_set) ?
+ ShowInfoF("Failed to find a graphics set. Please acquire a graphics set for OpenTTD.") :
+ ShowInfoF("Failed to select requested graphics set '%s'", graphics_set);
+ exit(138);
+ }
+
/* Sample catalogue */
DEBUG(misc, 1, "Loading sound effects...");
MxInitialize(11025);
@@ -572,13 +581,6 @@ int ttd_main(int argc, char *argv[])
/* This must be done early, since functions use the InvalidateWindow* calls */
InitWindowSystem();
- if (graphics_set == NULL) graphics_set = _ini_graphics_set;
- if (!SetGraphicsSet(graphics_set)) {
- StrEmpty(graphics_set) ?
- usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD.") :
- usererror("Failed to select requested graphics set '%s'", graphics_set);
- }
-
/* Initialize game palette */
GfxInitPalettes();
diff --git a/src/settings.cpp b/src/settings.cpp
index 4f3eda5..60b7cbe 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -1239,15 +1239,15 @@ static const SettingDescGlobVarList _misc_settings[] = {
SDTG_STR("savegame_format", SLE_STRB, S, 0, _savegame_format, NULL, STR_NULL, NULL),
SDTG_BOOL("rightclick_emulate", S, 0, _rightclick_emulate, false, STR_NULL, NULL),
#ifdef WITH_FREETYPE
- SDTG_STR("small_font", SLE_STRB, S, 0, _freetype.small_font, NULL, STR_NULL, NULL),
- SDTG_STR("medium_font", SLE_STRB, S, 0, _freetype.medium_font, NULL, STR_NULL, NULL),
- SDTG_STR("large_font", SLE_STRB, S, 0, _freetype.large_font, NULL, STR_NULL, NULL),
- SDTG_VAR("small_size", SLE_UINT, S, 0, _freetype.small_size, 6, 0, 72, 0, STR_NULL, NULL),
- SDTG_VAR("medium_size", SLE_UINT, S, 0, _freetype.medium_size, 10, 0, 72, 0, STR_NULL, NULL),
- SDTG_VAR("large_size", SLE_UINT, S, 0, _freetype.large_size, 16, 0, 72, 0, STR_NULL, NULL),
- SDTG_BOOL("small_aa", S, 0, _freetype.small_aa, false, STR_NULL, NULL),
- SDTG_BOOL("medium_aa", S, 0, _freetype.medium_aa, false, STR_NULL, NULL),
- SDTG_BOOL("large_aa", S, 0, _freetype.large_aa, false, STR_NULL, NULL),
+ SDTG_STR("small_font", SLE_STRB, S, 0, _freetype.small_font, "XLinSans", STR_NULL, NULL),
+ SDTG_STR("medium_font", SLE_STRB, S, 0, _freetype.medium_font, "XLinSans", STR_NULL, NULL),
+ SDTG_STR("large_font", SLE_STRB, S, 0, _freetype.large_font, "XLinSans", STR_NULL, NULL),
+ SDTG_VAR("small_size", SLE_UINT, S, 0, _freetype.small_size, 10, 0, 72, 0, STR_NULL, NULL),
+ SDTG_VAR("medium_size", SLE_UINT, S, 0, _freetype.medium_size, 12, 0, 72, 0, STR_NULL, NULL),
+ SDTG_VAR("large_size", SLE_UINT, S, 0, _freetype.large_size, 16, 0, 72, 0, STR_NULL, NULL),
+ SDTG_BOOL("small_aa", S, 0, _freetype.small_aa, true, STR_NULL, NULL),
+ SDTG_BOOL("medium_aa", S, 0, _freetype.medium_aa, true, STR_NULL, NULL),
+ SDTG_BOOL("large_aa", S, 0, _freetype.large_aa, true, STR_NULL, NULL),
#endif
SDTG_VAR("sprite_cache_size",SLE_UINT, S, 0, _sprite_cache_size, 4, 1, 64, 0, STR_NULL, NULL),
SDTG_VAR("player_face", SLE_UINT32, S, 0, _company_manager_face,0,0,0xFFFFFFFF,0, STR_NULL, NULL),
diff --git a/src/strings_type.h b/src/strings_type.h
index fa3a1c6..07fd33a 100644
--- a/src/strings_type.h
+++ b/src/strings_type.h
@@ -62,7 +62,8 @@ enum SpecialStrings {
SPECSTR_TOWNNAME_TURKISH,
SPECSTR_TOWNNAME_ITALIAN,
SPECSTR_TOWNNAME_CATALAN,
- SPECSTR_TOWNNAME_LAST = SPECSTR_TOWNNAME_CATALAN,
+ SPECSTR_TOWNNAME_RUSSIAN,
+ SPECSTR_TOWNNAME_LAST = SPECSTR_TOWNNAME_RUSSIAN,
/* special strings for player names on the form "TownName transport". */
SPECSTR_PLAYERNAME_START = 0x70EA,
diff --git a/src/table/namegen.h b/src/table/namegen.h
index 66c8d20..e6476c4 100644
--- a/src/table/namegen.h
+++ b/src/table/namegen.h
@@ -3308,3 +3308,180 @@ static const char * const _name_catalan_river1[] = {
" de Segre",
" de Francol\xC3\xAD",
};
+
+static const char *name_russian_real[] = {
+ "Абакан",
+ "Альметьевск",
+ "Ангарск",
+ "Арзамас",
+ "Армавир",
+ "Артем",
+ "Архангельск",
+ "Астрахань",
+ "Ачинск",
+ "Балабаново",
+ "Балаково",
+ "Балашиха",
+ "Барнаул",
+ "Батайск",
+ "Белгород",
+ "Березники",
+ "Бийск",
+ "Благовещенск",
+ "Боровск",
+ "Братск",
+ "Брянск",
+ "Великие Луки",
+ "Великий Новгород",
+ "Владивосток",
+ "Владикавказ",
+ "Владимир",
+ "Волгоград",
+ "Волгодонск",
+ "Волжский",
+ "Вологда",
+ "Воронеж",
+ "Глазов",
+ "Грозный",
+ "Дербент",
+ "Дзержинск",
+ "Димитровград",
+ "Екатеринбург",
+ "Елец",
+ "Ермолино",
+ "Железнодорожный",
+ "Жуковский",
+ "Златоуст",
+ "Иваново",
+ "Ижевск",
+ "Иркутск",
+ "Йошкар-Ола",
+ "Казань",
+ "Калининград",
+ "Калуга",
+ "Каменск-Уральский",
+ "Камышин",
+ "Канск",
+ "Кемерово",
+ "Киров",
+ "Киселевск",
+ "Кисловодск",
+ "Ковров",
+ "Коломна",
+ "Комсомольск-на-Амуре",
+ "Копейск",
+ "Королёв",
+ "Кострома",
+ "Краснодар",
+ "Красноярск",
+ "Курган",
+ "Курск",
+ "Кызыл",
+ "Ленинск-Кузнецкий",
+ "Липецк",
+ "Люберцы",
+ "Магадан",
+ "Магнитогорск",
+ "Майкоп",
+ "Махачкала",
+ "Междуреченск",
+ "Миасс",
+ "Москва",
+ "Мурманск",
+ "Муром",
+ "Мытищи",
+ "Набережные Челны",
+ "Назрань",
+ "Нальчик",
+ "Находка",
+ "Невинномысск",
+ "Нефтекамск",
+ "Нефтеюганск",
+ "Нижневартовск",
+ "Нижнекамск",
+ "Нижний Новгород",
+ "Нижний Тагил",
+ "Новокузнецк",
+ "Новокуйбышевск",
+ "Новомосковск",
+ "Новороссийск",
+ "Новосибирск",
+ "Новотроицк",
+ "Новочебоксарск",
+ "Новочеркасск",
+ "Новошахтинск",
+ "Новый Уренгой",
+ "Ногинск",
+ "Норильск",
+ "Ноябрьск",
+ "Обнинск",
+ "Одинцово",
+ "Октябрьский",
+ "Омск",
+ "Оренбург",
+ "Орехово-Зуево",
+ "Орёл",
+ "Орск",
+ "Пенза",
+ "Переславль-Залесский",
+ "Первоуральск",
+ "Пермь",
+ "Петрозаводск",
+ "Петропавловск-Камчатский",
+ "Подольск",
+ "Прокопьевск",
+ "Псков",
+ "Пятигорск",
+ "Ростов-на-Дону",
+ "Рубцовск",
+ "Русиново",
+ "Рыбинск",
+ "Рязань",
+ "Салават",
+ "Самара",
+ "Санкт-Петербург",
+ "Саранск",
+ "Саратов",
+ "Северодвинск",
+ "Северск",
+ "Селятино",
+ "Сергиев Посад",
+ "Серпухов",
+ "Смоленск",
+ "Сочи",
+ "Ставрополь",
+ "Старый Оскол",
+ "Стерлитамак",
+ "Сургут",
+ "Сызрань",
+ "Сыктывкар",
+ "Таганрог",
+ "Тамбов",
+ "Тверь",
+ "Тобольск",
+ "Тольятти",
+ "Томск",
+ "Тула",
+ "Тюмень",
+ "Улан-Удэ",
+ "Ульяновск",
+ "Уссурийск",
+ "Уфа",
+ "Ухта",
+ "Хабаровск",
+ "Хасавюрт",
+ "Химки",
+ "Чебоксары",
+ "Челябинск",
+ "Череповец",
+ "Черкесск",
+ "Чита",
+ "Шахты",
+ "Щелково",
+ "Электросталь",
+ "Элиста",
+ "Энгельс",
+ "Южно-Сахалинск",
+ "Якутск",
+ "Ярославль"
+};