伟大工程修改

伟大工程是国家可以建造的特殊建筑,通常是名胜,它可以通过添加河流和环境装饰物来改变地图,同时提供加成。

要完整地实现一个伟大工程,需要编辑多个不同的文件。

伟大工程

伟大工程本身位于/Europa Universalis IV/common/great_projects/*.txt。它们遵循如下格式:

<project> = {
    # 工程起始所在的省份
    start = <province id>

    # 现实中的建成日期(如果你在晚于该日期的时间开始游戏,则该工程会显示出来)
    date = year.month.date

    # 建造所需花费
    build_cost = <ducats>

    # 工程是否可以被移动
    can_be_moved = yes/no

    # 工程的起始等级
    starting_tier = <tier>

    # 工程类型
    type = canal/monument

    # 建造工程的条件
    build_trigger = {
        <conditions>
    }

    # 工程建成时会发生什么
    on_built = {
        <do stuff> # 例如:add_prestige = 25
        # 对于运河,执行 add_canal = <canal_name>
    }

    # 工程被摧毁时会发生什么
    on_destroyed = {
        <do stuff> # 例如:add_prestige = -25
        # 对于运河,执行 remove_canal = <canal_name>
    }

    # 使用工程效果的条件
    can_use_modifiers_trigger = {
        <conditions>
    }

    # 升级工程的条件
    can_upgrade_trigger = {
        <conditions>
    }

    # 工程被征服时是否会被摧毁的条件
    keep_trigger = {
        <conditions>
    }

    # 等级
    tier_<tier> = {
        # 升级工程所需的时间
        upgrade_time = {
            months = <months>
        }

        # 升级工程的花费
        cost_to_upgrade = {
            factor = <ducats>
        }

        # 授予工程所在省份的修正
        province_modifiers = {
            <modifiers>
        }

        # 授予工程所在省份所属地区的修正
        area_modifier = {
            <modifiers>
        }

        # 授予拥有该名胜的国家的修正
        country_modifiers = {
            <modifiers>
        }

        # 授予工程所在省份所属大区的修正
        region_modifier = {
            <modifiers>
        }

        # 升级完成时会发生什么
        on_upgraded = {
            <do stuff> # 作用域为名胜所在的省份;可以通过 owner 作用域影响国家。例如:owner = {add_prestige = 25}
        }

        conditional_modifier = {
            <modifiers> #全国范围的修正。要求 country_modifiers 下至少有 1 个修正
        }
    }
}

注意:原版中共有 4 个等级(包括已毁坏/尚未建成的等级),依次为:tier_0、tier_1、tier_2、tier_3

伟大工程图片

名胜图片模板

伟大工程需要一张图片,用于省份建筑界面。

你需要在/Europa Universalis IV/gfx/interface/great_projects/great_project_<project_name>.dds创建一张图片,该图片应为 300x150,并保存为 DirectDraw Surface(.dds)文件类型。 你还需要在/Europa Universalis IV/interface/<filename>.gfx中添加这张图片,写法如下:

spriteTypes = { # 如果是编辑现有的 .gfx 文件,这一行很可能已经存在,那么你可能无需再写。不过,请确保下面的内容位于其中。
    spriteType = {
        name = "GFX_great_project_<project_name>"
        texturefile = "gfx//interface//great_projects//great_project_<project_name>.dds"
    }
}

邻接

运河需要在 adjacencies.csv 中定义一个特殊的邻接。

<id>;<id>;canal;<id>;-1;-1;-1;-1;comment

前两个 id 是运河所连接的海域。第三个 id 是伟大工程文件中定义的省份。

地图

示例图块:dragon_canal_river.bmp

工程完成后,运河会在地图上生成一条新的河流。这是通过一个与你的伟大工程相关联的特殊河流图块来实现的。

要创建河流图块,你需要把地图裁剪为边长为 128 的倍数的分辨率(即 128x128、256x256 等)。做法是复制 rivers.bmp 并裁剪出所需的区域,这样可以保留其颜色表。

在图块中添加你的新河流,遵循添加河流的常规规则。

将该文件保存为 <project>_river.bmp,其中 <project> 是你的工程名称。

重要:请记下你的图块左上角和左下角在原始 rivers.bmp 中的坐标。你需要在真正裁剪之前完成这一步。

在 default.map 中,你需要添加一个新的运河定义:

canal_definition = {
	name = "<project_name>" # 你的伟大工程的名称。
	x = <x>                 # 图块左上角的 x 坐标。
	y = <y>                 # 地图高度减去图块左下角的 y 坐标。
}
使用 Victorum Universalis 的 rivers.bmp 计算 Y 坐标,作者 San Felipe(又名 Darth Modus)

这里的地图高度数值取自 Victorum Universalis 的 rivers.bmp 文件。注意!高度图会因你所使用的地图文件而异。例如,EU4 原版的地图高度为 2048px。因此,在计算运河的 Y 坐标之前请牢记这一点,否则你的运河可能会生成在与预期不同的位置。

Y 坐标 = 1176(本运河地图示例中绿点的第一个数值)注意!这并不是你最终要填入 default.map 的值。 要得到最终值,你必须按以下步骤操作:

  1. 列表项 使用你喜欢的软件打开你的 rivers.bmp(我用的是 GIMP,但你也可以使用 Photoshop 等)。
  2. 列表项 使用矩形选择工具在 rivers.bmp 中选中并高亮你所选的运河区域(在 GIMP 中这被称为矩形选择工具,GIMP 是我除 Photoshop 之外偏好的图形编辑软件之一),然后将鼠标悬停在所选区域的左上角和左下角(此处以红点和绿点表示),并把数值记下来。你不需要计算或处理红点的坐标;它始终保持不变。
  3. 列表项 用你的 rivers.bmp(主)地图文件的高度减去运河地图上绿点的数值。在本例中,我们要用这张 rivers.bmp 地图(取自 Victorum Universalis)的高度 2304px 减去 1176(绿点的数值)。

在得到绿点的第一个数值之后 计算公式如下: Y = MH(地图高度)- GD(绿点的第一个数值) Y = 2304 - 1176 = 1128 Y 坐标 = 1128(最终值)

因此,填入 default.map 的最终 Y 坐标值为 1128,最终条目如下:

canal_definition = { name = "kra_canal" x = 4151 y = 1128 }

以上说明和条目由 San Felipe(又名 Darth Modus,Victorum Universalis 的作者及 EU4 模组作者)撰写。

再举一个例子:如果你的图块左下角的 y 坐标是 1407,那么你需要计算 2048 - 1407 得到 641,这就是你应当填入定义中的值。

决议

为了让玩家或 AI 能够与运河类伟大工程互动,你需要创建两个决议,一个用于允许建造,另一个用于取消建造。

以下是两个模板:

country_decisions = {
    construct_<project> = {
        major = yes
        potential = {
            is_random_new_world = no
            OR = {
                ai = no
                AND = {
                    treasury = 60000
                    owns_or_vassal_of = <province id>
                }
            }
            has_discovered = <province id>
            <province id> = {
                range = ROOT
                NOT = { has_great_project = <project> }
                NOT = { has_construction = canal }
            }
        }
        allow = {
            owns_or_vassal_of = <province id>
            is_subject = no
            treasury = 30000
        }
        effect = {
            add_treasury = -30000
            <province id> = {
                add_great_project = <project>
            }
        }
        ai_will_do = {
            factor = 1
        }
    }

    cancel_<project> = {
        major = yes
        potential = {
            ai = no
            owns_or_vassal_of = <province id>
            is_subject = no
            <province id> = {
                has_construction = canal
            }
        }
        allow = {
            <province id> = {
                has_construction = canal
            }
        }
        effect = {
            <province id> = {
                cancel_construction = yes
            }
        }
        ai_will_do = {
            factor = 0
        }
    }
}

本地化

伟大工程需要定义以下本地化键:

<project>: "Name"

虽然原版中没有使用,但伟大工程也可以选择性地按如下方式添加描述:

<project>_desc: "Description"
文档 效果 • 触发条件 • 修正列表 • 作用域 • 变量 • 本地化 • 可自定义本地化 • 运行文件 • 事件图片列表
脚本 脚本函数 • 顾问 • 时代 • 开局设定 • 建筑 • 宣战理由 • 殖民区域 • 国家创建 • 文化 • 决议 • Defines • 外交行动 • 灾难 • 中华帝国 • 阶层 • 事件 • 派系 • 政府 • 政府互动 • 伟大工程 • 历史 • 神圣罗马帝国 • 理念组 • 思潮 • 佣兵 • 任务树 • 修正 • On Actions • 议会 • 和约 • 君主性格 • 政策 • 叛军类型 • 宗教 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位
地图 地图 • 地图修改速查 • 随机新世界 • 贸易节点
图形 模型 • 界面 • 贴图库 • 字体 • 单位模型
音频 音乐 • 音效
其他 控制台命令 • 校验和 • 模组结构 • 故障排查 • 运行文件
工具 克劳塞维茨开局编辑器 • EU4模组编辑工具 • JoroDox模组制作工具 • The Validator
指南 省份 • 地图修改速查 • 存档编辑 • 脚本教程