教學 › 一次更新整個年度
一次更新整個年度
名冊、能力值、臉、大頭照、語音、開機畫面、賽程 —— 七樣東西各自有課,這一課不教任何新東西。 它只回答那七堂課都沒回答的四個問題:先做哪一件、做完怎麼確認真的成了、 卡住要回哪一堂、全部做完怎麼一次還原。
難度
★★☆ 每一堂都不難,難的是順序
時間
約 113 分鐘(八堂加打包)
可以還原嗎
可以,每一堂各一行
🛟 動手之前:先完整備份整個遊戲資料夾
把整個遊戲資料夾複製一份到別的地方,
包括裡面存放紀錄的資料夾。紀錄也可能放在遊戲資料夾外面:
「文件」裡的 Documents\MVP Baseball 2005,那一個要另外複製。
怎麼整包複製、紀錄(王朝、名單、設定)的兩個位置各在哪、找不到怎麼找: 看備份與還原 SOP 的「整包複製」。
⚡ 只想趕快做完?照這個順序,每一步點進那一課(要先裝好 Python,沒裝的看第 0 課操作五)
- 先把整個遊戲資料夾複製一份(做法看上面 🛟 那張卡,這一步不能跳),
再把遊戲資料夾和那份複本一起交給檢查腳本,【3】那一段列出的每一個檔都要是「內容一致」
Windows:
python -I mvp_check_backup.py "<遊戲資料夾>" "<備份資料夾>"Mac / Linux:
python3 -I mvp_check_backup.py "<遊戲資料夾>" "<備份資料夾>"這支檢查腳本只看幾個核心檔,這一輪要動的大頭照、開機畫面、語音檔它都看不到 —— 真正的保險是那一份整包複本。
- 名冊:整批匯出成 CSV,用 Excel 改完再匯回去
Windows:
python -I mvp_player.py "<遊戲資料夾>" --export players.csvMac / Linux:
python3 -I mvp_player.py "<遊戲資料夾>" --export players.csvWindows:
python -I mvp_player.py "<遊戲資料夾>" --import players.csv --applyMac / Linux:
python3 -I mvp_player.py "<遊戲資料夾>" --import players.csv --apply - 能力值:用真實成績算,不要用手感填
Windows:
python -I mvp_ratings.py --convert stats.csv --out ratings.csvMac / Linux:
python3 -I mvp_ratings.py --convert stats.csv --out ratings.csvWindows:
python -I mvp_ratings.py --write "<遊戲資料夾>" ratings.csv --applyMac / Linux:
python3 -I mvp_ratings.py --write "<遊戲資料夾>" ratings.csv --apply - 臉:指到一張現成的臉
(要做全新的臉,改看做一張全新的臉)
Windows:
python -I mvp_swap_face.py "<遊戲資料夾>" --find OhtaniMac / Linux:
python3 -I mvp_swap_face.py "<遊戲資料夾>" --find Ohtani這一行只查不改;真正換的那一步照那一課的速解做。
- 大頭照:先查編號,再換圖
Windows:
python -I mvp_swap_portrait.py "<遊戲資料夾>" --find OhtaniMac / Linux:
python3 -I mvp_swap_portrait.py "<遊戲資料夾>" --find Ohtani這一行只查不改;真正換的那一步照那一課的速解做。
- 語音:把播報員唸的名字換掉
Windows:
python -I mvp_audio.py "<聲音檔>" --listMac / Linux:
python3 -I mvp_audio.py "<聲音檔>" --list這一行只查不改;真正換的那一步照那一課的速解做。
- 開機畫面與賽程年份
Windows:
python -I mvp_swap_screen.py "<遊戲資料夾>" --infoMac / Linux:
python3 -I mvp_swap_screen.py "<遊戲資料夾>" --info上面這一行只查不改,真正換開機畫面照那一課的速解做;下面賽程這一行就是真的改。
Windows:
python -I mvp_shift_schedule_year.py "<路徑>/schedule.big" 2040 --applyMac / Linux:
python3 -I mvp_shift_schedule_year.py "<路徑>/schedule.big" 2040 --apply⚠️ 這一行改的是賽程檔
schedule.big,不會讓新王朝換年份:王朝模式的起始年份由執行檔決定。想讓新王朝從今年開始,是另一個選配,用mvp_modernize.py的--dynasty-year clock(或指定一個年份),指令與限制看讓王朝年份跟著電腦日期走,它跟賽程檔的關係寫在階段表標「+」的選配列。 - 列出這一輪改了哪些檔(要打包給別人,看那一課)
Windows:
python -I mvp_pack.py "<遊戲資料夾>" --scanMac / Linux:
python3 -I mvp_pack.py "<遊戲資料夾>" --scan
會動遊戲檔的那幾支都是不加 --apply 就只預覽、
第一次寫入前自動備份、--restore 可以還原
(第 3 步那一支是 --restore-write;每一支各一行,要倒著跑,
清單在做到一半想全部退回去)。
第 1 步的檢查腳本、以及第 8 步那一行 --scan 是全程唯讀的,
不寫任何檔,也就沒有 --apply 要加、沒有東西要還原。
每一條都給了兩種寫法:Windows 打 python、Mac 與 Linux 打 python3,
挑你那台的那一行複製就好。
想知道為什麼是這個順序,往下讀;只想複習,跳到📌 重點整理。
為什麼需要這一課
本站的教學總覽列了近四十堂課,其中八堂加起來剛好可以把整個遊戲換成新的一年。 但把八堂課擺在一起,會冒出三個每一堂自己都不會提到的問題:
- 順序不是隨便的。 大頭照、臉、語音都要先知道「這個人是誰」—— 那個身分寫在名冊裡。名冊還沒改就先換大頭照,你換的是上一個球員的照片。
- 八個備份不等於一個備份。 每一支腳本各自備份自己動的檔, 備份檔名也各不相同。做到第六堂想整個退回去的時候, 你需要知道每一堂的還原指令,而且要照相反的順序跑。
- 「做完了」跟「真的成了」是兩件事。 腳本說寫入成功, 不代表你進遊戲會看到。每一階段各有一個便宜的確認方式。
依賴關係:哪些一定要先做
八堂裡只有兩條真正的先後關係,其他都可以換順序:
| 先 | 後 | 為什麼 |
|---|---|---|
| 備份 | 全部 | 唯一絕對不能顛倒的一條。備份是唯一一個「做錯了還救得回來」的保險 |
| 名冊 | 能力值 · 臉 · 大頭照 · 語音 | 這四樣都是對著某一位球員做的。名冊決定第幾列是誰、 他的臉編號與大頭照編號寫在哪一欄。名冊一改,這些對應全部跟著變 |
| 開機畫面與賽程年份不依賴任何東西 —— 它們不看名冊,隨時可以做,卡在別堂的時候可以先做這兩堂換個心情 | ||
八個階段:動什麼、怎麼驗、怎麼退
每一行的「做完怎麼驗」都是不必進遊戲就能確認的方式 —— 進遊戲看是最終驗證,但一輪要好幾分鐘,不適合每一步都做。
| 第 | 做什麼 | 動到的檔 | 時間 | 做完怎麼驗(不進遊戲) |
|---|---|---|---|---|
| 1 | 備份與還原 SOP | 不動任何檔(只檢查) | 10 分 | 把遊戲資料夾和你那份整包複本一起交給檢查腳本, 【3】那一段列出的每一個檔都要是「內容一致」。它只看幾個核心檔,大頭照、開機畫面、語音檔它看不到 |
| 2 | 把一位球員改成你想要的球員 (整批用 --export / --import) |
data/database/attrib.dat |
10 分 | 再匯出一次 CSV,用文字編輯器搜尋你改的名字。找得到就是寫進去了 |
| 3 | 把真實成績換算成能力值 | attrib.dat · rhattrib.dat ·
lhattrib.dat · pitcher.dat |
15 分 | 腳本寫完會自己讀回來逐項比對並印出結果。 ⚠️ 它會拒絕算不準的欄位,那不是壞掉 |
| 4 | 幫球員換一張臉 要做全新的臉就改上 做一張全新的臉,多 30 分 |
data/database/attrib.dat |
10 分 | --find 再查一次那位球員,看臉編號是不是你設的那個 |
| 5 | 換球員大頭照 | data/frontend/portrait.big |
20 分 | --export 把剛換進去的那張匯出來,用看圖軟體開起來看 |
| 6 | 換掉遊戲的聲音 | 語音檔(--list 會告訴你是哪一個) |
20 分 | --export 成 WAV 放來聽。這是八堂裡唯一能用耳朵驗的 |
| 7 | 換掉開機畫面 | data/frontend/splash.big ·
suonly.big · sushared.big |
15 分 | --export 匯出成 PNG 打開看 |
| 8 | 把賽程換到任何年份 | schedule.big |
3 分 | 不加 --apply 再跑一次,預覽會印出改完之後的年份。
這一步改的是賽程檔,不決定新王朝顯示哪一年(見下面的選配列) |
| + | 讓新王朝從今年開始(選配) 用 mvp_modernize.py 的 --dynasty-year clock,或指定一個年份 --dynasty-year |
mvp2005.exe(執行檔,不是 schedule.big) |
不算進 113 分,時間看那一課 | 不加 --apply 先預覽;寫入後工具自己複驗「改動的位元組剛好是預期那 N 個,其他一個都沒動 ✅」,
再跑一次唯讀檢查,用 clock 的話會多一行「王朝起始年份:跟著電腦時鐘走(…)✅」。
它跟 schedule.big 的關係:王朝一建立,遊戲就把賽程平移到執行檔設定的年份,所以賽程檔不用另外換;
其他模式有沒有一樣,本站沒測。用 clock 時老闆模式維持 2005 起算;指定年份的話老闆模式不會跟著變長,起始年份越晚能打的季數越少(見那一課) |
| + | 把你改好的東西打包成一包 | 不動遊戲(只讀) | 10 分 | --scan 會列出你到底改了哪些檔。順便當成這一輪的清單 |
📋 第 8 步那個 --scan 是這一課最有用的一行
它掃出來的清單就是「你這一年到底動了什麼」。 不用自己記,也不用怕漏 —— 每支工具留下的備份檔本身就是紀錄。 做完整年之後跑一次,把輸出留起來,明年就知道去年改到哪。
先備份哪些檔
八堂加起來會動到下面這些。每一支腳本第一次寫入前都會自己備份, 所以你不必手動複製 —— 但你應該知道清單長什麼樣子, 因為「腳本的備份」跟「你自己的整包備份」是兩層保險:
| 檔案 | 哪幾堂會動它 |
|---|---|
data/database/attrib.dat |
四堂:名冊 · 能力值 · 臉 · 大頭照(查編號時只讀) |
data/database/rhattrib.dat · lhattrib.dat ·
pitcher.dat | 能力值 |
data/frontend/portrait.big | 大頭照 |
data/frontend/splash.big · suonly.big ·
sushared.big | 開機畫面 |
data/models.big | 做全新的臉(選配那一堂才會動) |
data/database/schedule.big | 賽程年份 |
mvp2005.exe | 讓新王朝從今年開始(選配,--dynasty-year)。工具寫入前會自己備份成 mvp2005.exe.modernizebak |
| 語音檔 | 語音(--list 會告訴你是哪一個) |
attrib.dat 被四堂共用,是這一輪最該小心的一個檔。
好消息是會寫它的那三堂(名冊、能力值、臉)各自留下不同檔名的備份,彼此不會蓋掉對方;
但還原要倒著來,見下面。
做到一半想全部退回去
attrib.dat 被三堂寫過(名冊、能力值、臉),每一支的還原都是把整份名冊退回
它第一次動手之前的樣子,所以要倒著跑:你最後做的那一堂先還原。
順序反了,前面那一堂的修改會被後面那一堂的備份帶回來,而且每一支都照樣說還原成功,不會提醒你。
下面已照這一課的順序倒過來排;如果你不是照這一課的順序做的,就照你自己做的順序倒過來(每一支以你第一次用它的時間為準)。
只跑你真的做過的那幾行:
本站用一份四位球員的測試名冊實測過:名冊、能力值、臉三支都寫過之後,照做的順序還原, 三支都印還原成功,名冊卻還留著名冊與能力值那兩堂的修改;倒著跑,才逐位元組回到動手之前。
Windows:
python -I mvp_shift_schedule_year.py "<路徑>/schedule.big" --restore
Mac / Linux:
python3 -I mvp_shift_schedule_year.py "<路徑>/schedule.big" --restore
下面這一組只有做了「讓新王朝從今年開始」那個選配才需要(還原 mvp2005.exe)。它只動執行檔,跟其他幾堂的先後沒有關係。
Windows:
python -I mvp_modernize.py "<遊戲資料夾>/mvp2005.exe" --restore
Mac / Linux:
python3 -I mvp_modernize.py "<遊戲資料夾>/mvp2005.exe" --restore
Windows:
python -I mvp_swap_screen.py "<遊戲資料夾>" --restore
Mac / Linux:
python3 -I mvp_swap_screen.py "<遊戲資料夾>" --restore
Windows:
python -I mvp_audio.py "<聲音檔>" --restore
Mac / Linux:
python3 -I mvp_audio.py "<聲音檔>" --restore
Windows:
python -I mvp_swap_portrait.py "<遊戲資料夾>" --restore
Mac / Linux:
python3 -I mvp_swap_portrait.py "<遊戲資料夾>" --restore
Windows:
python -I mvp_swap_face.py "<遊戲資料夾>" --restore
Mac / Linux:
python3 -I mvp_swap_face.py "<遊戲資料夾>" --restore
下面這一組只有做了「做一張全新的臉」那個選配才需要(還原 models.big)。
Windows:
python -I mvp_new_face.py "<遊戲資料夾>" --restore
Mac / Linux:
python3 -I mvp_new_face.py "<遊戲資料夾>" --restore
Windows:
python -I mvp_ratings.py --restore-write "<遊戲資料夾>"
Mac / Linux:
python3 -I mvp_ratings.py --restore-write "<遊戲資料夾>"
Windows:
python -I mvp_player.py "<遊戲資料夾>" --restore
Mac / Linux:
python3 -I mvp_player.py "<遊戲資料夾>" --restore
⚠️ 注意能力值那一堂用的是 --restore-write 不是 --restore,
因為它另外有一個唯讀的分析模式,兩個要分得開。
這一課沒有自己的腳本
上面每一行指令都是別堂課的工具,這一頁一個字都沒有改寫它們。 這樣做的理由是:工具改版的時候只會有一個地方要改。 如果你發現這一頁的某一行跟那一堂寫的不一樣, 以那一堂為準,並且那是值得回報的東西。
本站在這件事上做不到的
- 沒有「一鍵更新整年」的按鈕。 八堂還是要一堂一堂跑。 本站沒有把它們串成一支腳本,因為每一堂中間都需要你自己判斷 (這張圖好不好看、這個能力值合不合理),串起來只會讓錯誤更難找。
- 本站的工具只會改現有的球員,不會幫你多加一位。
⚠️ 但要說清楚:名冊的列數不是固定的 ——
剛安裝好的原版
attrib.dat是 2,922 行 (這一段數的是檔案的實體行數、含第一行表頭;站上其他頁說的 「原版 2,921 位球員」是扣掉表頭的同一件事,差的就是那一行), 這台機器上那份台灣模組是 3,248 行, 而且rhattrib.dat、career.dat一起長到同一個數字、pitcher.dat從 1,431 到 1,619, 只有team.dat兩邊都是 127(那是對照組)。 二十年前的社群就加得了。 本站沒做的是「用工具安全地加一列」—— 那要同時動好幾個檔而且對齊,風險比改現有的高很多。 所以這一輪的做法是把現有的人改成新的人。 - 能力值有五個欄位本站算不出來,工具會直接拒絕輸出。 那不是故障,是不編數字給你。理由寫在 那一堂。
- 這份順序沒有找真的學生跑過。 依賴關係是從各堂實際讀寫哪個檔推出來的(可以自己驗), 但「照這個順序做起來最順」是推論,不是實測出來的結果。
📌 重點整理
- 一句話 七樣東西各自有課,這一課只回答順序、驗證、還原這三件事。
- 只有兩條硬性先後 備份要最先;名冊要在 能力值/臉/大頭照/語音之前 —— 因為那四樣都是對著某一位球員做的。
- 開機畫面與賽程不依賴任何東西,卡住的時候可以先做這兩堂。但賽程檔不決定新王朝顯示哪一年:那是執行檔的事,要用
mvp_modernize.py --dynasty-year clock(或指定年份),見那一課。 - 每一支會動遊戲檔的工具都是不加
--apply就只預覽, 第一次寫入前自動備份,各自有一行還原(能力值那一支是--restore-write);要全部退回去就倒著還原(最後做的先還原)。 第 1 步的備份檢查與第 8 步的--scan全程唯讀,沒有東西要還原。 - 最該小心的檔是
attrib.dat,四堂共用它, 會寫它的那三堂備份檔名不同,不會互相蓋掉;但還原要倒著來,見上面。 - 每一階段都有不必進遊戲的驗證方式,語音那一堂還可以直接用耳朵聽。
- 最有用的一行是
mvp_pack.py --scan, 它掃出來的就是「你這一年到底改了什麼」。 - 本站沒驗的 這個順序是從各堂實際讀寫哪個檔推出來的, 沒有找學生照著跑過;總時數 113 分是各堂標示時間的加總,不是計時量到的。