Моддинг зданий

Материал из Imperator Rome Wiki
Перейти к: навигация, поиск
Эта статья описывает:
  • Общую информацию о зданиях (где и что хранится)
  • Как внести изменения в существующие здания
  • Как добавить своё здание

Общая информация[править]

  • Основной файл настроек: \common\buildings\00_default.txt. Параметры:
    • order — порядок расположения построек (чем меньше значение, тем выше расположение, например в макростроителе).
    • cost — базовая Treasury.pngцена. На неё влияет: Build cost.png цена строительства.
    • time — базовое время постройки. На неё влияет: Build time.png время строительства.
  • Папка с изображениями построек: \common\ImperatorRome\game\gfx\interface\icons\buildings. По умолчанию берёт _default.dds.
  • Файл локализации, где указано название постройки: \common\ImperatorRome\game\localization\<язык>\core_l_<язык>.yml. Если не указано, то названием станет идентификатор здания.
  • Файл интерфейса, который отвечает за макростроитель: \common\ImperatorRome\game\gui\macro_builder_view.gui (искать в файле по build_in_province).
  • Файл интерфейса, который отвечает за здания в окне обзора города: \common\ImperatorRome\game\gui\province_window.gui (искать в файле по Buildings, and build object).

Правка текущих зданий[править]

  • Для смены параметров: нужно открыв файл \common\buildings\00_default.txt, указать нужную цену (cost), порядок (order), время постройки (time) и модификаторы.
  • Для изменения изображения: нужно добавить своё с нужным названием в формате *.dds по адресу \common\ImperatorRome\game\gfx\interface\icons\buildings.
  • Для изменения локализации: внести изменения для нужного языка и здания по адресу \common\ImperatorRome\game\localization\

Добавление нового здания[править]

Modding build 1.png

На примере мы будем разбирать добавление «паба», который увеличивает счастье различных Population.pngПОПов в городе. Процедура делится на несколько шагов. Настоятельно рекомендуется делать изменение через создание мода, а не напрямую. Как создать свой мод можно прочесть здесь.

Добавление параметров[править]

Для добавления нового здания нужно открыть \common\buildings\00_default.txt и добавить свой блок с новым зданиям:

pub_building = {
	local_citizen_happyness = 0.10
	local_freemen_happyness = 0.10
	local_tribesmen_happyness = 0.10
	local_slaves_happyness = 0.05
	
	cost = 50
	time = 90

	order = 5
}

Добавление локализации[править]

Чтоб добавить описание нового здания, нужно открыть файлы локализации и добавить туда строки с описнием. Вот пример для русского:

 pub_building:0 "Паб"
 pub_building_desc:0 ""

Добавление иконки[править]

Добавить иконку нужно в \common\ImperatorRome\game\gfx\interface\icons\buildings по аналогии с другими зданиями, иначе будет браться иконка _default.dds, а она не очень подходит. Я проверял только для *.dds формата, поэтому неизвестно, как игра отреагирует на другие.

Изменения в интерфейсе[править]

Если макробилдер очень легко воспримет добавление нового здания, то вот об интерфейсе обзора города этого не скажешь. Без дополнительных правок добавление нового здания будет выглядеть вот так:

Modding build 2.png

Что, согласитесь, неприемлемо. Для внесения изменений открываем файл \common\ImperatorRome\game\gui\province_window.gui и пробуем менять элементы, отвечающие за позиции и размеры элементов интерфейса. Пример моих изменений на скорую руку, вы можете докрутить и изменить, доведя до совершенства:

###################################
				# Buildings, and build object
				###################################
				container = {
					name = "Buildings"
					position = { 272 55 }
					
					
					textbox = {
						position = { 48 6 }
						size = { 276 30 }
						using = BlackMarbleFont
						text = "TEMP_BUILDINGS"
						widgetanchor = top|left
						align = center|nobaseline
					}
					
					
					
					dynamicgridbox = {
						name = "buildings_grid"
						position = { 0 46 }
						size = { 300 400 }
						datamodel = "[ProvinceWindow.GetBuildings]"
						
						item = {
							container = {
								icon = {
									name = "frame"
									position = { 90 3 }
									size = { 145 30 }
									texture = "gfx/interface/tiles/yellow_bar_frame.dds"
									spriteType = Corneredtiled
									spriteborder = { 16 0 }
								}
								progressbar = {
									using = progress_bar_yellow_buildings
									size = { 140 20 }
									position = { 93 3 }
									value = "[BuildingItem.GetBuildProgress]"
								}
								
								#Hide when there is only one building of one category queued
								container = {
									name = "queue_slots"
									position = { 248 7 }
									visible = "[BuildingItem.HasQueue]"
									
									icon = {
										name = "slot"
										texture = "gfx/interface/tiles/yellow_bar_queue_slot.dds"
									}
									
									textbox = {
										name = "number_of_queues"
										position = { 20 0 }
										autoresize = yes
										using = MarbleButtonFont
										text = "[BuildingItem.GetQueueSize]"
										widgetanchor = top|hcenter
									}
								
								}
								
								icon = {
									size = { 30 30 }
									texture = "[GetBuildingIcon(BuildingItem.GetBuilding)]"
									tooltip = "[BuildingItem.GetEffectInfo]"
								}
								textbox = {
									position = { 188 7 }
									autoresize = yes
									using = MarbleButtonFont
									text = "[BuildingItem.GetLevel|B]"
									tooltip = "[BuildingItem.GetEffectInfo]"
									widgetanchor = top|hcenter
								}
								plus_button = {
									name = "build"
									position = { 286 2 }
									onclick = "[BuildingItem.Build]"
									clicksound = "event:/SFX/UI/Province/sfx_ui_province_build_building"
									oversound = "event:/SFX/UI/Generic/sfx_ui_generic_mouse_over"
									enabled = "[BuildingItem.CanBuild]"
									tooltip = "[BuildingItem.GetBuildInfo]"
									size = { 30 30 }
								}
								cancel_button = {
									name = "demolish"
									visible = "[Not(BuildingItem.ShowCancel)]"
									position = { 48 2 }
									onclick = "[BuildingItem.Destroy]"
									clicksound = "event:/SFX/UI/Province/sfx_ui_province_destroy_building"
									oversound = "event:/SFX/UI/Generic/sfx_ui_generic_mouse_over"
									enabled = "[BuildingItem.CanDestroy]"
									tooltip = "[BuildingItem.GetDestroyInfo]"
									size = { 30 30 }
								}
								minus_button = {
									visible = "[BuildingItem.ShowCancel]"
									name = "cancel"
									position = { 48 2 }
									onclick = "[BuildingItem.Cancel]"
									enabled = "[BuildingItem.CanCancel]"
									tooltip = "[BuildingItem.GetCancelInfo]"
									size = { 30 30 }
								}
								widget = {
									name = "spacing_widget"
									position = { 0 30 }
									size = { 2 2 }
								}
							}
						}
					}
				}

В результате это будет выглядеть так:

Modding build 3.png

Итог[править]

Структура мода, который добавляет новое здание, выглядит примерно так:

  • \gui\province_window.gui — для изменения интефейса города
  • \localization\язык/core_l_язык.yml — для указания названия здания
  • \gfx\interface\icons\buildings\ — для иконок здания
  • \common\buildings\00_default.txt — для добавления параметров самого здания