界面修改

本页面讲述的内容长期有效
(重定向自Interface modding

在欧陆风云4中, 界面是指玩家用来与游戏进行交互的各种界面,如事件框、外交界面、宗教界面等都属于界面的范围。

Overview

界面文件是由两部分内容组成的,这两部分内容分别是containerelements

例如:windowType是一个container,而iconType是一个elements

界面文件被定义为.gui这一文件类型。所有的界面文件都可以在/Europa Universalis IV/interface/目录中找到。

界面文件中使用的internal指的是只有Paradox(P社)才能编辑的源代码。简而言之,这意味着它所指的对象是不可以被随意修改的。

Containers

container是定义为:将诸多elements进行组合并将它们以internal代码相关联的界面组成部分。

除非是在某些非常特殊的情况下才可以添加新的container,否则container是无法被自定义的。

这是因为containername属性在界面文件中的internal代码中都有特定的关联关系,换言之每一个不同的name都与特定的内核机制有关。

例外情况是/Europa Universalis IV/interface/ages_view.gui中的age属性,

您可以为/Europa Universalis IV/interface/countrytechnologyview.gui文件中的自定义age属性和自定义科技表属性添加新的container

通过定义container的排列顺序和嵌套方式会影响container的显示方式。

例如:countryreligionview/Europa Universalis IV/interface/countryreligionview.gui中定义了对所有宗教能力的container

如果将作为宗教能力嵌套方式应用的orthodox_specific_window 即东正教圣像界面的container

和在其排列顺序之后的muslim_specific_window即穆斯林虔诚界面的container这两种机制都加入到同一新建宗教中。

那么,作为玩家的我们将只能看到东正教的圣像界面而无法看到穆斯林虔诚界面,这就是嵌套方式和排列顺序影响container显示方式的一个典型案例。

windowType

这是最常见的container,可以用于容纳任何种类的elements

下列属性是经常使用的:

  • name - 用于定义container的命名。
  • background - 用于定义作为container背景的elements
  • position - 用于定义container的屏幕放置位置。
  • size - 用于定义container的边框大小。
  • moveable - 用于设置container是否可以拖动。
  • fullscreen - 用于设置container是否可以模糊整个屏幕。
  • orientation - 用于设置position属性的坐标原点。

下列属性是应用在动画container之中的:

  • show_position - 用于定义container显示模式下移动到的屏幕位置。
  • hide_position - 用于定义container隐藏模式下移动到的屏幕位置。
  • animation_type - 用于定义移动container应用的动画类型 (通常为减速)。
  • animation_time - 用于定义动画的移动速度(通常为300)。
  • upsound - 用于定义container移动到显示位置时播放的声音。
  • downsound - 用于定义container移动到隐藏位置时播放的声音。

下列属性是几乎从未使用过的

  • dontRender- 用于定义container禁止渲染。
  • horizontalBorder - 用于定义container的水平边界。
  • verticalBorder - 用于定义container的垂直边界。

scrollbarType

scrollbarType 用于定义滚动条由哪些elements组成。

下列属性是经常使用的:

  • name - 用于定义滚动条的名称。
  • slider - 用于定义滚动条的滑块slider
  • track - 用于定义滚动条的跟踪器tracker
  • leftbutton - 用于定义滚动条的左侧增量按钮。
  • rightbutton - 用于定义滚动条右侧增量按钮。
  • position - 用于定义滚动条的屏幕放置位置。
  • size - 用于定义滚动条的尺寸大小。
  • priority - 用于定义滚动条相对于其他elements的优先级。
  • borderSize - 用于定义滚动条的边框范围。
  • maxValue - 用于定义滚动条移动的最大值 (用于控制增量)。
  • minValue - 用于定义滚动条移动的最小值 (用于控制增量)。
  • stepSize - 用于定义使用增量按钮导致增量变化的数值。
  • startValue - 用于定义滚动条的初始数值。
  • horizontal - 用于定义滚动条是水平还是垂直的,1为水平,0为垂直。

Elements

Elements中定义了elements内容。所有elements都必须在Elements中使用,在此之外将不生效!

elements将继承所在container的基本内容,除非是为elements指定了具体内容。

以下elements不依赖internal代码,可以自由添加:

  • iconType - 用于定义图标。
  • instantTextBoxType - 用于定义文本。

以下elements则非常依赖于internal代码。虽然您可以添加新elements,但新加的elements不会被添加到container中也无法生效。

  • guiButtonType - 用于定义按钮。
  • smoothListboxType - 用于定义平滑列表框。
  • listboxType - 用于定义列表框。
  • checkboxType - 用于定义复选框。
  • OverlappingElementsBoxType - 用于重叠elements
  • editBoxType - 用于定义可编辑文本框。
  • shieldtype - 用于定义国旗。

以下elements是遗留内容:

  • textBoxType - 现在等同于instantTextBoxType
  • eu3dialogtype - 现在等同于windowType
  • shieldtype - 仅仅用于eu3dialogtype。在最近越来越多的文件中,许多不同的elements都被用于flag

iconType

iconType中的elements用于向界面增加图标贴图.它的用法与guiButtonType基本相同,但后者用于定义按钮贴图。

下列属性是经常使用的:

  • name - 用于定义图标的命名。
  • position - 用于定义图标的屏幕放置位置
  • orientation - 用于定义position属性的坐标原点。
  • spriteType - 用于定义图标贴图,这指向的是spriteType中定义的内容。
  • quadTextureSprite - 用于定义图标贴图。这指向的是动态spriteType中定义的内容(即标志)或者多帧spriteType中定义的内容。
  • frame - 用于定义使用多帧贴图时,图标应当使用第几帧贴图。
  • alwaystransparent - 用于定义图标是否允许点击,即点击elements后可以再点击elements
  • hint_tag - 用于设置指针悬停图标时显示提示内容的提示键。

instantTextBoxType

instantTextBoxType中的elements用于向界面增加文本贴图。

这是由于在某些界面文件中的文本是由internal代码定义的,在这种情况下除非在该处编辑本地化字符串,否则无法进行文本翻译。

下列属性是经常使用的:

  • name - 用于定义文本框的命名。
  • position - 用于定义文本框的屏幕放置位置。
  • orientation - 用于定义position属性的坐标原点。
  • text - 用于定义文本框显示的文本内容。
  • font - 用于定义文本框显示的字体内容。
  • maxWidth - 用于定义文本框的总宽度,这里是以像素为单位的。
  • maxHeight - 用于定义文本框的总高度,这里是以像素为单位的。
  • format - 用于定义文本框的对齐方式
  • fixedsize - 用于定义文本框是否将超出其限制范围的文本内容删除。
  • borderSize - 用于定义文本框的边框范围。
  • alwaystransparent - 用于定义文本框是否允许点击,即点击elements后可以再点击elements

下列属性是几乎从未使用过的:

  • textureFile - 请注意!这一条从未被使用过!

有效的format值:

  • left
  • centre
  • right

guiButtonType

guiButtonType中的elements用于向界面增加按钮贴图。

按钮可以被定义为图像文本,因此它的生效方式类似于iconTypeinstantTextBoxType

下列属性是经常使用的:

  • name - 用于定义按钮的命名。
  • position - 用于定义按钮的屏幕放置位置
  • orientation - 用于定义position属性的坐标原点。
  • spriteType - 用于定义按钮贴图,这指向的是spriteType中定义的内容。
  • quadTextureSprite - 用于定义按钮贴图。这指向的是动态spriteType中定义的内容(即标志)或者多帧spriteType中定义的内容。
  • frame - 用于定义使用多帧贴图时,按钮应当使用第几帧贴图。
  • alwaystransparent - 用于定义按钮是否允许点击,即点击elements后可以再点击elements
  • buttonText - 用于定义按钮显示的文本内容。
  • buttonFont - 用于定义按钮显示的字体内容。
  • shortcut - 用于定义按钮的快捷方式。
  • clicksound - 用于定义点击按钮时播放的声音。
  • hint_tag - 用于设置指针悬停按钮时显示提示内容的提示键。
  • pdx_tooltip - 用于设置使用按钮时的简短信息提示。
  • pdx_tooltip_delayed - 用于设置使用按钮时的完整信息提示。
  • scale - 用于定义缩放按钮大小。

下列属性是几乎从未使用过的:

  • tooltip - 请注意!这一条从未被使用过!
  • tooltipText - 请注意!这一条从未被使用过!
  • delayedTooltipText - 请注意!这一条从未被使用过!

smoothListboxType

smoothListboxType中的elements用于向界面增加平滑列表框贴图,这指的是包括诸多具体条目的可滚动平滑列表框。

一般来说,这些elements与其他container中的internal代码相关联,该container主要用来定义平滑列表框中使用的具体文本。

下列属性是经常使用的:

  • name - 用于定义平滑列表框的命名。
  • position - 用于定义平滑列表框的屏幕放置位置。
  • orientation - 用于定义position属性的坐标原点。
  • size - 用于定义平滑列表框的尺寸大小。
  • spacing - 用于定义平滑列表框各条目之间的间距。
  • horizontal - 用于定义平滑列表框是水平还是垂直的,1为水平,0为垂直。
  • scrollbartype - 用于定义平滑列表框的滚动条。
  • bordersize - 用于定义平滑列表框的边框范围。
  • alwaystransparent - 用于定义平滑列表框是否允许点击,即点击elements后可以再点击elements

下列属性是几乎从未使用过的:

  • background - 用于定义平滑列表框的背景,请注意!这一条从未被使用过!

listboxType

listboxType中的elements用于向界面增加列表贴图,这指的是包括诸多具体条目的可滚动列表框。

一般来说,这些elements与其他container中的internal代码相关联,该container主要用来定义列表框中使用的具体文本。

下列属性是经常使用的:

  • name - 用于定义列表框的命名。
  • position - 用于定义列表框的屏幕放置位置。
  • orientation - 用于定义position属性的坐标原点。
  • size - 用于定义列表框的尺寸大小。
  • spacing - 用于定义列表框各条目之间的间距。
  • horizontal - 用于定义列表框是水平还是垂直的,1为水平,0为垂直。
  • scrollbartype - 用于定义列表框的滚动条。
  • bordersize - 用于定义列表框的边框范围。
  • alwaystransparent - 用于定义列表框是否允许点击,即点击elements后可以再点击elements

下列属性是几乎从未使用过的:

  • background - 用于定义平滑列表框的背景,请注意!这一条从未被使用过!

checkboxType

checkboxType中的elements用于向界面增加复选框贴图,复选框的elements都与internal代码相关联

下列属性是经常使用的:

  • name - 用于定义复选框的命名。
  • position - 用于定义复选框的屏幕放置位置。
  • orientation - 用于定义position属性的坐标原点。
  • spriteType - 用于定义复选框贴图,这指向的是spriteType中定义的内容。
  • quadTextureSprite - 用于定义复选框贴图。这指向的是动态spriteType中定义的内容(即标志)或者多帧spriteType中定义的内容。
  • frame - 用于定义使用多帧贴图时,复选框应当使用第几帧贴图。
  • alwaystransparent - 用于定义复选框是否允许点击,即点击elements后可以再点击elements
  • buttonText - 用于定义复选框显示的文本内容。
  • buttonFont - 用于定义复选框显示的字体内容。
  • shortcut - 用于定义复选框的快捷方式。
  • clicksound - 用于定义点击复选框时播放的声音。
  • hint_tag - 用于设置指针悬停复选框时显示提示内容的提示键。
  • pdx_tooltip - 用于设置使用复选框时的简短信息提示。
  • pdx_tooltip_delayed - 用于设置使用复选框时的完整信息提示。
  • scale - 用于定义复选框大小。

下列属性是几乎从未使用过的:

  • tooltip - 请注意!这一条从未被使用过!
  • tooltipText - 请注意!这一条从未被使用过!
  • delayedTooltipText - 请注意!这一条从未被使用过!

editBoxType

editBoxType中的elements用于向界面添加可编辑文本框贴图。

下列属性是经常使用的:

  • name - 用于定义可编辑文本框的命名。
  • position - 用于定义可编辑文本的屏幕放置位置。
  • orientation - 用于定义position属性的坐标原点。
  • text - 用于定义可编辑文本框显示的文本内容。
  • font - 用于定义可编辑文本框显示的字体内容。
  • maxWidth - 用于定义可编辑文本框的总宽度,这里是以像素为单位的。
  • maxHeight - 用于定义可编辑文本框的总高度,这里是以像素为单位的。
  • format - 用于定义可编辑文本框的对齐方式
  • fixedsize - 用于定义可编辑文本框是否将超出其限制范围的文本内容删除。
  • borderSize - 用于定义可编辑文本框的边框范围。
  • alwaystransparent - 用于定义文本框是否允许点击,即点击elements后可以再点击elements
  • ignore_tab_navigation - 用于定义elements是否可以忽略可编辑文本框的导航标签

OverlappingElementsBoxType

OverlappingElementsBoxType中的elements用于向界面增加一种特殊类型的列表框。

该列表框在其container中包含可重叠的子elements内容。

下列属性是经常使用的:

  • name - 用于定义列表框的命名。
  • position - 用于定义列表框的屏幕放置位置。
  • orientation - 用于定义position属性的坐标原点。
  • size - 用于定义列表框的尺寸大小。
  • spacing - 用于定义列表框各条目之间的间距。
  • 'horizontal - 用于定义列表框是水平还是垂直的,1为水平,0为垂直。
  • bordersize - 用于定义列表框的边框范围。
  • alwaystransparent - 用于定义列表框是否允许点击,即点击elements后可以再点击elements

下列属性是几乎从未使用过的:

  • textureFile - 请注意!这一条从未被使用过!

有效的 format 值:

  • left
  • centre
  • right

Position and Orientation

理解position属性是如何运作的对于准确的编辑界面而言是非常重要的。

elements(或container)使用的orientation属性是用来定义position坐标原点的。

例如UPPER_LEFT表示position(0,0)这一坐标原点位于屏幕的左上角,而 LOWER_RIGHT表示position(0,0)这一坐标原点位于屏幕的右下角。

position 属性将在orientation属性定义坐标原点之后生效。因此,如果您希望elements(或container)更改初始位置,您应该首先更改orientation属性再更改position 属性。

之所以这样设置position属性和orientation属性是因为这样可以允许界面适应不同的分辨率。

因为所有的position都与一个特定的orientation相关联,该position是根据玩家的屏幕分辨率而计算的,所以elementscontainer的位置应当保持一致。

因此,如果要确保编辑界面后整个界面可以正常运作就必须正确的使用orientation属性。

举一个典型的错误类型,如果仅仅编辑position属性,例如position = { x = 1800 y = 200 }这一position属性意味着对于设置分辨率宽度大于1800像素的分辨率(如1900 x 1200像素)的玩家来说将可以正常显示,而分辨率的宽度低于1800像素的玩家则无法正常显示。

有效的 orientation 值:

  • CENTER
  • UPPER_LEFT
  • LOWER_LEFT
  • UPPER_RIGHT
  • LOWER_RIGHT

Resolution Checks

通过在containerelements中使用if_resolution语句来进行定义,您就可以根据屏幕宽度和高度的不同来更改它们的显示方式。

orientation属性无法生效时,比如无法移动界面时,通过定义if_resolution是相当有用的,因为使得界面可以根据分辨率不同而改变。

以下是移动按钮界面的示例:

guiButtonType = {
    name ="close_button"
    if_resolution = {
        max_height = 867
        position = { x = 560 y = -48 }
        quadTextureSprite = "GFX_button_close"
        buttonText = ""
    }	
    if_resolution = {
        min_height = 868
        quadTextureSprite ="button_type_1"
        position = { x= 214 y = 664 }
        buttonText = "CLOSE"				
    }			
    buttonFont = "vic_18"
    shortcut = "ESCAPE"
}

以下是更改背景贴图的示例:

iconType =
{
    name ="religionpanel_bg_bottom"
    if_resolution = {
        max_height = 899
        spriteType = "GFX_country_religion_view_bg_bottom_standard"
    }
    if_resolution = {
        max_height = 1079
        min_height = 900
        spriteType = "GFX_country_religion_view_bg_bottom_large"
    }
    if_resolution = {
        min_height = 1080
        spriteType = "GFX_country_religion_view_bg_bottom_huge"
    }
    position = { x= -7 y = -10 }
    Orientation = "UPPER_LEFT"
}

参考资料