精華區beta Koei 關於我們 聯絡資訊
前陣子重溫三國志3, 只要年份一到,關平、關興、張苞或司馬昭等兒子武將就會加入帳下 但是這些人的親族欄位又都是無資料, 因為好奇其加入機制,所以研究了一下, 一不小心把整個 SNDATA1B.CIM (劇本武將資料)的資料都搞清楚了 ---- 三國志3 的劇本檔分成 SNDATA1.CIM 與 SNDATA1B.CIM 兩個檔案 檔名中的數字為劇本編號 前面的檔案是劇本初期各勢力與城市資料 後一個檔案則是武將資料 武將資料檔中,最前面有 49x600=29400 bytes 的大小 用來放該劇本所有武將的初期登場資料 每個武將的資料為 49 bytes, 這 49 bytes 的內容前面已有文章介紹過 理論上每個劇本最多可放600個武將資料 以登場武將人數最多的 劇本1 為例,此劇本登場 531 人 所以從 532 人之後到第 600 人的資料都是空資料 ---- 29400 bytes 之後的接著兩個 bytes 固定為 '00 00', 無用途 再接下來的兩個 bytes 則是「登場資料數」 用來記錄後面有多少筆武將登場資料,例如 劇本一的登場資料數為 5A 01 = 346, 表示劇本一開始後還有 346 人還沒登場 劇本六的登場資料數為 1E 00 = 30, 表示劇本六開始後只剩 30 個人還沒登場 「登場資料數」後接著是每個未登場武將的資料, 武將的登場資料的長度為 7 bytes,格式如下: C8 00 1E 00 05 61 01 (劇本1 關平) ^^^^^ ^^^^^ ^^ ^^^^^ 登場年 父親 城 武將 其中的登場年與登場城市沒太大問題,稍微要注意的是城市是從 '00' 開始, '00' 襄平, '01' 北平, '02' 代縣...餘類推 父親這欄位嚴格來講不是父親,後面會解釋到 以上面關平的例子,'1E 00' 表示關羽,'61 01' 表示關平 不過這兩個欄位的索引方式並不相同 '1E 00' 是關羽的頭像編號, '61 01' 是關平在檔案開頭的600個武將欄位中所出現的順序 (因為兩個欄位所參照的索引資料不同,我在這邊卡了好久) 如果沒有父親武將的話,該欄位的資料為 'FF FF' 這邊也可看到三國志3遊戲程式內有使用頭像編號作為武將索引的設計 間接也證明三國志3沒有兩個武將的頭像是一樣的(即使是大眾臉武將) 從這些欄位的設計可以推測, 當每年一月時,如果該武將的登場年到了, 就會檢查父親欄位,如果有,就加入父親所在勢力; 反之則在登場城市成為可以被搜索找到的武將。 ---- 在「登場資料數」x 7 Bytes 之後, 最後再補上一個無作用的 '00' 作為結束, 這就是整個 SNDATA1B.CIM ~ SNDATA6B.CIM 的檔案結構了 (待續) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.53.35 ※ 編輯: yuxio 來自: 112.104.53.35 (01/23 08:54)
s19790824:強者推 01/23 09:14
klt:推倒強者(誤) 01/23 09:20
※ 編輯: yuxio 來自: 112.104.53.35 (01/23 09:30)
yuxio:另外就是每個武將的登場時間與年紀無關 01/23 09:42
yuxio:例如張苞188年生,203年登場,登場時15歲 01/23 09:43
yuxio:司馬炎236年生,265年登場,登場時29歲 01/23 09:44
yuxio:回頭來看,親族關係扣除登場作用外,大概就剩下不背叛這點 01/23 09:59
Seilon:由此可見司馬炎的登場年設的太晚了XD 01/23 11:15
sevenly:推一個!! 01/23 12:05