Ren’Py包含了對生成遊戲分發版的支持。在啟動器(laucher)選擇“生成分發版”,Ren’Py會掃描自身和項目,決定分發版中包含哪些文件,並創建需要的歸檔文件,以及生成包(package)和升級文件。
不需要額外設置,Ren’Py就可以生成下列類型的包(package):
Warning
Ren’Py生成的zip和tar.bz2文件包含Ren’Py在Linux和Macintosh平台運行的授權訊息。在Windows平台解包zip並重新打包,不能在Linux和Macintosh平台運行。
透過在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。
build.executable_name = “…” link這個變數控制用於點擊並啟動遊戲的可執行程序名稱。
這個變數不能包含特殊字元,比如空格、冒號或分號。如果沒有配置,這個變數預設使用 build.name。
例如,如果把變數設置為“mygame”,用戶在Windows平台運行mygame.exe,在Macintosh上運行mygame.app,在Linux平台運行mygame.sh。
有兩個在遊戲基目錄下的文件,可以用於訂製化生成過程。
這些圖示文件必須使用特殊格式。你可能需要使用一個程序或網路服務 (比如 http://iconverticons.com/ ) 轉換圖片。
生成過程的第一步,是將Ren’Py分發版和你遊戲中的文件分類並添加至各個文件列表。這些文件列表會添加為包(package)文件。
文件分類通過build.classify函數實現。這個函數使用一個正則表達式和空格分隔的檔案名列表。正則表達式會從頭到尾對檔案名進行匹配,第一個匹配到的對象優先處理(儘管後面可能有個比較級正則表達式)。正則表達式可以匹配開頭的 “/” 符號。正則表達式包含下列特殊字元:
舉例:
默認總共有7個文件列表用於文件的分類。(Ren’Py將自身文件放入前6個。)
不在任何分類下的文件都會放入“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")
使用正則表達式調用build.documentation函數可以把匹配到的文件標記為文件。在Macntosh版本裡包含兩份文件文件——程序裡一份,程序外一份。
例如,將所有基目錄的txt和html文件標記為文件::
build.documentation("*.txt")
build.documentation("*.html")
在Ren’Py生成過程中添加新類型的包(package)也是可行的。調用build.package函數可以實現這點。調用時傳入一個包名、類型和一個包含的文件列表。
假設我們想要生成一個遊戲的普通版本,以及一個包含獎勵材料的版本。我們可以將獎勵文件歸類到“bonus”文件列表中,然後使用如下語句定義一個“all-premuim”包(package)::
build.package("all-premium", "zip", "windows mac linux all bonus")
支持生成的包類型包括“zip”和“tar.bz2”格式,以及用於裝文件的目錄“direcroty”。
Ren’Py支持將多個文件合併為單個歸檔格式的文件。這個機制能保護文件免於被臨時複製。
默認情況下,所有歸類為“archive”的文件都會放入歸檔文件archive.rpa中,這個歸檔文件包含所有“archive”列表中的文件。
調用build.archive函數,可以定義一個新的歸檔文件,以及這個歸檔文件中包含的文件列表。(雖然,很少指明具體檔案而是包含所有文件列表。)需要歸檔文件時,就將目標檔案名分類到歸檔的列表中。
例如,下面腳本將所有圖片歸檔到image.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")
如果某個歸檔文件為空,就不會生成。
關於遊戲歸檔的問題,請三思。使用開放文件可能有助於後人在未來的平台上運行你的遊戲——那些你離開這個世界之後才出現的平台。
生成多個遊戲版本,比如早期公測或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文件幫助實現存檔繼承的訊息,可以查看下面的連結:
一些網路商店會詢問Ren’Py程序的運行環境要求。雖然各個遊戲的實際要求並不相同,這裡還是給出了運行大多數視覺小說的最基礎配置。
Windows
macOS
Linux
對磁碟空閒空間的大小則完全取決於遊戲自身,並且對處理器和記憶體的要求可能會不同。
build.archive(name, file_list=u'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),這個包由打包工具生成。
包的格式。這是一個由空格分隔的字串,由下列要素組成:
空字串則不生成任何格式的包(package)。(這個機制可以實現DLC需求。)
下列配置變數提供了對生成過程的更多控制項:
build.allow_integrated_gpu = True link在同時包含集成顯示卡和獨立顯示卡的平台上,允許Ren’Py運行在集成顯示卡上。目前,這個功能僅在Mac OS X上支持。
build.destination = “{directory_name}-dists” link指定了生成的歸檔文件放的目錄路徑。可以是絕對路徑也可以是相對路徑。相對路徑將項目(project)目錄作為當前位置。
下列值會使用Python的str.format函數進行替換。
{directory_name}{executable_name}{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.mac_info_plist = { } link該配置項是一個字典型數據,鍵和值都是字串。用於添加或覆蓋mac中的Info.plist文件。