钢铁雄心 IV 中文离线资料库

Music模组制作

原页面:Music modding

本页中文翻译进度 91%,未译部分暂保留英文原文。

音乐文件以 *.ogg 格式存储在/Hearts of Iron IV/music/文件夹或其某个子文件夹中。

音乐模组创作工具是一个快速且易于使用的模组工具,它会生成下文所述的所有文件,以为游戏添加音乐与一个电台。

歌曲定义

歌曲定义在 *.asset 格式的文件中,这些文件与 *.ogg 文件位于同一文件夹。一个定义的格式如下:

music = {
    name = "song_name"
    file = "song_file.ogg"
    volume = 0.65
}

name是歌曲的 ID,同时也是其在本地化文件文件中作为song_name:0 "歌曲名称"进行名称分配所用的本地化键。它不能超过 63 个字符。file是歌曲的文件名,包含 *.ogg 扩展名。volume允许在不编辑 *.ogg 文件的情况下调整其音量。

分配到电台

为了正常工作,歌曲必须被分配到某个电台。这些分配存储在 *.txt 文件中,与 *.asset 和 *.ogg 文件位于同一文件夹。一个分配文件在定义任何歌曲之前,必须先被分配到一个电台。多个文件可以被分配到同一个电台。这通过下面这行代码完成:

music_station = "station_name"

一首歌曲的典型分配格式如下:

music = {
    song = "song_name"
    chance = {
        base = 1
        modifier = {
            factor = 0
            has_war = no
        }
    }
}

song接受歌曲 ID,其定义为其在 *.asset 文件中的名称。chance定义当播放模式设为「加权随机」时歌曲被选中的几率。允许的参数为factor(乘以几率)、add(加到几率上)与基础(完全替换几率)。modifier = {}允许该参数仅在其内部所有触发器都满足时才执行对几率的修改。

电台

电台被定义为一个用户界面文件,/Hearts of Iron IV/interface/*.gui。文件内容必须如下,其中<MUSIC STATION>替换为该音乐电台的名称:

guiTypes = {
	containerWindowType = {
		name = "<MUSIC STATION>_faceplate"
		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 }
			alwaystransparent = 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 = "<MUSIC STATION>_stations_entry"
		size = { width = 162 height = 130 }
		
		checkBoxType = {
			name = "select_station_button"
			position = { x = 0 y = 0 }
			quadTextureSprite = "<SPRITE>"
			clicksound = decisions_ui_button
		}
	}
}

The name is assigned by using its ID as a 本地化 key within /Hearts of Iron IV/localisation/<language>/*_l_<language>.yml: <MUSIC STATION>:0 "音乐电台名称".
The album cover is assigned a sprite as the quadTextureSprite within select_station_button. A sprite must be defined within /Hearts of Iron IV/interface/*.gfx as the following:

	spriteType = {
		name = "<SPRITE>"
		texturefile = "gfx//interface//topbar//musicplayer//<FILE NAME>.dds"
		noOfFrames = 2
	}

*.dds 文件必须水平分割为 2 个精灵图:未选中时与选中时。

模组制作
文档 效果 • 触发器 • 定义文件 • 修正项 • 修正项列表 • 作用域 • 本地化文件 • 事件钩子 • 数据结构(标记、事件目标、国家标签别名、变量、数组)
脚本 成就 • AI • AI 焦点 • 自治领 • 力量均势 • 书签/剧本 (游戏规则) • 建筑 • 角色与特质 • 外观标签 • 国家 • 师 • 决议 • 学说 • 装备 • 事件 • 阵营 • 理念 • 意识形态 • 军事工业组织 • 国策 • 资源 • 脚本化 GUI • 科技与学说 • 单位
地图 地图 • 州 • 补给区域 • 战略区域
图形 界面 • 图形资源 • 实体 • 后期特效 • 粒子 • 字体
外观 肖像 • 名称列表 • 音乐 • 音效
其他 控制台指令 • 疑难排查 • 模组结构 • 模组 • 地图编辑器