Saturday, December 31, 2016

Join in the League, Angels!



I am very interested in Browser Games recently.
This one standout because it use Adobe AIR(Stage3D) engine.
Something new for me ! :)
Models and animations are packed in an archive with LZMA compression.
Textures are native ATF.
The only draw back is "model as you play" !




Tuesday, December 20, 2016

有錢任性



記得去年研究了一個網頁遊戲. 它是用國內的 F~ 遊戲引擎開發的.


今天發現又一個新的網頁遊戲使用這引擎. 我試用去年寫成的 Maxscript 導入模型動畫.
完全成功操作無誤. 不用半點修改! 呵呵...



這個頁戲是以女性為主線. 有點像 league of angels 2, 下面就是一些女性人物的造型, 很不錯的.



Sunday, December 11, 2016

Powerful QuickBMS



My friend ask me to make a tool to convert a web3D models back to obj.
All the informations had been given. They are base64 + zlib compression.
Actually you can use a lot of tools to decode base64(IE) and decompress(offzip) them.
But a tool to convert it one the fly will be handy.
Thanks to QuickBMS, it support both base64 and zlib.
And I only spend ten, fifteen minutes to finished it.


# Idolmaster 3D site
# by Fatduck     Dec 2016
# script for QuickBMS http://quickbms.aluigi.org

idstring "/* DON'T LOOK AT THIS */"
get NAME basename
string NAME += .obj

do 
   get STBYTE byte
while STBYTE != 0x22
savepos OFS

goto -5
do 
   savepos SIZE
   get STBYTE byte
while STBYTE != 0x22
math SIZE -= OFS

comtype base64
clog MEMORY_FILE OFS SIZE SIZE

get SIZE asize MEMORY_FILE
comtype UNZIP_DYNAMIC
clog NAME 0 SIZE SIZE MEMORY_FILE

Friday, December 09, 2016

手遊模型



這兩星期研究了一個手機遊戲, 遊戲可說是水準之作, 但資源卻完全沒有檔案名稱.
我就挑戰一下自己的集中力和耐力, 能否把貼圗和模型一一的對應起來.




Friday, November 25, 2016

用 3DSMax 直接解密導入模型



很久沒有更新了, 不是沒有研究遊戲格式了, 而是沒有甚麼特別要記錄的東西吧.
回到正題. 最近接觸到一個頁遊, 它的資源是沒有打包的. 所以好奇看了一下.
資源的保護方式是把模型開頭的一段加密了.
所以我就挑戰一下在不用外來工具的情況下, 直接用 3DSMax 解密導入模型好了!


Saturday, September 17, 2016

More on Jupiter EX



Continue on my research. I found another MMO Genesis A.D./Repulse running on Jupiter EX.
And the version it used is the same as F.E.A.R. V33.
The only difference is that Genesis A.D. used more rigid data(I havn't figure these before)
Now my Jupiter EX importer getting even more powerful that before.

Here is a quick render for the game models.



World(map) format are also supportted now. Here is a simple test for 41M file with 1814 meshes imported into 3dsmax!
Actually, materials should be imported automatically. Just too rush to post it here(and too lazy to find the materials)  before going for a two weeks trip!



Monday, September 12, 2016

Hounds Online, the First Encounter of ...... Nightmare!!!



I'd been on and off working on this format for two months now.

The format is not difficult.
Bones data always located right after the header of Model00p.
Mesh in Mesh00p file. Material in Mat00p file.
Up to these point they are still pretty straight forward!

When I take a closer look on Model00p. I found that Animation were there(Not sure at that moment).
Also it points to another Model00p files at some point.
Finally I found that meshes might be in the same Model00p.(OMG!)

OK, Just follow the patterns to skip the data I don't needed.
Patterns are quite regular across Hounds Online.


Stories began with knowing the game engine is Jupiter EX.(Lot of FPS using it)
One of the famous series is F.E.A.R.
At this point I decided to make it compatible with all these games.(Stupid me!)

Different version seems to have their own patterns(even same verson in different game)
It just took me forever to finish the models reversing...
Well, This is the payoff!





Next step is going for the animation!

Wednesday, August 17, 2016

Tales Runner


有朋友要求看一下 Tales Runner 的格式:
m1 是模型
a1 是動作
p1 是主結構/材質

整體格式不太複雜, 但是模型中的骨骼資料沒有父子的連接關係(m1,a1,p1檔內都沒有!?)
而動畫檔內的動作都是相對性的, 模型檔內的蒙皮資料是相對面分段的!

所以我沒興趣完成了, 有興趣的朋友可看行參考研究!


模型格式:
struct {
  char[16] Header_ID
  dword unknown
  dword unknown
  word length
  char[length] Mesh_Name
  dword unknown
  byte[52] unknown //possibly padding
  dword/float unknown
  dword Face_Block_Size
  dword String_Block_Size //Bones name
}

struct Bone_String_Block {
  dword num_Bones
  word length
  char[length] Bone_Name
}

struct Vert_Block {
  word unknown
  dword num_Material
  byte unknown
  dword FVF
  dword num_Verts
  dword num_Face_Idices
  dword Verts_Block_Size

  struct Vert {
    float[3] coordinate
    float[4] skin_weight
    byte[4] bone_indices
    float[3] normal
    float[3] Tex_UV
  }
}

struct Face_Block {
  dword Face_Indices_Size  
  struct Face {
    word Index_123
  }

  struct Face_Neighbour {
    dword Index_123
  }

}

struct Face_Strip_ID {
  dword Strip_ID
}

struct Face_Skin_Block {
  word num_Face_Strips
  
  struct Face_Strip {
    word Material_ID
    word num_Bones

    struct Skin_Bone {
      word String_Index //Reference to Bone_String_Block
      word Matrix_Index //Reference to matrix below
    }
  }

}

Struct Matrices_Block {
  word num_Matrices

  struct Matrix_4X4 {
    float[16] matrix
  }

}

簡單的 Maxscript 導入腳本

Friday, July 29, 2016

Aion Importer Again


Request by a guy, I had revised my Aion importer.
Now support morph and animation sets.

有朋友要求導入 Aion 的模型和動畫.
所以重新整理一下. 現在加強支援了 morph 和 動畫集.

Youtube Video

Wednesday, May 18, 2016

Offsets, offsets, keys to reverse


哈哈, 我對 gundam 的模型沒抵抗力. 有朋友傳了一些檔案給我研究, 說找不到蒙皮的骨骼關係.
花了數小時來研究整個格式. *_vertex 是資料檔, *_model 資訊檔.
而 *_model 的開頭是一段 offset. (64-bits)
0x30 ~ 0xA0 是 offset
0xA0 ~ 0xC8 是相對的內容數量
0xC8 ~ 0x120 也是 offset
而要找的蒙皮骨骼 offset 就在 0x88

I can't resist with gundam 3D models!
My friend ask me to figure the skinning problem of this game.
And here it is: *_vertex is data file, *_model is description/information file.
0x30 ~ 0xA0 are all 64-bits offsets
0xA0 ~ 0xC8 are their relative count
0xC8 ~ 0x120 another sets of offset
Skin-Bones table is pointed by offset 0x88.


struct BFMDLMESH {
 char[16] Chunk_ID
 short ?
 short Bone_Reference
 short Sub_Mesh_Block_Start
 short Sub_Mesh_Block_Count
 short Skin_Bone_Count
 short offset_Skin_Bone_Table
 short LOD
 short Bone_Reference2
 float[6] Bounding_box //format -x,x,-y,y,-z,z
 float Radius
 long Flag
}

struct BFMDLSUBMESH {
 char[16] Chunk_ID
 short ?
 short ?
 short ?
 short ?
 short FVF
 short ?
 short ?
 short ?
 float[6] Bounding_box
 short Face_Count
 short Vertex_Count
 short ?
 short ?
 short offset_Face_Block
 short offset_Vertex_Block
 short[4] Skin_Bone_Index
 long[16] offset_Vertex_Element
}

這是整個 _model 的 log. 有興趣自行研究的可以下來看看.
This is the full log of the file, anyone interested may found it useful.

Sunday, May 08, 2016

上月有空, 把 Granado Espada 的東西好好的導入整理.



Thursday, March 17, 2016


差不多一個月沒更新這裡, 因為接到了幾個小包工呢!
現在記錄一下導入成果! :)

I havn't updated here for a month now. It's because I got a few commission work.
Here are some work in action! :)




Youtube Video


如果對這些模型和動作有興趣的話, 可下載這些 3dsMax2002 檔案(沒有貼圖的)
if you are imterested in these models and animation, you can download these files here(No texture provided):
File 1
File 2
File 3
File 4


Thursday, February 18, 2016

2Moons(Dekaron) Online Maxscript


剛好上星期有點時間, 所以研究了 2 Moons (Dekaron) Online 的格式.
整體格式十分簡單, 而且各種資源分類整齊.
如果要說這遊戲失敗的原因, 相信就是貼圖設計太差吧!

I got some time last week so I make a importer script for 2 Moons (Dekaron) online.
The formats are quite easy and resources are well organized.
I think this game was dead because of bad texture design!

YouTube video



Friday, February 05, 2016

Hellgate 小插曲


人長大了真的不太愛冒險! 今天有空看一下 Hellgate (Global/London) 的格式,
模型 *.wm; *.am 都十分簡單. 只用數十分鐘便完成. 可是骨骼/動畫都是用 havok .hkx 格式.
一想起這些大引擎的格式就有點頭痛, 心裡竟然害怕起來, 想放棄...


Sunday, January 31, 2016

D-Player Reborn!


一直覺得欠我的朋友太多, 不時就有朋友要求我幫忙研究某某遊戲.
可是我有的時間實在太有限, 不可能每個遊戲都研究的.
但我都會記錄你們要求過的東西, 或許有天我會感興趣...

就像這個 D-Player 的跳件舞遊戲. 現在是完全解讀了整個格式.
而且再次感謝 Luigi Auriemma 的 QuickBMS 工具,
不單可以解包 DCZ 檔, 還可以完美打包.

這回我是有興趣讀個模型導出程序, 很快會看到全新的人物出現了...
你們也有興趣嗎?

Monday, January 25, 2016

再見 Facebook! Bye-bye Facebook!


約兩星期前收到 Facebook 要求, 一定要更改 Facebook 的名稱為真實名稱,
而且要上傳文件來証實名稱的真偽! 自問 Fatduck 這個名稱我已經用上了十五六年以上了.
現在要我改變, 感覺就像要我宣佈 Fatduck 死亡一樣.
算了, 我寧可放棄 Facebook.

要找我的話, 可以到我的舊 Blogger http://fatduck3d.blogspot.co.uk/
或 email: this4game@hotmail.com ; fatduck_uk@qq.com

如果大家知道有甚麼好的研究論壇, 不妨介紹一下.

Two weeks ago, I've been forced to change my name in Facebook!
It needs to be real name and supply ID confirmation.
To be honestest, I've been using "Fatduck" for over 15/16 years. And I don't want to change.
Changing it feels like I'm announcing "Fatduck" as death. Well, I give up on Facebook!

For anyone who what to contact me, come to me old Blogger http://fatduck3d.blogspot.co.uk/
Or, email: this4game@hotmail.com ; fatduck_uk@qq.com

If you know any place/forums for discussing 3D gaming, let me know please.

Saturday, January 16, 2016

Little Tips


有效地使用 MS 腳本 (批次檔) 和 Quickbms 快速轉換檔案。
Effective use of MS script(Batch file) and Quickbms to convert files on the fly.

https://youtu.be/SPYT82fTJFc


Friday, January 15, 2016

Grimlands Online


2016年第一個研究的遊戲將會是 "Grimlands Online".
單單解包資源就花了四小時以上了. (謝謝 Luigi Auriemma 的解包工具和腳本)
單從貼圖看來就有點讓人期待了.
The first game I am going to study in 2016 is going to be "Grimlands Online"
With Luigi's QuickBms and o3pk script(Thanks Luigi Auriemma), All resources unpacked. But it took more than 4 hours to finish!!!
By looking at the textures, it's in very high detail.
Looking forward to it.















基本導入完成, 只是 "add_" 為首的動作出現問題.
而材質和貼圖有待轉換...
Almost done. Problem on some animation with suffix "add_"?
Textures and materials to be convert...













寫了個速成的 QuickBMS腳本.
而 Grimlands 就算是完成了.
Just wrote a quick and dirty bms script to convert o3tex to dds!
Grimlands is basicaly finished.