不相容的變更 link

這裡列出了腳本格式或者創作者開發環境變更後,需要調整的內容。我們旨在所有的變更都不會影響已存在的腳本內容。

只需要注意,設置 config.script_version 就恢復版本變更導致的許多變化,代價是無法使用新增特性。

關於GUI方面的不相容變更,詳見 不相容的GUI變更 部分,只有重新生成GUI才會讓這些變更生效。

待定的棄用內容 link

這裡記載的東西可能是未來Ren’Py版本中可能會發生的。

Ren’Py 8.1發布1年後,即2024年5月,將停止對Python2和Ren’Py 7的支持。

Ren’Py 8.1發布1年後,即2024年5月,將移除原生OpenGL渲染器。 Ren’Py 8.2和7.7起將徹底禁用 config.gl2 這個標識。GL2渲染器將用作默認渲染器,除非用戶選擇另一個渲染器。

2024年5月後停止對Windows 7、8和8.1的支持。這樣可以使用僅能在Windows10及後續Windows上運行的搞版本Python。

8.2.0 / 7.7.0 link

字串化註解以及停止PEP 563的後續特性 從Ren’Py 8.0.2起,Ren’Py8編譯時直接添加 from __future__ import annotations, 創作者不可能取消這條編譯命令。

這此的修改可能會無法使用Python未來版本實現的變化。

若要保留字串化註解,可以在文件開頭添加一句:

rpy python annotations

文本的變化 Ren’Py使用Harfbuzz文本引擎。Harfbuzz引擎產生的字形可能與原生字體的字形有所差異,還可能會改變文本所占空間大小。 垂直文本的坐標機制也隨著Harfbuzz渲染的更新而發生了變化。

若不需要此變化,腳本內添加如下內容:

style default:
    shaper "freetype"

Ren’Py在必要時會自動使用Emoji字體。若要禁用該功能:

style default:
    emoji_font None

文本內插的變化 字串裡的文本內插(interpolation)部分被當作Python表達式處理。 這次變化基本上不會對之前的用法有影響,除非對應的表達式以被其他東西占用。例如:

# Previously
e "[player[money]]" #=> player['money']
# But now
e "[player[money]]" #=> player[money]

若不需要此變化,腳本內添加如下內容:

define config.interpolate_exprs = False

為了幫助某些開發人員從舊版遷移到新版,還存在一個fallback模式。此模式會先嘗試新版文本內插,失敗後再回退到舊版文本內插。 若需要啟用fallback模式,添加:

define config.interpolate_exprs = "fallback"

極坐標系的變化 Ren’Py會強制轉換 angleanchorangle 的角度值,轉換後的值會在0到360度之間,包含0度不包含360度。 之前的版本中,超過該範圍的角度值可能導致未定義的表現。 角度變化360度將不再能觸發圓周運動,因為角度變化會被看作是0。

在ATL中對 angleanchorangle 做動效時, 如果沒有指定旋轉方向,則將使用劣弧(shortest arc),儘管這樣旋轉過程中可能會遇到0度。

極坐標系的變化沒有相容性選項,實際上也基本上不會影響視覺效果。

禁止空的ATL語句塊 之前版本的Ren’Py允許空的ATL語句塊。現在遇到空ATL語句塊時,會報錯提示需要一個語句塊。 如果以前的腳本有類似下面的ATL:

show eileen happy:
"..."

要改成:

show eileen happy
"..."

Box Reverse 樣式特性 box_reverse 有兩方面的變化:

  • 可視組件的間隔空間按照界面中可視組件定義的順序挨個添加。 之前的版本中,如果啟用了 box_reverse,則會以相反順序添加間隔空間,可能會改變某些組件的尺寸。

  • 設置了 box_wrap hbox組件會從上往下wrap。設置了 box_wrap 的vbox組件會從左往右wrap。

這些改變的目標是,讓box_reverse適配從右往左書寫的語言文字。若要回退這項改變:

define config.simple_box_reverse = True

build.itch_channels 該變數在文件中寫著是個字典,但實際實現確實一個元組的列表。 現在已經真的改成一個字典了。如果原本的腳本中就把該變數作為列表處理,並且不想再改代碼的話:

# formerly
$ build.itch_channels.append(("pattern", "channel"))
$ build.itch_channels.extend([("pattern", "channel")])
define build.itch_channels += [("pattern", "channel")]

# now
$ build.itch_channels["pattern"] = "channel"
$ build.itch_channels.update({"pattern": "channel"})
define build.itch_channels["pattern"] = "channel"
define build.itch_channels |= {"pattern": "channel"}

新的位置類型position 的類型列表中新增類型 position()renpy.get_placement() 函數的返回結果就可能是這種新類型。

若不要這個變化,在遊戲中添加如下代碼:

define config.mixed_position = False

拖拽組的變化 將一個可視組件添加至某個拖拽組 DragGroup 對象後, 該可視組件將會蓋在組內其他組件上面,而之前的版本是被其他所有組件蓋在下面。

若要回退這項變化,在遊戲中添加如下代碼:

define config.drag_group_add_top = False

translate語句和config.statement_callbacks (包括Ren’Py內部自動生成的)translate語句不再會調用 config.statement_callbacks

轉場使用子組件的位置 如果某個轉場的子組件提供了位置資訊,該位置資訊將用於整個轉場。 只有在使用ATL轉場(transition),並且新舊兩個子組件的位置相同時,這樣用才是合理的。

若要禁用該變化,在遊戲中添加如下代碼:

define config.transitions_use_child_placement = False

容器允許變換事件穿透

容器類組件(包括fixed、hbox、vbox、side、grid、viewport和vpgrid)可以允許變換事件(transform events)穿透自身抵達自組件。 也就是說各個子組件可以獨立擁有針對這些事件的變換效果。

若要禁用該變化,在遊戲中添加如下代碼:

define config.containers_pass_transform_events = set()

say界面新增replace事件 say界面可以對“replace”事件(而不是“show”事件)作出響應,暫停指定時間(單位為秒)。

若要禁用該變化,在遊戲中添加如下代碼:

define config.say_replace_event = False

某個界面從隱藏狀態再次顯示不會取消hide事件 之前的版本中,某個界面隱藏後再次顯示時,響應該界面hide和replace事件的變換會被取消, 導致界面會突然出現。現在會讓hide和replace事件的響應變換運行完。

若要禁用該變化,在遊戲中添加如下代碼:

define config.screens_never_cancel_hide = False

8.1.1 / 7.6.1 link

安卓金鑰遷移 我們收到了一些報告,表示一些遊戲由於使用了不同的金鑰而被Google Play商店拒絕包含APK的Bundle上架申請。 該現象是由某個老版本的Ren’Py造成的,該版本可以使用APK金鑰生成Bundle。在控制台中可能會受到如下錯誤資訊:

You uploaded an APK that is not signed with the upload certificate. You must use
the same certificate. The upload certificate has fingerprint:

    SHA1: ...

and the certificate used to sign the APK you uploaded has fingerprint:

    SHA1: ...

這種報錯可能是由其他問題引發的(比如只是使用了完全錯誤的金鑰)。一種可能的解決方案如下:

  1. 遊戲根目錄中的 bundle.keystore 文件重命名為 bundle.keystore.bak

  2. android.keystore 複製到遊戲根目錄,並改名為 bundle.keystore

最後嘗試生成並上傳Bundle。

8.1.0 / 7.6.0 link

互相衝突的特性 使用原生的input界面時,可能會在遊戲中引入一些互相衝突的樣式特性。 修復方法如下:

+define config.check_conflicting_properties = True

 screen input(prompt):
     style_prefix "input"
     window:

         vbox:
-            xalign gui.dialogue_text_xalign
+            xanchor gui.dialogue_text_xalign
             xpos gui.dialogue_xpos
             xsize gui.dialogue_width
             ypos gui.dialogue_ypos
             text prompt style "input_prompt"
             input id "input"

氣泡式台詞 在之前的遊戲項目中添加氣泡式台詞的支持前,需要添加一些文件和腳本內容。 詳見 氣泡式台詞 部分。

Live2D 當前版本Ren’Py對Live2D Cubism 4 SDK版本的要求為Native R6_2或之後的版本。 使用舊版本可能會被Ren’Py拒絕。

紋理記憶體 當前版本Ren’Py計算紋理快取時更精確。 總體來說,大概提升了 config.image_cache_size_mb 容量的33%,以及等量的記憶體。

音訊淡出 停止音訊播放或使用 play 語句更改播放內容後,預設有0.016秒的淡出效果,防止爆音問題。 可以通過配置項 config.fadeout_audio 修改淡出時間。如果要禁用默認淡出效果:

define config.fadeout_audio = 0.0

淡出的音量值以對數形式遞減,能讓音訊更順滑,符合人類耳朵的聽覺習慣。 之前則是線性遞減。如果要切換為以前的淡出算法:

define config.linear_fades = True

Translate None Ren’Py在遇到顯式的 translate None 語句用以標註不進行語言轉換的字串、樣式和Python代碼時將報錯。 這種情況很少見。推薦修改下列程式碼:

translate None start_abcd1234:
    e "This is a test"

改為:

e "This is a test" id start_abcd1234

也可以直接設置配置項:

define config.check_translate_none = False

按鍵映射 按鍵映射 文件部分大量修改。因此遊戲做修改時使用預設的按鍵映射方案不是個好主意。 不然就要更新或處理原來沒有的按鍵事件。

文件搜尋 當前版本Ren’Py只會在game/images目錄中搜尋圖片文件,而不管其他類型文件。 如果要在game/images目錄中存放其他類型文件,需要設置:

define config.search_prefixes += [ "images/" ]

搜尋文件時選用的路徑主要考慮文件的用途,而不是文件類型和副檔名。 因此,renpy.loadable("dlc.jpg") 不會搜索game/images/dlc.jpg文件。 如果想要尋找該文件,需要寫 renpy.loadable("images/dlc.jpg")。 如果要同時在game和game/images兩個路徑搜尋文件,需要寫 renpy.loadable("dlc.jpg", "images")

安卓 安卓中需要用到的 android.keystorebundle.keystore 文件需要放在項目根目錄中,而不再是rapt目錄。 這項修改是為了構建不同版本時能使用不同的金鑰(key),或者在不同的安卓版本中使用同一個金鑰。

如果想要使用自己擁有的金鑰,需要編輯 android.json,把update_keystore設置為False。 然後再編輯 rapt/project 中的 local.propertiesbundle.properties,指向自己的金鑰。

安卓配置文件從 .android.json 改名為 android.json。在舊文件存在的情況下,Ren’Py會自動創建新的文件。

對話歷史 當前正在顯示的對話將進入歷史列表(和history界面)。之前的版本中,只有對話完全顯示後才會進入歷史列表。 正在顯示的對話類型會被標記為“current”。

在少數情況下,遊戲需要使用舊版本的表現形式,可以修改配置項:

define config.history_current_dialogue = False

Steam appid 沒有設置 config.steam_appid 的情況下,Ren’Py會刪除game目錄下所有存在的 steam_appid.txt 文件。 這可以防止使用錯誤的appid。

黏滯圖層 新版本引入了黏滯圖層的概念,可以根據圖像標籤(tag)設置顯示的圖層,而不再是圖像定義的默認圖層。 在少數情況下,遊戲可能要求相同圖像標籤(tag)的內容同時顯示在多個不同的圖層上。這種需求是無法實現的。

若要完全禁用黏滯圖層,可以修改配置項:

define config.sticky_layers = [ ]

此外,還可以在定義圖層時就聲明 sticky=False

init python:
    renpy.add_layer("ptfe", sticky=False)

方頭凹形括號表示Ruby文本 此版本的Ren’Py引入方頭凹形括號表示Ruby文本的語法。 如果原來的遊戲中有左方頭凹形括號(【),需要改為連續兩個括號轉義“【【”後才能正確顯示。 (嚴格來說,只有一對方頭凹形括號中出現全形豎條“|”符號時才必須轉義,不過統一語法總是更好。)

若要取消這種Ruby文本語法,在腳本中添加:

define config.lenticular_bracket_ruby = False

常量儲存區 此版本的Ren’Py引入了 常量儲存區,並把某些內建的儲存常量化了。 常量儲存在初始化階段後不會再改變。以下為儲存的常量:

_errorhandling _gamepad _renpysteam _warper audio achievement build director iap layeredimage updater

如果遊戲中需要修改儲存的某些變數值,(舉例來說)可以將對應的變數設置:

define audio._constant = False

混音器音量 必須使用新的格式,0.0表示-40dB(電平),1.0表示0dB(電平)。 若要使用舊版格式:

define config.quadratic_volumes = True

同時,還要將 config.default_music_volumeconfig.default_sfx_volumeconfig.default_voice_volume 都修改。如果任何一個的值為0.0或1.0,都沒效果。

at transform和全局變數 在at transform語句塊中使用的全局變數不會在變數發生改變時重新計算。 該情況適用於界面中沒有用到的ATL。

The recommended fix is to capture the global variable into a local, by changing 推薦的修復方法是,新增一個本地變數,從全局變數賦值。 原腳本:

screen test():
    test "Test":
        at transform:
            xpos global_xpos

需要修改為:

screen test():
    $ local_xpos = global_xpos

    test "Test":
        at transform:
            xpos local_xpos

若要使用原本的設計,需要修改配置項:

define config.at_transform_compare_full_context = True

8.0.2 / 7.5.2 link

模態界面會屏蔽 pause 語句和 renpy.pause`() 效果,直接終止暫停。 原本是這樣的設計,但某些情況下沒效果。 若要恢復舊版:

define config.modal_blocks_pause = False

歷史記錄默認不再使用Ruby/Furigana文本標籤。 若要恢復舊版,需要修改screens.rpy文件中的 gui.history_allow_tags 配置項:

define gui.history_allow_tags = { "alt", "noalt", "rt", "rb", "art" }

僅在遊戲中使用Ruby/Furigana文本標籤時才需要注意。

8.0.0 / 7.5.0 link

構建分發包時,“Windows, Mac, and Linux for Markets”類型的包不會在添加目錄名稱和版本號作為zip文件前綴。 若要恢復舊特性,可以在遊戲腳本中添加:

init python:
    build.package("market", "zip", "windows linux mac renpy all", "Windows, Mac, Linux for Markets")

對於歷史記錄中的noalt文本標籤,需要編輯 screens.rpy 文件,確保 gui.history_allow_tags 中包含“noalt”。 其預設值是:

define gui.history_allow_tags = { "alt", "noalt" }

(該變更在7.4版本中就已添加,只是文件沒更新。)

Ren’Py的7.4系列版本中有一些功能反覆變更,比如讀檔後回滾的結果,在 after_load 腳本標籤的變化, 以及 config.after_load_callbacks 配置項。 如果你的遊戲需要讀檔後做數據遷移,推薦調用 renpy.block_rollback() 防止數據變化後的回滾問題。

config.narrator_menu 配置項預設值改為True。最近的幾個版本中,screen.rpy文件設定的預設值就已經是True了。 若需要改為舊版本:

define config.narrator_menu = False

音效和語音的音訊通道將在返回主選單後自動停止播放。 如果需要回到舊版(返回主選單後只有movie通道停止),在遊戲腳本中添加:

define config.main_menu_stop_channels = [ "movie" ]

使用 call screen 調用的界面,默認不再支持前向滾動。 詳見 變更日誌 中關於可能引發問題的內容。 前向滾動可以通過所有界面的 roll_forward 特性啟用:

define config.call_screen_roll_forward = True

用在vbox和hbox中的key和timer語句,不再占據空間。 showif語句中的子組件隱藏式,也同樣不占空間。 若需要恢復舊版:

define config.box_skip = False

拖拽組件的 focus_mask 樣式特性預設值改為None。 這項改動提升了性能表現,副作用是可視組件的透明像素部分也可以被用於拖動了。 若要恢復舊版功能,將單個拖拽組件的focus_mask特性值設置為True,或者修改全局設置:

style drag:
    focus_mask True

不過兩種做法都會降低性能。

樣式特性 outline_scaling 的預設值改為“linear”。 窗口縮放係數直接乘以輪廓線大小的值,然後取整。 這可能會導致同心的相近粗細輪廓線可能會混在一起看不清。 若要恢復舊版,將單個文本元素的 outline_scaling 特性設置為“step”,或者修改全局設置:

style default:
    outline_scaling "step"

變換特性 crop_relative 的預設值改為True,原來為False。 裁剪是若需要指定像質數,需要使用int型數值或 absolute 數值。 若要恢復舊版的功能,把浮點數轉換為整數:

define config.crop_relative_default = False

不過,需要警惕本頁文件中的其他內容可能會與上一項引發的衝突,有些部分不能與其他新功能特性同時使用。 比如使用 crop 特性對 crop_relative 有用,現在還對 corner1corner2 產生影響。

lib/ 目錄中針對不同平台的子目錄名稱發生變化。 lib/windows-x86_64 目錄改為 lib/py2-windows-x86_64。 這項改動主要是為了使用Python 3的Ren’py 8版本。 具體的目錄名稱沒有在文件中記錄,並且不同的Ren’Py可能會有不同。 我們可以確定的是 sys.executable 是設置好的。

vpgrid不再能裝載超過單元格數量的元素,將 allow_underfull 特性或 config.allow_underfull_grids 配置項設置為True後,只能裝在小於單元格數量的元素。

層疊式圖像 中放置子組件和調整子組件尺寸的方式發生改變。 不再以層疊式圖像顯示占據的區域,而是以整個界面尺寸,計算子組件的大小和位置, 除非顯式指定 xsizeysizexysize 的值。 若要恢復舊版:

define config.layeredimage_offer_screen = False

或者可以指定層疊式圖像的 offer_screen 特性值為False。

ATL中的 function 語句僅在運行超過一次之後才限制其運行。 若要恢復舊版,ATL中始終限制function語句:

define config.atl_function_always_blocks = True

7.4.11 link

當前版本Ren’Py將在焦點發生改變,例如界面顯示或隱藏時,依然運行某個按鈕的unhovered特性。 若要恢復舊版表現:

define config.always_unfocus = False

7.4.9 link

當前版本Ren’Py在遇到浮點型數值的 xsizeysize 時,認為這兩個特性表示可用區域的某個比例。 若要恢復回去:

define config.relative_transform_size = False

啟用自動語音時,圖層、界面和可視組件的閱讀順序發生改變,按與用戶的距離從近到遠依次朗讀。 若要恢復舊的順序:

define config.tts_front_to_back = False

7.4.7 link

xminimumxmaximum 都為浮點型數值時,這兩個最小值會當作可用區域的一個比例值。 這表示 xsize 也需要調整以達到需要的結果。 這項變更可能會導致某些可視組件的尺寸發生變化。 若要恢復回去:

define config.adjust_minimums = False

ATL可視組件會在其自身首次顯示是開始計算動畫時間,而不是其所在界面顯示時開始計時。 若要恢復回去:

define config.atl_start_on_show = False

輸入游標默認閃爍。若要修改:

define config.input_caret_blink = False

7.4.6 link

7.4.5中對圖層清理規則的修改已發生反轉。新的 camera 語句符合新的規則,而 show layer 語句適用舊規則。

7.4.5 link

當前版本的遊戲開發預設使用基於模型的渲染器。若要禁用該渲染器,修改配置項:

define config.gl2 = False

7.4.6版本已反轉 scene 語句不再清理列表中的圖層(layer)。若需要清理圖層,使用:

show layer master

“master”是需要清理的圖層名稱。若要修復舊特性,修改配置項:

define config.scene_clears_layer_at_list = True

7.4.3 link

當前版本允許用戶使用點擊(滑鼠)忽略使用 renpy.transition() 轉場效果, 使其與使用 with 的say語句和 call screen 語句保持一致。 如果要保持原有特性,修改配置項:

define dismiss_blocking_transitions = False

7.4.1 link

當前版本的暫停效果使用 renpy.pause() 而不是 with Pause(...) 。 這意味著用戶需要多次點擊(滑鼠)才能跳過多個暫停。 如果要恢復原來的設置,修改配置項:

define config.pause_with_transition = True

7.4 link

移動平台僅限於軟解解碼,可以使用硬體解碼播放影片。如果要回歸原來的設置:

define config.hw_video = True

當前版本Ren’Py只在圖像標籤(tag)中至少包含一個屬性(attribute)的情況下才會顯示側邊欄頭像(side image)。禁用該設置:

define config.side_image_requires_attributes = False

7.4版本起,將不再支持初始化階段以外的場景修改配置項,比如 config.mouse 。 請考慮使用 default_mouse 配置項設置自訂的滑鼠游標。

7.3.3 link

在配置項 config.start_callbacks 中註冊的回調功能,任何情況下都會在 default 語句之後運行。 如果要恢復原來的行為模式(即回調在 default 語句之前運行):

define config.early_start_store = True

當視口或vpgrid帶有滾動條時,將自動關聯minimum、xminimum和yminimum變長特性到對應邊的滾動條上,而不僅僅是視口自身的特性。

要繞開這個不相容點,要麼使用 viewport_minimumviewport_xminimumviewport_yminimum,要麼修改配置項:

define config.compat_viewport_minimum = True

7.3.0 link

界面語言方面,在遇到類似下面的代碼時會出現錯誤提示“a non-constant keyword argument … is not allowed after a python block.” :

screen test():

    default a = 0

    button:
        $ a = 1
        action Return(a)

        text "Test"

原因是,action 特性會在Python變數聲明之前運行,所以運行結果會返回0而不是1。 如果要禁用這個錯誤提示功能,請在遊戲的game目錄下名為 01compat.rpy 的文件中添加一行:

define config.keyword_after_python = True

side 布局的所有子對象的繪製順序,現在由控制字串決定。如果要改為原來的固定順序,請使用:

define config.keep_side_render_order = False

config.say_attribute_transition_callback 配置項的介面發生不相容的改變。 改變後允許使用新舊標籤(tag)的集合。 如果要恢復成舊的介面,請使用:

define config.say_attribute_transition_callback_attrs = False

模式參數也有一些改變,當 permanenttemporary 屬性轉場都奏效時,將返回 both

7.2.2 link

config.say_attribute_transition_callback 配置項已變更,接受一個新的入參,表示顯示的圖像。

7.1.1 link

Ren’Py的window auto功能現在會自動判斷對話或標題是否帶menu語句,並會在合適的時機自動隱藏或顯示對話窗口。 啟用這項特性需要使用“強制重新編譯”。考慮到較老遊戲的相容性問題,這項特性可以通過如下配置關閉:

define config.menu_showed_window = True
define config.window_auto_show = [ "say" ]
define config.window_auto_hide = [ "scene", "call screen" ]

由於這並非嚴格意義上的不相容變更,對於歷史界面(screen)來說,推薦做一點修改。 詳見 變更日誌入口 中如何更新遊戲的部分。

7.1 link

當某個圖像不正處於顯示時,帶屬性(attribute)的say語句會決定一個頭像(side image),而不是使用之前某個給定的屬性。 如果要禁用這項特性,在配置中添加:

define config.say_attributes_use_side_image = False

7.0 link

Ren’Py現在將自動圖像(automatic images)的優先度定義為 init 0,而不是原來那樣一個非常低的init級別。 如果需要恢復到以前的情況,需要在遊戲腳本中這樣寫:

init -1:
    define config.late_images_scan = True

現在 Dissolve()ImageDissolve()AlphaDissolve() 轉場預設使用原可視組件的alpha通道值,就像指定了 alpha=True 。 如果不使用這個特性,需要在配置中添加:

define config.dissolve_force_alpha = False

已經顯示的某個影片精靈(movie sprite)再次使用show命令時,現在會重播該影片。 如果不使用這個特性,需要在配置中添加:

define config.replay_movie_sprites = False

6.99.13 link

超連結的字體大小繼承鄰近文本。禁用這個特性,需要在配置中添加:

define config.hyperlink_inherit_size = False

文本標籤 {nw} 現在會等待語音和自動語音結束,然後實現文本消失的效果。 如果想禁用這個特性,需要在配置中添加:

define config.nw_voice = False

現在ATL變換(transform)在遇到某個pause語句或者interpolation語句時,會顯示至少一幀。 如果遊戲中不希望出現這種情況,而是顯示為一些快速略過的幀,需要這樣配置:

define config.atl_one_frame = False

現在某個語句內顯示的圖層(layer),將保持變換(transform)的狀態,就跟其他ATL變換一樣。 這個特性會導致一些行為表現的變化,例如,語句中多個圖層顯示的偏移量會保持一致。 如果想禁用這個特性,需要在配置中添加:

define config.keep_show_layer_state = False

如果並非不相容性變更導致, renpy.list_files() 會以標準順序將變更排序。 這會觸發Ren’Py對存在歧義的行為進行定,並產生確定的唯一結果。 例如,images目錄下有多個同名文件,Ren’Py會隨機選取其中之一。(在不同的系統上,選取的文件可能不同。) 現在,Ren’Py運行時總是會選擇同一個文件。

6.99.12.3 link

開發者模式下,Ren’Py不再搜索系統已安裝的字體檔案。 如果遊戲使用系統已安裝的字體,字體檔案應該被複製到game目錄下。(但是請確保這個行為符合字體檔案的使用許可。)

6.99.11 link

style 和``translate`` 語句的執行順序已經改變,詳見文件 the changelog 。 如果不使用這個特性,需要在配置中添加:

define config.new_translate_order = False

注意,不使用這個變更會讓新版本的GUI也無法生效。

配置項 config.quit_action 的預設值已經變更,改為“遊戲中”上下文(context)時退出才會給提示。 如果不使用這個特性,需要在配置中添加:

define config.quit_action = ui.gamemenus("_quit_prompt")

現在Ren’Py增大了按鈕和窗口所允許的最大尺寸。 如果不使用這個特性,需要在配置中添加:

define config.enforce_window_max_size = False

6.99.9 link

現在Ren’Py在名為“audio”的通道上播放介面音效,並且支持同時播放多個音效。 該通道的設置未必與訂製化的音效通道相同。audio通道可以通過調整配置項 config.auto_channels 的值來改變。 或者添加如下代碼使用sound通道。

define config.play_channel = "sound"

6.99.2 link

現在Ren’Py會自動掃描圖片目錄(game目錄下名為images的子目錄)並搜尋圖片文件,並基於圖片檔案名自動定義圖像(image)。 如果不使用這個特性,需要在配置中添加:

init python:
    config.image_directory = None

6.18 link

現在 show screencall screen 語句將在界面預處理進程中計算使用的入參。 如果計算結果對某個界面可能會產生副作用, show screencall screen 後面就需要使用新增的 nopredict 分句,這樣就不進行預處理。

界面(screen)現在可以接受轉場(transition)——轉場效果可以讓界面從舊的狀態轉變到新的狀態。 如果不使用這個特性,需要將配置項 config.transition_screens 設置為false。

同名tag的界面互相替換時,Ren’Py不在使用等式賦值方式轉換界面狀態。 現在的方法是, use語句 現在支持 id 特性,這個特性可以用於顯式轉換界面狀態。

6.16 link

如果需要使用原來的特性,需要將 loopsingle_track 同時設置為true。

6.15.7 link

Ren’Py在 Preference() 函數中加入了“auto-forward”,可用於控制自動前進模式。 如果需要使用自動前進模式滑動條,就將配置將 config.default_afm_enable 設置為None。

6.14 link

以前的版本中,Ren’Py會將歸檔文件放入archived目錄。當運行遊戲或生成歸檔時,Ren’Py會自動搜索該目錄。 現在有了一鍵打包功能,就沒有必要執行這步操作,所有原來在archived目錄裡的文件都應該移到game目錄下。

MoveTransition() 修改了介面。 如果創作者不想使用重寫程式碼,可以使用OldMoveTransition實現舊版本MoveTransition的功能。 (新舊版本的變化,僅跟使用MoveTransition實現的效果有關。)

Transform() 修改了特性,可以實現圖片的非對稱縮放和旋轉。這與舊版的使用方法不同。

6.13.8 link

舊式的字串替換重新預設為啟用狀態。 如果創作者寫的代碼(使用6.13和6.13.7之間的版本),在say語句或menu語句中使用了 % ,可以直接替換為 %% ,或者添加如下代碼:

init python:
    config.old_substitutions = False

6.13 link

關於文本特性的許多變化會對遊戲開發產生多種影響。 最大的變化是,引入了新式的(方括號)文本替換,並淘汰了舊式的(使用百分號)文本替換方案。 如果需要恢復舊式特性,需要使用以下配置:

init python:
    config.old_substitutions = True
    config.new_substitutions = False

將兩項都設置為True後,就可以在同一個遊戲裡混用新式和舊式文本替換。

Ren’Py還修改了預設的線性傳送(line-wrapping)特性。新的特性不會再增加某個段落中的的行數,它可能會修改每行內單字。 如果需要使用舊特性,可以添加如下代碼:

init python:
    style.default.layout = "greedy"
    style.default.language = "western"

行間距為負數的bug已經修復。這個修復能導致語句塊中顯示文本高度會有一點縮進。 如果需要使用舊版特性,使用如下配置:

init python:
    config.broken_line_spacing = True

最後,新的文本代碼可能會在顯示慢速文本時需要手工調整,特別是在負值的行間距情況下。 可以考慮調整 line_overlap_split 的值來修正。

6.12.1 link

圖像的名稱,已經從靜態名改為基於屬性的命名方式。這個特性可能會導致原先唯一的圖像名稱變成同名圖像。 如果需要禁用基礎屬性的圖像命名,將配置項 config.image_attributes 設置為False。

不顯式提供一個變換(transform)或ATL語句塊(block)的情況下顯示某個圖像,將保持那個圖像前一個使用的變換(transform)。 這意味著,某個移動中的圖像將保持移動狀態。如果需要使用舊的特性,可以將配置項 config.keep_running_transform 設置為False。

Character()image 入參含義發生變化。 舊版本的含義在基於界面環境下不能被支援。 出於相容性的考量,將配置項 config.new_character_image_argument 設置為False可以使用恢復舊版的含義。

6.12.0 link

Choicenvl_choice 界面內的 items 參數定義已改變。 nvl_choice 界面不再作為 NVL 的代替。

為了允許預載入圖像,可以在任意時刻喚起界面,除非預載入特性(property)的值是False。 當預載入特性的值不為False時,從最初的顯示開始,界面就不應該導致任何副作用。

由於某些性能原因,Ren’Py現在忽略ImageReference的位置特性(property)。 這意味著style.image_placement類型的位置特性都會被忽略。如果需要恢復舊版本的特性,將配置項 config.imagereference_respects_position 設置為True。

6.11.1 link

MoveTransition() 已修改為適應移動可視組件的xoffset和yoffset參數。 用於移動的功能函數現在使用 xoffsetyoffset 作為入參。內建的移動功能函數使用這些參數可以正常運行。 用戶自訂功能函數需要升級,正確使用或者忽略這些新增入參。

6.11.0 link

  • 通過配置項 config.default_transform 指定的變換(transform)用於初始化show和hide語句中圖像的變換特性(property)。該變換的預設值將 xposxanchor 設置為0.5, yposyanchor 設置為1.0。

    這個特性防止風格特性的預設值發生改變。在之前的版本中,風格特性未被初始化的情況下,預設值均為0.

    在ATL變換中包含 reset ,所有這些特性都可以被重新設置回0。因此,創作者可以停用默認變化,並恢復到老版本的特性,使用如下配置:

    init python:
        style.image_placement.xpos = 0.5
        style.image_placement.ypos = 1.0
        style.image_placement.xanchor = 0.5
        style.image_placement.yanchor = 1.0
    
        config.default_transform = None
    
  • 如果某個變換沒有定義全部的位置(position)特性,包括 xposyposxanchoryanchor ,就會嘗試從該變化的子組件或子特性中獲取對應特性的值,前提是其子組件或子特性中定義了對應特性的值。

    這個特性允許某個變換控制可視組件的水準運動,而另一個變換控制可視組件的垂直運動。不過這個特性與之前的不相容。 可以修改配置項 config.transform_uses_child_position 禁用新特性。

    init python:
        config.transform_uses_child_position = False
    

6.10.0 link

  • 幾個預設的位置名稱(left,right,center,truecenter,offscreenleft和offscreenright),現在已定義為ATL變換(transform)。這意味著在某個位置顯示圖像後,圖像的位置會被記錄。如果不需要使用這個特性,要重定義所有位置,添加如下代碼:

define left = Position(xalign=0.0)
define center = Position(xalign=0.5)
define truecenter = Position(xalign=0.5, yalign=0.5)
define right = Position(xalign=1.0)
define offscreenleft = Position(xpos=0.0, xanchor=1.0)
define offscreenright = Position(xpos=1.0, xanchor=0.0)

6.9.2 link

  • 如果要將你的遊戲從Ren’Py 6.9.2或更低版本遷移到高版本,將包含遊戲的目錄複製到工程目錄中。創作者可以點擊啟動器中的“設置”、再進入“工程目錄”,即可選中一個需要的工程。詳見 Ren’Py 6.9.2 發布說明 查看更低版本的遷移方法。