Starsector Nihilism Guidance
首页
GitHub 项目
首页
GitHub 项目
  • 首页
  • 基础及舰船相关
    • MOD 骨架和入口文件
    • 制作一艘基本舰船
    • 制作一艘航母与战机
    • 制作一艘相位舰
    • 制作火炮、光束与导弹
    • 为舰船加入内置武器、船插与战机
    • 补充描述文本
  • 无需入门的代码修改
    • 以船插为例初步熟悉代码
    • 制作完整船插
    • 制作最小战术系统
    • 为武器加入命中与光束特效
  • 势力与生涯星系
    • 注册一个势力
    • 配置势力舰队
    • 制作 MOD 入口类的最基础适配
    • 制作一个生涯星系
    • 补完描述文本
  • 战役与无代码对象
    • 制作测试战役装配
    • 为模拟战与标题画面加入装配
    • 为舰船加入外观风格
    • 制作一艘模块船
    • 制作一种星体类型
    • 制作一个自定义实体
  • 音频资源与播放
    • 准备 OGG 音频资源
    • 注册音频资源
    • 为游戏对象加入音频
  • Java 工程化
    • 确认 Java 与编译依赖
    • 迁移代码文件到 src
    • 配置 Gradle 工程
    • 构建 JAR 并声明产物
  • 全局服务
    • 制作 MOD 入口类
    • 使用 Global 访问游戏服务
    • 读取设置
    • 调用声音播放器
    • 记录和定位 MOD 日志
  • 战斗运行时
    • 读取战斗引擎状态
    • 读取战斗对象
    • 制作每帧战斗插件
    • 修改舰船数值
    • 配置武器脚本
    • 配置战斗监听器
    • 制作分层渲染插件
  • 战斗内容扩展
    • 详解舰船插件
    • 详解战术系统
    • 详解武器动画
  • 生涯世界与基础服务
    • 读取生涯世界状态
    • 构建生涯地点
    • 配置生涯势力
    • 放置生涯实体
  • 生涯舰队与舰队成员
    • 生成生涯舰队
    • 管理舰队中的成员
    • 舰队状态的重算过程
    • 维护舰队成员状态
    • 读取并修改舰船装配
  • 市场与商品
    • 创建生涯市场
    • 读写货舱内容
    • 注册市场商品
    • 实现专用子市场
    • 制作专用产业
    • 注册特殊物品
    • 实现市场条件
  • 人物与技能
    • 配置人物基础
    • 让人物承担角色
    • 制作角色技能
  • 生涯脚本与情报事件
    • 编写生涯逐帧脚本
    • 监听生涯事件
    • 选择生涯插件
    • 管理舰队活动情报
  • 酒吧事件与任务
    • 组织生涯交互对话
    • 实现对话插件
    • 接入酒吧事件
    • 构建阶段任务
    • 接入酒吧任务
  • Rules 系统、命令与内存
    • 组织 Rules 规则表
    • 编排 Rules 对话
    • 接入 Rules 生涯场景
    • 编写 Rules 命令
    • 使用 MemoryAPI 保存状态
  • 文件读取与写入
    • 读取 MOD 内文本
    • 读取 MOD 内 JSON 文件
    • 读取 MOD 内 CSV
    • 读写 common 数据
    • 实现本地化机制
  • 常用依赖库
    • 接入常用依赖库
    • 使用 LazyLib 几何工具
    • 使用 LazyLib 查询战场
    • 使用 LazyLib 保存公共 JSON
    • 注册 GraphicsLib 光照数据
    • 创建 GraphicsLib 动态光源
    • 制作 GraphicsLib 纹理映射
    • 配置 MagicLib 自动尾迹
    • 创建 MagicLib 运行时尾迹
    • 配置 MagicLib 数据赏金
    • 使用 MagicLib 辅助生涯开发
    • 使用 MagicLib 战斗小工具
  • 可选依赖与 Nexerelin
    • 接入可选依赖
    • 登记 Nexerelin 势力与外交配置
    • 配置 Nexerelin 的两种星区开局
    • 配置 Nexerelin 战略 AI 与扩张规模
    • 登记 Nexerelin 地面战单位与产业
    • 为 Nexerelin 特遣队添加命名与事件响应
    • 制作即时生效的 LunaLib 设置面板
  • 着色器与渲染
    • 使用 Java OpenGL
    • 使用 GLSL 进阶
    • 使用 VBO 和 VAO 保存顶点
    • 使用 SSBO 传递参数
    • 使用实例化进行绘制
    • 选择 BoxUtil 渲染方案

制作一艘航母与战机

本节将引导您制作一艘航母,即带有甲板与港口的舰船。既然有航母,自然还需要包括战机。

本节预期阅读时间:~12 分钟。

本节预期操作时间:~15 分钟。

学习目标

完成后,您将能够:

  • 制作带甲板与港口的航母,并为其填写含甲板数量的舰船数据;
  • 制作战机,并完成 hull、variant、wing 的配置;
  • 从可观察症状判断错误位于船体、装配还是联队。

前置知识

  • [C1-S2] 的舰船编辑器操作与普通舰船制作流程;
  • [C1-S2] 的 ship_data.csv 登记规则;
  • [C1-S2] 的 Addship 使用方法与 starsector.log 排错方法。

获取贴图

相信获取贴图的部分已经无需赘述了,这些贴图的制作时长共计不到 1 分钟:

守炉人级航母贴图

炉渣级战机贴图

命名并将贴图放入正确的位置

位置建议

所有战机都应该被放入 fighter 文件夹,有助于后续维护。

航母与战机贴图在 graphics/ships 目录中的位置

守炉人-级 (Furnaceman) 航母,ID 为 GearIn_furnaceman。

炉渣-级 (Slag) 战机,ID 为 GearIn_slag。

制作航母舰船文件

预先制作

按照与寻常舰船无异的过程,制作 守炉人-级 航母的舰船文件,但有额外的 1 步。

舰船编辑器中的守炉人级航母

设置甲板

按 L 设置甲板:

甲板设置

每个甲板建议设置至少 2 个港口 (Port),最佳建议是设置 4 个。

港口数为 0 时,战机从舰船中心生成。

港口数过少时,战机的生成将异常缓慢。

舰船编辑器中的航母甲板港口设置

每一个图标右下角的数字说明它属于第 x 个甲板,由于 守炉人-级 航母只有 2 个甲板,所以右下角最大数字为 2。而图标的数量则说明这个甲板有多少个港口。

其它属性设置完毕后,按 V 保存。

制作航母舰船数据

如前文所述,最为简单的做法是复制黏贴。打开原版的 ship_data.csv,将 赶牛人-级 航母的数据复制过来,然后稍作修改:

name,id,designation,tech/manufacturer,system id,fleet pts,hitpoints,armor rating,max flux,8/6/5/4%,flux dissipation,ordnance points,fighter bays,max speed,acceleration,deceleration,max turn rate,turn acceleration,mass,shield type,defense id,shield arc,shield upkeep,shield efficiency,phase cost,phase upkeep,min crew,max crew,cargo,fuel,fuel/ly,range,max burn,base value,cr %/day,CR to deploy,peak CR sec,CR loss/sec,supplies/rec,supplies/mo,c/s,c/f,f/s,f/f,crew/s,crew/f,hints,tags,logistics n/a reason,codex variant id,rarity,breakProb,minPieces,maxPieces,travel drive,number
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Lasher,lasher,Frigate,Low Tech,ammofeed,5,1750,300,2100,1750,140,55,,120,110,90,60,90,200,FRONT,,210,0.4,1,,,25,50,40,25,1,25,10,9000,8,10,240,0.25,4,4,,,,,,,,"lowtech_bp, merc, ind",,,,0.4,2,2,,204
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Hammerhead,hammerhead,Destroyer,Midline,ammofeed,10,5000,500,4200,4167,250,95,,90,60,40,30,60,400,FRONT,,300,0.4,0.8,,,50,100,100,60,2,30,9,40000,5,12,360,0.25,10,10,,,,,,,,"midline_bp, merc, ind",,,,0.5,2,3,,300
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Eagle,eagle,Cruiser,Midline,maneuveringjets,14,8000,1000,11000,14000,700,155,,60,40,30,15,20,1200,FRONT,,270,0.4,0.8,,,150,250,150,100,3,33,8,100000,3,12,480,0.25,20,20,,,,,,,,"rare_bp, merc, ind",,,,0.5,2,3,,401
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Conquest,conquest,Battlecruiser,Midline,maneuveringjets,24,12000,1200,20000,30000,1200,315,,45,20,15,6,4,2500,OMNI,,90,0.4,1.4,,,400,500,300,300,10,30,8,300000,3,15,600,0.25,40,40,,,,,,,,"rare_bp, merc",,,,0.5,2,4,,503
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

工匠,GearIn_artizan,驱逐舰,未知,ammofeed,10,5000,500,3800,4167,200,95,,80,60,40,30,60,400,FRONT,,300,0.4,0.8,,,50,100,100,60,2,30,9,40000,5,12,360,0.25,10,10,,,,,,,,"GearIn_bp",,,,0.5,2,3,,300
守炉人,GearIn_furnaceman,轻型航母,未知,targetingfeed,11,4500,400,3000,2813,225,75,2,75,50,30,25,25,450,FRONT,,300,0.4,0.8,,,90,150,40,40,2,20,9,52000,5,15,360,0.25,11,13,,,,,,,CARRIER,"GearIn_bp",,,,0.5,2,3,,318

在本例中,守炉人-级 航母的战术系统被替换为 苍鹭-级 的同款,来提供一种类似的 "命令式" 操作感。因为它的槽位大多数都被替换为防御型小型实弹槽位,因此为它提供更高的结构与更低的部署点作为幅度恰当的补偿。

航母需要填写 甲板数量,此处为 2。

tag 也作了与 工匠-级 相似的处理。

战斗中的战机投放与返航表现如下。

守炉人级航母在战斗中投放战机

验证方案

前置数据:已经完成 GearIn_furnaceman 的船体文件和 ship_data.csv 登记,并准备一套可搭载战机联队的测试装配。

  1. 使用控制台命令 Addship GearIn_furnaceman 获取该航母。
  2. 进入任意战斗并部署它,观察战机是否从甲板港口生成 (而非舰体中心),以及联队补充与返航是否正常。

预期结果:

  • 船体成功加载;
  • 战机从甲板港口生成,联队补充与返航正常;
  • 日志中没有 GearIn_furnaceman 相关的错误。

制作战机舰船文件

按照与寻常舰船无异的过程,制作 炉渣-级 战机的舰船文件。虽然 "战机的舰船文件" 听上去很奇怪。

战机制作注意点

战机的碰撞箱应该尽可能简单,甚至可以为此牺牲一些精度。

战机的武器 不应该选用 内置,因为战机的装配是基于装配文件的,而对内置槽位进行装配会产生一些问题。

不要选错 hullSize —— 游戏以 hullSize == FIGHTER 判定战机身份,选错时该单位不会被分配战机 AI,也不会被计入联队成员、返航与补充。

舰船编辑器中的炉渣级战机

制作战机舰船的数据

"战机舰船的数据" 听上去更奇怪了。

继续复制黏贴。打开原版的 ship_data.csv,将 阔剑-级 战机的数据复制过来,然后稍作修改:

name,id,designation,tech/manufacturer,system id,fleet pts,hitpoints,armor rating,max flux,8/6/5/4%,flux dissipation,ordnance points,fighter bays,max speed,acceleration,deceleration,max turn rate,turn acceleration,mass,shield type,defense id,shield arc,shield upkeep,shield efficiency,phase cost,phase upkeep,min crew,max crew,cargo,fuel,fuel/ly,range,max burn,base value,cr %/day,CR to deploy,peak CR sec,CR loss/sec,supplies/rec,supplies/mo,c/s,c/f,f/s,f/f,crew/s,crew/f,hints,tags,logistics n/a reason,codex variant id,rarity,breakProb,minPieces,maxPieces,travel drive,number
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Lasher,lasher,Frigate,Low Tech,ammofeed,5,1750,300,2100,1750,140,55,,120,110,90,60,90,200,FRONT,,210,0.4,1,,,25,50,40,25,1,25,10,9000,8,10,240,0.25,4,4,,,,,,,,"lowtech_bp, merc, ind",,,,0.4,2,2,,204
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Hammerhead,hammerhead,Destroyer,Midline,ammofeed,10,5000,500,4200,4167,250,95,,90,60,40,30,60,400,FRONT,,300,0.4,0.8,,,50,100,100,60,2,30,9,40000,5,12,360,0.25,10,10,,,,,,,,"midline_bp, merc, ind",,,,0.5,2,3,,300
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Eagle,eagle,Cruiser,Midline,maneuveringjets,14,8000,1000,11000,14000,700,155,,60,40,30,15,20,1200,FRONT,,270,0.4,0.8,,,150,250,150,100,3,33,8,100000,3,12,480,0.25,20,20,,,,,,,,"rare_bp, merc, ind",,,,0.5,2,3,,401
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#Conquest,conquest,Battlecruiser,Midline,maneuveringjets,24,12000,1200,20000,30000,1200,315,,45,20,15,6,4,2500,OMNI,,90,0.4,1.4,,,400,500,300,300,10,30,8,300000,3,15,600,0.25,40,40,,,,,,,,"rare_bp, merc",,,,0.5,2,4,,503
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

炉渣,GearIn_slag,,未知,flarelauncher_fighter,,750,100,200,,100,0,,180,400,350,90,180,30,NONE,,0,0,0,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,0,,,,104

工匠,GearIn_artizan,驱逐舰,未知,ammofeed,10,5000,500,3800,4167,200,95,,80,60,40,30,60,400,FRONT,,300,0.4,0.8,,,50,100,100,60,2,30,9,40000,5,12,360,0.25,10,10,,,,,,,,"GearIn_bp",,,,0.5,2,3,,300
守炉人,GearIn_furnaceman,轻型航母,未知,targetingfeed,11,4500,400,3000,2813,225,75,2,75,50,30,25,25,450,FRONT,,300,0.4,0.8,,,90,150,40,40,2,20,9,52000,5,15,360,0.25,11,13,,,,,,,CARRIER,"GearIn_bp",,,,0.5,2,3,,318

在本例中,炉渣-级 战机由 阔剑-级 修改而来,max flux 与 flux dissipation 两列被调高至 200/100。而对应地,它将搭载双管轻型自动炮,且最大速度降低了 20。

制作战机的装配

虽然舰船编辑器的确拥有制作装配的功能,但编者极度不推荐使用它,因为它不利于建立文件直觉,且对于后期的进一步调整没有任何正面价值。

继续复制黏贴。打开原版的 variants/fighters/ 文件夹,找到 阔剑-级 的装配,将其复制到您 MOD 的对应位置。然后将文件名改为 舰船 ID + 某个后缀:

炉渣级战机装配文件的命名与存放位置

然后打开文件,准备修改:

{
	"quality":0.5,
	"displayName":"Heavy Fighter",
	"hullId":"broadsword",
	"variantId":"broadsword_Fighter",
	"fluxVents":0,
	"fluxCapacitors":0,
	"hullMods":[], # array of strings

	# mode is either LINKED or ALTERNATING
	# slot ids (WS ***) must match what's in the .ship file
	"weaponGroups":[
		{"mode":"LINKED",
		 "weapons":{
		 			"WS 001":"lightmg",
		 			"WS 002":"lightmg",
		 		   },
		},
		{"mode":"LINKED",
		 "weapons":{
		 			#"WS 003":"swarmer_fighter",
		 		   },
		},
	],
}

战机装配文件速查表

不在本表上的数据均为对于战机而言不必修改的数据或无意义数据。

英文实际意义
displayName战机本装配的装配名,会在战机的数据页面被展示
hullId战机本装配的舰船 ID,在本例为 GearIn_slag
variantId战机本装配的装配 ID,建议与文件名相同,在本例为 GearIn_slag_normal
hullMods战机本装配所安装的插件
weaponGroups战机本装配的武器列表,在 weapons 项目里的则是具体武器。注意,图中诸如 WS 001 的是槽位 ID,必须是战机本身确实拥有的槽位,否则游戏将报错。而槽位 ID 后的则是武器 ID,可以查询 weapon_data.csv。
{
	"quality":0.5,
	"displayName":"重型战机",
	"hullId":"GearIn_slag",
	"variantId":"GearIn_slag_normal",
	"fluxVents":0,
	"fluxCapacitors":0,
	"hullMods":[], # array of strings

	# mode is either LINKED or ALTERNATING
	# slot ids (WS ***) must match what's in the .ship file
	"weaponGroups":[
		{"mode":"LINKED",
		 "weapons":{
		 			"WS0001":"lightdualac",
		 			"WS0002":"lightdualac",
		 		   },
		},
		{"mode":"LINKED",
		 "weapons":{
		 			#"WS 003":"swarmer_fighter",
		 		   },
		},
	],
}

再次强调:一定要注意那些武器槽 (WSxxx**) 是否存在于战机的船体文件里。**原版的武器槽 ID 习惯是 "WS 00X",而编辑器的习惯是 "WS000X",非常容易出错。

制作战机的战机数据

"战机的战机数据" 听上去比前两个还更奇怪。

打开 wing_data.csv,继续复制粘贴。既然 炉渣-级 是从 阔剑-级 修改而来的,那么战机数据也应该从 阔剑-级 里复制并修改:

id,variant,tags,tier,rarity,fleet pts,op cost,formation,range,attackRunRange,attackPositionOffset,num,role,role desc,refit,base value,,,,,,,,,,,,,number
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#broadsword_wing,broadsword_Fighter,"fighter4, fighter, low, lowtech_bp, merc, ind",0,,6,8,V,4000,500,,3,FIGHTER,Heavy Fighter,10,6000,,,,,,,,,,,,,1
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#talon_wing,talon_Interceptor,"interceptor1, interceptor, low, base_bp, merc, ind",0,,3,2,V,4000,200,600,4,INTERCEPTOR,Interceptor,5,2000,,,,,,,,,,,,,6
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#dagger_wing,dagger_Bomber,"bomber4, bomber, high, hightech_bp, merc, ind",2,,5,18,V,4000,2000,600,3,BOMBER,Bomber,18,9000,,,,,,,,,,,,,11
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#xyphos_wing,xyphos_Fighter,"support3, fighter, high, rare_bp, hist1t, merc, ind",3,0.5,7,18,V,0,500,,2,SUPPORT,Support,15,10000,,,,,,,,,,,,,2
,,,,,,,,,,,,,,,,,,,,,,,,,,,,

GearIn_slag_wing,GearIn_slag_normal,"fighter4, fighter, low, GearIn_bp",0,,6,8,V,4000,500,,3,FIGHTER,重型战机,12,6000,,,,,,,,,,,,,1

该行的 tags 已按上文 "提前准备" 的建议处理:蓝图 tag 被替换为 GearIn_bp,并清掉了 merc, ind。

战机的 wing id 绝对不能和 ship id 一致

如果战机的 wing id 和 ship id 一致,那么某些用于处理战机生成的方法就无法正确生成整个联队。

如果您真的这么干了,虽然您不会在正常测试中感觉到任何问题,但一旦您后期有类似需求,或您的 MOD 和其它有类似功能的 MOD 一同运行,那么您会迅速理解为什么这一则警告是红色的而非黄色的。

wing_data.csv 数据速查表

不在本表上的数据均为本教程用不到的数据 (如 fleet pts) 或不重要数据 (如 number),照抄原版样本即可。

英文实际意义
id战机的战机 ID,如果没有特别要求,应当以 _wing 结尾
variant战机所对应的装配文件,在本例中是 GearIn_slag_normal
tags进阶内容,不可随意编纂
tier科技等级,影响市场、突袭等权重,照抄原版样本即可
rarity稀有度,影响市场、突袭等权重,照抄原版样本即可
op cost装配点数需求
formation战机队形,允许的有 BOX、V、CLAW 和 DIAMOND,分别是簇团、正 V 编队、反 V 编队和棱形编队
range最大交战距离
attackRunRange当战机与敌舰交战时,最大允许的可后撤距离
attackPositionOffset战机攻击距离补正
num每联队的战机数
role战机的 AI 种类,允许的有 FIGHTER、INTERCEPTOR、BOMBER、SUPPORT、ASSAULT。INTERCEPTOR 目标选取独走一条路径 (优先锁定范围内最近的敌方战机);BOMBER 是轰炸机,SUPPORT 是不会主动离开母舰的支援机。环绕距离不随 role 变化:attackRunRange 按联队逐行设置,原版拦截机联队为 200–600,轰炸机反而最大 (2000–2500)
role desc战机类型文字描述
refit战机整备所需秒数
base value每联队的成本价

原版以常规方式在市场里刷新战机时,只纳入 tier 不大于 3 的联队,所以除非有意不希望让某种战机出现,否则 tier 最好不要大于 3。非常规方式不适用于此限制。

wing_data.csv tags 速查表

本表未列出的 tags 与战机性能无关,例如 rare_bp,照抄原版样本即可。

英文实际意义
fighter*当进行自动装配时,优先使用 * 所处的位置较高的战机。例如 fighter2 总是会替代 fighter1
interceptor*当进行自动装配时,优先使用 * 所处的位置较高的战机。例如 interceptor2 总是会替代 interceptor1
bomber*当进行自动装配时,优先使用 * 所处的位置较高的战机。例如 bomber2 总是会替代 bomber1
support*当进行自动装配时,优先使用 * 所处的位置较高的战机。例如 support2 总是会替代 support1
以上 4 条只应当包含 1 条
fighter与 role 列 FIGHTER 同义的分类 tag。
interceptor与 role 列 INTERCEPTOR 同义的分类 tag,同上
bomber与 role 列 BOMBER 同义的分类 tag,同上
以上 3 条只应当包含 1 条
auto_fighter只有包含此 tag 的战机才能被无人战舰使用
dronetag 存在于数据中,引擎侧无消费点、不产生行为
rapid_reform联队将倾向于保持严格的阵型而非四散而开
leader_no_swarm联队中的首机一旦接敌就会拉开距离,而非无脑蜂拥而上
wingmen_no_swarm联队中的首机以外的战机一旦接敌就会拉开距离,而非无脑蜂拥而上
match_leader_facing联队中的其它所有战机与首机保持朝向完全一致
attack_at_an_angle战机 AI 将倾向于使用最大武器倾角侧舷对敌,而非正面对敌
independent_of_carrier当航母被消灭或无所属航母时,依然正常运作而非四散溃逃。且当场上没有任何同侧舰船时,这些战机不会自动自爆而是需要被手动消灭
rd_no_extra_craft后备部署 专供,使本战机不响应它的效果

战斗中联队的生成、开火与返航表现如下。

炉渣级战机联队在战斗中的表现

验证方案

前置数据:已经完成 GearIn_slag 船体、GearIn_slag_normal 装配和 GearIn_slag_wing 联队登记,并准备一艘可搭载该联队的航母。

  1. 使用控制台命令 Addwing GearIn_slag_wing 来获取该联队。
  2. 进入战斗部署一艘搭载该联队的航母,观察战机从甲板生成、武器开火、返航与补充。
  3. 在装配界面核对战机的分类。

预期结果:

  • 船体成功加载;
  • 战机的数据符合预期,role desc 显示为 重型战机,在战斗机一栏出现;
  • 日志中没有 GearIn_slag_wing 相关的错误。

故障分析

  • AddShip 找不到航母:ship_data.csv 的 GearIn_furnaceman 行未加载,或 .ship、CSV 与装配引用的船体 ID 不一致。

    • 解决方案:统一 ID 并重启游戏。
  • 航母战机从舰体中心生成:对应甲板没有港口,无法提供出入位置。

    • 解决方案:在舰船编辑器中补齐并保存甲板港口。
  • 联队无法补充或返航:战机船体的 hullSize 不是 FIGHTER,或 wing、variant、hull 三段 ID 没有依次指向现有对象。

    • 解决方案:修正引用后重新部署航母。
  • Addwing 报 No LPC found with id [...]:ID 未加载,或误用了 hull、variant ID。命令会自动补 _wing 后缀。

    • 解决方案:核对后使用 wing ID,重启。
  • 战机生成后没有武器:variant 中的槽位 ID 与 .ship 不一致,武器无法挂载到目标槽位。

    • 解决方案:统一槽位 ID 并重新生成联队。
  • 装配界面的联队分类与 role 不一致:wing_data.csv 的 role、role desc 或分类 tag 配置不匹配,或修改尚未重新加载。

    • 解决方案:修正并重启游戏。
  • 日志出现航母或战机加载错误:从首个异常开始,沿最终 ID 依次核对 CSV、wing、variant、hull 和资源路径。

    • 解决方案:修正首个断点并重启。

总结

本节在普通舰船链的基础上完成了两种专用约束的完整流程。航母通过甲板与港口投放战机,战机必须依次完成 hull、variant、wing 的注册。

虽然对于装配文件的介绍并不详细,且手搓 .variant 的方式可能太过于原始,但对于战机这种小体量对象而言正合适。另外,编者建议您多加练习此类能力,若能从装配文件中直接读出实际内容、直接简单地修改几个位点就完成调整,将省下很多调试时间。

建议参考项

  • data/hulls/ship_data.csv:舰船数据表,航母行需填写 fighter bays 与 CARRIER hint。
  • data/hulls/wing_data.csv:联队数据表,GearIn_slag_wing 行落点。
  • data/variants/fighters/:战机装配文件 (GearIn_slag_normal.variant) 的落点。
  • data/variants/fighters/broadsword_Fighter.variant:战机装配基线,本例装配由它修改而来。
  • data/weapons/weapon_data.csv:武器 ID 查询 (lightdualac 等)。
  • Starsector/starsector-core/starsector.log:游戏日志,排查加载错误与最终 ID 报错。
  • Starsector/mods/Console Commands/data/console/commands.csv:Addship/Addwing 控制台命令条目。
  • com.fs.starfarer.api.loading.FormationType:联队队形枚举全集;
  • com.fs.starfarer.api.loading.WingRole:联队内战机角色枚举全集。
在 GitHub 上编辑此页
上次更新: 2026/10/12 09:27
贡献者: 1847905557
上一页
制作一艘基本舰船
下一页
制作一艘相位舰