What have you found for these years?

2009-05-31

上傳了 XDD (4) gw-templates

上一篇提到很多後面的技能解出來都不對,
其實這很早就發現了,我以為是 table 錯誤,
(或是 gw 有什麼秘技,沒有公開...)
但怎麼看都怪,因為放在中間的技能就不會錯 @@

後來覺得可能是 endian 的問題,但看起來還是怪,
因為有些技能組不會碰到這個問題,如果是 endian
應該會很多都會有問題才對...

剛剛追查半天,才發現原來是很簡單的問題:

bits 不夠 =_=b....

用 ruby 的 unpack 'm*' 解出來的 bits 根本不足 @@
所以後面的技能當然就怪掉了,不足超過 11 bits 的話,
就會看到一堆 (blank) 因為 bits 是 0 ...

我不是很熟 base64, 但我猜可能是因為 ruby 是以 byte 為單位,
而 gw 這個卻是以 bit 為單位,因此把一些不足的部份幹掉了?
這也可以解釋為什麼我用 unpack 要用 big-endian,
然後再用一堆奇怪的反轉去改變 bits 的順序,
而不能用 little-endian 直接讀出來... 因為他是用 byte 當單位啊?

anyway, 反正就算全部用 ruby 硬幹應該也是瞬間就讀出來了。
就直接用 ruby 查 base64 table 湊出來吧:
(也難怪他是 6 bit 為一個單位,我還以為有 2 bit 是檢查碼...)

('%06d' % Base64Map.index(char).to_s(2)).reverse

果然改成這樣就沒問題了。感覺之前那樣是把問題複雜化了...
我猜 gw 這邊可能用 c 的 struct, 所以他有很方便的方式 cast 出來。
我用 ruby 只好用怪招抽出來了 @@

附上這篇裡錯得離譜的其中一個技能:
GW 即時戰略 @@

godfat ~/p/g/gw-templates> ruby1.9 template_reader.rb -s \
Skills/0H-Rt-Me-Spike.txt

Skills/0H-Rt-Me-Spike.txt:


Template: Skills
Version: 0
Code: OAWkMYhqITaTGgIMOLnE7lpj7iB
Profession: Ritualist / Mesmer

Attributes:
Inspiration Magic 6
Restoration Magic 10
Channeling Magic 12
Spawning Power 6

Skills:
Power Drain
Drain Enchantment
Life
Bloodsong
Destructive Was Glaive
Essence Strike
Spirit Rift
Flesh of My Flesh

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0