構建發行版 link
Ren’Py包含了對構建遊戲發行版的支持。在啟動器(laucher)選擇“構建發行版”,Ren’Py會掃描自身和項目,決定發行版中包含哪些文件,並創建需要的歸檔文件,以及構建包(package)和升級文件。
不需要額外設置,Ren’Py就可以構建下列類型的包(package):
- PC: Windows and Linux
一個運行在Windows x86_64和Linux x86_64平台的zip文件。
- Linux
一個運行在Linux x86_64平台的tar.bz2文件。 包括32位和64位的ARM版本。(如果裝了sdkarm的Ren’Py包)
- Macintosh
一個運行在使用Intel或蘋果Silicon處理器Macintosh OS X系統的zip文件,文件中包含一個Macintosh可執行文件。 遊戲數據可以包含在可執行文件中,在用戶看來只有一個文件。 更新器對這個包沒用。
- Windows
一個運行在Windows x86_64平台的zip文件。
- Windows, Mac, and Linux for Markets
包含軟體市場(比如itch.io和Steam)必要資訊的發行版。這個版本不用於直接運行(可能在Mac上根本無法啟動),而用於上傳到app商店。
Warning
Ren’Py生成的zip和tar.bz2文件包含Ren’Py在Linux和Macintosh平台運行的授權資訊。在Windows平台解包zip並重新打包,不能在Linux和Macintosh平台運行。
基本配置 link
透過在build命名空間中設置變數和調用函數,可以對構建過程進行配置。這些工作必須在 init python
語句塊(block)中進行。
這些配置項預設都設置在 options.rpy
中。
有一些基本變數和函數在很多遊戲中都會使用。
- build.name = "..." link
這個變數用於自動生成build.directory_name和build.executable_name,前提是那兩項都沒有設置。這個變數不包含空格、冒號或分號。
- build.directory_name = "..." link
這個變數用於在歸檔文件中創建的目錄名稱。例如,如果這個變數設置為“mygame-1.0”,項目的Linux版本解包後就是“mygame-1.0-linux”。
這個變數也用於決定包(package)文件中的目錄名稱。例如,如果將build.directory_name設置為“mygame-1.0”,最終歸檔文件裡就會在基目錄裡放一個“mygame-1.0-dists”目錄。
這個變數不能包含特殊字元,比如空格、冒號或分號。如果沒有配置,這個變數預設使用
build.name
加英文連接符“-”,再加上config.version
。 和config.version
。
- build.executable_name = "..." link
這個變數控制用於點擊並啟動遊戲的可執行程序名稱。
這個變數不能包含特殊字元,比如空格、冒號或分號。如果沒有配置,這個變數預設使用
build.name
。例如,如果把變數設置為“mygame”,用戶在Windows平台運行mygame.exe,在Macintosh上運行mygame.app,在Linux平台運行mygame.sh。
特殊文件 link
有兩個在遊戲基目錄下的文件,可以用於訂製化構建過程。
icon.ico
Windows平台使用的圖示。
icon.icns
Macintosh使用的圖示。
這些圖示文件必須使用特殊格式。 你可能需要使用一個程序或網路服務 (比如 https://anyconv.com/png-to-ico-converter/ 和 https://anyconv.com/png-to-icns-converter/) 轉換圖片。
歸類和省略文件 link
構建過程的第一步,是將Ren’Py發行版和你遊戲中的文件分類並添加至各個文件列表。這些文件列表會添加為包(package)文件。
文件分類通過build.classify函數實現。這個函數使用一個正則表達式和空格分隔的檔案名列表。正則表達式會從頭到尾對檔案名進行匹配,第一個匹配到的對象優先處理(儘管後面可能有個比較級正則表達式)。正則表達式可以匹配開頭的 “/” 符號。正則表達式包含下列特殊字元:
- /
目錄分隔符號。
- *
匹配所有字元,除了目錄分隔符號。
- **
匹配所有字元。
舉例:
- **.txt
匹配所有txt文件。
- game/*.txt
匹配game目錄下的txt文件。
默認總共有7個文件列表用於文件的分類。(Ren’Py將自身文件放入前6個。)
- all
這些文件會包含在所有包(package)中,構建安卓版本。
- linux
這些文件會包含在Linux平台的包(package)中。
- mac
這些文件會包含在Mactintosh平台的包(package)中。
- windows
這些文件會包含在Windows平台的包(package)中。
- renpy
需要Ren’Py引擎文件的包(package)內文件。(Linux、Macintosh和Windows平台。)
- android
這些文件會包含在安卓版本中。
可以使用 build.classify()
函數的 file_list
參數擴展這個合法文件集。
文件也可以使用傳統的歸檔方式。“archive”規定的定義如下:
- archive
這些文件會包含在archive.rpa歸檔文件中。
歸檔文件集也可以使用 build.archive()
函數擴展。
不在任何分類下的文件都會放入“all”文件列表中。
如果要在發行版中排除某些文件,就將文件歸類為None或空字串。 使用時,檔案名表達式通配符中的 * 和 ** 必須至少能匹配到一個字元。
舉例::
# 包含README.txt。
build.classify("README.txt", "all")
# 排除所有其他txt文件。
build.classify("**.txt", None)
# 將game目錄下的所有png和jpg文件放入歸檔中。
build.classify("game/**.png", "archive")
build.classify("game/**.jpg", "archive")
文件 link
使用正則表達式調用build.documentation函數可以把匹配到的文件標記為文件。在Macntosh版本裡包含兩份文件文件——程序裡一份,程序外一份。
例如,將所有基目錄的txt和html文件標記為文件::
build.documentation("*.txt")
build.documentation("*.html")
Packages link
在Ren’Py構建過程中添加新類型的包(package)也是可行的。調用build.package函數可以實現這點。調用時傳入一個包名、類型和一個包含的文件列表。
假設我們想要構建一個遊戲的普通版本,以及一個包含獎勵材料的版本。我們可以將獎勵文件歸類到“bonus”文件列表中,然後使用如下語句定義一個“all-premuim”包(package)::
# 在“bonus”文件列表中定義一個新的歸檔。
build.archive("bonus_archive", "bonus")
# 將bonux文件放入新歸檔中。
build.classify("game/bonus/**", "bonus_archive")
# 定義包文件。
build.package("all-premium", "zip", "windows mac linux renpy all bonus")
支持構建的包類型包括“zip”和“tar.bz2”格式,以及用於裝文件的目錄“direcroty”。
歸檔文件 link
Ren’Py支持將多個文件合併為單個歸檔格式的文件。這個機制能保護文件免於被臨時複製。
默認情況下,所有歸類為“archive”的文件都會放入歸檔文件archive.rpa中,這個歸檔文件包含所有“archive”列表中的文件。
調用build.archive函數,可以定義一個新的歸檔文件,以及這個歸檔文件中包含的文件列表。(雖然,很少指明具體檔案而是包含所有文件列表。)需要歸檔文件時,就將目標檔案名分類到歸檔的列表中。
例如,下面腳本將所有圖片歸檔到 images.rpa
,遊戲腳本歸檔到 scripts.rpa
:
# 定義兩個歸檔文件。
build.archive("scripts", "all")
build.archive("images", "all")
# 將腳本放入scripts歸檔。
build.classify("game/**.rpy", "scripts")
build.classify("game/**.rpyc", "scripts")
# 將圖片放入images歸檔。
build.classify("game/**.jpg", "images")
build.classify("game/**.png", "images")
如果某個歸檔文件為空,就不會構建。
關於遊戲歸檔的問題,請三思。使用開放文件可能有助於後人在未來的平台上運行你的遊戲——那些你離開這個世界之後才出現的平台。
old-game目錄 link
構建多個遊戲版本,比如早期公測或Patreon平台版本時,有必要保留舊版本的.rpyc文件。 .rpyc文件中包含的資訊可用來確認存檔是否可以繼承,如果忽略這些資訊查可能會引起各種問題。
同時,當game目錄下的文件改變後,Ren’Py會更新對應的.rpyc文件,導致文件無法適用版本控制的要求。
為了解決這個問題,Ren’Py允許創作者將前一個版本的.rpyc文件放入 old-game/
目錄中,該目錄與 game/
目錄平行。
old-game的目錄結構會與game目錄保持一致,比如 game/scripts/day1.rpyc
文件移動後會成為 old-game/scripts/day1.rpyc
。
非.rpyc文件將會忽略。
使用old-game的優勢是,Ren’Py總是會根據已知的代碼改動在old-game生成.rpyc文件。 對個人開發者來說可能沒什麼用,對大一些的多人開發遊戲項目則會有幫助。
關於在遊戲變更後,如何使用.rpyc文件幫助實現存檔繼承的資訊,可以查看下面的連結:
運行環境要求 link
一些網路商店會詢問Ren’Py程序的運行環境要求。雖然各個遊戲的實際要求並不相同,這裡還是給出了運行大多數視覺小說的最基礎配置。
Windows
版本:Windows 7或以高。
處理器:2.0 GHz Core 2 Duo
記憶體:2.0 GB
顯示卡支持:OpenGL 3.0或DirectX 11
macOS
版本:10.6+
CPU: 2.0 Ghz 64-bit Intel-compatible (Apple silicon supported through Rosetta 2)
處理器:2.0 GHz 64位英特爾相容(蘋果silicon系列使用Rosetta 2支持)
記憶體:2.0 GB
顯示卡支持:OpenGL 3.0
Linux
版本:Ubuntu 16.04+
處理器:2.0 GHz 64位英特爾相容
記憶體:2.0 GB
顯示卡支持:OpenGL 3.0
對磁碟空閒空間的大小則完全取決於遊戲自身,並且對處理器和記憶體的要求可能會不同。 Ren’Py可以運行在OpenGL 2,以便使用某些擴展。
構建(build)函數 link
- build.archive(name, file_list='all') link
聲明某個歸檔文件。如果一個或多個文件歸類為 name ,就會生成一個 name.rpa 歸檔文件。歸檔包含對應名稱的列表中的文件。
- build.classify(pattern, file_list) link
將匹配 pattern 的文件歸類為 file_list 。
- build.clear() link
清空用於文件分類的正則表達式列表。
- build.documentation(pattern) link
定義正則表達式 pattern 用於匹配文件類文件。在生成mac版本app時,匹配文件正則表達式的文件會儲存兩份——app包內一份,app包外另一份。
- build.executable(pattern) link
添加將文件標識為支持平台(Linux和Macintosh)可執行程序的正則表達式。
- build.package(name, format, file_lists, description=None, update=True, dlc=False, hidden=False) link
定義一個包(package),這個包由打包工具生成。
- name
包(package)名稱。
- format
包的格式。這是一個由空格分隔的字串,由下列要素組成:
- zip
zip文件。
- tar.bz2
tar.bz2文件。
- directory
包含文件的目錄。
- dmg
包含文件的Macintosh平台DMG文件。
- app-zip
包含Macintosh應用程式的zip文件。
- app-directory
包含mac應用程式的目錄。
- app-dmg
包含dmg文件的macintosh鏡像。(僅限Mac平台。)
空字串則不構建任何格式的包(package)。(這個機制可以實現DLC需求。)
- file_lists
包含在包(package)中的文件列表。
- description
構建包(package)的可選項描述。
- update
若為True並且構建了更新,就會為這個包(package)構建更新文件。
- dlc
若為True,會在獨立的DLC模式下構建zip或tar.bz2文件,而不是update目錄下構建。
- hidden
若為True,會在啟動器(launcher)的包(package)列表中隱藏這個包。
構建資訊 link
有兩個變數會用作提供構建資訊。這些資訊會用於生成game/cache/build_info.json文件,並在Ren’Py啟動時載入。
- build.time = None link
該變數預設值為None。一旦生成遊戲包,會變為一個時間戳,即從1970年1月1日開始計算的秒數。
- build.info = { } link
該變數可以在構建遊戲時將創作者設置的資訊儲存在game/cache/build_info.json文件中。 遊戲啟動時,game/cache/build_info.json會被載入,並將資訊放入同名變數。
總體上,創作者只需要檢查文件是否存在,並使用setdefault方法獲取對應資訊。
例如,下面的代碼可以在在build_info.json文件中儲存構建遊戲包的計算機名:
python hide: import socket build.info.setdefault("build_host", socket.gethostname())
該變數能儲存的資訊自身必須是JSON文件能保存的類型。(包括None、布爾型、字串、數值、列表和字典)
高級配置項 link
下列配置變數提供了對構建過程的更多控制項:
- build.allow_integrated_gpu = True link
在同時包含集成顯示卡和獨立顯示卡的平台上,允許Ren’Py運行在集成顯示卡上。目前,這個功能僅在Mac OS X上支持。
- build.destination = "{directory_name}-dists" link
指定了構建的歸檔文件放的目錄路徑。可以是絕對路徑也可以是相對路徑。相對路徑將項目(project)目錄作為當前位置。
下列值會使用Python的str.format函數進行替換。
{directory_name}
build.directory_name的值。
{executable_name}
build.executable_name的值。
{version}
build.version的值。
- build.change_icon_i686 = True link
若為True並且 icon.ico 文件存在,32位Windows可執行程序的圖示可以被修改。 若為False,圖示不能修改。將該值設置為False可以防止某些防毒軟體對遊戲文件更改導致的問題。
- build.exclude_empty_directories = True link
若為True,空目錄(包括文件歸檔後殘留的空目錄)會從構建的包(package)中移除。若為False,則會包含空目錄。
- build.include_i686 = True link
若為True,構建Linux和Mac版本時,將包含在32位x86處理器平台運行時需要的文件。 若為False,將不包含那些文件。
- build.include_old_themes = True link
當這項為True時,文件需要在Ren’Py 6.99.9版本之前支持的主題文件會包含在構建的包中。當這項是False時,不會包含這類文件。
調用
gui.init()
時,這項會被設置為False。
- build.itch_project = None link
配置了這項後,就允許Ren’Py啟動器將項目上傳到itch.io。這項應該設置為在itch上註冊的項目名。(例如,“renpytom/the-question”。)
一旦設置了這項,你可以點擊“構建發行版”,然後選擇“上傳到itch.io”,將構建的版本上傳。
- build.itch_channels = { ... } link
該項將一個檔案名通配表達式(比如 *-win.zip)映射為一個字串,對應 itch 平台對應的上傳通道。 預設值如下:
{ "*-all.zip" : "win-osx-linux", "*-market.zip" : "win-osx-linux", "*-pc.zip" : "win-linux", "*-win.zip" : "win", "*-mac.zip" : "osx", "*-linux.tar.bz2" : "linux", "*-release.apk" : "android", }
- build.mac_info_plist = { } link
該配置項是一個字典型數據,鍵和值都是字串。用於添加或覆蓋mac中的Info.plist文件。
- build.update_formats = [ "rpu" ] link
更新器支持的格式列表。預設值為“rpu”,在Ren’Py 7.7和8.2以上版本支持。 若需要支持更早基於zsync的更新,則在列表中添加“zsync”。
- build.game_only_update = False link
If true,
build.include_update
is enabled, and the “Game-Only Update for Mobile” package becomes available. 若為True,啟用build.include_update
,並設置為“Game-Only Update for Mobile”。