跳转至内容

Trainz/AM&C/数据模型

来自维基教科书,开放的书本,开放的世界
logo
Trainz 资产维护和创建

Trainz 基础知识库
TOC | 开始有趣 | AM&C | 创建 | 书中参考文献 ORP 参考文献:  • 索引 • 容器 • Kinds • 标签 | 附录  • 版本
 词汇表
 HKeys-CM
 HKeys-DVR
 HKeys-SUR
 HKeys-WIN
 鼠标使用
 符号
[e]
KIND(资产组类型)
容器



Trainz 数据模型

[编辑 | 编辑源代码]

据说,如果你要携带数字位,你需要一个 容器,一个带手柄的桶,你可以抓住它四处移动,并在它的能力范围内做一些事情。在 Trainz 中,在 Windows 操作系统下编写,这个桶就是数据文件夹或目录,所有 Trainz 版本都将其转换为一组以树状层次结构排列的文件夹。
早期的 Trainz 版本建立了相对于游戏根文件夹路径的文件夹层次结构,该层次结构相对严格。某些类型的资产被要求将数据放在特定位置,以便资产能够正常工作。好消息是,该路径的头部没有强制(规定),因此,与其将数据隐藏在 Microsoft 定义的一些模式下三到四层深,不如将路径从主硬盘的根目录开始,或从其他硬盘开始[注释 1],与许多软件安装不同,用户可以并且仍然可以根据她认为合适的任何根路径,为每个安装指定一个她选择的文件夹名称。

配置,Trainz 实用程序管理器

[编辑 | 编辑源代码]

在所有 Trainz 版本中,资产文件夹中的老板是资产的 config.txt 文件。在该文件中,每行(sic)包含数据对,一个“关键字”和一个配对的“”。合法格式的标签(关键字)和容器名称从左边缘开始。在一个容器中,该容器由一对花括号括起来

keyword-containername  {
       indented words and container guts
 }

尾随的 & 匹配的闭合花括号需要平衡。约定是将它放在第一个字母下面,并与关键字的第一个字母对齐。考虑到有些容器可以达到数百行,你一定会想知道我们如何才能说“每一行(原文如此)都包含数据对,一个“关键字”和一个配对的“”。答案既是程序性的又是概念性的;它是程序性的,关键字是一个容器名称,将控制权传递给一个处理子例程。这些处理程序知道将与该类型容器中合法关键字相关联的数据放在哪里,以及如何找到下一个非空白字符,该字符被评估为标签、值或括号,然后根据需要重复,直到找到一个与第一个(打开)花括号后面的括号匹配的闭合括号。只要每个关键字、内部括号(是的,玛蒂尔达,有包含子容器的容器,以及包含可变数量子容器的容器。谢谢提问!)都用空格分隔,并且在“预期上下文中合法”,一个大型长 队列容器 的所有子容器仍然只是第二个条件的一部分——标签值。在这种情况下,控制中的标签有子节点,这些子节点也有子节点,并且这些子节点的每一行仍然只是一个标签,一个值。(只要稍微转转你的大脑,很快你就会习惯了。别管它——那个乘客站点的那个子容器有超过 120 行文本——在容器数学中,它仅仅是一个值。 <g> 只要别在里面打错字...你很可能会收到不止一条错误信息,当你这样做时!)

从最简单的意义上来说,所有的 Trainz 数据都以文本文件中的数据行的对的形式组织在一起,一个关键字告诉软件如何处理其后的数据。


Trainz 中的每个部分,从纹理(颜色 & 照明资源)中找到的一小部分配置数据,到最大的路线(布局或地图),都必须有一个 config.txt 文件。Trainz 的环境在计算机内部,所以这些文件会引用和列出其他文件也就不足为奇了。
  1. 你可能知道、怀疑或听说过 Trainz 使用各种类型的图像文件来为物体纹理。这些文件有不同的强度、功能和大小影响,但都是已建立的类型;不包括最新的 TANE 后类型,DLS 上可下载的 500,000 多个资产中 99.99% 都依赖于 .JPG 文件.TGA 文件 和 Windows 自身的 .BMP 文件 的组合,如今,这些都是常见的文件类型。在这些格式中,TGA 格式是为图形艺术和电视的商业应用而发明的,可能是最不熟悉的——并且最难找到可以处理的图形编辑器。绝大多数 Trainz 纹理将使用 .tga 文件来定义资产。
    曾经是因为数字游戏的流行需要掩蔽/透明度 Alpha 通道或层来支持它们的功能,以便与其他投影图像混合。
  2. 有一些文件带有“如何操作”应用纹理——这些文件带有后缀:.texture.txt


所有配置文件可能包含任何关键字和容器,它们的含义和合法数据类型在 枚举TBS 中,除了大多数这些——可以合法地跳过取决于枚举的 类型 是否需要该标签-值对,但更多的是因为大多数 TBS 标签更多地是为了人类方便,而不是任何模块的渲染。有少数几个具有至关重要的重要性。


  • 至少所有配置都包含一个数据库资产索引/唯一标识符
     • kuid 的行对——KUID
     • KIND 行(kind——TBS),
     • 以及一个(外部文件)引用标签-值对。


在给定的最小行情况下,资产默认使用原始 TBV 1.3 资产技术标准,外部引用将是资产文件名标签——从 TRS2004 开始已过时的标签,会在 Trainz Classics(TBV 2.7)中触发警告,以及在 V2.9(TS2009-SP0,2008 年秋季)以上版本中触发错误信息。这种“旧标签消除”强制执行首次出现在 V2.7/TCC 版本中,在这些版本中,引擎规格、蒸汽、电力和柴油中允许的标签和容器列表发生了重大变化。


前一段有几个重要的教训

  1. Trainz 数据模型是一个不断变化的目标。
  2. 它在任何特定时代(版本)中的确切含义取决于之前的实践,以及在之前的版本技术和实践中添加的新功能、关键字、约束、要求或方法所进行的修改。
  3. 有一些标签纯粹是为了人类的方便,例如作者、组织、电子邮件和国际化数据(语言翻译),我们将其描述为“-XX”变体,如“description-es”或“username-ru”。这些会影响排序或显示的信息,从而使其他用户更方便地使用,但不是强制性的值。


这对初学者来说是个好消息——这意味着许多配置标签及其行可以忽略。坏消息是,诀窍当然在于知道哪些以及为什么,以及哪些组合和数据排列是不允许在一起的。这就是 KIND 的作用——在这里,我们将在认为合适的时候链接类型。

1999 年的数据排列

[edit | edit source]
学习旧的数据实践,可惜,是必要的。在获取内容方面的任何重大经验中,都会有一些情况,某些内容对该版本的 内容管理器 根本不可接受。关于 Trainz 社区中常见的这些情况的误称是将这些错误、有缺陷的内容、修复错误、错误信息。更准确的术语应该是过时、过时、更新、现代化和重新配置。DLS 上确实有一些真正的坏资产,但这些资产正在迅速消失,因为 DLS 清理项目正在减少曾经很长的列表。


  • Trainz 数据的第一条规则是始终存在配置文件。
  • 第二条是所有网格和所有由网格引用的相关 texture.txt 文件必须位于同一个文件夹或子文件夹中。
  • 纹理分为两部分,texture.txt 文件中关于它的说明,以及第一个明确引用的实际图像文件。
  • 如果编辑资产,一个重要的经验法则:如果在文件夹上运行 PEVtool Images2TGA 后,仍然存在任何 .texture 文件,则运行两次以确保,然后在 提交 资产之前删除 .texture 文件。


在最古老的实践中,一个始终需要在资产中生成网格的引用标签是'asset-filename',它取决于类型值,引用图像文件(纹理,两种类型)或网格文件(一个简单的对象骨架)。除了这两种基本构建块类型之外,甚至不需要资产的名称。但是,更复杂的类型需要更多定义

  1. Trainz 是一款国际化产品,因此需要国际化功能,这些功能很容易识别,因为它们都以一个连字符和两个字母的语言代码作为“username”、“description”的基本标签的后缀,以及
  2. 在运行时菜单中显示的对象需要图像,该标准模仿了商业 3ds Max 生成的建模世界中的实践,并包含了一个子文件夹来包含此类asset-filename,再加上
  3. 各种高级对象需要比将额外的网格放置在子文件夹中更灵活的数据连接。
    1. 第一个网格消耗了 asset-filename 槽位后,如何指定辅助网格?实际上,asset-fileaname 被设想并实现为几个标准子文件夹的后缀
      1. 主网格       在火车车厢中,主要(或组织)网格可以被可视化为底盘和结构框架。这很少能看到,[注 2]

}} 但类比是合理的,因为所有组织连接成一个整体的所有连接点都在资产的(asset-filename)根文件夹中。

      1. _body       以“_body”为后缀的文件夹被指定为保存主要子网格。
    1. 主要动画消耗了一个标签名称,阴影网格消耗了另一个。这种初始技术仍然会在许多新 Trainzer 检查滚动库存时经常看到,即使在子子文件夹中也使用子子网格,例如门和舱口,这些网格会随着动画的打开和关闭而移动,而这些动画绝对不是主要汽车动画网格集。
    2. 类似地,投射阴影的物体有一个用于阴影网格的子文件夹,通常很有创意地命名为“shadow.im”。嗯,很有创意,这些澳大利亚人!


 

模型中的类型

[edit | edit source]

Trainz 数字对象没有一个单一的数据模型,而是一系列广泛的资产需求,这些需求随着各种模型部件的种类而逐渐不同地增长,从而导致了一组数据,这些数据对内在变化和时间给予了不同的重视。想想看,最初的 Trainz 0.9 CDROM“Beta”版本是在 Y2K 之前发布的,当时有些人认为计算机世界即将崩溃,并将地球再次推回石器时代。嗯。虽然这变得很有趣,但正是那些令人担忧的日子里,Auran 将 Beta 版本发给了他们在世界各地的许多爱好者小组中进行评估。本质上,该版本定义的模型数据集的方式至今仍然存在。它已经弯曲了,脱落了皮肤细胞,剪了头发,有时还会晒伤,但核心……仍然稳定,在添加了一些不同的数据结构以生成更多能力、容量或灵活性方面可以识别出来。这些关键的改进功能,以及 Trainz 社区在保持高度向后兼容性的同时提出的驱动性要求,是许多用户尽管偶尔会抱怨,但仍然坚持使用该产品的理由。

正在构建的定义

[edit | edit source]

早期的 Trainz 是一个实验,旨在探究是否存在一个市场利基。因此,虽然游戏公司 Auran 的设计师和软件工程师认为会有这样的市场,但没有人确定。最后,他们进行了尽职调查,研究,联系了许多铁路爱好者小组,并且在他们的专有 JET I 游戏引擎中为建模需求制定了一个相当不错的规范。支持这一说法的证据是,自 Trainz 1.0 处于研究阶段至今已有二十多年,控制和选项,以及软件在测量模块中的功能方式,已经经历了最少的演变。

已过时的标签

[edit | edit source]
大多数这些标签开始于 最初的 Trainz 版本
以下“标签列表”是“事实上的”,因为它们的“使用惯例”早于上述列出的 TBS 标签的正式汇编,但不是使用它们的规范,而且实际上也早于 TrainzBaseSpec 术语的创造(在 2008-2009 年的 TrainzOnline Wiki 中引入),或其在 N3V Wiki 页面 11:32,2009 年 5 月 12 日的正式定义[1]



编辑注: 这些“TrainzBaseSpec 标签”在某些情况下,随着 TB V2.7 已经过时,并且在所有情况下,在 TS2009-SP0 以及之后所有N3V Games 版本中,都已经过时 (尽管许多用户在其中一些标签中发现了实用性,它会给内容创建者带来时间惩罚,也不是可以在 预处理操作 中忽略那些不再有用的标签),如果资产被打开进行编辑,并且通过将 trainz-build 标签 提升到 V2.9 及更高 数据模型 来部分升级,就会生成错误(错误消息)。相反,通过将 TB 值保持在足够低的水平,可以不需要删除这些标签(至少在 TS12 中)。
  • 资产可以本地升级到 V2.8 及之前,并且大多数情况下可以正常工作,即使在经过几代数据模型元素的改进之后,也能正常运行。这样,许多资产可以被制作成使用 TRS2004 或 TRS2006 数据建模,但仍然符合 TS 版本的内部处理和渲染。经验表明,一个在 trainz-build 2.6 (TRS2006-SP1) 时被制作成无警告和无错误的旧资产,通常会在 TS09-TS12 中无需进一步更改就能正常工作。例外是 TS09 的解析中引入的程序员错误,直到 TS12 才被修正,恢复了先前的现状:在这些版本中,单轨桥梁和隧道需要第二个(并且不正确的)参数来指定轨道偏移和轨道方向参数,以及 enginespec
  • 例如,大多数 TRS 时代之前的模型资产(v1.0–v2.3)可以通过在 TS 版本中添加一个 mesh-table 来实现正常工作,以替代在 TS 版本中被忽略的以前的“asset-filename”效果。
  • 相反,通常 TS 版本的资产,其 TBS 版本为 v2.9 及以上,可以通过理解这些标签的作用和使用,以及一些明智的更改来消除 texture.txt 修饰符行(例如 AlphaHint 需要被注释掉等等),从而被反向适配以使用更早的数据模型。


  • asset-namenamename-XX — V1.3–v2.8 — 历史上发现在几乎所有风景、脊线和路边资产中。Asset-name 是 Trainz 1.x--TRS2004 Trainz 时代中资产的主要文件夹名称;在今天的这些资产中,通常会发现 asset-name 也被用作早期 Trainz 时代的子文件夹系统,为子文件夹命名为“asset-name_art”、“asset-name_body”、“asset-name_shadow” (在火车车厢资产中),以及其他类型中可能的其他子文件夹。

 

  • name”和“name-XX”是更长的标签 usernameusername-XX 的早期形式,其中 XX 代表非英语语言翻译的英语“name 标签”(或今天的“username 标签)的 ISO 两字母后缀;“XX”形式与 description-XX 类似,是“本地化”支持其他语言的用户友好值的一部分。
  • 在最古老的 Trainz 时代(v1.0-v2.4)资产中,如果存在,请用 username 和 username-XX 替换,或删除。
注意:用户名(英语)是 DLS 上的官方资产名称,永远不应该使用外语;它也取代和替换了“asset-filename”。

按照惯例,子文件夹名称将以 username/asset-name 字段开头,并使用 _art、_body 和 _shadow 后缀作为正常命名惯例的一部分。这可能是 3ds Maxgmax 的惯例,延续到了 Trainz 中,而 Trainz 与该图形开发软件有着历史联系。(Gmax 与 Trainz V0.9—v2.4 版本捆绑在一起)


 

  • category-era-nn — V1.3–v2.8 s.a. {tag: category-era-0, category-era-1, category-era-2, ...} — 一个带有数字后缀的旧的日期系统 — 历史上发现在几乎所有值得日期的资产中,直到 Trainz 版本 2.4 引入了当前的 category-era 字符串数组,将这些标签组合到了一行 config.txt 中。虽然在 Surveyor 中无法直接访问,但在 TR06 和 CMP 之后,可以定义一个过滤器来选择一个日期范围,并使用该过滤器以及区域和类型在 Surveyor 中验证资产,这些资产可以在 Surveyor 的放置和选择工具中列出。在 TS09 及之后版本中已过时,TS09 使用更短的 category-era 字符串数组 放在一行,而不是使用多个“-nn”后缀的标签-值对。
  • 字符串数组中的空格会导致错误;所有值都必须以“s”为后缀,并包含四位数字,例如:1880s;1950s;2010s(这对于某些类型的女性服装可能完全合适,这些服装的流行程度会随着时间的推移而变化)。目前无法定义范围,但用户社区一直在要求添加此功能。
  • 用字符串数组类型的 category-era 标签 替换,标签之间没有空格和分号;这些标签使用完整的四位数年代数字,后面跟一个“s”(小写的 s)后缀。

 

  • 类型 category-region-nn — V1.3–v2.8 — 历史上发现在几乎所有值得区域的资产中。这些标签已被category-region 标签中由两个字母组成的枚举 ISO 国家代码的“字符串数组”取代。
  • 用字符串数组类型的 category-region 替换,标签之间没有空格和分号,而是用分号隔开,但在最后一个标签之前没有分号。这些代码由两个大写字母组成,这些字母代表 枚举 的代码,后面跟一个分号隔开,但在最后一个标签之前没有分号。
  • 字符串数组中的任何 空格 都会导致读取错误和错误消息,包括结尾处的空格。

 

  • region — TBS V1.3–v2.8 中有效的一部分,作为内置过滤器和地图资产的自定义本地化标识符(kuid);现在,唯一的合法标签用法是在 kind map(布局)资产中。

 

作为以前的过滤器修饰符,该标签历史上发现在几乎所有旧的资产中,但它特别常见于滚动库存、风景、脊线资产、轨道类型(包括隧道和桥梁)以及具有某种程度的本地化的路边资产。
  • 地图资产仍然保留关键字 Region,该关键字在 Map 配置文件中定义,但用途相反 — 要成为一个 kind region kuid 引用。因此,Region 在 Maps 中是必需的,而且自从 TRS2012 以来,像标签类型一样,在曾经出现该标签的大量资产中已经是非法的。
  • TRS2009 之后,任何 region 标签到文本字符串都已过时,因为在程序员的观念中,他们用 Pick List 取代了 Surveyor 工具中的“类型和区域”字符串值的粗略过滤组选择器。这两个标签都有一些优点和缺点,而且它们都可追溯到 Trainz 0.9 Beta 版本。

  • type — V1.3–v2.8 — 一个以前的过滤器修饰符,历史上发现在几乎所有资产中,但特别常见于滚动库存、风景、脊线、轨道类型(包括隧道和桥梁)以及路边资产。在 Trainz 0.9—TC3 版本中,Type 被用作 Surveyor 中的过滤器,它与 region 结合在一起,形成了资产组,而不是被放置工具选择列表中的大量选项所淹没。两者都默认设置为“All”,这与 TS09 及以后版本中的工具所提供的列表相同。
  • TRS2006 分支(即 TC3)之后,所有 type 标签都已过时,因为在程序员的观念中,他们用 TS09 Pick List 取代了 Surveyor 工具中的“类型和区域”的粗略过滤组选择器。

config.txt 文件中的 Region 标签

[edit | edit source]

Region 标签是作为 Trainz 的一部分实现的 Surveyor 的快速按分组标签过滤排序,在 TS2009 及之后的 Trainz 版本中,除了 kind map 资产(它们仍然是 KUID 引用,而不是过滤器[note 3])之外,不再是可接受的标签。由两个字母代码指定的 category-region 标签 仍然用于帮助在 CM 和 Surveyor 模块中进行排序。

现在,“region”关键字的使用范围仅限于 种地图 配置文件,在这些文件中,它们被指定为 KUID,对应于预定义的“菜谱”区域设置,涵盖了各种地理和时代特定的标准,例如,道路上自动生成的 Trainz Carz 列表,carrate 值决定了所述 Trainz Carz 的密度和频率,以及基本海拔、纬度、经度坐标和可以合理捆绑在一起的区域变量;这些关键字和目的已经稳定——在历史上以及在较新的 TS2009-TS2012+TANE 数据模型 中都得到了使用)。为线路赋予不同感觉的最快速方法之一是,指向另一个 种区域 KUID——太阳角度会发生变化,季节性外观也会发生变化,地图上的车辆也会发生变化,等等。



参考资料

[编辑 | 编辑源代码]
  1. Christoph Bergman,N3V Games 首席程序员,又名“Windwalkr”,KIND TrainzBaseSpec 历史 页面。


华夏公益教科书