構建發行版 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.include_update = False link

若為True,Ren’Py會根據 updater 的設置構建文件。

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”。