Skip to content

图像和音频资源

图像和纹理图集

图像需要在游戏使用之前"打包"。这个准备步骤只需要进行一次(只要原始图形没有更改)。 结果是一对或多对文件 - 一个 png 格式的纹理和相应的 atlas 文件。 如果你有一个单独的 Images 文件夹,默认这样的对命名为 game.png/game.atlas。 对于你的玩家来说,单个图像并不重要 - 只有组合的图像实际注册到游戏中,所以你需要将它们包含在你的仓库中并保持更新。 我们仍然建议在模组中包含原始图像,以便其他从源运行的开发人员可以访问它们。 包含原始图像后,你可以使用使用 git 的开发环境,将其链接到你的仓库,同时使用符号链接让 Unciv 看到模组 - 并在每次启动时为你打包图集。 如果你在 Unciv 的 Android 版本上开发你的模组(不推荐!),你将无法直接生成这些打包的文件。

打包纹理图集的方法

  • 纹理图集无法在 Android 上打包(技术原因:TexturePacker 使用 java.awt 进行繁重的工作,这在 Android 上不可用 0_0)
  • 使用你的模组启动桌面版本(你的模组的主文件夹是游戏"mods"文件夹的子文件夹,或在那里符号链接)。这使用了此处记录的打包方法。
  • 你可以请 Discord 服务器中的某人帮助你。
  • 你可以使用外部工具,例如 gdx-texture-packer-gui。需要极其小心确保文件可以被 Unciv 发现并且内部相对路径正确。
  • 你可以将此工作流的副本添加到你的模组中,以便在每次提交到仓库时自动打包图集。它应该放置在与示例相同的位置(.github/workflows/autoupdate.yml)。

渲染性能

多个纹理图集

如果你的模组有很多图像(或很大的图像),纹理可能会"溢出"到额外的纹理文件中 - 2048x2048 是单个纹理包的限制。你将看到 game2.png,可能还有 game3.png 或更多出现。 这对性能不利,这就是为什么基础游戏控制哪些类型的图像一起进入一个纹理(+图集)。 这也适用于模组:不仅创建一个 Images 文件夹,而是创建多个,额外的命名为"Images.xyz",其中 xyz 将成为额外纹理文件的文件名(所以不要同时使用 Images 和 Images.game - 它们会冲突)。查看 Unciv 基础游戏以更好地了解它是如何工作的。 为了最大限度地减少纹理交换,尽量按它们在游戏中需要的情况进行分组。你可以按文件夹分发,但在几个"Images.xyz"下具有相同的子文件夹并在它们之间分发图像也可以。

例如,你可以查看 Alpha Frontier 模组

模组根目录中的文件 Atlases.json(大写'A')(不在 Imagesjsons 中)控制加载哪些图集,这反过来控制读取哪些纹理(.png)文件。 此文件由内置的打包器自动创建。默认情况下只读取 game.atlas 文件以保持向后兼容性。 如果你使用外部工具和多个图集,你将需要自己维护此文件 - 它是一个简单的字符串 json 数组,每个字符串都是不带 .atlas 扩展名的文件名(保存为不带字节顺序标记的 UTF-8)。

更小的图标

大量图集可能是由于图标很大导致的。 我们发现 100x100 像素对于大多数图标来说已经足够了。

圆形图标

为了允许更快地渲染图标,这有主要的性能影响,你可以将 "OtherIcons/circle.png" 复制到:

  • "ImprovementIcons/Circle.png" 用于改良设施
  • "ResourceIcons/Circle.png" 用于资源
  • "TechIcons/Circle.png" 用于科技
  • "ConstructionIcons/Circle.png" 用于建筑和单位
  • "StatIcons/Circle.png" 用于统计

纹理打包器设置

内置在 Unciv 中的纹理打包器将在每个 Images 目录中查找 TexturePacker.settings 文件(不在 jsons 下)。 使用此文件,你可以调整打包器 - 例如控制像素插值过滤器。 它是一个 Gdx TexturePacker.Settings 实例的 json。 如果你提供了设置文件,默认设置如上面链接的 Gdx 文档中所示,但如果没有这样的文件,某些字段有不同的默认值。 要获得这些更改的默认值,请使用以下内容作为自定义 TexturePacker.settings 文件的基础:

json
{
	"fast": true,
	"combineSubdirectories": true,
	"maxWidth": 2048,
	"maxHeight": 2048,
	"paddingX": 8,
	"paddingY": 8,
	"duplicatePadding": true,
	"filterMin": "MipMapLinearLinear",
	"filterMag": "MipMapLinearLinear",
}

(如果你的图集名称以"Icons"结尾,请将"filterMag"更改为"Linear"。)

纹理图集编码

由于某些情况,请确保将在图集中映射的名称和路径仅使用 ascii。抱歉,加载器的所有部分并不强制严格的 UTF-8 使用。 如果你不注意这一点,症状是:模组在中文 Windows 框上有效,但在西方框上无效,反之亦然,或者模组在中文 Windows 框上有效,但在中文 Linux 框上无效,反之亦然,或者模组在具有默认设置的中文 Windows 框上有效,但在打开"使用 unicode UTF-8 进行全球语言支持"的同一框上无效。 这在技术上不适用于使用多个图集时的图集名称本身("Images.xyz"中的 xyz 部分),但为了保持一致性,我们仍然建议相同的规则。

永久视听模组

以下章节描述了在模组活动时将起作用的可能性。 它要么为当前游戏选择(在新游戏创建期间,对于保存的游戏之后不能更改),意味着将使用其所有规则和资源。 _或者_它在模组管理器中被标记为'Permanent audiovisual mod'(你必须在'已安装'列中选择它以获得复选框)。 在这种情况下,只有图形和音频将处于活动状态,规则更改将被忽略(如果它包含任何),除非第一种方式_也_被使用。 请注意,此功能在_所有_游戏中包括来自所选模组的图形或声音,甚至包括在安装模组之前开始的游戏。 重复:在模组同时带来更改的规则和视听的情况下,'permanent'功能将只在所有游戏中包括媒体,要使用规则,你仍然需要为新游戏选择模组。

请注意,模组作者可以(并且通常应该)使用 ModOptions Uniques控制复选框是否出现。

覆盖内置图形

如果模组提供与基础游戏中包含的图像同名同路径的图像(并且其图集是最新的),并且模组处于活动状态,则将使用模组的图形而不是内置图形。

例如,如果你在模组中包含名为"Images/OtherIcons/Link.png"的文件,你将覆盖 Civilopedia 中表示链接行的小链环图标。路径的第一部分与覆盖无关,它控制一组图集文件中的哪个将携带图像,但对于游戏中的选择,只有路径的其余部分是相关的。因此,要覆盖"Images.Tech/TechIcons/Archery.png",你可以将图像放置为"Images/TechIcons/Archery.png",它将起作用,因为"TechIcons/Archery"部分是关键。

请注意,就像添加项目一样,你的图形应该保持原始的大小和颜色选择,否则结果可能会令人惊讶,例如当游戏尝试对这样的图像进行着色时。

提供其他图形

你需要为新元素提供图形 - 就像新文明一样,新单位需要其图标。规则是:

  • 图像文件的路径和名称需要符合规则:Image[.AtlasName]/Type-specific/Objectname.png(Type-specific 表示科技的"TechIcons",文明的"NationIcons"等。请参阅原版游戏文件夹。Objectname 是 json 中定义的确切名称,在翻译之前。)
  • 所有路径部分都区分大小写。
  • 单位像素精灵和 地形集遵循特殊规则。
  • 如果 UnitIcons/<UnitName>.png 不存在,我们将回退到 UnitTypeIcons/<UnitType>.png - 这允许为整个类型的单位设置单个图像,而无需摆弄每个单位
  • 晋升可以命名为"[Unitname] ability"。在这种情况下,如果 UnitIcons/Unitname.png 存在,当 UnitPromotionIcons/Unitname ability.png 缺失时,它将回退到该单位图标。
  • 晋升可以命名为"Something I"(或" II"或" III")。后缀将被移除并绘制为小星星,只加载基本 UnitPromotionIcons/Something.png
  • 晋升的特殊规则可以组合,例如"[Warrior] ability III"将回退到 Warrior 单位图标并在其上绘制 3 个星。

此外,还有一些图像类型,游戏具有显示能力但不自己提供图形,如下一段所述:

添加自定义字体

你可以向游戏添加自定义 .ttf 字体:将 .ttf 文件放在模组的 /fonts/ 目录内。你添加的字体将在 Options-Advanced 选项卡的字体列表顶部可见并可选择,格式为 <fontname> (<modname>)

所有字体默认以 50 像素大小渲染,稍后根据游戏需要重新缩放。目前字体在缩小时不是 mipmapped 的。

覆盖特殊字符

EmojiIcons 子文件夹中的纹理和一些其他纹理在特定代码点映射到字体中。游戏使用它们,可以在模组的任何文本中使用,并且可以被模组纹理覆盖。 此外,某些代码点通常由所选系统字体提供,但如果模组提供它们,则有 EmojiIcons 名称将覆盖字体字形(下表中的标记为'optional')。 请注意,为这些代码点提供的纹理确实尊重纵横比,它们不需要像许多内置图标那样是正方形!

符号代码点Unicode 名称纹理路径可选
U+26CFpickEmojiIcons/Automate
U+266Aeighth noteEmojiIcons/Culture
U+2620skull and crossbonesEmojiIcons/Death
U+262Epeace symbolEmojiIcons/Faith
U+2042asterismEmojiIcons/Food
¤U+00A4currency signEmojiIcons/Gold
U+266Csixteenth noteEmojiIcons/Great Artist
U+2692hammerEmojiIcons/Great Engineer
U+26E4pentagramEmojiIcons/Great General
U+2696scaleEmojiIcons/Great Merchant
U+269BatomEmojiIcons/Great Scientist
U+2323smileEmojiIcons/Happiness
U+221EinfinityEmojiIcons/Infinity*
U+2699gearEmojiIcons/Production
U+237Ebell symbolEmojiIcons/Science
U+FFEAhalfwidth upwards arrowEmojiIcons/SortedAscending*
U+25C9fisheyeEmojiIcons/SortedByStatus*
U+231AwatchEmojiIcons/SortedByTime*
U+FFEChalfwidth upwards arrowEmojiIcons/SortedDescending*
U+272Fpinwheel starEmojiIcons/Star*
U+23F3hourglassEmojiIcons/Turn
U+2170small roman numeral oneMayaCalendar/0
U+2171small roman numeral twoMayaCalendar/1
U+2172small roman numeral threeMayaCalendar/2
U+2173small roman numeral fourMayaCalendar/3
U+2174small roman numeral fiveMayaCalendar/4
U+2175small roman numeral sixMayaCalendar/5
U+2176small roman numeral sevenMayaCalendar/6
U+2177small roman numeral eightMayaCalendar/7
U+2178small roman numeral nineMayaCalendar/8
U+2179small roman numeral tenMayaCalendar/9
U+217Asmall roman numeral elevenMayaCalendar/10
U+217Bsmall roman numeral twelveMayaCalendar/11
U+217Csmall roman numeral fiftyMayaCalendar/12
U+217Dsmall roman numeral one hundredMayaCalendar/13
U+217Esmall roman numeral five hundredMayaCalendar/14
U+217Fsmall roman numeral one thousandMayaCalendar/15
U+2180roman numeral one thousand cdMayaCalendar/16
U+2181roman numeral five thousandMayaCalendar/17
U+2182roman numeral ten thousandMayaCalendar/18
U+2183roman numeral reversed one hundredMayaCalendar/19
U+0DBAsinhala letter yayannaMayaCalendar/Baktun
U+0DB9sinhala letter amba bayannaMayaCalendar/Katun
U+0DB8sinhala letter mayannaMayaCalendar/Tun
U+27A1black rightwards arrowStatIcons/Movement
U+2026horizontal ellipsisStatIcons/Range
U+2021double daggerStatIcons/RangedStrength
U+2020daggerStatIcons/Strength

添加奇观启动画面

你可以向模组添加奇观图像,当奇观完成时,它们将代替标准图标显示。图像需要是 .png 并且比例为 2:1,例如 200x100 像素。

将图像添加到 /Images/WonderImages/。它们需要根据 Buildings.json 中的名称字段命名,例如"Temple of Artemis.png"或"Stonehenge.png"

记住,为了与移动设备兼容,需要生成一个新的图集,包括这些。

添加领袖肖像

基础游戏没有领袖肖像,但能够在问候、Civilopedia、外交屏幕或文明选择器中显示它们。模组可以通过将图像添加到 /Images/LeaderIcons/ 来提供这些。文件名必须与 Nations.json 中定义的文明领袖名称完全对应,否则它们将被忽略。

这些效果最好,如果它们是正方形,在 100x100 和 256x256 像素之间,并且在该区域内包含一些透明边框。

例如,这里是一个显示如何添加领袖肖像的模组,它可以补充基础游戏。

添加肖像

基础游戏使用扁平图标,周围有彩色圆圈作为背景(例如,为了单位以适应文明的旗帜颜色),以表示 UI 中的实体,例如:单位、建筑、科技、资源、改良设施、宗教、晋升、Uniques、单位行动和文明。模组可以通过向 /Images/<entityType>Portraits/(例如 /Images/BuildingPortraits//Images/ResourcePortraits/ 等)添加图像来提供"肖像" - 将保持未着色的静态图像 - 这些图像将在所有 UI 元素中使用(世界地图中的单位图标除外)。文件名必须与相应 JSON(例如 Units.json、Buildings.json、TileResources.json 等)中定义的单位/建筑/科技/资源等名称完全对应,或者与它们应该替换的文件同名,否则它们将被忽略。

如果模组提供'/Images/<entityType>Portraits/Background.png'图像,它们将被用作相应肖像的背景,而不是默认圆圈。肖像和背景效果最好,如果它们是完整的 RGB 正方形,在 100x100 和 256x256 像素之间,并且在该区域内包含一些透明边框。

例如,这里是一个显示如何添加自定义肖像的模组,它可以补充基础游戏。

可用的 &lt;entityType&gt;Portraits/ 包括:

  • UnitPortraits
  • BuildingPortraits
  • TechPortraits
  • ResourcePortraits
  • ImprovementPortraits
  • UnitPromotionPortraits
  • UniquePortraits
  • NationPortraits
  • ReligionPortraits
  • UnitActionPortraits

为单位类型添加图标

UnitTypes.json 中定义的单位类型在基础游戏中没有图标,但如果你提供名为'Images/UnitTypeIcons/<UnitType>.png'的图像,Civilopedia 可以装饰它们的条目。 (当你这样做时,你可以覆盖单位类型_类别标题_的默认图标 - 它是同一文件夹中的'UnitTypes.png',或者用于移动域的图标 - 'DomainLand'、'DomainWater'、'DomainAir')

为信仰添加图标

单独的信仰 - 与 Beliefs.json 中定义的信仰类型相反 - 在基础游戏中没有图标,但如果你提供名为'Images/ReligionIcons/<Belief>.png'的图像,Civilopedia 可以装饰它们的条目。 Civilopedia 回退到信仰类型的图标 - 正如你在基础游戏中看到的那样,但如果存在单独的图标,它们具有优先权。

添加胜利插图

你可以为每个胜利启用图片,说明它们的进度。这可能是一艘正在建造的宇宙飞船,显示你添加的部分,或者是完成政策分支时的文化进步。它们将显示在胜利屏幕的新选项卡上。

为此,你需要创建多个图像。在以下内容中,&lt;&gt; 表示 VictoryTypes.json 中出现的名称,未翻译,这些文件名(像 Unciv 中的任何其他文件名一样)区分大小写。所有文件都是可选的,除非如注明的 Background:

  • VictoryIllustrations/&lt;name&gt;/Background.png - 这决定整体尺寸,其他不得超出其大小,理想情况下应该具有相同的大小。强制性的,如果此文件缺失,则不会显示此胜利类型的插图。
  • VictoryIllustrations/&lt;name&gt;/Won.png - 如果_你_(查看玩家)赢了这场胜利,则显示。
  • VictoryIllustrations/&lt;name&gt;/Lost.png - 如果竞争对手赢了这场胜利,或者你已经完成了这场胜利,但之前赢得了另一场胜利,则显示。
  • VictoryIllustrations/&lt;name&gt;/&lt;milestone&gt;.png - 对于 milestones 字段中每个没有 [amount] 的条目,一个图像,名称逐字采用但_不带_方括号,保留空格。
  • VictoryIllustrations/&lt;name&gt;/&lt;milestone&gt; &lt;index&gt;.png - 对于 milestones 字段中带有 [amount] 的条目,每个步骤一个图像,从索引 1 开始。
  • VictoryIllustrations/&lt;name&gt;/&lt;component&gt;.png - 对于 requiredSpaceshipParts 字段中每个唯一条目一个图像,即对于只能建造一次的部分。单位名称中的空格必须保留。
  • VictoryIllustrations/&lt;name&gt;/&lt;component&gt; &lt;index&gt;.png - 对于必须建造多次的 requiredSpaceshipParts 字段中的部分,每个实例一个。单位名称中的空格必须保留,并且名称和索引之间必须有一个空格。索引从 1 开始。

记住 - 这些是逻辑名称,因为它们在你的图集文件中编入索引,如果你让 Unciv 为你打包,VictoryIllustrations 文件夹应该放在 &lt;mod&gt;/Images 下 - 或者如果你想在这些图像占用单独的 Victories.atlas,则放在 &lt;mod&gt;/Images.Victories 下(即使留空也不要省略 Images 文件夹,纹理打包器需要它作为标记来执行其任务)。

这几乎就是全部 - 不需要 json,并且作为'Permanent audiovisual mod'工作。Background 图像是触发器,如果存在,所有部分图像也必须存在,否则你的宇宙飞船在起飞前坠毁,带走了 Unciv。那是个玩笑,所有其他图像都是可选的,如果你遗漏了错误的图像,它可能看起来很无聊。

至于"几乎" - 所有图像都一个接一个地覆盖在 Background 图像上,所以它们必须都是相同的大小。除了 Won 和 Lost - 如果满足它们的情况,它们将_替换_整个其余部分,所以它们可以与背景不同的大小。部分图像以不保证的顺序覆盖在背景图像上,因此它们应该使用_透明度_来避免相互隐藏。

创建一组的一种方法是取一个最终图像,选择所有应该是中心部分本身而不是背景的部分(使用套索、魔棒或类似工具,根据需要使用抗锯齿和羽化),复制并粘贴为新图层。然后对背景图层上的选择应用去饱和和/或曲线,只留下完成胜利的外观暗示。现在拆解中心部分 - 进行适合一个部分名称的选择,复制并粘贴为新图层(就位),然后从原始中心部分图层中删除所选部分。冲洗并重复,然后单独导出每个图层为具有适当文件名的 png。 没有建议的大小,但请记住纹理最大为 2048x2048 像素,如果你希望图像正确打包,几个应该适合一个纹理。如果需要,它们将缩小到不超过屏幕大小的 80%,保留纵横比。

声音

标准值如下。声音本身可以在这里找到。

  • arrow, artillery, bombard, bombing, cannon, chimes, choir, click, coin, construction, elephant, fortify, gdrAttack, horse, jetgun, machinegun, metalhit, missile, nonmetalhit, nuke, paper, policy, promote, setup, shipguns, shot, slider, swap, tankshot, throw, torpedo, upgrade, whoosh

模组可以添加自己的声音,只要 attackSound 中的任何新值在模组的声音文件夹中都有相应的声音文件,使用 mp3、ogg 或 wav 之一格式(文件扩展名必须与使用的编解码器匹配)。记住,名称区分大小写。强烈建议小尺寸,Unciv 自己的声音使用 24kHz 联合立体声 8 位 VBR,大约 50-100kBps。

覆盖内置声音

这与图形的工作方式类似,除了不涉及图集。例如,你包含 sounds/Click.mp3,它将代替正常的点击声音播放。这些文件必须保持简短和小。未压缩时大于 1MB 的声音可能会在移动设备上中断或根本不播放。Unciv 尝试标准化为 24kHz 采样率、联合立体声、低比特率 VBR(-128kbps)mp3。只识别 mp3 和 ogg 格式(但现有的 mp3 可以用 ogg 文件覆盖)。

提供其他音乐

模组 /music 文件夹中的声音文件(mp3 或 ogg)将在模组活动时被识别和使用。除了下一段描述的上下文特定音乐外,曲目将从所有可用曲目中随机播放(有一点偏见以避免曲目的接近重复)。没有覆盖 - 模组中的"thatched-villagers.mp3"将与基础游戏为你下载的文件一起播放,并且具有相同的可能性。比特率或长度没有硬性的技术限制,但大的带宽要求可能会导致口吃("下一回合"的结束,就在世界地图更新之前,以及对于非常大的地图,最有可能导致这种情况)。

上下文敏感的音乐:概述

音乐控制器通常会一个接一个地播放曲目,之间有一个暂停(可以在选项中更改)。当打开"Leave game?"确认对话框时,播放将淡出并暂停,并在关闭时可以恢复。

游戏代码中有各种'触发器'启动对新曲目的选择。新曲目将(如果需要)在开始播放之前快速淡出当前正在播放的曲目。曲目选择涉及触发器提供的上下文和随机因素,并尝试不重复任何曲目,直到至少其他八个曲目已播放。

模组可以提供自己的音乐文件夹,如果它们处于活动状态,其内容将与主音乐文件夹中的内容完全相同。模组应该通过仔细选择文件名来控制其曲目的使用。模组开发人员可以监视控制台输出,以获取记录触发器参数或加载错误的曲目选择消息。

一个曲目是特殊的:Thatched Villagers(另请参阅 credits.md)。如果音乐文件夹为空,游戏可以下载它,并且在使用音乐音量滑块时播放。如果某些问题发生,它也是回退曲目(但是,损坏的文件将关闭播放器,直到另一个触发器发生)。

上下文敏感的音乐:触发器列表

触发器通过可选地提供前缀和/或后缀来匹配文件名来指示上下文(称之为意图、情绪、无论什么,这无关紧要)。还有一些标志也会影响选择或行为 - 一个标志功能是使前缀或后缀成为强制性的,意味着如果没有可用的文件匹配,曲目选择器将什么都不做。否则,将通过排序然后选择第一个条目始终从可用列表中选择下一曲目。排序按优先级顺序进行:前缀匹配、后缀匹配、最近播放和一个随机数。因此,由于目前没有触发器具有空前缀,除非匹配请求前缀的文件少于八个,否则匹配没有任何前缀的文件将永远不会播放。

当前的触发器列表如下:

描述前缀[^M]后缀[^X]标志
自动下一曲目[^0]Ambient
启动游戏[^1]Menu
每 10 回合(玩家文明名称)[^M]Peace or War[^2][^F]
新游戏:选择模组(模组名称)[^M]Theme[^S]
新游戏:为玩家选择文明(文明名称)[^M]Theme or Peace[^S]
外交:选择玩家(文明名称)[^M]Peace or War[^3][^S]
首次接触[^4](文明名称)[^M]Theme or Peace[^X]
宣战[^5](文明名称)[^M]War[^X]
文明被击败(胜利/文明名称)Defeat[^X]
玩家获胜(胜利/文明名称)Victory[^X]
黄金时代(文明名称)[^M]Golden[^X]
奇观建成(奇观名称)[^M]Wonder[^X]
科技研究完成(科技名称)[^M]Researched[^X]
地图编辑器:选择文明起始位置(文明名称)[^M]Theme[^S]
选项:音量滑块或默认曲目下载[^D]
音乐控制(选项或从菜单)下一曲目Ambient

图例:

  • [^N]: 未实现
  • [^M]: 前缀必须匹配。如果未找到匹配的文件,触发器将什么都不做。
  • [^X]: 后缀必须匹配。如果未找到匹配的文件,触发器将什么都不做。
  • [^S]: 播放后停止。没有自动下一次选择。
  • [^F]: 替换曲目的慢速淡出。
  • [^D]: 始终播放默认文件。
  • [^0]: 每当曲目完成并且配置的静默已经过去时,选择一个没有任何上下文的'Ambient'曲目。也由'resume'触发(例如,在 Android 上切换到另一个应用并返回)
  • [^1]: 主菜单的首次打开(或初始语言选择器)。
  • [^2]: 活跃玩家是否与任何人处于战争状态。
  • [^3]: 根据你与所选玩家的关系。
  • [^4]: 排除城邦。
  • [^5]: 当另一个玩家向你宣战时的警报以及在外交屏幕中自己宣战。

提供领袖声音

以文明名称和相应文本消息的字段名称命名的声音文件,放置在模组的 voices 文件夹中,每当显示该消息时都会播放。文明名称和消息名称必须用点'.'连接,例如 voices/Zulu.defeated.ogg

领袖声音音频剪辑将被流式传输,而不是缓存,所以它们可以很长 - 但是,如果需要播放另一个领袖声音或城市环境声音,它们将被切断而没有淡出 还要注意,城邦领袖的声音仅适用于城邦实际可以使用的那些消息:attackeddefeatedintroduction

模组彩蛋

以下是 Unciv 将识别的特殊日期(或日期范围)列表:

名称
AprilFoolsDayFriday13thQingmingUncivBirthday
DiaDeLosMuertosLunarNewYearSamhainXmas
DiwaliPassoverStarWarsDayYuleGoat
EasterPrideDayTowelDay

... 这些是什么时候或它们意味着什么 - 查找它,如果有疑问,在我们的来源中(😈)。

视听模组(用户必须然后将其标记为永久)可以定义名为"EasterEggs/name&lt;index&gt;"的纹理,其中名称必须与上表中的名称完全对应,索引从 1 开始计数。 示例:&lt;mod&gt;/Images/EasterEggs/Diwali1.png 等等。 然后,Unciv 将在相应日期的主菜单屏幕上显示它们为"浮动艺术"。它们将不时地从屏幕外出现,滑过窗口,并从另一侧消失,具有不同的角度和速度。

注意:

  • 你可以通过启动 jar 并在命令行中包含 -DeasterEgg=name 来测试这一点。
  • 在重叠的假期的情况下,只选择一个 - 并且较长假期的"影响"通过减少与天数成反比的几率来平衡。例如,DiaDeLosMuertos 是两天,所以这两天每次 Unciv 启动都有 50% 的机会显示彩蛋。
  • Unciv 的"基于地图的"彩蛋独立工作!
  • 没有文化偏见。如果你知道我们应该包含日期测试的一个不错的习俗,只需询问。