更改

跳转至: 导航搜索

Database.tdb/zh

添加713字节2020年5月9日 (六) 19:23
无编辑摘要
{{DISPLAYTITLE:Database.tdb{{Resize|/zh|50%}}}}
{{ProfessionalArticle/zh}}
'''Database.tdb是位于Ballance游戏根目录下的一个数据库文件。负责存储游戏每一关的高分榜,tdb'''是位于{{zh|Ballance}}游戏根目录下的一个数据库文件,负责存储游戏每一关的高分榜,[[关卡]]是否开启;以及一些[[游戏设置]],例如按键设置,是否开启[[云层]]等。
== 简介 ==
在早期游戏过程中,玩家可以通过替换Database.tdb文件来修改其掌控的数据,例如[[关卡全开补丁|关卡全开]]tdb文件,其一度流传广泛。tdb文件,其一度流传广泛。但不足之处在于如果玩家如此修改,则玩家自身的高分纪录等会被关卡全开补丁提供者的高分榜覆盖,而且有些关卡全开补丁的高分榜混乱不堪。
后来,在[[BallanceRecordChanger/zh|BallanceRecordChanger]]出现后,直接复制替换Database.tdb变得不再是最佳方法,使用BallanceRecordChanger可以精确修改Database.tdb文件中的每一个数据,而并不像替换Database.tdb文件一样,“眉毛胡子一把抓”。
Database.tdb是由游戏内部[[脚本]]自行创建修改的,且附带加密。有一段时间有一些人曾以高分榜的成绩作为[[竞速]]依据{{来源请求}},但在Database.tdb真正可以被定制修改之前很久,此方法就已经因证据不够确凿而被废弃(例如可以[[制图|修改地图]]或使用或游戏配置文件或使用[[球补丁]]等达到更高分数),取而代之的是视频验证。
== 文件结构 ==
此处介绍的是针对1.13版本,即具有13关补丁的Database.tdb的文件格式进行介绍。此外还有一个版本的Database.tdb,其对应Ballance v1.0版本。由于1.0版本的文件结构中仅仅缺少了v1.13中的部分字段,因此会在后续介绍v1.13版本的结构中标明哪些字段在v1.0版本的文件结构中不存在0版本的文件结构中不存在。
后文叙述中,比特之间左为高位,字节之间右为高位。(与HxD排布一致)后文叙述中,比特之间左为高位,字节之间右为高位(与HxD排布一致)。
后文中有关字符串的存储是指:先以ASCII进行序列化。然后与C语言类似,在字符串的末尾存储<code>0x00</code>以表示字符串结束。
后文中的Int32类型和Float类型存储均是大端序存储模式,Float使用IEEE-754标准进行存储754标准进行存储。
=== 加密解开 ===
首先,解密是以字节为单位进行的。每个字节有8个比特,解密的第一步是还原比特顺序,将这8个比特的高位3比特和低位5比特交换位置,完成解密的第一步。如下图:
<code>BIT_1 BIT_2 BIT_3 BIT_4 BIT_5 BIT_6 BIT_7 BIT_8</code>经过变换后得到<code>BIT_4 BIT_5 BIT_6 BIT_7 BIT_8 BIT_1 BIT_2 BIT_3</code>
可通过代码(<nowiki>C#</nowiki>)实现:<code>j = (byte)(j << 3 | j >> 5);</code>
==== 异或补码变换 ====
此后需要进行异或补码变换,首先将交换比特结束后的字节与<code>0xAF</code>做异或(XOR)运算,然后对得到的字节再取补码,即最高位取反,其余位取反后+1。此时,文件的加密已解开。
可通过代码(<nowiki>C#</nowiki>)实现:<code>j = (byte)(-(j ^ 0xAF));</code>
=== Virtools Array ===
{| class="wikitable"
|-
! 助记符 !! 数据类型<ref>此数据类型指的是数据如何被存储在文件中,与上文表头数据类型无关此数据类型指的是数据如何被存储在文件中,与上文表头数据类型无关。</ref> !! 注释
|-
| SheetHeader || String || 表名,Virtools Array的名称
* <code>2</code>:Float
* <code>3</code>:String
* <code>4</code><refname="unconfirmed">未验证,由Virtools内部的布置猜测未验证,由Virtools内部的布置猜测。</ref>:Object(解析时不会用到)* <code>5</code><ref>未验证,由Virtools内部的布置猜测<name="unconfirmed" /ref>:Parameter(解析时不会用到)
|}
== 被存储的表 ==
 
{{Note | 下面将叙述这些表的格式,将直接使用Wiki的表格进行描述,Wiki表格的表头即为Virtools Array的表头,第一行为名称,第二行为数据类型。以下所列举的各表的数据均为随意填写,并非特指必须填写为该数字(主要是对列数和行数有一个直观展示,会使得下面见到的表在形状上和在Virtools编辑器中见到的表格几乎完全一致)。如果有需要叙述的会用''斜体字''标明。}}
通过上面的了解,您应该了解,Database.tdb存储了一系列表,那么Database.tdb到底存储了哪些表呢?Database.tdb存储的表格如下表所列,请注意表的存储先后是需要注意的。
需要注意的是表<code>DB_Highscore_Lv13</code>至表<code>DB_Highscore_Lv20</code>在v1.0版本Ballance的Database.tdb中不存在
下面将叙述这些表的格式,将直接使用Wiki的表格进行描述,Wiki表格的表头即为Virtools Array的表头,第一行为名称,第二行为数据类型。表格中的数据是随便填写的(主要是对列数和行数有一个直观展示,会使得下面见到的表和在Virtools编辑器中见到的表格几乎完全一致),如果有需要叙述的会用''斜体字''标明。 以上这些表被定义在以上这些表可以在[[base.cmo/zh|base.cmo]]中。中看到可视化原型。
=== DB_Highscore ===
{| class="wikitable"
|-
! Freigeschaltet?<br />{{color|Boolean|green}}<ref>这里有一个隐式类型转换,Int32的1相当于True,0相当于False,后文不再标记这里有一个隐式类型转换,Int32的1相当于True,0相当于False。Boolean实际上是以Int32类型进行存储的。后文的Boolean将不再注释。</ref>
|-
| 1
按键在此数组中的序号即为需要存储的数据。
 
== 你知道吗 ==
 
* [[Ballance Mod Loader Gamepiaynmo版]]中的,由Mod产生力量,能力关卡虽然没有可视化排行榜,但是在此两关得到的高分榜数据会被写入表<code>DB_Highscore_Lv14</code>和<code>DB_Highscore_Lv15</code>中。
== 注释 ==
<references />
[[Category:{{游戏文件]]}}
3,424
个编辑

导航菜单