速查 › 球員資料檔全欄位清單
球員資料檔全欄位清單
球員資料檔那頁講的是「這個檔怎麼讀」, 代號對照表講的是「那些數字代表什麼」。 這頁是完整清單 —— 兩個檔案的每一欄,加上實測值域。
先說清楚這頁的數字是從哪一份遊戲量的
本頁的項目數、檔案數、覆蓋率,量的是一台裝過台灣模組的遊戲。 剛安裝好的原版數字小很多 —— 例如臉皮 504 對 894、大頭照 1,487 對 6,638、 語音號碼 1,673 對 4,343。
格式與結構的部分兩邊一樣,那是遊戲程式決定的; 會變的是「有幾個」。完整對照見 原版與這台機器差在哪。
⚠️ 這頁的數字量自本站測試機,你的會不一樣
本站測試機的 attrib.dat 與 pitcher.dat
都被模組換過、跟剛安裝好的原版不同,裝的是一份混了大聯盟與台灣球員的名單。
(這裡本來寫「attrib.dat 檔案日期是 2026 年 4 月」。
檔案日期不要拿來當佐證 —— 它會被後來的操作蓋掉,現在量到的是 2026-08-29。
內容沒有變過:本站 2026-04-14 那份快照裡的 attrib.dat
與現役這一份 sha256 相同。pitcher.dat 的日期還停在 2023 年 5 月。)
所以像「3,247 位球員」「某某球員的識別碼是多少」這種跟名單內容有關的數字, 你自己跑會得到別的結果。
不會變的是格式:欄位有幾個、每一格怎麼寫、資料怎麼分隔 ——
那是遊戲程式決定的,換名單也不會變。
⚠️ 但「哪一欄是什麼」會變。本站實測 46 個欄位裡有 27 個
在剛安裝好的原版與社群名冊之間位置不同(skin_tone 從第 12 欄搬到第 38 欄,
中間的欄位各前移一格;audioid 原版第 17、社群名冊第 16)。
兩份剛安裝好的原版(英文與中文)彼此完全相同,所以分界是原版 vs 社群名冊,不是語言。
永遠不要記欄號,要在執行時從表頭找欄位名 —— 本站的腳本都是這樣做的。
這頁講的規則對你成立,數字與欄號不一定。
⚠️ 本頁有幾節量的是剛安裝好的原版而不是測試機 (薪水、身高體重、兩條自動檢查那幾節),那幾節都在段落裡標出來了 —— 同一個欄位在兩份名單給出不同的數字是正常的。
先看規模
| 檔案 | 欄位 | 資料列 | 裝什麼 |
|---|---|---|---|
| attrib.dat | 46 | 3,247 | 每一位球員都有一列 |
| pitcher.dat | 29 | 1,618 | 只有投手才有一列 |
兩個檔各有 25 列姓名兩欄都空白 —— 那是沒用到的名單空位,不是球員。 算比例的時候要記得扣掉。
先解兩個編碼很怪的欄位
大部分欄位一看就懂。但有兩欄的數字完全不像它該有的樣子。
身高:欄位值 + 48 = 英吋
身高那一欄的值只有 18 到 35,看起來完全不像身高。 拿五位身高公開已知的球員對一次:
| 球員 | 欄位值 | 真實身高 | 差 |
|---|---|---|---|
| José Altuve | 18 | 66 吋 | 48 |
| Mike Trout | 26 | 74 吋 | 48 |
| Bryce Harper | 27 | 75 吋 | 48 |
| Shohei Ohtani | 28 | 76 吋 | 48 |
| Aaron Judge | 31 | 79 吋 | 48 |
五個人,差都是 48,一次都沒有誤差。 48 英吋是四英尺 —— 也就是這一欄存的是「超過四英尺幾吋」。
換算回來:值域 18–35 = 5 呎 6 吋 到 6 呎 11 吋(66 到 83 英吋), 這正好就是職業棒球選手的身高範圍。
再加一道旁證:把身高分組去算平均體重, 從 19 到 31 完全單調遞增(76.6 一路爬到 132.9)。矮的輕、高的重。
生日:從 1947 年最後一天起算的天數
生日那一欄是四到五位數(9196 到 20543),
看起來像天數。問題是「從哪一天開始算」。
同樣拿已知生日的球員反推:
| 球員 | 欄位值 | 真實生日 | 反推的起點 |
|---|---|---|---|
| José Altuve | 15,467 | 1990-05-06 | 1947-12-31 |
| Aaron Judge | 16,188 | 1992-04-26 | 1947-12-31 |
| Bryce Harper | 16,361 | 1992-10-16 | 1947-12-31 |
| Shohei Ohtani | 16,988 | 1994-07-05 | 1947-12-31 |
四個人反推出同一天。所以規則是
生日 = 1947-12-31 加上這個欄位的天數。
套回整份名單:值域 9,196–20,543 換算成 1973 年 3 月到 2004 年 3 月出生 —— 完全合理。
第五個人對不上,這件事要講
本站也對了 Mike Trout,反推出來是 1948-01-31,差了一個月。
四比一,所以本站採 1947-12-31。
但這代表那一列的生日跟現實不一樣 ——
可能是模組填錯,也可能是本站查到的資料有誤。
未解 本站沒有再往下追。
五個樣本裡有一個不合,就要寫出來。 只報「四個都對」是報喜不報憂。
第三個編碼很怪的欄位:薪水
上面兩欄本站解開了。這一欄沒有。但量得出來的部分已經夠用了。
⚠️ 這一節的數字量自剛安裝好的原版(2,921 列), 不是本頁其他地方用的那台測試機。測試機那一份的薪水值域是 0–255、 出現過 149 種值、最常見的是 0 —— 跟下面這張表對不上是正常的,那是兩份不同的名單。 下面 46 欄表第 40 列寫的 0–255/149 種就是測試機的值。
| 量到的(剛安裝好的原版) | 結果 |
|---|---|
| 值域 | 0 – 251 |
| 出現過幾種不同的值 | 133 |
| 最常見的值 | 2(1,274 人) |
| 次常見 | 3(545 人)· 4(532 人) |
2,921 人裡有 2,351 人擠在 2、3、4 這三個值上。 換句話說:絕大多數球員領的是同一個底薪級距, 真正有差別的是剩下那幾百人。
兩道旁證,說明這一欄真的是薪水
一、跟星等單調相關。把球員按 starpower(0–4)分組算薪水中位數
(同一份剛安裝好的原版):
| starpower | 人數 | 薪水中位數 |
|---|---|---|
| 0 | 992 | 2 |
| 1 | 730 | 3 |
| 2 | 651 | 3 |
| 3 | 359 | 4 |
| 4 | 189 | 15 |
二、排在最前面的就是那年最貴的那幾個人。 薪水欄由高排到低,前幾名分別是 251、199、188、179、170、169 —— 名字對得上當時公認最高薪的球星。 (第四名那個對不上,那是另一個故事: 名單裡有一個對不上任何東西的異常值)
⭐ 2026-08-28:身高與體重的換算,拿到外部佐證了
同一份 MVPedit 說明書還寫了兩句話:
Height is stored in inches. Players range from 5'6" to 7'0".
Weight ranges from 150 to 300 pounds.
拿剛安裝好的原版對一次(原版沒有那 25 個空殼列 —— 2,921 列全部是真的球員;那 25 列是本站測試機那份名冊才有的東西,理由見下):
| 真實球員的值域 | 加上位移 | 說明書說的 | |
|---|---|---|---|
| 身高 | 18 – 35 | +48 → 66–83 英吋 = 5'6"–6'11" | 5'6" 到 7'0" ✅ 下限完全吻合 |
| 體重 | 50 – 190 | +100 → 150–290 磅 | 150 到 300 磅 ✅ 下限完全吻合 |
位移量是被唯一釘死的:換成 +110,體重下限會變成 160 磅, 對不上說明書寫的 150。而且低於下限的值是 0 人, 高於說明書上限的也是 0 人 —— 資料正好占滿說明書宣告的範圍。
說明書的上限(7'0" / 300 磅)是編輯器允許你填到哪, 不是名單裡真的有人那麼高那麼重。原版最高 6'11"、最重 290 磅。
那「值域從 0 開始」是怎麼回事:25 個空殼列
本頁下面那張欄位表寫身高 0–35、體重 0–190,
那是本站測試機量的(3,247 列)。把 0 那一群挑出來看:
| 條件 | 列數 |
|---|---|
| 體重 = 0 | 25 |
| 身高 = 0 | 25 |
| 骨架 = 0 | 25 |
| 姓與名兩欄都空白 | 25 |
| 四組是不是同一批 | 完全相同 |
隨便挑一列來看,除了 hidden = 1 之外每一欄都是 0。
那是遊戲留給「創造球員」的空位,不是球員。
算值域的時候要先把它們拿掉,不然身高會變成 4'0"、體重會變成 100 磅。
⭐ 2026-08-28:點數怎麼算解開了,答案在一支 2006 年編輯器的說明書裡
本站原本寫「沒解開」,理由是從遊戲自己的文字檔找不到乘數。
那個判斷沒有錯,但找錯地方了 ——
答案不在遊戲裡,在當年那批編輯器的說明書裡。
MVPedit 的說明檔直接寫著:
Salary is based on points. Starting at 100, points occur in
intervals of 33 - 133, 166, 199, 232, etc. ...
The maximum salary is 8515.
也就是 點數 = 100 + 33 × 這一欄的值。三件事互相對得上:
| 檢查 | 結果 |
|---|---|
| 說明書說上限是 8515 | 100 + 255×33 = 8515 ✅ 一個位元組剛好用滿 |
| 說明書舉例「166 點」 | 對應欄位值 2 ——而本站量到最多人用的就是 2(1,274 人)✅ |
| 本站實測值域 | 0–251,落在 0–255 之內 ✅ |
所以要改薪水,直接改這一欄的值,每 +1 就是 +33 點。
但「一點等於多少錢」只有一句話撐著 推論
同一份說明書只舉了一個例子:「想讓某人兩年拿 $1,000,000,那就是每年 166 點」。 照這句反推,一點大約 $3,000(100 點 = $300,000, 正好是那個年代大聯盟的最低年薪)。
本站採這個讀法,理由是另一種讀法會推出不可能的數字: 如果「$1,000,000」是指每年而不是兩年合計,一點就變成 $6,024, 上限 8515 點會變成 年薪 $5,100 萬 —— 那個年代沒有這種合約。
拿剛安裝好的原版名單套進去(1 點 = $3,000):
| 球員 | 欄位值 | 點數 | 推算年薪 |
|---|---|---|---|
| Alex Rodriguez | 251 | 8,383 | $25,149,000 |
| Manny Ramirez | 199 | 6,667 | $20,001,000 |
| Derek Jeter | 188 | 6,304 | $18,912,000 |
| Jon Dowd | 179 | 6,007 | $18,021,000 |
| Randy Johnson | 159 | 5,347 | $16,041,000 |
| 最多人用的欄位值 2(1,274 人)換算是 $498,000。 表中第五列的 Randy Johnson(159)在這份名單裡是並列第 9、不是第 5 —— 中間還有 170(一人)與 169(三人並列)。 | |||
名次與量級都對得上那個年代。第四名那位是本站另外寫過的 一個對不上任何東西的異常值 —— 本站沒有主張他是誰的替身,那一頁把證據攤開讓你自己判斷。
不管怎樣,幣值這一段仍然是推論: 直接證據只有說明書那一句話,本站沒有第二個獨立來源。 要改薪水的話,改欄位值就好,不必先決定一點等於多少錢。
⚠️ 本站試過做一個不依賴外部資料的檢定 (「算出來的錢應該貼著整數合約金額」),結果證明那個檢定沒有用: 薪水欄的間隔固定是 33 點,換算後永遠等距, 離整數格線的距離不管乘數是多少都差不多 —— $3,000 得 0.261,隨機亂數的中位數是 0.254。 一個在答案為真時也不會亮的指標,測出來的 0 是它自己的性質,不是資料的性質。 這條教訓本站今天記了三次。
順帶一個量到的小東西:球團資料檔 org.dat 的
org_budget 欄,34 個球團裡有 30 個是同一個值、剩下 4 個是 0。
那個「同一個值」在剛安裝好的原版是 100000,
本站測試機那一份是 65535(兩份都是 30 + 4 的分布)。
看起來是統一的起始值,遊戲進行中才會變。
未實機驗證
attrib.dat —— 46 欄
「種類」欄的判準:值域小、選項少的算選單型(存的是代號), 其餘算數值型。代號的意思見代號對照表。
| # | 欄位名 | 是什麼 | 實測值域 | 幾種值 |
|---|---|---|---|---|
| 0 | first_name | 名 | 文字 | 1,094 |
| 1 | last_name | 姓 | 文字 | 2,249 |
| 2 | jerseynum | 背號 | 0–99 | 99 |
| 3 | bats | 打擊左右 | 0–2 | 3 |
| 4 | throws | 投球左右 | 0–1 | 2 |
| 5 | primary_position | 主守位 | 0–10 | 10 |
| 6 | secondary_position | 副守位 | 0–13 | 14 |
| 7 | height | 身高(+48 = 英吋) | 0–35 | 18 |
| 8 | weight | 體重 | 0–190 | 117 |
| 9 | boneprofile | 骨架 | 0–36 | 13 |
| 10 | face | 臉皮號碼 | 0–915 | 715 |
| 11 | face2004style | 用 2004 年的臉 | 0–1 | 2 |
| 12 | hairstyle | 髮型 | 0–9 | 10 |
| 13 | haircolour | 髮色 | 0–5 | 6 |
| 14 | facialhair | 鬍子 | 0–7 | 8 |
| 15 | bodytype | 體型 | 0–2 | 3 |
| 16 | audioid | 本人號碼(大頭照+語音) | 0–25028 | 1,836 |
| 17 | photo | 開關,不是編號 | 0–2 | 3 |
| 18 | platediscipline | 選球 | 0–13 | 14 |
| 19 | bunting | 短打 | 0–15 | 16 |
| 20 | stealing_aggressive | 盜壘積極度 | 0–15 | 16 |
| 21 | baserunning | 跑壘 | 0–13 | 14 |
| 22 | speed | 速度(有教學) | 0–97 | 88 |
| 23 | fielding | 守備 | 0–50 | 17 |
| 24 | range | 守備範圍 | 0–13 | 14 |
| 25 | throwstrength | 臂力 | 0–15 | 15 |
| 26 | throwaccuracy | 傳球準度 | 0–14 | 13 |
| 27 | durability | 耐用度 | 0–15 | 14 |
| 28 | battingstance | 打擊姿勢 | 0–65 | 62 |
| 29 | swingtype | 揮棒類型 | 0–1 | 2 |
| 30 | batcolour | 球棒顏色 | 0–7 | 8 |
| 31 | batglove | 打擊手套 | 0–1 | 2 |
| 32 | wristband | 護腕 | 0–6 | 7 |
| 33 | elbowguard | 護肘 | 0–3 | 4 |
| 34 | shinguard | 護脛 | 0–2 | 3 |
| 35 | socks | 襪子 | 0–2 | 3 |
| 36 | catchermask | 捕手面罩 | 0–1 | 2 |
| 37 | fieldglovecolour | 手套顏色 | 0–6 | 7 |
| 38 | skin_tone | 膚色 | 0–15 | 16 |
| 39 | ditty | 出場音樂曲風 | 0–6 | 7 |
| 40 | salary | 薪資 | 0–255 | 149 |
| 41 | contract_length | 合約年限 | 0–7 | 8 |
| 42 | starpower | 明星等級 | 0–4 | 5 |
| 43 | topprospect | 潛力新秀 | 0–1 | 2 |
| 44 | hidden | 隱藏 | 0–1 | 2 |
| 45 | birthday | 生日(1947-12-31 起算的天數) | 0–20543 | 2,285 |
欄位名在檔案裡都帶 playerattrib_ 前綴,上表為了好讀省略了。
⚠️ 上表的欄號與值域量自本站測試機那份名冊,剛安裝好的原版兩者都不一樣 ——
欄號見下面欄號會整個位移那一節,膚色值域見
代號對照表(原版只有 0–10)。
pitcher.dat —— 29 欄
這個檔的結構自己會驗算:
2(姓名) + 1(續航力) + 1(牽制) + 4(快速球) + 20(第 2~5 球各 5 欄) + 1(投球姿勢) = 29
快速球只有 4 欄,其他球種都是 5 欄
「變化軌跡」那一欄的 8 個值是方向,這一半本站量到了 —— 它存的是球往哪個方向跑,而且左投右投互為鏡像 (右投的滑球填 6、左投填 2,填錯邊球會朝反方向跑)。 至於這八個值各自叫什麼名字、對到鐘面第幾點,那一半是社群檔案說的,本站佐證不了。 完整推導、窮舉對照組與強度分界見代號對照表。
第 2 到第 5 球每一球都有球種、尾勁、變化軌跡、控球、球速五欄。 快速球少了「球種」那一欄 —— 因為第一球就是快速球,不需要再記型別。
這就是為什麼總數是 29 不是 30。
| # | 欄位名 | 是什麼 | 實測值域 | 沒有這一球的 |
|---|---|---|---|---|
| 0–1 | first_name / last_name | 姓名 | 文字 | — |
| 2 | stamina | 續航力 | 0–92 | — |
| 3 | pickoff | 牽制 | 0–36 | — |
| 4–7 | fastball_* | 快速球(尾勁/變化軌跡/控球/球速) | 0–100 | 0 |
| 8–12 | pitch2_* | 第二球(含球種) | 0–100 | 19 |
| 13–17 | pitch3_* | 第三球 | 0–100 | 101 |
| 18–22 | pitch4_* | 第四球 | 0–100 | 674 |
| 23–27 | pitch5_* | 第五球 | 1–98 | 1,348 |
| 28 | pitcher_delivery | 投球姿勢 | 0–58 | — |
「沒有這一球」那一欄,檔案裡填的是 - 這個符號。
快速球那四欄一次都沒有出現過 - ——
每個投手至少有一種球路。
上表的人數已經扣掉那 25 列空白名單空位
(它們四個球種群組全部是 -)。不扣的話數字會多出 25 到 44。
⚠️ 最重要的一節:欄號在不同名冊之間會整個位移
上面那張 46 欄的表,是本站測試機的順序 —— 也就是社群名冊那一種
(skin_tone 在第 38 欄)。
剛安裝好的原版順序不一樣。
本站拿一份 2009 年的社群名冊跟原版逐欄比對,兩邊都是 46 欄、欄位名一個不多一個不少, 可是:
| 比對結果 | 欄數 |
|---|---|
| 同編號、同意義 | 19 |
| 同編號、不同意義 | 27 |
46 欄裡有 27 欄對不上。原因只有一個:
skin_tone 這一欄從第 12 位搬到了第 38 位,
中間所有欄位跟著往前移一格。
| 編號 | 原版 | 2009 年那份名冊 |
|---|---|---|
| 12 | skin_tone | hairstyle |
| 13 | hairstyle | haircolour |
| 14 | haircolour | facialhair |
| 15 | facialhair | bodytype |
| 16 | bodytype | audioid |
| 17 | audioid | photo |
| 18 | photo | platediscipline |
| 19 | platediscipline | bunting |
| 20 | bunting | stealing_aggressive |
| 21 | stealing_aggressive | baserunning |
| 22 | baserunning | speed |
| 23 | speed | fielding |
| 24 | fielding | range |
| 25 | range | throwstrength |
| 26 | throwstrength | throwaccuracy |
| 27 | throwaccuracy | durability |
| 28 | durability | battingstance |
| 29 | battingstance | swingtype |
| 30 | swingtype | batcolour |
| 31 | batcolour | batglove |
| 32 | batglove | wristband |
| 33 | wristband | elbowguard |
| 34 | elbowguard | shinguard |
| 35 | shinguard | socks |
| 36 | socks | catchermask |
| 37 | catchermask | fieldglovecolour |
| 38 | fieldglovecolour | skin_tone |
前綴 playerattrib_ 已省略。編號 0–11 與 39–45 兩邊一樣。
這會怎麼咬你
看那三個標色的:原版的第 29 欄是打擊姿勢, 2009 那份名冊的第 29 欄是揮棒型態。
如果你照著本站這張表去改「第 29 欄」,而你的遊戲裝的是模組名冊, 你改到的是另一個欄位。 不會報錯、不會壞檔 —— 只是那個球員的揮棒型態變成一個 打擊姿勢的編號,而打擊姿勢完全沒動。
正確做法只有一個:讀那個檔自己的第一行。
每一個 .dat 的第一行就是它自己的欄位名清單,
那才是你手上這一份的真相。
python -c "print(open(r'你的遊戲資料夾\data\database\attrib.dat').readline())"
本站的換姿勢腳本 就是這樣做的 —— 它不記欄號,每次都從表頭找欄位名。 本站在寫這一節的時候自己踩過一次:拿原版的欄號去讀模組名冊, 得到一整排 0,差點以為站上寫錯了。
改之前要知道的事
本站教改的欄位就那幾個,這是有理由的
改球員速度那一課只教
speed 這一欄 —— 它看得出範圍、改了效果直接,
而且是本站唯一實際改過、進遊戲確認過的能力欄位。
投手的 fastball_control 與其他幾個 control
在統計上是同一個形狀、很可能也可以改,但本站未實機驗證,
所以那一課的腳本連寫都不讓你寫。
另外成績換算成能力值那一課
會寫 rhattrib.dat/lhattrib.dat 的
lrattrib_power 與 pitcher.dat 的
pitchattrib_stamina(寫完自己讀回來逐項比對,
但那一課也沒有實機確認改完在遊戲裡的手感)。
除了這幾欄,其他欄位本站沒有一欄一欄實測過改動的後果。
未驗
特別是 face、audioid 這種指向別的檔案的欄位 ——
改壞了不會當場報錯,是進遊戲才發現不對。
怎麼自己產一份
這張表不需要本站的工具。用記事本打開 data\database\attrib.dat,
第一行就是完整欄位表:
0 first_name,1 last_name,2 playerattrib_jerseynum,3 playerattrib_bats,...
每一格資料也都帶著自己的欄位編號當前綴,所以欄位順序可以打亂,遊戲照樣讀得懂 —— 在同一個檔裡,算數的是格子上寫的那個編號,不是它排第幾格。 但編號本身沒有固定的意義:哪個編號是哪個欄位,由第一行的表頭決定, 所以跨名冊要看的是名字 (見球隊數量上限那頁「遊戲是照名字認欄位的」, 以及本頁欄號會整個位移那一節)。 詳見球員資料檔的真相。
⚠️ 欄位「編號」會因名冊而異,不要照抄別人寫的欄號
既然順序可以打亂,那不同名冊就真的會不一樣。實測本站測試機與剛安裝好的原版: 46 個欄位裡有 27 個編號不同。
| 欄位名 | 本站測試機 | 剛安裝好的原版 |
|---|---|---|
| playerattrib_speed | 22 | 23 |
| playerattrib_audioid | 16 | 17 |
| playerattrib_photo | 17 | 18 |
| playerattrib_battingstance | 28 | 29 |
| playerattrib_skin_tone | 38 | 12 |
根源就是最後那一列:原版把 skin_tone 排在第 12 欄,
這台的名冊把它移到第 38 欄,12 之後的每一欄都往前挪了一格。
所以:認名字,不要認編號。
站上多數頁面寫的欄號是本站測試機的值,但速查頁的
全部 18 個檔的完整欄位表那一份
attrib.dat 列的是剛安裝好的原版順序(兩者有 27 格不同)——
所以連站上的欄號都不要照抄,你打開自己的 attrib.dat 第一行,自己數一次才準。
本站的腳本從 2026-08-25 起全部改成執行時從表頭解析,不再寫死編號。
兩條可以拿來自動檢查的規則
改球員能力的時候,有兩條規則值得寫進腳本 —— 它們在剛安裝好的原版裡零例外。
1 · 兩組百分比各自加起來一定是 100
lhattrib.dat 與 rhattrib.dat(面對左投/右投的打擊資料)
各有兩組百分比欄位:
| 那一組 | 欄位 | 意思 |
|---|---|---|
| 擊球落點 | lf_pct + cf_pct + rf_pct | 左外野/中外野/右外野的比例 |
| 擊球型態 | hr_pct + fb_pct + ld_pct + gb_pct | 全壘打/高飛/平飛/滾地的比例 |
剛安裝好的原版:兩個檔各 2,921 列,兩組總和全部剛好 100,一個例外都沒有。
所以改一格就要把同組其他格補回來 —— 把某人的右外野比例調高,左外野或中外野就得降下來。
但遊戲不會擋你
拿社群名冊量同一件事,結果差很多:
| 名冊 | 列數 | 落點三欄 = 100 | 擊球四欄 = 100 |
|---|---|---|---|
| 剛安裝好的原版 | 2,921 | 100.0% | 100.0% |
| 一份亞洲球員名冊 | 3,224 | 100.0% | 97.1% |
| 一份台灣名冊 | 3,208 | 89.0% | 96.6% |
| 本站測試機 | 3,247 | 99.2% | 94.3% |
那些名冊照樣進得去遊戲。所以這是 EA 自己的資料紀律,不是遊戲強制的規則。 總和不是 100 會怎麼樣(比例被重新正規化?還是照數字用?), 未解 本站沒有驗過。
但這條規則很適合當自動檢查: 你改完之後跑一次,總和不是 100 的那幾列,多半是打錯字或算錯。
2 · photo = 2 的人,臉皮一定是通用臉
這是一條單向的規則:
| 名冊 | photo=2 的人 | 臉皮落在 901–915 |
|---|---|---|
| 剛安裝好的原版 | 1,620 | 1,620(100%) |
| 本站測試機 | 141 | 141(100%) |
反過來不成立:原版 photo=1 的 1,301 人裡,
也有 836 人(64.3%)用 901–915 的通用臉。
所以「用通用臉」不代表 photo 是 2。
做了專屬臉皮的人要注意:如果那位球員的 photo 是 2,
就算你把 face 改成自己的編號,也要一併確認 photo
——見換臉那一課。
兩份台灣名冊有意思的地方:它們把所有人的 photo 都設成 1,
整份名冊一個 2 都沒有。
📌 重點整理
- 一句話
attrib.dat46 欄、pitcher.dat29 欄,格式不會變但欄號會變,所以永遠認欄位名,不要認欄號。 - 最重要的一節 46 個欄位裡有 27 個在剛安裝好的原版與社群名冊之間位置不同,根源是
skin_tone從第 12 欄搬到第 38 欄,中間每一欄跟著往前移一格。原版第 29 欄是打擊姿勢、2009 那份名冊第 29 欄是揮棒型態,照錯的欄號去改不會報錯也不會壞檔,只是你改到了另一個欄位。正解只有一個:讀那個檔自己的第一行。本站寫這一節時自己也踩過一次,拿原版欄號去讀模組名冊,得到一整排 0。 - 兩個編碼很怪的欄位解開了 身高 = 欄位值 + 48 英吋(五位球員差都是 48,值域 18–35 換算成 5 呎 6 吋到 6 呎 11 吋,再加一道旁證:分組平均體重從 19 到 31 完全單調遞增);生日 = 1947-12-31 起算的天數(四位球員反推出同一天,值域 9,196–20,543 換算成 1973 年 3 月到 2004 年 3 月出生)。
- 訂正了一個自己寫的「沒解開」 薪水點數的公式本站原本寫沒解開,理由是從遊戲自己的文字檔找不到乘數。那個判斷沒有錯,只是找錯了地方:答案在當年那批編輯器的說明書裡,
MVPedit直接寫著點數 = 100 + 33 × 這一欄的值。三件事互相對得上:上限100 + 255×33 = 8515剛好把一個位元組用滿、說明書舉例的 166 點對應欄位值 2、而 2 正是本站在剛安裝好的原版裡量到最多人用的值(1,274 人)。要改薪水就直接改這一欄,每 +1 就是 +33 點。 - 算值域之前先扣掉 25 個空殼列 本站測試機的兩個資料檔各有 25 列姓名兩欄空白,除了
hidden= 1 之外每一欄都是 0,那是留給「創造球員」的空位不是球員。不扣掉的話身高會變成 4 呎 0 吋、體重會變成 100 磅(剛安裝好的原版沒有這種空殼列,不必扣)。扣掉之後,身高 18–35(+48)與體重 50–190(+100)全部落在說明書宣告的 5'6"–7'0" 與 150–300 磅之內,下限完全吻合,低於下限 0 人、高於上限 0 人;上限那一端是編輯器允許你填到哪,原版實際上最高 6 呎 11 吋、最重 290 磅。 - 兩條可以寫進腳本的自動檢查 擊球落點三欄與擊球型態四欄各自加起來要是 100,剛安裝好的原版
lhattrib.dat與rhattrib.dat各 2,921 列 100% 成立;photo= 2 的人臉皮一定落在 901–915(原版 1,620/1,620、測試機 141/141),但反過來不成立,原版photo= 1 的人也有 64.3% 在用通用臉。社群名冊不守第一條照樣進得去遊戲,所以那是 EA 自己的資料紀律,不是遊戲強制的規則。 pitcher.dat自己會驗算 2(姓名)+ 1(續航力)+ 1(牽制)+ 4(快速球)+ 20(第 2 到第 5 球各 5 欄)+ 1(投球姿勢)= 29。快速球少「球種」那一欄,因為第一球本來就是快速球;而且那四欄一次都沒出現過代表「沒有這一球」的-,每個投手至少有一種球路。- 本站沒驗的 生日第五個樣本 Mike Trout 反推出 1948-01-31,差了一個月,四比一之下本站採 1947-12-31 但沒有再往下追;「一點等於多少錢」只有說明書那一句話撐著,是推論不是量測;
org.dat的org_budget34 個球團裡 30 個是同一個值、4 個是 0(原版那個值是 100000、本站測試機是 65535),未實機驗證;百分比總和不是 100 遊戲會怎麼處理沒有驗;本站實際改過並進遊戲確認過的能力欄位只有speed一欄(投手的control只是統計形狀相同,沒有實機驗證,改球員速度那一課的腳本也不讓你寫);成績換算成能力值那一課另外寫過lrattrib_power(左右兩個檔)與pitchattrib_stamina,寫完讀回來逐項比對,但同樣沒有實機確認手感。其他欄位沒有一欄一欄實測過改動的後果。另外附一條教訓:本站試過一個不依賴外部資料的幣值檢定,結果證明那個檢定沒有用,$3,000 得 0.261、隨機亂數中位數 0.254,一個在答案為真時也不會亮的指標,測出來的 0 是它自己的性質。