跳转到内容

Trainz/AM&C/数据模型

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

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



Trainz 数据模型

[编辑 | 编辑源代码]

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

配置,Trainz 实用程序管理器

[编辑 | 编辑源代码]

在所有 Trainz 版本中,资产文件夹中的老大是资产的 config.txt 文件。在这个文件中,每一行(实际上)包含数据对,一个“关键字”和一个配对的“”。合法格式的标签(关键字)和容器名称从左边距开始。在一个容器内,用一对大括号隔开

keyword-containername  {
       indented words and container guts
 }

后面的 & 匹配的闭合大括号需要保持平衡。习惯上,它位于第一个字母下方,并与关键字的第一个字母对齐。鉴于某些容器可能包含数百行,你一定会想知道我们如何仍然能够说“每一行(实际上)包含数据对,一个“关键字”和一个配对的“”。”答案既是程序性的,也是概念性的;它是程序性的,而关键字是一个容器名称,它将控制权传递给一个处理子例程。这些处理程序知道将与该类型容器中合法关键字相关联的数据放在哪里,以及如何找到下一个非空格字符,该字符将被评估为标签、值或大括号,然后根据需要重复,直到它找到与第一个(打开)大括号后的括号配对的闭合括号为止。只要每个关键字、内部括号(是的,Matilda,存在带有子容器的容器,以及具有可变数量子容器的容器。感谢你的提问!)是空格分隔的,并且在“预期上下文”中合法,那么大型的 队列容器 的所有子容器仍然只是第二个标准的一部分——标签的值。在这种情况下,控制的标签有子项,这些子项也有子项,并且它们的每一行仍然只是一个标签,一个值。(只要稍微转动一下你的大脑,很快你就会习惯它。别管它了 - 这个客运站的子容器中有超过 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 的工作——当我们认为合适时,我们会链接 KIND。

数据排列 1999

[edit | edit source]
学习旧数据实践是必要的。在获取内容方面有一定经验后,会有一些情况,某些内容对于该版本的 内容管理器 来说是不可接受的。关于 Trainz 社区中常用的这些情况的误称是称其为错误、有故障的内容、修复错误、错误消息。更准确的术语应该是过时、过时、更新、现代化和重新配置。DLS 上有一些真正糟糕的资源,但随着 DLS 清理项目的进行,这些资源正在迅速消失,曾经的长长的清单也越来越短。


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


在最古老的做法中,一个始终需要在资源中生成网格的引用标签是“asset-filename”,它根据kind 值引用一个图像文件(纹理,两种类型)或一个网格文件(一个简单的对象骨架)。除了这两个构建块类型,甚至不需要资源的名称。然而,更复杂的类型需要更多定义

  1. Trainz 是一款国际化产品,这要求它具有国际化能力,这些能力很容易识别,因为它们都在基本标签“username”、“description”和
  2. 在运行时菜单中显示的对象需要图像,标准模仿了商业 3ds Max 生成的建模世界的实践,并将子文件夹合并到其中,包含asset-filename
  3. 各种高级对象需要比在子文件夹中放置其他网格更灵活的数据连接。
    1. 在第一个网格使用 asset-filename 插槽后,如何指定辅助网格?事实上,asset-fileaname 被设想并实现为几个标准子文件夹的后缀
      1. 主网格       在火车车厢中,主(或组织)网格可以被可视化为底盘和结构框架。这很少见,[注释 2]

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

      1. _body       以“_body”为后缀的文件夹被指定为保存主子网格。
    1. 主要动画使用一个标签名,阴影网格使用另一个标签名。这种最初的技术在新的 Trainzers 检查滚动库存时仍然很常见,即使是子子文件夹也用于保存子子网格,例如门和舱口,这些网格会随着动画一起打开和关闭,而这些动画显然不是主车动画网格集。
    2. 同样,投射阴影的对象有一个用于阴影网格的子文件夹,最常以“shadow.im”命名。嗯,很有创意,这些澳大利亚人!


 

模型中的 KIND

[edit | edit source]

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 恢复之前的现状才得以纠正:这些版本中的单轨桥梁和隧道需要第二个(且不正确的)参数用于轨道偏移和轨道方向参数,以及 enginespec
  • 例如,大多数 TRS 时代之前的数据模型资产 (v1.0–v2.3) 可以通过在 TS 版本中添加一个网格表来替换“asset-filename”的先前被忽略的效果来进行正常工作。在 TSes 中,“asset-filename”是被忽略的。
  • 相反,TS 版本资产通常使用 TBs v2.9 及更高版本,可以通过了解这些标签的一些效果和用途,以及对 texture.txt 修饰符行进行一些明智的更改(例如,需要注释掉 AlphaHint 等)来进行回溯适应,以便与早期数据模型一起工作。这些修饰符行不被早期版本理解。


  • asset-namenamename-XX — V1.3–v2.8 — 历史上存在于几乎所有景观、脊椎和路边资产中。在 Trainz 1.x--TRS2004 Trainz 时代,Asset-name 是资产在 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 行中。虽然在 Surveyor 中无法直接访问,但在 TR06 和 CMP 之后,可以定义一个过滤器来选择日期范围,并将该过滤器与区域和类型一起使用,以便在 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,该关键字具有相反的用途,即作为 kind region kuid 引用。因此,Region 是地图中必需的,并且自 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 文件中的区域标签

[edit | edit source]

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

现在,“region”关键词的使用范围仅限于路线图配置文件,在配置文件中,它被指定为一个 KUID,指向一个预定义的“食谱”区域设置,该设置定义了各种特定于地理位置和时代的标准,例如在道路上自动生成的Trainz Carz列表,以及 carrate 值(用于确定生成的车流量和频率),基准高度、经纬度坐标以及其他可以合理地捆绑在一起的区域变量;这些关键词及其用途一直保持稳定——在历史版本和较新的TS2009-TS2012+TANE 数据模型中都有使用)。为路线提供不同氛围的最快方法之一是指定一个不同的区域种类 KUID——阳光角度、季节外观、地图上的车辆都会随之改变。



参考资料

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


华夏公益教科书