解析 BA4988 学习机 .gam 游戏文件的 Python 工具集。
.gam 文件中的技能表(名称、byte3、MP、描述)scripts/gam_parse.py完整的解析工具模块,包含以下函数:
| 函数 | 功能 |
|---|---|
| ------ | ------ |
load_gam(path) | 加载GAM文件,返回 bytes 数据 |
read_skill(data, index) | 读取单个技能的全部字段 |
read_all_skills(data) | 读取全部80个技能,返回列表 |
print_skills_table(skills) | 打印技能表(含byte3位分析) |
print_skill_analysis(skills) | 按byte3位组合分组分析特殊效果 |
find_character(data, name) | 按名称搜索角色 |
read_character_skills(data, char_index) | 读取指定角色的技能ID |
read_monster(data, index) | 读取单个怪物数据 |
read_all_monsters(data) | 读取全部怪物 |
read_gbk_ff(data, offset, max_len) | 以0xFF结尾读取GBK字符串(适用于怪物名称) |
read_gbk_null(data, offset, max_len) | 以0x00结尾读取GBK字符串(适用于技能名称、描述) |
write_gbk_term(buf, offset, text) | 写GBK字符串+0x00终止符,不padding,返回终止符偏移(关键:不破坏后续字节) |
byte3_analyze(byte3) | 解析byte3的含义(全体标志+特殊效果位) |
脚本可以独立运行,也可以作为模块导入:
# 方式1:命令行运行,打印全部技能表
python gam_parse.py RPG伏魔记.gam
# 方式2:作为模块导入
from gam_parse import *
data = load_gam("RPG伏魔记.gam")
skills = read_all_skills(data)
参见 references/gam_format.md 获取完整的数据结构文档。
# 文件结构常量
SKILL_TABLE_OFFSET = 0x7C010 # 技能表起始偏移
SKILL_ENTRY_SIZE = 0x80 # 每个技能128字节
SKILL_MAX_COUNT = 80 # 最多80个技能
MONSTER_TABLE_OFFSET = 0x78400 # 怪物表起始偏移
MONSTER_ENTRY_SIZE = 0x30 # 每个怪物48字节
MONSTER_MAX_COUNT = 150 # 最多150个怪物
# 技能字段偏移
SKILL_F_MARKER = 0x00 # 标记位(应为0x01)
SKILL_F_INDEX = 0x01 # 技能序号
SKILL_F_BYTE2 = 0x02 # byte2(用途待确认)
SKILL_F_BYTE3 = 0x03 # byte3(全体标志+特殊效果)
SKILL_F_MP = 0x04 # MP消耗(单字节)
SKILL_F_NAME = 0x06 # 技能名称(内联,最长20字节,0x00终止,0x00填充)
SKILL_F_DESC = 0x1E # 技能描述(内联,0x00终止,前面可能有0x00填充)
bit7(0x80) = 全体攻击标志(待验证)
bit6(0x40) = 未知
bit5(0x20) = 未知
bit4(0x10) = 未知
bit3(0x08) = 未知
bit2(0x04) = ?(可能=封/眠/毒之一,待确认)
bit1(0x02) = ?(可能=眠/封/毒之一,待确认)
bit0(0x01) = 乱(混乱)✅ 已确认
共 2 个版本