跳转到内容

Trainz/AM&C/数据模型

来自维基教科书,开放的书籍,开放的世界
(重定向自 Trainz/数据模型)
logo
Trainz 资产维护和创建

Trainz 基础知识库
TOC | 开始趣味 | AM&C | 创建 | 书内参考 ORP 参考:  • 索引 • 容器 • KIND • 标签 | 附录  • 版本
 词汇表
 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 下载的 50 多万个资源中 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-fileaname 被设想并实现为几个标准子文件夹的后缀
      1. 主网格       在火车车厢中,主要(或组织)网格可能被可视化为底盘和结构框架。这很少可见,[注 2]

}} 但这种比喻是合理的,因为所有将所有部件组合成一个整体的连接点都位于资源的(asset-filename)根文件夹中。

      1. _body       以“_body”为后缀的文件夹被指定为保存主要子网格。
    1. 主要动画使用一个标记名称,阴影网格使用另一个名称。这种最初的技术仍然可以在许多新 Trainz 用户检查滚动库存时经常看到,即使子子文件夹也被用来保存子子网格,例如门和舱口,它们随着动画打开和关闭,这些动画显然不是主要车辆动画网格集。
    2. 类似地,投射阴影的对象有一个用于阴影网格的子文件夹,通常以“shadow.im”命名。嗯,富有创意,这些澳洲人!


 

模型中的 KIND

[编辑 | 编辑源代码]

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

正在构建的定义

[编辑 | 编辑源代码]

早期的 Trainz 是一款实验性产品,旨在探究是否存在市场需求。虽然 Game Company,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 版本中正常工作,以替代 TS 版本中被忽略的“asset-filename”的旧效果。
  • 反之,通常情况下,带有 TBs 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 中,它与图形开发软件有着历史联系。(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 — TBS V1.3–v2.8 中有效的内置过滤器和地图资产自定义本地化标识符(kuid);现在唯一合法的标签使用方式是在 kind map(布局)资产中。

 

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

  • type — V1.3–v2.8 —以前的过滤器修饰符,在历史上几乎所有资产中都能找到,但它在滚动库存、风景、样条线、轨道类型(包括隧道和桥梁)以及路边资产中尤为普遍。在 Trainz 0.9—TC3 版本中,Type 被用作测量仪中的过滤器,与 Region 相结合,提供了资产组,而不是被放置工具选择的整个列表所淹没。两者都默认为“所有”,这与 TS09 及之后的工具提供的列表相同。
  • 在 TRS2006 分支版本(即 TC3)之后,所有 type 标签都已过时,因为在程序员看来,他们用 TS09 Pick List 取代了测量仪工具中“类型和区域”的粗略过滤组选择器。

config.txt 文件中的区域标签

[edit | edit source]

区域标签,作为 Surveyor 快速 *按分组标签排序过滤器* 实现的,是 Trainz 1.3 版本的一部分。在 TS2009 及其后的 Trainz 版本中,区域标签不再是可接受的标签,除了 种类映射 资源(它们仍然是 KUID 引用,而不是过滤器[注 3])。类别区域标签,由两个字母代码指定,仍在 CM 和 Surveyor 模块中用于帮助排序。

区域关键字现在仅限于在 种类映射 配置文件中合法存在,它们被指定为预定义的 “食谱” 区域的 KUID,设置各种地理和时代特定标准,例如在道路上自动生成的 Trainz Carz 列表、决定所述 Trainz Carz 生成密度和频率的车载率值、基础海拔、经度和纬度坐标,以及可以合理地捆绑在一起的此类区域变量;这些关键字及其用途一直保持稳定,无论是在历史上还是在更新的 TS2009-TS2012+TANE 数据模型 中。为路线赋予不同感觉的最快速方法之一是,指向另一个 种类区域 KUID,太阳角度会改变,季节外观也会改变,地图上的车辆也会改变等等。



参考文献

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


华夏公益教科书