[心得] 由 sets.bin 反推 Sets.txt
打開檔案後,第一行是
00000000h: 20 00 00 00 00 00 B0 09 00 00 00 00 00 00 00 00 ; .....?........
└─-┬──┘
套裝套數,20(十六進制)即表有 32 套套裝
將檔案開頭記載套裝套數的部份刪去,則與 Sets.txt 各欄位對應的情形為
套號 version
↑ name ↑
┌┴-┬-┴-┬-┴-┐
00000004h: 00 00 B0 09 00 00 00 00 00 00 00 00 00 00 00 00 ; ..?............
┌ PCode2a ┬ PParam2a ┬- PMin2a -┬- PMax2a -┐
00000014h: 1F 00 00 00 00 00 00 00 0F 00 00 00 0F 00 00 00 ; ................
┌ PCode2b ┬ PParam2b ┬- PMin2b -┬- PMax2b -┐
00000024h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ PCode3a ┬ PParam3a ┬- PMin3a -┬- PMax3a -┐
00000034h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ PCode3b ┬ PParam3b ┬- PMin3b -┬- PMax3b -┐
00000044h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ PCode4a ┬ PParam4a ┬- PMin4a -┬- PMax4a -┐
00000054h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ PCode4b ┬ PParam4b ┬- PMin4b -┬- PMax4b -┐
00000064h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ PCode5a ┬ PParam5a ┬- PMin5a -┬- PMax5a -┐
00000074h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ PCode5b ┬ PParam5b ┬- PMin5b -┬- PMax5b -┐
00000084h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ FCode1 -┬ FParam1 -┬- FMin1 ─┬- FMax1 ─┐
00000094h: 07 00 00 00 00 00 00 00 0F 00 00 00 0F 00 00 00 ; ................
┌ FCode2 -┬ FParam2 -┬- FMin2 ─┬- FMax2 ─┐
000000a4h: 63 00 00 00 00 00 00 00 C8 00 00 00 C8 00 00 00 ; c.......?..?..
┌ FCode3 -┬ FParam3 -┬- FMin3 ─┬- FMax3 ─┐
000000b4h: 21 00 00 00 00 00 00 00 19 00 00 00 19 00 00 00 ; !...............
┌ FCode4 -┬ FParam4 -┬- FMin4 ─┬- FMax4 ─┐
000000c4h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ FCode5 -┬ FParam5 -┬- FMin5 ─┬- FMax5 ─┐
000000d4h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ FCode6 -┬ FParam6 -┬- FMin6 ─┬- FMax6 ─┐
000000e4h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ FCode7 -┬ FParam7 -┬- FMin7 ─┬- FMax7 ─┐
000000f4h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
┌ FCode8 -┬ FParam8 -┬- FMin8 ─┬- FMax8 ─┐
00000104h: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ; ????............
00000114h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
下一套套裝的套號
↑
┌┴-┐
00000124h: 00 00 00 00 00 00 00 00 01 00 ; ..........
所有欄位皆以數(十六進制)的形式記錄, 並以兩個進位(十六進制)為一組,顛倒地由
低位組排列至高位組。
如 name 此欄,在 sets.bin 中其值為 B0 09,須先經如下之轉換過程
╭─────╮
│ ↓
B0 09 → 09 B0 → 9B0(十六進制)→ 2480
│ ↑
╰──╯
再以所得數 2480 進行進一步處理(下述),始可還原得 Sets.txt 中所見之 Civerb's
Vestments。
數的轉換具有週期性,相差正好整數個週期的兩數其轉換的結果將相同。
週期的大小與記錄的長度有關。
以兩個字元(十六進制的四個位)的長度記錄的欄位,如 version,其週期為 16^4=65536
;
以四個字元(十六進制的八個位)的長度記錄的欄位,如 P P a r a m 2 a ,其週期為
16^8=4294967296,以下類推。
將欄位與記錄長度、週期的對應關係製表得
┌────┬─────┬─────────────────────┐
│記錄長度│ │ │
│(字元)│ 週 期 │ 欄 位 │
├────┼─────┼─────────────────────┤
│ 2 │ 65536│name version │
├────┼─────┼─────────────────────┤
│ │ │PCode2a(~5b) PParam2a(~5b) PMin2a(~5b)│
│ 4 │4294967296│PMax2a(~5b) FCode1(~8) FParam1(~8)│
│ │ │FMin1(~8) FMax1(~8) │
└────┴─────┴─────────────────────┘
以下對必須或可以進一步處理的欄位個別說明。
※ name
須查 string.tbl、patchstring.tbl、expansionstring.tbl 將數字轉回文字鍵 (key)。
若為 string.tbl 的文字鍵,則其排列順序減一即為其對應之數;
若為 patchstring.tbl 的文字鍵,則其排列順序加一萬再減一即為其對應之數;
若為 expansionstring.tbl 的文字鍵,則其排列順序加二萬再減一即為其對應之數。
例如 2480 小於一萬,須查 string.tbl 轉為 Civerb's Vestments;
10022 介於一萬與二萬之間,須查 patchstring.tbl 轉為 Hsarus' Defense;
21667 大於二萬,須查 expansionstring.tbl 轉為 Natalya's Odium,其餘類推。
※ version
若為 0 則表示為主程式 CD2 套裝,留白亦可。
※ PCode2a(~5b)、FCode1(~8)
須查 Properties.txt 的 code 欄位將數字轉回文字。
某物品屬性在 Properties.txt 的排列順序減一即為某物品屬性的對應數,如 0 即須轉為
ac,1 即須轉為 ac-miss,以下類推。
若為 4294967295 (十六進制的 FFFFFFFF)則表示不指定物品屬性,留白即可。
※ PParam2a(~5b)、FParam1(~8)
若為 0 則表示未使用參數或參數為零,留白亦可。
若前一欄位的物品屬性為 skill(123)、aura(124) 等須指定技能者,可查 skills.txt 的
skill 欄位將數字轉回文字,此時某技能在 skills.txt 的排列順序減一即為某技能的對
應數,如 6 即轉為 Magic Arrow,7 即轉為 Fire Arrow,以下類推。
若前一欄位的物品屬性為 state(267) ,可查 states.txt 的 state 欄位將數字轉回文字
,此時某狀態在 states.txt 的排列順序減一即為某狀態的對應數,如 1 即轉為 freeze
,2 即轉為 poison,以下類推。
※ PMin2a(~5b)、PMax2a(~5b)、FMin1(~8)、FMax1(~8)
若為 0 則表示最小/最大值為零或未使用,留白亦可。
以下對只出現於 Sets.txt、sets.bin 兩檔其中之一的欄位個別說明。
※套號 (sets.bin)
某套裝在 Sets.txt 的排列順序減一即為此欄位記錄之數,如 0 即為套裝 Civerb's
Vestments,1 即為套裝 Hsarus' Defense,以下類推。
此欄位僅出現於 sets.bin,依套裝排列順序自動生成數值,非為 Sets.txt 中正式、具名
之欄位,毋須反推回 Sets.txt,姑且稱之為套號。
※ index (Sets.txt)
須查 setitems.bin 及 Setitems.txt 的 set 欄位將套號轉為文字。
於 setitems.bin 尋得其 set 欄位之數與套號相同之任一套件,則 Setitems.txt 中同套
件的 set 欄位之文字即為應填入 index 欄位之值。
此欄位及 Setitems.txt 之 set 欄位僅作用於套裝與套件的匹配,故若 Setitems.txt 同
Sets.txt 一般,尚待反推而無可參考時,只需注意使相匹配的 Sets.txt 之 index 與
Setitems.txt 之 set 兩欄位之文字一致即可。
官方的、如數以套裝名填入的處置只是一種風格。
若兩欄位皆留白,亦可互相匹配。留白亦判定為「值」的一種。
※ level (Sets.txt)
Sets.txt 的 level 欄位未記錄於 sets.bin。
若欲依樣完成此欄,則搜尋 Setitems.txt 中屬於此套裝之任一套件的 lvl 欄,回填其值
入 level 欄位即可。
對以上的欄位個別說明,留下反推 Sets.txt 時務必完成否則無法生成正確的 sets.bin
者,列表
┌──────┬───┬───┬─────────────┬────────┐
│ │可否為│可否為│轉 回 文 字 時 須 查 詢 的│ │
│ 欄 位 ╰┐數字│文字┌╯ 檔 案 :: 欄位 │ 留白的意義 │
├───────┼──┼──┼──────────┬───┼────────┤
│ │ │ │ string.tbl │ │ │
│name │ 否 │必須│ patchstring.tbl │文字鍵│不可留白 │
│ │ │ │expansionstring.tbl │(key) │ │
├───────┴──┴──┴──────────┴───┼────────┤
│version │為主程式 CD2套裝│
├───────┬──┬──┬──────────┬───┼────────┤
│PCode2a(~5b) │ │ │ │ │ │
│FCode1(~8) │ 否 │必須│ Properties.txt │ code │不指定物品屬性 │
├───────┼──┼──┼──────────┴───┼────────┤
│ │ │ │ skills.txt ::skill │ │
│PParam2a(~5b) │ 可 │ 可 │ ststes.txt ::state │未使用參數或參數│
│FParam1(~8) │ │ │ (前一欄位為某幾種時) │為零 │
├───────┴──┴──┴──────────────┼────────┤
│PMin2a(~5b)、PMax2a(~5b)、FMin1(~8)、FMax1(~8) │值為零或未使用 │
├───────┬──┬──┬──────────┬───┼────────┤
│ │ │ │ sets.bin │ 套號 │ │
│index │未有│必須│ setitems.bin │ set │「值」的一種 │
│ │記錄│ │ Setitems.txt │ set │ │
└───────┴──┴──┴──────────┴───┴────────┘
--
※ 發信站: 批踢踢實業坊(ptt.cc)
留言