科技

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 中的动力外骨骼:

Clausewitz 脚本
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_weightAI 在几张卡里选哪张的权重
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 层:
Clausewitz 脚本
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:

Clausewitz 脚本
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。上面的动力外骨骼在原版里还带着这一段:

Clausewitz 脚本
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:在科技卡上手动加一行说明。原版护卫舰科技的写法:
Clausewitz 脚本
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 是说明:
本地化 YML
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触发器:是否已拥有

常见问题

  1. 科技从来抽不到:检查前置的拼写(看 error.log)、potential 是否成立、所在层级是否已解锁、weight 是否被某个 factor = 0 清零。控制台 research_technology <键> 能绕过抽卡直接拿到科技,用来测试效果。
  2. 改原版科技:同名覆盖时注意加载规则,见加载顺序与覆盖规则。
  3. error.log 报未知类别或层级:category 和 tier 必须引用已定义的条目。

部分内容改编自 Stellaris Wiki: Technology modding,按 CC BY-SA 3.0 授权。