這裡列出了腳本格式或者創作者開發環境變更後,需要調整的內容。我們旨在所有的變更都不會影響已存在的腳本內容。
只需要注意,設置 config.script_version
就恢復版本變更導致的許多變化,代價是無法使用新增特性。
關於GUI方面的不相容變更,詳見 不相容的GUI變更 部分,只有重新生成GUI才會讓這些變更生效。
7.4.5中對圖層清理規則的修改已發生反轉。新的 camera
語句符合新的規則,而 show layer
語句適用舊規則。
當前版本的遊戲開發預設使用基於模型的渲染器。若要禁用該渲染器,修改配置項:
define config.gl2 = False
7.4.6版本已反轉
scene
語句不再清理列表中的圖層(layer)。若需要清理圖層,使用:
show layer master
“master”是需要清理的圖層名稱。若要修復舊特性,修改配置項:
define config.scene_clears_layer_at_list = True
當前版本允許用戶使用點擊(滑鼠)忽略使用 renpy.transition()
轉場效果,
使其與使用 with
的say語句和 call screen
語句保持一致。
如果要保持原有特性,修改配置項:
define dismiss_blocking_transitions = False
當前版本的暫停效果使用 renpy.pause()
而不是 with Pause(...)
。
這意味著用戶需要多次點擊(滑鼠)才能跳過多個暫停。
如果要恢復原來的設置,修改配置項:
define config.pause_with_transition = True
移動平台僅限於軟解解碼,可以使用硬體解碼播放影片。如果要回歸原來的設置:
define config.hw_video = True
當前版本Ren’Py只在圖像標籤(tag)中至少包含一個屬性(attribute)的情況下才會顯示側邊欄頭像(side image)。禁用該設置:
define config.side_image_requires_attributes = False
7.4版本起,將不再支持初始化階段以外的場景修改配置項,比如 config.mouse
。
請考慮使用 default_mouse
配置項設置自訂的滑鼠游標。
在配置項 config.start_callbacks
中註冊的回調功能,任何情況下都會在 default
語句之後運行。
如果要恢復原來的行為模式(即回調在 default
語句之前運行):
define config.early_start_store = True
當視口或vpgrid帶有滾動條時,將自動關聯minimum、xminimum和yminimum變長特性到對應邊的滾動條上,而不僅僅是視口自身的特性。
要繞開這個不相容點,要嘛使用 viewport_minimum
,viewport_xminimum
和 viewport_yminimum
,要嘛修改配置項:
define config.compat_viewport_minimum = True
界面語言方面,在遇到類似下面的代碼時會出現錯誤提示“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
模式參數也有一些改變,當 permanent
和 temporary
屬性轉場都奏效時,將返回 both
。
config.say_attribute_transition_callback
配置項已變更,接受一個新的入參,表示顯示的圖像。
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)來說,推薦做一點修改。 詳見 變更日誌入口 中如何更新遊戲的部分。
當某個圖像不正處於顯示時,帶屬性(attribute)的say語句會決定一個頭像(side image),而不是使用之前某個給定的屬性。 如果要禁用這項特性,在配置中添加:
define config.say_attributes_use_side_image = False
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
超連結的字體大小繼承鄰近文本。禁用這個特性,需要在配置中添加:
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運行時總是會選擇同一個文件。
開發者模式下,Ren’Py不再搜索系統已安裝的字體檔案。 如果遊戲使用系統已安裝的字體,字體檔案應該被複製到game目錄下。(但是請確保這個行為符合字體檔案的使用許可。)
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
現在Ren’Py在名為“audio”的通道上播放介面音效,並且支持同時播放多個音效。
該通道的設置未必與訂製化的音效通道相同。audio通道可以通過調整配置項 config.auto_channels
的值來改變。
或者添加如下代碼使用sound通道。
define config.play_channel = "sound"
現在Ren’Py會自動掃描圖片目錄(game目錄下名為images的子目錄)並搜尋圖片文件,並基於圖片檔案名自動定義圖像(image)。 如果不使用這個特性,需要在配置中添加:
init python:
config.image_directory = None
現在 show screen
和 call screen
語句將在界面預處理進程中計算使用的入參。
如果計算結果對某個界面可能會產生副作用, show screen
和 call screen
後面就需要使用新增的 nopredict
分句,這樣就不進行預處理。
界面(screen)現在可以接受轉場(transition)——轉場效果可以讓界面從舊的狀態轉變到新的狀態。
如果不使用這個特性,需要將配置項 config.transition_screens
設置為false。
同名tag的界面互相替換時,Ren’Py不在使用等式賦值方式轉換界面狀態。
現在的方法是, use語句 現在支持 id
特性,這個特性可以用於顯式轉換界面狀態。
如果需要使用原來的特性,需要將 loop 和 single_track 同時設置為true。
Ren’Py在 Preference()
函數中加入了“auto-forward”,可用於控制自動前進模式。
如果需要使用自動前進模式滑動條,就將配置將 config.default_afm_enable
設置為None。
以前的版本中,Ren’Py會將歸檔文件放入archived目錄。當運行遊戲或生成歸檔時,Ren’Py會自動搜索該目錄。 現在有了一鍵打包功能,就沒有必要執行這步操作,所有原來在archived目錄裡的文件都應該移到game目錄下。
MoveTransition()
修改了介面。
如果創作者不想使用重寫程式碼,可以使用OldMoveTransition實現舊版本MoveTransition的功能。
(新舊版本的變化,僅跟使用MoveTransition實現的效果有關。)
Transform()
修改了特性,可以實現圖片的非對稱縮放和旋轉。這與舊版的使用方法不同。
舊式的字串替換重新預設為啟用狀態。 如果創作者寫的代碼(使用6.13和6.13.7之間的版本),在say語句或menu語句中使用了 % ,可以直接替換為 %% ,或者添加如下代碼:
init python:
config.old_substitutions = False
關於文本特性的許多變化會對遊戲開發產生多種影響。 最大的變化是,引入了新式的(方括號)文本替換,並淘汰了舊式的(使用百分號)文本替換方案。 如果需要恢復舊式特性,需要使用以下配置:
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
的值來修正。
圖像的名稱,已經從靜態名改為基於屬性的命名方式。這個特性可能會導致原先唯一的圖像名稱變成同名圖像。
如果需要禁用基礎屬性的圖像命名,將配置項 config.image_attributes
設置為False。
不顯式提供一個變換(transform)或ATL語句塊(block)的情況下顯示某個圖像,將保持那個圖像前一個使用的變換(transform)。
這意味著,某個移動中的圖像將保持移動狀態。如果需要使用舊的特性,可以將配置項 config.keep_running_transform
設置為False。
Character()
的 image 入參含義發生變化。
舊版本的含義在基於界面環境下不能被支持。
出於相容性的考量,將配置項 config.new_character_image_argument
設置為False可以使用恢復舊版的含義。
Choice 和 nvl_choice
界面內的 items 參數定義已改變。
nvl_choice
界面不再作為 NVL 的代替。
為了允許預載入圖像,可以在任意時刻喚起界面,除非預載入特性(property)的值是False。 當預載入特性的值不為False時,從最初的顯示開始,界面就不應該導致任何副作用。
由於某些性能原因,Ren’Py現在忽略ImageReference的位置特性(property)。
這意味著style.image_placement類型的位置特性都會被忽略。如果需要恢復舊版本的特性,將配置項 config.imagereference_respects_position
設置為True。
MoveTransition()
已修改為適應移動可視組件的xoffset和yoffset參數。
用於移動的功能函數現在使用 xoffset 和 yoffset 作為入參。內建的移動功能函數使用這些參數可以正常運行。
用戶自訂功能函數需要升級,正確使用或者忽略這些新增入參。
通過配置項 config.default_transform
指定的變換(transform)用於初始化show和hide語句中圖像的變換特性(property)。該變換的預設值將 xpos
和 xanchor
設置為0.5, ypos
和 yanchor
設置為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)特性,包括 xpos
, ypos
, xanchor
和 yanchor
,就會嘗試從該變化的子組件或子特性中獲取對應特性的值,前提是其子組件或子特性中定義了對應特性的值。
這個特性允許某個變換控制可視組件的水準運動,而另一個變換控制可視組件的垂直運動。不過這個特性與之前的不相容。
可以修改配置項 config.transform_uses_child_position
禁用新特性。
init python:
config.transform_uses_child_position = False
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)