作者BlackParade (BlackParade)
看板DIABLO
标题[心得] 由 setitems.bin 反推 Setitems.txt
时间Thu Feb 28 13:47:36 2008
打开档案後,第一行是
00000000h: 7F 00 00 00 00 00 43 69 76 65 72 62 27 73 20 57 ;.....Civerb's W
└───┬───-┘
套装装备件数,7F(十六进制)即表有 127 件套装装备
将档案开头记载套装装备件数的部份删去,则与 Setitems.txt 各栏位对应的情形为
┌─────────- index ──────────
00000006h:
43 69 76 65 72 62 27 73 20 57 61 72 64 00 00 00 ; Civerb's Ward...
───────── index ─────────┐
00000016h:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
┌ item ┐ ┌─ set ─╥ lvl┐
00000026h: 00 00 00 00 00 00
6C 72 67 20
00 00 00 00 0D 00 ; ......lrg ......
lvl req chrtransform
↑ ↑invtransform
┌┴-╥─ rarity ╥ cost mult╥ cost add ┐│ ↑
00000036h:
09 00 07 00 00 00 05 00 00 00 C4 09 00 00 0D 0D ; ..........?....
┌────────- flippyfile -────────
00000046h:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
───────- flippyfile ────────┐
00000056h:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
┌───────── invfile -─────────
00000066h:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
────────- invfile -────────┐
00000076h:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
dropsound dropsfxframe
↑ usesound↑add func
┌┴-╥─┴┐│ ↑┌- prop1 -╥─ par1 ─╥ min1
00000086h:
00 00 00 00 00 01 00 00 00 00 00 00 00 00 0F 00 ; ................
min1 ╥─ max1 ─╥- prop2 ─╥─ par2 ─╥ min2
00000096h:
00 00 0F 00 00 00 10 00 00 00 00 00 00 00 0F 00 ; ................
min2 ╥─ max2 ─╥- prop3 ─╥─ par3 ─╥ min3
000000a6h:
00 00 0F 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
min3 ╥─ max3 ─╥- prop4 ─╥─ par4 ─╥ min4
000000b6h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
min4 ╥─ max4 ─╥- prop5 ─╥─ par5 ─╥ min5
000000c6h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
min5 ╥─ max5 ─╥- prop6 ─╥─ par6 ─╥ min6
000000d6h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
min6 ╥─ max6 ─╥- prop7 ─╥─ par7 ─╥ min7
000000e6h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
min7 ╥─ max7 ─╥- prop8 ─╥─ par8 ─╥ min8
000000f6h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
min8 ╥─ max8 ─╥- prop9 ─╥─ par9 ─╥ min9
00000106h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
min9 ╥─ max9 ─╥ aprop1a -╥- apar1a -╥ amin1a
00000116h:
00 00 00 00 00 00 0B 00 00 00 00 00 00 00 15 00 ; ................
amin1a ╥- amax1a -╥ aprop1b -╥- apar1b -╥ amin1b
00000126h:
00 00 16 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin1b ╥- amax1b -╥ aprop2a -╥- apar2a -╥ amin2a
00000136h:
00 00 00 00 00 00 27 00 00 00 00 00 00 00 19 00 ; ......'.........
amin2a ╥- amax2a -╥ aprop2b -╥- apar2b -╥ amin2b
00000146h:
00 00 1A 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin2b ╥- amax2b -╥ aprop3a -╥- apar3a -╥ amin3a
00000156h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin3a ╥- amax3a -╥ aprop3b -╥- apar3b -╥ amin3b
00000166h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin3b ╥- amax3b -╥ aprop4a -╥- apar4a -╥ amin4a
00000176h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin4a ╥- amax4a -╥ aprop4b -╥- apar4b -╥ amin4b
00000186h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin4b ╥- amax4b -╥ aprop5a -╥- apar5a -╥ amin5a
00000196h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin5a ╥- amax5a -╥ aprop5b -╥- apar5b -╥ amin5b
000001a6h:
00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 ; ...... ......
amin5b ╥- amax5b -┐ ┌ 下一件套装装备的 index
000001b6h:
00 00 00 00 00 00 00 00 43 69 76 65 72 62 27 73 ; ........Civerb's
000001c6h: 20 49 63 6F 6E ; Icon
记录的形式分为字与数(十六进制)两种。index、item、flippyfile、invfile 这四栏位
是以字的形式记录在 setitems.bin,打开档案後望之即识。其他栏位皆以数的形式记录,
并以两个进位(十六进制)为一组,颠倒地由低位组排列至高位组。如 cost add 此栏,
在 Setitems.txt 中其值为 2500,於 setitems.bin 中所见为 C4 09 00 00,转换过程为
╭───────────╮
│ ╭─────╮ │
│ │ ↓ ↓
2500 → 9C4(十六进制)→ 00 00 09 C4 → C4 09 00 00
│ │ ↑ ↑
│ ╰──╯ │
╰────────╯
数的转换具有周期性,相差正好整数个周期的两数其转换的结果将相同。 周期的大小与记
录的长度有关。以一个字元(十六进制的两个位)的长度记录的栏位,如 chrtransform
,其周期为 16*16=256;以两个字元(十六进制的四个位)的长度记录的栏位,如 lvl,
其周期为 16^4=65536,以下类推。将栏位与记录长度、周期的对应关系制表得
┌────┬─────┬─────────────────────┐
│记录长度│ │ │
│(字元)│ 周 期 │ 栏 位 │
├────┼─────┼─────────────────────┤
│ │ │chrtransform invtransform dropsfxframe│
│ 1 │ 256│add func │
├────┼─────┼─────────────────────┤
│ │ │set lvl lvl req │
│ 2 │ 65536│dropsound usesound │
├────┼─────┼─────────────────────┤
│ │ │rarity cost mult cost add │
│ │ │prop1(~9) par1(~9) min1(~9) │
│ 4 │4294967296│max1(~9) aprop1a(~5b) apar1a(~5b) │
│ │ │amin1a(~5b) amax1a(~5b) │
└────┴─────┴─────────────────────┘
有时由十六进制反推回十进制所得的数极大, 这时或许应该以恰好小一个周期的负数当作
反推结果,较能符合实际游戏里的状况,虽然这两个一正一负的数在 setitems.bin 里生
成的记录是一模一样的。如 Setitems.txt 中 Cathan's Mesh 的 min2 及 max2 栏即为
-50 而非 4294967246,其实际的效果亦为减少属性需求而非提高。
以下对必须或可以进一步处理的栏位个别说明。
※ set
须查 Sets.txt 的 index 栏位将数字转回文字。某全套在 Sets.txt 的排列顺序减一即为
某全套的对应数,如 0 即须转为 Civerb's Vestments,1 即须转为 Hsarus' Defense,
以下类推。此栏位及 Sets.txt 之 index 栏位仅作用於套装装备与全套的匹配,故若
Sets.txt 同 Setitems.txt 一般,尚待反推而无可参考时,只需注意使相匹配的
Setitems.txt 之 set 与 Sets.txt 之 index 两栏位之文字一致即可。官方的、如数以全
套名填入的处置只是一种风格。 若两栏位皆留白,亦可互相匹配。留白亦判定为「值」的
一种。
※ lvl、lvl req
若为 0 或 1 则表示无等级限制,留白亦可。
※ rarity
若为 0 则表示不可能出现,留白亦可。
※ cost mult、cost add
若为 0 则表示费用无加、减成/增减,留白亦可。
※ chrtransform、invtransform
须查 colors.txt 的 Code 栏位将数字转回文字。某颜色在 colors.txt 的排列顺序减一
即为某颜色的对应数,如 0 即须转为 whit,1 即须转为 lgry,以下类推。若为 255(十
六进制的 FF)则表示不变色,留白即可。
※ dropsound、usesound
须查 Sounds.txt 的 Sound 栏位将数字转回文字。某音效在 Sounds.txt 的排列顺序即为
某音效的对应数,如 1 即须转为 cursor_pass,2 即须转为 cursor_select,以下类推。
若为 0 则表示不另定音效,留白即可。
※ dropsfxframe
若为 0 则表示不另定播放延迟时间,留白亦可。
※ add func
若为 0 则表示这件套装装备的追加属性(aprop1a(~5b),绿色)无条件出现,留白亦可。
※ prop1(~9)、aprop1a(~5b)
须查 Properties.txt 的 code 栏位将数字转回文字。某物品属性在 Properties.txt 的
排列顺序减一即为某物品属性的对应数,如 0 即须转为 ac,1 即须转为 ac-miss,以下
类推。若为 4294967295(十六进制的 FFFFFFFF)则表示不指定物品属性,留白即可。
※ par1(~9)、apar1a(~5b)
若为 0 则表示未使用参数或参数为零,留白亦可。若前一栏位的物品属性为 skill(123)
、aura(124) 等须指定技能者,可查 skills.txt 的 skill 栏位将数字转回文字,此时某
技能在 skills.txt 的排列顺序减一即为某技能的对应数,如 6 即转为 Magic Arrow,7
即转为 Fire Arrow,以下类推。
※ min1(~9)、max1(~9)、amin1a(~5b)、amax1a(~5b)
若为 0 则表示最小/最大值为零或未使用,留白亦可。
将以上的个别说明列表
┌──────┬───┬───┬───────────┬──────────┐
│ │可否为│可否为│ 转回文字时须查询的 │ │
│ 栏 位 │ 数字 │ 文字 │ 档案 :: 栏位 │ 留白的意义 │
├──────┼───┼───┼───────┬───┼──────────┤
│set │ 否 │ 必须 │ Sets.txt │index │「值」的一种 │
├──────┴───┴───┴───────┴───┼──────────┤
│lvl、lvl req │无等级限制 │
├──────────────────────────┼──────────┤
│rarity │不可能出现 │
├──────────────────────────┼──────────┤
│cost mult、cost add │费用无加、减成/增减 │
├──────┬───┬───┬───────┬───┼──────────┤
│chrtransform│ │ │ │ │ │
│invtransform│ 否 │ 必须 │ colors.txt │ Code │不变色 │
├──────┼───┼───┼───────┼───┼──────────┤
│dropsound │ │ │ │ │ │
│usesound │ 否 │ 必须 │ Sounds.txt │Sound │不另定音效 │
├──────┴───┴───┴───────┴───┼──────────┤
│dropsfxframe │不另定播放延迟时间 │
├──────────────────────────┼──────────┤
│add func │追加属性无条件出现 │
├──────┬───┬───┬───────┬───┼──────────┤
│prop1(~9) │ │ │ │ │ │
│aprop1a(~5b)│ 否 │ 必须 │Properties.txt│ code │不指定物品属性 │
├──────┼───┼───┼───────┴───┼──────────┤
│par1(~9) │ │ │ skills.txt ::skill │ │
│apar1a(~5b) │ 可 │ 可 │(前一栏位为某几种时)│未使用参数或参数为零│
├──────┴───┴───┴───────────┼──────────┤
│min1(~9)、max1(~9)、amin1a(~5b)、amax1a(~5b) │值为零或未使用 │
├──────┬───┬───┬───────────┼──────────┤
│ 栏 位 │可否为│可否为│ 档案 :: 栏位 │ 留白的意义 │
│ │ 数字 │ 文字 │ 转回文字时须查询的 │ │
└──────┴───┴───┴───────────┴──────────┘
Setitems.txt 的 *item 栏位仅供人参考,未记录於 setitems.bin。若欲仿官方风格完成
此栏,则以 item 栏位之三字母单字查询 armor.txt、misc.txt、weapons.txt 之 code
栏,觅得相应的 name 栏位之值,将其填回 *item 栏位即可。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.93.251
1F:推 homie407:期中考?考题?雾煞煞 02/28 13:55
2F:推 thisgo:很专业的感觉 但可以先做个简介吗? 有种突然冒出来的感觉XD 02/28 13:56