2025年10月10日 星期五

linux qe editor 與 -O2 double free issue

The most difficult bugs to fix are the ones that don’t exist.
qe 是類似 dos pe2 或是漢書的文字編輯器。在 google 搜尋已經找不到這個軟體的資訊, 所以想寫一篇來紀錄。

原作者是 Jiann-Ching Liu, https://github.com/descent/qe 忘記從那個地方 clone 來, readme 提到的網址 http://www.cc.ncu.edu.tw/~center5/product/qe/ 已經無法連上, 所以只貼我 clone 的 source code。

readme 提到的網站 http://www.cc.ncu.edu.tw/~center5/product/qe/ 當然已經連不上。

按下2次 ESC, 會切到下方的命令列, 打 quit 可以離開 qe。在剛從 dos 轉到 linux 時, 還不太會用 vi 時, 短暫用過 qe。

目前的版本在 gcc 14 編譯會有 double free 的問題, 無法正常執行, 我嚇傻了, 之前用還好好的, 加上 sanitizer -fsanitize=undefined -fsanitize=address 後可以正常執行, 參考 fig 1。

身為軟體工程師, 看到這棘手的問題, 很想找出問題, 用了 valgrind, sanitizer 來查 double free, 不過沒什麼進展。由於是用 ncurses 寫的, 在除錯印出 debug message 上會有點麻煩, 增加點除錯困擾。

追了一下 code, 這應該是早期的 c++, 還沒有容器和 std::string, 要不然應該不會自己寫 linked list 和 string。

fig 1. qe

dirbuffer.cc
180 int dirbuffer::refreshdir(const char *path) {
183     linebuffer            *tmpptr, *ptr;
208     sprintf(linebuf, "[ %s ]", pathname.getString());
209     filename = linebuf;
210
211     if ((dirp = opendir(pathname.getString())) != NULL) {
212
213      for (ptr = head->next; ptr != tail; ptr = current) {
214          current = ptr->next;
215          ptr->~linebuffer(); // 引發 double free
216          delete ptr;
217      }

找了很久, 本來以為是 linebuffer 的 linked list 出問題, 結果是 qeString 引發, 並不是 linebuffer 這個 class, qeString 是類似 std::string 的東西, 我把動態 malloc 改成固定 array。
char         str[10000];
就解決這個問題。
 class qeString {
 protected:
-    char        *str;
+    char        str[10000];
有點奇怪, 感覺還是沒找到關鍵問題。

20251014 終於找到原因了, 的確和 qeString 有關。qe.cc 是簡化的版本, 這個就會得到 free(): double free detected in tcache 2 錯誤訊息。

qe.cc
 1 int main(int argc, char *argv[])
 2 {
 3     linebuffer        *head, *tail, *current;
 4
 5     head    = new linebuffer("=== Top of file ===");
 6     tail    = new linebuffer("=== Bottom of file ===");
 7     current = new linebuffer("");
 8     head->previous     = NULL;
 9     head->next         = current;
10     current->previous  = head;
11     current->next      = tail;
12     tail->previous     = current;
13     tail->next         = NULL;
14
15     current->~linebuffer();
16     printf("current: %p\n", current);
17     delete current;
18 }

原因是 qe.cc L15, linebuffer 繼承 qeString, 當手動喚起 linebuffer 解構函式時, 一併發動 qeString::~qeString(), 會 delete [] str, 而 qe.cc L17, delete current 會再次發動 qeString::~qeString(), 所以又再一次 delete [] str, 造成 double free。
delete current; 其實就會執行 current->~linebuffer();
是不是早期 c++ delete current 不會執行 current->~linebuffer();
qestring.cc
1 qeString::~qeString(void) {
2     if (str != NULL) delete [] str;
3     str = NULL;
4     buflen = len = 0;
5 }

參考 qe_df.log L9, L12, str 被重複 delete。

list 5. qe_df.log
 1 descent@deb64:qe$ ./qe
 2 init s: === Top of file ===, slen: 19
 3 str: 0x5595b8b29700
 4 init s: === Bottom of file ===, slen: 22
 5 str: 0x5595b8b29750
 6 init s: , slen: 0
 7 str: 0x5595b8b297a0
 8 next: 0x5595b8b29720, previous: 0x5595b8b292c0
 9 ~ str: 0x5595b8b297a0
10 current: 0x5595b8b29770
11 next: (nil), previous: (nil)
12 ~ str: 0x5595b8b297a0
13 free(): double free detected in tcache 2
14 Aborted

可是為什麼會這樣, qestring.cc L3 在 delete 之後有把 str 設定為 NULL, 照理來說 delete NULL 是不會有問題的, 後來發現是 -O2 影響的, 把 -O2 拿掉就正常。

list 6. no -O2
 1 descent@deb64:qe$ ./qe
 2 init s: === Top of file ===, slen: 19
 3 str: 0x55bd3ec88700
 4 init s: === Bottom of file ===, slen: 22
 5 str: 0x55bd3ec88750
 6 init s: , slen: 0
 7 str: 0x55bd3ec887a0
 8 next: 0x55bd3ec88720, previous: 0x55bd3ec882c0
 9 ~ str: 0x55bd3ec887a0
10 current: 0x55bd3ec88770
11 next: (nil), previous: (nil)
12 ~ str: (nil)
13 next: 0x55bd3ec88770, previous: (nil)
14 ~ str: 0x55bd3ec88700
15 next: (nil), previous: 0x55bd3ec88770
16 ~ str: 0x55bd3ec88750

list 6 沒有 -O2, 就沒遇到 delete 同個位址 str 的問題, 看來是 -O2 最佳化引起的。

gcc 7 也會編譯出有問題的 code, 一樣要拿掉 -O2。

list 7, 比較有無 -O2 差異
 1 descent@deb64:qe$ ./qe
 2 init s: === Top of file ===, slen: 19
 3 str: 0x55bd3ec88700
 4 init s: === Bottom of file ===, slen: 22
 5 str: 0x55bd3ec88750
 6 init s: , slen: 0
 7 str: 0x55bd3ec887a0
 8 next: 0x55bd3ec88720, previous: 0x55bd3ec882c0
 9 ~ str: 0x55bd3ec887a0
10 current: 0x55bd3ec88770
11 next: (nil), previous: (nil)
12 ~ str: (nil)
13 next: 0x55bd3ec88770, previous: (nil)
14 ~ str: 0x55bd3ec88700
15 next: (nil), previous: 0x55bd3ec88770
16 ~ str: 0x55bd3ec88750
17 
18 no -O2, 觸發 4次 ~str, 
19 
20 descent@deb64:qe$ ./qe
21 init s: === Top of file ===, slen: 19
22 str: 0x55b33169b700
23 init s: === Bottom of file ===, slen: 22
24 str: 0x55b33169b750
25 init s: , slen: 0
26 str: 0x55b33169b7a0
27 next: 0x55b33169b720, previous: 0x55b33169b2c0
28 ~ str: 0x55b33169b7a0
29 current: 0x55b33169b770
30 next: (nil), previous: (nil)
31 ~ str: 0x55b33169b7a0
32 free(): double free detected in tcache 2
33
34 -O2 觸發 2 次 ~str, 的確有最佳化,只是最佳化錯了, delete L28, L31 同樣位址

2025年10月3日 星期五

20250626 名古屋 栄 商圈 (6/7)

日期: 20250626 (4)
地點: 名古屋 栄

本篇文章提到的時間均為日本時間, 沒寫單位的金額為日圓。

我不會日文, 英文也不好: 文章中有關問路或是其他問人的資訊, 都是用很克難的方式完成 (簡單英文、簡單日文、比手畫腳)。
旅程累積的疲勞慢慢累積起來, 今天快 11 點才出門, 自由行就是可以這麼任性, 慢慢吃早餐, 拉個屎, 舒服又愜意。

結束了前3天的風景行程之後, 今天又回到購物行程, 目的地是「栄」商圈。

這個小雞蛋糕看起來很可愛, 但是不好吃, 建議買一個嘗鮮就好。



主要目標是 montbell, 某人在 2019 就想去, 結果遇到疫情, 直到 2025 才有機會再來日本, 而且地點也換了, 她花了很大的功夫才找到新地點。今天一樣是個下雨天, 好在都在地下道穿梭, 沒被天氣影響。



某人這邊逛了很久, 採購不少東西, 應該滿足了吧! 該吃個午餐了。這邊有間鰻魚之兼光 (うなぎの兼光), 有鰻魚肝, 之前沒吃過, 來吃吃看。







2份餐點共 6000, 不算便宜。



逛書店, 買了幾本漫畫, 沒有退稅。

在明丸超市買了烤雞, 當晚餐, 沒想到除了飛驒牛, 烤雞也好吃。



離開中日大樓, 到附近區域的明治屋名古屋栄大津通ストアー (名古屋市中区栄3丁目16番1号松坂屋名古屋店 地下1階) 商場超市買生食級干貝, 某人為了生食級干貝很努力的找超市。



到附近的唐吉軻德做最後的採購, 明天起床就要準備去機場搭機, 沒有時間做其他事情。

ref:

2025年9月20日 星期六

安裝 劍星 atool mod

atool 是一個動作模組, 可以做出一些遊戲的姿勢、表情、自定義動作 (通常是跳舞動作), 在拍照時, 可以提供更多的動作。
  1. 【剑星】动画工具(ATOOL)
  2. Animation Tool (ATOOL)
HD-ATOOL_P 放到 /home/deck/.local/share/Steam/steamapps/common/StellarBlade/SB/Content/Paks/LogicMods

需要 安裝 ue4ss, Better Jiggle Mod v2.7.4 - The Ultimate Real-Time Jiggle Physics Editor

Better Jiggle Mod 有好幾個下載檔案, 我是下載 Better Jiggle Mod v2.7.4 - All in One Package

list 2. Better Jiggle Mod v2.7.4 - All in One Package
Version v2.7.4
Better Jiggle Mod v2.7.4 + UE4SS + UE4SS Always on Top + Stellar Blade 1.3.2 Update Fix + Community Profiles 10-16

這包安裝檔就像 ue4ss 的安裝方式, 放到 /home/deck/.local/share/Steam/steamapps/common/StellarBlade/SB/Binaries/Win64/ 即可, 如果已經有安裝 ue4ss, 建議先備份原本安裝好的。

atool 提供不同版本, 發動的按鍵不同, 如果安裝正確, 按下以下的按鍵就會看到不同的姿勢、表情、自定義動作 (通常是跳舞動作)。
Switch poses
切换姿势
Alt + ,
Alt + .
Switch expressions
切换表情
Alt + L
Alt + ;
Switch custom animations
切换自定义动画
Alt + [
Alt + ]
Open / Close the expansion menu
开启/关闭拓展菜单
Alt + '
Exit
退出
Alt + /

k2版本:
Switch poses
切换姿势
Alt + 5
Alt + 6
Switch expressions
切换表情
Alt + 7
Alt + 8
Switch custom animations
切换自定义动画
Alt + 9
Alt + 0
Open / Close the expansion menu
开启/关闭拓展菜单
Alt + O
Exit
退出
Alt + L

k3版本:
Open / Close the expansion menu
开启/关闭拓展菜单
Alt + L
可以先下載 HD-ATOOL-animtest 測試 atool 有沒有正常跑起來, 會有一些額外的動作、表情。

123-78dance 這個舞蹈 mod 放到 /home/deck/.local/share/Steam/steamapps/common/StellarBlade/SB/Content/Paks/~mods/ 即可。

不確定是不是要移除 HD-ATOOL-animtest, 我安裝 123-78dance 是有移除 HD-ATOOL-animtest。

我是安裝 k2 版本, 進入遊戲, 按下 atl+9 就可以發動跳舞, alt+l 退出 atool。

2025年9月17日 星期三

20250622 大須觀音商店街 (2/7)

日期: 20250622 (7)
地點: 名古屋大須觀音

本篇文章提到的時間均為日本時間, 沒寫單位的金額為日圓。

我不會日文, 英文也不好: 文章中有關問路或是其他問人的資訊, 都是用很克難的方式完成 (簡單英文、簡單日文、比手畫腳)。
昨天太累, 今天 10:30 才出門, 自由行就是可以這麼任性, 慢慢吃早餐, 拉個屎, 舒服又愜意。

先去找 klook 2天1夜 白川鄉 & 高山 & 金澤巴士之旅 (名古屋出發), 集合地點。

沿路看到一間燒烤魚的店家, 離 jr 名古屋車站不遠, 看來很特別, 午餐就吃這個了, 客滿, 需要在門口外面排隊, 不能進入到店裡頭, 等了五分鐘後, 就可以進入了。



比較少吃這樣的餐點, 算是特別, 享受不同的美食。吃飽喝足之後便是前往大須觀音商店街, 需要轉車, 距離不遠, 沒多久就到了。



上次 (2019) 來名古屋有經過, 這次可以好好的逛逛。

駿河屋, 聽過好幾次, 但都沒來過, 這次來名古屋拜訪這個店家, 不過都沒有我有興趣的東西, 沒有買什麼動漫週邊。這裡的駿河屋好像不太威。後來還跑去 MANDARAKE 看娃。



這邊就單純吃吃逛逛, 看到什麼有興趣的店家就進去晃晃, 沒有什麼特定目標, 今天是輕鬆的一天。另外還有一間超市有販售生食級干貝。

晚上在 aeon 超市買晚餐, 沒有加熱設備, 就買了壽司, 一罐梅酒。200 日圓的壽司意外好吃, 比豆皮壽司還便宜。



2025年9月5日 星期五

大蛇完全版 猶豫是不是要購買



很喜歡這套漫畫, 但紙本價錢太貴, 也沒折扣, 所以就不想買, 實體書看起來做的很精緻, 但不想在漫畫花那麼多錢, 要是有平價的版本就好了。查了日文版本定價 (おろち(1) (ビッグコミックススペシャル)), 也是蠻貴的, 紙本: 1980¥; kindle: 759¥ (kindle 便宜很多), 所以想改買電子書,【電子書】大蛇完全版(01), 但一直被是不是能下載和折扣問題搞得很煩, 現在很多電子書開始不提供下載, 所以這陣子我幾乎不買電子書, 實在不想在那邊查到底能不能下載, 很煩, 因為有的販售頁面寫的不清不楚, 查閱實在麻煩。

「おろち」翻譯成中文是大蛇, 它在日本文化中通常指的是傳說中的八岐大蛇 (やまたのおろち, Yamata no Orochi), 遠呂智 (おろち, Orochi) 是八岐大蛇名字的另一種漢字寫法。不過我還是喜歡「靈蛇」的翻譯。

一般要能下載以及是實體書定價的一半我才會購買電子書, 否則不買的機率大些 (可能連實體書也不買), 長鴻出版社在kobo上停止下載書檔, 我就對能下載的電子書信任感降低, 就算寫可以下載, 也不在像以前是 100% 相信, 而且 kobo 並不像 google book 退電子書很乾脆, 還要聯絡客服才能知道能不能退已購買的電子書, 很煩。原本不用擔心在 kobo 上買的能不能下載, 現在也變成要自己確認。
電子書詳細資料
張忠謀自傳
天下文化出版社
發布日期: 2024年11月29日
版本說明:天下文化
書籍ID:9786263559646
語言:中文
下載選項: 不支援 Adobe DRM 檔案下載
像張忠謀自傳這本是不能下載的。

在忙著找這些資訊後, 我火了, 買個東西這麼麻煩, 已經耗掉我的購買耐心, 所以就不想買了。發這篇文章發洩不滿。
Kobo週年慶 (https://r10.to/h5HjT5) 輸入 9HBD 全站73折
單筆滿$999送樂天點數99點,滿$1899送樂天點數199點(實際消費金額包含使用樂天點數&商店積分支付的金額)
滿額再抽閱讀器等好禮,至2025/9/10止 (https://r10.to/hPNXde)
後來看到這個資訊, 20250903 就購入了, 我是先買一本, 確定可以下載, 才買其他集數, 販售資訊也可以看到下載選項。總共花費: 172+540=712
電子書詳細資料
大蛇完全版(01)
由 楳圖一雄
第 1 冊 - 大蛇完全版
尖端出版
發布日期: 2025年8月8日
版本說明:尖端出版
書籍ID:9786264342278
語言:中文
下載選項:EPUB 3 (Adobe DRM)
rakuten 和 pchome 的 kobo 書籍好像看不到「下載選項」的說明, 一般我都到 kobo.com 看。

沒有彩頁, 只有最前面有一張扉頁彩頁, 這種版本能算完全版嗎? 和單行本有什麼差異?

amazon 已經不提供下載書檔, 所以我完全不考慮買 amazon 電子書, 基本上也不會去看 amazon 網站的書。

【其他】日本AMAZON收不到手機認證簡訊的解決方式

不要用信箱登入改用手機號登入 (假設你的手機號是0900123456)要輸入+886900123456 然後下一步不要打密碼改點下面的"傳送OTP碼登入", 這樣比較簡單, 一般人不會有日文對話能力。

這就是一種風險, 服務沒收掉, 但你的帳號進不去, 買的電子書等於全沒了。

大蛇類似來自魔界那種奇異故事,「米色利」換成「遠呂智」。所以如果故事吸引你, 那就會很喜歡這部漫畫, 但沒看過之前, 怎麼知道自己喜不喜歡呢? 像我就不愛洗禮的故事, 但我已經買了, 就覺得有點虧。

第3集的「戰鬥」是我最不滿的一個故事, 沒有把結局寫出來, 等於我看了老半天內容, 但不知道結局, 這是我最討厭的結束方式, 我花錢買的就是作者的故事, 給了一個沒結局要我自己想的結局, 那我花錢是幹麻用的? 而且大蛇不像來自魔界, 他有好多頁可以把故事好好描述, 不會因為頁數不足要做一些取捨。

香港作家余過的故事就都是有完整結局, 所以我很喜歡他的小說, 也是類似這種奇幻故事。

ref:
『漫画分享』楳图一雄《大蛇》完全版台版漫画开箱分享

2025年9月1日 星期一

2025823 大罷免 X 公投

黨 = 尚黑
20250823 是大罷免和核3公投投票日, 有選舉, 我都會去投, 這是唯一一個可以表達對政黨好惡的活動。投票是對政黨支持最直接的反應, 比民調真實多了。政治人物只有看到票減少了才會害怕, 民調低對他們是沒有警惕作用的。

就算是公投這種不那麼直接的選舉, 也是可以表達自己對政黨的喜好, 尤其是這種這麼政治性的議題, 大多數人都不會是核能專家, 你的贊成/反對是真的尊重專業, 還是以自己的政治立場來表達意見, 只有自己知道。

在網路上查看醫學相關知識, 能取代醫生治病嗎? 如果你查的資料和醫生說的不同, 你要堅持網路查的資料是對的嗎? 愛莉莎莎「喝橄欖油排膽結石」這個例子想必令人省思。

網路時代取得資訊來的容易, 很容易令人就以為某某事情就是這樣, 真正專業的東西是沒有這麼容易理解的。

如果核能發電程式發生 thread deak lock 問題, 一般人能體會這是多嚴重的事情嗎?

專業的東西並不是查查網路資訊, 就可以這麼容易做出決定。更何況這個議題正反2方都有他們的道理, 做決定比較像是一種選擇, 那種比較適合並不是那麼容易決定。

《專業之死》讀後心得:從愛莉莎莎和蒼藍鴿事件學到什麼?

如果是像安樂死、多元成家這樣的議題, 就會比較是民意的表現, 而不是政治傾向的對立, 很可惜沒有順便提出安樂死議題公投。

成案了!反核提案「核廢料放公投同意票最高3縣市」 4天獲近8千人支持

大罷免也如同之前的預測, 並沒有罷免掉任何一位立委, 而且不同意票的票數都還蠻高的, 真的是國民黨這麼得人心嗎?



2025年8月31日 星期日

劍星 cns mod

在討論區看到 CNS - Custom Nanosuit System mod, 這個 mod 需要 ue4ss, 可以以新增的方式增加衣服, 而不需要用取代的方式, 可以和原本的衣服一起存在, 真希望其他 mod 開發者都可以支援這個模組。

其實不只服裝, 臉部、髮型、耳環、眼鏡, 以及武器都有支援。

因為功能強大, 所以安裝稍微複雜點。解開後, SB 目錄直接覆蓋 /home/deck/.local/share/Steam/steamapps/common/StellarBlade/SB/ (steam deck 路徑)

Copy the extracted `SB` folder and merge it with your games `SB` folder. (ie, copy it into the root StellarBlade folder)

另外支援 CNS 的 mod 有 2 種, 一種只提供 .json 檔案, 一種和原本的 mod 一樣, 安裝方式也一樣。

.json 要放在 /home/deck/.local/share/Steam/steamapps/common/StellarBladeDemo/SB/Content/Paks/~mods/CustomNanosuitSystem 。

CNS 頁面也有列出使用 CNS 的 mod, 可以方便查找有支援 CNS 的 mod。

Compatible Skin Mods:
  1. Ada Wong (By JPTHEHERO)
  2. Cute Bikini (By Acutecorn)
  3. Backless Bodysuit (By Acutecorn)
  4. Diving Protection Suit - No Jacket (By Vorpine2)
  5. Cyber Suits w/No Tail (By Vorpine2)
  6. Heart Swimsuit (By shades2jad3d)
  7. First Descendant Bunny (By lilredsled)
  8. First Descendant Ines (By lilredsled) 
  9. First Descendant Bunny Apex Predator (By lilredsled)
  10. YoRHafy Silver & Shadow Kunoichi (By kesshin7)
  11. YoRHafy Wasteland Adventurer/Explorer (By keeshin7)
  12. Prae-Infinity Outfit (By roybjensen)
  13. EVE Delta Dress (By ItsRokaya)
  14. EVE Winter Outfit (By ItsRokaya)
  15. EVE X-Cyberpunk (By ItsRokaya)
  16. EVE Pink Bodysuit (By ItsRokaya)
  17. Echidna (By nyz333)
  18. Eve x Ines Summer Paradise (By IceAutumnBreath)
  19. EVE VIPGuard Outfit (By Reverse7R)
  20. Cyber Bunny No Stockings (By nomamad)
  21. [NSFW] Ms Claus Bikini (By Acutecorn)
  22. [NSFW] EVE Urban Xedge (By ItsRokaya)
  23. [NSFW] Akali (By AHaungo)
  24. [NSFW] Linyueru (By AHaungo)
  25. [NSFW] Tongquintao (By AHuengo)
  26. [NSFW] Lollipop Cheerleader (By AzureiWolf)
  27. [NSFW] Secretary Outfit (By roybjensen)
  28. [NSFW] White Shibari (By shades2jad3d)
  29. [NSFW] Shibari Outfit (By shades2jad3d)
  30. [NSFW] Cyber Harness (By shades2jad3d)
  31. [NSFW] Leather Catsuit (By Misberave)
  32. [NSFW] Black Full Dress (By BagOfPopcorn)
  33. [NSFW] YoRHafy - Skin Suit (By kesshin7)
  34. [NSFW] YoRHafy Motivation & Resonance (By kesshin7)
  35. [NSFW] Sky Siren Air/Sky Ace (By kesshin7)
  36. [NSFW] Daily / Comfort Force (By kesshin7)
  37. [NSFW] Vamps Outfit (By roybjensen)
  38. [NSFW] Eve Uniform (By Reverse7R)
  39. [NSFW] Revealing Planet Diving Suit 2nd (By songeda)
  40. [NSFW] Shadow Kunoichi (By songeda)
  41. [NSFW] Transparent Silver Kunoichi (By songeda)
  42. [NSFW] Transparent Santa (By songeda)
  43. [NSFW] Transparent Elegant Dress (By songeda)
  44. [NSFW] Fishnet Midsummer (By songeda)
  45. [NSFW] Revealing Black Dress (By songeda)
  46. [NSFW] Guilded Rose Dress (By pLastGhost)
  47. [NSFW] Motified Neurolink Suit (By zealot9999)
  48. [NSFW] Cake Unveiled Cooling Suit (By briefcasesharpie)
- GET YOUR MOD LISTED HERE!! (leave a comment with a link to your mod, or the mod id)

Compatible Faces: 
Female NPC Faces (By 4H3y9fjbb89BKjI)

Compatible Hairs: 
Raven Hair (By kesshin7)

Compatible Default Skins: 
Note: These are not custom skins, but are compatible json files to show default outfits within the CNS menu. 
  1. Fusion suit (By QueenEri)
  2. Silver & Shadow Kunoichi (ByQueenEri)
CNS - Female NPC Faces 可以方便換臉, 有 Tachy, Scarlet, Raven, Lily's 可以切換, 搭配 Raven 頭髮 CNS mod, 可以方便變出 Raven。

目前大部分都改用 CNS mod, 替換服裝的 mod 用起來太不方便。不過 CNS mod 有個缺點, 換好的服裝在設定畫面時, 不會跟著顯示, 設定畫面顯示的衣服是從設定畫面選的服裝, 有點可惜。

First Descendant Bunny Apex Predator 這套蠻好看

裝好之後, 按下 n 就可以開啟換裝界面, 使用滑鼠換裝, 在 steam deck 上操作還真難倒我, steam 按鍵 + x, 開啟虛擬鍵盤, 建議裝個藍芽鍵盤比較輕鬆。



tifa 衣服應該是蠻受歡迎的, 不過我卻不是很想用這個 mod, 又不是在玩 ff7, 用這個 mod 我乾脆玩 ff7 就好了, 所以拖到支援 cns 時, 我才用這個 mod, tifa hair and earring for eve-1567-1-0-1753177974 新版本有支援 cns, tifa 衣服也有 cns, 因為很容易就可以更換, 就裝了。

光頭效果是因為 TIFA HAIR WITH ENHANCED PHYSICS-1681-1-0-1753717159.zip 引起的, 建議用 tifa hair and earring for eve-1567-1-0-1753177974。













明末淵虛之羽和古墓奇兵, DOA, TIFA, The First Descendant 都來了, 感覺玩了好幾款遊戲。

cns-1.9 之後, 也可以更換 lily, adam 的服飾, 相當方便。

20250827 出了 CNS Repacker mod, 這個 mod 可以把非 cns mod 轉成 cns mod,好神奇。

需要 ".NET 8.0 Desktop Runtime", 我就怕這個, 在 steam deck, 我不知道怎麼把 .net 搞定。

奇怪, 討論區說需要 ".NET 8.0 Desktop Runtime", 但我看 Source code https://gitlab.com/DeronFer/cnsrepacker 這是用 kotlin 寫的, 嘗試在 linux 下編譯。
in linux compile
gradle/wrapper/gradle-wrapper.properties:4:distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
download
gradle-8.14.3-bin.zip

改成下載的 path
gradle/wrapper/gradle-wrapper.properties:4:distributionUrl=file:///home/descent/work-2/mod/cnsrepacker/gradle-8.14.3-bin.zip

download graalvm-jdk-24_linux-x64_bin.tar.gz

編譯成 linux native 執行檔
export JAVA_HOME=$PWD
export PATH=$JAVA_HOME/bin:$PATH

編譯
./gradlew nativeCompile

經歷這些磨難之後, 成功之後, 執行檔案在 cnsrepacker/build/native/nativeCompile/CNSRepacker

執行結果:
descent@deb64:cnsrepacker$ /media/work-2/mod/cnsrepacker/build/native/nativeCompile/CNSRepacker
The folder /media/work-2/mod/cnsrepacker/./../SB/Content/Paks doesn't exist. Make sure that you use a correct path to the game.

CNSRepacker 會呼叫以下2個執行檔
./tools/retoc/retoc.exe
./tools/UAssetGUI/UAssetGUI.exe
這 2 個檔案是 windows 執行檔, 建議還是在 windows 執行 CNSRepacker 會比較容易, 不確定 wine 能不能正常執行 ./tools/retoc/retoc.exe, ./tools/UAssetGUI/UAssetGUI.exe
[CNSRepacker 測試]

由於需要在 windows 執行 CNSRepacker.exe 我把 steam deck 的劍星目錄複製到 windows k: 下, 把 CNSRepacker 放在和 SB 同一層目錄, 以我的例子就是: K:\StellarBlade\CNSRepacker, 參考 list 1。

list 1. CNSRepacker 路徑
1 .
2 ├── CNSRepacker
3 ├── crs-client.dll
4 ├── crs-handler.exe
5 ├── crs-uploader.exe
6 ├── Engine
7 ├── SB
8 ├── SB.exe
9 └── Screenshots

執行 CNSRepacker.exe 之前, CNS mod 要先安裝好, 猜測 CNSRepacker 可能會用到 CNS mod 的檔案。

不確定要不要安裝 ".NET 8.0 Desktop Runtime", 我是有安裝 ".NET 8.0 Desktop Runtime" x64 版本, 可以先不要安裝, 等轉換失敗再來安裝。

用這個非 CNS mod EveChaHae-In-2014-1-0-1756957570 來測試。解壓縮 EveChaHae-In-2014-1-0-1756957570 放到 \CNSRepacker\ToRepack, 以我的例子來說就是: K:\StellarBlade\CNSRepacker\ToRepack\EveChaHae-In-2014-1-0-1756957570, 參考 list 2。

list 2. 要轉的 EveChaHae mod 路徑
 1 CNSRepacker
 2 ├── alreadyRepacked.txt
 3 ├── CNSRepacker.exe
 4 ├── config.txt
 5 ├── data
 6 │   ├── assetToImportAsset.txt
 7 │   ├── assetToRootAsset.txt
 8 │   ├── excludedAssets.txt
 9 │   └── rootAssetToInfo.txt
10 ├── log.txt
11 ├── tools
12 │   ├── retoc
13 │   └── UAssetGUI
14 └── ToRepack
15     └── EveChaHae-In-2014-1-0-1756957570
16 
17 6 directories, 8 files

點擊 CNSRepacker.exe

CNSRepacker.exe 執行期間, 會去執行以下指令:
"tools\retoc\retoc.exe" "to-legacy" "--mount-folder" "K:\StellarBlade\CNSRepacker\.\..\SB\Content\Paks" "C:\Users\ADMINI~1\AppData\Local\Temp\StellarBladeCNSRepacker\modCopy" "C:\Users\ADMINI~1\AppData\Local\Temp\StellarBladeCNSRepacker\modExtracted" "--no-ver-check" "--check-subfolders"
注意這2個目錄, CNSRepacker.exe 執行期間會需要這2個目錄, 在我的平台上, 這 2 個目錄會被移除, 造成 "tools\retoc\retoc.exe" 執行失敗, 我是手動建立這2個目錄, 開啟 2個 cmd dos 視窗, 進入這2個目錄, 這樣以下 2 個目錄就不會被移除。
C:\Users\Administrator\AppData\Local\Temp\StellarBladeCNSRepacker\modExtracted
C:\Users\Administrator\AppData\Local\Temp\StellarBladeCNSRepacker\modCopy
如果執行失敗, 可以看一下 CNSRepacker\log.txt, 會描述一些失敗的原因。

成功的話, 被轉成 CNS 版本的 mod 會放在
K:\StellarBlade\SB\Content\Paks\~mods\CustomNanosuitSystem\Repacked\EveChaHae-In-2014-1-0-1756957570

看一下被轉換後的內容, 多了一個 EveChaHae-In-2014-1-0-1756957570.dekcns.json, 0d353c86d941d1f6.ucas 檔案還變小。
2025/09/08  下午 11:35             3,767 0d353c86d941d1f6.utoc
2025/09/08  下午 11:35        11,750,559 0d353c86d941d1f6.ucas
2025/09/08  下午 11:35               347 0d353c86d941d1f6.pak
2025/09/08  下午 11:35               816 EveChaHae-In-2014-1-0-1756957570.dekcns.json
原本 EveChaHae-In-2014-1-0-1756957570 mod 的內容:
2025/09/03  上午 09:17               339 EveChaHae-In_P.pak
2025/09/03  上午 09:17        22,812,928 EveChaHae-In_P.ucas
2025/09/03  上午 09:17             5,759 EveChaHae-In_P.utoc
list 3 為 CNSRepacker.exe 成功轉換的結果, 大多數「梅川伊芙」mod 都沒 cns 版本, 轉成 cns 之後, 就非常方便。

list 3. CNSRepacker.exe 執行畫面
 1 K:\StellarBlade>cd CNSRepacker
 2 
 3 K:\StellarBlade\CNSRepacker>CNSRepacker.exe
 4 Found 1 folders inside K:\StellarBlade\CNSRepacker\.\ToRepack
 5 
 6 1/1 RetexEve-DarkInnerSuit-Version 2-141-2-1749404375 ............................................... SUCCESS
 7 Press Enter to exit...
 9 
10 K:\StellarBlade\CNSRepacker>CNSRepacker.exe
11 Found 1 folders inside K:\StellarBlade\CNSRepacker\.\ToRepack
12 
13 1/1 Skin Suit alternate-261-1-0-1749813978 .......................................................... SUCCESS
14 Press Enter to exit...
16 
17 K:\StellarBlade\CNSRepacker>CNSRepacker.exe
18 Found 1 folders inside K:\StellarBlade\CNSRepacker\.\ToRepack
19 
20 1/1 SB_NudeInnerSuit-13-1-1-1748881015 .............................................................. SUCCESS
21 Press Enter to exit...
23 
24 K:\StellarBlade\CNSRepacker>CNSRepacker.exe
25 Found 1 folders inside K:\StellarBlade\CNSRepacker\.\ToRepack
26 
27 1/1 Makeup Only-33-1-1749408865 ..................................................................... SUCCESS
28 Press Enter to exit...

以下影片顯示轉成 CNS 的 EveChaHae mode。



也可以轉化妝的模組, 透過 cns 更換化妝模組非常方便。 服裝修改的模組也可以轉成 cns, 原本的服裝和被修改過的版本都可以同時存在。

SailorSkirt 這個 mod 我本來無法成功使用, 轉成 cns mod 之後, 就可以正常使用。



Valretos Divine Punishment 這個 mod 也是無法正常使用, 轉成 cns 版本就可以用了。