#game-assets #ryot #tibia #asset-integration #legacy-games

ryot_tibia

专注于管理和集成Tibia特定遗留资产,针对受经典Tibia启发的游戏进行定制。

2 个版本

0.2.3 2024年5月6日
0.2.2 2024年4月29日

#846 in 游戏开发


2 crates 中使用

AGPL-3.0-only

87KB
2K SLoC

RyOT Tibia

一个专门用于管理和集成Tibia特定遗留资产的crate,确保兼容性并增强针对受Tibia启发的游戏的特化功能。

此crate封装了Tibia外观数据的协议定义,提供了一个结构化的接口来访问Tibia外观资产。它主要包含从协议缓冲定义自动生成的Rust代码,确保类型安全并便于与Rust代码库集成。

结构

  • 协议定义:核心定义是从Tibia的.proto文件生成的,提供了匹配外观protobuf规范的Rust结构体。这是在构建时完成的,生成的代码直接包含在crate中。

  • 转换模块:包含将原始Tibia外观数据转换为更易用的内部格式的实现。此子模块在Ryot系统中的应用特定数据结构之间架起桥梁。

使用

此crate用于内部解码以Tibia特定格式接收的外观数据。它允许Ryot系统直接使用定义良好的Rust结构体,而不是处理原始二进制数据,从而简化数据处理和集成任务。

示例

以下是如何使用此crate解码外观数据的示例

use ryot_core::prelude::VisualElements;
use ryot_tibia as tibia;

fn main() {
    // Vec::new() simulates raw bytes received from Tibia's appearance data
    let visual_elements: VisualElements = tibia::from_bytes(&Vec::new()).unwrap();
    println!("{:?}", visual_elements);
}

构建

实际的.proto定义以及从这些定义生成Rust代码的工作在crate构建脚本中处理,如果启用了ci_assets功能。这确保了生成的代码始终是最新的,并且与最新的Tibia外观定义保持同步。

目录

Tibia资产存储在content-catalog.json文件中,列出了客户端需要的资源。已知有5种Tibia内容类型:外观、静态数据、静态地图数据、地图和精灵。我们只在这个库中使用精灵和外观。

[
 {
   "type": "appearances",
   "file": "appearances.dat"
 },
 {
   "type": "staticdata",
   "file": "staticdata.dat"
 },
 {
   "type": "staticmapdata",
   "file": "staticmapdata.dat"
 },
 {
   "type": "map",
   "file": "map.otbm"
 },
 {
   "type": "sprite",
   "file": "spritesheet.png",
   "spritetype": 0,
   "firstspriteid": 100,
   "lastspriteid": 200,
   "area": 64
 }
]

依赖

~46–85MB
~1.5M SLoC