科技
common/technology 的字段、抽卡权重、可重复科技、科技替换与解锁显示
文件在哪里
| 位置 | 内容 |
|---|---|
common/technology/*.txt | 科技本体 |
common/technology/category/00_category.txt | 科技类别(materials、voidcraft、industry……)及其图标 |
common/technology/tier/00_tier.txt | 科技层级,以及解锁下一层所需的上一层科技数 |
common/technology/000_documentation.txt | 原版的字段说明(注释写着“可能不全”) |
科技的键名就是内部 ID,原版统一用 tech_ 前缀。你自己的科技请再加一层模组前缀,例如 tech_mymod_xxx,避免和原版或其他模组撞名。
一个真实的科技
原版 common/technology/00_eng_tech.txt 中的动力外骨骼:
tech_powered_exoskeletons = {
cost = @tier1cost1
area = engineering
tier = 1
category = { industry }
prerequisites = { "tech_basic_industry" }
weight = @tier1weight1
gateway = robotics
modifier = {
army_damage_mult = 0.10
worker_and_simple_drone_cat_bonus_workforce_mult = 0.05
}
weight_modifier = {
factor = 1.5
}
ai_weight = {
modifier = {
factor = @robots_ai_tech_factor
is_spiritualist = no
is_hive_empire = no
}
}
}@tier1cost1 这类变量定义在 common/scripted_variables/00_scripted_variables.txt(@tier1cost1 = 1000)。用原版变量能让你的科技跟着原版平衡调整一起变;也可以直接写数字。
常用字段
| 字段 | 说明 |
|---|---|
area | 研究领域:physics、society、engineering |
tier | 层级,必须是 tier/00_tier.txt 里定义过的 |
category = { ... } | 类别,决定由哪位专长科学家加成、研究速度修正如何作用 |
cost | 研究所需点数,可以是数字,也可以是带 factor 和 modifier 的块 |
prerequisites = { ... } | 前置科技,全部研究完才可能抽到 |
potential = { ... } | 国家作用域触发器;不成立时这项科技对该国不存在 |
weight / weight_modifier | 被抽到的基础权重及其乘数(下一节) |
ai_weight | AI 在几张卡里选哪张的权重 |
modifier = { ... } | 研究完成后给国家的永久修正,键见修正 |
start_tech = yes | 开局就拥有;原版常配合 starting_potential 限制哪些国家开局拥有 |
is_rare = yes / is_dangerous = yes | 稀有科技、危险科技的标记 |
is_reverse_engineerable | 能否通过打捞残骸获得 |
gateway | 原版用来给一串科技打分组标签,如上例的 robotics |
feature_flags = { ... } | 解锁硬编码功能,见下文 |
prereqfor_desc | 在科技卡上额外列出“解锁了什么”,见下文 |
研究选项是怎么抽出来的
群星的科研是“抽卡”:每次从所有满足前置、potential 成立、所在层级已解锁的科技里,按权重随机抽出几张。
weight是基础权重,weight_modifier里的factor相乘、add相加。权重为 0 时永远不会被抽到,但仍可以由效果直接给予(下文)。weight_modifier里的modifier = { factor = 2 <触发器> }只在触发器成立时生效,触发器作用域是国家。- 层级由
tier/00_tier.txt控制,例如原版的第 2 层:
2 = { # Tier 2
previously_unlocked = 6
weight_modifier = {
base = 1
complex_trigger_modifier = {
trigger = num_researched_techs_of_tier
parameters = {
tier = 4
}
mode = add
mult = 0.2
}
}
}previously_unlocked = 6 表示上一层研究满 6 项后本层才开放。
权重组
原版可重复科技用 weight_groups 和 mod_weight_if_group_picked 避免一次抽出好几张同类卡。00_eng_tech_repeatable.txt 里的注释解释了它:抽中一张带 weight_groups = { repeatable } 的科技后,剩下候选里写了 mod_weight_if_group_picked = { repeatable = 0.01 } 的,权重都乘以 0.01。
可重复科技
levels = -1 表示无限级,cost_per_level 为每升一级增加的花费。原版 common/technology/00_eng_tech_repeatable.txt:
tech_repeatable_improved_tile_mineral_output = {
area = engineering
cost = @repeatableTechBaseCost
cost_per_level = @repeatableTechLevelCost
tier = @repeatableTechTier
category = { industry }
levels = -1
prerequisites = { "tech_mineral_purification_2" }
weight = @repeatableTechWeight
weight_groups = {
repeatable
}
mod_weight_if_group_picked = {
repeatable = 0.01
}
modifier = {
planet_jobs_minerals_produces_mult = 0.05
}
}has_technology 触发器可以检查“至少达到某一级”,见 triggers.log。
科技替换(technology_swap)
同一项科技对某些国家显示成另一个名字、甚至给另一套修正,用 technology_swap。上面的动力外骨骼在原版里还带着这一段:
technology_swap = {
name = tech_powered_exoskeletons_wilderness
inherit_icon = yes
inherit_effects = yes
trigger = {
is_wilderness_empire = yes
}
}- 多个替换同时成立时,用第一个。
inherit_effects = no时替换版不继承原科技的modifier,需要自己写。- 文档还列了
area和category:替换版可以换领域和类别。category是整体替换,想保留原来的类别要重新写上。
解锁内容怎么显示
建筑、区划、部件等都是在自己的定义里写 prerequisites = { "tech_xxx" },科技卡上的“解锁”列表由游戏自动汇总,不需要在科技里登记。
两个补充手段:
feature_flags:解锁引擎硬编码的功能,例如原版的gateway_activation。这些标记只能用游戏已有的,不能自创。显示文字的本地化键是feature_<标记>和feature_<标记>_desc,例如feature_gateway_activation。prereqfor_desc:在科技卡上手动加一行说明。原版护卫舰科技的写法:
prereqfor_desc = {
ship = {
title = "TECH_UNLOCK_CORVETTE_CONSTRUCTION_TITLE"
desc = "TECH_UNLOCK_CORVETTE_CONSTRUCTION_DESC"
}
}图标与本地化
- 图标:原版不为科技定义 sprite,而是按键名直接读取
gfx/interface/icons/technologies/<科技键>.dds,例如tech_powered_exoskeletons.dds。 - 本地化:
<科技键>是名字,<科技键>_desc是说明:
l_simp_chinese:
tech_mymod_ion_drills: "离子钻头"
tech_mymod_ion_drills_desc: "用电离等离子体切割岩层,采矿效率显著提高。"替换版的名字(上例的 tech_powered_exoskeletons_wilderness)同样需要 名字 与 名字_desc 两个键。
在脚本里给科技
| 写法 | 作用(国家作用域) |
|---|---|
give_technology = { tech = tech_xxx message = yes } | 直接获得 |
add_research_option = tech_xxx | 塞进可选研究列表,直到研究完成 |
add_tech_progress = { tech = tech_xxx progress = 0.5 } | 增加研究进度(0.0 – 1.0) |
has_technology = tech_xxx | 触发器:是否已拥有 |
常见问题
- 科技从来抽不到:检查前置的拼写(看
error.log)、potential是否成立、所在层级是否已解锁、weight是否被某个factor = 0清零。控制台research_technology <键>能绕过抽卡直接拿到科技,用来测试效果。 - 改原版科技:同名覆盖时注意加载规则,见加载顺序与覆盖规则。
error.log报未知类别或层级:category和tier必须引用已定义的条目。
部分内容改编自 Stellaris Wiki: Technology modding,按 CC BY-SA 3.0 授权。