[JP]舰船MOD基础

0 点赞
群星
转载

舰船变更与添加基础小贴士 首先 个人备忘录及简易MOD教程。 《群星》2.1版本 说实话,与其看这些内容不如去查阅英文维基。 查看其他人的MOD内容(不过可能会有多余的描述或垃圾文件,所以还是上述方法更有帮助)。 关于MOD的本地化和MOD制作基础,可参考M_Gamelin先生的相关资料。 至于CG模型和纹理等内容,推荐LOBO先生的博客。 如有疑问,请在评论区留言。舰船文件结构 以下是一些个人发现的内容,可能包含较多冷门知识 额外舰船(如以太族舰船)MOD所需的最低限度文件 common ship_sizes original_sizes.txt(舰船基本能力规格) section_templates original_section.txt(各分段设定) component_templates original_thrusters.txt(推进器设定) original_reactors.txt(反应堆设定) gfx models ships original(在ship_sizes中指定的舰船名称(若是舰船套装则为graphical_culture的ID名称)) original_entities.资源(pdxmesh到分区的分配、定位器的设置位置信息等) original_meshes.gfx(pdxmesh的网格指定) original.mesh(网格文件(CG模型本体)) original_diffuse.dds(纹理 漫反射贴图) original_normal.dds(纹理 法线贴图) original_specular.dds(纹理 高光贴图) localisation original_I_english.yml(语言文件) 基本上asset、gfx、txt等文件名称可以任意命名,但由于可能与其他MOD的文件重名,建议使用易于理解且具有特色的名称。 以上11个文件是添加舰船所需的最低要求。(注:仅在将舰船建造的触发科技设置为原版已有的科技时适用) 例如 「希望在设计界面右侧添加专用组件」 「希望将建造解锁的触发条件设为原创科技」 等,随着各种调整的增加,所需文件也会不断增多。 original_sizes.txt 概要 舰船基本能力的规格文本

基本内容已写在图片上,请放大查看。 我正在编写ID名为“original”的舰船规格。 这个ID名在多处出现,所以需要一个简单易懂的名称。 难以理解的地方已用红框标出。 以下是详细说明。 ①修正器:这里可以填写舰船能力的额外加成。参数(使用add(+-)进行加减运算,mult(+-)进行乘除运算) ship_armor_add(mult) 装甲 ship_evasion_同上 回避 ship_shield_hp_同上 护盾 ship_hitpoints_同上 生命值 ship_speed_同上 速度 ship_weapon_range_同上 攻击距离 ship_fire_rate_同上 攻击速度 ship_auto_repair_同上 自动修复 ship_shield_regen_同上 护盾回充 ship_tracking_同上 追踪 ship_weapon_damage 武器伤害 还有很多未记载的参数。 部分参数可能没有add或mult。即使没有add,似乎也能生效。 ②section_slots 部分数量。 { "bow"= { locator = "part1" } } 意思是“第一个部分属于bow组”。因为这样设置的话只能关闭一个部分,所以在这种情况下,船只只有一个部分。 例如,如果想设置3个部分,格式如下: { "bow" = { locator = "part1" } "mid" = { locator = "part2" } "strn" = { locator = "part3" } 其中,第一个部分是bow组,第二个是mid组,第三个是strn组。这里的组名会在后面提到的original_section.txt中使用。(通常从前往后多写为BOW、MID、STERN) ③required_component_set 设计界面右侧组件槽位的设置。在图片中,显示可以装备动力核心、超光速引擎、推进器、传感器和战斗电脑。原版通常包含这五个。 如果想要添加MOD或原创组件的插槽, 需要添加required_component_set = "special_component_slot" 等行。 special_component_slot部分可以随意修改。 并且,该组件的内容必须记录在 /common /component_sets special_component_sets.txt(组件插槽的指定) /component_templates special_utilities_roles.txt(组件的能力) 中。(还需要在gfx中指定图标图像等) 就这样,仅仅增加一个要素就会非常麻烦。前置条件 = { "tech_original" } 这部分也可以有多个,例如 前置条件 = { "tech_destroyers" "tech_starbase_5" } 这样也是可以的。上述情况下,没有【驱逐舰】和【银河要塞】的科技就无法建造。 但是触发科技必须满足category = { voidcraft }。 也可以填写其他MOD的原创科技,并声称“兼容哦!”。 如果此处填写的科技在游戏数据中没有相关描述,就会被直接忽略。 绿色线条以下的内容不写也没有特别问题。 这是用于限制DLC Apocalypse附带的泰坦级等强力舰船的设置。关于is_designable,我只是补充记录了一些看起来很有趣的可实现功能。另外,也可以在代码中写入cost = 的描述,让其拥有成本(建造所需矿物)。后续章节也可以单独设置成本(当然,也可以不设置)。original_thrusters.txt和original_reactors.txt概要:从2.0版本开始,反应堆和推进器必须在common文件夹的component_templates中正确进行“此推进器(反应堆)可用于此舰船”的关联设置,否则将无法生效。

可能有些难以理解,左侧是original_thrusters.txt的内容,右侧是original_reactors.txt的内容。通过utility_component_template = 来描述各个组件的详细内容,每个组件的描述都用绿框圈起来了。key:组件ID名称 icon:图标图像ID名称 power:消耗能量 cost:建造所需矿石 modifier:与舰船尺寸相同 prerequisites:建造所需科技 component_set:与舰船尺寸的required_component_set相关联的名称 size_restriction:可使用此组件的舰船尺寸对应的舰船ID名称(可指定多个) 推进器和反应堆属于单个插槽组件,随着科技的解锁,可以选择新的种类。 此类框架需要通过upgrades_to进行连接,红线连接的部分即是如此。即使先学习了升级所需的前置科技,如果前置科技本身未解锁,升级科技自然也无法解锁,所以不要毫无意义地打乱研究顺序。 在upgrades_to下方有ai_weight的描述,AI会优先使用该权重值较高的组件。因此,如果将初始组件的权重设为100左右,AI就会一直优先使用初始组件。 自己创建特殊组件槽位时,可能希望“该组件槽位能像NSC的特殊组件槽位那样,根据能力方向进行选择”,这种情况下请删除upgrades_to的描述。 original_section。txt 概要 舰船模块详情。 将模块模板关联至各个群组及舰船。

该画像为【original】舰船的【mid】组模块添加了以下性能的模板: - 武器S插槽2个 - 大中小通用插槽各1个 - 实用插槽1个 - 成本5000!? ship_sizes  适配的舰船名称(ship_sizes.txt中的ID名)。 fits_on_slot  适配的模块组名称(original_sizes.txt中所写的组名) entity  用于与后文original_entities.asset进行关联的名称 icon  舰船设计模块选择界面中显示的图像关联名称 component_slot  武器插槽的设置。・slot_size 武器尺寸(小型、中型、大型、点防御、超大型)   ・slot_type 插槽类型(武器、舰载机)   ・locatorname 定位器名称(用于武器位置信息的名称) ほにゃらら_utility_slots  用于设置可安装发电机、装甲、护盾等装备的插槽数量。(小型、中型、大型、辅助型) cost  建造所需矿石 每个分段都需要设置「ship_section_template =」。 如果由两个分段组构成,且每个组有3个选项,那么总共需要编写6个「ship_section_template =」。 original_entities。资源概要 舰船组装图、武器位置设定以及舰船相关的特效设置 这部分工作可能是最繁琐的。

《群星》舰船结构:《群星》的舰船采用模块(分段)结构。通过将各个分段组安装到框架上来构建舰船。并且每个分段都可以配备不同的CG模型。可以像图中那样将单个分段组设置得非常远,也可以反过来让它们在某个位置重叠。此外,还能对每个分段的大小和特效等进行设置。因此,例如可以实现“被击毁时从船头到船尾逐渐发生爆炸”或者“只有船头的灯光在舰船移动时改变颜色”等效果,根据创意能够获得出色的视觉表现效果。因为太麻烦了,所以包括我在内的大部分MOD制作者都不会这么做。而且,拼接模型时,要为每个部分准备毫无矛盾的模型很麻烦,所以主流做法是重叠设置多个部分,在最开始的部分放置飞船的整体模型,后续部分则设置为透明(空模型)。不过,既然也能做到这种操作,或许根据想法能做出有趣的东西,所以就写下来了。整体的描述流程如下。################舰船名称##################### 实体 = { 框架 } #####分组名称##### 实体 = { 第一分组的第1格 } 实体 = { 第一分组的第2格 } 实体 = { 第一分组的…… } #####分组名称##### 实体 = { 第二分组的第1格 } 实体 = { 第二分组的第2格 } 实体 = { 第二分组的…… } #####分组名称##### 实体 = { 第三分组的第1格 } 实体 = { 第三分组的第2格 } 实体 = { 第三分组的…… }那么,在这个entity中可以分别设置大小(scale)和演出效果。 各entity的内容主要是与在original_section.txt中制作的模板部分的关联设置,以及与模型(CG模型)的关联设置。 如果不介意演出和武器位置的话,仅进行关联设置也能运行。 “麻烦”的主要是演出效果和武器位置的设置。 original_entities.asset 框架entity与击破演出 接下来是实际的写法。演出效果会附加在各个实体上,一般来说: - 框架会添加环境音、信标灯光、击破演出 - 最后一个部分会添加引擎效果 因此,下面将以在框架实体上添加环境音和爆破演出的例子进行说明。

「pdxmesh = 」用于指定模型。这里指定了「original_frame_mesh」。但这仅仅是指示“将使用此名称的文件”,还必须编写用于指定实际文件位置的描述。后文的original_meshes.gfx即对应此内容。 红线标注处从上到下依次是“停止”“移动”“击破”时的演出效果设置。 name为状态名称,animation为此状态下的动画ID。 基本上请直接使用这两项。 animation_blend_time指的是过渡所需的时间。例如,如果想延长被击破时的爆炸演出,请增加state = { name = "death" 行中的animation_blend_time数值。 start_event = { trigger_once = yes sound = { soundeffect = "amb_battleship_hum" } } 这行代码用于设置该状态下的音效,也就是环境音,类似“嗡嗡嗡”的声音。如果想播放自己喜欢的音效,可以修改相关参数,但音效设置相对麻烦,所以很多人会直接使用游戏原版音效。 state = { name = "death" 之后的内容是被击破时的爆破演出设置。 ①是击破后的经过时间,在示例中表示“从HP变为0时开始,5.0秒后”。②是爆炸位置设定的ID。在箭头之后会通过position相关描述重新确定位置。关于position的详细说明将在entity章节中进行。 ③是爆炸效果的CG模型指定。 虽然未标注红线,但“sound = { soundeffect = ship_destroyed }”代表爆炸音效。此例中音效会播放4次,不过最后2次设计为几乎同时响起。这是通过叠加音效来试图增加一些音量,大概是因为准备音效文件太麻烦了吧,哈哈。 顺便一提,即使尝试让音效完全同时播放,也只会生效一个。因此时间上稍微错开了一些。 另外,关于这里的爆炸模型数量,似乎是有限制的。图片中使用了5个定位器(未设置定位器的会自动位于(0 0 0)位置)和14个模型,但恐怕只有大约一半得到了体现。 虽然有从DLC文件中调取爆炸CG的描述("dreadnought_explosion_particle" DLC利维坦),但如果没有该DLC(即基础游戏),也只会跳过而不会出现错误。 虽然我写了这么多关于爆炸的内容,但除非是非常大的舰船,否则通常不会做这么细致的调整。嗯…(困惑) 然后,将各部分组附加到框架的描述如下列图片所示。

图片中是将四个区块组拼接在一起。不过就连官方也没有对这种区块附着进行描述。(模型中内置了定位器)对于没有为每个区块准备CG模型的人来说,不需要写这段描述。original_entities.asset区块实体

我在部件上添加了引擎特效和信标灯光。 首先,通过name = "original_mid_entity"从original_section.txt的部件模板中提取部件内容。请填写关联的名称。 接下来,pdxmesh = "original_mesh"用于指定模型。 然后,和框架部分一样,从上方开始进行"停止""移动""击破"的演出效果设置。 引擎在停止和移动时会使用不同的CG模型来表现引擎启动的效果。 击破时不需要设置,因此无需填写。 本次使用的是基础游戏中名为mammalian_01_2_35_exhaust的模型。停止时 "mammalian_01_2_35_exhaust_idle_particle" 移动时 "mammalian_01_2_35_ship_exhaust_moving_particle" 请注意CG模型不同。 这种引擎效果和信标灯(图像中的"ship_light_blue_effect")在原版中有多种模型(圆形、方形、不同颜色等)。 因此,请选择适合场景的模型(gfx particles中有多种)。当然也可以自行准备! 以下定位器组用于设置上述CG模型的位置信息。 如果是未嵌入定位器的CG模型,就需要进行这项操作。不做也没关系,但这种情况下,所有位置(这里指引擎效果和武器位置)都会变成中心点(0 0 0)。 position = { 0 1.96 14.7 } rotation = { 180 0 0 } scale = 0.6 position是位置,rotation是旋转。轴为(X Y Z)。scale是大小。 对于较大的引擎喷嘴,可以通过调整scale来进行调节。 接下来是武器位置设置。 locator = { name = "small_gun_01" 请输入对应的original_section.txt中的locatorname。 可以说,这种定位器嵌入作业是舰船MOD制作中最大的难点。(至少对我来说 随意写下位置,启动游戏确认,修正,再启动游戏确认,修正…… 必须一次次启动游戏才能确认……(哭 如果有更好的方法请务必告诉我!!!!!不,难道一开始手动输入就错了吗……会编程的人能不能做一个Blender的嵌入式编码器(to mesh)啊 这样一个部分就完成了。 引擎效果设置要应用到位于最后的所有部分组。 武器位置设置要应用到所有部分。(吐血 original_meshes.gfx的概要

在此指定各部分引用的实际模型文件位置。 写到这里才发现……忘记了击破动画…… 击破时,希望能有那种猛地沉下去的动画呢…… 需要的用户,还需在original_meshes.gfx所在的位置添加以下文件: original_animation.asset original_frame_idle.anim original_frame_death.anim .anim文件请自行准备。 如果无法制作“.anim文件!!”,或者希望“击破时立即爆炸消失!完全不要站立不动的样子”,可以删除动画相关部分!!! 此外,这里也可以通过缩放来决定大小。至今已经多次出现缩放问题,但CG模型的缩放调整基本上请在这里进行操作。最好不要过多修改original_entitiese.asset等文件,这样对后续工作更有利。 然后,在meshsettings = 以下部分,用于指定CG模型的着色器和各贴图。由于CG模型中可以嵌入这些信息,因此在这种情况下可以不填写。如果未嵌入这些信息却删除了此描述,着色器将自动变为"PdxMeshStandard"(即船只变得异常明亮的那种情况)。 以下是一些较为专业的CG相关内容。顺便一提,可用的着色器写在gfx FX的pdxmesh.shader中。(805行以下、MainCode PixelPdxMesh相关部分) 查看那里可以了解各地图通道的使用方式。 如果能好好调整那里,似乎就能做出理想的着色器…… 这着色器相关的东西非常棘手。船只使用的PdxMeshShip着色器,我想它可能是有各种限制的着色器。 经常出错,模型也会变得奇怪…… 另外,使用JoroDox Tools时,无论如何都无法应用"PdxMeshShip"的用户, 请在JoroDox Tools的模型数据编辑画面中,将PDX Shader设为【- Other -】,并在下方的空白栏中输入PdxMeshShip后保存试试。我通过这种方式强行将自己MOD中的空间站相关内容改为了PdxMeshShip。 附加内容:原创科技的创建 最后 这是一个添加额外舰船的MOD制作示例。 所谓的舰船套装比这更简单。 CG模型虽然很多(不过如果是原版的话就只有4个),但不需要仔细准备配置文件。 在舰船套装的情况下,common graphical_culture中可以将原版的基础设置通过文本文件直接写入,所以如果没有必要的描述,系统会自动从原版中进行引用。(动画、舰船基本性能、板块内容等) 以上就是相关内容了。 不过我自己也不是很了解,或许还有比这简单得多的方法。 而且还有很多隐藏要素……(比如名字太长不行,这里的参数有数量限制之类的) 所以,请大家自己一边尝试一边享受制作MOD的乐趣吧。