切換
舊版
前往
大廳
主題

【RM|教學】更加強大的引擎

靈魂 | 2020-07-02 18:54:09 | 巴幣 1032 | 人氣 1452

上次介紹了MKXP與其分支
MKXP不只能跨平台,由於底層調用與渲染皆使用了新的方式去處理,在效能上也獲得了非常多的提升,這一切歸功於所有參與MKXP與其他分支的所有人,由衷的感謝。
在此也感謝快閃小強大大,提供了
構上的幫助。



本篇將會使用MKXP的分支MKXP-Z作為範例與教學
在開始之前先說明以下幾項

  • 為什麼要使用MKXP?
現在的XP、VX、VA對於現今的遊戲引擎來說是古老的,尤其是RMXP,XP於2004年發布,距今已過了快17年,各項老舊功能與限制對於現在的遊戲來說是綁手綁腳的,運行只使用單核心、老舊的DirectDraw渲染、擴展解析度麻煩……等等的,這些都深深影響著遊戲的開發。
雖然MKXP並不能讓上述版本的RM變得跟MV、MZ一樣,但至少是非常接近的,也得以脫離"古老"的代名詞。
可跨平台、新的OpenGL渲染方式、支援更新的Ruby版本、一致的跨平台運行……這些都有助於讓遊戲開發與遊戲變得更加跟得上時代。
1920*1080加上一大堆會讓原XP lag到要死的光源,在此情況下FPS依舊是滿的


  • 為什麼會選擇MKXP-Z而不是其他的分支呢?
由於大部分的RM專案都會使用到WIN API,而原版本的mkxp-z並不支援,mkxp-z很好的修復了這一點,並且mkxp-z的作者Roza,也撰寫了關於構建的gitbook,讓一般人也得以自行購建自己預想的執行檔。

但mkxp-z目前有一些缺點:
字體的渲染有一點偏離
字體不支援.otf檔
除此之外表現良好


  • 對於正在執行或已完成的專案,會有任何的問題嗎?
若您使用MKXP-Z作為方案的話,則可以比較不用擔心這件事
除非遊戲內用到了大量插件、外部dll檔調用、自定義的腳本……等等的
建議備份專案後,嘗試看看是否能順利運行
當然也建議該使用者要有除錯能力





以下構建教學適合:

2023/3/21 - 此教學適合使用舊版本之mkxp-z使用者,主要以v1.3.0的mkxp-z為主

想學習之人、具開發需求者、欲跨平台使用者、欲自定選項者 (當然若想嘗試也無妨
建議構建者需要有使用Linux的經驗
只是單純想要使用mkxp-z、不想構建的人,請拉至最底下





開始前的一些說明:
一般來說,若想在Linux上運行遊戲則應於Linux上進行構建,但這也只是方便而已。所以也可以在Windows上構建其他跨平台的執行檔,只是這需要許多的嘗試。
若沒有限制,則建議使用其系統進行構建。若沒有原生系統那就使用VM(虛擬機)。

在下嘗試過於Windows8.1、10、Ubuntu18.04成功構建(沒有mac
快閃小強則於macOS成功構(不確定版本
以下是測試過目前無法構的系統:
Windows7、Ubuntu 19.X
若沒辦法成功購建,甚至是一些環節就出了問題,那就使用VM創造一個乾淨的系統後再試一次。(乾淨的環境很重要

以下教學歸功於mkxp-z的作者Roza,並將於Windows10系統作為範例,也就是說構建出來的將會是給Windows系統的執行檔。Linux的教學將會留到下一篇,macOS的話就交給其他人了





安裝依賴項目


1.必須安裝MSYS2 - 新版MSYS2不具備建構時所需的必需品
*安裝結束時將說明是否運行64bit版本的MSYS2,選擇否(勾消)

2.安裝結束後將環境變數加上 路徑(若為預設):
C:\msys64\mingw32\bin
*環境變數添加方法:對本機按右鍵內容→進階系統設定→進階→環境變數→添加使用者變數
若運行mkxp-z時,警告缺少dll檔案,則說明沒有添加好環境變數、又或者沒有安裝好該dll檔的軟體

3.運行msys64資料夾內的mingw32.exe

4.安裝各項所依賴的軟體
pacman -S base-devel git mingw-w64-i686-{clang,meson,cmake,openal,SDL2,SDL2_image,SDL2_ttf,pixman,physfs,libsigc++,libvorbis,fluidsynth}
…這過程需要一段時間

5.安裝Ruby
*Ruby 1.8.7手動建構包連結
git clone https://github.com/inori-z/ruby --single-branch --branch ruby_1_8_7
cd ruby
autoconf
rm -rf ext/tk ext/openssl ext/win32ole
CC=gcc ./configure --enable-shared --disable-install-doc
make -j`nproc`
make install
cd ..
*若無法make則建議使用VM新建一個乾淨的系統
*運行完指令後,ruby將會安裝到C槽的根目錄中,名為mingw32,請將資料夾複製進msys64中
*新版MSYS2於Windows有高機率無法順利建構,建議換個ruby版本,作法一樣


6.構建與安裝ObjFW與SDL_Sound
git clone https://github.com/ObjFW/ObjFW
git clone https://github.com/Ancurio/SDL_Sound

(cd ObjFW && ./autogen.sh && ./configure && make -j`nproc` && make install)
(cd SDL_Sound && ./bootstrap && ./configure --disable-flac --disable-modplug --disable-speex && make -j`nproc` && make install)
*如果使用Windows10,安裝ObjFW會出現一些錯誤,為了解決錯誤除了自己構建OFArray之外,也可以選擇使用該連結的文件,將文件複製到mingw32中




構建應用程式


1.設定編譯器
export OBJC=clang CXX=clang++ OBJCXX=clang++
若不想每次開啟MSYS2都要打上面那一串,那麼可以設定
echo "export CC=clang OBJC=clang CXX=clang++ OBJCXX=clang++" >> ~/.bashrc

2.克隆github上的mkxp-z,並構建
git clone --recurse-submodules https://github.com/inori-z/mkxp-z
cd mkxp-z
meson build -Dcjk_fallback_font=true
cd build
ninja
至此動態鏈結構建完成,構建出來的執行檔將會在/home/使用者/mkxp-z/build內
檔名為mkxp-z.exe,將其放進遊戲專案內取代Game.exe。
而mkxp-z的設定檔案為mkxp.json.sample,該檔案位於/home/使用者/mkxp-z/,將其一同放置進遊戲專案內。若要使用設定檔的設定,請將其改名為mkxp.json,並參考內部說明進行設定。

*這部分可有可無
除了exe檔、mkxp.json檔之外還需要撥放midi音樂檔所需要的dll檔,放置於同一層
可於mkxp-z作者的預構建檔案中提取 連結
Windows:fluidsynth.dll
Linux:libfluidsynth.so.1
macOS:libfluidsynth.dylib.1


*若出現了缺少dll檔的情況,請參考安裝依賴項的第2點
*若mkxp-z.exe沒有報錯,而是直接關閉,或許是OpenGL版本不支援、顯示驅動過舊或沒有、RGSS版本問題……等等的,可以進行後面的靜態鏈結試試看。
*動態鏈結成功後的嘗試是為了方便進行之後靜態鏈結的構建,如果運行exe檔有缺少dll檔的情況,之後的靜態鏈結基本上很難成功,由於軟體安裝時都會提供靜態、動態兩種檔案的函式庫,若其一沒有則另一應沒有,除非是自己build軟體的。


動態鏈結與靜態鏈結:
動態鏈結函式庫(Dynamic-link library)具體來說,就是將一些常見的程式碼包裝成dll檔,每當程式需要使用到時就調用該dll檔作為使用,如此一來可以減少記憶體使用量、節省硬碟使用空間,RM中調用WinAPI32就是其概念。
靜態鏈結函式庫(Statically-linked library)主要用以需要將應用程式或執行檔發布時所用,將該應用程式所需的所有函式庫都打包起來,之後無論應用程式發布至哪一台電腦上,都不用擔心缺少了那些函式庫,缺點就是體積大。




打包(靜態鏈結)


1.要完成靜態鏈結,則必須使用mxe's,以獲得OpenAL,pixman和harfbuzz的靜態版本
mxe:連結
解壓縮後將i686-w64-mingw32.static的資料夾內容複製進mingw32中

2.構建靜態ObjFW
cd ~
cd ObjFW && ./autogen.sh && ./configure --enable-static && make -j`nproc` && make install

3.修改/home/使用者/mkxp-z/src/meson.build的檔案內容
於if host_system == 'windows'底下加上以下兩行
explicit_libs += 'libbrotlicommon-static;libbrotlidec-static;'
explicit_libs += 'libgcc;libstdc++;libruby18;'

4.將動態鏈結好的/build資料夾刪除
cd ~
cd mkxp-z/
rm -rf build/

5.重新構建
meson build -Dstatic_executable=true -Dcjk_fallback_font=true
cd build
ninja
至此靜態鏈結構建完成,執行檔依舊於/build資料夾中
*該構建打包好的執行檔,可以直接給其他人作為引擎取代Game.exe使用





在下已經構建好的二進位執行檔:連結
2020 / 9 / 5:完成ruby2.7版本的mkxp-z執行檔,VXAce已可使用
2023 / 3 / 21:修改失效的連結
若有需要msys2用的ruby 2.7,這裡一併提供連結:連結
安裝方法與一般安裝相似,-S改成-U就可以了

若有腳本編輯能力的話,搖桿控制、視窗大小倍率調整、解析度…等等的,可以於遊戲專案中自行調整。


如果有需要圖片式教學又或者任何問題還請在下方留言
送禮物贊助創作者 !
0
留言

創作回應

養樂多
改完之後就可以了,感謝。
試用後第一個感受是MIDI音樂變清晰好多(?)
2020-07-02 22:30:02
靈魂
或許是因為使用MIDI音樂的撥放器被替換了的關係[e29]
2020-07-02 22:36:58
SOULSAGA
請問我使用了mkxp-z
為何使用RTP的圖片音樂等都會報出缺少檔案?
2020-11-05 18:19:37
靈魂
如果有使用到XP的預設RTP素材,那麼就需要添加RTP(壓縮檔)的路徑至mkxp.json設定中,讓引擎能夠讀取的到
2020-11-05 18:36:17
靈魂
在mkxp.json設定檔中,約261行開始的地方
2020-11-05 18:38:03
靈魂
如果可以的話,建議脫離RTP。若有用到RTP裡面的素材,那就直接添加進遊戲素材庫內。
2020-11-05 18:38:59
SOULSAGA
感謝回答
2020-11-05 19:01:12
靈魂
[e7]
2020-11-05 19:05:41
SOULSAGA
請問MKXP如何用rgssad檔案?
2020-11-10 15:55:40
靈魂
實際上rgssad檔案就是加密過後的遊戲壓縮檔,要讓引擎能夠讀取到,就與設定RTP路徑給引擎一樣做法,位置也是同樣的mkxp.json中261行開始的地方
2020-11-10 15:58:40
靈魂
暫時的結論:不設定mkxp.json,他會自己判定是否有.rgssad存在,並將遊戲開啟
2020-11-10 18:17:10
SOULSAGA
// Add 'rtp1', 'rtp2.zip' and 'game.rgssad' to the
// asset search path (multiple allowed)
// (default: none)
//
"RTP": ["Game.rgssad"],

這樣還是不行
2020-11-10 16:06:49
靈魂
請加上相對路徑的斜線"/"
加上後會變成這樣:"RTP": ["/Game.rgssad"],
2020-11-10 16:21:03
靈魂
這裡的/應該也是代表根目錄的意思,所以/不可省略
2020-11-10 16:24:13

更多創作