跳转到内容

Trainz/AM&C/数据模型

来自维基教科书,开放世界开放书籍
(从 Trainz/Data model 重定向)
logo
Trainz 资产维护和创建

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



Trainz 数据模型

[编辑 | 编辑源代码]

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

配置,Trainz 实用程序管理器

[编辑 | 编辑源代码]

在所有 Trainz 版本中,资产文件夹中的老大是资产的 config.txt 文件。在该文件中,每行(原文如此)都包含数据对,一个“关键字”和一个配对的“”。合法格式的标签(关键字)和容器名称以左边的空白开始。在容器内,由配对的波浪号括起来

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 年的数据排列

[编辑 | 编辑源代码]
学习旧的数据实践是必要的。在获取内容方面拥有任何重大经验,都会有某些东西无法被该版本的 内容管理器 所接受。关于在 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-filename 被设想并实现为几个标准子文件夹的后缀
      1. 主网格       在火车车厢中,主网格(或组织网格)可以被视为底盘和结构框架。这很少可见,[注 2]

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

      1. _body       以“_body”为后缀的文件夹被指定用来保存主子网格。
    1. 主动画消耗了一个标签名,阴影网格消耗了另一个标签名。这种最初的技术仍然会在许多新的 Trainzer 检查滚动库存时被普遍看到,甚至会使用子子文件夹来保存子子网格,例如门和舱口,它们会随着动画而打开和关闭,这些动画显然不是主车厢动画网格集。
    2. 类似地,投射阴影的对象有一个用于阴影网格的子文件夹,最常被命名为“shadow.im”。嗯,有创意,这些澳大利亚人!


 

模型中的 KIND

[编辑 | 编辑源代码]

Trainz 数字对象没有单一的数据模型,而是一系列广泛的资产要求,这些要求随着模型的不同部分而逐步发展,导致了数据集的不同重要性,赋予了内在变化和时间安排不同的重要性。考虑到最初的 Trainz 0.9 CDROM “Beta” 版本是在 Y2K 临近时发布的,当时有些人认为计算机世界将要崩溃,并将地球再次推入石器时代。嗯,虽然这变得很有趣,但正是在那些令人担忧的日子里,Auran 向他们遍布全球的众多爱好者团体发布了 Beta 版本以供评估。本质上,该版本定义模型数据集的方式至今仍然存在。它已经伸展和脱落了皮肤细胞,剪了头发,有时还会晒伤,但核心仍然稳定,并且在添加的几个不同的数据结构中可以识别出来,以产生更多易用性、容量或灵活性。这些关键的改进功能,以及 Trainz 社区在保持高度向后兼容性的同时提出的驱动性请求,是许多用户坚持使用该产品的原因,尽管偶尔会发誓。

定义正在建设中

[edit | edit source]

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

已过时的标签

[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 才纠正,恢复了先前的现状:这些版本中的单轨桥梁和隧道需要第二个(且不正确)参数用于轨道偏移和轨道方向参数,以及引擎规格
  • 例如,大多数预 TRS 时代的数据模型资产(v1.0–v2.3)可以通过在 TS 版本中添加一个网格表来使它们工作,以替换 TS 中忽略的“资产文件名”的先前效果。
  • 相反,通常带有 TB v2.9 及更高版本的 TS 版本资产可以通过了解这些标签的一些效果和用途以及一些明智的更改来消除 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,或删除。
注意:Username(英语)是 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-build 2.4,当时引入了当前的 category-era 字符串数组,将这些标签组合到单个 config.txt 行中。虽然在测量器中无法直接访问,但在 TR06 和 CMP 之后,可以定义一个过滤器来选择日期范围,并使用该过滤器以及区域和类型在测量器中对可在测量器放置和选择工具中列出的资产进行验证。在 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 — 作为内置过滤器和地图资产自定义本地化标识符(kuid),TBS V1.3–v2.8 中的有效部分;现在唯一的合法标签使用方式是在 kind map(布局)资产中。

 

作为一种之前的过滤器修饰符,该标签在历史上几乎所有旧资产中都有发现,但在滚动库存、场景、样条资产、轨道类型(包括隧道和桥梁)以及具有一定程度本地化的轨道边资产中尤为普遍。
  • 地图资产仍然保留着“Region”关键字,该关键字在 Map 配置文件中定义,但使用方式相反——成为一个 kind region kuid 引用。因此,Region 在 Maps 中是必需的,并且从 TRS2012 开始,就像标签类型一样,在曾经出现过该数据的数量非常庞大的资产中是非法的。
  • 任何将 Region 标签与文本字符串关联的做法在 TRS2009 之后都已过时,因为在程序员看来,他们用 Pick List 替换了 Surveyor 工具中“类型和区域”字符串值的粗略过滤组选择器。这两个标签都有一些优点和缺点,并且都可追溯到 Trainz 0.9 Beta 版本。

  • type — V1.3–v2.8 —一种之前的过滤器修饰符,并且在历史上几乎所有资产中都有发现,但在滚动库存、场景、样条线、轨道类型(包括隧道和桥梁)以及轨道边资产中尤为普遍。Type 在 Trainz 0.9—TC3 版本中用作 Surveyor 中的过滤器,它与 Region 结合使用,形成了资产组,而不是被放置工具选择列表的全部内容所淹没。两者都默认设置为“All”,与 TS09 及更高版本中的工具提供的超级列表相同。
  • 在 TRS2006 分支(即 TC3)之后,每个 type 标签都已过时,因为在程序员看来,他们用 TS09 Pick List 替换了 Surveyor 工具中“类型和区域”的粗略过滤组选择器。

config.txt 文件中的 Region 标签

[edit | edit source]

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

Region 关键字现在仅限于在 kind map 配置文件中合法存在,其中它们被指定为 KUID,指向预定义的“食谱”区域设置,该设置定义了各种地理和时代相关的标准,例如 Trainz Carz 列表,这些列表在道路上自动生成,车速值决定了所生成 Trainz Carz 的密度和频率,基本海拔高度、纬度、经度坐标以及可以合理地捆绑在一起的区域变量;这些关键字及其用途一直保持稳定——在历史上以及在较新的 TS2009-TS2012+TANE 数据模型 中都使用过。为路线提供不同感觉的最快速方法之一,是指向另一个 kind region KUID——太阳角度会发生变化,季节性外观也会发生变化,地图上的汽车会发生变化等等。



参考文献

[edit | edit source]
  1. Christoph Bergman,N3V Games 首席程序员,又名“Windwalkr”,KIND TrainzBaseSpec 历史 页面。


华夏公益教科书