Hearts of Iron IV

Hearts of Iron IV

Ocen: 652
Как сделать Мод
Autorstwa: Kengelet
Руководство по созданию мода
3
23
2
7
4
4
2
2
2
2
   
Przyznaj nagrodę
Ulubione
Ulubione
Usuń z ulubionych
Начало Мода
Запускаем Игру

Переходим во вкладку "Модификации"

Затем нажимаем на кнопку "Инструменты модификаций"
Нажимаем на кнопку "Создать модификацию"

Называем наш мод
Вписываем версию мода
И создаем папку (называют еще каталог)






















Тэги (Метки мода)
Alternative History - Альтернативная история
Balance - Баланс
Events - Евенты
Fixes - Исправления (Фикс)
Gameplay - Игровой Процесс
Graphics - Графика
Historical - Исторические
Ideologies - Идеология
Map - Карта
Military - Военные (?)
National Focuses - Национальные Фокусы
Sound - Звук
Technologies - Технологии
Translation - Перевод
Utilities - Утилиты


После этого нажимаем на кнопку "Создать Мод"

И идем по этому пути - C:\Users\ЮЗЕР\Documents\Paradox Interactive\Hearts of Iron IV\mod\ВАШ МОД
Начало создание страны



Cоздаем файл history
В history создаем две папки: countries и states

Теперь идем в оригинальную игру и ищем папку history
Теперь все, что есть в states копируем в нашу, модовую папку states

А теперь идем в нашу модовую папку countries
Создаем txt файл по типу "Тег страны" - "Название страны" (Типо GEG - Gerger)

Тег страны - Так сказать оно нужно чтобы контактировать с страной
Название страны - Нужен только в двух вещях

Этот файл мы будем называть "Файл страны"

Открываем наш файл Файл страны через Atom или Notepad++
Копируем все это в наш файл

capital = 5 ##Наша столица oob = "GEG_1936" ##GEG - Тег, заменить set_research_slots = 3 #Количество ячеек исследования # Технологии, какие будут открыты при старте set_technology = { infantry_weapons = 1 infantry_weapons1 = 1 tech_recon = 1 tech_support = 1 tech_engineers = 1 tech_military_police = 1 tech_mountaineers = 1 motorised_infantry = 1 paratroopers = 1 gw_artillery = 1 gwtank = 1 basic_light_tank = 1 # PLACEHOLDER early_fighter = 1 fighter1 = 1 early_bomber = 1 strategic_bomber1 = 1 naval_bomber1 = 1 mass_assault = 1 fleet_in_being = 1 } set_politics = { ruling_party = communism ##Рулевая партия last_election = "1936.1.1" ##Последние выборы (если есть) election_frequency = 48 ##Через сколько проводят выборы elections_allowed = no ##Есть ли выборы } set_popularities = { democratic = 15 ##Демократия neutrality = 20 ##Нейтралитет communism = 60 ##Коммунизм fascism = 5 ##Фашизм } create_country_leader = { name = "Vasil Zacharka" desc = "" picture = "gfx/leaders/Europe/Portrait_Europe_Generic_3.dds" expire = "1965.1.1" ideology = centrism traits = { # } } # Лидер Страны create_country_leader = { name = "Mega Lider" desc = "" picture = "gfx/leaders/Europe/Portrait_Europe_Generic_land_3.dds" #Картинка expire = "1965.1.1" #Когда умрет ideology = stalinism ##За какую Идеологию (входит в types у коммунистов) #conservatism, liberalism и socialism - демократия #marxism, leninism, stalinism, anti_revisionism, anarchist_communism - коммунизм #nazism, fascism_ideology, falangism, rexism - национализм #despotism, oligarchism, moderatism и moderatism - нейтралитет traits = { # } } }
# - это комментарий

Теперь создаем папку common
В папке "common" создаем папку country_tags и countries"

В нашу папку coutry_tags копируем из оригинальной игры файл country_tags\00_countries.txt

Открываем 00_countries.txt и идем в вниз
Пишем
"Тег страны" = "countries/"Название страны".txt"
Пример GEG = "countries/Gerger.txt"

Цвет страны

Теперь открываем папку "countries"
Создаем txt файл "Название страны"
Пример "Germen"







Теперь пишем:

graphical_culture = eastern_european_gfx graphical_culture_2d = eastern_european_2d

После этого Пишем;
color = rgb { R G B } ##Цвет на политической карте

RGB Это цвет нашей Страны
Если мы напишем color = rgb { 0 0 0 ] то это черный
Если мы напишем color = rgb { 0 255 0 } то это Ярко-Зеленый
Также можно использовать спец. сайты
Adobe Color[color.adobe.com]

Теперь идем в оригинальную игру по пути common/countries/ и копируем colors.txt в наш countries

Открываем, идем в самый вниз и пишем
"Тег" = { ##Например GEG color = rgb { R G B } color_ui = rgb { R G B } ##Цвета Границы }

Области

Идем в по пути \history\states и видим уже заранее заготовленные Области

Теперь нам нужна id области, которые хотим отжать у других стран во славу нашей страны
Что бы узнать какой Вам нужен id - Список областей[hoi4.paradoxwikis.com]

Когда определились с id, пишем его в поисковике и находим
Когда нашли открываем его
А теперь поподробнее
state={ id=5 ##Id Области name="STATE_5" ##Id Области для локализации manpower = 3378108 ##Численость области state_category = large_city ##Тип области history={ owner = GER ##Контролирует область controller = GER ##Необязательно victory_points = { ##Победные очки в регионе (6332 - регион 10 - победные очки) 6332 10 } buildings = { ##Постройки infrastructure = 6 ##Инфраструктура industrial_complex = 2 ##Заводы народа 6332 = { bunker = 1 ##Бункер в регионе (6332 - регион) } anti_air_building = 2 ##Анти-аир 6332 = { naval_base = 5 ##Верфь в регионе (6332 - регион) } air_base = 6 ##Уровень воздушной базы } add_core_of = GER ##Потомственно принадлежит 1939.1.1 = { ##Если запуск произошел за 1939.1.1 и более buildings = { anti_air_building = 5 ##Анти аир = 5 } } } provinces={ ##Номера регионов входящих в Область 266 281 348 395 3351 3380 3384 6332 6375 6402 9327 9346 9372 9398 11245 11265 11386 } }

Нам нужно заменить только GER (или другой тег) на ваш

Теперь идем снова в \history\countries в Файл страны
Изменяем capital = "Id области"
Пример capital = 5
Это и будет ваша столица

Локализация

Создаем папку localisation








Копируем файл countries_l_russian.yml из localisation оригинальной игры в нашу папку

Открываем
Идем в конец
Пишем
Тег_communism:0 "Название страны при Комунизме" Тег_communism_DEF:0 "Название страны при Комунизме для Евентов" Тег_communism_ADJ:0 "Название страны при Комунизме сокращенно" Тег_democratic:0 "Название страны при Демократии" Тег_democratic_DEF:0 "Название страны при Демократии для Евентов" Тег_democratic_ADJ:0 "Название страны при Демократии сокращенно" Тег_fascism:0 "Название страны при Фашизме" Тег_fascism_DEF:0 "Название страны при Фашизме для Евентов" Тег_fascism_ADJ:0 "Название страны при Фашизме сокращенно"
Также файл должен быть в кодировке UTF-8

Страны - Создаем Флаги и Потреты
В Папке мода Создаем папку "gfx"

В Папке "gfx" Создаем две папки: "flags" и "leaders"

В Папке "flags" Создаем две папки: "medium" и "small"

Мы будем Использовать "paint.net" (Это не ссылка)
Нажимаем "Изображение"
Потом "Изменить Размер..."
Откл. "Сохранять Пропоции"
Нажимаем ок





















Вставляем Картинку Нашего Флага и Нажимаем "Увеличить Плотно"













Размеры флагов

Большой Флаг:
Ширина: 82
Высота: 52
Сохраняем Так: /gfx/flags

Средний Флаг:
Ширина: 41
Высота: 26
Сохраняем Так: /gfx/flags/medium

Маленький Флаг:
Ширина: 10
Высота: 7
Сохраняем Так: /gfx/flags/small

Называем флаги так: "Тег"_"Идеалогия" (communism, democratic, fascism, neutrality)
Пример: GEG_communism
В формате "TGA"

Нажимаем На "32 Бита"
Откл. Сжатие






















Как должна выглядить Папка после всего этого:

Потреты

Создаем В Папке "leaders" Папку "Тег Страны" (GEG,ВYВ)

Ищем фото Нашего Лидера
Ну, например Путина/























Потрет нашего лидера должен сохранен быть так
Ширина: 156
Высота: 210
В формате: DDS
Параметры: A8R8G8B8
Сохраняем Так: "Каталог Мода"/gfx/leaders/"Тег Страны"/"Название нашего Лидера" (Например:Mega_Lider)













Идем в Файл страны
Ищем Такой Код
Изменяйте то, что вам нужно изменить
create_country_leader = { name = "Mega Lider" #Имя desc = "POLITICS_MOHAMMED_ZAHIR_SHAH_DESC" picture = "Mega_Lider.dds" #Картинка, прописываем ваш файл который вы сохранили expire = "1965.1.1" #Когда умрет ideology = marxism ##За какую Идеологию (Коммунизм) traits = { # } }

Нац. Фокусы
Создаем в Папке "common" Папку "national_focus" и создаем Файл "Название нашей страны"







Это будет Фокусы Страны

Пишем
focus_tree = { id = "Название страны"_focus ##Пример germen_focus country = { factor = 1 #0 = для всех стран, 1 = для одной } default = yes reset_on_civilwar = no }

Потом добавляем после reset_on_civilwar = no это
focus = { id = Focus_Number_1 icon = GFX_goal_generic_construct_civ_factory x = 8 #По горизонтали y = 0 #По вертикали cost = 10 completrion_reward = { ##Когда фокус выпол. add_tech_bonus = { #Дать бонус name = industrial_bonus ##На индустриальные технологии bonus = 0.5 ##На 50% uses = 1 ##Использовать только 1 раз category = industry } } }

Локализация

Копируем из оригинальной игры файл \localisation\focus_l_russian.yml в нашу папку localisation

Открываем и идем в вниз
Пишем
"Название нашего фокуса":0 "Фокус номер 1" "Название нашего фокуса"_desc:0 "Фокус номер 1 - Описание фокуса"

Наследование

Создадим еще один фокус под Focus_Number_1
focus = { id = Focus_Number_2 icon = GFX_goal_generic_construct_civ_factory prerequisite = { focus = Focus_Number_1 } ##Наследование от Focus_Number_1 x = 0 #По горизонтали y = 1 #По вертикали relative_position_id = Focus_Number_1 ##Наследование позиции cost = 10 available_if_capitulated = yes completion_reward = { add_tech_bonus = { name = industrial_bonus bonus = 0.5 uses = 1 category = industry } } }
Так-же прописываем этому фокусу локализацию

Исключения
Создаем новый фокус по координатам x = 10 y = 1 (а это вы сами)
И после иконки добавляем mutually_exclusive = { focus = "Фокус" }
Например Focus_Number_2

Идем к фокусу который мы хотим с которым мы хотим прописать Исключение
И после иконки пишем
mutually_exclusive = { focus = "Другой фокус где мы прописали Исключения с этим" }
Например Focus_Number_3
Должно получится вот так

Полезные команды:
Focus.AutoComplete - Можно быстро исследовать фокус

Так же более подробно об Фокусах вы можете почитать на Вики[hoi4.paradoxwikis.com] (Англ.)
Заставки к Загрузке
В папке "gfx" Создайте папку "loadingscreens"












Ваши заставки будут тут
Вам нужно только 9 заставок (Главная - 5-ая, Она будет отображатся когда загрузится игра)
Разрешение 1920x1080
Название файлов - load_1 - load_2 - load_3 - load_4 - load_5 - load_6 - load_7 - load_ 8 - load_9
Музыка
В этой главе мы научимся добавлять в игру музыку и радио для них

Создаем радио
Создаем папку interface и копируем из ванили по пути \interface\ два файла -
musicplayer.gfx - В .gfx файлах мы прописываем откуда надо загружать картинки
musicplayer.gui - В .gui файлах мы прописываем интерфейс, аля UI. Нам этот файл кстати не пригодится, поэтому можете его не копировать

Также нам надо придумать название для нашего радио. И для примера мы дадим название "prosto_radio"

Мы снова идем в наш мод по пути \interface\ и создаем файл music_station_название_радио.gui (music_station_prosto_radio.gui)
С кодировкой UTF-8 без BOM

Вставляем код
guiTypes = { containerWindowType = { name = "prosto_radio" position = { x =0 y=0 } size = { width = 590 height = 46 } iconType ={ name ="musicplayer_header_bg" spriteType = "GFX_musicplayer_header_bg" position = { x= 0 y = 0 } allwaystransparent = yes } instantTextboxType = { name = "track_name" position = { x = 72 y = 20 } font = "hoi_20b" text = "Roger Pontare - Nar vindarna viskar mitt namn" maxWidth = 450 maxHeight = 25 format = center } instantTextboxType = { name = "track_elapsed" position = { x = 124 y = 30 } font = "hoi_18b" text = "00:00" maxWidth = 50 maxHeight = 25 format = center } instantTextboxType = { name = "track_duration" position = { x = 420 y = 30 } font = "hoi_18b" text = "02:58" maxWidth = 50 maxHeight = 25 format = center } buttonType = { name = "prev_button" position = { x = 220 y = 20 } quadTextureSprite ="GFX_musicplayer_previous_button" buttonFont = "Main_14_black" Orientation = "LOWER_LEFT" clicksound = click_close pdx_tooltip = "MUSICPLAYER_PREV" } buttonType = { name = "play_button" position = { x = 263 y = 20 } quadTextureSprite ="GFX_musicplayer_play_pause_button" buttonFont = "Main_14_black" Orientation = "LOWER_LEFT" clicksound = click_close } buttonType = { name = "next_button" position = { x = 336 y = 20 } quadTextureSprite ="GFX_musicplayer_next_button" buttonFont = "Main_14_black" Orientation = "LOWER_LEFT" clicksound = click_close pdx_tooltip = "MUSICPLAYER_NEXT" } extendedScrollbarType = { name = "volume_slider" position = { x = 100 y = 45} size = { width = 75 height = 18 } tileSize = { width = 12 height = 12} maxValue =100 minValue =0 stepSize =1 startValue = 50 horizontal = yes orientation = lower_left origo = lower_left setTrackFrameOnChange = yes slider = { name = "Slider" quadTextureSprite = "GFX_scroll_drager" position = { x=0 y = 1 } pdx_tooltip = "MUSICPLAYER_ADJUST_VOL" } track = { name = "Track" quadTextureSprite = "GFX_volume_track" position = { x=0 y = 3 } alwaystransparent = yes pdx_tooltip = "MUSICPLAYER_ADJUST_VOL" } } buttonType = { name = "shuffle_button" position = { x = 425 y = 20 } quadTextureSprite ="GFX_toggle_shuffle_buttons" buttonFont = "Main_14_black" Orientation = "LOWER_LEFT" clicksound = click_close } } containerWindowType={ name = "prosto_radio_stations_entry" size = { width = 162 height = 130 } checkBoxType = { name = "select_station_button" position = { x = 0 y = 0 } quadTextureSprite = "КАРТИНКА" clicksound = decisions_ui_button } } }

Вставляйте свое название за место prosto_radio и сохраняйте

Все должно выглядеть так, кроме названия


Время создать картинку для радио
Создаем папки по такому пути \gfx\interface\topbar\musicplayer\
Запускаем paint net либо что-то другое, создаем файл 304x120 и копируем картинку которая представлена внизу
Может быть конечно не точно вырезано, но да ладно





В первую рамку мы вставляем картинку, когда радио не включено
Во вторую наоборот, когда включено радио

Делаем и сохраняем нашу картинку как dds по типу название_album_art.dds (prosto_album_art.dds)
Открываем musicplayer.gfx, идем вниз и пишим
spriteType = { name = "GFX_prosto_radio_album_art" texturefile = "//gfx//interface//topbar//musicplayer//prosto_radio_album_art.dds" noOfFrames = 2 }
За место prosto_radio - ваше название (просто напоминание)

Идем в music_station_название_радио.gui и находим строчку
quadTextureSprite = "КАРТИНКА"
Пишем что-то, аля GFX_prosto_radio_album_art
quadTextureSprite = "GFX_название_album_art"

Музыка!
Ищем музыку, потом конвертим в формат .ogg

Создаем папки \music\название\
Скидываем туда вашу музыку в .ogg и создавайте два файла
название_music.asset - мы в этом файле указываем путь к музыке
название_soundtrack.txt - в этом файле мы указываем на какой станции будет играть музыка и при каких обстоятельствах
С кодировкой UTF-8 без BOM

Открываем название_music.asset
Копируем
music = { name = "Название" file = "Название вашей музыке.ogg" volume = 0.65 }
И так для всех .ogg

После работы открываем название_soundtrack.txt
Копируем
music_station = "Название_радио" #Только один раз music = { #А это - кнтр с, кнтр в для каждой музыки song = "Название" chance = { factor = 2 #Какая вероятность того, что выпадет именно это музыка. } }
Также есть модификаторы

Это музыка может проигрыватся только если вы играете за Советский союз
music = { song = "Название" chance = { modifier = { factor = 2 tag = SOV } } }

Будет играть эта музыка при условии что нет войны
music = { song = "Название" chance = { modifier = { factor = 1 has_war = no } } }

Ваше правительство - Демократы
music = { song = "Название" chance = { modifier = { factor = 1 has_government = democratic } } }


Локализация
Входим в папку localisation
Копируем music_l_russian.yml и musicplayer_l_russian.yml
В musicplayer_l_russian.yml мы пишем
название_радио_TITLE:0 "Название"
Пример: prosto_radio_TITLE:0 "Просто радио"

В music_l_russian.yml
название_музыки:0 "Название музыки"
Пример: Tachanka:0 "Тачанка"

Евенты
Мне лень делать этот раздел, поэтому вот вам ссылки
Офиц. инфа на вики - https://hoi4.paradoxwikis.com/Event_modding

Видосик на Англ - https://www.youtube.com/watch?v=ItlVZvJ5LAI
Детальный рассказ про Евенты на Англ. - https://www.youtube.com/watch?v=YRDsJRW5eW4&list=PLt_7vUaEvaGTJ0ISBqY2v4EyfmPALiVS7&index=7&t=1958s

Если вы не понимайте Английский, то
Видосик на Русском - https://www.youtube.com/watch?v=EZGIpH8lgiQ
Еще видосик на Русском - https://www.youtube.com/watch?v=GcRS-XUZKuU
Идеологии
Создаем папки - \common\ideologies и копируем 00_ideologies.txt к себе

Копируем не в самый конец и изучаем
anarchist = { types = { anarcho_syndicalism = { # Используется при назначении лидерам идеологии. } } dynamic_faction_names = { "FACTION_NAME_ANARCHIST_1" # Faction names used by the ai when an ai with this ideology creates a faction } color = { 169 42 42 } # RGB Цвет rules = { # Правила для идеологии can_declare_war_on_same_ideology = # Может ли страна объявлять войну с страной у которой та-же идеология. Необязательно. can_force_government = # Страна может изменить идеологию при мирном соглашении. Необходимо написать. can_send_volunteers = # Страна может отправлять добровольцев. Необходимо написать. can_puppet = # Страна может делать марионеточные нации в мирном соглашении. Необходимо написать. can_lower_tension = # Страна понижает мировое напряжение при мирном соглашении. Необязательно. can_only_justify_war_on_threat_country = # Страна может оправдать только нацию, которая создала мировую напряженность/угрозу. Необязательно. can_guarantee_other_ideologies = # Может давать гарантии странам с другими идеологиями. Не требуется } can_host_government_in_exile = no #Может принять правительство в изгнании war_impact_on_world_tension = # Изменяется с -1 на 1. Увеличивает или уменьшает мировое напряжение, созданное этой нацией faction_impact_on_world_tension = # Изменяется от -1 до 1. Увеличивает или уменьшает влияние фракции на мировое напряжение modifiers = { # Модификаторы generate_wargoal_tension = # Требуемая мировая напряженность, чтобы начать оправдывать войну (от 0 до 1) join_faction_tension = # Требуемое мировое напряжение, чтобы присоединиться к фракции (от 0 до 1) lend_lease_tension = # Требуемое напряжение для начала ленд-лиза (от 0 до 1) send_volunteers_tension = # Требуемое напряжение для отправки добровольцев (от 0 до 1) guarantee_tension = # Требуемое напряжение, чтобы гарантировать нацию (от 0 до 1) take_states_cost_factor = # Изменяет стоимость областей в мирном соглашении. 0,25 увеличит стоимость области на 25% (-1 к 1) annex_cost_factor = # Изменяет стоимость полной аннексии нации в мирном соглашении. 0,5 увеличит стоимость аннексии на 50% (-1 к 1) justify_war_goal_when_in_major_war_time = # Изменяет стоимость оправдания войны во время войны. 0,5 уменьшит время на 50% (от 0 до 1) drift_defence_factor = # Естественная защита от других идеологии # 0.3 обеспечит 30% защиту от дрейфа (-1 к 1) puppet_cost_factor = # Изменяет стоимость марионеточной нации в мирном соглашении (-1 к 1) } can_be_boosted = no # Можете ли вы повысить популярность этой идеологии в другой стране can_collaborate = no # Про это ничего не написано faction_modifiers = { #модификаторы faction_trade_opinion_factor = 0.50 #плюс 50% для торгового мнения } ai_<идеология> = yes # Тип поведения ИИ (democratic, communism, fascism, neutral или создайте новую). }
Там много значений пусты, поэтому поставляйте как вам хочется.

Идеология практически готова (кроме иконки/локализаций), надо только прописать в файле стране лидера/соотношение и сделать флаг

Будем делать все эти вещи в файле СССР (можно конечно в другом файле), поэтому копируем его

Ищем где определяются идеологии и изменяем
set_politics = { ruling_party = anarchist last_election = "1933.7.1" election_frequency = 48 elections_allowed = no } set_popularities = { democratic = 20 fascism = 10 communism = 10 anarchist = 60 }

Добавляем флаги

Делаем лидера
create_country_leader = { name = "Not Joseph Stalin" desc = "POLITICS_JOSEPH_STALIN_DESC" picture = "Portrait_Soviet_Joseph_Stalin.dds" expire = "1953.3.1" ideology = anarcho_syndicalism #одно из types traits = { } }

Локализация
Ищем parties_l_russian.yml

Добавляем
anarchist:0 "Анархия" anarchist_noun:0 "Анархия" #Идеология - имя существительное anarchist_desc:0 "Анархия - описание."

Также можно создать "партии" для стран
SOV_anarchist_party:0 "Партия анархия?"

Потом идем в countries_l_russian и пишем название нашей страны при этой идеологии
SOV_anarchist:0 "Анархистская Россия"


Иконка для идеологии

Создаем иконку по 66x68
Сохраняем по пути \gfx\interface\ideologies в формате dds с названием "идеология_group.dds"

Берем файл countrypoliticsview.gfx из ванили
Идем в не совсем конец и пишем
spriteType = { name = "GFX_ideology_идеология_group" texturefile = "gfx/interface/ideologies/идеология_group.dds" }

Иконка сделана (но у меня она получилась темная)
Создание Области
Ну, первым делом идем по этому пути \history\states и спускаемся
Мы видим, что последний "id области" это 762

Создаем новый файл по типу "Id + 1-"Название области""
Например 763-Kaliningrad

Открываем и копируем это
state={ id=763 #Id Области name="STATE_763" #Id Области при локализации manpower = 100000 #Численость state_category = town ##Тип области resources={ #Ресурсы steel=2 } history={ owner = ТЕГ #Принадлежит buildings = { ##Постройки infrastructure = 5 ##Инфраструктура industrial_complex = 1 ##Заводы народа arms_factory = 1 ##Военные Заводы air_base = 2 ##Уровень воздушной базы } add_core_of = ТЕГ ###Потомственно принадлежит } provinces={ #Регионы которые входят в область } }
Заменяйте ТЕГ на ваш Тег

Теперь нам нужно заполнить provinces регионами
Но сначала надо определится откуда мы будем вытаскивать регионы

ID областей[hoi4.paradoxwikis.com]
Либо вы можете посмотреть откуда вы хотите украсть регионы в -debug режиме

Так вот, по уроку мы будем вытаскивать регионы из 5 id области
(ведь у нас Калиниград)
Открываем файл
Смотрим какие регионы мы хотим взять у других областей в нашу
ID регионов[hoi4.paradoxwikis.com]
Удаляем в ориг. файле регионе и перетаскиваем в нашу
(Для создания Калиниграда нам нужны id регионов: 281 348 395 3384 6332 11265)
Границы немного неровные из-за самих регионов

Локализация
Копируем файл state_names_l_russian.yml
Идем вниз и добавляем
STATE_763:0 "Калиниград"

Расположения объектов
Теперь надо перейти в -debug
Как это сделать:
1) Нажимайете на игру в Стими ПКМ
2) Свойства
3) Установить параметры запуска...
4) Написать -debug
5) ???
6) Profit

Теперь у вас появится кнопка "Hudge"


















Нажимаем
Видим это
Теперь надо нажать на "Buildings"
А там нажимаем на "Validate All States", либо на "Find Eroor" и делаем дело (если знаете как)
Нажимаем на Save
Идем по \Documents\Paradox Interactive\Hearts of Iron IV\map
Копируем buildings.txt
Идем в наш Каталог
Создаем папку "map"







И копируем туда buildings.txt

Добавление в supplyareas
Копируем \map\supplyareas в наш map

Ищем к какому стратег. региону мы хотим присоединить
Например 1-SupplyArea.txt
Добавляем наш id области
Вот так

Так же надо эту область добавить в strategicregions (а теперь вы тут сами)
Подробнее Вики (Англ.)[hoi4.paradoxwikis.com]
Ветки технологий
В этой главе мы научимся создавать ветки технологий

На примере мы создадим ветвь улучшения скорости мото дивизий

Создаем отдельную ветвь
Создаем папку \interface\ и копируем countrytechtreeview.gui
Что этот за файл? Это весь интерфейс технологий.

Также создаем папки по этому пути - \common\technologies\
Копируем из \common\technologies\ файл infantry.txt

Открываем infantry.txt, и если мы хотим создать новую ветвь, то пишем следующее. Если вы хотите продолжить ветвь, то идите в подглаву "Продолжение ветки"

improving_logistics= { motorized = { #Увеличиваем скорость для всей категории "motorized" maximum_speed = 0.1 } research_cost = 1.5 #Стоимость start_year = 1938 #Когда можно исследовать без потерь folder = { name = infantry_folder #В какой вкладке position = { x = 2 y = @1938 } #Позиция } categories = { #Категории motorized_equipment } ai_will_do = { #Фактор ИИ factor = 1 } }

"Объяснение всего, что есть в ячейке технологии"
technologies = { <название_технологии> = { # Любой модификатор для страны может быть использован здесь. <модификатор> doctrine = yes # Эта технология - доктрина research_cost = <число> # Стоимость start_year = <год> # В каком году эта технология перестает получать преждевременные штрафы. # Эффекты, применяемые к завершению технологии on_research_complete = { <effects> } show_effect_as_desc = yes # Отображает эффекты в описании. # Изменить свойство юнитов и под-свойств <юнит> = { <свойство> = <число> # Необходимо! <terrain> = { <свойство> <число> } } # Изменить свойство объекта для всей категории <категория> = { <свойство> <value> } # Открыть поддержку (поддержка ПВО/ПТО...) enable_subunits = { <поддержка> } # Открыть вооружение (оружие/корабли/танки...) enable_equipments = { <название_вооружения> } show_equipment_icon = yes # Показать значок оборудования, который разблокирован # Открыть строение enable_building = { building = <строение> level = 1 } # Links technologies in corner. Used for variant technologies of base technology # sub_technologies = { <technology> } # Технологии, использующие эту технологию, зависят от других технологий. dependencies = { <technology> = 1 } # Limits technology visibility if trigger is false. Used for DLC checks. Used for focus-only technologies. allow = { <triggers> } # Limits technology (and linked technologies) visibility if trigger is false. Used for DLC checks. allow_branch = { <triggers> } # Multiple allowed. Controls the links between technologies. path = { leads_to_tech = <technology> research_cost_coeff = <float> } # Used to either-or with other technologies. XOR = { <technology> } # Controls which folder (tab) the technology appears under. folder = { name = <folder name> # Found in countrytechtreeview.gui # Position in the tech tree interface position = { x = 0 y = 0 } } # Which technology categories apply to this technology. categories = { <categories> } # Weighting for the AI to pick the technology ai_will_do = { factor = <float> # Conditional modifier to the factor. modifier = { factor = <float> <triggers> } } # Adjusts weighting depending on taken technology (uses technology tags) ai_research_weights = { <type> = <float> } } } Взято отсюда[hoi4.paradoxwikis.com]

Идем теперь в countrytechtreeview.gui
Ищем следующее

containerWindowType = { name = "infantry_folder" position = { x=0 y=47 } size = { width = 100%% height = 100%% } margin = { top = 13 left = 13 bottom = 24 right = 25} drag_scroll = { left middle } verticalScrollbar = "right_vertical_slider" horizontalScrollbar = "bottom_horizontal_slider"

Крутим вниз пока не обнаруживаем это

gridboxtype = { name = "support_weapons_tree" position = { x = 140 y = 210 } #size = { width = 420 height = 500 } slotsize = { width = 70 height = 70 } format = "LEFT" }
Это начало ветви. Например вот этот именно код определяет начало ветви "помогательного вооружения"

Пишем после всех "gridboxtype" следующее:
gridboxtype = { name = "improving_logistics_tree" #Название_Технологии_tree position = { x = 140 y = 325 } slotsize = { width = 70 height = 70 } format = "LEFT" }





Создаем картинку для технологии
Для технологий которые дают эффекты - 64x64
Для технологий которые открывают оружие - Нет точных размеров
Все в .dds

Копируем из папки interface файл Technologies.gfx в нашу папку
Сохраняем картинку в \gfx\interface\technologies

Открываем Technologies.gfx
Идем в самый конец

Пишем
SpriteType = { name = "GFX_improving_logistics_medium" texturefile = "gfx/interface/technologies/improving_logistics.dds" }


А вот сама картинка исследования


Продолжение ветки

Идем в infantry.txt
И добавляем в структуру improving_logistics следующий код
path = { leads_to_tech = improving_logistics2 research_cost_coeff = 1 }
Этот код говорит нам, что исследование improving_logistics приведет нас к возможности исследования improving_logistics2

После структуры improving_logistics пишем
improving_logistics2 = { motorized = { maximum_speed = 0.1 } research_cost = 1.7 start_year = 1939 folder = { name = infantry_folder position = { x = 2 y = @1939 } } categories = { motorized_equipment } ai_will_do = { factor = 1 } }

У нас появилась новое исследование, но нет иконки.
Так-что вот вам иконка, идите и добавляйте её с помощью верхней подглавы.


Локализация
За локализацию технологий отвечает equipment_l_russian.yml
Копируем и открываем
improving_logistics:0 "Улучшение скорости мото дивизий - Название" improving_logistics_short:0 "Улучшение скорости мото дивизий - Тоже название но в другом месте" improving_logistics_desc:0 "Улучшение скорости мото дивизий - Описание" improving_logistics2:0 "Улучшение скорости мото дивизий II - Название" improving_logistics_short2:0 "Улучшение скорости мото дивизий II - Тоже название но в другом месте" improving_logistics_desc2:0 "Улучшение скорости мото дивизий II - Описание"

Так-же можно создать для разных стран разные названия
ТЭГ_improving_logistics:0 "Улучшение скорости мото дивизий - специальное название для какой-то страны"

Делаем картинку для мода
Сначала надо запихнуть саму картинку в вашу папку с модом (picter.png)







После этого надо найти файл расширения .mod с названием вашего каталога в папке каталога

После тегов вы пишите picture="Название вашей картинки.png"









Также максимальное размер картинки - 1Мб
Дебаг лог и все такое
Как включить Дебаг?
Правая кнопка по игре -> Свойства -> Параметры запуска -> Прописать "-debug"
















Логи ошибок, называемые "дебаг логи", будут автоматически появиться после завершения загрузки игры.
Также они находятся тут - C:\Users\ПОЛЬЗОВАТЕЛЬ\Documents\Paradox Interactive\Hearts of Iron IV\logs\error.log


Известные ошибки/проблемы

Ошибка:
Error: "Unexpected token: , near line: 2 " in file: "ПУТЬ_К_ФАЙЛУ" near line: 2
Решение 1: Лишний символ, надо удалить его

Решение 2: Поменять кодировку на UTF-8













Проблема: Мод в лаунчере виден и включен, но при запуске игры не работает мод

Решение: В файле C:/Users/Документы/Paradox Interactive/Hearts of Iron IV/mod/name.mod в нем есть такая ссылка на папку мода: path="C:/Users/Документы/Paradox Interactive/Hearts of Iron IV/mod/name". Надо изменить на path="/mod/name".
name - название мода.

"Скорее всего он изначально когда создавал мод кинул такую ссылку и при этом он не воспринимал ее, и поэтому он как бы видел что мод есть но не запускал его, так как ссылку он не мог считать. Я просто то что перед /mod все удалил и все заработало."

Решение проблемы от @Serguliu

(Предлагайте свои ошибки и пути их решения)
Если хотите задать вопрос в комментах
Если хотите задать вопрос в комментах, то
  • Связанное с багами/проблемами

    • 1) Проверьте весь код (И еррор лог тоже)
      2) Загуглите проблему (на Английском тоже)
      3) Нет результатов - задавайте, также нужен дебаг лог для понятия ситуации (или код)

    Вопрос по материалу "как сделать" или вы не поняли этот материал

    • 1) Загуглите гайды (и на Инглише)
      2) Посмотрите, как это сделано в ваниле или в модах
      3) Нет результатов - задавайте


Также это достаточно старое руководство, поэтому многое может и устарело. Поэтому не ленитесь и самостоятельно изучайте другие руководства или сам код в игре.
Komentarzy: 842
death 9 września o 17:03 
Создал мод сначала выдавало ошибку: не найден путь, а после просто пропала ошибка, но фокусов нет, что делать?
life enjoyer 28 sierpnia o 1:02 
капеец я сделал мод,ничего не получилось и теперь мне все время пишет что у меня есть модифицированные сохранения, и на онлайн серверы я не могу заходить, версия поменялась:GDNormal:
chekrizhka 25 sierpnia o 6:32 
Как сделать свою карту не реального мира и именно свою
МакПлюэ 19 sierpnia o 5:51 
Я сделал регион, и у меня столица находится в Днепропетровске, можно её как-то переместить в другую провинцую, в моём случае Запорожье?
Яна цист 16 sierpnia o 16:40 
я хочу добавить правителя на другие идеологии как это сделать? Перечитывал несколько раз и нечего не нашёл
Dora 16 sierpnia o 4:15 
сделал страну, она появилась, но корки у нее нету на свою провку, помогите че делать
life enjoyer 14 sierpnia o 2:42 
сделал все по инчтрукции по итогу в игре ничего не изменилось
life enjoyer 14 sierpnia o 2:42 
кто хочет помочь с модом?
life enjoyer 13 sierpnia o 2:10 
а как сделать с другой даты мод? хочу создать мод про 20тые года
내가 원하는 것을 엿 18 lipca o 3:16 
я изменил по инструкции фокусную ветку португалии , но изменёные фокусы не появляются как это исправить?