教學 › 一次更新整個年度

一次更新整個年度

名冊、能力值、臉、大頭照、語音、開機畫面、賽程 —— 七樣東西各自有課,這一課不教任何新東西。 它只回答那七堂課都沒回答的四個問題:先做哪一件、做完怎麼確認真的成了、 卡住要回哪一堂、全部做完怎麼一次還原。

難度

★★☆ 每一堂都不難,難的是順序

時間

約 113 分鐘(八堂加打包)

可以還原嗎

可以,每一堂各一行

🛟 動手之前:先完整備份整個遊戲資料夾

把整個遊戲資料夾複製一份到別的地方, 包括裡面存放紀錄的資料夾。紀錄也可能放在遊戲資料夾外面: 「文件」裡的 Documents\MVP Baseball 2005,那一個要另外複製。

怎麼整包複製、紀錄(王朝、名單、設定)的兩個位置各在哪、找不到怎麼找: 看備份與還原 SOP 的「整包複製」。

⚡ 只想趕快做完?照這個順序,每一步點進那一課(要先裝好 Python,沒裝的看第 0 課操作五)

  1. 先把整個遊戲資料夾複製一份(做法看上面 🛟 那張卡,這一步不能跳), 再把遊戲資料夾和那份複本一起交給檢查腳本,【3】那一段列出的每一個檔都要是「內容一致」

    Windows:

    python -I mvp_check_backup.py "<遊戲資料夾>" "<備份資料夾>"

    Mac / Linux:

    python3 -I mvp_check_backup.py "<遊戲資料夾>" "<備份資料夾>"

    這支檢查腳本只看幾個核心檔,這一輪要動的大頭照、開機畫面、語音檔它都看不到 —— 真正的保險是那一份整包複本。

  2. 名冊:整批匯出成 CSV,用 Excel 改完再匯回去

    Windows:

    python -I mvp_player.py "<遊戲資料夾>" --export players.csv

    Mac / Linux:

    python3 -I mvp_player.py "<遊戲資料夾>" --export players.csv

    Windows:

    python -I mvp_player.py "<遊戲資料夾>" --import players.csv --apply

    Mac / Linux:

    python3 -I mvp_player.py "<遊戲資料夾>" --import players.csv --apply
  3. 能力值:用真實成績算,不要用手感填

    Windows:

    python -I mvp_ratings.py --convert stats.csv --out ratings.csv

    Mac / Linux:

    python3 -I mvp_ratings.py --convert stats.csv --out ratings.csv

    Windows:

    python -I mvp_ratings.py --write "<遊戲資料夾>" ratings.csv --apply

    Mac / Linux:

    python3 -I mvp_ratings.py --write "<遊戲資料夾>" ratings.csv --apply
  4. 臉:指到一張現成的臉 (要做全新的臉,改看做一張全新的臉)

    Windows:

    python -I mvp_swap_face.py "<遊戲資料夾>" --find Ohtani

    Mac / Linux:

    python3 -I mvp_swap_face.py "<遊戲資料夾>" --find Ohtani

    這一行只查不改;真正換的那一步照那一課的速解做。

  5. 大頭照:先查編號,再換圖

    Windows:

    python -I mvp_swap_portrait.py "<遊戲資料夾>" --find Ohtani

    Mac / Linux:

    python3 -I mvp_swap_portrait.py "<遊戲資料夾>" --find Ohtani

    這一行只查不改;真正換的那一步照那一課的速解做。

  6. 語音:把播報員唸的名字換掉

    Windows:

    python -I mvp_audio.py "<聲音檔>" --list

    Mac / Linux:

    python3 -I mvp_audio.py "<聲音檔>" --list

    這一行只查不改;真正換的那一步照那一課的速解做。

  7. 開機畫面與賽程年份

    Windows:

    python -I mvp_swap_screen.py "<遊戲資料夾>" --info

    Mac / Linux:

    python3 -I mvp_swap_screen.py "<遊戲資料夾>" --info

    上面這一行只查不改,真正換開機畫面照那一課的速解做;下面賽程這一行就是真的改。

    Windows:

    python -I mvp_shift_schedule_year.py "<路徑>/schedule.big" 2040 --apply

    Mac / Linux:

    python3 -I mvp_shift_schedule_year.py "<路徑>/schedule.big" 2040 --apply

    ⚠️ 這一行改的是賽程檔 schedule.big,不會讓新王朝換年份:王朝模式的起始年份由執行檔決定。想讓新王朝從今年開始,是另一個選配,用 mvp_modernize.py 的 --dynasty-year clock(或指定一個年份),指令與限制看讓王朝年份跟著電腦日期走,它跟賽程檔的關係寫在階段表標「+」的選配列。

  8. 列出這一輪改了哪些檔(要打包給別人,看那一課)

    Windows:

    python -I mvp_pack.py "<遊戲資料夾>" --scan

    Mac / 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, 因為它另外有一個唯讀的分析模式,兩個要分得開。

這一課沒有自己的腳本

上面每一行指令都是別堂課的工具,這一頁一個字都沒有改寫它們。 這樣做的理由是:工具改版的時候只會有一個地方要改。 如果你發現這一頁的某一行跟那一堂寫的不一樣, 以那一堂為準,並且那是值得回報的東西。

本站在這件事上做不到的

📌 重點整理

接下來

整年做完想給別人裝,去打包成一包; 想看這八堂在整體課程裡的位置,去課表的 ④ 年度更新班。