變更日誌(Ren’Py 7.x-) link

其他內容記錄在 不相容的變更

8.2.1 / 7.7.1 link

文本 link

使用Harfbuzz文字渲染器能獲取更多文字資訊。改動後,大部分情況下得到的結果不變。 某些情況下少量變動,比如下劃線位置會有一點變化。

使用Harfbuzz渲染垂直文本的位置問題已修復。同時,freetype不再支持垂直文本。

詳見 vertical

更新器 link

Windows平台更新器對更新簽名失敗的某個問題已修復。

更新器將強制讓Web伺服器使用指定的編碼,這樣能提升某些Web伺服器的相容性。 此外,若伺服器10秒無響應,更新器將超時退出。

Live2D link

Ren’Py將自動猜測Live2D紋理尺寸,並調整相應的Live2D庫匹配最大紋理尺寸。

顯示Live2D圖像時,Ren’Py會盡量避免過多的“渲染到紋理”操作。

Fetch link

renpy.fetch() 函數可以在處理圖像和互動期間同時執行,不會干擾互動操作。

renpy.fetch() 函數新增 params 入參,用於指定請求URL時用到的參數。

其他變更項 link

(使用{w})替換某個textbox組件後,將產生 replaced 事件,而不是hide事件。

添加帶有 default_focus 特性的可視組件後,該組件就會獲得焦點,不需要重啟互動系統。

可以使用命令行發布iOS版本應用,不再需要安裝rapt(安卓相關支持)。

Ren’Py使用的最大紋理尺寸配置項改名為 config.max_texture_size。 該配置項不對2D紋理生效,僅用在 Model 紋理。

項目模板 不再要求必須含有所有Ren’Py基本項目同名的文件。

其他修復項 link

安卓設備上從暫停狀態恢復後可能會黑屏的問題已被修復。

Ren’Py運行時可以在目錄中包含英文引號“:”。引號在Linux等系統中是合法的目錄字元。

camerashow layerat 語句的時間軸不會受到 config.layer_transforms 的影響而重設。

LayeredImage使用未賦值變數時,Lint不會崩潰。

blur 的值小於0導致的崩潰問題已解決。已經對模糊的值做了範圍限制(clamping)。

拖拽組件無法保存的問題已修復。

8.2.0 / 7.7.0 link

集成Harfbuzz字體渲染 link

從此版本開始,Ren’Py使用Harfbuzz庫實現文本渲染。 在所有版本的Ren’Py中,Harfbuzz渲染器都會提供額外資訊,彌補Freetype渲染器。

在Ren’Py 8里,Harfbuzz也直接用於渲染文本。其會根據上下文和語言類型,記錄和選擇合適的字形。 該功能可用於渲染複雜的文本,比如印地/婆羅米文等(同時需要準備好對應語言的字體檔案)。

新增樣式特性 shaper,用於選擇文本渲染器,同時相容舊版本Ren’Py。

Emoj表情的提升 link

Ren’Py可以渲染基於COLRv0標準的彩色字體。此新版本內建字體包含Twiemoji圖片,覆蓋了常用Emoji表情的大部分(但還不是全部表情)。

Emoji 15.1 standard. 當Ren’Py發現文本中的Emoji字元時,會自動切換到Emoji字體。所以支持的字元都在 Emoji 15.1 標準中。

使用Harfbuzz字體渲染器的Ren’Py 8可以渲染Emoji連接起來的序列,包括性別和膚色修飾符。 不使用字體標籤的情況,會自動切換字體渲染。

新增樣式特性 emoji_fontprefer_emoji,用於選擇Emoji字體。

最基本的用法是,在遊戲腳本中直接寫入Emoji。例如:

e "I'm feeling 😃 today."

可變字體 link

當前版本Ren’Py支持OpenType的可變字體。可變字體透過若干個axe來控制字體的渲染效果。 例如,字體如果有名為“weight”的axis,就可以控制字體粗細;字體如果有名為“width”的axis,就可以控制字體寬度。

必須使用Ren’Py 8的Harfbuzz字體渲染器,才能支持可變字體。

為了支持可變字體,Ren’Py新增了樣式特性 instanceaxis, 文本標籤(tag) instanceaxis,以及函數 renpy.variable_font_info()

詳見 可變字體檔案

字體微調 link

特性 hinting 新增了模式“auto-light”,會在垂直方向自動微調文本。

新增配置項 config.font_hinting,可以對每一種字體設置不同的微調模式。例如:

define config.font_hinting["MyFont.tff"] = "bytecode"

只針對字體MyFont.ttf,將其微調模式設置為“bytecode”。

文本內插提升 link

字串內部的插值會以Python表達式形式處理,而不再看作簡單的欄位。 由於沒有縮進,現在風格類似於Python的字串格式化。這項改進可以在文本內插時放入一些簡單邏輯。

default exp = 1000

label start:
    e "我的等級是LV [exp // 225] !" # 將顯示 "我的等級是LV 4 !"

使用變數內插字串時,如果存在命名空間interpolate,則優先搜索和應用interpolate中的同名變數。 例如:

define t = "不顯示。"
define interpolate.t = "顯示。"

label start:
    e "[t]" # 將會顯示 "顯示。"

氣泡式對話提升 link

Ren’Py 8.1新增的氣泡式對話功能增加了一種方式能保留對話氣泡。氣泡會逐個彈出並覆蓋在前面的氣泡上, 但不會消失,直到界面顯式清理所有氣泡。整個效果類似於動態漫畫中的對話。 詳見 氣泡式對話文件

新增配置項 bubble.properties_callback,可以指定一個函數用作過濾器,基於對話角色的圖像標籤(image tag)篩選特定氣泡。 該功能可以篩選某些角色的對話氣泡,用於後續處理。

把一些改動結合起來使用,就能在氣泡的出現和消失上添加動效。具體的例子可以在 bubble界面 文件中找到。

坐標類型和ATL插值 link

ATL插值,比如語句 linear 1. xpos .6,現在可以使用不同的坐標類型數據來計算。 下面的例子在之前的版本中是明確禁止且無法運行的,現在則可以使用:

transform mixed:
    xycenter (520, 300)
    easein 3. align (.0, .0)

label muxed:
    show a at Transform(pos=(.5, .6))

    "..."

    show a at Transform(pos=(520, 150))

作為新功能特性成果的一部分,新增了一個 position 數據類型,即 position 類。 該類可以使用一個絕對象質數和一個組件比例值,指定一個可視組件的位置或者尺寸。 例如,可以將某個值指定為 xsize position(-10, .5),使用該值的可視組件就可以算出另一個數值並調整自己寬度,其是可視組件寬度的一半並減10。

開發工具 link

啟動器設置中的選項頁面,新增了一個“Skip splashscreen”勾選項。 勾選該項後,遊戲啟動會跳過splashscreen腳本標籤。

使用Shift+D進入開發者菜單後,可以看到一個新增的“Show Filename and Line”勾選項。 啟用該選項後,可以看到當前語句所對應的腳本檔案名和所在的行號。 滑鼠點擊文件和行號,就會在預設的文本編輯器中打開腳本文件。 如果該編輯器支持的話,甚至直接跳轉到對應的行。

數據行為 link

數據行為 文件進行了重新組織,使其更容易理解。 數據行為根據其操作類型(Set-, Toggle-, Cycle-, Increment-)和目標作用域範圍(-Variable, -ScreenVariable, -LocalVariable, -Field, -Dict)放入一個表格中。

新增兩類操作:

  • Cycle- 類行為(CycleVariable, CycleLocalVariable, CycleField…)會從一個列表中按順序選取元素並修改變數的值。 在每次執行某個行為時(比如點擊按鈕),並將目標變數的值設置為列表中下一個元素的值。 (譯者註:即Ren’Py記錄列表索引。每次將列表索引對應元素賦值給目標變數後,索引加1。索引超出列表長度時,索引號歸0。)

  • Increment- 類行為(IncrementVariable, IncrementDict, IncrementField…)會使目標變數增加一個固定數值(預設為加1)。 此類行為也可以用於某個對象的欄位。

考慮到完整性,新增了 LocalVariableValueLocalVariableInputValue 兩個類。

HTTPS/HTTP Fetch link

Ren’Py now has better support for fetch形式的HTTPS/HTTP請求, using the new renpy.fetch function. While the Requests library still remains supported on Desktop and Mobile, (it’s used internally by Ren’Py), the new fetch function: Ren’Py使用新的 renpy.fetch() 函數,能更好支持 fetch形式的HTTPS/HTTP請求。 Requests庫依舊保留在電腦和移動平台上(在Ren’Py內部使用)。新的fetch函數有如下功能:

  • 可以使用GET、POST和PUT方式請求HTTPS和HTTP協議的URL。

  • 符合Web平台規則的情況下,可以用fetch方式從Web端獲取數據。

  • 下載時不會阻塞遊戲運行。

  • 能獲取二進位制或數據對象形式編碼的Json數據。

  • 可以返回二進位制、字串或數據對象形式編碼的Json數據。

Accessibility link

新增特性 group_alt 。創作者可以指定一段文本,使自動語音系統首次遇到組內可視組件時播放指定文本對應語音。

新增特性 extra_alt 。創作者可以指定一段文本,當用戶按下鍵盤問號鍵時,自動語音系統播放對應指定文本語音,提供可視組件的額外資訊。

可視組件設置了上述兩項特性後,其子組件都會繼承相同的特性。 除非子組件自身設置了不同的值,覆蓋父組件的特性。

新增 renpy.alt() 函數,可以通過自動語音系統播放指定文本。

Python中的 __future__ link

此版本Ren’Py允許創作者使用Python代碼中使用 __future__ compiler directives 。 若要使用該功能,需要在.rpy文件頂部添加 rpy python xxx。其中的 xxx 就是未來(future)功能特性。 例如:

rpy python annotations

多語言支持提升 link

Ren’Py目前針對大多數對話,只會創建三分之一的對象用於支持多語言。 這樣減少了啟動時間和記憶體占用。

此外,Ren’Py可以在明確切換到其他語言之前,不載入多語言相關內容。 這樣減少了啟動時間,在遊戲很大並且可選語言很多的情況下效果顯著。

延遲多語言載入功能默認情況下禁用。翻譯文件延遲載入 文件描述了如何啟用該功能。

scene、show和hide語句中的轉場 link

scene、show和hide語句新增自動轉場的設置。只要這些語句後面不帶with從句或widown show,就會自動應用。

此功能用到新增配置項 _scene_show_hide_transition,詳見文件 在scene、show和hide語句後自動應用轉場

安卓 link

安卓的發布系統已升級,使用Gradle和安卓Gradle插件的近期新版本。 因此Ren’Py也支持和要求使用Jave 21——最近長期支持(Long Term Support)的Jave版本。

Ren’Py做了一系列改動,終於可以在安卓和蘋果設備上,下載大於2GB的遊戲。 具體內容詳見 手機端下載大容量遊戲。大體來說,就是把遊戲分成兩部分。 將較小的一部分下載到設備上後,再通過該遊戲下載大的另一部分。而較大的部分才是實際遊戲內容。

安卓版對遊戲課件的版本號從配置項 build.version 獲取。其預設值與 config.version 相同。

放在目錄 rapt/prototype 中的遊戲資源會放入生成的項目目錄中。

生成的安卓版檔案名會包含版本號,便於區分。

Web link

Web平台的全螢幕實現方式發生變化,提高了電腦和行動端Web瀏覽器的相容性。

Ren’Py會在遊戲開始時,頂部覆蓋一個div透明組件,協助瀏覽器檢測點擊事件並播放音訊。 div組件會把點擊事件重定向到遊戲,等檢測完成後隱藏自身。

fetch形式的HTTPS/HTTP請求 函數也可以在Web平台使用,只要只要符合相關規則(CORS),就能向其他頁面發送http和https請求。

更新器 link

Ren’Py更新器 已完全重構。其相容更多Web伺服器,並且首次支持https協議。

更新器首次運行時將創建一個簽名金鑰(signing key),並使用該金鑰對更新文件簽名。 更新器運行時後,會使用金鑰檢查更新。 This means it is no longer extra work to produce a secure update.

多語言支持 link

啟動器和樣例項目增加了丹麥語。

其他語言也做了一些更新。

功能特性 link

配置項 config.layer_transforms 可以為各個圖層指定一個變換列表並應用, 也可以為定義在 config.layers 中的所有圖層設置完全相同的變換列表。

新增行為 Continue,能直接載入最新存檔(默認情況下包括自動存檔和快速存檔)。 該行為設計用於快速繼續遊戲,特別是完全線性的視覺小說。

新增樣式特性 ruby_line_leading,用於控制包含ruby文本(片假名)時的額外行距。 該特性通常使用的行距會比 line_leading 小一些。

可以使用參數“reset”調用 Preference(),將環境設定(preference)重設為預設值。

新增 defaultdict 類,存在於Ren’Py預設的命名空間中,類似於Python的collections.defaultdict, 能夠在滾回操作中同步回滾數據。

新增 MultiRevertable 類。可以該基類派生出子類,同時擁有可恢復對象和可恢復數據結構(類似列表、集合和字典)的特點。

新增配置項 config.pass_controller_eventsconfig.pass_joystick_events, 讓遊戲可以直接獲取控制器和手把的操作。

新增函數 renpy.get_screen_variable()renpy.set_screen_variable(),可以操作界面變數。 主要通過 Action 的派生類操作。

新增變數 build.time,可以設置遊戲生成時間。

新增變數 build.info,可以在儲存生成資訊,並在發布版中也能看到這些資訊。

載入等待 畫面左上角像素為透明時,載入等待畫面會顯示在一個window組件中,並以單位元組表示不透明度。 (譯者註:通常不透明度是8位元組。)

新增行為 EditFile(),用於在文本編輯器中打開一個文件。

SVG文件的虛擬dpi值可以用於設置 Image() 新增的 dpi 參數。

新增行為 CopyToClipboard(),可以把文本複製到剪貼板。

新增函數 renpy.confirm(),能使用Python代碼彈出確認界面。

新增函數 renpy.reset_all_contexts(),移除棧中所有上下文(context),並根據下一條語句創建新的上下文。 可以在讀檔或報錯之後使用該函數。

新增函數 renpy.last_say(),返回最後一條say語句的資訊。

新增函數 iap.request_review(),可以向Google Play和蘋果App Store發送用戶評分請求。

新增變數 gui.history_spacing,可以控制新創建的項目中,各段對話歷史的間隔。

新增文本標籤(text tag) nw,可以指定一個等待時間(單位為秒),之後立刻顯示標籤內文本。 之前的常用寫法“{w=2}{nw}”,現在可以寫作“{nw=2}”。

Movie 類新增參數 keep_last_frame。當該參數為True時,非循環播放的影片播放結束後將顯示最後一幀畫面。

jump expression 語句可以使用“.local_name”格式的本地腳本標籤名。 之前只能使用“global_name”和“global_name.local_name”格式的腳本標籤名。

創作者定義的界面語言語句 可以從其他界面語言語句複製所有特性(property)。

新增函數 renpy.invoke_in_main_thread(),可以使用Python執行緒在Ren’Py主執行緒中調用函數。 (大多數Ren’Py函數都只能在主執行緒中調用。)

啟動器變更項 link

啟動器新增 項目模板 功能。該功能主要用於替換默認GUI之後新建的項目。 若使用項目模板創建新項目,Ren’Py會將模板內的文件複製到新項目,並更新項目名和翻譯文件,但不會修改腳本和其他圖片文件。

啟動器界面布局略有調整,減少了一些空白區域,可以在某些界面容納更多選項。 同時依然為多語言保留了足夠空間。

新增 命令行互動界面 部分的文件。現在可以通過命令行發布Ren’Py遊戲。

其他變更項 link

變換事件hide和relace應用到界面後會執行完,即使在隱藏過程中遇到讓同一界面再次顯示的事件, 也會先徹底隱藏或替換,再重新顯示。 這樣可以解決某些界面在隱藏過程中突然要求再次顯示的問題,比如say界面和氣泡。

當前版本開始,容器型組件(包括fixed、hbox、vbox、side、grid、viewport和vpgrid)會將變換事件(hover、idle、insensitive、selected_hover和selected_idle) 透傳給自身的子組件,也就是說某個按鈕的子組件可以針對各種事件編寫變換效果。

persistent._clear() 函數會重新運行所有default語句,並更新持久化變數。但可以避免所有持久化數據都變回初始值。

focus_mask 使用像素不透明測試時,會讓GPU僅僅對不透明像素包圍框內做測試。 這在某些情況下可以提升性能。

從此版本起,Ren’Py全平台都是用GL2作為默認渲染器,並忽略配置項 config.gl2 。 舊的GL渲染器上報告的各種問題,在GL2渲染器上都沒有出現。 若使用比較古老的硬體,依然可以使用快捷鍵Shift+G啟用GL渲染器。

在電腦平台(Windows、Mac和Linux)上,當遊戲窗口移動後,Ren’Py將記錄窗口坐標。 當遊戲再次運行時,窗口坐標將恢復成記錄的值,但有前提:

  • 玩家多個顯示器的布局沒有改變。

  • 遊戲窗口整個都在玩家顯示器的顯示範圍內。

其他情況下,窗口都會顯示在主顯示器中心。

在控制器方面(包括Steam Deck),B鍵的功能改為顯示和隱藏遊戲菜單。 之前的B鍵的功能是某個鍵的變種,現已轉移到X鍵。

在安卓和蘋果iOS設備上,預設啟用影片播放硬體解碼。Ren’Py在2020年時,取消了預設啟用該功能。

此版本Ren’Py會將角度值強制限制在0到360度範圍內,包括0度但不包括360度。 之前的版本中,超過這個範圍的角度未明確定義。變化360度不再能顯示動效,因為該值與0度相同。

使用ATL中的 angleanchorangle 特性製作動效時,如果沒有指定旋轉方向則會使用劣弧,儘管這樣旋轉角度可能會小於0度。

Ren’Py遇到空的ATL代碼塊時將報錯。(例如,show eileen happy: 後面沒有內容時。)

為了在UI層面適配某些從右往左書寫的語言文字,box_reverse 樣式在兩方面做了調整:

  • 啟用 box_reverse 後,計算界面內各可視組件布局位置時,將按照與普通布局完全相反的順序, 計算和添加各組件的額外空白。添加的額外空白可能會改變某些可視組件的尺寸。

  • 擁有 box_wrap 特性的hbox組件會從上往下組織子組件,而不是從下往上。 擁有 box_wrap 特性的vbox組件會從左往右組織子組件,而不是從右往左。

某個文件導致自動重新載入時,Ren’Py會檢查包含該文件所有上層目錄是否有git鎖定文件。 自動重新載入會在git相關操作完成後,所有鎖定文件都移除後再執行。

AV1 movies that contained an previously-unsupported colorspace conversion could cause Ren’Py to crash, and now will play properly. 之前AV1編碼的影片可能包含不支持的色彩空間轉換,並導致Ren’Py崩潰。現在可以正常播放了。

Ren’Py 8內建了websockets包,可用於在電腦和手機端(還不包括Web)連接基於Web Socket的API。 由於websockets包依賴Python 3,所以Ren’Py 7里沒有此包。

8.1.3 / 7.6.3 link

變更項 link

Ren’Py可能在後續的macOS版本中,將 config.gl2 設置為True。 因為有一些針對窗口大小調整的修復項,僅僅對gl2渲染器有效。

Windows和Linux平台再次啟用了MMX,實現影片播放加速。

Steam Deck主機的軟鍵盤顯示方式發生改變。僅在進入文本輸入狀態時,才會顯示軟鍵盤。 默認情況下,軟鍵盤開頭會覆蓋在所有界面之上。 在某些導致軟鍵盤被隱藏的操作(比如按下Steam Logo按鍵)後,用戶需要同時按下 Steam+X 按鍵,才能再次顯示軟鍵盤。 該變更項是為了解決Steam Deck自身的缺陷。

32位Windows版的Live2D庫已裝入Ren’Py 7。可能需要重新安裝Live2D相關組件才能使用該庫。

修復項 link

按鍵映射系統無法識別鍵盤與文本綁定關係的某個問題(例如,可以識別“r”而不是別“K_r”)已修復。

文件方面做了一些修正。

遊戲開頭的某個回滾問題已修復。

8.1.2 / 7.6.2 link

變更項 link

此版本有多處文件方面的提升。

使用 renpy.classify() 時,結尾不帶 / 的目錄名也能識別 (比如“renpy.app”會識別為 renpy.app 目錄)。

ATL改為深度比對之後再決定,繼續動效還是重啟。 也就是說,某些全局變數改變後,相關的變換會重啟。

viewport組件的子組件由於拖拽而獲得焦點時,將無法更改樣式。 涉及這項變更的情況很少見。在拖拽過程中更改樣式可能會拖拽響應變慢或無響應。

讀檔後,回滾可以退到上一條帶互動的語句。(之前的版本最多只能退到存檔點的第一條語句開頭。) 這個變更項使用戶讀檔後可以使用更多回滾操作。

配置項 _autosave 能對強制自動存檔的點也生效,包括退出遊戲和分支選擇菜單。

從啟動器運行某個Ren’Py項目時,Python變數的值會從環境變數配置中篩選並應用。

自動語音模式下,提示窗口消失後,Ren’Py依然會努力確保念完整條提示窗口的內容。

自動語音播放界面內容的順序改為從最頂層到底層。

Frame() 組件要求繪製的圖像至少有1像素。

renpy.pause() 函數可以前向滾動到call或jump點。

在Web瀏覽器中,"display" : "window" 可以禁用全螢幕模式。

可以綁定滑鼠按鍵用於快進(skipping)。

修復項 link

Web端進入全螢幕時的問題已經修復。

在Windows平台上,由於系統文字編碼問題導致Ren’Py用到的環境變數Path不可用時,Ren’Py 8啟動器依然可以運行遊戲。

從 game/ 目錄導入的Python功能做了提升,更好地適配Python PEP 302 標準。

該修復項還有個副產物,在開發者模式的“幫助”界面會顯示gamepad界面。

界面的歧義分析系統導致的一個問題已修復。之前該問題可能會使某些變數不可用。

在互動行為重啟動畫時,viewport的慣性表現依然有效。

play語句 (以及 renpy.music.play() 函數)中出現 if_changed 從句則會阻止循環。

Linux系統上啟動VS Code時的問題已修復。

Ren’Py 7在Web端的某些崩潰問題已修復。

Movie函數會在播放影片前確認對應的通道(channel)可用。 此項解決了從存檔文件中載入影片可能出現的問題。

8.1.1 / 7.6.1 link

安卓 link

創建安卓版本金鑰(key)時,Ren’Py會讓APK和Bundle兩種安裝包使用相同金鑰。 新遊戲用兩個不同金鑰確實沒必要。 (對於已經之前的遊戲,Ren’Py依然會繼續使用已存在的兩個不同金鑰。)

我們收到了一些報告,有人把APK和Bundle使用不同金鑰的遊戲上傳到Google Play後,被拒(rejected)了。 這是某個較早版本Ren’Py導致的問題,將APK的金鑰誤用到Bundle中。 解決方法詳見 不相容的變更

修復項 link

Preference() 中的“系統游標”可以使用 config.mouse_displayable 配置的滑鼠圖案。

Web端的音訊系統會將結束時間處理為一個時間戳,而不是一個時長。

回滾後音量和聲相相關的某個問題已修復。

Live2D圖像屬性(attribute)不全導致可能會發生的問題已修復。

支持影片的開頭、結束和循環時間。

Imagemap自身不是常量(const)時,其內部的Hotspot也不再是常量(const)。

macOS上,導致某些window組件無法改變尺寸的一個問題已修復。

font目錄下關於Lint字體的一個問題已修復。

在某些情況下,某個從其他基類派生的類,如果改成不從基類派生的話,Ren’Py可能會崩潰(crash)。 現在Ren’Py會追蹤這個錯誤,並且通過設置 config.ex_rollback_classes 項可以抑制報錯。 此類報錯只會向開發者展示,正常遊戲時後台直接忽略。

其他變更項 link

Ren’Py可以使用樣式前綴 sync 實現界面同步。不需要編輯界面,只需要一些基礎的訂製化設置即可實現。

禁用文本編輯功能後,Ren’Py會禁用text組件的input方法。這樣在input允許空格鍵的情況下,依然可以使用空格鍵直接讓遊戲劇情前進。

ATL轉場使用了動畫時間軸。指向改動旨在解決某些互動重啟後,轉場無法正常展現的情況。

所有環境設定配置(preference)都不在有預設值。 所有配置項都可以使用 default 語句修改值。

absolute() 表示一個絕對的像質數,現在會確保參與計算的整數和浮點數都會轉為絕對數值。 該變更修復了某個類,使用absolute類參數時會產生錯誤結果並導致布局出錯的問題。

Live2D系統會在計算某個 attribute_filter 後檢查結果動作,並直接開始演出新動作。

8.1 / 7.6 link

文件提升與修復項 link

文件提升與修復了多處,很多內容並沒有記錄在變更日誌中。

文件使用了新的主題,以及夜間模式。

Ren’Py同步 link

Ren’Py同步是一個新特性。其可以將某個伺服器作為整個Ren’Py項目的一部分,使同一個Ren’Py項目可以在不同設備間更便利地傳輸文件。 舉例來說,某個用戶在自己電腦上點擊“Upload Sync”上傳存檔並得到一個驗證碼。 之後可以在自己手機上選擇“Download Sync”並輸入驗證碼,就可以下載最新存檔,並在出門時繼續玩遊戲。

Ren’Py同步被設計為能保障隱私。存檔需要加密,並且只有遊戲標題的哈希值被傳送到伺服器端。

Ren’Py同步功能可以通過新增的兩個類 UploadSyncDownloadSync 來實現。

氣泡式台詞 link

當前版本的Ren’Py包含了一個全新的 氣泡式台詞 系統。 氣泡式台詞系統可以讓角色以類似於漫畫對話的形式展示,並包含一個可交互編輯器用於對話氣泡調整位置和根據互動調整氣泡形狀。

如要要在某個已經完成的遊戲中添加氣泡式台詞,需要在遊戲中添加一些文件和腳本。 氣泡式台詞章節文件詳述了需要修改的內容。

各平台提升 link

web link

Ren’Py 8.1可以創建直接運行在Web瀏覽器上的遊戲。 在Web瀏覽器上運行遊戲時,Ren’Py使用Python 3.11版本(其他平台則使用Python 3.9版本)。

從Ren’Py 8.1開始,Ren’Py可以直接創建在瀏覽器上運行的web應用。 創建的web應用可以與原生應用程式類似的方式安裝在設備上,當然實際過程也取決於具體的瀏覽器和系統平台。 其他平台則可以在Home界面生成對應web應用的快捷運行路徑。

Preference() 中新增“web cache preload”設置項。 啟用該設置項後,遊戲運行前將會從web服務端下載所有遊戲數據到設備本地。 在線運行時,遊戲會見車可下載數據,並只下載增量數據。 離線運行時,遊戲可以直接使用下載好的數據。

在web平台的Ren’Py項目可以播放影片檔案了。前提是瀏覽器支持對應的影片檔案格式。

Mac link

在Mac電腦上,Ren’Py使用統一的二進位制格式,可以在Intel和蘋果Silicon處理上都運行。

安卓 link

安卓平台做了一些調整。android.keystorebundle.keystore 文件移動到項目根目錄中,而不再放在rapt目錄中。 這樣便於項目使用不同的金鑰(key)進行構建,以及使用相同的金鑰(key)在多個安卓版本進行構建。

新增“生成金鑰”按鈕。點擊該按鈕後,如果存在舊的keystore文件,Ren’Py會將原文件複製到項目中。

安卓配置文件 .android.json 改名為 android.json。 Ren’Py遇到舊文件時會自動創建對應的新文件。

黏滯圖層 link

黏滯圖層(sticky layer)是一種圖層的臨時性質。 當使用tag標籤指定某個圖層顯示具體圖像時,該圖層就具有了黏滯圖層性質。 黏滯圖層的性質將持續到該圖層隱藏,或有其他圖層指定為黏滯圖層。

具體來說,某個圖像顯示在其默認圖層之外的圖層上時,對應的圖層就會設置為黏滯圖層了。 後續的show和say語句都不需要指定圖層名稱,即可在該黏滯圖層上顯示對應內容。

下面的樣例中,假設 eileen 預設使用 master 圖層,那麼在指定在 near 圖層顯示後,near 圖層就成為了黏滯圖層:

show eileen onlayer near
eileen happy "Hello there!"  # 黏滯圖層已生效,不需要指定圖層名
show eileen excited          # 省略onlayer near
hide eileen                  # 省略onlayer near
show eileen                  # 省略onlayer master,master圖層是eileen的默認顯示圖層

該新增的特性預設是將 master 圖層設置為黏滯圖層。 如果使用 renpy.add_layer() 函數創建的任意圖層也會被附加黏滯圖層性質,除非將入參設置為 sticky=False

獨立圖層和圖層可視組件 link

獨立圖層(detached layer)是由創作者定義的圖層,不會自動添加到場景中。 獨立圖層使用新增的可視組件類 Layer 定義,覆蓋在其他圖層之上。

開發這個功能的深層原因是,可以讓著色器和其他變換效果應用到一組標籤(tag)上,同時保持其他系統能正常使用,比如show和say語句。 該功能也可以讓同一圖層顯示多次,用在反射效果或某些電視的同頻道復用。

將獨立圖層應用到場景中時,需要在配置項 config.detached_layers 中添加對應圖層名。 其他典型圖層則使用 add_layer() 函數。並且獨立圖層固定具有黏滯圖層性質。

新的圖片格式和圖像過採樣方式 link

此次的版本新增兩種圖片格式的支持:

  • AV1圖片檔案格式(AVIF)是一種全新的圖片格式,使用了現代壓縮技術,壓縮後可以獲得比常見的JPEG、PNG和WebP之類儲存空間更小的圖片文件。 在很多情況下,將圖片轉換為AVIF格式可以在不損失畫質的情況下減少文件的大小。

  • SVG文件是一種網路上常用的向量圖形格式。 Ren’Py支持的SVG文件是SVGs的一個子集。(Ren’Py不支持SVG文件中帶文本。) 遊戲內容出現縮放時,Ren’Py會自動對SVG文件過採樣(或降採樣),以保證任意解析度下的圖像邊界依然銳利。 該功能類似於Ren’Py對文本的過採樣。 對於需要保證銳度的UI元素,SVG文件是個不錯的選擇。

當前版本Ren’Py新增了對柵格化後圖片的過採樣支持,包括PNG、JPEG、WebP和AVIF格式文件。 遇到需要對這類圖片進行過採樣的情況時,可以在檔案名結尾加一個 @ 符號和一個過採樣率數字。 例如,“eileen happy@2.png”表示過採樣係數為2。這樣做可以更方便地把老遊戲以更高清晰度重設,減少很多代碼層面的修改。 圖像處理器(image manipulator)也支持圖片的過採樣。

對柵格化後圖片,過採樣會載入圖片的完整尺寸,但除以過採樣係數後當作圖片的實際尺寸。 例如,某個圖片的尺寸是1000×1000,過採樣係數為2,就會當作500×500的圖片用於各種布局的計算。 當遊戲畫面放大後,所有圖像數據都會等比放大,但依然能保持相當的銳度。

圖片過採樣也可以與新增的配置項 config.physical_widthconfig.physical_height 協同使用, 修改遊戲解析度後也不必調整遊戲內元素的布局。

AV1影片 link

Ren’Py現在支持AV1編碼的影片。 AV1可以支持WEBM和MKV容器。 同等影片品質下,AV1編碼的影片可以比VP9編碼的影片檔案再小30%左右,而VP9可能是之前最好的編碼格式。

需要注意,比較新的AV1格式可能要求更好的CPU性能實現解碼。 對某些硬體來說可能VP9編碼的影片反而更流暢。

混音器音量變更項 link

現在混音器以分貝(音量)計算,類似於音訊設備和電腦計算音量的方式。 混音器滑塊在最小值位置時表示最大音量的-40dB,在最大值位置時表示0dB即最大音量。 這樣使混音器有更大的調整範圍。之前的音量計算方法,會使音量滑塊非常接近底部才有明顯效果。 現在音量的調整會更符合人的感官直覺。

幾個控制默認混音器音量的配置項,比如 config.default_music_volumeconfig.default_sfx_volumeconfig.default_voice_volume,都已經改為0.0表示-40dB而1.0表示0dB模式。 SetCharacterVolume()preferences.set_mixer()preferences.get_mixer() 函數的計算方式也一樣。

音訊的淡入淡出功能也根據音量做了修改。 音量淡化效果會作用時間範圍更大,而不僅限於原本淡入淡出的一小段。 重新實現了超短時間的淡化效果,解決的之前淡化時間太短導致的錯誤。

配置項 config.fadeout_audio (即原來的config.fade_music)控制音訊停止播放或使用 play 語句切換時的默認淡出時間。 默認時長為0.016秒,正好清楚突然停止音訊可能導致的爆音。

音訊聲像(renpy.music.set_pan())改為一個常數音量,這樣修改聲像不會改變音量。

可拖拽的視口 link

視口(viewport)可以被用戶拖拽,在視口內的按鈕或其他可視組件獲得焦點時依然可以進行拖拽操作。 Ren’Py會檢測用戶是否進行拖拽操作,並把焦點切換到視口組件,然後移動視口。

視口vpgridsdraggable 特性可以設置為新增的 界面變種 “touch”, 這樣僅在啟用觸控的設備上才能拖拽視口。

_ren.py文件 - Python中的Ren’Py link

_ren.py 檔案格式 可以在Ren’Py腳本中嵌入Python文件。 例如:

"""renpy
init python:
"""

flag = True

等效於:

init python:

    flag = True

這項新格式的設計意圖是,允許以原生Python為主的腳本文件可以在專門編輯Python代碼的工具中更方便。

常量儲存區 link

Ren’Py中可以通過設置 _constant 將某個 命名儲存區 標記為常量儲存區。 如果 _constant 的值為True,則常量儲存區中的對象不參與存檔,只能透過儲存區訪問,並且不參與回滾操作。

設置常量儲存區的考量是,剝離部分不需要回滾的儲存區和變數,以降低性能開銷。

下列儲存區預設是常量儲存區:

_errorhandling _gamepad _renpysteam _sync _warper audio achievement build director iap layeredimage updater

常量儲存區中的變數只能初始化階段更新,之後就不允許修改。

方頭凹形括號Ruby文本 link

Ruby文本,即用於閱讀或翻譯的上下雙層文本,可以使用全形方頭凹形括號(【】)與豎線符號(|或|)結合的語法編寫。 全形或半形的豎線符號(|或|)用來分隔Ruby文本的上半與下半內容。

e "Ruby 可以用來標識假名(【東|とう】 【京|きょう】)。"

e "也可以用來翻譯 (【東京|Tokyo】)."

在某些地方,可能需要直接顯示左方頭凹形括號(【)。此時需要連續兩個左括號“【【”的形式轉義。 例如:

e "【【這不是一段 | Ruby文本。】"

可讀性 link

新增配置項 config.tts_substitutions,用於自動語音中的分詞規則。 這樣創作者可以修正語音引擎對某些文本的發音問題。

例如:

define config.tts_substitutions = [
    ("Ren'Py", "Ren Pie"),
]

就可以讓自動語音把特殊詞“Ren’Py”的發音改為“Ren Pie”。

自動語音可以受語音音量混音器的影響。

存檔令牌安全機制 link

用戶在不同設備間遷移存檔時,當前版本Ren’Py會使用令牌(token)提示用戶, 防止用戶誤操作導致的各類問題。詳見 security documentation

Ren’Py在某台電腦上首次運行時,將生成一個令牌(token)。所有存檔和持久化數據都將包含該令牌。 如果來自不同電腦的存檔中發現了與本機不同的令牌,用戶會收到警示和詢問是否繼續。 如果用戶選擇“是”,會繼續受到詢問,是否自動許可來自那台電腦的所有存檔。

只有當前電腦和獲得許可令牌中的持久化數據才可以載入。

第一次執行支持存檔令牌機制的Ren’Py時,Ren’Py將檢查對應遊戲的存檔文件中是否存檔令牌。 如果存檔中沒有令牌則添加令牌。 在Ren’Py 8.1/7.6及以後的版本中執行此步驟不會有提示。

無法禁用該特性,因為對終端用戶來說這是重大安全問題。

新的搜索路徑 link

當前版本Ren’Py如果在game目錄下沒有找到對應的音訊或字體檔案時, 會從 game/audio 目錄中搜索音訊檔案,從 game/fonts 目錄中搜索字體檔案。 圖片文件依然會從 game/images 目錄搜索,但其他類型的文件不會搜尋該目錄。

新的3D舞台特性 link

3D舞台新增了幾項特性:

point_to

指定一個點作為攝影機朝向,或者精靈(sprite)的朝向。

xrotate, yrotate, zrotate

使精靈(sprite)或攝影機安指定的坐標軸旋轉。

orientation

使精靈(sprite)或攝影機同時在3個軸向旋轉,一般按球面最短路徑計算旋轉。

Live2D link

當前版本Ren’Py支持Live2D Cubism Editor 4.2的新特性。 如果要使用這些新特性,需要安裝Cubism 4 Sdk for Native R6_2或更高版本。

Live2D可以在x86_64安卓平台運行了。

新的Live2D.blend_opacity方法結合update_function函數可以修改Live2D模型的不透明度。

啟動器和引擎的多語言支持 link

如果可能的話,各類機器翻譯的文本將用於啟動器和引擎,特別是更新長久以來都沒有支持的一些語種。

如果你想要提升翻譯品質,可以這樣做。 編輯啟動器目錄 launcher/game/tl/language 中的各種 .rpy 文件,然後發送給我們。 記得請刪除標記“Automatic translation”的內容。

以下語種的翻譯啟用了自動更新:

  • Finnish

  • French

  • German

  • Greek

  • Indonesian

  • Italian

  • Japanese

  • Korean

  • Polish

  • Portuguese

  • Russian

  • Simplified Chinese

  • Turkish

  • Ukrainian

以下語種包含人工更新:

  • French

  • Portuguese

  • Spanish

  • Japanese

  • Ukrainian

更多新功能特性 link

輸入框 組件可以支持多行輸入了。

新增的 JSONDB 系統允許開發者在遊戲腳本中讀取Json文件儲存的數據。 例如,JSONDB用於儲存氣泡式對話資訊。

新增可視組件類型 areapicker,提供了讓用戶可以框選一個螢幕區域的工具。

Movie 新增入參 group 。在某個組內的Movie對象可以銜接同組的上一個Movie對象最後一幀畫面。 此設計用於影片精靈直接的無縫銜接。

新增配置項 config.file_slotname_callback 允許開發者自訂存檔槽位名的生成方式。 該項的一種用法是可以在存檔槽加前綴(比如,區別dlc存檔和非dlc存檔)。 新增配置項 config.autosave_prefix_callback 可以讓自動存檔也有一個前綴。

新增一種工具,在開發者菜單中(Shift+D)可以查看持久化數據。

互動式編導器可以創建語句時移除某個image對象的屬性(attribute)。

show screenhide screencall screen 語句可以跟 expressionasonlayerzorderwith 從句。 效果和語法與 showhide 語句後面的從句相同。

renpy.include_module() 函數可以載入 rpym 文件,穿插載入初始化語句塊的內容。

新增環境設定配置 “voice after game menu”,用於控制是否在顯示遊戲菜單時繼續播放語音。

創作者自訂語句可以與 default 語句相同的執行時機執行一個函數。 此實際在初始化階段之後,但早於遊戲運行之前,以及載入存檔時、回滾後、lint檢查前等類似時間點。

新增配置項 config.after_default_callbacks 可以在 default 語句執行後立刻運行某些回調函數。

互動式編導器中可以使用滑鼠右鍵點擊某個屬性名稱來取消該屬性。

Text() 組件新增入參 tokenized。若該入參為True,文本組件會從 訂製文本標籤 獲取一個token列表。

Ren’Py新增兩個內建圖層。“top”圖層會顯示在其他所有圖層之上,並且不受轉場效果影響。通常用於顯示常駐資訊。 “bottom”圖層顯示在其他所有圖像之下。通常用於處理總是啟用狀態的按鍵事件。

Ren’Py支持C90編碼的泰文字體。

滑鼠的按鍵映射也可以支持多按鍵事件。 例如,“shift_mouseup_1”會在滑鼠按鍵1釋放並且shift鍵按下時觸發對應的事件。

重做了keysym系統,可以在NumLock鍵關閉狀態時綁定數字鍵盤按鍵(幾個箭頭和Home鍵)。 重做了 按鍵映射,便於更好利用數字鍵盤按鍵。

通常,某個同名或帶同名標籤(tag)的可視組件或界面,從隱藏狀態轉為顯示狀態時,將移除組件或界面的隱藏屬性, 變換中hide部分的效果將取消。新的 show_cancels_hide 變換特性可以控制這種情況的效果。

控制台(快捷鍵Shift+O)的 help 命令可以加表達式。表達式會顯示匹配到的函數或類的說明。

新增 renpy.get_translation_identifier() 函數,返回對話當前行的唯一標識符。

新增 config.scene_callbacks 配置項,可以設置為一個回調函數列表。 當運行scene語句或調用 renpy.scene() 函數時,將調用該配置項的函數列表。

文本標籤 size 可以使用乘號“*”,用法如下:

"{size=*2}兩倍大{/size} {size=*0.5}一半大{/size}"

可視組件 dismiss 可以使用 keysym 特性,指定dismiss的keysym。

新增配置項 config.autosave_callback,在後台自動存檔時運行對應的回調函數。

新增 renpy.music.pump() 函數,調用後可以讓音訊播放更改立即生效,而不需要等待下一次互動。 主要用於播放某個音效,然後淡出。 (默認情況下,play 語句後面跟的 stop 從句會將音訊停止但沒有淡出。)

新增 renpy.clear_attributes() 函數,可以移動某個圖像的所有標籤(tag)。 以前要實現效果的方式是隱藏並在此顯示圖像,同時會導致圖像在界面中的位置也被重設。 使用該函數則沒有這個問題。

新增配置項 config.check_conflicting_properties,預設對已存在的遊戲禁用而對新創建的遊戲啟用。 可以讓創作者檢查樣式和變換特性的當前設置是否會有衝突。 原因是不同平台和版本的Ren’Py運行相同的代碼可能會有不同的結果。

新增配置項 config.font_name_map,可以讓創作者對字體檔案和 字體組 重命名,使用在 {font} 文本標籤時更方便。 在此之前的版本中,{font} 文本標籤無法使用字體組(fontgroup)。

Scroll 行為新增入參 delay,可以讓滾動動畫增加一段延遲。

新增環境設置 preferences.audio_when_unfocused,可以讓用戶切換應用窗口時暫停遊戲內音訊播放。

界面中的 for 循環支持 continuebreak 語句。

可以在需要的文件開頭使用 rpy monologue none 語句,禁用對話的 獨白模式

其他變更項 link

極坐標運動的特性(aroundradiusangle)改為圓周運動,而不再是橢圓運行。 圓周運動的半徑會選取寬度和高度中較小的一方,並按比例換算。 新增的 anchoraroundanchorradiusanchorangle 特性可以在極坐標下指定錨點。

當某個界面中設置兩項互相衝突的特性時,Ren’Py會報錯。 比如,同時設置 alignxalign 就會報錯。 之前的版本中這屬於未定義的情況。

lint工具會檢查遊戲中永遠無法抵達的語句,並在生成的報告中列出這些語句。

lint工具會檢查遊戲中沒有用到的多語言支持內容,並在生成的報告中列出這些內容。

可以使用 build.itch_channels 指定上傳到 itch.io 的通道。

連續三個雙引號的轉義字串與單個雙引號的用法一致。 這樣在界面中也可以使用連續三個雙引號的文本了。例如:

screen example():
    text """\
line 1
line 2
line 3"""

就可以在文本組件中創建出一行三個雙引號的文本。

在環境設置中儲存著最大化窗口的狀態,當遊戲窗口最大化並關閉後,下次啟動遊戲將直接最大化窗口。

界面語言定義可視組件時,可以直接在第一行使用 at transform

text "Spinny text" at transform:
    rotate 0.0
    linear 2.0 rotate 360.0
    repeat

在界面語言中可以同時具有 at 特性並帶有 at transform 語句塊,應用順序與腳本中的順序一致。

本地變數(前綴為 __ )可以用於f-string。

在啟用自動語言功能後,文本標籤 {nw} 會等待自動語言說完某句台詞再繼續下一句。

使用樣式特性 selected_insensitive 後,selectedselected_insensitive 事件將在合適的時機發送給變換(transform)。

帶有 id 特性的可視組件可以指定 prefer_screen_to_id 特性,控制是否接受界面中對應可視組件id的特性覆蓋。 默認情況下,組件自身特性覆蓋界面中定義的特性。

fadein 從句可以用於音軌列隊中。

在Steam Deck上運行時,Ren’Py會限制BOverlayNeedsPresent的調用次數,防止卡死。

對話框中正在顯示的內容將進入對話歷史記錄(以及歷史記錄界面)中。之前的版本中,只有對話達到結尾處才會進入對話歷史記錄。

如果沒有設置 config.steam_appid,Ren’Py會刪除game目錄下所有存在的 steam_appid.txt 文件。 此舉是為了防止啟用錯誤的steam app id。

音訊的音量值與靜音設置做了隔離。(也就是說,遊戲靜音並不等於音量值就一定是0。)

文件中明確了非自閉合的文本標籤會自動在對應的文本段落結尾添加閉合標籤。 在之前的很多Ren’Py版本中,lint檢查只是出現warning資訊。從此版本開始,下面的腳本是合法的。

e "{size+=20}這段文字加大!"

自動語音和自動前進可以同時啟用。同時啟用後,僅當對話框獲得焦點時,自動前進才會奏效。

Ren’Py不再要求grid和vpgrid組件必須填滿——子組件數量不足時將使用null組件填充。

renpy.register_statement() 函數中的 execute_init 參數會受 init_priority 參數的影響。 之前的版本中,所有 execute_init 中指定的函數始終在優先度0級別運行。

config.label_callback 配置項改名為 :var`config.label_callbacks`,並且可以設置為一個回調函數列表。

文件中一系列函數、類和行為函數的簽名(即入參列表)做了修正,使用起來更安全。

之前Ren’Py會將所有空白字元都轉為標準空格。當前版本可以支持非標準空白,比如 \u3000 這種全形空格。

8.0.3 / 7.5.3 link

安全 link

文件中新增 安全問題 頁面,用於幫助用戶理解mod和分享存檔可能設計的安全問題。

變更和修復項 link

Ren’Py對安卓API的支持提升到level 33,對應安卓13版本,允許新遊戲加入Google Play商店。 Play Billing庫升級到第5版。

使用 renpy.load_module() 載入模組的運行優先度改為 init 級別。

lint與 config.adjust_attributes 配置項保持一致。

某個情況下模糊效果會變成透明的問題已定位。

將對話內容作為選項菜單標題顯示時修改語言類型,Ren’Py會自動找到修改後語言的前一個say語句並作為選項菜單標題。

開發中的遊戲如果沒有指定 gui.preference() 的預設值,Ren’Py將報錯。

多處文件做了修改和提升。

該版本修復的矩陣相等判斷的問題,不再會出現使用矩陣實現動效的錯誤。

Ren’Py會對lambda匿名函數中綁定的變數進行正確解析。

添加了烏克蘭語版本的教學和“The Question”。啟動器的烏克蘭語版本也做了更新。

8.0.2 / 7.5.2 link

修復項 link

自動載入腳本(Shift+R)方面有一些改動,嘗試防止載入遇到錯誤時Ren’Py再次創建一個不可用的存檔文件並導致Ren’Py進入不可用狀態。 這些改動的目標是,在修改前保留存檔文件並可以再次使用對應文件。

當前版本可以在0.68秒之內實現音訊的淡入淡出效果。 在之前的版本中,如此之短的時間會導致音訊直接終端而沒有淡入淡出效果。 不過當前版本依然不能嚴格保證淡出淡出的精確時間。

針對achievement.steamapi的某些函數回退已經取消。

aarch64版本無法正確構建發行版的問題已修復。

儲存區變數數量過大時,CPU和記憶體消耗急劇增大的問題已修復。

載入一個與當前設置的語言版本不同的存檔時,可以正確顯示 config.after_load_transition 配置的轉場。

Ren’Py 8中某些遊戲內購無法使用的問題已修復。

在教學中的某些非英語樣例無法正確運行的問題已修復。

Ren’Py原始碼打包時已包含Tinydialogs.

默認獲取焦點相關變更 link

可以獲取焦點可視組件,比如按鈕和條(bar),其 default_focus 特性有幾項變更。 當某些可視組件被移除後,該特性可以讓Ren’Py選擇某個組件自動獲取焦點。

新的焦點獲取規則為:

  • 當使用滑鼠時,焦點跟隨滑鼠,default_focus 不起作用。

  • 某個可視組件的 default_focus 值比其他組件大時,該組件獲得焦點。

  • 某個具有最大 default-foucs 值的可視組件被隱藏時,具有次高且非零值 default-focus 的組件獲得焦點。

這項改動的目的是方便鍵盤和遊戲控制器用戶,對滑鼠用戶沒影響。

其他性能提升 link

文件中記錄了多處改動和性能提升。

控制台可以顯示更多Python 3數據類型。

MouseDisplayable() 將與 default_mouse 設置的值保持一致。

在Ren’Py 8中,Python代碼編譯時默認帶 from __future__ import annotations

模態screen和dismiss將會阻止 pause 語句和 renpy.pause`() 函數的效果。 在之前的版本中此類情況沒有明確定義,並且不同版本會發生的情況也各不相同。

在macOS平台上,Ren’Py遊戲窗口在不同解析度顯示器間移動時,將會自動進行合理縮放。

macOS平台上可以使用Command+C和Command+V實現複製黏貼。

screens.rpy文件中的默認input界面發生變更,解決了vbox中 xalignxpos 兩個特性的衝突。 將使用xalign的地方都改為了 xanchor

包括開發者模式下,Ren’Py可以無音效卡啟動。 音訊硬體的錯誤將寫入到log.text文件。

日語版本更新。

New games created with Ren’Py no longer filter out ruby/furigana text tags.

不再濾除“ruby/furigana”文本標籤。

8.0.1 / 7.5.1 link

性能提升 link

啟動器新增烏克蘭語,感謝Matias B的協助。

Web端在循環播放音訊檔案時,可以服用音訊數據,降低了記憶體使用。

MouseDisplayable() 內部使用的ATL變換可以在滑鼠改變後重設。在之前的版本中,該行為未定義。

控制台的追蹤界面改為每幀更新。

其他更多提升詳見文件。

修復項 link

ALT文本將按從前往後順序執行。8.0版的某項改動使ALT文本的順序反了。

CropMove轉場不正確的問題,是某個數值取整錯誤導致,已修復。

zoomin和zoomout轉場無法正常運行的問題已修復。

Movie組件再次可以播放一個影片檔案列表,而不僅只能指定單一文件。

構建安卓版本時的一個問題已修復。

對象標識將用於比較 Function() 行為函數的入參。 這樣做是為了避免,在兩個行為函數入參相等但並實際不相同(比如,兩個空列表)的情況下錯誤復用參數的問題。

獲取和設置Steam統計數據的問題已修復。

dismiss 已正確設置為模態(modal)。

8.0 / 7.5 link

Python 3支持(Ren’Py 8.0) link

Ren’Py 8.0運行在Python 3環境下,即Python語言的最新主幹版本。

如果你的遊戲只使用了Python的基礎功能(例如儲存角色名字和flag),運行起來不會跟以前有什麼差別。 否則的話,請繼續閱讀以下內容。

對很多Ren’Py開發者來說,轉移到Python 3將會帶來很多Python語言和庫方面的提升,詳見文件 What’s new in Python 。 文件中包含很多Python 3中的變化,請根據需要閱讀。

值得著重一說的,一些Ren’Py遊戲開發過程中的新東西如下:

  • 函數可以僅有關鍵字入參。(腳本標籤、變換和界面的入參也支持該特點)

  • 對函數入參和返回值的數據類型進行注釋(annotate)。(僅在Python中支持)

  • 可以使用格式化字串語法。比如字串 f"characters/{character}.chr", 在花括號中的文本將使用格式化後的Python變數,類似於Ren’Py對話中的字串插值。 不過該功能僅在Python語句中有效。大多數Ren’Py語句中不能使用。

此外還有一大堆提升,畢竟這是直接從Python 2.7到Python 3.9的巨大跨越。有興趣的朋友請參閱其他Python文件,尋找各方面的提升。

Ren’Py從Python 2.7遷走的其中一個重大考量是,2.7版已經不再受Python軟體基金會的支持。 所以遷移為Ren’Py的後續發展提供了有利基礎。

如果你使用新版Python,需要注意一些轉換要點。

  • 在Python 3中,出發總會返回浮點型,而不再是整型(例如,3 / 2 的結果是1.5而不是1)。 操作符 // 用於取整除法。這項改變會對原來Ren’Py計算位置的部分產生影響,因為Ren’Py中對整數和浮點數的處理方式不同。

  • 在Python 3中,字典類型的鍵、元素、值相關方法都只返回視圖(view)類型,而不返回列表(list)類型。 iterkeys、iteritems和itervalues方法不能使用。xrange方法已刪除,range方法不再返回一個列表。

  • except從句必須寫成 except Exception as e: 類似的方式,不再支持舊寫法 except Exception, e:

  • 所有字串預設使用unicode編碼(Ren’Py從多年前就已強制如此),文件預設使用文本模式打開。 (但是,renpy.file() 函數還是以二進位制模式打開文件。使用 renpy.open_file() 函數可以默認編碼打開文件。)

  • 很多Python模組(module)的命名發生了變化。

這裡不是一個完整的變化列表。

Ren’Py只使用Python標準庫的一個子集,並非所有Python模組在Ren’Py中都可以直接使用。 如果你覺得哪些模組好用,請務必讓我們知道,特別是那些沒有庫依賴關係的模組。 由於 asyncawait 是可用的,Ren’Py並不直接支持協程(coroutine)。

Ren’Py 8.0使用Python 3.9.10版本,可以應用在Windows、macOS、Linux、安卓和各iOS平台。Web平台將在後續版本中支持。

運行Ren’Py 8時,默認Python環境不帶 -O 標識,可以使用 docstring 和 assert 語句。

根據我們的經驗,大多數使用遊戲在Python3環境下運行完全無變化,特別是使用Ren’Py的API管理遊戲狀態的遊戲。 Ren’Py 8已經嘗試過運行最早開發於2006年的Ren’Py遊戲。

繼續對Python 2.7的支持(Ren’Py 7.5) link

Ren’Py 7.5與8.0同步發行,繼續提供基於Python 2.7的新版Ren’Py,作為對目前開發中遊戲(或發行後維護中遊戲)的支持。 這個版本依然需要Python 2.7環境。

該版本中,Ren’Py還支持Web平台。

Ren’Py 7.5和Ren’Py 8.0支持同樣的功能特性。

我們計劃繼續支持Ren’Py 7系列,直到我們看到社區徹底遷移到Ren’Py 8系列,或者基於Python生態變化導致基於Python 2的Ren’Py無法維持時。

請在Ren’Py 8中隨意測試你們的遊戲。對大多數遊戲來說,只需要極少量改動甚至完全不需要改動。 如果因為某些原因,你無法將遊戲遷移到Ren’Py 8上,請讓我們了解具體的掣肘原因。

支持的平台變化 link

該版本增加了對64位ARM版Linux(linux-aarch64)平台的支持。 基於Ubuntu 20.04,該版本已在Chrome筆記本上做過測試,並且應該也能支持64位版本的ARM平台。

要想在ARM Linux上運行Ren’Py遊戲,需要先下載新的ARM Linux SDK包,然後把遊戲放入對應項目目錄中,並使用該SDK啟動遊戲。 某些情況下Linux發布版本時會帶有ARM Linux SDK文件,不過出於檔案大小的考量,預設是不帶那些文件的。

遷移到Ren’Py 8後,我們移除了以下平台的支持:

  • 32-bit x86 Windows (i686)

  • 32-bit x86 Linux (i686)

這項變化對32位的x86電腦有明顯影響。上述兩個平台依然可以使用Ren’Py 7.5,但未來永遠無法使用Ren’Py 8.

Web和ChromeOS link

目前只有Ren’Py 7.5支持Web平台。

Safari和Chrome瀏覽器的改變導致了Ren’Py的記憶體占用大概提高了50倍,當瀏覽器的堆記憶體溢出時就會出現記憶體範圍錯誤(RangeError)。 Ren’Py 7.5做出了一些修改,以降低對Web瀏覽器記憶體的占用。

新增 config.webaudio_required_types 配置項,可以設置為一個列表,用於指定遊戲使用的媒體類型(mime type)。 如果瀏覽器支持對應的媒體類型,Ren’Py將只適用瀏覽器的音訊系統播放音訊檔案。 如果瀏覽器不支持對應的媒體類型,將使用webasm播放,而這可能會導致聲音停頓或跳躍,尤其是在運行速度慢的設備上。

config.webaudio_required_types 配置項的設計原意是在Safari上運行遊戲時可以使用ogg和opus音訊,並在只是用mp3時能靈活切換。

Web版導入存檔文件後,Ren’Py將立刻刷新存檔文件列表,而不用重啟。

以安卓app形式運行在ChromeOS設備上時,變種項“chromeos”將啟用。

ARM版本的Chromebook上可以運行Ren’Py SDK。

安卓和iOS link

如果遊戲內包含app內購項目時,安卓配置項會再次提示選擇app商店。 如果沒有選擇任何app商店,項目中不會包含支持遊戲內購的庫。 這些庫中包括付費許可,會在遊戲上架時標識為包含遊戲內購內容,儘管可能遊戲中實際沒有內購內容。

由於某些底層庫的問題, renpy.input() 函數和 input 可視組件不再支持安卓平台的基於輸入法編輯器(非拉丁字元)的文本輸入。(譯者註:也就是不支持中文輸入。)

在iOS平台上,對OpenGL ES的調用將會被轉為原生Metal圖形系統。 這項改動將提升新款蘋果設備的適配性,並修復部分蘋果使用Silicon晶片的設備上運行iOS模擬器時的問題。

Steam、Steam Deck和Epic遊戲商店 link

該版本重寫對對Steam的支持,基於ctypes庫實現接入和調用整套Steamworks的API。 不過對Steam的 成就模組 保持原樣,便於高級Python程式設計師們接入Steam的各種功能。

當Steam啟用時,Ren’Py將啟用“steam”變種。

該版本包含對Steam Deck的硬體支持。 調用 renpy.input() 函數時,將在Steam Deck上螢幕幕軟鍵盤。 在Steam Deck上運行Ren’Py時,將啟用“steam_deck”、“steam”、“medium”和“touch”幾項變種項。

我們寫了一個 Ren’PySteam Deck Guide 幫助你們實現遊戲認證。感謝Valve提供的測試用Steam Deck。

構建分發包中的“Windows, Mac, and Linux for Markets”選項作用發生變化,不再會根據目錄名稱和版本號生成zip包的前綴。 這表示不需要每次在Steam上更新啟動器配置資訊,只需要第一次上傳時更新即可。

Ren’Py支持從Epic遊戲商店啟動,不過啟動時會忽略很多參數。

Visual Studio Code link

Ren’Py支持下載和使用Visual Studio Code(VSC),並且有一個VSC擴展 Ren’Py語言

Ren’Py語言擴展提供了對Ren’Py的豐富支持,包括語法高亮、分段、自動填充、顏色預覽、文件說明、跳轉到定義、函數簽名、錯誤分析和輪廓線等。

VSC還有巨量的系統擴展,包括拼寫檢查等。可以與Ren’Py語言擴展插件一起使用。

可以通過編輯器設置選項下載VSC。還可以直接設置為已經裝好Ren’Py語言擴展插件的VSC。

dismiss、nearrect和Focus Rectangles link

Ren’Py中加入了兩種新的可視組件,用於拖放菜單、下拉菜單和提示消息。

dismiss 組件主要用在某個模態frame後面,啟用後執行某個行為。 該組件可以用在其他組件的縫隙間,當用戶點擊frame之外的區域時直接隱藏整個frame。 (譯者註:即常見的“點擊空白處關閉窗口”。)

nearrect 組件會在其上方或下方的矩形區域放置另一個可視組件。 改組件可以用於按鈕上顯示提示,或者彈出下拉菜單。 (文件中有使用nearrect組件實現下拉菜單以及使用 tooltips 組件實現提示消息的樣例。)

新增行為函數 CaptureFocus() ,用於捕獲nearrect組件需要的目標矩形區域。 捕獲目標矩形區域後,GetFocusRect() 函數獲取目標矩形焦點,ClearFocus() 函數清除目標矩形焦點, ToggleFocus() 函數根據當前焦點情況使目標矩形區域獲取或清除焦點。

ATL和變化 link

現在可以在ATL插值操作中包含一個代碼塊了。具體來說:

linear 2.0:
    xalign 1.0
    yalign 1.0

這種寫法是允許的,等效於:

linear 2.0 xalign 1.0 yalign 1.0

關於 ATL 轉場特殊ATL關鍵字參數 的資訊,已添加對應文件。

pause 0 語句作為特殊情況,將顯示1幀,並且是唯一可以保證至少顯示1幀的方式。 從6.99.13起,Ren’Py嘗試了各種方式實現單幀顯示,然而大部分都會有畫面撕裂的問題。

當ATL圖像用作某個圖片按鈕的子組件時,當其每次顯示時,已顯示時間(shown time)都會重新計時。

變換特性 crop_relative 預設值改為True。

function 語句僅在產生延遲時會阻止執行,前提是在變換中使用 function 語句並繼承某個時間軸以實現更加自然的效果。

box、grid和vpgrid布局 link

自身不占據任何空間的可視組件(比如 keytimer 和判斷為False時的 showif) 放在布局組件 vboxhbox 中時,spacing 特性沒有實際效果。但那些可視組件在其他布局組件中會占據空間,例如grid。

完全重寫了vpgrid組件,不允許指定 rowscols 後超過總單元格數量的子組件。

沒有完全填滿的vpgrid可能會導致一個錯誤,除非預設啟用(opt-out) allow_underfull 或 配置項 config.allow_underfull_grids

如果vpgrid指定了行數和列數,內部子組件數量卻少於“行數×列出”,則稱作未滿(underfull)。 一個只指定了行數或列數其中之一的vpgrid,其內部的子組件數量如果不是指定行數或列數的整倍數,則這個vpgrid也是未滿的。

調用界面和前向滾動 link

默認情況下使用 call screen 將禁用前向滾動,原因是不安全並容易導致混亂。 關鍵問題是,在界面中前向滾動會對返回值產生副作用,使用jump的界面跳轉也可能有影響。 有其他副作用的行為,例如修改變數和播放音樂,在前向滾動時都無法保持正確運行。

確定某個特殊界面使用前向滾動也是安全的前提下,使用 roll_forward 特性可以啟用前向滾動。 如果確定遊戲中所有界面都要支持前向滾動,可以直接設置 config.call_screen_roll_forward 項。

新功能特性 link

show screenhide screencall screen 語句可以使用一個 expression 修飾符,允許通過Python表達式傳遞界面名稱。

在設置 Preference() 中新增了“main”音量。“main”音量的值會乘以各其他音量的值,以實現對所有遊戲音量的調整。

新增 config.preserve_volume_when_muted 配置項,當某個音訊通道靜音時依然可以查看對應通道的音量值。

啟動器的設置界面中新增一個按鈕,可以一鍵清空臨時目錄文件。

新增 config.choice_empty_window 配置項,用於訂製選項菜單顯示時的空window。 用法如下:

define config.choice_empty_window = extend

選項菜單標題將使用前一句對話內容。

可視組件 key 新增支持 capture 特性,決定按下的按鍵是否在某次交互結束後依然需要處理按鍵事件。

樣式特性 language 新增一個“anywhere”值,允許Ren’Py處理字串時可在任意地方斷行。

renpy.pause`函數新增入參 `predict() ,可以暫停等待圖片預載入完成。 預載入可以由 renpy.start_predict()renpy.start_predict_screen() 兩個函數觸發。

生成對話時可以選擇一項語言,而不是原來只能使用默認項。

界面語言中的 add 語句新增 alt 特性,使用方法如下:

screen test():
    add "icon.png" alt "The Icon"

行為函數 Hide() 可以使用None作為界面名,效果是隱藏當前界面。

Placeholder() 新增入參 text 。該項會覆蓋自動檢測到的占位符文本。

renpy.dynamic() 函數可以生成命名空間 daynamic 的變數。

新增配置項 config.always_shown_screens ,允許創作者定義始終顯示的界面(即使在主選單或遊戲菜單界面)。 同時參見 config.overlay_screens

OpenGL視口(viewport)的位置和尺寸在著色器(shader)中可用,名為u_viewport。

新增環境變數RENPY_PATH_TO_SAVES,可以在系統級別控制Ren’Py存檔位置。 環境變數RENPY_MULTIPERSISTENT加入文件,與多項持久化(multipersistent)數據的用法相同。

新增配置項 config.at_exit_callbacks,當遊戲退出時調用配置的函數。 該項用途是在允許開發者保存自己需要的額外數據。

新增配置項 config.default_attribute_callbacks,可以指定某個標籤(tag)的默認屬性(attribute),並且不會與其他屬性衝突。

其他變更 link

可以在 renpy.input() 中使用快捷鍵Ctrl+C和Ctrl+V實現複製黏貼。 顯示文本輸入狀態時,Ctrl鍵不再會觸發跳過(skipping)。

renpy.file() 函數重命名為 renpy.open_file(),舊函數名保留。 新增 encoding 參數,可以在打開文件時指定編碼。

可拖拽組件的樣式特性 focus_mask 預設值改為None。 性能有提升,但組件的透明像素部分也可以拖拽。

向命名空間audio添加文件時,Ren’Py會重新掃描flac文件。

say語句用作選項菜單標題時,可以使用永久和臨時的圖像屬相(attribute),與其他地方的say語句用法一致。

所有位置相關特性都可以作為gui變數應用到按鈕上。例如:

define gui.navigation_button_text_hover_yoffset = -3

模態 frame 的表現發生變化。 A modal frame now blocks mouse events when inside the frame, and blocks focus from being transferred to displayables fully behind the frame, while allowing focus to be given to other displayables.

新增配置項 config.main_menu_stop_channels,控制進入主選單界面時停止播放的音訊通道。

層疊式圖像將根據整個螢幕尺寸進行渲染。 在之前的版本中,層疊式圖像內部使用布局管理(像hbox、vbox、side等),層疊式圖像內部元素之間的空隙和相對位置都會發生改變。 新增特性 offer_screen 控制以上表現。

定義角色對象 Character() 時若將 interact 設置為False,或用於不可互動的方式,將會使用自動語音,前提是相關文件存在。

在某個say語句或者帶標題的menu語句前使用 window auto ,Ren’Py會自動判斷角色是在NVL模式還是ADV模式下說話,並會顯示正確的對話窗口。 在之前的版本中,只能將最後一個使用say語句的角色作為對話角色。

activate_sound 特性會在拖拽組件啟用時播放指定音效。

VariableValue()FieldValue()DictValue() 可以調用 Return(),讓交互後返回特定的值。

adjust_spacing 特性可以在新遊戲項目中,針對對話和旁白設置為False。 這樣設置可能會導致,遊戲窗口尺寸改變時,文本間距也發生變化。使用extend語句時則會保持文本間距。

播放或停止某個音訊通道的音樂,將會取消對應通道的暫停狀態。

新增設置 preferences.audio_when_minimized ,當遊戲窗口最小化時暫停遊戲內音訊。

outline_scaling 特性的預設值改為“linear”。

除Web平台外,Ren’Py使用的SDL版本升級到2.0.20

多種語言版本升級。

考慮到Ren’Py內建文件過大的問題,移除了jEdit編輯器。 不過,如果在7.4.0之前解包的目錄中,依然可以從啟動器中選擇jEdit。

版本號規範 link

Ren’Py的完整版本號格式改為major.minor.patch.YYMMDDCCnu。 各欄位含義如下:

  • YY表示(github)最後提交年份的後兩位。

  • MM is the month of the commit.

  • MM表示提交月份。

  • DD表示提交日期。

  • CC表示當天提交次數。

  • n表示每夜構建版。

  • u表示非官方構建版。

7.4.11 link

gui.variant修飾器 link

Ren’Py新增 gui.variant 修飾器。其用於修飾某些的函數。 當函數運行時,若是遊戲首次啟動或每次gui重建後(調用 gui.rebuild() 函數或gui的設定變更,或應用語言變更)修飾器生效。

使用樣例如下:

init python:

    @gui.variant
    def small():

        ## 字號.
        gui.text_size = gui.scale(30)
        gui.name_text_size = gui.scale(36)
        # ...

無修飾器的原腳本為:

init python:

    if renpy.variant("small"):
        ## 字號
        gui.text_size = gui.scale(30)
        gui.name_text_size = gui.scale(36)
        # ...

無修飾器版本只會運行一次,並且在gui重建後會遺失所有變更內容。

修復項 link

新增配置項 config.mouse_focus_clickthrough,用於判斷滑鼠點擊是否讓遊戲窗口獲得焦點,並正常處理點擊事件。

啟動器的 config.mouse_focus_clickthrough 設置為True,所以只要點擊一次就可以直接啟動遊戲了。

輸入框的 caret_blink 特性可以在界面語言中使用。

若Live2D動作中某條動畫曲線的時間範圍小於整個動作的時間,將維持該動畫曲線的終值到動作結束。

可視組件在被不同類型可視組件替換時極小機率出現的問題已針對性防護。上述問題應該只出現在遊戲更新後不同版本存檔間。

模態(modal)可視組件不再阻止暫停。

某些情況(比如可視組件不可見狀態)圖像無法正常顯示的問題已修復。

播放影片不再會導致暫停的音響恢復播放。

AudioData對象不再儲存在持久化數據中。載入持久化數據後,類似對象將會刪除。

平台標識,例如renpy.android和renpy.ios,將會與運行的模擬平台保持一致。

在iOS和安卓模擬器中,行動端回滾側欄將被啟用。

Ren’Py對保持顯示的可視組件(或替代組件)將使用運行其 unhovered 行為,即使焦點發生變更。 在之前的版本中,組件失去焦點並顯示另一個界面時,會不再運行unhovered行為。

config.log 設置為True,選擇的選項將會被記錄在日誌中。

新增的 gui.variant() 函數可以用來處理標準gui調用 gui.rebuild() 時可能導致的各種gui變數重設導致的問題。

Web瀏覽器端將每幀檢查圖片下載進度,允許在動畫中載入圖片。

Live2D現在使用飽和算法實現連接動作間的淡入淡出。例如,淡入動作貢獻80&的參數值,淡出動作貢獻20%,所有數值都源自這兩個動作。 (之前的版本中,淡入和淡出動作獨立啟動。例如可能會導致淡入和淡出動作都貢獻了數值的84%,其餘的16%由默認動作貢獻。)

從某個Live2D動作序列淡入到另一個序列時,前一個動作序列將在淡出後結束。

從某個專場恢復舊狀態的界面時,later_at_list和camera列表會從舊狀態獲取值,防止意外。

gl_depth 特性可以讓Ren’Py使用GL_LEQUALS。這個設置更適配Renpy語法。

矩陣的4元構造器已修復。

Ren’Py在構建安卓App Bundle(AAB)文件時,將清理構建目錄,防止打包多個遊戲時互相影響。

Live2D中重複多個同名動畫可以無縫銜接。 (例如,show eileen m1 m1 m2 中,兩個 m1 都是無縫銜接的。)

ChromeOS設備上的滑鼠動作可以追蹤了。該功能可以防止滑鼠游標在點擊後隱藏的情況。

ChromeOS上窗口部分渲染渲染的問題已解決。

界面中transcludes相關的問題已修復。

在變換中將 perspectivemesh 設置為True可能會導致的問題都已修復。

按鈕將只會向直接子組件廣播變換狀態,而不再對圖片引用類型子組件生效。

repeat_ 修飾符可以用於遊戲控制器事件。

config.debug_image_cache 分離出 config.debug_prediction 配置項。 該項控制預載入錯誤日誌記錄到log.txt,將後續的變數記錄到日誌中。

多語言支持 link

德語、印度尼西亞語、波蘭語和俄語版本更新。

7.4.10 link

修復項 link

該版本修復了使用gl2渲染器時,超大尺寸圖片(超過大多數平台上的最大紋理尺寸4096×4096)無法正常顯示的問題。

對話內容行尾使用 {nw} 標籤(tag)時,將不會等待語音結束。

包含 {fast} (包括使用 extend 的角色)的對話行將從前一個語句起保持語音播放。

7.4.9版本變化的補充(變更日誌中忘記寫了):{w}和{p}文本標籤將不在等待語音播放完成後再前進。

focus_mask 特性可能會比較慢,但一些更改嘗試並沒有使其變快。 所以最好暫時避免使用該特性(拖放組件的該特性預設值是True,後續的7.5版本將改為None),可以提升一些運行速度。

Live2D的相關日誌不再強制寫入log.text,可以通過 config.log_live2d_loading 配置。

自動判斷安卓應用商店的問題已修復。

Translations link

The Indonesian and Polish translations were updated.

7.4.9 link

安卓 link

這個版本特性最主要的變更在於對Ren’Py安卓版,開始支持安卓App的Bundle格式,要求將開發的遊戲上傳到Google Play上。

用於Bundle格式與APK格式使用不同的簽名金鑰,所以在切換格式時,最好卸載和重新遊戲並進行測試。

運行Google Play時,Ren’Py會使用 Play Asset Delivery 將遊戲安裝到用戶設備上。 與之前版本的Ren’Py相同,遊戲依然有2GB的大小限制,以及最多分成4個500MB大小的資源包。 如果遊戲在所有資源都正確安裝完之前運行,Ren’Py會等待資源安裝完成。

當Play Asset Delivery在下載遊戲資源時,新的 android-downloading.jpg 替換了原來的 android-presplash.jpg 圖片。 下載界面還有顯示一個進度條。

Ren’Py依然只支持生成最大2GB的APK安裝包,不過在設備上實際占用的空間可以超過2GB。 Ren’Py已逐步支持其他app商店。

當前版本Ren’Py使用安卓SDK v30生成安裝包。

Ren’Py支持在安卓11版本設備上無線debug.

移除了安卓配置過程中的一系列問題,簡化了流程。 最值得注意的是,現在Ren’Py將自動管理安卓中各個包(package)的版本號,因此不再需要每次生成安裝包時都進行手工調整。

當前版本Ren’Py會搜尋external文件目錄,並自動尋找匹配的歸檔。 這樣用戶就可以構建補丁、更新和追加額外資源。

文件中新增 Pyjnius ,這是一個安卓API的調用庫。

新增變數 build.android_permissions,函數 renpy.check_permission()renpy.request_permission(), 可以向安卓系統申請權限許可。Ren’Py自身不需要那些權限。

創建安卓金鑰時,Ren’Py會將金鑰備份到腳本備份目錄。創作者也可以自己主動備份。

安卓平台等平台截圖出現黑色圖片的問題(希望)已修復。

安卓平台對存檔和log.txt文件的權限將由安卓系統管理,即預設為同用戶組可讀。請確保用戶有權限正確讀寫文件和日誌。

iOS link

iOS版本生成應用程式的流程已更新。在啟動器界面進行一些設置後即可使用,不再需要某些未使用的schemas對象。

如之前一樣,Ren’Py更新之後每次需要重新創建iOS項目。

文件中添加 Pyobjus 。Pyobjus庫允許遊戲在iOS和macOS平台調用系統API。

更新器 link

Ren’Py更新器性能提升。現在可以通過https連接更新,雖然這樣做效率比較低。 因為使用https連接更新需要下載所有文件,而不僅僅是發生變更的文件。

勾選後每次啟動Ren’Py都會檢查是否有更新,如有可用更新則會高亮顯示更新按鈕。

相機/透視 效果提升 link

在某些罕見的情況下使用 camera 語句實現透視效果時,某些轉場特別是鏡頭平移轉場可能會導致顯示錯誤的問題。 該問題已修復,各種轉場能正確顯示。

某些使用兩個表面紋理(例如slide和wipe類轉場,或者使用視口)的情況,無法正確應用透視變化。 該問題已修復。但現在會要求指定實際渲染的紋理操作方式,由創作者決定實際畫面是否滿足自己需求。

Accessibility link

Shift+A快捷鍵可呼出Accessibility菜單。可啟用高對比度文本,將所有文本都轉為黑底白字模式。 該功能用於某些需要高對比度文本體驗遊戲的用戶。

descriptive文本功能禁用時,descriptive文本( alt 角色)不再出現對話窗口淡入的情況。

啟動自動語音時,圖層、界面和同一個圖層的可視組件的閱讀順序發生變化。 界面和可視組件與繪製順序相反,最後繪製的最先閱讀。 在同一個界面或布局型可視組件內的一系列可視組件的閱讀順序依舊,按照腳本內定義的順序從頭到尾依次閱讀。

模態界面內所有內容都閱讀之後,自動語音將停止。

變化特性 link

變換特性 xsizeysize 的用法略有改變。 原本它們的值表示像質數,現在可以表示“position”值。 也就是說,現在除了 intabsolute ,也可以使用 float 賦值表示可用空間的某個比例值。 之前的特性 size 不再推薦使用,請改為使用新的 xysize

其他 link

當前版本界面語言中的 bar 語句新增 released 特性。該特性可以在條(bar)被釋放時執行指定的行為。

當前版本界面語言中的 key 語句可以直接使用按鍵列表進行定義。

在Linux系統上,當Ren’Py檢測到“C”運行語言環境時,它會啟用支持UTF-8編碼的文件系統。 這用於提供Linux版Steam的更好適配性。

啟動器添加波蘭語版本。

音樂鑑賞房間添加了一個“TogglePause”按鈕,可以暫停和恢復音樂播放。

添加 –safe-mode 運行標識,可以在安全模式下啟動Ren’Py。

靜音操作可以對影片生效。

分析文件無節制增長,導致Ren’Py啟動變慢的問題已經修復。分析文件將在腳本重新編譯後縮減。

條(bar)新增 hover_soundactivate_sound 兩個特性。

在ATL內部匹配事件時,如果前綴是 selected_ 事件沒有處理,前綴將去掉並再次匹配。 這意味著,如果 selected_hover 處理器不存在時, hover 處理器將處理 selected_hover 事件。類似的情況還有 selected_idle

Ren’Py版本號可以在結尾包含一個可選的字母。後綴 n 表示每夜版,後綴 u 用於非官方版。

每次回滾都將運行所有 default 語句。

按鈕組件中阻止文本修改的某個回退已修復。

7.4.8 link

修復項 link

修復了一個重大問題。該問題是,在滾回後可能會導致列表、字典、集合和對象的數據錯誤。 使用7.4.7版本的用戶推薦都升級到7.4.8以規避該問題。

已修復非整數值的輪廓線導致程序卡死問題已修復。

視口(viewport)邊緣和滑鼠滾輪的尺寸進行了修正。

遊戲控制器檢測的問題進行了修復。

特性 link

播放影片時,可使用 PauseAudio()renpy.music.set_pause() 函數暫停某個音訊通道。

預設的影片播放通道可以通過配置項 config.single_movie_channel 設置。

變更 link

在開發者模式下,無法正確顯示圖像時將向開發者報錯,而不再顯示占位符(灰色幽靈女孩)。

centeredvcentered 角色的對話文本窗口將隱藏。

使用Shift+O打開控制台並作出的更改並應用後,回滾一步不會影響剛才的修改。 再多回滾一步才行。

7.4.7 link

Web版本與Web版音訊 link

在Web平台播放音訊的方式已重寫。不同於其他平台使用的ffmpeg,Ren’Py的Web版本將使用用戶瀏覽器內建的音訊播放器。 瀏覽器內建的音訊播放器往往使用多執行緒技術,可以防止web平台上出現音訊卡頓和爆音的問題。

Web平台上支持的音訊格式也取決於瀏覽器。在目前常見的Web瀏覽器上可以支持Opus、Ogg和MP3格式,而Safari瀏覽器只支持MP3(詳見後面Safari中某個issue的說明)。

新增配置項 config.audio_filename_callback ,可以根據運行平台Web還是其他平台,調整實際播放的音訊檔案。

如果瀏覽器支持自動語音,在Web平台上可以使用鍵盤的“V”鍵開啟自動語音。

只有基於webkit的瀏覽器才支持Ren’Py,原因詳見 https://bugs.webkit.org/show_bug.cgi?id=227421 。 該bug對macOS的Safari瀏覽器,以及所有iOS系統的Web瀏覽器都有影響。 目前沒有辦法在Ren’Py層面修復這個問題,web的shell層做了修改以上報該isuue.

iOS link

生成(build)iOS版本時已使用更新版本的Clang,可以在iPhone12和iPhone SE2上運行,並且不會有左右兩側黑邊(某些情況下則是四周都有黑邊)。

Ren’Py可以編譯專門Ml Mac版本iOS模擬器的版本,不過模擬器本身的運行時(runtime)會觸發各種問題。

輸入 link

輸入(input)可是組件新增了一些特性。主要是以下新特性:

  • 游標移動到單字左端。(Windows快捷鍵Ctrl+左箭頭,Mac電腦快捷鍵Alt+左箭頭)

  • 游標移動到單字右端。(Windows快捷鍵Ctrl+右箭頭,Mac電腦快捷鍵Alt+右箭頭)

  • 刪除一個單字。(Windows快捷鍵Ctrl+退格鍵,Mac電腦快捷鍵Alt+退格鍵)

  • 刪除一行。(Windows退格鍵,Mac電腦快捷鍵Command+退格鍵)

此外,Mac電腦有兩個快捷鍵Command+左箭頭、Command+右箭頭,分別可以跳轉到某一行的開頭和結尾,分別對應其他平台的Home和End鍵。

輸入游標將閃爍以提示輸入。閃爍頻率由配置項 config.input_caret_blink 決定。

Other link

Preference() 函數現在會返回行為函數(action),可以接入渲染和可讀寫菜單項。

新增 renpy.set_focus() 函數,可直接設置獲取焦點的可視組件,儘管滑鼠運動可能會立刻改變實際焦點。

使用變換(transform)修改層疊式圖像特性(property)時,將按分組(group)生效。 之前的生效方式在某些情況下會造成矛盾,例如整個組設置了 align ,而transform傳入了 xalign 作為圖像屬性(attribute).

通過控制台設置的變數也可以回滾了。

新增 renpy.mark_label_seen()renpy.mark_label_unseen() 函數,可以直接控制腳本標籤(label)是否已被閱讀。

新增 renpy.mark_audio_seen()renpy.mark_audio_unseen() 函數,可以直接控制某個音訊檔案是否已出現過。

新增 renpy.mark_image_seen()renpy.mark_image_unseen() 函數,可以直接控制某個圖像是否已查看過。

界面內的ATL變換將在界面第一次顯示時就開始運行,而不再是包含那個變換的某一部分界面第一次顯示時才運行。

新增 config.autosave_on_input 配置項,根據輸入設定自動存檔。

固定位置參數後面跟關鍵字參數時,Ren’Py將報一個特定錯誤。

xsizeysize 可以使用浮點數,並獲得正確結果。 之前傳入浮點數將會被乘以兩次,並導致錯誤結果。 例如 xsize() 設置為0.5會將寬度設置為原來的1/4,正確的應該是1/2.

persistent._clear() 方法列入文件,作用是清除持久化數據。

西班牙語版本更新。

Atom更新。

7.4.6 link

camera語句 link

新增了 camera 語句,用在3D舞台系統中。 這個語句與 show layer 語句相似,但 camera 語句不需要指定圖層名,也不會在使用 scene 語句後清除效果。

可以直接這樣寫

camera:
    perspective True

就能啟用3D舞台系統。

除此之外, show layer 語句和 scene 語句在7.4.4及更早版本中的效果發生了反轉。 scene 語句將清除 show layer 語句帶來的變換效果。

模型可視組件 link

新增類 Model 是一種使用基於模型渲染器並用於創建模型的可視組件。 現在可以使用該類創建多紋理的2D模型,並可以自訂變換(transform),並像內建的各種變換一樣使用。

目前這個組件還不支持3D,不過未來可期。

其他提升 link

Atom文本編輯器升級,對應的renpy語法高亮插件也需要同步升級,可以將Ren’Py近幾個版本中新增的關鍵字也高亮顯示。

使用遊戲控制器時,將立刻隱藏滑鼠游標。

修復項 link

每夜版中在iOS平台編譯過程中產生的錯誤已修復,不過那個錯誤沒有出現在Ren’Py正式版中。

Ren’Py應用程式窗口失焦後,模態(modal)界面無法攔截時間事件的問題,已經修復。

blur著色器的疊代次數做了限制,確保Ren’Py與大多數使用webgl的設備相容。

在勾選“強制重新編譯”選項時,Ren’Py生成最終文件時將重新編譯 renpy/ 目錄下的所有Python文件。 這樣可以確保某些原因修改過的文件都能重新編譯,但並不是指創作者電腦上Ren’Py所在的整個目錄。

使用animation時間軸時,ATL將跳到可視組件顯示內容的第一幀。

回滾之後,Ren’Py的暫停設置了超時。

7.4.5 link

基於模型的渲染器 link

從Ren’Py 7.4.5開始,基於模型的渲染器將作為遊戲的默認渲染器。 如果要禁用此渲染器,請將 config.gl2 設置為False。

啟用基於模型的渲染器後,Ren’Py可以支持“3D舞台”。 3D舞台在顯示圖像時增加了第三個維度,當可視組件縮放、移動、旋轉等變化時顯示3D透視效果。 更多資訊詳見 3D Stage

為了3D舞台的使用便利性考慮,使用 show layerrenpy.layer_at_list() 應用到整個圖層的變換(transform)後,scene 語句不再清空該圖層的變換(transform)。

啟用基於模型的渲染器後,可以使用新增的 Swing() 轉場效果。 該轉場能讓場景在3D空間裡的垂直或水平軸向旋轉,並實現場景切換。

新增的 blend 變換特性可用來指定遮罩函數。 遮罩函數控制如何將新的像素與原有像素混合。除了Ren’Py原有的“normal”和“add”遮罩函數,這次新增了“multiply”、“min”和“max”函數。

滑鼠 link

一直以來積攢了一些對硬體滑鼠支持的修改和提升,現在正式在文件中發布了GPU中受限尺寸硬體滑鼠的支持。

新增配置項 config.mouse_displayable 和可視組件 MouseDisplayable(),可用軟體滑鼠替換硬體滑鼠,類似於Ren’Py 7.3或更早之前的方案。

功能特性 link

新增函數 renpy.screenshot_to_bytes(),可以截圖並把圖像存入一個二進位制對象,該二進位制對象可以傳給 im.Data()。 二進位制對象很大,可以將它儲存在常用或永久存檔中。

新增的 renpy.music.get_loop() 函數會返回某音訊通道上的一個循環播放音訊檔案列表。 可以用來控制循環播放的順序等。

renpy.input() 函數和input可視組件可以使用新增的 mask 參數。 該參數是一個字串,用來遮擋向用戶展示的字元內容。常用於隱藏密碼文本。

啟動器新增了一個黑暗主題。

新增的 config.adjust_attributes 配置項,可以實現圖像屬性(attribute)替換。 比如,可以將原本的 eileen happy 替換為 eileen happy_eyes happy_mouth。 層疊式圖像(LayeredImage)也可以契合該功能。

從命令行運行lint工具時,選項 --error-code 可以在lint運行失敗時讓Ren’Py返回錯誤代碼。

圖層轉場可以在某個互動行為結尾持續。

Ren’Py避免在回滾中暫停,總是嘗試在某個需要互動的語句處結束回滾。

播放音訊時,現在可以同步兩個音訊通道上不同音訊檔案的時間軸。

安卓 link

發布安卓版本的幾個必要的包(package)已經包含在Ren’Py中。 這樣就修復了由於Bintray關閉導致新安裝的Ren’Py 7.4.4無法成功發布安卓版本。

Ren’Py在安卓上顯示preslash界面的方式變更。 preslash現在使用Java bootstrap顯示,在OpenGL圖層頂部的一個新圖層中。 相對於Ren’Py 7.4中使用SDL的2D渲染器,這是一個新的渲染機制。 這個改動將提高安卓設備的相容性,並避免啟動階段的黑屏。

此次改動的另一部分是,Ren’Py縮放preslpash圖片的方式也改變了。Ren’Py會將presplash圖像在整個可用區域內使用scale-to-fit方式進行縮放。

某些安卓設備上模糊效果無法正確顯示的一個問題已修復。

在安卓設備上播放某些稀有影片、音訊格式時出現的一個問題已修復。

安卓方面的修復會要求創作者重新生成安卓項目,遇到安卓在配置時的問題

其他平台 link

Web平台beta版更新。

iOS 14.5.1及更高版本上的行動版Safari瀏覽器的一次回退,使Ren’Py無法在該平台運行。 由於該問題是由行動版Safari引起的,沒有解決方案,只會向用戶顯示一調提示資訊讓他們聯繫蘋果公司。 此次回退也影響了其他在iOS平台的瀏覽器,比如行動版Safari封裝外殼的Chrome和Firefox瀏覽器。

iOS版本生成問題修復。

macOS平台對Steam的支持已修復。

macOS應用程式的簽名和認證已修復。

其他修復項 link

預設的level-of-detail bias設置為-0.5,可以通過配置項 config.gl_lod_bias 修改。 這個值在Ren’Py中對縮小有用,對放大沒用。不過在放大圖像時可能會產生鋸齒。

此外還有一些Ren’Py針對模態界面的提升。

7.4.4 link

old-game目錄 link

為幫助創作者實現遊戲多個發布版本(比如早期公測或Patreon平台版本),Ren’Py新增了old-game目錄,會將前一個版本game目錄的部分內容複製到old-game中。 Ren’Py會使用目錄中的.rpyc文件。由於.rpyc文件在載入遊戲時需要使用,所以也可以用於幫助多人開發遊戲遇到的載入問題。

更多資訊,詳見 文件

修復 link

使用手勢或控制器導致程序異常退出的一個問題已修復。

發布web版本時windows版本程式異常退出的問題已修復。

成就系統的後端持久化數據,可以清空進度。

Live2D可以重設不透明度等參數。

載入時,Ren’Py不再改變窗口最大化尺寸。

其他 link

新增了一項GL特性 blend_func ,需要啟用基於模型的渲染器。 該特性可以自己定義GL遮罩函數,使Ren’Py開始支持各種遮罩模式。

Live2D可以支持additive(疊加)和multiply(相乘或正片疊底)遮罩模式。

使用default或define定義 renpy 命名空間的變數時將報錯。

之前有一些 ref:Preference對象 <preference-variables> 的方法在文件中遺漏,已補充在文件中。 這些方法可以獲取或設置當前音量值和靜音狀態。

7.4.3 link

Windows link

重寫了修改圖示的代碼,生成的可執行程序只能包含軟體和圖示,不再含有任何冗餘數據。 這樣應該能夠避免某些防毒軟體的攔截。

當前版本Ren’Py已經接入Windows平台的通用C運行時(Runtime)庫。 這樣可能會提升Windows Vista某些補丁版本的運行效率。同時也使得Ren’Py更符合現代軟體安全要求,避免某些殺毒按軟體的攔截。

當前版本Ren’Py禁用了Nvidia顯示卡的執行緒最佳化(Threaded Optimization)功能。 N卡的執行緒最佳化功能在Ren’Py上表現很糟糕,會在某些不希望暫停的地方突然暫停。 這樣也可能修復音訊播放出現斷裂的問題。

在OpenGL不可用而DirectX可用的情況下,Ren’Py將自動使用ANGLE庫,通過DirectX模擬OpenGL ES。 該功能在Ren’Py 7.4版本中還不能正常工作。當Ren’Py嘗試各種不同的視覺系統時,窗口將出現閃爍。

安卓 link

當安卓修改某個渲染上下文(context)時,“非基於模型”渲染器可以正確分配紋理。 解決了以前隨機發生的畫面撕裂問題,尤其是使用Dissolves效果時出現的問題。

這解決了以往的一個問題,即在遊戲還沒有完全啟動時用戶就切換應用,導致啟動異常。 現在當Ren’Py發現程序啟動時沒有獲取焦點時,將在用戶切回遊戲時保存並退出,然後再重新啟動。

總體來說,安卓設備的相容性都得到了提升。

新增特性 link

新增配置項 config.main_menu_music_fadein, 用以控制主選單音樂的淡入方式。

新增的 renpy.get_zorder_list()renpy.change_zorder() 函數允許圖像或界面顯示中設置zorder的值。

window和frame組件可以使用樣式特性 modal 。 這兩種組件中modal特性的語法和功能,與界面的 model 特性類似,但僅限於限制滑鼠在這兩種組件範圍內的作用。 主要用於確保玩家不能點擊到window背後的某些按鈕,而那些按鈕並沒有被禁用。

可視組件 Live2D() 現在可以使用參數 update_function , 使用該參數能直接修改對應的其他參數。

當前版本Ren’Py支持顯示emoji表情和基本多文種平面(Basic Multilingual Plane,簡稱BMP)以外的字元,前提是使用的字體檔案支持那些字元。 目前使用字體渲染系統顯示emoji表情,所以只有黑白單色符號。

FontGroup 類用於某個字體內部的字元重映射(remap)。

使用在 AlphaMask() 中用作遮罩(mask)的可視組件可以獲得焦點,並允許應用新的效果(effect)。

玩家可以選擇忽略不能載入的圖片文件。

新增的 renpy.get_sdl_dll()renpy.get_sdl_window_pointer() 函數可以使用ctype函數庫直接訪問SDL的DLL文件。 現在可以實現SDL中的各種功能,但Ren’Py本身並不提供現成的DLL文件。

使用 renpy.transition() 或帶 with 從句的語句,其轉場效果可以被滑鼠點擊終結,即直接跳到轉場結束的畫面。

renpy.translate_string() 函數正式記入文件中,其提供將某個字串翻譯為指定語言的功能。

可以創建一個 hide_windows 腳本標籤(label),提供訂製滑鼠中間或鍵盤H鍵隱藏對話窗口的方法。

新增的特性,比如 mesh_pad 變換特性和 gl_pixel_perfect gl特性,用於文本上應用著色器後實現完美的像素渲染效果。

前綴為 show_ 的特性可以用於函數 renpy.input() 的參數,並最終傳入 input 界面。

Color 類新增了一個rgba特性,其返回一個rgba元組。

舊特性 link

在Ren’Py 7.4中引入的 default_mouse 配置項允許不修改 config.mouse 的情況下實現修改滑鼠游標。但即時修改該配置項的方法不存在。

其他修復項 link

多個modal界面存在時的處理異常問題已經修復。

lint在Windows平台上運行時生成的文件將使用Windows風格的換行符。

Windows平台的SDL錯誤資訊將使用系統編碼方式進行解碼,使其更易讀。

Python中unicode引號字元的問題已經修復。

變換特性 blur 的值介於0與1之間時,已可以正常工作。

文本標籤 {done} 已做預編譯。

對GL載入失敗的情況,Ren’Py回滾到了更早版本的庫以實現更好的處理。

為macOS生成的app需要啟用HighDPI模式。

多語言支持 link

Ren’Py文件已同時翻譯為簡體中文和繁體中文,由被詛咒的章魚和逆轉鹹魚提供。

法語內容更新。

7.4.2 link

修復與變更 link

新增的配置項 config.context_fadeout_musicconfig.context_fadein_music 可以實現遊戲載入或其他運行環境變化時的音樂淡入淡出效果。

Ren’Py根據文件副檔名(.motion3.json 和 .exp3.json)搜尋Live2D動作和表情文件,而不再使用目錄名稱。

新增的 build.include_i686 配置項判斷32位版本的Ren’Py是否打包生成。不包含32位版本的程序不僅可以減少下載數據,還能避免某些防毒軟體的過度反應。

新增的 build.change_icon_i686 配置項將阻止i686版本的圖示變更。這個改動可以避免防毒軟體的錯誤檢測。

當遊戲運行時,Ren’Py不再禁用螢幕保護或系統休眠功能。

maxOS上一個全螢幕禁用調整窗口大小後無法恢復窗口的問題,已經修復。

樹梅派上播放webp圖片導致當機的問題已經修復。

此版本修復了生成發布過程中會遺失文件的一個錯誤:

  • say.vbs文件遺失,在Windows平台的自動語音功能無法正常工作。

  • 用於支持ANGLE的一些文件遺失,導致DirectX渲染時無法正常工作。

安卓 link

在三星的設備上發現一個問題,是啟用放大快捷鍵時,可能遊戲會無法響應。 我正在出補丁修復,但不想因此延後這個版本的更新。

macOS上的JVM檢測機制很健壯,不太會被瀏覽器插件拒絕。

當前版本Ren’Py推薦使用AdoptOpenJDK作為JVM的基礎。

7.4.1 link

pause語句變更 link

pause 語句的語法變更,正確用法為:

pause 1.0

等效於:

$ renpy.pause(1.0)

不再是:

with Pause(1.0)

這表示需要真正暫停的功能特性都可以用pause語句實現。

modal型界面不再能阻止 pauserenpy.pause() 的暫停效果。 這表示pause語句可以對顯示在其上層的界面也有效果。

say語句帶id的從句 link

say語句可以增加一種 id 從句,允許創作者指定原say語句id。 這用在需要多語言支持的項目有用,比如原版語言中修復了一個拼寫錯誤,不再需要更新所有其他語言文件。

使用該功能特性是,只要在say語句後面添加 id,並拼上語句的id號。

e "This used to have a typo." id start_61b861a2

Live2D link

Live2D添加了一個 default_fade 參數,可以修改動作和表情開始與結束時的默認平滑過渡時間。

一個Live2D的明顯元組錯誤已經修復。

控制器黑名單 link

The Nintendo Switch Pro Controller, when connected to a computer by USB, requires an initialization sequence to be sent to cause it to act as a Joystick, and not return incorrect data. 任天堂Switch Pro手把使用USB連接上電腦後,會申請一個初始序號之後才能作為遊戲設備使用。

Ren’Py 7.4.0版本嘗試發送這個序號,但這樣做需要直接接入USB匯流排,在某些電腦上可能會導致當機或長時間暫停。 我們認為,這種做法很容易導致Ren’Py的其他相容問題。

結果是,我們把任天堂Switch Pro手把加入了控制器黑名單中,不能在Ren’Py中使用。

macOS link

現在macOS的最低支持版本是10.10(Yosemite). Ren’Py 7.4無法在這個版本號運行,所以這是對該版本支持的恢復。

macOS 11.0(Big Sur)上無法選擇項目目錄的問題已經修復。

Pyobjus已經內建在macOS版本Ren’Py中。這個庫可以使用Cocoa的API。

安卓 link

有一些報告發現,Ren’Py 7.4.1預發布版本在某些老舊的安卓設備上無法正常工作,比如三星Galaxy S5。 我們正嘗試著一個設備復現此類問題,必要的時候再發布一個新版本。

多語言支持 link

更新了西班牙語。

其他修復項 link

某些支持SSE3的電腦使用Ren’Py播放某些解析度影片時導致的當機問題已經修復。

跟之前版本的Ren’Py一樣,影片播放時可以利用CPU多核進行解碼。

Windows平台不使用100%DPI時,Ren’Py窗口變大的問題已經修復。

選用不支持的渲染器時,Ren’Py不再會給性能告警,比如要求GL2渲染器時使用GL或者ALGLE渲染器的情況。

某些情況下say語句中屬性(attribute)無法生效的問題已經修復。

非默認UTF-8編碼文件的電腦,使用MultiPersistent保存文件不生效的問題已經修復。

rpy python 3 標識混合編譯的性能提升。

三重引號字串(比如用在gui.about裡的)使用出錯的問題已經修復。

重新載入時,Ren’Py將重新檢測自身所在路徑。

Ren’Py會根據渲染器動態載入所有功能,並在不生效的情況下嘗試其他渲染器。

某個語句後載入的計時器(timer),會在回滾後精確復位。如果計時已經結束,即使遊戲回滾到計時器生成之前的地方,依然會保持計時結束狀態。

Ren’Py允許遊戲運行時截圖。

動態變數在回滾後無法維持動態的問題已經修復。

給定尺寸後,hbox和vbox可視組件會以Ren’Py 7.4相同方式放置所有子組件。

新增的 mipmap 樣式特性可以用在 Dissolve()ImageDissolve()AlphaDissolve() 轉場效果中, 以及 AlphaMask()Movie()Text() 可視組件中,還有所有文本。 該特性控制以上提及內容生成的紋理是否生成mipmap。不生成mipmap可以提升速度較慢電腦的渲染性能,缺點是縮小圖片時會有顯示瑕疵。 沒有指定值的情況下,該特性分別根據配置項 config.mipmap_dissolvesconfig.mipmap_moviesconfig.mipmap_text 取值。

自動語音配置項的版本切換功能體驗提升。

Lint檢查工具再次由於多語言問題爆了。

7.4 link

基於模型的渲染器(renderer) link

新版本包含一個全新的“基於模型的渲染器(model-based renderer)”,主要處理將文本和圖片繪製到顯示器上,作為Ren’Py 6.10時添加的原生OpenGL渲染器的補充(實際是替換)。 該渲染器能夠更好利用當前主流GPU(無論集顯還是獨顯)提升性能和效果。 該渲染器支持的設備包括,支持OpenGL 2.2、DirectX 9.0c或11的電腦,支持OpenGL ES 3的行動裝置和嵌入式系統。

基於模型的渲染器最大的改變在於,Ren’Py將不再受限於在二維平面上繪製矩形圖像,Ren’Py可以將圖像轉為三維空間內的三角形網格(mesh)。 已經存在和使用的矩形精靈對象(sprite)也將使用同樣的顯示方式,Ren’Py將其轉換為非矩形的網格,實際上就是全三維的幾何體(geometry)。

除了網格幾何體,基於模型的渲染器還支持著色器(shader),除了Ren’Py自帶的著色器,還允許創作者在遊戲中自訂著色器。 著色器(shader)是指運行在GPU上的小段程序,用來處理幾何體與像質數據,以此實現各種類型的圖像效果。

基於模型的渲染器實現了更快的紋理(texture)載入系統,把一些系統消耗加大的紋理載入和alpha遮罩(premultiplication)工作,從CPU轉到GPU處理。

基於模型的渲染器還會為載入進GPU的紋理創建mipmap。mipmap是指紋理的一系列分割採樣後的縮微版本,儲存在GPU中。透過創建和使用mipmp,現版本Ren’Py將圖片尺寸縮小到原來的50%,且不產生混頻失真(aliasing artifact)。 該功能在4K顯示器使用1080P或更低解析度時能有明顯效果。

在當前版本中,基於模型的渲染器是可選的配置項,通過變數 config.gl2 控制是否使用。當我們對新渲染器基類足夠經驗之後,可能會作為為類Ren’Py的默認渲染器。

Live2D link

基於模型的渲染器帶來的新特性之一,就是支持使用Live2D技術支援的精靈圖像(sprite)。 Ren’Py要求創作者自行下載Live2D Cubism的包,同時創作者在發行遊戲前需要同意Live2D技術的使用條款。

Ren’Py支持Live2D模型的顯示,可以任意改變模型的表情並將多個動作組合成隊列(queue)。該功能集成在Ren’Py的圖像屬性(image attribute)中。 當圖像屬性改變時,Ren’Py還支持動作切換的漸變(fade)效果。

matrixcolor和blur link

基於模型的渲染器帶來了變換(transform)方面的新功能,比如matrixcolor和blur。

當前版本的變換(包括ATL中的變換)新增了一個 matrixcolor 特性(property)。 該特性是一個矩陣(matrix)或即時創建矩陣的對象,用於對變換的子組件進行染色。

之前版本的Ren’Py中包含名為 func:im.MatrixColor 的圖像處理器,而新的matrixcolor特性的性能更好。 圖像處理器往往需要幾分之一秒進行運算,在即時演算中顯得太慢,並且盡顯對單一圖像處理。新的變換特性速度很快,可以用在需要演算的每一幀,並且可以應用在所有可視組件。 現在可以使用變換的matrixcolor用於某個圖層(layer),將整個圖層染色——不再需要單獨的純色圖就可以將遊戲畫面改為老舊照片的棕黃色(sepia)或者黑白兩色。

圖像處理器中的MatrixColor跟新增的matrixcolor特性有些許差別,新增的matrixcolor使用4×4矩陣並對alpha通道預乘(premultiply),所以它使用的矩陣與圖像控制器不同。 此外,使用新的matrixcolor特性時需要使用一些新的 ColorMatrix 對象。

另一個新增的變換特性是 blur ,可以根據給定的像質數對可視組件的子組件模糊處理。

Python2/Python3相容模式 link

因為Ren’Py還不完全在Python3環境內支持,該版本的Ren’Py包含了一些功能特性允許創作者的腳本同時在Python2和Python3環境下運行。

首先,Ren’Py現在使用 未來計劃 提供標準庫的相容性。 目前可以在模組(module)已經改名的情況下使用import引用Python3的模組。

某個開頭為 rpy python 3 的.rpyc 文件將會以Python3相容模式編譯。該特性導致了兩項變化:

  • Ren’Py編譯文件時將嘗試匹配Python3語法規則,包括除法規則的改變。在Python3中,1/2 等於0.5而不是0。 由於這項改變會影響可視組件的位置,寫成 1//2 可以保持原來的語法規則。

  • Ren’Py會改變字典(dict)類型的行為表現,直接在 .rpy 文件中調用 itemskeysvalues 方法時, 將返回視圖(view)類型,而不是原來的列表(list)類型。這項改變匹配Python3中對應方法的語法規則,但在面對數據保存或回滾時, 必須將返回結果顯式轉化為列表類型再使用。

升級了庫與平台支持 link

Ren’Py 7.4的生成系統(build system)統一為redone,不再使用多系統單獨生成的方式(除了webasm)。 此次生成系統的變更同時將所有Ren’Py用到的庫都升級為更新的版本。

因此,Ren’Py官方支持的平台列表有明顯變化。這裡是最新的支持列表:

平台

CPU

備註

Linux

x86_64

最低版本要求Ubuntu 16.04

Linux

i686

最低版本要求Ubuntu 16.04

Linux

i686

最低版本要求Ubuntu 16.04

Linux

armv7l

使用Raspian Buster的樹梅派

Windows

x86_64

64位或更新版本的Windows Vista。

Windows

i686

最低版本要求Windows Vista.

macOS

x86_64

macOS 10.10+

Android

armv7a

Android 4.4 KitKat

Android

arm64

Android 5.0 Lollipop

Android

x86_64

Android 5.0 Lollipop

iOS

arm64

所有64位iOS設備,iOS 11.0+

iOS

x86_64

所有64位iOS模擬器,iOS 11.0+

Web

webasm

主流web瀏覽器

最大的新增平台是64位版本Windows,這意味著Ren’Py可以在所有主流64位桌面和移動平台運行。 如果需要的話,新增的 renpy.bits 配置項可用於確認運行平台是32位還是64位(例如,將 config.image_cache_size_mb 設置為合適的值)。

當前版本不再支持32位使用armv71處理器的iOS設備。這些設備甚至不再被蘋果支持,並且也不支持Ren’Py要求的OpenGL ES版本。

Web link

多虧了新的編譯技術,現在Ren’Py在瀏覽器上的運行速度顯著提升了。

為web平台構建的遊戲可以在遊戲運行時從伺服器下載圖像和音訊檔案。 當圖像或音訊預載入時,遊戲就會開始下載。這項技術可以減少遊戲開始運行前的初始化時間和記憶體占用。

在觸控螢幕設備的web瀏覽器上運行遊戲時,Ren’Py會顯示一個觸控鍵盤,彌補WebAssembly遊戲鍵盤輸入方面的缺陷。

載入過程中可以使用WebP格式顯示splash界面,包括帶動畫的WebP。

提供了更多Python模組(module),使Python環境更貼近原生的Ren’Py埠。

提升了對iOS瀏覽器的支持。

Steam link

可以在Ren’Py啟動器安裝Steam平台的支持。方法是啟動器中選擇在“設置”->“安裝庫”->“安裝Steam支持包”。

新增的配置項 config.steam_appid 會為創作者自動創建名為 steam_appid.txt 的文件。 在項目中應用時,需要使用 define 語句賦值或在python early 語句塊中賦值。

多語言支持 link

簡體中文、日語和漢語的多語言支持更新,現在使用了統一的字體(譯者註:SourceHanSans,也就是思源黑體)。

教學項目中新增了簡體中文,由Neoteus提供。

(譯者:我不吐槽這事……)

折損和移除 link

如上面所說,Ren’Py不再支持Windows XP。

如上面所說,Ren’Py不再支持32位iOS設備。

Ren’Py內移除了下載Editra文本編輯器的選項。 Editra編輯器已經超過5年未更新,並且原始發布網站已經關閉。

基於軟體的渲染器沒有完全移除,而是做了精簡,並且在遊戲運行時不再作為可選項。原因是防止基於GPU的渲染器在實際遊戲中顯示錯誤而導致玩家認為遊戲有問題。

其他雜項 link

對遊戲控制器的支持提升。手把控制器可以實現連發效果。Ren’Py使用的庫重新編譯以支持更多主流遊戲控制設備。

Ren’Py在安卓和iOS設備上使用軟體解碼播放影片影片(movie),這意味著相同的影片檔案可以在全平台播放。

定義了滑鼠游標配置項 config.mouse ,使用SDL2的色彩游標API,能用利用硬體加速功能並降低了滑鼠移動延遲。

現在 define 語句可以用於設置字典中的一個key值。

# Ren'Py項目起源於2004年。
define age["eileen"] = 2021 - 2004

define 語句可以使用 += 和 |= 運算符,並用於對應的運算。

define config.keymap['dismiss'] = [ 'K_KP_PLUS' ]

# 這裡假設 endings 是一個集合。
define endings |= { "best" }

現在 playqueue 後面使用新增的 volume 分句,可以在播放音訊檔案的任意時候,指定某個音訊通道的音量。

變換(transform)中新增的 fit 特性提供了不同以往的圖像填充方式,可以決定圖像是否保持長寬比進行填充。 舉例來說,圖像可以縮放為給定尺寸,或者完全覆蓋不縮放。

應用 xpanypan 特性的可視組件不再會被增大為原尺寸的兩倍,便於與其他變換特性組合使用。

renpy.input() 函數可以使用正則表達式判斷輸入內容是否被允許。

Grid網格可以使用 margin 特性,用於指定整個網格的外延空白區域以及視口(viewport)的內部空白。

Ren’Py支持一種 {alt} 文本標籤(text tag)。帶有這種標籤的文本會在自動語音模式下唸出來,但不會顯示在螢幕上。 另一種相反效果的文本標籤是 {noalt} 。

啟動器窗口可以調整尺寸。“設置”選項中新增了一個按鈕,用於重設啟動器窗口大小。

新增配置項 build.mac_info_plist 便於訂製化mac版的app。

Ren’Py內建了 requests 庫,聯網功能更方便。

按下鍵盤的PAUSE鍵直接進入遊戲菜單(game menu)。

7.3.5 link

修復 link

電腦平台的presplash界面重寫,防止該界面下滑鼠點擊無響應的問題。

iOS埠更新,Ren’Py中新增一些新的模組(module),可以編譯iOS的app。

其他變更 link

audio 目錄,也就是由 audio namespace 定義的音訊目錄,可以在啟動器(launcher)中有快捷連結。同時,新建項目時會自動創建audio目錄。

新增的配置項 config.exception_handler 可以配置為某個應用程式,接替Ren’Py自帶異常處理系統的所有工作。

7.3.4 link

修復 link

該版本修復了7.3.3版本中引入的嚴重圖形故障。

  • 在Windows平台,全螢幕和窗口模式之間進行切換會導致紋理(texture)載入失敗,並導致顯示錯誤的紋理。

  • 在所有平台,使用 Flatten() 都可能導致圖形故障。

其他變更 link

當前版本中,動態圖像(dynamic image)的任何地方都可以包含 “[prefix_]” ,尤其是使用 add 將某個動態圖像添加到按鈕(button)、拖拽組件(drag)等類似可以獲取焦點的對象時。

創作者自訂語句可以包含if語句。

界面更新時,拖放系統性能提升。

7.3.3 link

audio link

當前版本Ren’Py新增 audio 目錄,在 audio命名空間 中自動根據檔案名定義音訊名。 如果有個音訊檔案 game/audio/overture.ogg ,可以在腳本中直接播放:

play music overture

新增類 AudioData() ,可以讓創作者在Ren’Py中直接使用壓縮音訊數據,而不再需要使用其他程序預處理。 為實現這個功能,Ren’Py引入了Python的wave和sunau模組。

單聲道音訊檔案混音的一個問題已經修復。該問題可能會導致很多WAV文件無法播放。 (我們始終不推薦使用WAV文件。)

平台 link

鑑於蘋果公司的條款要求,Mac版的Ren’Py重建為一個未簽名的二進位制程序。現在需要按住ctrl並點擊renpy.app程序,然後選擇“打開”才能啟動Ren’Py。

對安卓的版本要求降低為Android 19(Android 4.4 KitKat)。

Ren’Py的web埠有一些變更:

  • Screen variants 可以檢測配置和進行設置。

  • 全螢幕功能提升,儘管用戶可能需要點擊對應選項才能啟用全螢幕。

  • 關閉web頁面的行為可以被檢測到,並保存持久化數據。

  • 原先默怕生成的‘game.zip’檔案名可以修改。在index.html文件中的‘DEFAULT_GAME_FILENAME’配置項控制該項。

  • 針對行動裝置的HTTP請求(原生+renpyweb):詳見 https://github.com/renpy/renpyweb/blob/master/utils/asyncrequest.rpy

  • 啟用Python的web埠用作測試WebSocket,可以使用Python的‘socket’模組監測埠。

  • HTTP快取控制功能,允許遊戲更平滑更新。

  • 引入pygame.draw模組,支持Canvas繪圖板。

  • 提升WebGL相容性。

其他變更 link

在進行重寫GL項目時,我們發現在7.3.0版的性能下降問題,原因在於framebuffer對象的切換。 修改了FBO的使用方法後,Ren’Py性能得到了提升。

renpy.input() 函數可以接收界面的名稱,用於用戶輸入的提示語。

使用界面語言創建的列表、字典和集合可以正確解析。這可以讓更多可視組件可以解析為常數,提升界面性能。

回滾時隱藏通知界面。

NVL模式界面默認顯示對話窗口,防止 windows show 語句已生效導致的問題。

在一個多段語句(比如對話中的菜單)中,當使用 from_currentcall語句 設置為True 時,主控流程將恢復為多段語句的第一段(這樣才能顯示對話內容)。

更多函數使用圖像標籤(tag)的默認圖層。

新增 renpy.is_init_phase() 函數。

當對話內容是menu語句的一部分時,自動語音功能也可以生效。

移除對GLES1的支持。(多年沒用的東西了。)

SelectedIf()SensitiveIf() 行為(action)可以支持將其他行為作為入參。

很多條值(BarValue)可以使用一個 force_step 入參,強制將某個條(bar)的值調整為最接近的某個檔位(step)值。

Frame() 支持tile入參是一個整數字串,該整數表示frame中tile圖像的重複次數。

多語言支持 link

韓語和西班牙語更新。

7.3.2 link

修復 link

在上個版本中的平台變數後退問題已修復。

多語言支持 link

更新西班牙語的支持。

7.3.1 link

變更 link

描述文本(descriptive text,為視力受損人群設計,在開啟自動語音的情況下顯示並描述場景資訊)功能更新。 描述文本的角色改為使用 alt (原先的 sv 角色作為別名)。還可以使用訂製角色顯示描述文本,而不僅限於旁白。

當前版本Ren’Py每次都會初始化媒體播放系統,這樣無聲影片也可以正常模仿。

大多數可視組件中,用作選擇默認獲取焦點的可視組件的 default 特性,重命名為 default_focus,避免與 default 語句發生衝突。 該特性值是一個整數,值最大的可視組件獲得焦點。

可視組件 Flatten() 會從入參 child 獲取坐標。。

使用renpy.random.Random並帶種子的隨機數生成器支持回滾。

模擬安卓或iOS系統時,運行平台的配置變數(例如renpy.android、renpy.ios、renpy.windows和renpy.mobile)將被正確設置。

當前版本Renpyweb創建存檔文件時會儲存日期和時間。

修復 link

當前版本修復了一個很重要的問題,該問題可能會導致界面內插(interpolate)文本不更新或更新出錯。

當前版本的圖像預載入規則將根據圖像預載入進程運行。

修復了一個與 {clear} 文本標籤相關的問題。

在很多情況下,配置項 config.end_game_transition 無法正常運行的問題已經修復。

多語言支持 link

對俄語、漢語和西班牙語的支持更新。

7.3.0 link

Renpyweb link

由於Sylvain Beucler的貢獻,當前版本Ren’Py可以生成HTML網頁平台版本。所有支持WebAssembly的主流web瀏覽器都可以運行HTML版的Ren’Py項目。 HTML網頁版會下載整個遊戲再運行,所以適合做一些小型項目或大型項目的示範版本。 Web版目前標記為beta測試版,web平台本身存在很多問題(最明顯的就是單一執行緒),所以載入較大圖片時會導致音訊卡頓。 所以,在其他平台運行良好的Ren’Py項目,在web端運行可能運行很糟糕。 我們將隨著Web瀏覽器一起改進,目標是最終移除beta標誌。 在Ren’Py啟動器點擊“Web”按鈕就可以生成一個工程的Web版本。當前版本的啟動器還附帶一個小型Web伺服器,配合Web瀏覽器就能進行測試。

創作者定義語句(CDS) link

Ren’Py中的創作者自訂語句(creator-defined statement)和使用這些語句的Lexer對象,在多處進行了擴展並提升了功能。 相關語法如下:

  • 現在可以要求Lexer對象將某一行程式碼作為一條Ren’Py語句或一個Ren’Py的語句塊處理。

  • 可以要求Lexer捕獲錯誤,便於將報錯範圍限定在創作者定義語句(CDS)內,而不是整個CDS。

renpy.register_statement() 函數有新的入參,對應新功能。

  • 在預載入語句中使用 predict_allpredict_next 兩個入參,可以控制預載入所有後續所有語句,亦或每次只預載入下一條可用語句。

  • 新增的 post_execute 入參可以讓我們指定下個語句(通常是CDS語句後面那句)運行時執行某個函數。 當語句運行並執行內部的語句塊時,還可以使用一個表達式,執行某些工作然後退出時執行清理。 (舉個例子,某個腳本標籤接到一個消息事件並執行後,跳轉回原來的調用點。)

  • 新增的 post_label 入參可以讓我們指定一個腳本標籤名,並在CDS執行完跳轉到對應的腳本標籤,功能類似調用 from 語句。

當前版本Ren’Py會將CDS語句的處理結果快取在 .rpyc 文件中。這樣設計可以運行更加複雜的語法,執行效率也會提升。 同時這也意味著,如果修改CDS處理函數時,可能需要執行強制重新編譯。

界面語言提升 link

當前版本可以引用界面語言可視組件的語句中應用 as 分句。 在拖拽組件中這點非常實用,可以讓界面捕獲到拖拽對象並需要時調用對應方法。

on 語句可以使用支持一個事件消息列表。

界面(screen)新增了 sensitive 特性。這個特性決定該界面是否可以發生互動。

在界面語言中,如果某個Python語句後面帶有不正常的特性名時,當前版本的Ren’Py會生成一個錯誤。(雖然很少見,但這往往是一個語法錯誤。)

文本提升 link

當前版本Ren’Py支持自閉合的自訂文本標籤(tag),這是不需要成對閉合標籤的 自訂文本標籤

當前版本Ren’Py支持三種新的表示,可以用於格式化文本:

  • “[varname!u]” 強制文本大寫。

  • “[varname!l]” 強制文本小寫。

  • “[varname!c]” 強制首字母大寫。

安卓和iOS提升 link

當前版本Ren’Py會在支持的設備上使用Framebuffer對象。因此,安卓和iOS設備上運行時配置項 focus_mask 會生效。

當前版本Ren’Py將為安卓生成64位的arm二進位制文件。這是Google Play商店將在今年晚些時候執行的強制要求。

安卓上文本輸入的功能再次重寫,修復了用戶卡輸入的問題。 Completion was eliminated, as it was the source of the problems. While languages that require input methods will need a larger rewrite to function, Ren’Py should now properly handle all direct input keyboards.

多語言支持 link

Ren’Py啟動器和樣例工程已由Arda Güler翻譯為土耳其語。

Ren’Py教學工程已由Moshibit翻譯為西班牙語。

法語、韓語、俄語和西班牙語均有更新。

其他提升 link

side 可視組件的子組件渲染順序調整,將根據在控制字串中的順序進行渲染。

say 語句、 menu 語句和 renpy.call_screen 語句新增入參 _mode ,可以用來指定語句執行時的運行 模式

函數 renpy.show_screen()renpy.call_screen() 可以使用入參zorder。

當前版本Ren’Py播放單聲道音訊檔案時,音量將與雙聲道音訊檔案一致,而不再是音量減半。

新增的 config.load_failed_label 將指定一個腳本標籤(label),當Ren’Py讀取存檔失敗時自動跳轉。因為在讀檔失敗時不能定位到當前語句。

這個新函數可以實現遊戲的自動恢復機制。

新增配置項 config.notify ,可以攔截系統通知消息並使用自己定義的內容。

config.say_attribute_transition_callback 的介面已做相容處理,同時接受新舊兩種標籤。

修復 link

Ren’Py遺失某些字元的問題,特別是阿拉伯語中設置為強調色部分,已經修復。

內部使用的OpenDyslexic字體檔案已變更,解決直接複製遊戲可能出現的問題。

7.2.2 link

在此版本中,Ren’Py新增了一個輔助菜單,打開方式為按鍵盤“a”鍵。 該菜單面向玩家開放,讓玩家可以覆蓋遊戲字體,修改文本大小和啟用自動語音。

在此版本中,Ren’Py將允許覆蓋公共game目錄(/mnt/sdcard/Android/package/files/game)內容。 該功能出現在7.2.0版本的功能列表中,但當時還無法正常運行。

在此版本中,Ren’Py支持say語句中的臨時圖像屬性(attribute),應用於多語言支持(translation)。

上傳到itch.io時,Ren’Py會自動下載butler模組。這表示現在上傳時不需要安裝獨立的Itch應用程式,而之前的版本是需要的。

各種條(bar)值對象,包括 DictValue()FieldValue()VariableValue()ScreenVariableValue() 都可以使用新增的 action 參數。該參數對應一個在值發生改變時,執行的某個行為函數(action)。

回滾系統最佳化,減少了GC數量。

7.2.1 link

iOS版提升 link

現在Ren’Py生成iOS版工程時,會設置iOS應用的版本欄位。

從此版本起,Ren’Py將搜索ios-icon.png和ios-launchimage.png文件,使用合適的尺寸用作iOS版本的圖示和啟動圖像。

其他提升 link

當讀檔後立刻使用回滾,renpy.in_rollback() 函數將返回True。可以使用下面的腳本:

::
python:
if not renpy.in_rollback():

renpy.run(ShowMenu(‘save’))

實現在初始化階段就顯示存檔菜單,而不用等到讀檔或回滾。

新增配置項 config.say_attribute_transition_callback ,可以選擇say語句的基礎轉場效果。

新增環境變數 RENPY_SEARCHPATH ,可以覆蓋啟動參數 config.searchpath

修復 link

Ren’Py自身代碼經過一輪審核,確保運算符 == 和 != 匹配,無論 == 是否被重定義過。

使用 add 語句在界面中添加變換(transform)時可能出現的問題,已經得到修復。

extend 語句處理入參的機制發生改變,確保較新的入參優先度高於 extend 之前的say語句中的入參。

當前版本Ren’Py在判斷動態圖像(dynamic image)是否相等時會考慮作用域。這個改動也修復了界面中某些動態圖像不更新的問題。

macOS上 config.save_dump 的值為True時導致崩潰的問題已經修復。

config.profile 的值為True時導致崩潰的問題已經修復。

安卓平台顯示數字鍵盤時,Ren’Py明確要求文本(而不是信箱地址、密碼和電話號碼等)輸入。

某些menu語句導致前向滾動無法運行的問題已經修復。

7.2 link

臨時性say語句 link

Ren’Py現在支持臨時性say語句。用法與普通say語句相同,可與普通say語句混用。 臨時性say語句中的設置的各類屬性(attribute),在語句執行完後將恢復為上一條語句的狀態。 比如下面這段腳本:

show eileen happy

e "我很開心。"

e @ vhappy "我真的很開心!"

e "我還是很開心。"

對話中的第一行和最後一行,Eillen將使用happy表情。對話的第二行中,Eileen將使用vhappy表情。

變更 link

新增 window auto showwindow auto hide 語句,可以在顯式展示和隱藏對話窗口後,保持 自動對話窗口管理 有效。

Preference`(“display”,“window”)() 現在可以避免創建比整個界面更大的窗口。 在 gui.init() 中配置的窗口最大尺寸就是上限。

創作者定義的語句 新增了幾個語法分析器方法,可以處理入參、圖像命名的組件、腳本標籤(label)和使用特定分隔符號的Python代碼。

renpy.force_autosave() 函數新增一個入參,可以防止自動存檔未完成的情況下再次強制自動存檔。

點擊繼續界面 新增一些參數。

放置文本型對象時, yanchor 特性(property)的值可以是 renpy.BASELINE。設置為該值時,錨點就會設置為文本第一行的底線(baseline)。

新增的圖像操縱器(image manipulator) im.Blur() 可以模糊圖像。感謝大佬Mal Graty的貢獻。

層疊式圖像(layeredimage)組支持 multiple 特性(property),允許在同一個組內同時使用多個圖像屬性(attribute)。 這是個很實用的功能,可以讓一組自動定義的函數應用在很多不衝突的圖像上。

(有多個顯示設備時)當滑鼠切換到不同的桌面時,Ren’Py會保持全螢幕。在重新最大化窗口的載入過程中不再會出現抖動現象。

config.allow_duplicate_labels 配置項可以定義或設置一段init python代碼,然後允許遊戲內出現重複的腳本標籤(label)。

可視組件 Movie() 可以設定循環或不循環,並在停止循環播放後顯示關聯的靜態圖像。 還可以在影片播放之前顯示某個指定的圖像。

安卓平台變更 link

安卓SDK的下載更新。修復工具無法下載的問題。

針對鍵盤制定了一個顯式行為函數,確保確認鍵(enter)正常。

當使用sideload模式安裝在亞馬遜的設備時,Ren’Py使用亞馬遜的支付API,可以使用“雙商店”APK進行支付系統測試。

Ren’Py現在可以使用公共遊戲目錄(/mnt/sdcard/Android/package/files/game),前提是在遊戲中定義好使用的目錄。

修復 link

使用dissolve效果時界面底部會出現一條不透明的黑色或灰色線,這個bug已經被修復。

對imagefont字體的支持問題已修復。

從啟動器導航菜單創建新文件的功能已經可以運行。

菜單集功能再次有效。

Function() 和其他行為函數被傳入不相容的數據類型時,Ren’Py不會掛死。

某個情況下前向滾動失敗的問題已修復。

MacOS上Steam消息無法正確顯示的問題已修復。

7.1.3 link

這個版本是相當於7.1.2的再次發布,只修復了一個bug。那個bug是在測試版本殘留的問題,會導致在初始啟動階段就設置 config.default_language 的值。

7.1.2 link

功能提升 link

Ren’Py的界面語言現在支持包含匿名的ATL變換(transform)。比如現在可以這樣寫:

screen hello_title():
    text "你好。":
        at transform:
            align (0.5, 0.5) alpha 0.0
            linear 0.5 alpha 1.0

新增的 SetLocalVariable()ToggleLocalVariable() 行為函數,可以用來設置界面使用的變數。

新增的 config.menu_include_disabled 配置項,決定菜單是否應該包含可由if分句禁用的入口(entry)。

在安卓模擬器模式中可以使用Shift類組合鍵(比如Shift+I和Shift+R)。

在文本標籤(tag)需要一個值卻沒有提供的情況下,Ren’Py提升了報錯資訊。

新增的 _version 配置項標識遊戲在創建時的版本號。這個值僅僅儲存創建時定義的版本號。後續是否更新取決於創作者的需求。

可視組件 Movie() 添加一個新的模式,讓同一個文件內的色彩數據和alpha mask數據按邊對齊。 這個模式防止main影片與mask影片出現不同步的問題。

FilePageNext()FilePagePrevious() 函數可以通過入參控制,是否可以將玩家帶入自動或快速存檔頁。

新增的 config.skip_sounds 配置項決定Ren’Py是否跳過非循環播放的音訊檔案。

多語言支持 link

現在Ren’Py能夠自動檢測使用者系統中的地區,並設置相應的語言。 詳見 config.enable_language_autodetect多語言支持 部分文件。

德語部分更新。

修復項 link

修復了一個Windows平台的bug。這個bug僅在使用阿拉伯語和希伯來語時出現(譯者註:就是說中文用戶不用管,所以這也不按原文翻譯了)。

如果讀取某個圖像(image)時,發現完全匹配圖像名的圖像不存在,但相同前綴(prefix)的圖像存在時,現在Ren’Py會報一個錯誤(error)。在這次修改之前,如果圖像eileen happy而要顯示eileen happy unknown時,那個unknown屬性(attribute)會被忽略。

Lint工具功能提升,能夠處理帶屬性(attribute)的非同名圖像,比如層疊式圖像(layerd image)。

Ren’Py會生成適合手機顯示的選項菜單圖像。

7.1.1 link

歷史記錄方面的bug修復 link

這個版本解決了Ren’Py中“歷史”界面的一個問題(issue)。這個問題的觸發條件是,一行對話中出現不成對的方括號,比如:

"I [[think] I'm having a problem."

出現這種情況時,字串“I [think] I’m having a problem.”會添加到歷史記錄中。如果Ren’Py中顯示這段歷史記錄,並嘗試內插 think 變數,就會掛掉。

新版本的修復辦法是,在歷史界面中添加了 substitute False 的情況。這個辦法只對新建的項目有效。 之前已經存在的老項目,創作者只能自己修復了。 下面是一個新的歷史界面定義:

screen history():

    tag menu

    ## 因為歷史界面可能很大,所以不預載入界面。
    predict False

    use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):

        style_prefix "history"

        for h in _history_list:

            window:

                ## 如果history_height的值是None,就使用自適應布局。
                has fixed:
                    yfit True

                if h.who:

                    label h.who:
                        style "history_name"
                        substitute False

                        ## 如果對應角色的文本顏色有單獨設置,就獲取設置的文本顏色。
                        if "color" in h.who_args:
                            text_color h.who_args["color"]

                $ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)
                text what substitute False

        if not _history_list:
            label _("The dialogue history is empty.")

新的歷史界面定義中包含一行 substitute False 。創作者可以在自訂的歷史界面中添加這行,避免上面提到的程序卡死問題。

安卓版本的提升 link

現在Ren’Py分配給安卓發布工具的記憶體總量增大到1.5GB,也就是Google套件中的預設值。為了確保創作者具有發布更大遊戲的能力,請確認電腦上安裝了64位版本的Java 8。

Ren’Py明確要求安卓系統,將軟鍵盤的“回車(Enter)”鍵作為一次輸入的結束。

現在Ren’Py在安卓8(Oreo)以下版本中將剪裁和重新調整app圖示(icon)的尺寸。

Ren’Py生成x86_64版本的apk時,會使用一個不同的版本號數字。這樣就可以同時讓適配x86_64和armeabi-v7a處理器的發布包上傳到Google Play或其他應用商店裡, 這樣就不需要每次分別生成一個apk並手工修改名稱。

其他提升 link

現在Ren’Py會自己處理0字寬的字元繪製問題,防止不支持0字寬的字體依然會被繪製在螢幕上的情況出現。

Ren’Py支持非斷行空格和0字寬非斷行空格字元,防止文本中的圖像空間被擠占。

Ren’Py支持 Character() 對象中 ctc_position 參數的一種新值“nestled-close”。 使用該值可以防止“點擊繼續”型標誌和其他行之間出現斷行。

(拖放組件中的)Drags類現在支持變換的點擊事件。(桌面電腦的滑鼠右鍵點擊和觸控平台的長按操作。)

修復 link

函數 SetVariable()ToggleVariable() 入參類型已經擴展,可以接受命名空間加欄位形式。 所以現在可以使用類似 SetVariable("hero.strength", hero.strength + 1)ToggleVariable("persistent.alternate_perspective") 這樣的寫法。

對話窗口自動管理(使用 window auto 語句啟用)是指,當遊戲內菜單有關聯的對話或標題時,會自動調整布局和尺寸。

Ren’Py生成程序時必須的fribidi內嵌版本原始碼已經包含在 -source 歸檔中。

還有一些語音支撐方面的修復點,最佳化了對歷史記錄和語音重播功能的支持。

7.1 link

安卓 link

這個版本重點重新編寫的Ren’Py對安卓平台支持,以適應現在行動端的需求。 這樣Ren’Py遊戲可以在Google Play商店上架。某些變更可能需要創作者更新遊戲內的某些文件。 特別需要注意的是,icon圖示格式已經改變,所以icon圖示需要重新製作。

Ren’Py運行要求的最低安卓版本號已經提升至安卓19(aka 4.4 KitKat),最佳運行版本為安卓28(aka 9 Pie)。

(譯者註:這裡的安卓19和安卓28是指安卓的API級別。每個API級別對應一個安卓版本號,例如LEVEL 19對應的是安卓4.4系統,LEVEL 28對應的是安卓9.0。)

添加了x86_64結構,原有的x86已經刪除。(某些x86設備可以通過二進位制轉義層運行arm平台版本。)

獨白模式 link

現在使用3個雙引號,可以直接在腳本中寫大段的對話或旁白。例如:

e """
這是一段對話。

而這是第二段。
"""

這將創建兩端對話。詳見 獨白模式

在獨白中還可以使用新的文本標籤(tag)——{clear}。 當{clear}標籤單獨占一行時,作用相當於 nvl clear 語句。詳見 NVL獨白模式

帶屬性的say語句變更 link

帶屬性的(attribute)的say語句中,如果對應標籤(tag)的圖像不存在,處理機制有所變化。 以前,Ren’Py會使用名圖像,並且最近帶屬性的say語句中的屬性,以及顯示那個屬性對應的頭像(side image)。

現在,Ren’Py會根據提供的屬性和已存在的屬性決定顯示的頭像。這個特性使得帶屬性的say語句以同一個工作機制實現顯示或不顯示圖像。 當某個屬性(attribute)對應的頭像並非唯一時,Ren’Py會根據所有給定的屬性,選用存在的屬性中最有可能的圖像作為頭像。

這項改動主要是為了方便使用層疊式圖像(layered image)作為頭像,這樣只需要選用不同的圖像屬性(attribute)就可以改變頭像。

更新器變更 link

現在Ren’Py每次更新時,更新器會提示使用者選擇更新渠道。這個設計意在讓使用者確認每次更新使用哪個渠道, 這樣就不會意外更新為某個預發布或nightly版本。

你可能會發現,有時並找不到預發布版本的更新。這是正常的——與之前的版本不同,只有存在可用的預發布版本的更新渠道才會出現。

多語言支持 link

Ren’Py啟動器(launcher)、模板遊戲和The Question的腳本,已經由Muhammad Nur Hidayat Yasuyoshi翻譯為馬來語。

韓文也已更新。

現在RAPT使用的字串也可以翻譯為非英語的其他語言了。

其他 link

現在Ren’Py可以在遊戲退出時使用可靠的方法自動存檔。(相比之前版本要可靠,原來的自動存檔可能會失敗或陷入死循環。) 這個特性由配置項 _quit_slot 控制。

文件行為函數(比如 FileSave()FileLoad()FileAction() )現在可以使用一個 slot=True 入參。 當這個入參存在時,行為函數會載入一個已命名的槽位,而不需要進入存檔頁面。

開發者菜單(使用快捷鍵Shift+D)現在會顯示一個界面,能夠展現已顯示和已隱藏圖像的相關屬性。

添加了函數 renpy.transform_text() ,該函數可以將不帶觸控文本標籤或文本內插的文本執行變換(transform)操作。

現在使用Gallery對象的make_buttons方法創建的按鈕(botton)現在繼承空的樣式(style),而不再是按鈕樣式。 這樣預防了按鈕樣式的某些特性(property)導致的故障。

現在,點擊滑鼠時,結束文本顯示的代碼透過事件消息(event)方法調用。 這樣,菜單顯示狀態下時就不會因為滑鼠點擊而結束互動行為。

處理imagebutton和image map的自動圖像時,支持可視組件的前綴名。

之前的版本中,在NVL模式下如果某個NVL模式語句後面跟著另一個NVL語句,並且後面的語句中含有某個未定義的角色名,運行會出現一個錯誤(error)。 現在這個bug已經修復。

當兩個ATL變換(transform)嵌套時,使用變換的語句會同時實現兩個變換效果,而不只是嵌套在外層的變換。

Ren’Py用於window、bar和frame的動態圖像(dynamic image)已更新。(以及所有由可視組件派生出的對象,比如按鈕和imagemap。)

當模態框(modal)狀態置為True時,Ren’Py會將某個內核資源占用100%的問題(issue)已經修復。

Ren’Py現在已經包含了一份fribidi的拷貝,而不再使用操作系統中安裝的版本。

(譯者註:某些語言文字的書寫列印是從右往左順序進行的,當這些文字中出現其他字元,比如阿拉伯數字、英語單字等,又需要保持從左往右的列印順序。fribidi是針對這種雙向列印需求提供的庫。)

如果配置了 box_wrap ,就可以使用新增的配置項 box_wrap_spacing 控制行間距和列間距。

配置項 adjust_spacing 的樣式特性現在可以使用“horizontal”和“vertical”這兩個值了。 設置為這兩個值後,就可以指定只在水平或垂直方向調整間距。

LayerdImageProxy現在可以使用內插字串。

開始遊戲或者進入一個新的上下文(context),比如一個菜單上下文時,會調用新增的配置項 config.context_callback 。 這個配置可以用於進入那個上下文時,停止語音和音效的播放。

可視組件 Drag() 新增 activated 特性。這個特性是一個回調函數,當用戶首次在某個可拖拽(drag)組件時被調用(在組件移動之前)。

7.0 link

自從Ren’Py 6帶來ATL語言、界面語言、OpenGL和DirectX加速等特性後,到Ren’Py 7.0對安卓和iOS平台的支持、多語言支持、外部平台接入支持(Accessbility)等新功能,Ren’Py引擎的開發已經超過了10年。

6.0版和7.0版之間的變化,可以參看變更日誌的其他部分,或者在Ren’Py的網站上查看更老版本的變更日誌。這一層的內容是7.0跟6.99.14.3兩個版本間的差異。

層疊式圖像 link

層疊式圖像 是使用在Ren’Py中的新定義圖像。它設計用於精靈(sprite),該精靈是通過Photoshop等軟體製作出的一系列圖層。層疊式圖像系統讓圖像根據屬性(attribute)顯示不同內容,由Python條件表達式決定顯示哪個圖層的圖像。

層疊式圖像用為 composite()ConditionSwitch() 的一種替代方案。它使用的語言讓定義合成圖像更方便。而且Ren’Py可以根據被合適命名的文件,生成對應部分的定義。相比Ren’Py的其他功能,層疊式圖像也更優秀。比如屬性(attribute)可以預載入,而ConditionSwith卻不行。層疊式圖像還可以在互動式指導器(interactive director)中使用。

字典轉場 link

字典轉場 可以使用with語句和某些其他函數將轉場應用於一個或多個圖層。Ren’Py不會在使用這些轉場時暫停。字典轉場使精靈進行轉場的時候也同時顯示對話成為可能。

變更 link

現在的Ren’Py中已經不包含舊的教學和模板。不過從舊版本的Ren’Py中複製過來也可以用。

Scroll() 行為可以使按鈕改變視口的位置或條(bar)的值。

Dissolve()ImageDissolve()AlphaDissolve() 轉場現在可以承認源可視組件的alpha通道,就像設置了 alpha=True參數一樣。由於忽略alpha通道不再是最優,這種改變允許在更多地方使用相同的轉場。

自動圖像定義現在可以在init level 0級別運行,而不是原來的init level必須大於999。這個改動允許 renpy.has_image() 函數能在初始化語句塊(block)中使用。

互動式指導器(interactive director)現在多了一個按鈕,允許創作者選擇顯示在界面的頂部還是底部。

界面語言的for語句 聲明現在需要一個index子句:

for i index i.name in party:
    ...

當被提供時,它應該返回一個唯一的值,該值可以像按鈕地圖資訊和轉換狀態其來源的對象。

現在有可選的上標文字,允許兩種不同的上標文字同時顯示。(比如翻譯和注音。)

新的 可視組件前綴 系統可以定義你自己的可視組件,組件可以用字串訪問,這與圖像,圖像文件和solid具有的字串形式相同。

Ren’Py現在支持創建具有單個文件的.zip文件(例如.rpa文件)大於2GB。這需要使用Zip64標準,在某些平台上可能不支持解壓縮這種文件,最需要注意的是Windows XP。

新的 renpy.get_hidden_tags() 函數返回一組標籤(tag),包含隱藏屬性,另一個 renpy.get_showing_tags() 函數則返回一組排列好的標籤(tag)。

為了與ATL和其他動畫保持一致,第二次顯示影片精靈現在將重播影片。

多語言支持 link

Ren’Py 教學和The Question範例現已支持法語,感謝 Alexandre Tranchant。

對日語和俄語的支持更新。

修復 link

當界面不顯示時,處理hide和replace事件消息導致的界面無法恢復問題已經修復。(這種情況會在用戶跳過遊戲時出現。)

在互動式指導器(interactive director)中使用預設語言(英語)時,偶爾會切換為俄語的問題已經修復。

可視組件 Composite()Crop()Tile() 分別對應各自的新名稱。

接入控制台時,Ren’Py回滾位置不正確的問題已經修復。那個問題會導致控制台顯示不正確的數據,不過僅限於控制台自身的數據。