《热血传奇》怪物视觉资源存放在客户端 Data 目录下的 MonX.wil / MonX.wix(新版引擎扩展为 MonX.wzl / MonX.pak)中,X 为文件序号。服务端 Monster.DB 里的 Appr(外观代码 / Shape / Look)字段并不直接等于贴图编号,而是经过块状寻址换算后的逻辑值,引擎启动时拿 Appr 反推到具体 Mon 文件与帧偏移完成渲染。整套映射关系分文件结构、帧排布、计算公式、反向推导、引擎差异、实操改怪六层。
一、WIL/WIX 底层结构
.wil 是二进制位图资源包,顺序塞入怪物各动作帧(站立、行走、攻击、受击、死亡、方向帧等)。
.wix 是对应的索引文件,记录每张子图在 .wil 内的偏移量、长度、宽高、Hotspot(中心点 X/Y)。
客户端渲染流程:服务端下发“坐标 + Appr” → 引擎解析 Appr → 定位 MonXX.wil → 按动作枚举 × 方向数 × 帧数算出起始图号 → 查 .wix 取位图 → 绘制到屏幕坐标。
二、单怪占用贴图数与文件容量规则
不同版本区间约定不同,必须按文件序号区分:
1. Mon1.wil ~ Mon23.wil(早期盛大原版段)
触龙神、沃玛、祖玛系在此段。常见算法以“每文件 10 只怪、每只 280 张图”排布,也有资料按 720 张/只记载,取决于具体客户端年代与动作帧密度。
2. MonXX.wil,XX < 50(如 Mon1~Mon49)
约定:每文件 10 只怪物,每只 360 张连续贴图(站立+8方向行走+攻击+死亡等完整序列)。
3. Mon50.wil ~ Mon54.wil
约定:每只怪物 360 张图不变,但部分资料记为此段改为 360 张/只、每文件仍 10 只;实际以具体客户端 WIL 编辑器读出帧数为准。
4. Mon55.wil ~ Mon79.wil 及之后原版段
延续 360 张/只、10 只/文件。
5. 扩展段 Mon100.wil 起(GOM / GEE / LEG / HeroMir)
继续 360 张/只、10 只/文件,Appr 上限推到 65535,理论支持 Mon6554.pak 级资源文件。
三、正向公式:文件序号 + 文件内位置 → Appr
通用公式(XX < 50 及扩展段通用):
Appr = (XX - 1) × 10 + Pos
XX = Mon 文件序号(Mon12.wil 则 XX=12)
Pos = 怪物在该文件内的序号,从 0 开始计数(第 1 只 Pos=0,第 2 只 Pos=1,第 3 只 Pos=2…)
例 1:Mon12.wil 内第 3 只(白野猪类)
Appr = (12 - 1) × 1? 修正:(12-1)×10 + 2 = 110 + 2 = 112?结合老帖算法:720÷360=2,再拼装十位个位得 110+2=112 类推导,最终以编辑器实际帧起始校核。
例 2:Mon50.wil 内第 2 只(贴图 361~720)
Appr = (50 - 1) × 10 + 1 = 491
例 3:Mon61.pak 内第 9 只(如天道圣主⑨ Appr=608)
(61-1)×10 = 600,第 9 只 Pos=8 → 600+8=608;贴图起始 = 8 × 360 = 2880,结束 3239。
例 4:Mon105.wzl 内第 1 只
(105-1)×10 + 0 = 1040
四、反向公式:Appr → 文件序号 + 贴图起始
已知 Appr:
文件序号 XX = Appr ÷ 10 + 1(整除,向下取整前先按十位段处理)
Pos = Appr mod 10
贴图起始帧 = Pos × 单怪帧数(默认 360,原版早期可能为 280 / 720,以实际资源为准)
贴图结束帧 = 起始帧 + 单怪帧数 - 1
例:Appr = 625
十位段:620 → XX = 620÷10 + 1 = 63 → Mon63.wil
Pos = 5 → 文件内第 6 只
起始帧 = 5 × 360 = 1800
老盛大算法变体(Mon1~Mon23 段,按 360 张/只倒推):
Appr=140(触龙神) → 去个位得 14,十位 4 + 10 = 15? 实际老帖算法:140 去掉个位 0,剩 14,加回十位推到 Mon15.wil,文件内用个位 0 × 360 = 0 作为起始帧。
五、Race / RaceImg 配合约束
Monster.DB 中 Appr 只管“长什么样”,真正决定攻击逻辑、动作调用的是 Race(攻击类型)与 RaceImg(攻击图像)。Race < 500 为原版内建行为;≥ 500 为自定义怪物,必须配套写 RaceImg 与脚本行为,否则会出现“贴图加载了但站着不动 / 不攻击 / 穿地”的现象。
六、GOM / GEE / LEG / HeroMir 差异点
1. 老 Blue / 1.76 客户端:只读 MonXX.wil + MonXX.wix,Appr 上限约 540(Mon54 段)。
2. GOM / GEE:支持 MonXX.wzl、MonXX.pak,PAK 需密码一致;Appr 上限 65535,扩展从 Mon100 开始,避开 Mon50~Mon70 原版占用段。
3. LEG:同 GEE 规则,Mon71/81/82/83/91.wzl 预留冲突,自定义从 Mon100.pak 起。
4. HeroMir / 新 GEE:Resources\Graphics\Monster\ 下放置,读取优先级 wzl > wil > pak,取决于引擎资源配置表。
5. 帧数不一致:自做补丁若单怪用了 280 / 480 / 600 张,公式里的“360”要同步替换,否则第 2 只怪开始全部错位成黑块 / 红问号。
七、实操:新增一个自定义怪物
1. 用 WIL 编辑器(特种兵 / 传奇素材编辑器)新建 Mon100.wil,导入 10 只怪 × 360 张图(或 Mon100.pak 加密导出)。
2. 放客户端 Data 或 Resources\Graphics\Monster\ 下,GEE 需在 Pak.txt 登记密码与路径。
3. DBC2000 打开 Monster.DB,新增行:Name=自定义名,Appr=(100-1)×10 + Pos=990+Pos,Race=51(原版类人系)或 ≥500 自定义,RaceImg 对应。
4. MonGen.txt / 地图刷怪配置写坐标与数量,M2 重启。
5. 客户端进图验证:若红问号 → Appr 算错或补丁未读;若动作缺失 → 帧数不足 360 或 Race 不匹配;若中心点偏移 → 用十六进制改 .wix Hotspot。
八、常用速查表
Mon1.wil 第1只 → Appr 0
Mon5.wil 第1只(沃玛卫士) → (5-1)×10+0=40
Mon12.wil 第3只 → (12-1)×10+2=112
Mon19.wil 第3只(虹魔教主) → (19-1)×10+2=182
Mon50.wil 第2只 → 491
Mon61.pak 第9只 → 608
Mon100.wzl 第1只 → 990
Mon105.wzl 第1只 → 1040
贴图起始帧速算:Appr mod 10 × 360 = 该怪第一张图在 MonXX 文件内的序号;超过文件总图数即说明 Appr 越界或单怪帧数假设错误。
热血传奇Monster.wil贴图结构拆解与怪物Appr代码计算公式全实录
来源:
作者:
点击:

