hoiv1.14.1.e4e7 #9

Open
tea wants to merge 3 commits from hoiv1.14.1.e4e7 into main
3 changed files with 238 additions and 272 deletions
Showing only changes of commit 3c76eb4844 - Show all commits

1
.gitignore vendored
View File

@ -7,3 +7,4 @@
__pycache__
.doit.db
*.kate-swp
/vanilla

154
dodo.py
View File

@ -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']
}

View File

@ -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: Тяньцзинь