hoiv1.14.1.e4e7 #9
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,3 +7,4 @@
|
||||
__pycache__
|
||||
.doit.db
|
||||
*.kate-swp
|
||||
/vanilla
|
||||
|
||||
154
dodo.py
154
dodo.py
@ -3,15 +3,17 @@ from pathlib import Path
|
||||
from doit import get_var
|
||||
|
||||
DOIT_CONFIG = {
|
||||
'default_tasks': ['build'],
|
||||
'action_string_formatting': 'new'
|
||||
'default_tasks': ['build'],
|
||||
'action_string_formatting': 'both'
|
||||
}
|
||||
|
||||
|
||||
def files(p):
|
||||
for i in p:
|
||||
if i.is_file():
|
||||
yield i
|
||||
|
||||
|
||||
class RawFiles(list):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.src_path = Path(kwargs.pop('src_path'))
|
||||
@ -21,26 +23,33 @@ class RawFiles(list):
|
||||
def sources(self):
|
||||
for i in self:
|
||||
yield self.src_path/i
|
||||
|
||||
def targets(self):
|
||||
for i in self:
|
||||
yield self.image_path/i
|
||||
|
||||
|
||||
class BasePatchwork(dict):
|
||||
patches_path = None
|
||||
patchwork_path = None
|
||||
vanilla_path = None
|
||||
|
||||
def __init__(self, *arkg, **kwargs):
|
||||
self.patches_path = Path(kwargs.pop('patches_path'))
|
||||
self.patchwork_path = Path(kwargs.pop('patchwork_path'))
|
||||
self.vanilla_path = Path(kwargs.pop('vanilla_path'))
|
||||
super().__init__(*arkg, **kwargs)
|
||||
|
||||
def targets(self):
|
||||
for i in self.keys():
|
||||
yield self.patchwork_path/i
|
||||
|
||||
def key_vanilla(self, orig_key):
|
||||
return self.vanilla_path/orig_key
|
||||
|
||||
def key_target(self, orig_key):
|
||||
return self.patchwork_path/orig_key
|
||||
|
||||
def tasks(self, actions):
|
||||
def repack_action(action, **kwargs):
|
||||
if callable(action):
|
||||
@ -54,29 +63,28 @@ class BasePatchwork(dict):
|
||||
patch = self.patches_path/v
|
||||
target = self.patchwork_path/k
|
||||
yield {
|
||||
'name' : k,
|
||||
'file_dep' : [ original, patch ],
|
||||
'targets' : [ target ],
|
||||
'actions' : [ repack_action(action, original=original, patch=patch, target=target)
|
||||
for action in actions ],
|
||||
'clean' : True
|
||||
'name': k,
|
||||
'file_dep': [original, patch],
|
||||
'targets': [target],
|
||||
'actions': [repack_action(action, original=original, patch=patch, target=target)
|
||||
for action in actions],
|
||||
'clean': True
|
||||
}
|
||||
|
||||
|
||||
|
||||
class Patchwork(BasePatchwork):
|
||||
def tasks_(self, actions):
|
||||
for k, v in self.items():
|
||||
yield {
|
||||
'name' : k,
|
||||
'file_dep' : [ self.patches_path/v, self.vanilla_path/k ],
|
||||
'targets' : [ self.patchwork_path/k ],
|
||||
'actions' : [
|
||||
'name': k,
|
||||
'file_dep': [self.patches_path/v, self.vanilla_path/k],
|
||||
'targets': [self.patchwork_path/k],
|
||||
'actions': [
|
||||
f"mkdir -p {self.patchwork_path}/{Path(k).parent}",
|
||||
f"patch -u --binary -N -o '{self.patchwork_path}/{k}' "\
|
||||
f"patch -u --binary -N -o '{self.patchwork_path}/{k}' "
|
||||
f"'{self.vanilla_path}/{k}' '{self.patches_path}/{v}'"
|
||||
], # action ( mkdir, patch )
|
||||
'clean' : True
|
||||
], # action ( mkdir, patch )
|
||||
'clean': True
|
||||
}
|
||||
|
||||
|
||||
@ -87,9 +95,15 @@ class ScriptedPatchwork(BasePatchwork):
|
||||
super().__init__(*args, **kwargs)
|
||||
with open(file) as s:
|
||||
for key, data in safe_load(s).items():
|
||||
discovered_source = next((Path(self.vanilla_path)/'history'/'states').glob(f"{key}*"))
|
||||
relative_path = discovered_source.relative_to(self.vanilla_path)
|
||||
self[relative_path] = data
|
||||
try:
|
||||
discovered_source = next(
|
||||
(Path(self.vanilla_path)/'history'/'states').glob(f"{key}*"))
|
||||
relative_path = discovered_source.relative_to(
|
||||
self.vanilla_path)
|
||||
self[relative_path] = data
|
||||
except StopIteration:
|
||||
print(f"{key}: not found")
|
||||
|
||||
|
||||
class RasterPatchwork(BasePatchwork):
|
||||
@staticmethod
|
||||
@ -135,15 +149,18 @@ class Patchset(list):
|
||||
|
||||
|
||||
mod_name = 'randchgs'
|
||||
mod_install_path = get_var('descriptor_mod_path', 'C:/Users/User/Documents/Paradox Interactive/Hearts of Iron IV/mod/randchgs')
|
||||
dir_vanilla = Path(get_var('vanilla_path', '../vanilla/current'))
|
||||
mod_install_path = get_var(
|
||||
'descriptor_mod_path', 'C:/Users/User/Documents/Paradox Interactive/Hearts of Iron IV/mod/randchgs')
|
||||
dir_vanilla = Path(get_var('vanilla_path', './vanilla/current'))
|
||||
if not dir_vanilla.is_dir():
|
||||
raise EnvironmentError(dir_vanilla)
|
||||
dir_image = Path('build/image')
|
||||
dir_modimage = dir_image/mod_name
|
||||
dir_src_raw = Path('src/raw')
|
||||
dir_src_raw_files = RawFiles(
|
||||
files(Path(dir_src_raw).rglob("*")),
|
||||
src_path = dir_src_raw,
|
||||
image_path = dir_image
|
||||
src_path=dir_src_raw,
|
||||
image_path=dir_image
|
||||
)
|
||||
dir_patches_path = Path('src/patches')
|
||||
dir_patchwork_path = Path('build/patched')
|
||||
@ -153,26 +170,26 @@ patchwork = Patchwork(
|
||||
'map/definition.csv': 'map_definition.patch',
|
||||
'history/countries/ISR - Israel.txt': 'history_countries_ISR.patch',
|
||||
'history/states/454-Israel.txt': 'history_states_454.patch',
|
||||
},
|
||||
patches_path = dir_patches_path,
|
||||
patchwork_path = dir_patchwork_path,
|
||||
vanilla_path = dir_vanilla
|
||||
},
|
||||
patches_path=dir_patches_path,
|
||||
patchwork_path=dir_patchwork_path,
|
||||
vanilla_path=dir_vanilla
|
||||
)
|
||||
|
||||
patchwork_scripted = ScriptedPatchwork(
|
||||
source_file = dir_patches_path/'extrapoint.yaml',
|
||||
patches_path = '.',
|
||||
patchwork_path = dir_patchwork_path,
|
||||
vanilla_path = dir_vanilla
|
||||
source_file=dir_patches_path/'extrapoint.yaml',
|
||||
patches_path='.',
|
||||
patchwork_path=dir_patchwork_path,
|
||||
vanilla_path=dir_vanilla
|
||||
)
|
||||
|
||||
patchwork_raster = RasterPatchwork(
|
||||
{
|
||||
'map/terrain.bmp' : 'terrain.bmp',
|
||||
'map/terrain.bmp': 'terrain.bmp',
|
||||
},
|
||||
patches_path = dir_patches_path,
|
||||
patchwork_path = dir_patchwork_path,
|
||||
vanilla_path = dir_vanilla
|
||||
patches_path=dir_patches_path,
|
||||
patchwork_path=dir_patchwork_path,
|
||||
vanilla_path=dir_vanilla
|
||||
)
|
||||
|
||||
patch_set = Patchset(
|
||||
@ -182,9 +199,10 @@ patch_set = Patchset(
|
||||
patchwork_scripted,
|
||||
patchwork_raster,
|
||||
),
|
||||
modimage_path = dir_modimage
|
||||
modimage_path=dir_modimage
|
||||
)
|
||||
|
||||
|
||||
def task_patch_history_states_scripted():
|
||||
def history_state_patch(task, provinces):
|
||||
source = Path(next(iter(task.file_dep)))
|
||||
@ -195,45 +213,50 @@ def task_patch_history_states_scripted():
|
||||
with source.open(newline='') as infile, target.open('w') as outfile:
|
||||
for line_in in infile:
|
||||
outfile.write(line_in)
|
||||
seen_history = seen_history or ( 'history' in line_in )
|
||||
seen_history = seen_history or ('history' in line_in)
|
||||
if not wrote_history and seen_history and '{' in line_in:
|
||||
for province_id, province_info in provinces.items():
|
||||
outfile.write(
|
||||
"\t\tvictory_points = {\r\n"\
|
||||
f"\t\t\t{province_id} {province_info['points']}\r\n"\
|
||||
"\t\t}\r\n"\
|
||||
"\t\tvictory_points = {\r\n"
|
||||
f"\t\t\t{province_id} {
|
||||
province_info['points']}\r\n"
|
||||
"\t\t}\r\n"
|
||||
)
|
||||
wrote_history = True
|
||||
for state_src, state_data in patchwork_scripted.items():
|
||||
for state_src, state_data in patchwork_scripted.items():
|
||||
yield {
|
||||
'name' : state_src,
|
||||
'file_dep' : [ patchwork_scripted.key_vanilla(state_src) ],
|
||||
'targets' : [ patchwork_scripted.key_target(state_src) ],
|
||||
'actions' : [ ( history_state_patch, [], {'provinces' : state_data}) ],
|
||||
'clean' : True
|
||||
'name': state_src,
|
||||
'file_dep': [patchwork_scripted.key_vanilla(state_src)],
|
||||
'targets': [patchwork_scripted.key_target(state_src)],
|
||||
'actions': [(history_state_patch, [], {'provinces': state_data})],
|
||||
'clean': True
|
||||
}
|
||||
|
||||
|
||||
def task_patch_raster():
|
||||
yield from patchwork_raster.tasks([patchwork_raster.patch_action])
|
||||
|
||||
|
||||
def task_patch():
|
||||
def mkdir(target, original, patch):
|
||||
Path(target).parent.mkdir(parents=True, exist_ok=True)
|
||||
yield from patchwork.tasks([
|
||||
mkdir,
|
||||
"patch -u --binary -N -o '{target}' '{original}' '{patch}'"
|
||||
])
|
||||
mkdir,
|
||||
"patch -u --binary -N -o '{target}' '{original}' '{patch}'"
|
||||
])
|
||||
|
||||
|
||||
def task_image():
|
||||
return {
|
||||
'file_dep' : list(patch_set.image_sources()),
|
||||
'targets' : list(patch_set.image_files()),
|
||||
'actions' : [f"mkdir -p {dir_modimage}",
|
||||
f"rsync -rv {dir_src_raw}/ {patchwork.patchwork_path}/"\
|
||||
f" {dir_modimage}/" ],
|
||||
'clean' : True
|
||||
'file_dep': list(patch_set.image_sources()),
|
||||
'targets': list(patch_set.image_files()),
|
||||
'actions': [f"mkdir -p {dir_modimage}",
|
||||
f"rsync -rv {dir_src_raw}/ {patchwork.patchwork_path}/"
|
||||
f" {dir_modimage}/"],
|
||||
'clean': True
|
||||
}
|
||||
|
||||
|
||||
def task_image_mod():
|
||||
def prepare_modname_mod(task):
|
||||
source = Path(next(iter(task.file_dep)))
|
||||
@ -244,18 +267,19 @@ def task_image_mod():
|
||||
o.write(s.read())
|
||||
o.write(f"\npath=\"{mod_install_path}\"\n")
|
||||
return {
|
||||
'file_dep' : [ 'src/raw/descriptor.mod' ],
|
||||
'targets' : [f"{dir_image}/{mod_name}.mod" ],
|
||||
'actions' : [ prepare_modname_mod ],
|
||||
'clean' : True
|
||||
'file_dep': ['src/raw/descriptor.mod'],
|
||||
'targets': [f"{dir_image}/{mod_name}.mod"],
|
||||
'actions': [prepare_modname_mod],
|
||||
'clean': True
|
||||
}
|
||||
|
||||
|
||||
def task_build():
|
||||
return {
|
||||
'file_dep' : [f"{dir_image}/{mod_name}.mod" ] + list (patch_set.image_files()),
|
||||
'targets' : [f"{dir_image}/{mod_name}.zip" ],
|
||||
'actions' : [ "rm -f %(targets)s",
|
||||
f"cd {dir_image} && zip -r {mod_name}.zip {mod_name}",
|
||||
f"cd {dir_image} && zip -r {mod_name}.zip {mod_name}.mod" ],
|
||||
'clean' : [ 'rm -rf build' ]
|
||||
'file_dep': [f"{dir_image}/{mod_name}.mod"] + list(patch_set.image_files()),
|
||||
'targets': [f"{dir_image}/{mod_name}.zip"],
|
||||
'actions': ["rm -f %(targets)s",
|
||||
f"cd {dir_image} && zip -r {mod_name}.zip {mod_name}",
|
||||
f"cd {dir_image} && zip -r {mod_name}.zip {mod_name}.mod"],
|
||||
'clean': ['rm -rf build']
|
||||
}
|
||||
|
||||
@ -1,565 +1,506 @@
|
||||
#454:
|
||||
# 1015:
|
||||
# points: 1
|
||||
# l_russian: Элат
|
||||
728:
|
||||
11981:
|
||||
l_russian: Чжаньцзян
|
||||
points: 1
|
||||
l_russian: Чжаньцзян
|
||||
593:
|
||||
9970:
|
||||
l_russian: Шаогуань
|
||||
points: 1
|
||||
l_russian: Шаогуань
|
||||
604:
|
||||
4964:
|
||||
l_russian: Юйшу
|
||||
points: 1
|
||||
l_russian: Юйшу
|
||||
755:
|
||||
10796:
|
||||
l_russian: Голмуд
|
||||
points: 1
|
||||
l_russian: Голмуд
|
||||
756:
|
||||
7971:
|
||||
l_russian: Сучжоу
|
||||
points: 1
|
||||
l_russian: Сучжоу
|
||||
760:
|
||||
4704:
|
||||
l_russian: Хами
|
||||
points: 1
|
||||
l_russian: Хами
|
||||
759:
|
||||
2074:
|
||||
l_russian: Чарклык
|
||||
points: 1
|
||||
l_russian: Чарклык
|
||||
322:
|
||||
7926:
|
||||
l_russian: Сэни
|
||||
points: 1
|
||||
l_russian: Сэни
|
||||
758:
|
||||
5094:
|
||||
l_russian: Гегьэ
|
||||
points: 1
|
||||
l_russian: Гегьэ
|
||||
746:
|
||||
3427:
|
||||
l_russian: Ордос
|
||||
points: 1
|
||||
l_russian: Ордос
|
||||
621:
|
||||
4525:
|
||||
l_russian: Хундлун
|
||||
points: 1
|
||||
l_russian: Хундлун
|
||||
612:
|
||||
12348:
|
||||
l_russian: Шилин-Хото
|
||||
points: 1
|
||||
l_russian: Шилин-Хото
|
||||
609:
|
||||
900:
|
||||
l_russian: Таншань
|
||||
points: 1
|
||||
l_russian: Таншань
|
||||
610:
|
||||
11801:
|
||||
l_russian: Чэндэ
|
||||
points: 1
|
||||
l_russian: Чэндэ
|
||||
761:
|
||||
7697:
|
||||
l_russian: Маньчжурия
|
||||
points: 1
|
||||
l_russian: Маньчжурия
|
||||
714:
|
||||
4506:
|
||||
l_russian: Цицикар
|
||||
points: 1
|
||||
l_russian: Цицикар
|
||||
717:
|
||||
6811:
|
||||
l_russian: Муданьцзян
|
||||
points: 1
|
||||
l_russian: Муданьцзян
|
||||
818:
|
||||
1774:
|
||||
points: 1
|
||||
l_russian: Ховд
|
||||
817:
|
||||
12669:
|
||||
points: 1
|
||||
l_russian: Даланзадгад
|
||||
323:
|
||||
7374:
|
||||
l_russian: Бирендранагар
|
||||
points: 1
|
||||
l_russian: Бирендранагар
|
||||
432:
|
||||
12366:
|
||||
l_russian: Гувахати
|
||||
points: 1
|
||||
l_russian: Гувахати
|
||||
434:
|
||||
1116:
|
||||
l_russian: Итанагар
|
||||
points: 1
|
||||
l_russian: Итанагар
|
||||
426:
|
||||
10088:
|
||||
points: 1
|
||||
l_russian: Кендрапара
|
||||
points: 1
|
||||
10116:
|
||||
l_russian: Бхубанешвар
|
||||
points: 1
|
||||
l_russian: Бхубанешвар
|
||||
441:
|
||||
8005:
|
||||
l_russian: Лех
|
||||
points: 1
|
||||
l_russian: Лех
|
||||
424:
|
||||
4321:
|
||||
l_russian: Гунтур
|
||||
points: 1
|
||||
l_russian: Гунтур
|
||||
442:
|
||||
7260:
|
||||
l_russian: Коломбо
|
||||
points: 1
|
||||
l_russian: Коломбо
|
||||
320:
|
||||
10149:
|
||||
l_russian: Пондичерри
|
||||
points: 1
|
||||
l_russian: Пондичерри
|
||||
437:
|
||||
2105:
|
||||
l_russian: Индаур
|
||||
points: 1
|
||||
l_russian: Индаур
|
||||
436:
|
||||
10801:
|
||||
points: 1
|
||||
l_russian: Джабалпур
|
||||
points: 1
|
||||
859:
|
||||
12702:
|
||||
l_russian: Даммам
|
||||
points: 1
|
||||
856:
|
||||
5037:
|
||||
l_russian: Мекка
|
||||
points: 1
|
||||
855:
|
||||
12455:
|
||||
l_russian: Табук
|
||||
points: 1
|
||||
l_russian: Табук
|
||||
678:
|
||||
8118:
|
||||
l_russian: Эль-Убайла
|
||||
points: 1
|
||||
l_russian: Эль-Убайла
|
||||
854:
|
||||
10901:
|
||||
l_russian: Эль-Джауф
|
||||
points: 1
|
||||
l_russian: Эль-Джауф
|
||||
858:
|
||||
8030:
|
||||
l_russian: Шарура
|
||||
points: 1
|
||||
l_russian: Шарура
|
||||
294:
|
||||
2103:
|
||||
l_russian: Салала
|
||||
points: 1
|
||||
l_russian: Салала
|
||||
667:
|
||||
12234:
|
||||
l_russian: Пайети
|
||||
points: 1
|
||||
l_russian: Пайети
|
||||
721:
|
||||
12190:
|
||||
l_russian: Дили
|
||||
points: 1
|
||||
l_russian: Дили
|
||||
668:
|
||||
1574:
|
||||
l_russian: Пиру
|
||||
points: 1
|
||||
l_russian: Пиру
|
||||
738:
|
||||
4579:
|
||||
l_russian: Ларат
|
||||
points: 1
|
||||
l_russian: Ларат
|
||||
626:
|
||||
4429:
|
||||
l_russian: Пуэрто-Принсеса
|
||||
points: 1
|
||||
l_russian: Пуэрто-Принсеса
|
||||
625:
|
||||
1311:
|
||||
l_russian: Лаоанг
|
||||
points: 1
|
||||
l_russian: Лаоанг
|
||||
873:
|
||||
5198:
|
||||
l_russian: Эроманга
|
||||
points: 1
|
||||
l_russian: Эроманга
|
||||
872:
|
||||
4648:
|
||||
l_russian: Уэйпа
|
||||
points: 1
|
||||
l_russian: Уэйпа
|
||||
870:
|
||||
8209:
|
||||
l_russian: Дерби
|
||||
points: 1
|
||||
l_russian: Дерби
|
||||
871:
|
||||
8200:
|
||||
l_russian: Норсмен
|
||||
points: 1
|
||||
l_russian: Норсмен
|
||||
555:
|
||||
1399:
|
||||
points: 1
|
||||
l_russian: Касивабара
|
||||
points: 1
|
||||
512:
|
||||
10953:
|
||||
l_russian: Комодоро-Ривадавия
|
||||
points: 1
|
||||
511:
|
||||
8215:
|
||||
l_russian: Мендоса
|
||||
points: 1
|
||||
509:
|
||||
2106:
|
||||
l_russian: Корриентес
|
||||
points: 1
|
||||
688:
|
||||
10973:
|
||||
l_russian: Фуэрто-Олимпо
|
||||
points: 1
|
||||
507:
|
||||
2161:
|
||||
l_russian: Койаке
|
||||
points: 1
|
||||
300:
|
||||
1613:
|
||||
points: 1
|
||||
l_russian: Куртина
|
||||
points: 1
|
||||
503:
|
||||
8181:
|
||||
l_russian: Куритиба
|
||||
points: 1
|
||||
504:
|
||||
2181:
|
||||
l_russian: Кампу-Гранди
|
||||
points: 1
|
||||
280:
|
||||
11010:
|
||||
l_russian: Педрас-Неграс
|
||||
points: 1
|
||||
495:
|
||||
10934:
|
||||
l_russian: Манаус
|
||||
points: 1
|
||||
487:
|
||||
12973:
|
||||
l_russian: Тринидад
|
||||
points: 1
|
||||
494:
|
||||
5166:
|
||||
l_russian: Куско
|
||||
points: 1
|
||||
490:
|
||||
8149:
|
||||
l_russian: Икитос
|
||||
points: 1
|
||||
491:
|
||||
12869:
|
||||
l_russian: Тарма
|
||||
points: 1
|
||||
486:
|
||||
12729:
|
||||
l_russian: Миту
|
||||
points: 1
|
||||
649:
|
||||
5023:
|
||||
l_russian: Пуэрто-Вильямиль
|
||||
points: 1
|
||||
l_russian: Пуэрто-Вильямиль
|
||||
740:
|
||||
7259:
|
||||
l_russian: Виктория
|
||||
points: 1
|
||||
l_russian: Виктория
|
||||
471:
|
||||
10548:
|
||||
l_russian: Принс-Руперт
|
||||
points: 1
|
||||
l_russian: Принс-Руперт
|
||||
472:
|
||||
10527:
|
||||
l_russian: Йеллоунайф
|
||||
points: 1
|
||||
l_russian: Йеллоунайф
|
||||
469:
|
||||
4739:
|
||||
l_russian: Саскатун
|
||||
points: 1
|
||||
l_russian: Саскатун
|
||||
865:
|
||||
6779:
|
||||
l_russian: Ла-Лош
|
||||
points: 1
|
||||
l_russian: Ла-Лош
|
||||
683:
|
||||
10721:
|
||||
l_russian: Ранкин-Инлет
|
||||
points: 1
|
||||
l_russian: Ранкин-Инлет
|
||||
867:
|
||||
5239:
|
||||
l_russian: Черчилл
|
||||
points: 1
|
||||
l_russian: Черчилл
|
||||
682:
|
||||
6510:
|
||||
l_russian: Садбери
|
||||
points: 1
|
||||
l_russian: Садбери
|
||||
466:
|
||||
13196:
|
||||
l_russian: Форт-Джордж
|
||||
points: 1
|
||||
l_russian: Форт-Джордж
|
||||
866:
|
||||
761:
|
||||
l_russian: Аттавапискат
|
||||
points: 1
|
||||
l_russian: Аттавапискат
|
||||
332:
|
||||
12503:
|
||||
l_russian: Хаппи-Валли
|
||||
points: 1
|
||||
l_russian: Хаппи-Валли
|
||||
860:
|
||||
10715:
|
||||
l_russian: Сет-Иль
|
||||
points: 1
|
||||
l_russian: Сет-Иль
|
||||
861:
|
||||
1657:
|
||||
l_russian: Сагеней
|
||||
points: 1
|
||||
l_russian: Сагеней
|
||||
862:
|
||||
12205:
|
||||
l_russian: Валь-д’Ор
|
||||
points: 1
|
||||
l_russian: Валь-д’Ор
|
||||
863:
|
||||
7893:
|
||||
l_russian: Шибугамо
|
||||
points: 1
|
||||
l_russian: Шибугамо
|
||||
465:
|
||||
4285:
|
||||
l_russian: Сент-Джон
|
||||
points: 1
|
||||
l_russian: Сент-Джон
|
||||
331:
|
||||
12505:
|
||||
l_russian: Сент-Джонс
|
||||
points: 1
|
||||
l_russian: Сент-Джонс
|
||||
381:
|
||||
4723:
|
||||
l_russian: Шайенн
|
||||
points: 1
|
||||
l_russian: Шайенн
|
||||
379:
|
||||
4799:
|
||||
l_russian: Лас-Вегас
|
||||
points: 1
|
||||
l_russian: Лас-Вегас (нарисовать город)
|
||||
230:
|
||||
4660:
|
||||
l_russian: Мегри
|
||||
points: 1
|
||||
l_russian: Мегри
|
||||
262:
|
||||
10723:
|
||||
l_russian: Печора
|
||||
points: 1
|
||||
l_russian: Печора
|
||||
581:
|
||||
12502:
|
||||
l_russian: Воркута
|
||||
points: 1
|
||||
l_russian: Воркута
|
||||
249:
|
||||
11496:
|
||||
points: 1
|
||||
l_russian: Чистополь
|
||||
points: 1
|
||||
9385:
|
||||
l_russian: Набережные Челны
|
||||
points: 1
|
||||
l_russian: Набережные Челны
|
||||
215:
|
||||
3189:
|
||||
points: 1
|
||||
l_russian: Кемь
|
||||
points: 1
|
||||
9055:
|
||||
l_russian: Онега
|
||||
points: 1
|
||||
l_russian: Онега
|
||||
652:
|
||||
12128:
|
||||
l_russian: Оренбург
|
||||
points: 1
|
||||
l_russian: Оренбург
|
||||
881:
|
||||
4389:
|
||||
l_russian: Караганда
|
||||
points: 1
|
||||
l_russian: Караганда
|
||||
824:
|
||||
10536:
|
||||
l_russian: Новый Урегой
|
||||
points: 1
|
||||
l_russian: Новый Урегой
|
||||
878:
|
||||
2900:
|
||||
l_russian: Хатанга
|
||||
points: 1
|
||||
l_russian: Хатанга
|
||||
577:
|
||||
12672:
|
||||
l_russian: Сургут
|
||||
points: 1
|
||||
l_russian: Сургут
|
||||
576:
|
||||
12655:
|
||||
l_russian: Енисейск
|
||||
points: 1
|
||||
l_russian: Енисейск
|
||||
567:
|
||||
1803:
|
||||
l_russian: Братск
|
||||
points: 1
|
||||
l_russian: Братск
|
||||
575:
|
||||
7726:
|
||||
l_russian: Киренск
|
||||
points: 1
|
||||
l_russian: Киренск
|
||||
876:
|
||||
1722:
|
||||
l_russian: Удачный
|
||||
points: 1
|
||||
l_russian: Удачный
|
||||
561:
|
||||
12657:
|
||||
l_russian: Благовещенск
|
||||
points: 1
|
||||
l_russian: Благовещенск
|
||||
657:
|
||||
4725:
|
||||
points: 1
|
||||
l_russian: Амурск
|
||||
points: 1
|
||||
4246:
|
||||
l_russian: Биробиджан
|
||||
points: 1
|
||||
l_russian: Биробиджан
|
||||
560:
|
||||
12559:
|
||||
l_russian: Николаевск-на-Амур
|
||||
points: 1
|
||||
l_russian: Николаевск-на-Амуре
|
||||
655:
|
||||
855:
|
||||
l_russian: Оха
|
||||
points: 1
|
||||
l_russian: Оха
|
||||
562:
|
||||
12551:
|
||||
l_russian: Охотск
|
||||
points: 1
|
||||
l_russian: Охотск
|
||||
637:
|
||||
7878:
|
||||
l_russian: Петропавловск-Камчатский
|
||||
points: 1
|
||||
l_russian: Петропавловск-Камчатский
|
||||
449:
|
||||
4047:
|
||||
l_russian: Сурт
|
||||
points: 1
|
||||
l_russian: Сурт
|
||||
662:
|
||||
8069:
|
||||
l_russian: Марада
|
||||
points: 1
|
||||
l_russian: Марада
|
||||
663:
|
||||
7063:
|
||||
l_russian: Адждабия
|
||||
points: 1
|
||||
l_russian: Адждабия
|
||||
661:
|
||||
11940:
|
||||
points: 1
|
||||
l_russian: Бени-Валид
|
||||
points: 1
|
||||
899:
|
||||
8136:
|
||||
l_russian: Ондангва
|
||||
points: 1
|
||||
2012:
|
||||
l_russian: Кениеба
|
||||
points: 1
|
||||
l_russian: Кениеба
|
||||
898:
|
||||
7954:
|
||||
l_russian: Гао
|
||||
points: 1
|
||||
l_russian: Гао
|
||||
900:
|
||||
8034:
|
||||
l_russian: Порт-Харкорт
|
||||
points: 1
|
||||
l_russian: Порт=Харкорт
|
||||
902:
|
||||
4972:
|
||||
l_russian: Хадеджиа
|
||||
points: 1
|
||||
l_russian: Хадеджиа
|
||||
901:
|
||||
4997:
|
||||
l_russian: Майдугури
|
||||
points: 1
|
||||
l_russian: Майдугури
|
||||
551:
|
||||
2046:
|
||||
l_russian: Бербер
|
||||
points: 1
|
||||
l_russian: Бербер
|
||||
886:
|
||||
12887:
|
||||
l_russian: Эд-Дамазин
|
||||
points: 1
|
||||
l_russian: Эд-Дамазин
|
||||
887:
|
||||
5060:
|
||||
l_russian: Эль-Фашер
|
||||
points: 1
|
||||
l_russian: Эль-Фашер
|
||||
549:
|
||||
10827:
|
||||
l_russian: Бабануса
|
||||
points: 1
|
||||
l_russian: Бабануса
|
||||
885:
|
||||
10764:
|
||||
l_russian: Ямбио
|
||||
points: 1
|
||||
l_russian: Ямбио
|
||||
903:
|
||||
10761:
|
||||
l_russian: Гарисса
|
||||
points: 1
|
||||
l_russian: Гарисса
|
||||
904:
|
||||
11145:
|
||||
l_russian: Лодвар
|
||||
points: 1
|
||||
l_russian: Лодвар
|
||||
546:
|
||||
8144:
|
||||
points: 1
|
||||
l_russian: Кигома
|
||||
points: 1
|
||||
12911:
|
||||
l_russian: Додома
|
||||
points: 1
|
||||
l_russian: Додома
|
||||
896:
|
||||
2120:
|
||||
l_russian: Бейра
|
||||
points: 1
|
||||
l_russian: Бейра
|
||||
897:
|
||||
2123:
|
||||
l_russian: Мозамбик
|
||||
points: 1
|
||||
l_russian: Мозамбик
|
||||
708:
|
||||
13072:
|
||||
l_russian: Нгазиджа
|
||||
points: 1
|
||||
l_russian: Нгазиджа
|
||||
706:
|
||||
13017:
|
||||
l_russian: Сен-Дени
|
||||
points: 1
|
||||
l_russian: Сен-Дени
|
||||
707:
|
||||
13018:
|
||||
l_russian: Порт-Луи
|
||||
points: 1
|
||||
l_russian: Порт-Луи
|
||||
543:
|
||||
5222:
|
||||
l_russian: Анциранана
|
||||
points: 1
|
||||
l_russian: Анциранана
|
||||
893:
|
||||
10963:
|
||||
l_russian: Аус
|
||||
points: 1
|
||||
l_russian: Аус
|
||||
894:
|
||||
10957:
|
||||
l_russian: Оучо
|
||||
points: 1
|
||||
l_russian: Оучо
|
||||
891:
|
||||
1552:
|
||||
l_russian: Куши
|
||||
points: 1
|
||||
l_russian: Куши
|
||||
888:
|
||||
9986:
|
||||
l_russian: Кананга
|
||||
points: 1
|
||||
l_russian: Кананга
|
||||
538:
|
||||
10071:
|
||||
l_russian: Мбандака
|
||||
points: 1
|
||||
l_russian: Мбандака
|
||||
718:
|
||||
1950:
|
||||
l_russian: Кисангани
|
||||
points: 1
|
||||
l_russian: Кисангани
|
||||
890:
|
||||
1181:
|
||||
points: 1
|
||||
l_russian: Гома
|
||||
points: 1
|
||||
565:
|
||||
7759:
|
||||
l_russian: Бодайбо
|
||||
points: 1
|
||||
505:
|
||||
5208:
|
||||
l_russian: Гояния
|
||||
points: 1
|
||||
848:
|
||||
6680:
|
||||
l_russian: Брегенц
|
||||
points: 1
|
||||
231:
|
||||
3658:
|
||||
l_russian: Кутаиси
|
||||
points: 1
|
||||
525:
|
||||
11948:
|
||||
l_russian: Мокихо
|
||||
points: 1
|
||||
11977:
|
||||
points: 1
|
||||
l_russian: Тэджон
|
||||
11948:
|
||||
points: 1
|
||||
l_russian: Хэнам
|
||||
527:
|
||||
6928:
|
||||
l_russian: Ханнам
|
||||
6928:
|
||||
points: 1
|
||||
l_russian: Хыннам
|
||||
486:
|
||||
12825:
|
||||
points: 1
|
||||
l_russian: Летисия
|
||||
598:
|
||||
1076:
|
||||
points: 1
|
||||
l_russian: Сучжоу
|
||||
614:
|
||||
4190:
|
||||
points: 1
|
||||
l_russian: Тяньцзинь
|
||||
|
||||
Loading…
Reference in New Issue
Block a user