Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c1f020786 | |||
| d3dbc5b076 | |||
| 99ddc07103 | |||
| dd2f3203dd | |||
| a7c4a74cfc | |||
| 118c7528a2 | |||
| c29e8c314f | |||
| da021a3808 | |||
| d64d5a60ca | |||
| 0836a54114 | |||
| 623ceda92b | |||
| f3bb6e66df | |||
| 7c3101cb1c | |||
| 734c0507f4 | |||
| 25a4284a12 | |||
| f7a0087995 | |||
| 8074fc825a | |||
| dfe8c3e395 | |||
| cc74793542 | |||
| baa6cc3c59 | |||
| b9176185f1 | |||
| f96bedb510 | |||
| 4c8078b4d7 | |||
| 383bc6af46 | |||
| 71fc31c1cb | |||
| ea3a9d7e21 | |||
| 4222ae2e49 | |||
| 9c4f7f0851 | |||
| 90473bdda2 | |||
| bb9b6ca08a | |||
| 55400c17a8 | |||
| 256f3173da | |||
| 179cd2ed6c | |||
| ec3be878a8 | |||
| cd328876d1 | |||
| df16435ae4 | |||
| 5d108094a5 | |||
| daf3f34705 | |||
| 0ba1eeb9be | |||
| 3c613a8157 | |||
| 75e4cc0bb7 | |||
| 17f722fc0b | |||
| 2563a8dbcb | |||
| 794932f82e | |||
| 2b9ebc974c | |||
| 1ca9a696e2 | |||
| 02a9d4721c | |||
| 3a583da12d | |||
| acd7f792ab | |||
| d42ffed1e7 | |||
| 17f8e56b70 | |||
| 9b77cba97e |
@@ -529,6 +529,11 @@ init python in distribute:
|
||||
"""
|
||||
|
||||
def walk(name, path):
|
||||
|
||||
# Ignore ASCII control characters, like (Icon\r on the mac).
|
||||
if re.search('[\x00-\x19]', name):
|
||||
return
|
||||
|
||||
is_dir = os.path.isdir(path)
|
||||
|
||||
if is_dir:
|
||||
|
||||
@@ -238,7 +238,7 @@ init python in project:
|
||||
interface.processing(_("Ren'Py is scanning the project..."))
|
||||
|
||||
if compile:
|
||||
self.launch(["compile"], wait=True)
|
||||
self.launch(["compile", "--keep-orphan-rpyc" ], wait=True)
|
||||
else:
|
||||
self.launch(["quit"], wait=True)
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/about.rpy:21
|
||||
# game/about.rpy:39
|
||||
old "[version!q]"
|
||||
new "[version!q]"
|
||||
|
||||
# game/about.rpy:25
|
||||
# game/about.rpy:43
|
||||
old "View license"
|
||||
new "檢視許可證"
|
||||
|
||||
# game/about.rpy:27
|
||||
# game/about.rpy:45
|
||||
old "Back"
|
||||
new "返回"
|
||||
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/add_file.rpy:7
|
||||
# game/add_file.rpy:28
|
||||
old "FILENAME"
|
||||
new "檔案名稱"
|
||||
|
||||
# game/add_file.rpy:7
|
||||
# game/add_file.rpy:28
|
||||
old "Enter the name of the script file to create."
|
||||
new "請輸入需要建立的腳本名稱。"
|
||||
|
||||
# game/add_file.rpy:10
|
||||
# game/add_file.rpy:31
|
||||
old "The filename must have the .rpy extension."
|
||||
new "檔案名稱必須以 .rpy 為副檔名。"
|
||||
|
||||
# game/add_file.rpy:18
|
||||
# game/add_file.rpy:39
|
||||
old "The file already exists."
|
||||
new "該檔已存在。"
|
||||
|
||||
# game/add_file.rpy:21
|
||||
# game/add_file.rpy:42
|
||||
old "# Ren'Py automatically loads all script files ending with .rpy. To use this\n# file, define a label and jump to it from another file.\n"
|
||||
new "# Ren'Py 將自動載入以 .rpy 結尾的腳本。若要使用\n# 檔案,從其它檔案中定義一個標籤跳轉到該檔案。\n"
|
||||
|
||||
|
||||
@@ -1,161 +1,155 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/android.rpy:13
|
||||
old "A 32-bit Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "需要一個32位元的 Java 開發套件(JDK)來在 Windows 中建立 Android 套件。JDK 不同於 JRE,所以您可能有 Java 但不包含 JDK。\n\n請 {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html} 下載和安裝 JDK{/a},然後重新啟動 Ren'Py 啟動器。"
|
||||
|
||||
# game/android.rpy:14
|
||||
old "To build Android packages, please download RAPT (from {a=http://www.renpy.org/dl/android}here{/a}), unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
|
||||
new "要建立 Android 套件,請下載 RAPT(從{a=http://www.renpy.org/dl/android}這裡{/a}下載),解壓縮到 Ren'Py 目錄下。然後重新啟動 Ren'Py 啟動器。"
|
||||
|
||||
# game/android.rpy:15
|
||||
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
|
||||
new "RAPT 已經安裝了,但是您還需要安裝 Android SDK 才可以建立 Android 套件。選擇安裝 SDK 來實現它。"
|
||||
|
||||
# game/android.rpy:16
|
||||
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
|
||||
new "RAPT 已經安裝了,但是 KEY 尚未設定。請建立一個新的 KEY,或者恢複 android.keystore。"
|
||||
|
||||
# game/android.rpy:17
|
||||
old "The current project has not been configured. Use \"Configure\" to configure it before building."
|
||||
new "當前專案尚未配置。使用「設定」,在建設之前配置它。"
|
||||
|
||||
# game/android.rpy:18
|
||||
old "Choose \"Build\" to build the current project, or attach an Android device and choose \"Build & Install\" to build and install it on the device."
|
||||
new "選擇「建立」來建立當前專案,或者選擇「建立並安裝」來添加到一個 Android 裝置中建立並安裝。"
|
||||
|
||||
# game/android.rpy:20
|
||||
old "Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "模擬一臺 Android 手機。\n\n當按鈕被按下時,觸控輸入會模擬為滑鼠。Esc 按鍵映射為手機的選單鍵,PageUp 鍵映射為手機的返回鍵。"
|
||||
|
||||
# game/android.rpy:21
|
||||
old "Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "模擬一個 Android 平板。\n\n當按鈕被按下時,觸控輸入會模擬為滑鼠。Esc 按鍵映射為平板的選單鍵,PageUp 鍵映射為平板的返回鍵。"
|
||||
|
||||
# game/android.rpy:22
|
||||
old "Attempts to emulate an OUYA console.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "模擬一個 OUYA 控制器。\n\n控制器的按鍵映射為 OUYA 的方向鍵,確認鍵映射為 OUYA 的 select 按鍵,Esc 按鍵映射為 OUYA 的選單鍵,PageUp 按鍵被映射到 OUYA 的返回鍵。"
|
||||
|
||||
# game/android.rpy:24
|
||||
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
|
||||
new "下載和安裝 Android SDK 以及支援套件。可選擇性地設定產生金鑰來簽署套件。"
|
||||
|
||||
# game/android.rpy:25
|
||||
old "Configures the package name, version, and other information about this project."
|
||||
new "設定套件名稱,版本以及其它關於專案的資訊。"
|
||||
|
||||
# game/android.rpy:26
|
||||
old "Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details."
|
||||
new "在編輯器中開啟包含 Google Play keys 的檔案。\n\n這是在應用程式需要一個擴展的 APK 套件時才需要。閱讀檔案來瞭解更多細節。"
|
||||
|
||||
# game/android.rpy:27
|
||||
old "Builds the Android package."
|
||||
new "建立 Android 套件。"
|
||||
|
||||
# game/android.rpy:28
|
||||
old "Builds the Android package, and installs it on an Android device connected to your computer."
|
||||
new "建立 Android 套件,並安裝到已連線到電腦的 Android 裝置中。"
|
||||
|
||||
# game/android.rpy:148
|
||||
old "{a=%s}%s{/a}"
|
||||
new "{a=%s}%s{/a}"
|
||||
|
||||
# game/android.rpy:371
|
||||
old "Android: [project.current.name!q]"
|
||||
new "Android: [project.current.name!q]"
|
||||
|
||||
# game/android.rpy:391
|
||||
old "Emulation:"
|
||||
new "模擬:"
|
||||
|
||||
# game/android.rpy:399
|
||||
old "Phone"
|
||||
new "手機"
|
||||
|
||||
# game/android.rpy:403
|
||||
old "Tablet"
|
||||
new "平板"
|
||||
|
||||
# game/android.rpy:407
|
||||
old "Television / OUYA"
|
||||
new "電視/OUYA"
|
||||
|
||||
# game/android.rpy:419
|
||||
old "Build:"
|
||||
new "建立:"
|
||||
|
||||
# game/android.rpy:427
|
||||
old "Install SDK & Create Keys"
|
||||
new "安裝 SDK 並創建金鑰"
|
||||
|
||||
# game/android.rpy:431
|
||||
old "Configure"
|
||||
new "設定"
|
||||
|
||||
# game/android.rpy:516
|
||||
old "Other:"
|
||||
new "其他:"
|
||||
|
||||
# game/android.rpy:435
|
||||
old "Build Package"
|
||||
new "建立套件"
|
||||
|
||||
# game/android.rpy:439
|
||||
old "Build & Install"
|
||||
new "建立並安裝"
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/android.rpy:30
|
||||
old "To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
|
||||
new "要建立 Android 套件,請下載 RAPT,解壓縮並將其放到 Ren'Py 目錄下,然後重新啟動 Ren'Py 啟動器。"
|
||||
new "要建立 Android 套件,請下載 RAPT,並解壓縮到 Ren'Py 目錄下。然後重新啟動 Ren'Py 啟動器。"
|
||||
|
||||
# game/android.rpy:506
|
||||
old "Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"
|
||||
new "在包裝 Android 應用程式前,您必須下載 RAPT(Ren'Py Android Packaging Tool),Ren'Py 的 Android 包裝程式。您要現在下載 RAPT 嗎?"
|
||||
# game/android.rpy:31
|
||||
old "A 32-bit Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "需要一個 32 位元的 Java 開發套件(JDK)來在 Windows 中建立 Android 套件。JDK 不同於 JRE,所以您可能有 Java 但不包含 JDK。\n\n請 {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}下載并安裝 JDK{/a},然後重新啟動 Ren'Py 啟動器。"
|
||||
|
||||
# game/android.rpy:32
|
||||
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
|
||||
new "RAPT 已經安裝了,但是您還需要安裝 Android SDK 才可以建立 Android 套件。選擇安裝 SDK 來實現它。"
|
||||
|
||||
# game/android.rpy:33
|
||||
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
|
||||
new "RAPT 已經安裝了,但是 KEY 尚未設定。請建立一個新的 KEY,或者恢複 android.keystore。"
|
||||
|
||||
# game/android.rpy:34
|
||||
old "The current project has not been configured. Use \"Configure\" to configure it before building."
|
||||
new "當前專案尚未配置。使用「設定」,在建設之前配置它。"
|
||||
|
||||
# game/android.rpy:35
|
||||
old "Choose \"Build\" to build the current project, or attach an Android device and choose \"Build & Install\" to build and install it on the device."
|
||||
new "選擇「建立」來建立當前專案,或者選擇「建立 & 安裝」來添加到一個 Android 裝置中建立並安裝。"
|
||||
|
||||
# game/android.rpy:37
|
||||
old "Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "模擬一臺 Android 手機。\n\n當按鈕被按下時,觸控輸入會模擬為滑鼠。Esc 按鍵映射為手機的選單鍵,PageUp 鍵映射為手機的返回鍵。"
|
||||
|
||||
# game/android.rpy:38
|
||||
old "Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "模擬一個 Android 平板。\n\n當按鈕被按下時,觸控輸入會模擬為滑鼠。Esc 按鍵映射為平板的選單鍵,PageUp 鍵映射為平板的返回鍵。"
|
||||
|
||||
# game/android.rpy:39
|
||||
old "Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "模擬一臺基於 Android 的電視,例如 OUYA 或 Fire TV。\n\n控制器的按鍵映射為 OUYA 的方向鍵,確認鍵映射為 OUYA 的 select 按鍵,Esc 按鍵映射為 OUYA 的選單鍵,PageUp 按鍵被映射到 OUYA 的返回鍵。"
|
||||
new "模擬一臺基於 Android 電視,像 OUYA 或者 TV。\n\n控制器的輸入按鍵會映射為方向鍵,Enter 按鍵映射為 select 按鍵,Esc 按鍵映射為選單鍵,PageUp 按鍵被映射為返回鍵。"
|
||||
|
||||
# game/android.rpy:524
|
||||
old "Remote ADB Connect"
|
||||
new "遠端 ADB 連接"
|
||||
# game/android.rpy:41
|
||||
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
|
||||
new "下載和安裝 Android SDK 以及支援套件。可選擇性地設定產生的 keys 來簽署套件。"
|
||||
|
||||
# game/android.rpy:528
|
||||
old "Remote ADB Disconnect"
|
||||
new "斷開遠端 ADB 連接"
|
||||
# game/android.rpy:42
|
||||
old "Configures the package name, version, and other information about this project."
|
||||
new "設定套件名稱,版本以及其它關於專案的資訊。"
|
||||
|
||||
# game/android.rpy:608
|
||||
old "Remote ADB Address"
|
||||
new "遠端 ADB 位址"
|
||||
# game/android.rpy:43
|
||||
old "Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details."
|
||||
new "在編輯器中開啟包含 Google Play keys 的檔案。\n\n這是在應用程式需要一個擴展的 APK 套件時才需要。閱讀檔案來瞭解更多細節。"
|
||||
|
||||
# game/android.rpy:609
|
||||
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
|
||||
new "\"192.168.1.143:5555\" 是連接裝置的 IP 位址和埠的輸入形式。請鍵入裝置的 IP 位址和埠來連接。注意,確保裝置支援遠端 ADB,然後鍵入位址和埠來使用。"
|
||||
# game/android.rpy:44
|
||||
old "Builds the Android package."
|
||||
new "建立 Android 套件。"
|
||||
|
||||
# game/android.rpy:619
|
||||
old "Invalid remote ADB address"
|
||||
new "遠端 ADB 位址無效"
|
||||
# game/android.rpy:45
|
||||
old "Builds the Android package, and installs it on an Android device connected to your computer."
|
||||
new "建立 Android 套件,並安裝到已連線到電腦的 Android 裝置中。"
|
||||
|
||||
# game/android.rpy:619
|
||||
old "The address must contain one exactly one ':'."
|
||||
new "位址必須包含一個精確的 ':'。"
|
||||
# game/android.rpy:46
|
||||
old "Builds the Android package, installs it on an Android device connected to your computer, then launches the app on your device."
|
||||
new "建立 Android 套件,並安裝到已連線到電腦的 Android 裝置中,然後啟動您的裝置上的應用程式。"
|
||||
|
||||
# game/android.rpy:623
|
||||
old "The host may not contain whitespace."
|
||||
new "主機位址不能包含空格。"
|
||||
|
||||
# game/android.rpy:629
|
||||
old "The port must be a number."
|
||||
new "埠必須是數位。"
|
||||
|
||||
# game/android.rpy:47
|
||||
# game/android.rpy:48
|
||||
old "Connects to an Android device running ADB in TCP/IP mode."
|
||||
new "在 TCP/IP 模式下運行 ADB Android 裝置。"
|
||||
|
||||
# game/android.rpy:48
|
||||
# game/android.rpy:49
|
||||
old "Disconnects from an Android device running ADB in TCP/IP mode."
|
||||
new "在 TCP/IP 模式下運行 ADB Android 裝置,並斷開連接。"
|
||||
|
||||
# game/android.rpy:253
|
||||
old "Android: [project.current.name!q]"
|
||||
new "Android: [project.current.name!q]"
|
||||
|
||||
# game/android.rpy:273
|
||||
old "Emulation:"
|
||||
new "模擬:"
|
||||
|
||||
# game/android.rpy:282
|
||||
old "Phone"
|
||||
new "手機"
|
||||
|
||||
# game/android.rpy:286
|
||||
old "Tablet"
|
||||
new "平板"
|
||||
|
||||
# game/android.rpy:290
|
||||
old "Television"
|
||||
new "電視"
|
||||
|
||||
# game/android.rpy:302
|
||||
old "Build:"
|
||||
new "建立:"
|
||||
|
||||
# game/android.rpy:310
|
||||
old "Install SDK & Create Keys"
|
||||
new "安裝 SDK & 創建 Keys"
|
||||
|
||||
# game/android.rpy:314
|
||||
old "Configure"
|
||||
new "設定"
|
||||
|
||||
# game/android.rpy:318
|
||||
old "Build Package"
|
||||
new "建立套件"
|
||||
|
||||
# game/android.rpy:322
|
||||
old "Build & Install"
|
||||
new "建立 & 安裝"
|
||||
|
||||
# game/android.rpy:326
|
||||
old "Build, Install & Launch"
|
||||
new "建立,安裝 & 啟動"
|
||||
|
||||
# game/android.rpy:337
|
||||
old "Other:"
|
||||
new "其他:"
|
||||
|
||||
# game/android.rpy:345
|
||||
old "Remote ADB Connect"
|
||||
new "遠端 ADB 連接"
|
||||
|
||||
# game/android.rpy:349
|
||||
old "Remote ADB Disconnect"
|
||||
new "斷開遠端 ADB 連接"
|
||||
|
||||
# game/android.rpy:382
|
||||
old "Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"
|
||||
new "在包裝 Android 應用程式前,您須下載 RAPT(Ren'Py Android Packaging Tool),Ren'Py 的 Android 包裝程式。您要現在下載 RAPT 嗎?"
|
||||
|
||||
# game/android.rpy:435
|
||||
old "Remote ADB Address"
|
||||
new "遠端 ADB 位址"
|
||||
|
||||
# game/android.rpy:435
|
||||
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
|
||||
new "「192.168.1.143:5555」是連接裝置的 IP 位址和埠的輸入形式。請鍵入裝置的 IP 位址和埠來連接。注意,確保裝置支援遠端 ADB,然後鍵入位址和埠來使用。"
|
||||
|
||||
# game/android.rpy:447
|
||||
old "Invalid remote ADB address"
|
||||
new "遠端 ADB 位址無效"
|
||||
|
||||
# game/android.rpy:447
|
||||
old "The address must contain one exactly one ':'."
|
||||
new "位址必須包含一個精確的 ':'。"
|
||||
|
||||
# game/android.rpy:451
|
||||
old "The host may not contain whitespace."
|
||||
new "主機位址不能包含空格。"
|
||||
|
||||
# game/android.rpy:457
|
||||
old "The port must be a number."
|
||||
new "埠必須是數位。"
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/choose_directory.rpy:73
|
||||
old "Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."
|
||||
new "Ren'Py 無法運行 python 的 tkinter 來選擇專案目錄。請安裝 python-tk 或 tkinter。"
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/choose_theme.rpy:274
|
||||
# game/choose_theme.rpy:303
|
||||
old "Could not change the theme. Perhaps options.rpy was changed too much."
|
||||
new "無法更改介面主題。Options.rpy 也許改變了太多。"
|
||||
new "無法變更介面主題。Options.rpy 也許改變了太多。"
|
||||
|
||||
# game/choose_theme.rpy:332
|
||||
# game/choose_theme.rpy:368
|
||||
old "Display"
|
||||
new "Display"
|
||||
|
||||
# game/choose_theme.rpy:333
|
||||
# game/choose_theme.rpy:369
|
||||
old "Window"
|
||||
new "Window"
|
||||
|
||||
# game/choose_theme.rpy:334
|
||||
# game/choose_theme.rpy:370
|
||||
old "Fullscreen"
|
||||
new "Fullscreen"
|
||||
|
||||
# game/choose_theme.rpy:335
|
||||
# game/choose_theme.rpy:371
|
||||
old "Planetarium"
|
||||
new "Planetarium"
|
||||
|
||||
# game/choose_theme.rpy:342
|
||||
# game/choose_theme.rpy:378
|
||||
old "Sound Volume"
|
||||
new "Sound Volume"
|
||||
|
||||
# game/choose_theme.rpy:376
|
||||
# game/choose_theme.rpy:412
|
||||
old "Choose Theme"
|
||||
new "Choose Theme"
|
||||
|
||||
# game/choose_theme.rpy:389
|
||||
# game/choose_theme.rpy:425
|
||||
old "Theme"
|
||||
new "介面主題"
|
||||
|
||||
# game/choose_theme.rpy:413
|
||||
# game/choose_theme.rpy:449
|
||||
old "Color Scheme"
|
||||
new "色彩配置"
|
||||
|
||||
# game/choose_theme.rpy:444
|
||||
# game/choose_theme.rpy:480
|
||||
old "Continue"
|
||||
new "繼續"
|
||||
|
||||
|
||||
@@ -1,328 +1,21 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00action_file.rpy:118
|
||||
# renpy/common/00action_file.rpy:142
|
||||
old "%b %d, %H:%M"
|
||||
new "%%m月%d日, %H:%M"
|
||||
new "%m月%d日, %H:%M"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00gltest.rpy:50
|
||||
old "Graphics Acceleration"
|
||||
new "圖形加速"
|
||||
|
||||
# renpy/common/00gltest.rpy:54
|
||||
old "Automatically Choose"
|
||||
new "自動選擇"
|
||||
|
||||
# renpy/common/00gltest.rpy:59
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "強制 Angle/DirectX 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:63
|
||||
old "Force OpenGL Renderer"
|
||||
new "強制 OpenGL 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:67
|
||||
old "Force Software Renderer"
|
||||
new "強制軟體渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:73
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "更改將會在下次啟動程式時生效。"
|
||||
|
||||
# renpy/common/00gltest.rpy:77
|
||||
old "Quit"
|
||||
new "離開"
|
||||
|
||||
# renpy/common/00gltest.rpy:82
|
||||
old "Return"
|
||||
new "返回"
|
||||
|
||||
# renpy/common/00gltest.rpy:112
|
||||
old "Performance Warning"
|
||||
new "效能警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:117
|
||||
old "This computer is using software rendering."
|
||||
new "該電腦正在使用軟體渲染。"
|
||||
|
||||
# renpy/common/00gltest.rpy:119
|
||||
old "This computer is not using shaders."
|
||||
new "該電腦沒有使用著色器"
|
||||
|
||||
# renpy/common/00gltest.rpy:121
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "該電腦圖形顯示緩慢。"
|
||||
|
||||
# renpy/common/00gltest.rpy:123
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "該電腦圖形顯示出錯:[problem]。"
|
||||
|
||||
# renpy/common/00gltest.rpy:128
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "目前的圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。升級 DirectX 可能會解決該問題。"
|
||||
|
||||
# renpy/common/00gltest.rpy:130
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new "目前圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。"
|
||||
|
||||
# renpy/common/00gltest.rpy:135
|
||||
old "Update DirectX"
|
||||
new "更新 DirectX"
|
||||
|
||||
# renpy/common/00gltest.rpy:141
|
||||
old "Continue, Show this warning again"
|
||||
new "繼續,下次再顯示該警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:145
|
||||
old "Continue, Don't show warning again"
|
||||
new "繼續,不再顯示該警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:171
|
||||
old "Updating DirectX."
|
||||
new "正在更新 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:175
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "DirectX 線上安裝已啟動。將會最小化到狀態列中。請按照說明安裝 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:179
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}警告:{/b} Microsoft's DirectX 線上安裝程式會預設安裝 Bing 瀏覽器工具列。如果您不需要安裝這個工具列,請取消勾選對應選項。"
|
||||
|
||||
# renpy/common/00gltest.rpy:183
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "當安裝完成後請點選下方來重新啟動應用程式。"
|
||||
|
||||
# renpy/common/00gltest.rpy:185
|
||||
old "Restart"
|
||||
new "重新啟動"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00keymap.rpy:167
|
||||
old "Saved screenshot as %s."
|
||||
new "儲存螢幕截圖為 %s。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00layout.rpy:439
|
||||
old "Are you sure?"
|
||||
new "是否確認?"
|
||||
|
||||
# renpy/common/00layout.rpy:443
|
||||
old "Are you sure you want to quit?"
|
||||
new "您確定您要離開嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:444
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "您確定您想回到標題畫面嗎?\n這將使您失去所有未儲存的進度。"
|
||||
|
||||
# renpy/common/00layout.rpy:441
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "您確定您要覆寫您的存檔?"
|
||||
|
||||
# renpy/common/00layout.rpy:442
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "載入將會失去所有未儲存的進度。\n您確定您要這麼做嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:440
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "您確定您要刪掉這份存檔嗎?"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00library.rpy:77
|
||||
old "Skip Mode"
|
||||
new "跳過對話模式"
|
||||
|
||||
# renpy/common/00library.rpy:80
|
||||
old "Fast Skip Mode"
|
||||
new "快速跳過對話模式"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00updater.rpy:1258
|
||||
old "Updater"
|
||||
new "更新"
|
||||
|
||||
# renpy/common/00updater.rpy:1267
|
||||
old "This program is up to date."
|
||||
new "該程式已是最新版本。"
|
||||
|
||||
# renpy/common/00updater.rpy:1269
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] 已釋出。是否確認安裝?"
|
||||
|
||||
# renpy/common/00updater.rpy:1271
|
||||
old "Preparing to download the updates."
|
||||
new "正在準備下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1273
|
||||
old "Downloading the updates."
|
||||
new "正在下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1275
|
||||
old "Unpacking the updates."
|
||||
new "解壓縮更新檔案。"
|
||||
|
||||
# renpy/common/00updater.rpy:1279
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "該更新檔案已安裝,程式將會重新啟動。"
|
||||
|
||||
# renpy/common/00updater.rpy:1281
|
||||
old "The updates have been installed."
|
||||
new "已完成更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1283
|
||||
old "The updates were cancelled."
|
||||
new "已取消更新。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:180
|
||||
old "Empty Slot."
|
||||
new "空白欄位"
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:337
|
||||
old "Previous"
|
||||
new "上一頁"
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:344
|
||||
old "Next"
|
||||
new "下一頁"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_compat/preferences.rpym:411
|
||||
old "Joystick Mapping"
|
||||
new "遊戲桿映射"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_errorhandling.rpym:408
|
||||
old "An exception has occurred."
|
||||
new "發生一個異常狀況。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:434
|
||||
old "Rollback"
|
||||
new "回滾"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:436
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "嘗試回滾到先前的狀態,使您可以存檔或者選擇不同選項。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:439
|
||||
old "Ignore"
|
||||
new "忽略"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:441
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "忽略異常,讓您可以繼續。這通常會產生額外的錯誤。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:444
|
||||
old "Reload"
|
||||
new "重新載入"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:446
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "從硬碟重新載入遊戲,請您儲存遊戲狀態。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:448
|
||||
old "Open Traceback"
|
||||
new "開啟回溯"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:450
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "在編輯器中開啟回溯檔案(traceback.txt)。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:456
|
||||
old "Quits the game."
|
||||
new "離開遊戲。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:483
|
||||
old "Parsing the script failed."
|
||||
new "解析腳本失敗。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:510
|
||||
old "Open Parse Errors"
|
||||
new "開啟解析錯誤"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:512
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "在編輯器中開啟解析錯誤檔案(errors.txt)。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:152
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:161
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00action_file.rpy:587
|
||||
# renpy/common/00action_file.rpy:621
|
||||
old "Quick save complete."
|
||||
new "快速儲存。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00gallery.rpy:521
|
||||
old "Image [index] of [count] locked."
|
||||
new "[count]個圖片中的第[index]個圖片被鎖定。"
|
||||
|
||||
# renpy/common/00gallery.rpy:539
|
||||
old "prev"
|
||||
new "上一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:540
|
||||
old "next"
|
||||
new "下一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:541
|
||||
old "slideshow"
|
||||
new "幻燈片"
|
||||
|
||||
# renpy/common/00gallery.rpy:542
|
||||
old "return"
|
||||
new "返回"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00layout.rpy:427
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "是否確定開始略過?"
|
||||
|
||||
# renpy/common/00layout.rpy:428
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "是否確定跳到下一個選項?"
|
||||
|
||||
# renpy/common/00layout.rpy:429
|
||||
old "Are you sure you want to skip to unseen dialogue or the next choice?"
|
||||
new "是否確定略過未看過的訊息或下一選項?"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00console.rpy:179
|
||||
old "%(version)s console, originally by Shiz, C, and delta.\n"
|
||||
new "%(version)s 控制臺,作者: Shiz, C, delta。"
|
||||
new "%(version)s 控制臺, 作者: Shiz, C, delta\n"
|
||||
|
||||
# renpy/common/00console.rpy:180
|
||||
old "Press <esc> to exit console. Type help for help.\n"
|
||||
@@ -346,11 +39,11 @@ translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00console.rpy:407
|
||||
old " <renpy script statement>: run the statement\n"
|
||||
new " <renpy script statement>:運行語句\n"
|
||||
new "<Ren'py 腳本語句>: 運行語句\n"
|
||||
|
||||
# renpy/common/00console.rpy:409
|
||||
old " <python expression or statement>: run the expression or statement"
|
||||
new " <python expression or statement>:運行運算式或語句"
|
||||
new " <Python 運算式或語句>: 運行運算式或語句"
|
||||
|
||||
# renpy/common/00console.rpy:417
|
||||
old "clear: clear the console history"
|
||||
@@ -362,11 +55,11 @@ translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00console.rpy:429
|
||||
old "load <slot>: loads the game from slot"
|
||||
new "load <slot>:載入遊戲存檔(以 slot 為存檔號)"
|
||||
new "load <檔位>: 從檔位載入遊戲"
|
||||
|
||||
# renpy/common/00console.rpy:442
|
||||
old "save <slot>: saves the game in slot"
|
||||
new "save <slot>:儲存遊戲存檔(以 slot 為存檔號)"
|
||||
new "save <檔位>: 保存遊戲到檔位"
|
||||
|
||||
# renpy/common/00console.rpy:453
|
||||
old "reload: reloads the game, refreshing the scripts"
|
||||
@@ -374,20 +67,313 @@ translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00console.rpy:461
|
||||
old "watch <expression>: watch a python expression"
|
||||
new "watch <expression>: 監視一個 python 運算式"
|
||||
new "watch <運算式>: 監視一個 python 運算式"
|
||||
|
||||
# renpy/common/00console.rpy:470
|
||||
old "unwatch <expression>: stop watching an expression"
|
||||
new "unwatch <expression>:停止監視某個運算式"
|
||||
new "unwatch <運算式>: 停止監視某個運算式"
|
||||
|
||||
# renpy/common/00console.rpy:478
|
||||
old "unwatchall: stop watching all expressions"
|
||||
new "unwatchall:停止監視索引運算式"
|
||||
new "unwatchall: 停止監視索引運算式"
|
||||
|
||||
# renpy/common/00console.rpy:484
|
||||
old "jump <label>: jumps to label"
|
||||
new "jump <label>: 跳移至標籤"
|
||||
new "jump <標籤>: 跳移至標籤"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00gallery.rpy:561
|
||||
old "Image [index] of [count] locked."
|
||||
new "[count] 個圖片中的第 [index] 個圖片被鎖定。"
|
||||
|
||||
# renpy/common/00gallery.rpy:581
|
||||
old "prev"
|
||||
new "上一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:582
|
||||
old "next"
|
||||
new "下一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:583
|
||||
old "slideshow"
|
||||
new "幻燈片"
|
||||
|
||||
# renpy/common/00gallery.rpy:584
|
||||
old "return"
|
||||
new "返回"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00gltest.rpy:68
|
||||
old "Graphics Acceleration"
|
||||
new "圖形加速"
|
||||
|
||||
# renpy/common/00gltest.rpy:72
|
||||
old "Automatically Choose"
|
||||
new "自動選擇"
|
||||
|
||||
# renpy/common/00gltest.rpy:77
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "強制 Angle/DirectX 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:81
|
||||
old "Force OpenGL Renderer"
|
||||
new "強制 OpenGL 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:85
|
||||
old "Force Software Renderer"
|
||||
new "強制軟體渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:91
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "變更將會在下次啟動程式時生效。"
|
||||
|
||||
# renpy/common/00gltest.rpy:95
|
||||
old "Quit"
|
||||
new "離開"
|
||||
|
||||
# renpy/common/00gltest.rpy:100
|
||||
old "Return"
|
||||
new "返回"
|
||||
|
||||
# renpy/common/00gltest.rpy:130
|
||||
old "Performance Warning"
|
||||
new "效能警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:135
|
||||
old "This computer is using software rendering."
|
||||
new "該電腦正在使用軟體渲染。"
|
||||
|
||||
# renpy/common/00gltest.rpy:137
|
||||
old "This computer is not using shaders."
|
||||
new "該電腦沒有使用著色器"
|
||||
|
||||
# renpy/common/00gltest.rpy:139
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "該電腦圖形顯示緩慢。"
|
||||
|
||||
# renpy/common/00gltest.rpy:141
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "該電腦圖形顯示出錯:[problem]。"
|
||||
|
||||
# renpy/common/00gltest.rpy:146
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "目前的圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。更新 DirectX 可能會解決該問題。"
|
||||
|
||||
# renpy/common/00gltest.rpy:148
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new "目前圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。"
|
||||
|
||||
# renpy/common/00gltest.rpy:153
|
||||
old "Update DirectX"
|
||||
new "更新 DirectX"
|
||||
|
||||
# renpy/common/00gltest.rpy:159
|
||||
old "Continue, Show this warning again"
|
||||
new "繼續,下次再顯示此警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:163
|
||||
old "Continue, Don't show warning again"
|
||||
new "繼續,不再顯示此警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:189
|
||||
old "Updating DirectX."
|
||||
new "正在更新 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:193
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "DirectX 線上安裝已啟動。將會最小化到狀態列中。請按照說明安裝 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:197
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}警告:{/b} Microsoft's DirectX 線上安裝程式會預設安裝 Bing 瀏覽器工具列。如果您不需要安裝這個工具列,請取消勾選對應選項。"
|
||||
|
||||
# renpy/common/00gltest.rpy:201
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "當安裝完成後請點選下方來重新啟動應用程式。"
|
||||
|
||||
# renpy/common/00gltest.rpy:203
|
||||
old "Restart"
|
||||
new "重新啟動"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00keymap.rpy:206
|
||||
old "Saved screenshot as %s."
|
||||
new "儲存螢幕截圖為 %s。"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00layout.rpy:444
|
||||
old "Are you sure?"
|
||||
new "是否確認?"
|
||||
|
||||
# renpy/common/00layout.rpy:445
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "您確定您要刪掉這份存檔嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:446
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "您確定您要覆寫您的存檔嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:447
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "載入將會失去所有未儲存的進度。\n您確定您要這麼做嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:448
|
||||
old "Are you sure you want to quit?"
|
||||
new "您確定您要離開嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:449
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "您確定您想回到標題畫面嗎?\n這將使您失去所有未儲存的進度。"
|
||||
|
||||
# renpy/common/00layout.rpy:450
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "是否確定開始略過?"
|
||||
|
||||
# renpy/common/00layout.rpy:451
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "是否確定跳到下一個選項?"
|
||||
|
||||
# renpy/common/00layout.rpy:452
|
||||
old "Are you sure you want to skip to unseen dialogue or the next choice?"
|
||||
new "是否確定略過未看過的訊息或下一選項?"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00library.rpy:149
|
||||
old "Skip Mode"
|
||||
new "略過對話模式"
|
||||
|
||||
# renpy/common/00library.rpy:152
|
||||
old "Fast Skip Mode"
|
||||
new "快速略過對話模式"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00preferences.rpy:387
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "Clipboard voicing 已啟用。按 'shift+C' 禁用"
|
||||
|
||||
# renpy/common/00preferences.rpy:389
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "Self-voicing 已啟用。按 'v' 禁用"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/00updater.rpy:362
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "Ren'Py 的更新不支援在行動裝置上使用。"
|
||||
|
||||
# renpy/common/00updater.rpy:478
|
||||
old "An error is being simulated."
|
||||
new "正在類比錯誤。"
|
||||
|
||||
# renpy/common/00updater.rpy:654
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "此專案不支援更新,或者更新狀態檔已被刪除。"
|
||||
|
||||
# renpy/common/00updater.rpy:668
|
||||
old "This account does not have permission to perform an update."
|
||||
new "此帳戶不具有執行更新的權限。"
|
||||
|
||||
# renpy/common/00updater.rpy:671
|
||||
old "This account does not have permission to write the update log."
|
||||
new "此帳戶沒有更新日誌的寫入權限。"
|
||||
|
||||
# renpy/common/00updater.rpy:696
|
||||
old "Could not verify update signature."
|
||||
new "無法驗證更新簽名。"
|
||||
|
||||
# renpy/common/00updater.rpy:956
|
||||
old "The update file was not downloaded."
|
||||
new "不下載更新檔。"
|
||||
|
||||
# renpy/common/00updater.rpy:974
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "無法驗證更新檔案 — 它可能已損壞。"
|
||||
|
||||
# renpy/common/00updater.rpy:1030
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "正在解壓缩 {},未知類型 {}。"
|
||||
|
||||
# renpy/common/00updater.rpy:1380
|
||||
old "Updater"
|
||||
new "更新"
|
||||
|
||||
# renpy/common/00updater.rpy:1389
|
||||
old "This program is up to date."
|
||||
new "該程式已是最新版本。"
|
||||
|
||||
# renpy/common/00updater.rpy:1391
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] 已釋出。是否確認安裝?"
|
||||
|
||||
# renpy/common/00updater.rpy:1393
|
||||
old "Preparing to download the updates."
|
||||
new "正在準備下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1395
|
||||
old "Downloading the updates."
|
||||
new "正在下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1397
|
||||
old "Unpacking the updates."
|
||||
new "解壓縮更新檔案。"
|
||||
|
||||
# renpy/common/00updater.rpy:1401
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "該更新檔案已安裝,程式將會重新啟動。"
|
||||
|
||||
# renpy/common/00updater.rpy:1403
|
||||
old "The updates have been installed."
|
||||
new "已完成更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1405
|
||||
old "The updates were cancelled."
|
||||
new "已取消更新。"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:198
|
||||
old "Empty Slot."
|
||||
new "空白檔位"
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:355
|
||||
old "Previous"
|
||||
new "上一頁"
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:362
|
||||
old "Next"
|
||||
new "下一頁"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_compat/preferences.rpym:428
|
||||
old "Joystick Mapping"
|
||||
new "遊戲桿映射"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
@@ -397,11 +383,11 @@ translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_developer/developer.rpym:67
|
||||
old "Reload Game (Shift+R)"
|
||||
new "重新載入遊戲(Shift+R)"
|
||||
new "重新載入遊戲 (Shift+R)"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:69
|
||||
old "Console (Shift+O)"
|
||||
new "控制臺(Shift+O)"
|
||||
new "控制臺 (Shift+O)"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:71
|
||||
old "Variable Viewer"
|
||||
@@ -427,72 +413,147 @@ translate traditional_chinese strings:
|
||||
old "Hide Image Load Log"
|
||||
new "隱藏圖片載入記錄"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:149
|
||||
# renpy/common/_developer/developer.rpym:150
|
||||
old "No variables have changed since the game started."
|
||||
new "遊戲開始至此沒有任何變數被改變。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:152
|
||||
# renpy/common/_developer/developer.rpym:153
|
||||
old "Return to the developer menu"
|
||||
new "回到開發者選單"
|
||||
|
||||
# renpy/c72
|
||||
old "{b}Missing Images{/b}"
|
||||
new "{b}丟失圖片{/b}"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:424
|
||||
# renpy/common/_developer/developer.rpym:398
|
||||
old "Rectangle: %r"
|
||||
new "矩形區域:%r"
|
||||
new "矩形區域: %r"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:429
|
||||
# renpy/common/_developer/developer.rpym:403
|
||||
old "Mouse position: %r"
|
||||
new "滑鼠位置:%r"
|
||||
new "滑鼠位置: %r"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:431
|
||||
# renpy/common/_developer/developer.rpym:408
|
||||
old "Right-click or escape to quit."
|
||||
new "點選滑鼠右鍵或者按 ESC 鍵來退出。"
|
||||
new "點選滑鼠右鍵或者按 Esc 鍵來退出。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:482
|
||||
# renpy/common/_developer/developer.rpym:437
|
||||
old "Rectangle copied to clipboard."
|
||||
new "選擇區域複製到剪貼簿。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:440
|
||||
old "Position copied to clipboard."
|
||||
new "選擇位置複製到剪貼簿。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:471
|
||||
old "Done"
|
||||
new "完成"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:43
|
||||
# renpy/common/_developer/inspector.rpym:46
|
||||
old "Displayable Inspector"
|
||||
new "Displayable 檢閱器"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:49
|
||||
# renpy/common/_developer/inspector.rpym:52
|
||||
old "Nothing to inspect."
|
||||
new "沒有東西被檢閱"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:58
|
||||
# renpy/common/_developer/inspector.rpym:70
|
||||
old "Size"
|
||||
new "大小"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:63
|
||||
# renpy/common/_developer/inspector.rpym:74
|
||||
old "Style"
|
||||
new "風格"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:123
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "檢閱[displayable_name!q]的風格"
|
||||
# renpy/common/_developer/inspector.rpym:80
|
||||
old "Location"
|
||||
new "位置"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:135
|
||||
old "displayable:"
|
||||
new "displayable"
|
||||
# renpy/common/_developer/inspector.rpym:142
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "檢閱 [displayable_name!q] 的風格"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:155
|
||||
old "displayable:"
|
||||
new "Displayable:"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:162
|
||||
old " (no properties affect the displayable)"
|
||||
new " (沒有偏好的可顯示屬性)"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:144
|
||||
# renpy/common/_developer/inspector.rpym:164
|
||||
old " (default properties omitted)"
|
||||
new " (忽略預設屬性)"
|
||||
new " (省略預設屬性)"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:174
|
||||
# renpy/common/_developer/inspector.rpym:206
|
||||
old "<repr() failed>"
|
||||
new "<repr() failed>"
|
||||
new "<repr() 失敗>"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_errorhandling.rpym:450
|
||||
old "An exception has occurred."
|
||||
new "發生一個異常狀況。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:476
|
||||
old "Rollback"
|
||||
new "回滾"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:478
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "嘗試回滾到先前的狀態,使您可以存檔或者選擇不同選項。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:481
|
||||
old "Ignore"
|
||||
new "忽略"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:483
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "忽略異常,讓您可以繼續。這通常會產生額外的錯誤。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:486
|
||||
old "Reload"
|
||||
new "重新載入"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:488
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "從硬碟重新載入遊戲,請您儲存遊戲狀態。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:490
|
||||
old "Open Traceback"
|
||||
new "開啟回溯"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:492
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "在編輯器中開啟回溯檔案。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:498
|
||||
old "Quits the game."
|
||||
new "離開遊戲。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:525
|
||||
old "Parsing the script failed."
|
||||
new "解析腳本失敗。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:552
|
||||
old "Open Parse Errors"
|
||||
new "開啟解析錯誤"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:554
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "在編輯器中開啟解析錯誤檔案。"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:170
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:179
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
|
||||
@@ -1,49 +1,39 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/distribute.rpy:333
|
||||
old "Nothing to do."
|
||||
new "什麼都不做。"
|
||||
|
||||
# game/distribute.rpy:337
|
||||
old "Scanning project files..."
|
||||
new "掃描專案檔案..."
|
||||
|
||||
# game/distribute.rpy:344
|
||||
old "Scanning Ren'Py files..."
|
||||
new "掃描 Ren'Py 檔案..."
|
||||
|
||||
# game/distribute.rpy:494
|
||||
old "Archiving files..."
|
||||
new "壓縮檔案..."
|
||||
|
||||
# game/distribute.rpy:745
|
||||
old "Writing the [variant] [format] package."
|
||||
new "寫入 [variant] [format] 套件。"
|
||||
|
||||
# game/distribute.rpy:758
|
||||
old "Making the [variant] update zsync file."
|
||||
new "新增 [variant] 更新 zsync 檔案。"
|
||||
|
||||
# game/distribute.rpy:854
|
||||
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
|
||||
new "完成處理 {b}[complete]{/b} ,共 {b}[total]{/b}個檔案。"
|
||||
|
||||
# game/distribute.rpy:915
|
||||
old "All packages have been built.\n\nDue to the presence of permission information, unpacking and repacking the Linux and Macintosh distributions on Windows is not supported."
|
||||
new "所有套件已被建立。\n\n由於含有授權資訊存在,因此在 Windows 中不支援解開和重新包裝 Linux 及 Mac 的套件。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/distribute.rpy:358
|
||||
old "No packages are selected, so there's nothing to do."
|
||||
new "沒有選擇套件,沒有可以處理的事情。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/distribute.rpy:335
|
||||
old "Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."
|
||||
new "建立釋出版失敗:\n\n build.directory_name 變數可能包含空格,冒號或分號。"
|
||||
|
||||
# game/distribute.rpy:381
|
||||
old "No packages are selected, so there's nothing to do."
|
||||
new "沒有選擇套件,沒有可以處理的事情。"
|
||||
|
||||
# game/distribute.rpy:386
|
||||
old "Scanning project files..."
|
||||
new "掃描專案檔案..."
|
||||
|
||||
# game/distribute.rpy:396
|
||||
old "Scanning Ren'Py files..."
|
||||
new "掃描 Ren'Py 檔案..."
|
||||
|
||||
# game/distribute.rpy:444
|
||||
old "All packages have been built.\n\nDue to the presence of permission information, unpacking and repacking the Linux and Macintosh distributions on Windows is not supported."
|
||||
new "所有套件已被建立。\n\n由於含有授權資訊存在,因此在 Windows 中不支援解開和重新包裝 Linux 及 Mac 的套件。"
|
||||
|
||||
# game/distribute.rpy:568
|
||||
old "Archiving files..."
|
||||
new "壓縮檔案..."
|
||||
|
||||
# game/distribute.rpy:845
|
||||
old "Writing the [variant] [format] package."
|
||||
new "寫入 [variant] [format] 套件。"
|
||||
|
||||
# game/distribute.rpy:858
|
||||
old "Making the [variant] update zsync file."
|
||||
new "新增 [variant] 更新 zsync 檔案。"
|
||||
|
||||
# game/distribute.rpy:957
|
||||
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
|
||||
new "完成處理 {b}[complete]{/b} ,共 {b}[total]{/b}個檔案。"
|
||||
|
||||
|
||||
@@ -1,47 +1,63 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/distribute_gui.rpy:139
|
||||
# game/distribute_gui.rpy:157
|
||||
old "Build Distributions: [project.current.name!q]"
|
||||
new "建立釋出版:[project.current.name!q]"
|
||||
|
||||
# game/distribute_gui.rpy:154
|
||||
# game/distribute_gui.rpy:171
|
||||
old "Directory Name:"
|
||||
new "目錄名稱:"
|
||||
|
||||
# game/distribute_gui.rpy:158
|
||||
# game/distribute_gui.rpy:175
|
||||
old "Executable Name:"
|
||||
new "執行檔案名稱:"
|
||||
|
||||
# game/distribute_gui.rpy:167
|
||||
# game/distribute_gui.rpy:185
|
||||
old "Actions:"
|
||||
new "動作:"
|
||||
|
||||
# game/distribute_gui.rpy:175
|
||||
# game/distribute_gui.rpy:193
|
||||
old "Edit options.rpy"
|
||||
new "編輯 options.rpy"
|
||||
|
||||
# game/distribute_gui.rpy:176
|
||||
# game/distribute_gui.rpy:194
|
||||
old "Add from clauses to calls, once"
|
||||
new "向 call 語句添加 from 從句, 一次"
|
||||
|
||||
# game/distribute_gui.rpy:195
|
||||
old "Refresh"
|
||||
new "重新整理"
|
||||
|
||||
# game/distribute_gui.rpy:193
|
||||
# game/distribute_gui.rpy:212
|
||||
old "Build Packages:"
|
||||
new "建立套件:"
|
||||
|
||||
# game/distribute_gui.rpy:208
|
||||
# game/distribute_gui.rpy:231
|
||||
old "Options:"
|
||||
new "選項:"
|
||||
|
||||
# game/distribute_gui.rpy:236
|
||||
old "Build Updates"
|
||||
new "建立更新檔"
|
||||
|
||||
# game/distribute_gui.rpy:212
|
||||
# game/distribute_gui.rpy:238
|
||||
old "Add from clauses to calls"
|
||||
new "向 call 語句添加 from 從句"
|
||||
|
||||
# game/distribute_gui.rpy:242
|
||||
old "Build"
|
||||
new "建立"
|
||||
|
||||
# game/distribute_gui.rpy:219
|
||||
# game/distribute_gui.rpy:246
|
||||
old "Adding from clauses to call statements that do not have them."
|
||||
new "正在向 call 語句添加缺失的 from 從句"
|
||||
|
||||
# game/distribute_gui.rpy:267
|
||||
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
|
||||
new "當運行專案時發生了錯誤。在開始釋出前請確保專案運行無誤。"
|
||||
|
||||
# game/distribute_gui.rpy:236
|
||||
# game/distribute_gui.rpy:284
|
||||
old "Your project does not contain build information. Would you like to add build information to the end of options.rpy?"
|
||||
new "您的專案不包含建置資訊。是否加入建置資訊到 options.rpy?"
|
||||
|
||||
|
||||
@@ -1,58 +1,55 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/editor.rpy:120
|
||||
# game/editor.rpy:150
|
||||
old "{b}Recommended.{/b} A beta editor with an easy to use interface and features that aid in development, such as spell-checking. Editra currently lacks the IME support required for Chinese, Japanese, and Korean text input."
|
||||
new "{b}推薦{/b} 一個有簡單易用介面和功能的測試版編輯器能夠幫助開發,例如拼字的校對功能。Editra 目前缺乏中文、日文,韓文的輸入的 IME 支援。"
|
||||
|
||||
# game/editor.rpy:121
|
||||
# game/editor.rpy:151
|
||||
old "{b}Recommended.{/b} A beta editor with an easy to use interface and features that aid in development, such as spell-checking. Editra currently lacks the IME support required for Chinese, Japanese, and Korean text input. On Linux, Editra requires wxPython."
|
||||
new "{b}推薦{/b} 一個有簡單易用的介面和功能的測試版編輯器能夠幫助開發,例如拼字的校對功能。Editra 現在沒有中文,日文,韓文的輸入功能。在 linux 中 Editra 需要 wxPython(模組支援)。"
|
||||
|
||||
# game/editor.rpy:137
|
||||
old "The may have occured because wxPython is not installed on this system."
|
||||
new "這可能是由於 wxPython 未安裝在此系統中而出現的。"
|
||||
# game/editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
new "這可能是因為 wxPython 沒有被安裝在當前系統中而發生的。"
|
||||
|
||||
# game/editor.rpy:144
|
||||
# game/editor.rpy:169
|
||||
old "Up to 22 MB download required."
|
||||
new "22 MB 需要下載。"
|
||||
|
||||
# game/editor.rpy:157
|
||||
old "1.8 MB download required."
|
||||
new "1.8 MB 需要下載。"
|
||||
|
||||
# game/editor.rpy:158
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
new "這可能是由於 Java 未安裝在此系統中而出現的。"
|
||||
|
||||
# game/editor.rpy:327
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
new "啟動以下編輯器出現異常:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:378
|
||||
old "Select Editor"
|
||||
new "選擇編輯器"
|
||||
|
||||
# game/editor.rpy:393
|
||||
old "A text editor is the program you'll use to edit Ren'Py script files. Here, you can select the editor Ren'Py will use. If not already present, the editor will be automatically downloaded and installed."
|
||||
new "文字編輯器就是您用於編輯 Ren'py 腳本的程式。這裡您可以選擇 Ren'py 會使用的編輯器。如果選定則編輯器將會自動下載並安裝。"
|
||||
|
||||
# game/editor.rpy:415
|
||||
old "Cancel"
|
||||
new "取消"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/editor.rpy:155
|
||||
# game/editor.rpy:182
|
||||
old "A mature editor that requires Java."
|
||||
new "一個成熟的編輯器,它需要 Java。"
|
||||
|
||||
# game/editor.rpy:164
|
||||
# game/editor.rpy:182
|
||||
old "1.8 MB download required."
|
||||
new "1.8 MB 需要下載。"
|
||||
|
||||
# game/editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
new "這可能是因為 Java 沒有被安裝在當前系統中而發生的。"
|
||||
|
||||
# game/editor.rpy:191
|
||||
old "Invokes the editor your operating system has associated with .rpy files."
|
||||
new "調用作業系統已與 .rpy 檔案關聯的編輯器。"
|
||||
|
||||
# game/editor.rpy:180
|
||||
# game/editor.rpy:207
|
||||
old "Prevents Ren'Py from opening a text editor."
|
||||
new "防止 Ren'Py 開啟文字編輯器。"
|
||||
|
||||
# game/editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
new "啟動以下編輯器出現異常:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:457
|
||||
old "Select Editor"
|
||||
new "選擇編輯器"
|
||||
|
||||
# game/editor.rpy:472
|
||||
old "A text editor is the program you'll use to edit Ren'Py script files. Here, you can select the editor Ren'Py will use. If not already present, the editor will be automatically downloaded and installed."
|
||||
new "文字編輯器是您用於編輯 Ren'py 腳本的程式。在這裡您可以選擇 Ren'py 會使用到編輯器。如果選定則編輯器將會自動下載並安裝。"
|
||||
|
||||
# game/editor.rpy:494
|
||||
old "Cancel"
|
||||
new "取消"
|
||||
|
||||
|
||||
@@ -1,93 +1,115 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/front_page.rpy:79
|
||||
old "+ Create New Project"
|
||||
new "+ 新增專案"
|
||||
# game/front_page.rpy:35
|
||||
old "Open [text] directory."
|
||||
new "開啟 [text] 目錄。"
|
||||
|
||||
# game/front_page.rpy:90
|
||||
# game/front_page.rpy:91
|
||||
old "PROJECTS:"
|
||||
new "專案列表:"
|
||||
|
||||
# game/front_page.rpy:93
|
||||
old "refresh"
|
||||
new "重新整理"
|
||||
|
||||
# game/front_page.rpy:120
|
||||
old "+ Create New Project"
|
||||
new "+ 新建專案"
|
||||
|
||||
# game/front_page.rpy:132
|
||||
old "Launch Project"
|
||||
new "啟動專案"
|
||||
|
||||
# game/front_page.rpy:111
|
||||
old "Tutorial"
|
||||
new "教程"
|
||||
|
||||
# game/front_page.rpy:112
|
||||
old "The Question"
|
||||
new "問題"
|
||||
|
||||
# game/front_page.rpy:128
|
||||
old "Active Project"
|
||||
new "活動專案"
|
||||
|
||||
# game/front_page.rpy:136
|
||||
old "Open Directory"
|
||||
new "開啟目錄"
|
||||
|
||||
# game/front_page.rpy:141
|
||||
old "game"
|
||||
new "game"
|
||||
|
||||
# game/front_page.rpy:142
|
||||
old "base"
|
||||
new "base"
|
||||
|
||||
# game/front_page.rpy:148
|
||||
old "Edit File"
|
||||
new "編輯檔案"
|
||||
|
||||
# game/front_page.rpy:156
|
||||
old "All script files"
|
||||
new "開啟所有檔案"
|
||||
|
||||
# game/front_page.rpy:165
|
||||
old "Navigate Script"
|
||||
new "腳本導航"
|
||||
|
||||
# game/front_page.rpy:176
|
||||
old "Check Script (Lint)"
|
||||
new "檢查腳本(Lint)"
|
||||
|
||||
# game/front_page.rpy:177
|
||||
old "Change Theme"
|
||||
new "變更介面主題"
|
||||
|
||||
# game/front_page.rpy:178
|
||||
old "Delete Persistent"
|
||||
new "刪除永久性資料"
|
||||
|
||||
# game/front_page.rpy:186
|
||||
old "Build Distributions"
|
||||
new "建立釋出版"
|
||||
|
||||
# game/front_page.rpy:188
|
||||
old "Generate Translations"
|
||||
new "產生翻譯"
|
||||
|
||||
# game/front_page.rpy:204
|
||||
old "Checking script for potential problems..."
|
||||
new "檢查腳本中的潛在錯誤..."
|
||||
|
||||
# game/front_page.rpy:219
|
||||
old "Deleting persistent data..."
|
||||
new "刪除永久性資料..."
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/front_page.rpy:69
|
||||
old "PROJECTS:"
|
||||
new "專案列表:"
|
||||
# game/front_page.rpy:122
|
||||
old "[p.name!q] (template)"
|
||||
new "[p.name!q] (template)"
|
||||
|
||||
# game/front_page.rpy:215
|
||||
# game/front_page.rpy:150
|
||||
old "Select project [text]."
|
||||
new "選擇專案 [text]。"
|
||||
|
||||
# game/front_page.rpy:166
|
||||
old "Tutorial"
|
||||
new "Tutorial"
|
||||
|
||||
# game/front_page.rpy:167
|
||||
old "The Question"
|
||||
new "The Question"
|
||||
|
||||
# game/front_page.rpy:183
|
||||
old "Active Project"
|
||||
new "活動專案"
|
||||
|
||||
# game/front_page.rpy:191
|
||||
old "Open Directory"
|
||||
new "開啟目錄"
|
||||
|
||||
# game/front_page.rpy:196
|
||||
old "game"
|
||||
new "game"
|
||||
|
||||
# game/front_page.rpy:197
|
||||
old "base"
|
||||
new "base"
|
||||
|
||||
# game/front_page.rpy:204
|
||||
old "Edit File"
|
||||
new "編輯檔案"
|
||||
|
||||
# game/front_page.rpy:212
|
||||
old "All script files"
|
||||
new "開啟所有檔案"
|
||||
|
||||
# game/front_page.rpy:221
|
||||
old "Navigate Script"
|
||||
new "腳本導航"
|
||||
|
||||
# game/front_page.rpy:232
|
||||
old "Check Script (Lint)"
|
||||
new "檢查腳本 (Lint)"
|
||||
|
||||
# game/front_page.rpy:233
|
||||
old "Change Theme"
|
||||
new "變更介面主題"
|
||||
|
||||
# game/front_page.rpy:234
|
||||
old "Delete Persistent"
|
||||
new "刪除持久性資料"
|
||||
|
||||
# game/front_page.rpy:235
|
||||
old "Force Recompile"
|
||||
new "強制重新編譯"
|
||||
|
||||
# game/front_page.rpy:243
|
||||
old "Build Distributions"
|
||||
new "建立釋出版"
|
||||
|
||||
# game/front_page.rpy:245
|
||||
old "Android"
|
||||
new "Android"
|
||||
|
||||
# game/front_page.rpy:217
|
||||
old "Extract Dialogue"
|
||||
new "產生對話框"
|
||||
# game/front_page.rpy:246
|
||||
old "iOS"
|
||||
new "iOS"
|
||||
|
||||
# game/front_page.rpy:247
|
||||
old "Generate Translations"
|
||||
new "產生翻譯檔"
|
||||
|
||||
# game/front_page.rpy:248
|
||||
old "Extract Dialogue"
|
||||
new "提取對話"
|
||||
|
||||
# game/front_page.rpy:264
|
||||
old "Checking script for potential problems..."
|
||||
new "檢查腳本中的潛在錯誤..."
|
||||
|
||||
# game/front_page.rpy:279
|
||||
old "Deleting persistent data..."
|
||||
new "正在刪除持久性資料..."
|
||||
|
||||
# game/front_page.rpy:287
|
||||
old "Recompiling all rpy files into rpyc files..."
|
||||
new "重編譯所有 rpy 檔案為 rpyc 檔案……"
|
||||
|
||||
|
||||
@@ -1,90 +1,83 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/interface.rpy:89
|
||||
# game/interface.rpy:107
|
||||
old "Documentation"
|
||||
new "文件"
|
||||
|
||||
# game/interface.rpy:90
|
||||
# game/interface.rpy:108
|
||||
old "Ren'Py Website"
|
||||
new "Ren'Py網站"
|
||||
|
||||
# game/interface.rpy:91
|
||||
# game/interface.rpy:109
|
||||
old "Ren'Py Games List"
|
||||
new "Ren'Py遊戲列表"
|
||||
|
||||
# game/interface.rpy:92
|
||||
# game/interface.rpy:110
|
||||
old "About"
|
||||
new "關於"
|
||||
|
||||
# game/interface.rpy:99
|
||||
# game/interface.rpy:117
|
||||
old "update"
|
||||
new "更新"
|
||||
|
||||
# game/interface.rpy:101
|
||||
# game/interface.rpy:119
|
||||
old "preferences"
|
||||
new "設定"
|
||||
|
||||
# game/interface.rpy:102
|
||||
# game/interface.rpy:120
|
||||
old "quit"
|
||||
new "離開"
|
||||
|
||||
# game/interface.rpy:149
|
||||
# game/interface.rpy:192
|
||||
old "Yes"
|
||||
new "確定"
|
||||
|
||||
# game/interface.rpy:151
|
||||
# game/interface.rpy:194
|
||||
old "No"
|
||||
new "取消"
|
||||
|
||||
# game/interface.rpy:181
|
||||
# game/interface.rpy:229
|
||||
old "Due to package format limitations, non-ASCII file and directory names are not allowed."
|
||||
new "由於套件格式的限制,非 ASCII 編碼的檔案和目錄將不被支援。"
|
||||
|
||||
# game/interface.rpy:183
|
||||
old "[title]"
|
||||
new "[title]"
|
||||
|
||||
# game/interface.rpy:248
|
||||
# game/interface.rpy:321
|
||||
old "ERROR"
|
||||
new "錯誤"
|
||||
|
||||
# game/interface.rpy:280
|
||||
# game/interface.rpy:350
|
||||
old "While [what!q], an error occured:"
|
||||
new "[what!q]時,出現錯誤:"
|
||||
|
||||
# game/interface.rpy:281
|
||||
# game/interface.rpy:350
|
||||
old "[exception!q]"
|
||||
new "[exception!q]"
|
||||
|
||||
# game/interface.rpy:298
|
||||
# game/interface.rpy:369
|
||||
old "Text input may not contain the {{ or [[ characters."
|
||||
new "文字輸入可能不包含{{ 或 [[ 字元。"
|
||||
|
||||
# game/interface.rpy:303
|
||||
# game/interface.rpy:374
|
||||
old "File and directory names may not contain / or \\."
|
||||
new "檔案或目錄不包含/或\\。"
|
||||
|
||||
# game/interface.rpy:309
|
||||
# game/interface.rpy:380
|
||||
old "File and directory names must consist of ASCII characters."
|
||||
new "檔案名稱和目錄名稱必須是 ASCII 字元。"
|
||||
|
||||
# game/interface.rpy:330
|
||||
# game/interface.rpy:401
|
||||
old "INFORMATION"
|
||||
new "資訊"
|
||||
|
||||
# game/interface.rpy:373
|
||||
# game/interface.rpy:448
|
||||
old "PROCESSING"
|
||||
new "正在處理"
|
||||
|
||||
# game/interface.rpy:390
|
||||
# game/interface.rpy:465
|
||||
old "QUESTION"
|
||||
new "問題"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/interface.rpy:456
|
||||
# game/interface.rpy:478
|
||||
old "CHOICE"
|
||||
new "選擇"
|
||||
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/ios.rpy:28
|
||||
old "To build iOS packages, please download renios, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
|
||||
new "要建立 iOS 套件,請下載 renios,並解壓縮到 Ren'Py 目錄下。然後重新啟動 Ren'Py 啟動器。"
|
||||
|
||||
# game/ios.rpy:29
|
||||
old "The directory in where Xcode projects will be placed has not been selected. Choose 'Select Directory' to select it."
|
||||
new "從 '選擇目錄' ,請選擇 Xcode 專案所在的目錄。"
|
||||
|
||||
# game/ios.rpy:30
|
||||
old "There is no Xcode project corresponding to the current Ren'Py project. Choose 'Create Xcode Project' to create one."
|
||||
new "沒有對應於當前的 Ren'Py 專案 Xcode 專案。請從 '創建 Xcode 專案' 中創建。"
|
||||
|
||||
# game/ios.rpy:31
|
||||
old "An Xcode project exists. Choose 'Update Xcode Project' to update it with the latest game files, or use Xcode to build and install it."
|
||||
new "Xcode 專案已存在。'更新 Xcode 專案' 通過選擇更新到最新的遊戲檔,但要使用 Xcode 構建它,請安裝。"
|
||||
|
||||
# game/ios.rpy:33
|
||||
old "Attempts to emulate an iPhone.\n\nTouch input is emulated through the mouse, but only when the button is held down."
|
||||
new "模擬一臺 iPhone。\n\n當按鈕被按下時,觸控輸入會模擬為滑鼠。"
|
||||
|
||||
# game/ios.rpy:34
|
||||
old "Attempts to emulate an iPad.\n\nTouch input is emulated through the mouse, but only when the button is held down."
|
||||
new "模擬一個 iPad。\n\n當按鈕被按下時,觸控輸入會模擬為滑鼠。"
|
||||
|
||||
# game/ios.rpy:36
|
||||
old "Selects the directory where Xcode projects will be placed."
|
||||
new "選擇放置 Xcode 專案的目錄。"
|
||||
|
||||
# game/ios.rpy:37
|
||||
old "Creates an Xcode project corresponding to the current Ren'Py project."
|
||||
new "創建對應于當前的 Ren'Py 專案 Xcode 專案。"
|
||||
|
||||
# game/ios.rpy:38
|
||||
old "Updates the Xcode project with the latest game files. This must be done each time the Ren'Py project changes."
|
||||
new "更新 Xcode 專案和最新的遊戲檔案。每次進行時 Ren'py 專案將會變更。"
|
||||
|
||||
# game/ios.rpy:39
|
||||
old "Opens the Xcode project in Xcode."
|
||||
new "在 Xcode 中開啟 Xcode 專案。"
|
||||
|
||||
# game/ios.rpy:41
|
||||
old "Opens the directory containing Xcode projects."
|
||||
new "開啟包含 Xcode 專案的目錄。"
|
||||
|
||||
# game/ios.rpy:126
|
||||
old "The Xcode project already exists. Would you like to rename the old project, and replace it with a new one?"
|
||||
new "Xcode 專案已存在。你想要重命名舊的專案,並將它替換一個新的嗎?"
|
||||
|
||||
# game/ios.rpy:200
|
||||
old "iOS: [project.current.name!q]"
|
||||
new "iOS: [project.current.name!q]"
|
||||
|
||||
# game/ios.rpy:229
|
||||
old "iPhone"
|
||||
new "iPhone"
|
||||
|
||||
# game/ios.rpy:233
|
||||
old "iPad"
|
||||
new "iPad"
|
||||
|
||||
# game/ios.rpy:253
|
||||
old "Select Xcode Projects Directory"
|
||||
new "選擇 Xcode 專案目錄"
|
||||
|
||||
# game/ios.rpy:257
|
||||
old "Create Xcode Project"
|
||||
new "創建 Xcode 專案"
|
||||
|
||||
# game/ios.rpy:261
|
||||
old "Update Xcode Project"
|
||||
new "更新 Xcode 專案"
|
||||
|
||||
# game/ios.rpy:266
|
||||
old "Launch Xcode"
|
||||
new "啟動 Xcode"
|
||||
|
||||
# game/ios.rpy:301
|
||||
old "Open Xcode Projects Directory"
|
||||
new "開啟 Xcode 專案目錄"
|
||||
|
||||
# game/ios.rpy:334
|
||||
old "Before packaging iOS apps, you'll need to download renios, Ren'Py's iOS support. Would you like to download renios now?"
|
||||
new "在包裝 iOS 應用程式前,您須下載 renios,Ren'Py 的 iOS 包裝程式。您要現在下載 renios 嗎?"
|
||||
|
||||
# game/ios.rpy:343
|
||||
old "XCODE PROJECTS DIRECTORY"
|
||||
new "XCODE PROJECTS DIRECTORY"
|
||||
|
||||
# game/ios.rpy:343
|
||||
old "Please choose the Xcode Projects Directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
|
||||
new "請使用 Xcode 的目錄選擇器來選擇專案目錄。\n{b}目錄選擇視窗可能會開啟在本視窗後面。{/b}"
|
||||
|
||||
# game/ios.rpy:348
|
||||
old "Ren'Py has set the Xcode Projects Directory to:"
|
||||
new "Ren'Py 已經將 Xcode 專案目錄設定為:"
|
||||
|
||||
@@ -1,71 +1,67 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/navigation.rpy:150
|
||||
# game/navigation.rpy:168
|
||||
old "Navigate: [project.current.name]"
|
||||
new "導航:[project.current.name]"
|
||||
|
||||
# game/navigation.rpy:159
|
||||
# game/navigation.rpy:177
|
||||
old "Order: "
|
||||
new "排序:"
|
||||
|
||||
# game/navigation.rpy:160
|
||||
# game/navigation.rpy:178
|
||||
old "alphabetical"
|
||||
new "按字母順序"
|
||||
|
||||
# game/navigation.rpy:162
|
||||
# game/navigation.rpy:180
|
||||
old "by-file"
|
||||
new "按檔案"
|
||||
|
||||
# game/navigation.rpy:164
|
||||
# game/navigation.rpy:182
|
||||
old "natural"
|
||||
new "natural"
|
||||
|
||||
# game/navigation.rpy:168
|
||||
old "refresh"
|
||||
new "重新整理"
|
||||
|
||||
# game/navigation.rpy:176
|
||||
# game/navigation.rpy:194
|
||||
old "Category:"
|
||||
new "類別:"
|
||||
|
||||
# game/navigation.rpy:178
|
||||
# game/navigation.rpy:196
|
||||
old "files"
|
||||
new "檔案"
|
||||
|
||||
# game/navigation.rpy:179
|
||||
# game/navigation.rpy:197
|
||||
old "labels"
|
||||
new "標籤"
|
||||
|
||||
# game/navigation.rpy:180
|
||||
# game/navigation.rpy:198
|
||||
old "defines"
|
||||
new "定義"
|
||||
|
||||
# game/navigation.rpy:181
|
||||
# game/navigation.rpy:199
|
||||
old "transforms"
|
||||
new "轉換"
|
||||
|
||||
# game/navigation.rpy:182
|
||||
# game/navigation.rpy:200
|
||||
old "screens"
|
||||
new "螢幕"
|
||||
|
||||
# game/navigation.rpy:183
|
||||
# game/navigation.rpy:201
|
||||
old "callables"
|
||||
new "可呼叫"
|
||||
|
||||
# game/navigation.rpy:184
|
||||
# game/navigation.rpy:202
|
||||
old "TODOs"
|
||||
new "待辦事項"
|
||||
|
||||
# game/navigation.rpy:223
|
||||
# game/navigation.rpy:241
|
||||
old "+ Add script file"
|
||||
new "+ 加入腳本檔案"
|
||||
|
||||
# game/navigation.rpy:231
|
||||
# game/navigation.rpy:249
|
||||
old "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
|
||||
new "沒有待辦的事項被發現。\n\n要建立一個包含\"# TODO\"到您的腳本中。"
|
||||
new "沒有待辦的事項被發現。\n\n要建立一個包含「# TODO」到您的腳本中。"
|
||||
|
||||
# game/navigation.rpy:238
|
||||
# game/navigation.rpy:256
|
||||
old "The list of names is empty."
|
||||
new "名稱清單為空。"
|
||||
|
||||
|
||||
@@ -1,45 +1,35 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/new_project.rpy:22
|
||||
# game/new_project.rpy:40
|
||||
old "Choose Project Template"
|
||||
new "選擇專案模版"
|
||||
|
||||
# game/new_project.rpy:40
|
||||
old "Please select a template to use for your new project. Ren'Py ships with a default template that creates an English-language game with standard screens."
|
||||
new "請選擇一個用於新專案的模版。Ren'Py 中預設了一個標準視窗的英文遊戲。"
|
||||
|
||||
# game/new_project.rpy:55
|
||||
old "PROJECT NAME"
|
||||
new "專案名稱"
|
||||
|
||||
# game/new_project.rpy:56
|
||||
old "Please enter the name of your project:"
|
||||
new "請輸入專案名稱:"
|
||||
|
||||
# game/new_project.rpy:62
|
||||
old "The project name may not be empty."
|
||||
new "專案名稱不能為空。"
|
||||
|
||||
# game/new_project.rpy:67
|
||||
old "[project_name!q] already exists. Please choose a different project name."
|
||||
new "[project_name!q]已存在。請選擇不同的名稱。"
|
||||
|
||||
# game/new_project.rpy:70
|
||||
old "[project_dir!q] already exists. Please choose a different project name."
|
||||
new "[project_dir!q] 已存在。請選擇不同的名稱。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/new_project.rpy:40
|
||||
# game/new_project.rpy:58
|
||||
old "Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'."
|
||||
new "請為您新增的專案選擇一個模版。該模版將設定為預設的字型和語言。如果您的所使用的語言沒有被支援,那麼請選擇「english」。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
new "請為您新建的專案選擇一個模版。該模版將設定為預設的字型和語言。如果您的所使用的語言沒有被支援,那麼請選擇「english」。"
|
||||
|
||||
# game/new_project.rpy:71
|
||||
old "The projects directory could not be set. Giving up."
|
||||
new "無法設定專案目錄。放棄。"
|
||||
|
||||
# game/new_project.rpy:75
|
||||
old "PROJECT NAME"
|
||||
new "專案名稱"
|
||||
|
||||
# game/new_project.rpy:75
|
||||
old "Please enter the name of your project:"
|
||||
new "請輸入專案名稱:"
|
||||
|
||||
# game/new_project.rpy:83
|
||||
old "The project name may not be empty."
|
||||
new "專案名稱不能為空。"
|
||||
|
||||
# game/new_project.rpy:88
|
||||
old "[project_name!q] already exists. Please choose a different project name."
|
||||
new "[project_name!q] 已存在。請選擇不同的名稱。"
|
||||
|
||||
# game/new_project.rpy:91
|
||||
old "[project_dir!q] already exists. Please choose a different project name."
|
||||
new "[project_dir!q] 已存在。請選擇不同的名稱。"
|
||||
|
||||
|
||||
@@ -1,66 +1,83 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/preferences.rpy:40
|
||||
# game/preferences.rpy:64
|
||||
old "Launcher Preferences"
|
||||
new "啟動器偏好"
|
||||
|
||||
# game/preferences.rpy:61
|
||||
# game/preferences.rpy:85
|
||||
old "Projects Directory:"
|
||||
new "專案目錄:"
|
||||
|
||||
# game/preferences.rpy:68
|
||||
# game/preferences.rpy:92
|
||||
old "[persistent.projects_directory!q]"
|
||||
new "[persistent.projects_directory!q]"
|
||||
|
||||
# game/preferences.rpy:70
|
||||
# game/preferences.rpy:94
|
||||
old "Projects directory: [text]"
|
||||
new "專案資料夾: [text]"
|
||||
|
||||
# game/preferences.rpy:96
|
||||
old "Not Set"
|
||||
new "未設定"
|
||||
|
||||
# game/preferences.rpy:84
|
||||
# game/preferences.rpy:111
|
||||
old "Text Editor:"
|
||||
new "文字編輯器: "
|
||||
new "文字編輯器:"
|
||||
|
||||
# game/preferences.rpy:106
|
||||
# game/preferences.rpy:117
|
||||
old "Text editor: [text]"
|
||||
new "文字編輯器: [text]"
|
||||
|
||||
# game/preferences.rpy:133
|
||||
old "Update Channel:"
|
||||
new "更新頻道:"
|
||||
|
||||
# game/preferences.rpy:126
|
||||
# game/preferences.rpy:153
|
||||
old "Navigation Options:"
|
||||
new "導航選項:"
|
||||
|
||||
# game/preferences.rpy:130
|
||||
# game/preferences.rpy:157
|
||||
old "Include private names"
|
||||
new "包含私有名稱"
|
||||
|
||||
# game/preferences.rpy:131
|
||||
# game/preferences.rpy:158
|
||||
old "Include library names"
|
||||
new "包含資料庫名稱"
|
||||
|
||||
# game/preferences.rpy:141
|
||||
# game/preferences.rpy:168
|
||||
old "Launcher Options:"
|
||||
new "啟動器選項:"
|
||||
|
||||
# game/preferences.rpy:145
|
||||
# game/preferences.rpy:172
|
||||
old "Hardware rendering"
|
||||
new "硬體渲染"
|
||||
|
||||
# game/preferences.rpy:148
|
||||
# game/preferences.rpy:173
|
||||
old "Show templates"
|
||||
new "顯示模板"
|
||||
|
||||
# game/preferences.rpy:174
|
||||
old "Show edit file section"
|
||||
new "顯示編輯檔節"
|
||||
|
||||
# game/preferences.rpy:175
|
||||
old "Large fonts"
|
||||
new "大字體"
|
||||
|
||||
# game/preferences.rpy:176
|
||||
old "Generate empty strings for translations"
|
||||
new "產生空字串翻譯"
|
||||
|
||||
# game/preferences.rpy:179
|
||||
old "Console output"
|
||||
new "控制臺輸出"
|
||||
|
||||
# game/preferences.rpy:169
|
||||
# game/preferences.rpy:200
|
||||
old "Open launcher project"
|
||||
new "開啟啟動器專案"
|
||||
|
||||
# game/preferences.rpy:183
|
||||
# game/preferences.rpy:214
|
||||
old "Language:"
|
||||
new "語言:"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/preferences.rpy:146
|
||||
old "Show templates"
|
||||
new "顯示模版"
|
||||
|
||||
|
||||
@@ -1,58 +1,51 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/project.rpy:196
|
||||
old "Ren'Py is scanning the project..."
|
||||
new "Ren'Py 正在掃描專案..."
|
||||
|
||||
# game/project.rpy:485
|
||||
old "PROJECTS DIRECTORY"
|
||||
new "專案目錄"
|
||||
|
||||
# game/project.rpy:485
|
||||
old "Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
|
||||
new "請使用目錄選擇器選擇專案目錄。\n{b}目錄選擇視窗可能會開啟在本視窗後面。{/b}"
|
||||
|
||||
# game/project.rpy:485
|
||||
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
|
||||
new "啟動器會掃描該目錄下的專案,新增的專案也將在該目錄下建置。專案也在該目錄下建立。"
|
||||
|
||||
# game/project.rpy:525
|
||||
old "Ren'Py was unable to run python with tkinter to choose the projects directory."
|
||||
new "Ren'Py 無法運行 python 的 tkinter 來選擇專案目錄。"
|
||||
|
||||
# game/project.rpy:529
|
||||
old "Ren'Py has set the projects directory to:"
|
||||
new "Ren'Py 已將專案目錄設定為:"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/project.rpy:48
|
||||
# game/project.rpy:47
|
||||
old "After making changes to the script, press shift+R to reload your game."
|
||||
new "改變腳本後,請按 shift+R 來重新載入您的遊戲。"
|
||||
|
||||
# game/project.rpy:49
|
||||
# game/project.rpy:47
|
||||
old "Press shift+O (the letter) to access the console."
|
||||
new "按 shift+O (the letter)來進入控制臺。"
|
||||
new "按 shift+O (the letter) 來進入控制臺。"
|
||||
|
||||
# game/project.rpy:50
|
||||
# game/project.rpy:47
|
||||
old "Press shift+D to access the developer menu."
|
||||
new "按 shift+D 來進入開發者選單"
|
||||
new "按 shift+D 來進入開發者選單。"
|
||||
|
||||
# game/project.rpy:219
|
||||
# game/project.rpy:47
|
||||
old "Have you backed up your projects recently?"
|
||||
new "您最近有備份您的專案嗎?"
|
||||
|
||||
# game/project.rpy:224
|
||||
old "Launching the project failed."
|
||||
new "啟動專案失敗。"
|
||||
|
||||
# game/project.rpy:219
|
||||
# game/project.rpy:224
|
||||
old "Please ensure that your project launches normally before running this command."
|
||||
new "請確保您的專案能正常啟動再執行本指令。"
|
||||
|
||||
# game/project.rpy:516
|
||||
# game/project.rpy:237
|
||||
old "Ren'Py is scanning the project..."
|
||||
new "Ren'Py 正在掃描專案.."
|
||||
|
||||
# game/project.rpy:526
|
||||
old "Launching"
|
||||
new "正在啟動"
|
||||
new "啟動"
|
||||
|
||||
# game/project.rpy:585
|
||||
old "Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."
|
||||
new "Ren'Py 無法運行 python 的 tkinter 來選擇專案目錄。請安裝 python-tk 或 tkinter。"
|
||||
# game/project.rpy:555
|
||||
old "PROJECTS DIRECTORY"
|
||||
new "專案目錄"
|
||||
|
||||
# game/project.rpy:555
|
||||
old "Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
|
||||
new "請使用目錄選擇器選擇專案目錄。\n{b}目錄選擇視窗可能會開啟在本視窗後面。{/b}"
|
||||
|
||||
# game/project.rpy:555
|
||||
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
|
||||
new "啟動器會掃描該目錄下的專案,新增的專案也將在該目錄下建置。專案也在該目錄下建立。"
|
||||
|
||||
# game/project.rpy:560
|
||||
old "Ren'Py has set the projects directory to:"
|
||||
new "Ren'Py 已將專案目錄設定為"
|
||||
|
||||
|
||||
@@ -1,35 +1,31 @@
|
||||
translate traditional_chinese python:
|
||||
DROID = "tl/traditional_chinese/DroidSansFallback.ttf"
|
||||
|
||||
DSF = "tl/traditional_chinese/DroidSansFallback.ttf"
|
||||
|
||||
style.l_default.font = DSF
|
||||
style.l_default.size = 16
|
||||
style.l_default.selected_font = DSF
|
||||
style.l_default.selected_bold = 1
|
||||
|
||||
style.l_button_text.font = DSF
|
||||
style.l_button_text.selected_bold = True
|
||||
style.l_checkbox_text.font = DSF
|
||||
style.l_link_text.font = DSF
|
||||
|
||||
style.l_button_text.selected_font = DSF
|
||||
style.l_button_text.selected_bold = 1
|
||||
|
||||
style.l_checkbox_text.selected_font = DSF
|
||||
style.l_checkbox_text.selected_bold = 1
|
||||
|
||||
translate traditional_chinese style l_default:
|
||||
font DROID
|
||||
size 16
|
||||
style.l_navigation_button_text.font = DSF
|
||||
style.l_navigation_text.font = DSF
|
||||
style.l_navigation_text.bold = True
|
||||
|
||||
translate traditional_chinese style l_button_text:
|
||||
selected_font DROID
|
||||
selected_bold True
|
||||
|
||||
translate traditional_chinese style l_link_text:
|
||||
font DROID
|
||||
|
||||
translate traditional_chinese style l_alternate_text:
|
||||
font DROID
|
||||
|
||||
translate traditional_chinese style l_navigation_button_text:
|
||||
font DROID
|
||||
|
||||
translate traditional_chinese style l_navigation_text:
|
||||
font DROID
|
||||
bold True
|
||||
|
||||
translate traditional_chinese style l_checkbox_text:
|
||||
selected_font DROID
|
||||
|
||||
translate traditional_chinese style l_nonbox_text:
|
||||
selected_font DROID
|
||||
|
||||
translate traditional_chinese style hyperlink_text:
|
||||
font DROID
|
||||
|
||||
translate traditional_chinese python:
|
||||
make_style_backup()
|
||||
style.l_link_text.selected_font = DSF
|
||||
style.l_link_text.selected_bold = 1
|
||||
|
||||
style.l_alternate_text.font = DSF
|
||||
style.l_nonbox_text.font = DSF
|
||||
style.hyperlink_text.font = DSF
|
||||
make_style_backup()
|
||||
@@ -1,38 +1,35 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/translations.rpy:10
|
||||
# game/translations.rpy:34
|
||||
old "Create or Update Translations"
|
||||
new "新增或更新翻譯"
|
||||
|
||||
# game/translations.rpy:10
|
||||
# game/translations.rpy:34
|
||||
old "Please enter the name of the language for which you want to create or update translations."
|
||||
new "請輸入您要新增或者更新語言的名稱。"
|
||||
|
||||
# game/translations.rpy:15
|
||||
# game/translations.rpy:39
|
||||
old "The language name can not be the empty string."
|
||||
new "語言名稱不能為空字串。"
|
||||
|
||||
# game/translations.rpy:26
|
||||
# game/translations.rpy:50
|
||||
old "Ren'Py is generating translations...."
|
||||
new "Ren'Py 正在產生翻譯..."
|
||||
|
||||
# game/translations.rpy:30
|
||||
# game/translations.rpy:54
|
||||
old "Ren'Py has finished generating [language] translations."
|
||||
new "Ren'Py 已經完成[language]翻譯檔案。"
|
||||
new "Ren'Py 已經完成 [language] 檔案的翻譯。"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/translations.rpy:44
|
||||
# game/translations.rpy:67
|
||||
old "What format would you like for the extracted dialogue?"
|
||||
new "您要使用什麼格式來提取對話框?"
|
||||
new "您要使用什麼格式來提取對話?"
|
||||
|
||||
# game/translations.rpy:56
|
||||
# game/translations.rpy:80
|
||||
old "Ren'Py is extracting dialogue...."
|
||||
new "Ren'Py 正在提取對話框..."
|
||||
new "Ren'Py 正在提取對話..."
|
||||
|
||||
# game/translations.rpy:60
|
||||
# game/translations.rpy:84
|
||||
old "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[format] in the base directory."
|
||||
new "Ren'Py 已經完成對話框提取。提取的對話可以在底層目錄下 dialogue.[format] 中找到。"
|
||||
new "Ren'Py 已經完成對話提取。提取的對話可以在底層目錄下 dialogue.[format] 中找到。"
|
||||
|
||||
|
||||
@@ -1,93 +1,38 @@
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/updater.rpy:54
|
||||
# game/updater.rpy:78
|
||||
old "Select Update Channel"
|
||||
new "選擇更新頻道"
|
||||
|
||||
# game/updater.rpy:65
|
||||
# game/updater.rpy:89
|
||||
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
|
||||
new "更新頻道控制 Ren'Py 更新將會下載的版本。請選擇一個更新頻道。"
|
||||
|
||||
# game/updater.rpy:70
|
||||
# game/updater.rpy:94
|
||||
old "Release"
|
||||
new "Release"
|
||||
|
||||
# game/updater.rpy:76
|
||||
# game/updater.rpy:100
|
||||
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
|
||||
new "{b}推薦{/b} Ren'py 的版本應在所有新釋出的遊戲中使用。"
|
||||
|
||||
# game/updater.rpy:81
|
||||
# game/updater.rpy:105
|
||||
old "Prerelease"
|
||||
new "Prerelease"
|
||||
|
||||
# game/updater.rpy:87
|
||||
# game/updater.rpy:111
|
||||
old "A preview of the next version of Ren'Py that can be used for testing and taking advantage of new features, but not for final releases of games."
|
||||
new "預覽 Ren'py 的下一個版本,適合用於測試和體驗新功能,但不適合遊戲的最終版本。"
|
||||
|
||||
# game/updater.rpy:93
|
||||
# game/updater.rpy:117
|
||||
old "Experimental"
|
||||
new "Experimental"
|
||||
|
||||
# game/updater.rpy:99
|
||||
# game/updater.rpy:123
|
||||
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
|
||||
new "Ren'py 的實驗版本,除非您被 Ren'py 的開發者要求,否則您不應該選擇此頻道。"
|
||||
|
||||
# game/updater.rpy:119
|
||||
old "An error has occured:"
|
||||
new "一個錯誤發生:"
|
||||
|
||||
# game/updater.rpy:121
|
||||
old "Checking for updates."
|
||||
new "檢查更新"
|
||||
|
||||
# game/updater.rpy:123
|
||||
old "Ren'Py is up to date."
|
||||
new "Ren'Py 已是最新版本"
|
||||
|
||||
# game/updater.rpy:125
|
||||
old "[u.version] is now available. Do you want to install it?"
|
||||
new "[u.version] 已經可以更新。你要下載它嗎?"
|
||||
|
||||
# game/updater.rpy:127
|
||||
old "Preparing to download the update."
|
||||
new "準備下載更新。"
|
||||
|
||||
# game/updater.rpy:129
|
||||
old "Downloading the update."
|
||||
new "正在下載更新。"
|
||||
|
||||
# game/updater.rpy:131
|
||||
old "Unpacking the update."
|
||||
new "正在解壓縮更新檔案。"
|
||||
|
||||
# game/updater.rpy:133
|
||||
old "Finishing up."
|
||||
new "即將完成。"
|
||||
|
||||
# game/updater.rpy:135
|
||||
old "The update has been installed. Ren'Py will restart."
|
||||
new "已安裝更新。Ren'Py 將會重新啟動。"
|
||||
|
||||
# game/updater.rpy:137
|
||||
old "The update has been installed."
|
||||
new "已安裝更新。"
|
||||
|
||||
# game/updater.rpy:139
|
||||
old "The update was cancelled."
|
||||
new "已取消更新。"
|
||||
|
||||
# game/updater.rpy:156
|
||||
old "Ren'Py Update"
|
||||
new "Ren'Py 更新"
|
||||
|
||||
# game/updater.rpy:162
|
||||
old "Proceed"
|
||||
new "繼續"
|
||||
|
||||
|
||||
translate traditional_chinese strings:
|
||||
|
||||
# game/updater.rpy:129
|
||||
old "Nightly"
|
||||
new "Nightly"
|
||||
@@ -96,3 +41,55 @@ translate traditional_chinese strings:
|
||||
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
|
||||
new "Ren'Py 最新的開發版本。這可能會擁有最新的功能,或可能根本無法運作。"
|
||||
|
||||
# game/updater.rpy:155
|
||||
old "An error has occured:"
|
||||
new "一個錯誤發生:"
|
||||
|
||||
# game/updater.rpy:157
|
||||
old "Checking for updates."
|
||||
new "正在檢查更新。"
|
||||
|
||||
# game/updater.rpy:159
|
||||
old "Ren'Py is up to date."
|
||||
new "Ren'Py 已是最新版本。"
|
||||
|
||||
# game/updater.rpy:161
|
||||
old "[u.version] is now available. Do you want to install it?"
|
||||
new "[u.version] 已經可以更新。您要下載它嗎?"
|
||||
|
||||
# game/updater.rpy:163
|
||||
old "Preparing to download the update."
|
||||
new "準備下載更新"
|
||||
|
||||
# game/updater.rpy:165
|
||||
old "Downloading the update."
|
||||
new "正在下載更新。"
|
||||
|
||||
# game/updater.rpy:167
|
||||
old "Unpacking the update."
|
||||
new "正在解壓縮更新檔案。"
|
||||
|
||||
# game/updater.rpy:169
|
||||
old "Finishing up."
|
||||
new "即將完成。"
|
||||
|
||||
# game/updater.rpy:171
|
||||
old "The update has been installed. Ren'Py will restart."
|
||||
new "已安裝更新。Ren'Py 將會重新啟動。"
|
||||
|
||||
# game/updater.rpy:173
|
||||
old "The update has been installed."
|
||||
new "已安裝更新。"
|
||||
|
||||
# game/updater.rpy:175
|
||||
old "The update was cancelled."
|
||||
new "已取消更新。"
|
||||
|
||||
# game/updater.rpy:192
|
||||
old "Ren'Py Update"
|
||||
new "Ren'Py 更新"
|
||||
|
||||
# game/updater.rpy:198
|
||||
old "Proceed"
|
||||
new "繼續"
|
||||
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ except ImportError:
|
||||
vc_version = 0
|
||||
|
||||
# The tuple giving the version number.
|
||||
version_tuple = (6, 99, 8, vc_version)
|
||||
version_tuple = (6, 99, 9, vc_version)
|
||||
|
||||
# The name of this version.
|
||||
version_name = "Here's to the crazy ones."
|
||||
|
||||
@@ -110,6 +110,10 @@ class ArgumentParser(argparse.ArgumentParser):
|
||||
"--compile", action='store_true', dest='compile',
|
||||
help='Forces all .rpy scripts to be recompiled before proceeding.')
|
||||
|
||||
self.add_argument(
|
||||
"--keep-orphan-rpyc", action="store_true",
|
||||
help="Prevents the compile command from deleting orphan rpyc files.")
|
||||
|
||||
self.add_argument(
|
||||
"--lint", action="store_true", dest="lint",
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
+8
-1
@@ -983,13 +983,14 @@ def predict_imspec(imspec, scene=False, atl=None):
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
if atl is not None:
|
||||
try:
|
||||
at_list.append(renpy.display.motion.ATLTransform(atl))
|
||||
except:
|
||||
pass
|
||||
|
||||
layer = renpy.exports.default_layer(layer, tag or name, expression)
|
||||
|
||||
if scene:
|
||||
renpy.game.context().images.predict_scene(layer)
|
||||
|
||||
@@ -1023,6 +1024,8 @@ def show_imspec(imspec, atl=None):
|
||||
|
||||
at_list = [ renpy.python.py_eval(i) for i in at_list ]
|
||||
|
||||
layer = renpy.exports.default_layer(layer, tag or name, expression)
|
||||
|
||||
renpy.config.show(name,
|
||||
at_list=at_list,
|
||||
layer=layer,
|
||||
@@ -1197,6 +1200,8 @@ class Hide(Node):
|
||||
if tag is None:
|
||||
tag = name[0]
|
||||
|
||||
layer = renpy.exports.default_layer(layer, tag)
|
||||
|
||||
renpy.game.context().images.predict_hide(tag, layer)
|
||||
|
||||
return [ self.next ]
|
||||
@@ -1216,6 +1221,8 @@ class Hide(Node):
|
||||
elif len(self.imspec) == 7:
|
||||
name, _expression, tag, _at_list, layer, _zorder, _behind = self.imspec
|
||||
|
||||
layer = renpy.exports.default_layer(layer, tag or name)
|
||||
|
||||
renpy.config.hide(tag or name, layer)
|
||||
|
||||
|
||||
|
||||
+1
-4
@@ -127,9 +127,6 @@ def interpolate(t, a, b, type): #@ReservedAssignment
|
||||
Linearly interpolate the arguments.
|
||||
"""
|
||||
|
||||
if t >= 1.0:
|
||||
return b
|
||||
|
||||
# Recurse into tuples.
|
||||
if isinstance(b, tuple):
|
||||
if a is None:
|
||||
@@ -138,7 +135,7 @@ def interpolate(t, a, b, type): #@ReservedAssignment
|
||||
return tuple(interpolate(t, i, j, ty) for i, j, ty in zip(a, b, type))
|
||||
|
||||
# Deal with booleans, nones, etc.
|
||||
elif b is None or isinstance(b, bool):
|
||||
elif b is None or isinstance(b, (bool, basestring)):
|
||||
if t >= 1.0:
|
||||
return b
|
||||
else:
|
||||
|
||||
+171
-1
@@ -22,7 +22,7 @@
|
||||
# This file contains warpers that are used by ATL. They need to be defined
|
||||
# early, so Ren'Py knows about them when parsing other files.
|
||||
|
||||
python early hide:
|
||||
python early in _warper:
|
||||
|
||||
# pause is defined internally, but would look like:
|
||||
#
|
||||
@@ -51,3 +51,173 @@ python early hide:
|
||||
def ease(x):
|
||||
import math
|
||||
return .5 - math.cos(math.pi * x) / 2.0
|
||||
|
||||
# Modified easing equations based on Robert Penner (http://robertpenner.com/easing/)
|
||||
# License: http://robertpenner.com/easing_terms_of_use.html
|
||||
|
||||
# -in / -out surfix are inverted to much default warpers in ATL.
|
||||
|
||||
# quad
|
||||
@renpy.atl_warper
|
||||
def easeout_quad(t):
|
||||
return pow(t, 2)
|
||||
|
||||
@renpy.atl_warper
|
||||
def easein_quad(t):
|
||||
return 1 - easeout_quad(1 - t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_quad(t):
|
||||
if t < .5:
|
||||
return easeout_quad(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_quad((1 - t)* 2.0) / 2.0
|
||||
|
||||
|
||||
# cubic
|
||||
@renpy.atl_warper
|
||||
def easeout_cubic(t):
|
||||
return pow(t, 3)
|
||||
|
||||
@renpy.atl_warper
|
||||
def easein_cubic(t):
|
||||
return 1 - easeout_cubic(1 - t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_cubic(t):
|
||||
if t < .5:
|
||||
return easeout_cubic(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_cubic((1 - t)* 2.0) / 2.0
|
||||
|
||||
|
||||
# quart
|
||||
@renpy.atl_warper
|
||||
def easeout_quart(t):
|
||||
return pow(t, 4)
|
||||
|
||||
@renpy.atl_warper
|
||||
def easein_quart(t):
|
||||
return 1 - easeout_quart(1 - t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_quart(t):
|
||||
if t < .5:
|
||||
return easeout_quart(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_quart((1 - t)* 2.0) / 2.0
|
||||
|
||||
|
||||
# quint
|
||||
@renpy.atl_warper
|
||||
def easeout_quint(t):
|
||||
return pow(t, 5)
|
||||
|
||||
@renpy.atl_warper
|
||||
def easein_quint(t):
|
||||
return 1 - easeout_quint(1 - t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_quint(t):
|
||||
if t < .5:
|
||||
return easeout_quint(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_quint((1 - t)* 2.0) / 2.0
|
||||
|
||||
|
||||
# exponential
|
||||
@renpy.atl_warper
|
||||
def easeout_expo(t):
|
||||
return pow(2, 10 * (t - 1))
|
||||
|
||||
@renpy.atl_warper
|
||||
def easein_expo(t):
|
||||
return 1 - easeout_expo(1 - t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_expo(t):
|
||||
if t < .5:
|
||||
return easeout_expo(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_expo((1 - t)* 2.0) / 2.0
|
||||
|
||||
|
||||
# circular
|
||||
@renpy.atl_warper
|
||||
def easeout_circ(t):
|
||||
import math
|
||||
return 1 - math.sqrt(1 - t * t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def easein_circ(t):
|
||||
return 1 - easeout_circ(1- t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_circ(t):
|
||||
if t < .5:
|
||||
return easeout_circ(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_circ((1- t) * 2.0) / 2.0
|
||||
|
||||
|
||||
# back
|
||||
@renpy.atl_warper
|
||||
def easeout_back(t):
|
||||
s = 1.7015 # Overshoot. It ranges .0 (swing 0%) ~ 8.4435 (swing 100%).
|
||||
return t * t * ((s + 1) * t - s)
|
||||
|
||||
@renpy.atl_warper
|
||||
def easein_back(t):
|
||||
return 1 - easeout_back(1- t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_back(t):
|
||||
if t < .5:
|
||||
return easeout_back(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_back((1- t) * 2.0) / 2.0
|
||||
|
||||
|
||||
# elastic
|
||||
@renpy.atl_warper
|
||||
def easein_elastic(t):
|
||||
import math
|
||||
p = .3 # Period. It ranges 0.1 (spring many) ~ 1.0 (spring once).
|
||||
return 1 + pow(2, - 10 * t) * math.sin((t - p / 4.0) * (2.0 * math.pi) / p)
|
||||
|
||||
@renpy.atl_warper
|
||||
def easeout_elastic(t):
|
||||
return 1 - easein_elastic(1 - t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_elastic(t):
|
||||
if t < .5:
|
||||
return easeout_elastic(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_elastic((1- t) * 2.0) / 2.0
|
||||
|
||||
|
||||
# bounce
|
||||
@renpy.atl_warper
|
||||
def easein_bounce(t):
|
||||
p = 2.75 # Period. It's a fixed value. Don't change this.
|
||||
s = pow(p, 2)
|
||||
if t < (1.0 / p):
|
||||
return s * t * t
|
||||
elif t < (2.0 / p):
|
||||
return 1 + s * (pow(t - 1.5 / p, 2) - pow(- .5 / p, 2))
|
||||
elif t < (2.5 / p):
|
||||
return 1 + s * (pow(t - 2.25 / p, 2) - pow(- .25 / p, 2))
|
||||
else:
|
||||
return 1 + s * (pow(t - 2.625 / p, 2) - pow(- .125 / p, 2))
|
||||
|
||||
@renpy.atl_warper
|
||||
def easeout_bounce(t):
|
||||
return 1 - easein_bounce(1 - t)
|
||||
|
||||
@renpy.atl_warper
|
||||
def ease_bounce(t):
|
||||
if t < .5:
|
||||
return easeout_bounce(t * 2.0) / 2.0
|
||||
else:
|
||||
return 1 - easeout_bounce((1- t) * 2.0) / 2.0
|
||||
|
||||
@@ -53,6 +53,7 @@ init -1500:
|
||||
|
||||
style _console_input_text is _console_text:
|
||||
color "#fafafa"
|
||||
adjust_spacing False
|
||||
|
||||
style _console_history is _default:
|
||||
background "#00000000"
|
||||
|
||||
@@ -212,26 +212,6 @@ init -1700 python:
|
||||
config.predict_callbacks.append(_predict_screens)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Side Images
|
||||
|
||||
config.side_image_tag = None
|
||||
config.side_image_only_not_showing = False
|
||||
|
||||
def SideImage(prefix_tag="side"):
|
||||
"""
|
||||
:doc: side_image_function
|
||||
|
||||
Returns the side image associated with the currently speaking character,
|
||||
or a Null displayable if no such side image exists.
|
||||
"""
|
||||
|
||||
name = renpy.get_side_image(prefix_tag, image_tag=config.side_image_tag, not_showing=config.side_image_only_not_showing)
|
||||
if name is None:
|
||||
return Null()
|
||||
else:
|
||||
return ImageReference(name)
|
||||
|
||||
##########################################################################
|
||||
# Name-only say statements.
|
||||
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
# Copyright 2004-2015 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
init -1650 python:
|
||||
|
||||
##########################################################################
|
||||
# Side Images
|
||||
|
||||
# A tag to use. This can be used to force the side image to only be of the
|
||||
# main character.
|
||||
config.side_image_tag = None
|
||||
|
||||
# If True, the side image will only be shown if an image with the same tag
|
||||
# is not shown.
|
||||
config.side_image_only_not_showing = False
|
||||
|
||||
# The prefix to use on the side image.
|
||||
config.side_image_prefix_tag = 'side'
|
||||
|
||||
# A transform to use when the side image changes to that of a different
|
||||
# character.
|
||||
config.side_image_change_transform = None
|
||||
|
||||
# A transform to use when the side image changes to that of the same
|
||||
# character.
|
||||
config.side_image_same_transform = None
|
||||
|
||||
# The null to use.
|
||||
config.side_image_null = Null()
|
||||
|
||||
def _side_per_interact():
|
||||
"""
|
||||
Called once per interaction to update the side image.
|
||||
"""
|
||||
|
||||
global _side_image_raw
|
||||
global _side_image
|
||||
|
||||
old = _side_image_raw
|
||||
|
||||
new = renpy.get_side_image(config.side_image_prefix_tag, image_tag=config.side_image_tag, not_showing=config.side_image_only_not_showing)
|
||||
|
||||
if new is None:
|
||||
new = config.side_image_null
|
||||
else:
|
||||
new = ImageReference(new)
|
||||
|
||||
_side_image_raw = new
|
||||
|
||||
if config.skipping or renpy.game.after_rollback:
|
||||
tf = None
|
||||
elif isinstance(old, Null) and isinstance(new, Null):
|
||||
tf = None
|
||||
elif isinstance(old, Null) or isinstance(new, Null) or new.name[1] != old.name[1]:
|
||||
tf = config.side_image_change_transform
|
||||
else:
|
||||
tf = config.side_image_same_transform
|
||||
|
||||
if tf:
|
||||
_side_image = tf(old, new)
|
||||
else:
|
||||
_side_image = new
|
||||
|
||||
config.start_interact_callbacks.append(_side_per_interact)
|
||||
|
||||
def SideImage(prefix_tag=None):
|
||||
"""
|
||||
:doc: side_image_function
|
||||
:args: ()
|
||||
|
||||
Returns the side image associated with the currently speaking character,
|
||||
or a Null displayable if no such side image exists.
|
||||
"""
|
||||
|
||||
# Compatibility with older games.
|
||||
if (prefix_tag is not None) and (prefix_tag != config.side_image_prefix_tag):
|
||||
config.side_image_prefix_tag = prefix_tag
|
||||
_side_per_interact()
|
||||
|
||||
return _side_image
|
||||
|
||||
init 1650 python:
|
||||
|
||||
_side_image_old = config.side_image_null
|
||||
_side_image_raw = config.side_image_null
|
||||
_side_image = config.side_image_null
|
||||
|
||||
@@ -178,6 +178,32 @@ init -1500 python:
|
||||
else:
|
||||
return SetDict(persistent._character_volume, voice_tag, volume)
|
||||
|
||||
@renpy.pure
|
||||
class PlayCharacterVoice(Action):
|
||||
"""
|
||||
:doc: voice_action
|
||||
|
||||
This plays `sample` on the voice channel, as if said by a
|
||||
character with `voice_tag`.
|
||||
|
||||
`sample`
|
||||
The full path to a sound file. No voice-related handling
|
||||
of this file is done.
|
||||
"""
|
||||
|
||||
def __init__(self, voice_tag, sample):
|
||||
self.voice_tag = voice_tag
|
||||
self.sample = sample
|
||||
|
||||
def __call__(self):
|
||||
if self.voice_tag in persistent._voice_mute:
|
||||
return
|
||||
|
||||
volume = persistent._character_volume.get(self.voice_tag, 1.0)
|
||||
renpy.music.get_channel("voice").set_volume(volume)
|
||||
|
||||
renpy.sound.play(self.sample, channel="voice")
|
||||
|
||||
@renpy.pure
|
||||
class ToggleVoiceMute(Action, DictEquality):
|
||||
"""
|
||||
|
||||
+16
-1
@@ -149,7 +149,7 @@ transient_layers = [ 'transient' ]
|
||||
# overlays.
|
||||
overlay_layers = [ 'overlay' ]
|
||||
|
||||
# A list of layers that should be cleared whe we enter a
|
||||
# A list of layers that should be cleared when we enter a
|
||||
# new context.
|
||||
context_clear_layers = [ 'screens' ]
|
||||
|
||||
@@ -631,6 +631,21 @@ quit_on_mobile_background = False
|
||||
# Should Ren'Py pass the raw joystick (not controller) events.?
|
||||
pass_joystick_events = False
|
||||
|
||||
# A list of screens that should be shown when the overlay is enabled.
|
||||
overlay_screens = [ ]
|
||||
|
||||
# A map from tag to the default layer that tag should be displayed on.
|
||||
tag_layer = { }
|
||||
|
||||
# The default layer for tags not in in tag_layer.
|
||||
default_tag_layer = 'master'
|
||||
|
||||
# A map from tag to the default transform that's used for that tag.
|
||||
tag_transform = { }
|
||||
|
||||
# The width of lines logged with renpy.log.
|
||||
log_width = 78
|
||||
|
||||
del renpy
|
||||
del os
|
||||
|
||||
|
||||
@@ -389,6 +389,9 @@ _predict_set = set()
|
||||
# keyword arguments can be
|
||||
_predict_screen = dict()
|
||||
|
||||
# Should the default screens be shown?
|
||||
_overlay_screens = True
|
||||
|
||||
# If we're in a replay, the label of the start of the replay.
|
||||
_in_replay = None
|
||||
|
||||
|
||||
@@ -290,7 +290,16 @@ def transform_render(self, widtho, heighto, st, at):
|
||||
rxdx / inv_det)
|
||||
|
||||
rv.nearest = state.nearest
|
||||
rv.alpha = state.alpha
|
||||
|
||||
alpha = state.alpha
|
||||
|
||||
if alpha < 0.0:
|
||||
alpha = 0.0
|
||||
elif alpha > 1.0:
|
||||
alpha = 1.0
|
||||
|
||||
rv.alpha = alpha
|
||||
|
||||
rv.over = 1.0 - state.additive
|
||||
rv.clipping = clipping
|
||||
|
||||
|
||||
+56
-2
@@ -1495,6 +1495,52 @@ class Interface(object):
|
||||
self.safe_mode = get_safe_mode()
|
||||
renpy.safe_mode_checked = True
|
||||
|
||||
# A scale factor used to compensate for the system DPI.
|
||||
self.dpi_scale = self.setup_dpi_scaling()
|
||||
|
||||
renpy.display.log.write("DPI scale factor: %f", self.dpi_scale)
|
||||
|
||||
|
||||
def setup_dpi_scaling(self):
|
||||
|
||||
if "RENPY_HIGHDPI" in os.environ:
|
||||
return float(os.environ["RENPY_HIGHDPI"])
|
||||
|
||||
if not renpy.windows:
|
||||
return 1.0
|
||||
|
||||
try:
|
||||
import ctypes
|
||||
from ctypes import c_void_p, c_int
|
||||
|
||||
ctypes.windll.user32.SetProcessDPIAware()
|
||||
|
||||
GetDC = ctypes.windll.user32.GetDC
|
||||
GetDC.restype = c_void_p
|
||||
GetDC.argtypes = [ c_void_p ]
|
||||
|
||||
ReleaseDC = ctypes.windll.user32.ReleaseDC
|
||||
ReleaseDC.argtypes = [ c_void_p, c_void_p ]
|
||||
|
||||
GetDeviceCaps = ctypes.windll.gdi32.GetDeviceCaps
|
||||
GetDeviceCaps.restype = c_int
|
||||
GetDeviceCaps.argtypes = [ c_void_p, c_int ]
|
||||
|
||||
LOGPIXELSX = 88
|
||||
|
||||
dc = GetDC(None)
|
||||
rv = GetDeviceCaps(dc, LOGPIXELSX) / 96.0
|
||||
ReleaseDC(None, dc)
|
||||
|
||||
return rv
|
||||
|
||||
except:
|
||||
renpy.display.log.write("Could not determine DPI scale factor:")
|
||||
renpy.display.log.exception()
|
||||
return 1.0
|
||||
|
||||
|
||||
|
||||
def start(self):
|
||||
"""
|
||||
Starts the interface, by opening a window and setting the mode.
|
||||
@@ -2396,6 +2442,9 @@ class Interface(object):
|
||||
@param suppress_underlay: This suppresses the display of the underlay.
|
||||
"""
|
||||
|
||||
# Show default screens.
|
||||
renpy.display.screen.show_overlay_screens(suppress_overlay)
|
||||
|
||||
# Prepare screens, if need be.
|
||||
renpy.display.screen.prepare_screens()
|
||||
|
||||
@@ -2910,11 +2959,13 @@ class Interface(object):
|
||||
if ev.w == 1 and ev.h == 1:
|
||||
continue
|
||||
|
||||
size = (ev.w // self.dpi_scale, ev.h // self.dpi_scale)
|
||||
|
||||
if pygame.display.get_surface().get_size() != ev.size:
|
||||
self.set_mode((ev.w, ev.h))
|
||||
self.set_mode(size)
|
||||
|
||||
if not self.fullscreen:
|
||||
self.last_resize = ev.size
|
||||
self.last_resize = size
|
||||
|
||||
continue
|
||||
|
||||
@@ -2951,6 +3002,9 @@ class Interface(object):
|
||||
if ev.type == pygame.ACTIVEEVENT:
|
||||
|
||||
if ev.state & 1:
|
||||
if not ev.gain:
|
||||
renpy.display.focus.clear_focus()
|
||||
|
||||
self.mouse_focused = ev.gain
|
||||
|
||||
if ev.state & 2:
|
||||
|
||||
@@ -69,6 +69,15 @@ grab = None
|
||||
# The default focus for the current screen.
|
||||
default_focus = None
|
||||
|
||||
# The type of input that caused the focus to change last. One of
|
||||
# "keyboard" (for keyboard-like focus devices) or "mouse" (for mouse-like)
|
||||
# focus devices.)
|
||||
focus_type = "mouse"
|
||||
|
||||
# The same, but for the most recent input that might potentially cause
|
||||
# the focus to change.
|
||||
pending_focus_type = "mouse"
|
||||
|
||||
# Sets the currently focused widget.
|
||||
def set_focused(widget, arg, screen):
|
||||
global argument
|
||||
@@ -259,6 +268,9 @@ def change_focus(newfocus, default=False):
|
||||
if current is widget and (newfocus is None or newfocus.arg == argument):
|
||||
return rv
|
||||
|
||||
global focus_type
|
||||
focus_type = pending_focus_type
|
||||
|
||||
if current is not None:
|
||||
try:
|
||||
renpy.display.screen.push_current_screen(screen_of_focused)
|
||||
@@ -282,6 +294,13 @@ def change_focus(newfocus, default=False):
|
||||
|
||||
return rv
|
||||
|
||||
def clear_focus():
|
||||
"""
|
||||
Clears the focus when the window loses mouse focus.
|
||||
"""
|
||||
|
||||
change_focus(None)
|
||||
|
||||
# This handles mouse events, to see if they change the focus.
|
||||
def mouse_handler(ev, x, y, default=False):
|
||||
"""
|
||||
@@ -291,9 +310,14 @@ def mouse_handler(ev, x, y, default=False):
|
||||
If ev is not None, this function checks to see if it is a mouse event.
|
||||
"""
|
||||
|
||||
global pending_focus_type
|
||||
|
||||
if ev is not None:
|
||||
if ev.type not in (pygame.MOUSEMOTION, pygame.MOUSEBUTTONUP, pygame.MOUSEBUTTONDOWN):
|
||||
return
|
||||
else:
|
||||
pending_focus_type = "mouse"
|
||||
|
||||
|
||||
new_focus = renpy.display.render.focus_at_point(x, y)
|
||||
|
||||
@@ -397,6 +421,9 @@ def focus_nearest(from_x0, from_y0, from_x1, from_y1,
|
||||
condition,
|
||||
xmul, ymul, wmul, hmul):
|
||||
|
||||
global pending_focus_type
|
||||
pending_focus_type = "keyboard"
|
||||
|
||||
if not focus_list:
|
||||
return
|
||||
|
||||
@@ -472,6 +499,9 @@ def focus_nearest(from_x0, from_y0, from_x1, from_y1,
|
||||
|
||||
def focus_ordered(delta):
|
||||
|
||||
global pending_focus_type
|
||||
pending_focus_type = "keyboard"
|
||||
|
||||
placeless = None
|
||||
|
||||
candidates = [ ]
|
||||
|
||||
+48
-5
@@ -38,6 +38,40 @@ images = { }
|
||||
image_attributes = collections.defaultdict(list)
|
||||
|
||||
|
||||
def get_available_image_tags():
|
||||
"""
|
||||
:doc: image_func
|
||||
|
||||
Returns a list of image tags that have been defined.
|
||||
"""
|
||||
|
||||
return [ k for k, v in image_attributes.items() if v ]
|
||||
|
||||
def get_available_image_attributes(tag, attributes=()):
|
||||
"""
|
||||
:doc: image_func
|
||||
|
||||
Returns a list of tuples, with each tuple representing a possible
|
||||
combination of image attributes that can be associated with `tag`.
|
||||
If `attributes` is given, only images that contain all the attributes
|
||||
in that iterable are returned.
|
||||
"""
|
||||
|
||||
rv = [ ]
|
||||
|
||||
if tag not in image_attributes:
|
||||
return rv
|
||||
|
||||
for at in image_attributes[tag]:
|
||||
for a in attributes:
|
||||
if a not in at:
|
||||
break
|
||||
else:
|
||||
rv.append(at)
|
||||
|
||||
return rv
|
||||
|
||||
|
||||
def register_image(name, d):
|
||||
"""
|
||||
Registers the existence of an image with `name`, and that the image
|
||||
@@ -100,7 +134,7 @@ class ImageReference(renpy.display.core.Displayable):
|
||||
the image in an image statment.
|
||||
"""
|
||||
|
||||
nosave = [ 'target', 'param_target' ]
|
||||
nosave = [ 'target' ]
|
||||
target = None
|
||||
param_target = None
|
||||
|
||||
@@ -170,7 +204,15 @@ class ImageReference(renpy.display.core.Displayable):
|
||||
|
||||
try:
|
||||
self.target = target.parameterize(name, parameters)
|
||||
|
||||
if self.target is not target:
|
||||
|
||||
if self.param_target is not None:
|
||||
npt = self.target._get_parameterized()
|
||||
if isinstance(npt, renpy.display.motion.Transform):
|
||||
opt = self.param_target._get_parameterized()
|
||||
npt.take_state(opt)
|
||||
|
||||
self.param_target = self.target
|
||||
|
||||
except Exception, e:
|
||||
@@ -258,7 +300,7 @@ class DynamicImage(renpy.display.core.Displayable):
|
||||
performed at the start of each iteraction.
|
||||
"""
|
||||
|
||||
nosave = [ 'target', 'raw_target' ]
|
||||
nosave = [ 'raw_target' ]
|
||||
|
||||
# The target that this image currently resolves to.
|
||||
target = None
|
||||
@@ -327,7 +369,7 @@ class DynamicImage(renpy.display.core.Displayable):
|
||||
if not old_target:
|
||||
return True
|
||||
|
||||
if isinstance(old_target, renpy.display.motion.Transform):
|
||||
if not isinstance(old_target, renpy.display.motion.Transform):
|
||||
return True
|
||||
|
||||
if not isinstance(target, renpy.display.motion.Transform):
|
||||
@@ -469,6 +511,9 @@ class ShownImageInfo(renpy.object.Object):
|
||||
Predicts the scene statement being called on layer.
|
||||
"""
|
||||
|
||||
if layer is None:
|
||||
layer = 'master'
|
||||
|
||||
for l, t in self.attributes.keys():
|
||||
if l == layer:
|
||||
del self.attributes[l, t]
|
||||
@@ -530,8 +575,6 @@ class ShownImageInfo(renpy.object.Object):
|
||||
return self.choose_image(nametag, required, optional, name)
|
||||
|
||||
def choose_image(self, tag, required, optional, exception_name):
|
||||
"""
|
||||
"""
|
||||
|
||||
# The longest length of an image that matches.
|
||||
max_len = 0
|
||||
|
||||
@@ -86,7 +86,7 @@ class Solid(renpy.display.core.Displayable):
|
||||
class Frame(renpy.display.core.Displayable):
|
||||
"""
|
||||
:doc: disp_imagelike
|
||||
:args: (image, left, top, right=None, bottom=None, tile=False, **properties)
|
||||
:args: (image, left=0, top=0, right=None, bottom=None, tile=False, **properties)
|
||||
|
||||
A displayable that resizes an image to fill the available area,
|
||||
while preserving the width and height of its borders. is often
|
||||
@@ -134,7 +134,7 @@ class Frame(renpy.display.core.Displayable):
|
||||
self.top = self.yborder
|
||||
self.bottom = self.yborder
|
||||
|
||||
def __init__(self, image, left=None, top=None, right=None, bottom=None, xborder=None, yborder=None, bilinear=True, tile=False, **properties):
|
||||
def __init__(self, image, left=None, top=None, right=None, bottom=None, xborder=0, yborder=0, bilinear=True, tile=False, **properties):
|
||||
super(Frame, self).__init__(**properties)
|
||||
|
||||
self.image = renpy.easy.displayable(image)
|
||||
@@ -144,7 +144,7 @@ class Frame(renpy.display.core.Displayable):
|
||||
if left is None:
|
||||
left = xborder
|
||||
if top is None:
|
||||
top= yborder
|
||||
top = yborder
|
||||
|
||||
if right is None:
|
||||
right = left
|
||||
|
||||
+40
-21
@@ -593,13 +593,13 @@ class MultiBox(Container):
|
||||
else:
|
||||
adjust_times = False
|
||||
|
||||
xminimum = self.style.xminimum
|
||||
if xminimum is not None:
|
||||
width = max(width, scale(xminimum, width))
|
||||
minx = self.style.xminimum
|
||||
if minx is not None:
|
||||
width = max(width, scale(minx, width))
|
||||
|
||||
yminimum = self.style.yminimum
|
||||
if yminimum is not None:
|
||||
height = max(height, scale(yminimum, height))
|
||||
miny = self.style.yminimum
|
||||
if miny is not None:
|
||||
height = max(height, scale(miny, height))
|
||||
|
||||
if self.first:
|
||||
|
||||
@@ -695,9 +695,10 @@ class MultiBox(Container):
|
||||
spacings = [ first_spacing ] + [ spacing ] * (len(self.children) - 1)
|
||||
|
||||
box_wrap = self.style.box_wrap
|
||||
|
||||
xfill = self.style.xfill
|
||||
yfill = self.style.yfill
|
||||
xminimum = self.style.xminimum
|
||||
yminimum = self.style.yminimum
|
||||
|
||||
# The shared height and width of the current line. The line_height must
|
||||
# be 0 for a vertical box, and the line_width must be 0 for a horizontal
|
||||
@@ -719,6 +720,11 @@ class MultiBox(Container):
|
||||
maxx = 0
|
||||
maxy = 0
|
||||
|
||||
# The minimum size of x and y.
|
||||
minx = 0
|
||||
miny = 0
|
||||
|
||||
|
||||
def layout_line(line, xfill, yfill):
|
||||
"""
|
||||
Lays out a single line.
|
||||
@@ -762,17 +768,24 @@ class MultiBox(Container):
|
||||
x = 0
|
||||
y = 0
|
||||
|
||||
full_width = False
|
||||
full_height = False
|
||||
|
||||
|
||||
if layout == "horizontal":
|
||||
|
||||
full_height = yfill
|
||||
if yfill:
|
||||
miny = height
|
||||
else:
|
||||
miny = yminimum
|
||||
|
||||
line_height = 0
|
||||
line = [ ]
|
||||
remwidth = width
|
||||
|
||||
if xfill:
|
||||
target_width = width
|
||||
else:
|
||||
target_width = xminimum
|
||||
|
||||
for d, padding, cst, cat in zip(children, spacings, csts, cats):
|
||||
|
||||
if box_wrap:
|
||||
@@ -784,7 +797,7 @@ class MultiBox(Container):
|
||||
sw, sh = surf.get_size()
|
||||
|
||||
if box_wrap and remwidth - sw - padding <= 0 and line:
|
||||
maxx, maxy = layout_line(line, remwidth if xfill else 0, 0)
|
||||
maxx, maxy = layout_line(line, target_width - x, 0)
|
||||
|
||||
y += line_height
|
||||
x = 0
|
||||
@@ -798,17 +811,25 @@ class MultiBox(Container):
|
||||
x += sw + padding
|
||||
remwidth -= (sw + padding)
|
||||
|
||||
maxx, maxy = layout_line(line, remwidth if xfill else 0, 0)
|
||||
maxx, maxy = layout_line(line, target_width - x, 0)
|
||||
|
||||
|
||||
elif layout == "vertical":
|
||||
|
||||
full_width = xfill
|
||||
if xfill:
|
||||
minx = width
|
||||
else:
|
||||
minx = xminimum
|
||||
|
||||
line_width = 0
|
||||
line = [ ]
|
||||
remheight = height
|
||||
|
||||
if yfill:
|
||||
target_height = height
|
||||
else:
|
||||
target_height = yminimum
|
||||
|
||||
for d, padding, cst, cat in zip(children, spacings, csts, cats):
|
||||
|
||||
if box_wrap:
|
||||
@@ -820,7 +841,7 @@ class MultiBox(Container):
|
||||
sw, sh = surf.get_size()
|
||||
|
||||
if box_wrap and remheight - sh - padding <= 0:
|
||||
maxx, maxy = layout_line(line, 0, remheight if yfill else 0)
|
||||
maxx, maxy = layout_line(line, 0, target_height - y, 0)
|
||||
|
||||
x += line_width
|
||||
y = 0
|
||||
@@ -833,7 +854,7 @@ class MultiBox(Container):
|
||||
y += sh + padding
|
||||
remheight -= (sh + padding)
|
||||
|
||||
maxx, maxy = layout_line(line, 0, remheight if yfill else 0)
|
||||
maxx, maxy = layout_line(line, 0, target_height - y)
|
||||
|
||||
else:
|
||||
raise Exception("Unknown box layout: %r" % layout)
|
||||
@@ -841,10 +862,10 @@ class MultiBox(Container):
|
||||
# Back to the common for vertical and horizontal.
|
||||
|
||||
if not xfill:
|
||||
width = maxx
|
||||
width = max(xminimum, maxx)
|
||||
|
||||
if not yfill:
|
||||
height = maxy
|
||||
height = max(yminimum, maxy)
|
||||
|
||||
rv = renpy.display.render.Render(width, height)
|
||||
|
||||
@@ -852,10 +873,8 @@ class MultiBox(Container):
|
||||
placements.reverse()
|
||||
|
||||
for child, x, y, w, h, surf in placements:
|
||||
if full_width:
|
||||
w = width
|
||||
if full_height:
|
||||
h = height
|
||||
w = max(minx, w)
|
||||
h = max(miny, h)
|
||||
|
||||
offset = child.place(rv, x, y, w, h, surf)
|
||||
offsets.append(offset)
|
||||
|
||||
+51
-10
@@ -875,24 +875,39 @@ def get_screen(name, layer="screens"):
|
||||
"""
|
||||
:doc: screens
|
||||
|
||||
Returns the ScreenDisplayable with the given `tag`, on
|
||||
`layer`. If no displayable with the tag is not found, it is
|
||||
interpreted as screen name. If it's still not found, None is returned.
|
||||
"""
|
||||
Returns the ScreenDisplayable with the given `name` on layer. `name`
|
||||
is first interpreted as a tag name, and then a screen name. If the
|
||||
screen is not showing, returns None.
|
||||
|
||||
This can also take a list of names, in which case the first screen
|
||||
that is showing is returned.
|
||||
|
||||
This function can be used to check if a screen is showing, using code
|
||||
like::
|
||||
|
||||
if renpy.get_screen("say"):
|
||||
text "The say screen is showing."
|
||||
else:
|
||||
text "The say screen is hidden."
|
||||
|
||||
"""
|
||||
|
||||
if isinstance(name, basestring):
|
||||
name = tuple(name.split())
|
||||
|
||||
tag = name[0]
|
||||
name = (name, )
|
||||
|
||||
sl = renpy.exports.scene_lists()
|
||||
|
||||
sd = sl.get_displayable_by_tag(layer, tag)
|
||||
for tag in name:
|
||||
|
||||
sd = sl.get_displayable_by_tag(layer, tag)
|
||||
if sd is not None:
|
||||
return sd
|
||||
|
||||
if sd is None:
|
||||
sd = sl.get_displayable_by_name(layer, name)
|
||||
if sd is not None:
|
||||
return sd
|
||||
|
||||
return sd
|
||||
return None
|
||||
|
||||
|
||||
def has_screen(name):
|
||||
@@ -1168,3 +1183,29 @@ def before_restart():
|
||||
if isinstance(i, ScreenDisplayable):
|
||||
i.restarting = True
|
||||
|
||||
|
||||
def show_overlay_screens(suppress_overlay):
|
||||
"""
|
||||
Called from interact to show or hide the overlay screens.
|
||||
"""
|
||||
|
||||
show = not suppress_overlay
|
||||
|
||||
if renpy.store._overlay_screens is None:
|
||||
show = show
|
||||
if renpy.store._overlay_screens is True:
|
||||
show = True
|
||||
else:
|
||||
show = False
|
||||
|
||||
if show:
|
||||
|
||||
for i in renpy.config.overlay_screens:
|
||||
if get_screen(i) is None:
|
||||
show_screen(i)
|
||||
|
||||
else:
|
||||
|
||||
for i in renpy.config.overlay_screens:
|
||||
if get_screen(i) is not None:
|
||||
hide_screen(i)
|
||||
|
||||
+162
-11
@@ -60,7 +60,10 @@ from renpy.display.screen import get_widget_properties
|
||||
|
||||
from renpy.display.focus import focus_coordinates
|
||||
from renpy.display.predict import screen as predict_screen
|
||||
|
||||
from renpy.display.image import image_exists, image_exists as has_image
|
||||
from renpy.display.image import get_available_image_tags, get_available_image_attributes
|
||||
|
||||
from renpy.display.im import load_surface, load_image
|
||||
|
||||
from renpy.curry import curry, partial
|
||||
@@ -148,6 +151,7 @@ def public_api():
|
||||
map_event, queue_event, clear_keymap_cache
|
||||
const, pure, not_const
|
||||
image_exists, has_image
|
||||
get_available_image_tags, get_available_image_attributes
|
||||
load_image, load_surface
|
||||
profile_memory, diff_memory, profile_rollback
|
||||
TEXT_TAG
|
||||
@@ -375,6 +379,61 @@ def copy_images(old, new):
|
||||
renpy.display.image.register_image(new + k[lenold:], v)
|
||||
|
||||
|
||||
def default_layer(layer, tag, expression=False):
|
||||
"""
|
||||
:undocumented:
|
||||
|
||||
If layer is not None, returns it. Otherwise, interprets `tag` as a name
|
||||
or tag, then looks up what the default layer for that tag is, and returns
|
||||
the result.
|
||||
"""
|
||||
|
||||
if layer is not None:
|
||||
return layer
|
||||
|
||||
if expression:
|
||||
return 'master'
|
||||
|
||||
if isinstance(tag, tuple):
|
||||
tag = tag[0]
|
||||
elif " " in tag:
|
||||
tag = tag.split()[0]
|
||||
|
||||
return renpy.config.tag_layer.get(tag, renpy.config.default_tag_layer)
|
||||
|
||||
|
||||
def can_show(name, layer=None, tag=None):
|
||||
"""
|
||||
:doc: image_func
|
||||
|
||||
Determines if `name` can be used to show an image. This interprets `name`
|
||||
as a tag and attributes. This is combined with the attributes of the
|
||||
currently-showing image with `tag` on `layer` to try to determine a unique image
|
||||
to show. If a unique image can be show, returns the name of that image as
|
||||
a tuple. Otherwise, returns None.
|
||||
|
||||
`tag`
|
||||
The image tag to get attributes from. If not given, defaults to the first
|
||||
component of `name`.
|
||||
|
||||
`layer`
|
||||
The layer to check. If None, uses the default layer for `tag`.
|
||||
"""
|
||||
|
||||
if not isinstance(name, tuple):
|
||||
name = tuple(name.split())
|
||||
|
||||
if tag is None:
|
||||
tag = name[0]
|
||||
|
||||
layer = default_layer(layer, None)
|
||||
|
||||
try:
|
||||
return renpy.game.context().images.apply_attributes(layer, tag, name)
|
||||
except:
|
||||
return None
|
||||
|
||||
|
||||
def showing(name, layer='master'):
|
||||
"""
|
||||
:doc: image_func
|
||||
@@ -386,11 +445,17 @@ def showing(name, layer='master'):
|
||||
May be a string giving the image name or a tuple giving each
|
||||
component of the image name. It may also be a string giving
|
||||
only the image tag.
|
||||
|
||||
|
||||
`layer`
|
||||
The layer to check. If None, uses the default layer for `tag`.
|
||||
"""
|
||||
|
||||
if not isinstance(name, tuple):
|
||||
name = tuple(name.split())
|
||||
|
||||
layer = default_layer(layer, name)
|
||||
|
||||
return renpy.game.context().images.showing(layer, name)
|
||||
|
||||
def get_showing_tags(layer='master'):
|
||||
@@ -402,7 +467,7 @@ def get_showing_tags(layer='master'):
|
||||
|
||||
return renpy.game.context().images.get_showing_tags(layer)
|
||||
|
||||
def predict_show(name, layer='master', what=None, tag=None, at_list=[ ]):
|
||||
def predict_show(name, layer=None, what=None, tag=None, at_list=[ ]):
|
||||
"""
|
||||
:undocumented:
|
||||
|
||||
@@ -412,7 +477,7 @@ def predict_show(name, layer='master', what=None, tag=None, at_list=[ ]):
|
||||
The name of the image to show, a string.
|
||||
|
||||
`layer`
|
||||
The layer the image is being show non.
|
||||
The layer the image is being shown on.
|
||||
|
||||
`what`
|
||||
What is being show - if given, overrides `name`.
|
||||
@@ -426,6 +491,8 @@ def predict_show(name, layer='master', what=None, tag=None, at_list=[ ]):
|
||||
|
||||
key = tag or name[0]
|
||||
|
||||
layer = default_layer(key, layer)
|
||||
|
||||
if what is None:
|
||||
what = name
|
||||
elif isinstance(what, basestring):
|
||||
@@ -457,7 +524,7 @@ def predict_show(name, layer='master', what=None, tag=None, at_list=[ ]):
|
||||
renpy.display.predict.displayable(img)
|
||||
|
||||
|
||||
def show(name, at_list=[ ], layer='master', what=None, zorder=None, tag=None, behind=[ ], atl=None, transient=False, munge_name=True):
|
||||
def show(name, at_list=[ ], layer=None, what=None, zorder=None, tag=None, behind=[ ], atl=None, transient=False, munge_name=True):
|
||||
"""
|
||||
:doc: se_images
|
||||
:args: (name, at_list=[ ], layer='master', what=None, zorder=0, tag=None, behind=[ ])
|
||||
@@ -474,7 +541,8 @@ def show(name, at_list=[ ], layer='master', what=None, zorder=None, tag=None, be
|
||||
|
||||
`layer`
|
||||
A string, giving the name of the layer on which the image will be shown.
|
||||
The equivalent of the ``onlayer`` property.
|
||||
The equivalent of the ``onlayer`` property. If None, uses the default
|
||||
layer associated with the tag.
|
||||
|
||||
`what`
|
||||
If not None, this is a displayable that will be shown in lieu of
|
||||
@@ -509,10 +577,20 @@ def show(name, at_list=[ ], layer='master', what=None, zorder=None, tag=None, be
|
||||
sls = scene_lists()
|
||||
key = tag or name[0]
|
||||
|
||||
layer = default_layer(layer, key)
|
||||
|
||||
if renpy.config.sticky_positions:
|
||||
if not at_list and key in sls.at_list[layer]:
|
||||
at_list = sls.at_list[layer][key]
|
||||
|
||||
if not at_list:
|
||||
tt = renpy.config.tag_transform.get(key, None)
|
||||
if tt is not None:
|
||||
if not isinstance(tt, list):
|
||||
at_list = [ tt ]
|
||||
else:
|
||||
at_list = list(tt)
|
||||
|
||||
if what is None:
|
||||
what = name
|
||||
elif isinstance(what, basestring):
|
||||
@@ -566,7 +644,7 @@ def show(name, at_list=[ ], layer='master', what=None, zorder=None, tag=None, be
|
||||
sls.add(layer, img, key, zorder, behind, at_list=at_list, name=name, atl=atl, default_transform=default_transform, transient=transient)
|
||||
|
||||
|
||||
def hide(name, layer='master'):
|
||||
def hide(name, layer=None):
|
||||
"""
|
||||
:doc: se_images
|
||||
|
||||
@@ -577,7 +655,8 @@ def hide(name, layer='master'):
|
||||
any image with the tag is hidden (the precise name does not matter).
|
||||
|
||||
`layer`
|
||||
The layer on which this function operates.
|
||||
The layer on which this function operates. If None, uses the default
|
||||
layer associated with the tag.
|
||||
"""
|
||||
|
||||
if renpy.game.context().init_phase:
|
||||
@@ -588,6 +667,9 @@ def hide(name, layer='master'):
|
||||
|
||||
sls = scene_lists()
|
||||
key = name[0]
|
||||
|
||||
layer = default_layer(layer, key)
|
||||
|
||||
sls.remove(layer, key)
|
||||
|
||||
if renpy.config.missing_hide:
|
||||
@@ -612,6 +694,9 @@ def scene(layer='master'):
|
||||
$ renpy.show("bg beach")
|
||||
"""
|
||||
|
||||
if layer is None:
|
||||
layer = 'master'
|
||||
|
||||
if renpy.game.context().init_phase:
|
||||
raise Exception("Scene may not run while in init phase.")
|
||||
|
||||
@@ -1684,7 +1769,7 @@ def log(msg):
|
||||
:doc: debug
|
||||
|
||||
If :var:`config.log` is not set, this does nothing. Otherwise, it opens
|
||||
the logfile (if not already open), formats the message to 70
|
||||
the logfile (if not already open), formats the message to :var:`config.log_width`
|
||||
columns, and prints it to the logfile.
|
||||
"""
|
||||
|
||||
@@ -1707,7 +1792,7 @@ def log(msg):
|
||||
|
||||
import textwrap
|
||||
|
||||
print >>logfile, textwrap.fill(msg).encode("utf-8")
|
||||
print >>logfile, textwrap.fill(msg, renpy.config.log_width).encode("utf-8")
|
||||
logfile.flush()
|
||||
|
||||
except:
|
||||
@@ -1862,19 +1947,22 @@ def image_size(im):
|
||||
return surf.get_size()
|
||||
|
||||
|
||||
def get_at_list(name, layer='master'):
|
||||
def get_at_list(name, layer=None):
|
||||
"""
|
||||
:doc: se_images
|
||||
|
||||
Returns the list of transforms being applied to the image with tag `name`
|
||||
on `layer`. Returns an empty list if no transofrms are being applied, or
|
||||
None if the image is not shown.
|
||||
|
||||
If `layer` is None, uses the default layer for the given tag.
|
||||
"""
|
||||
|
||||
if isinstance(name, basestring):
|
||||
name = tuple(name.split())
|
||||
|
||||
tag = name[0]
|
||||
layer = default_layer(layer, tag)
|
||||
|
||||
return renpy.game.context().scene_lists.at_list[layer].get(tag, None)
|
||||
|
||||
@@ -2212,9 +2300,13 @@ def get_image_bounds(tag, width=None, height=None, layer='master'):
|
||||
`width`, `height`
|
||||
The width and height of the area that contains the image. If None,
|
||||
defaults the width and height of the screen, respectively.
|
||||
|
||||
`layer`
|
||||
If None, uses the default layer for `tag`.
|
||||
"""
|
||||
|
||||
tag = tag.split()[0]
|
||||
layer = default_layer(layer, tag)
|
||||
|
||||
if width is None:
|
||||
width = renpy.config.screen_width
|
||||
@@ -2577,19 +2669,25 @@ def get_side_image(prefix_tag, image_tag=None, not_showing=True, layer='master')
|
||||
|
||||
If not_showing is True, this only returns a side image if the image the
|
||||
attributes are taken from is not on the screen.
|
||||
|
||||
If `layer` is None, uses the default layer for the currently showing
|
||||
tag.
|
||||
"""
|
||||
|
||||
images = renpy.game.context().images
|
||||
|
||||
if image_tag is not None:
|
||||
attrs = (image_tag,) + images.get_attributes(layer, image_tag)
|
||||
image_layer = default_layer(layer, image_tag)
|
||||
attrs = (image_tag,) + images.get_attributes(image_layer, image_tag)
|
||||
else:
|
||||
attrs = renpy.store._side_image_attributes
|
||||
|
||||
if not attrs:
|
||||
return None
|
||||
|
||||
if not_showing and images.showing(layer, (attrs[0], )):
|
||||
attr_layer = default_layer(layer, attrs)
|
||||
|
||||
if not_showing and images.showing(attr_layer, (attrs[0], )):
|
||||
return None
|
||||
|
||||
required = set()
|
||||
@@ -2965,3 +3063,56 @@ def clear_line_log():
|
||||
|
||||
renpy.game.context().line_log = [ ]
|
||||
|
||||
def add_layer(layer, above=None, below=None, menu_clear=True):
|
||||
"""
|
||||
:doc: other
|
||||
|
||||
Adds a new layer to the screen. If the layer already exists, this
|
||||
function does nothing.
|
||||
|
||||
One of `behind` or `above` must be given.
|
||||
|
||||
`layer`
|
||||
A string giving the name of the new layer to add.
|
||||
|
||||
`above`
|
||||
If not None, a string giving the name of a layer the new layer will
|
||||
be placed above.
|
||||
|
||||
`below`
|
||||
If not None, a string giving the name of a layer the new layer will
|
||||
be placed below.
|
||||
|
||||
`menu_clear`
|
||||
If true, this layer will be cleared when entering the game menu
|
||||
context, and restored when leaving the
|
||||
"""
|
||||
|
||||
layers = renpy.config.layers
|
||||
|
||||
if layer in renpy.config.layers:
|
||||
return
|
||||
|
||||
if (above is not None) and (below is not None):
|
||||
raise Exception("The above and below arguments to renpy.add_layer are mutually exclusive.")
|
||||
|
||||
elif above is not None:
|
||||
try:
|
||||
index = layers.index(above) + 1
|
||||
except ValueError:
|
||||
raise Exception("Layer '%s' does not exist." % above)
|
||||
|
||||
elif below is not None:
|
||||
try:
|
||||
index = layers.index(below)
|
||||
except ValueError:
|
||||
raise Exception("Layer '%s' does not exist." % below)
|
||||
|
||||
else:
|
||||
raise Exception("The renpy.add_layer function requires either the above or below argument.")
|
||||
|
||||
layers.insert(index, layer)
|
||||
|
||||
if menu_clear:
|
||||
renpy.config.menu_clear_layers.append(layer) # @UndefinedVariable
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ cdef class GLDraw:
|
||||
cdef bint allow_fixed
|
||||
cdef tuple default_clip
|
||||
cdef bint did_render_to_texture
|
||||
cdef float dpi_scale
|
||||
|
||||
cdef public tuple clip_rtt_box
|
||||
|
||||
|
||||
+44
-15
@@ -71,8 +71,6 @@ PIXELLATE = renpy.display.render.PIXELLATE
|
||||
cdef object IDENTITY
|
||||
IDENTITY = renpy.display.render.IDENTITY
|
||||
|
||||
FAKE_HIGHDPI = int(os.environ.get("RENPY_FAKE_HIGHDPI", "1"))
|
||||
|
||||
# Should we try to vsync?
|
||||
vsync = True
|
||||
|
||||
@@ -152,6 +150,9 @@ cdef class GLDraw:
|
||||
# Did we do a render_to_texture?
|
||||
self.did_render_to_texture = False
|
||||
|
||||
# The DPI scale factor.
|
||||
self.dpi_scale = renpy.display.interface.dpi_scale
|
||||
|
||||
|
||||
def set_mode(self, virtual_size, physical_size, fullscreen):
|
||||
"""
|
||||
@@ -203,12 +204,26 @@ cdef class GLDraw:
|
||||
|
||||
virtual_ar = 1.0 * vwidth / vheight
|
||||
|
||||
pwidth *= self.dpi_scale
|
||||
pheight *= self.dpi_scale
|
||||
|
||||
pwidth = max(vwidth / 2, pwidth)
|
||||
pheight = max(vheight / 2, pheight)
|
||||
|
||||
window_args = { }
|
||||
|
||||
if not renpy.mobile:
|
||||
pwidth = min(self.display_info.current_w - 102, pwidth)
|
||||
pheight = min(self.display_info.current_h - 102, pheight)
|
||||
info = renpy.display.get_info()
|
||||
|
||||
visible_w = info.current_w - 102
|
||||
visible_h = info.current_h - 102
|
||||
|
||||
if renpy.windows:
|
||||
visible_w *= self.dpi_scale
|
||||
visible_h *= self.dpi_scale
|
||||
|
||||
pwidth = min(visible_w, pwidth)
|
||||
pheight = min(visible_h, pheight)
|
||||
|
||||
# The first time through.
|
||||
if not self.did_init:
|
||||
@@ -220,6 +235,14 @@ cdef class GLDraw:
|
||||
pwidth = max(pwidth, 256)
|
||||
pheight = max(pheight, 256)
|
||||
|
||||
# If we don't set the place manually when dpi_scale is not 1.0,
|
||||
# SDL2 can place the window titlebar off the screen.
|
||||
if renpy.windows and (self.dpi_scale != 1.0):
|
||||
window_args["pos"] = (
|
||||
max((visible_w - pwidth) // 2, 0),
|
||||
max((visible_h - pheight) // 2, 10),
|
||||
)
|
||||
|
||||
# Handle swap control.
|
||||
vsync = int(os.environ.get("RENPY_GL_VSYNC", "1"))
|
||||
|
||||
@@ -249,7 +272,10 @@ cdef class GLDraw:
|
||||
pheight = 0
|
||||
|
||||
else:
|
||||
opengl = pygame.OPENGL | pygame.WINDOW_ALLOW_HIGHDPI
|
||||
opengl = pygame.OPENGL
|
||||
|
||||
if self.dpi_scale == 1.0:
|
||||
opengl |= pygame.WINDOW_ALLOW_HIGHDPI
|
||||
|
||||
if renpy.config.gl_resize:
|
||||
resizable = pygame.RESIZABLE
|
||||
@@ -273,8 +299,8 @@ cdef class GLDraw:
|
||||
|
||||
if self.window is None:
|
||||
try:
|
||||
renpy.display.log.write("Windowed mode.")
|
||||
self.window = pygame.display.set_mode((pwidth * FAKE_HIGHDPI, pheight * FAKE_HIGHDPI), resizable | opengl | pygame.DOUBLEBUF)
|
||||
renpy.display.log.write("Windowed mode.")
|
||||
self.window = pygame.display.set_mode((pwidth, pheight), resizable | opengl | pygame.DOUBLEBUF, **window_args)
|
||||
|
||||
except pygame.error, e:
|
||||
renpy.display.log.write("Could not get pygame screen: %r", e)
|
||||
@@ -295,9 +321,6 @@ cdef class GLDraw:
|
||||
# Get the size of the created screen.
|
||||
pwidth, pheight = self.window.get_size()
|
||||
|
||||
pwidth /= FAKE_HIGHDPI
|
||||
pheight /= FAKE_HIGHDPI
|
||||
|
||||
self.physical_size = (pwidth, pheight)
|
||||
self.drawable_size = pygame.display.get_drawable_size()
|
||||
|
||||
@@ -701,7 +724,10 @@ cdef class GLDraw:
|
||||
Draws the screen.
|
||||
"""
|
||||
|
||||
reverse = self.virt_to_draw
|
||||
if renpy.config.use_drawable_resolution:
|
||||
reverse = self.virt_to_draw
|
||||
else:
|
||||
reverse = IDENTITY
|
||||
|
||||
surftree.is_opaque()
|
||||
|
||||
@@ -1110,14 +1136,12 @@ cdef class GLDraw:
|
||||
|
||||
return rv
|
||||
|
||||
|
||||
def translate_point(self, x, y):
|
||||
"""
|
||||
Translates (x, y) from physical to virtual coordinates.
|
||||
"""
|
||||
|
||||
x /= FAKE_HIGHDPI
|
||||
y /= FAKE_HIGHDPI
|
||||
|
||||
# Screen sizes.
|
||||
pw, ph = self.physical_size
|
||||
vw, vh = self.virtual_size
|
||||
@@ -1284,7 +1308,12 @@ cdef class GLDraw:
|
||||
pass
|
||||
|
||||
def get_physical_size(self):
|
||||
return self.physical_size
|
||||
x, y = self.physical_size
|
||||
|
||||
x = int(x / self.dpi_scale)
|
||||
y = int(y / self.dpi_scale)
|
||||
|
||||
return (x, y)
|
||||
|
||||
|
||||
class Rtt(object):
|
||||
|
||||
+5
-3
@@ -278,13 +278,15 @@ def check_show(node, precise):
|
||||
|
||||
name, expression, tag, at_list, layer, _zorder, _behind = imspec(node.imspec)
|
||||
|
||||
layer = renpy.exports.default_layer(layer, tag or name)
|
||||
|
||||
if layer not in renpy.config.layers and layer not in renpy.config.top_layers:
|
||||
report("Uses layer '%s', which is not in config.layers.", layer)
|
||||
|
||||
image_exists(name, expression, tag, precise=precise)
|
||||
|
||||
for i in at_list:
|
||||
try_eval("the at list of a scene or show statment", i, "Perhaps you forgot to declare, or misspelled, a position?")
|
||||
try_eval("the at list of a scene or show statment", i, "Perhaps you forgot to define or misspelled a transform.")
|
||||
|
||||
|
||||
def precheck_show(node):
|
||||
@@ -304,14 +306,14 @@ def check_hide(node):
|
||||
|
||||
tag = tag or name[0]
|
||||
|
||||
layer = renpy.exports.default_layer(layer, tag)
|
||||
|
||||
if layer not in renpy.config.layers and layer not in renpy.config.top_layers:
|
||||
report("Uses layer '%s', which is not in config.layers.", layer)
|
||||
|
||||
if tag not in image_prefixes:
|
||||
report("The image tag '%s' is not the prefix of a declared image, nor was it used in a show statement before this hide statement.", tag)
|
||||
|
||||
# for i in at_list:
|
||||
# try_eval(node, "at list of hide statment", i)
|
||||
|
||||
def check_with(node):
|
||||
try_eval("a with statement or clause", node.expr, "Perhaps you forgot to declare, or misspelled, a transition?")
|
||||
|
||||
+6
-1
@@ -328,8 +328,13 @@ def main():
|
||||
# If recompiling everything, remove orphan .rpyc files.
|
||||
# Otherwise, will fail in case orphan .rpyc have same
|
||||
# labels as in other scripts (usually happens on script rename).
|
||||
if renpy.game.args.command == 'compile':
|
||||
if (renpy.game.args.command == 'compile') and not (renpy.game.args.keep_orphan_rpyc): # @UndefinedVariable
|
||||
|
||||
for (fn, dir) in renpy.game.script.script_files:
|
||||
|
||||
if dir is None:
|
||||
continue
|
||||
|
||||
if not os.path.isfile(os.path.join(dir, fn+".rpy")):
|
||||
try:
|
||||
name = os.path.join(dir, fn+".rpyc")
|
||||
|
||||
@@ -1165,11 +1165,6 @@ def parse_image_specifier(l):
|
||||
|
||||
break
|
||||
|
||||
if layer is None:
|
||||
layer = 'master'
|
||||
|
||||
|
||||
|
||||
return image_name, expression, tag, at_list, layer, zorder, behind
|
||||
|
||||
def parse_with(l, node):
|
||||
|
||||
+1
-3
@@ -841,13 +841,11 @@ class Layout(object):
|
||||
|
||||
def fill_empty_line():
|
||||
for i in line:
|
||||
if isinstance(i, (TextSegment, SpaceSegment, DisplayableSegment)):
|
||||
if isinstance(i[0], (TextSegment, SpaceSegment, DisplayableSegment)):
|
||||
return
|
||||
|
||||
line.extend(tss[-1].subsegment(u" "))
|
||||
|
||||
|
||||
|
||||
for type, text in tokens: #@ReservedAssignment
|
||||
|
||||
if type == PARAGRAPH:
|
||||
|
||||
@@ -331,3 +331,18 @@ def write_pure_const():
|
||||
write_set(f, constants)
|
||||
|
||||
|
||||
def write_easings(ns):
|
||||
|
||||
with open("source/inc/easings", "w") as f:
|
||||
f.write(".. csv-table::\n")
|
||||
f.write(' :header: "Ren\'Py Name", "easings.net Name"\n')
|
||||
f.write('\n')
|
||||
|
||||
for name in sorted(dir(ns)):
|
||||
if not name.startswith("ease"):
|
||||
continue
|
||||
if not "_" in name:
|
||||
continue
|
||||
|
||||
stdname = name.replace("ease_", "easeInOut_").replace("easein_", "easeOut_").replace("easeout_", "easeIn_")
|
||||
f.write(' "{}", "{}"\n'.format(name, stdname))
|
||||
|
||||
@@ -25,5 +25,7 @@ init 1000000 python:
|
||||
|
||||
doc.write_pure_const()
|
||||
|
||||
doc.write_easings(_warper)
|
||||
|
||||
raise SystemExit
|
||||
|
||||
|
||||
@@ -67,6 +67,11 @@ due to the Android software and hardware are:
|
||||
* Ren'Py cannot change the device volume. However, the android volume
|
||||
buttons work normally.
|
||||
|
||||
* Ren'Py can't handle transparency in buttons and imagemaps.
|
||||
(This is due to performance problems on some devices with the
|
||||
display modes needed to support deciding which pixels are
|
||||
transparent.)
|
||||
|
||||
In addition, there are a few changes that may be necessary due to
|
||||
human factors:
|
||||
|
||||
|
||||
+12
-2
@@ -536,14 +536,17 @@ The functions have the same signature as those used with :func:`Transform`:
|
||||
repeat
|
||||
|
||||
|
||||
.. _warpers:
|
||||
|
||||
Warpers
|
||||
=======
|
||||
|
||||
A warper is a function that can change the amount of time an interpolation
|
||||
statement considers to have elapsed. The following warpers are defined by
|
||||
default. They are defined as functions from t to t', where t and t' are
|
||||
floating point numbers between 0.0 and 1.0. (If the statement has 0 duration,
|
||||
than t is 1.0 when it runs.)
|
||||
floating point numbers, with t ranging from 0.0 to 1.0 over the given
|
||||
amount of time. (If the statement has 0 duration, then t is 1.0 when it runs.)
|
||||
t' should start at 0.0 and end at 1.0, but can be greater or less.
|
||||
|
||||
``pause``
|
||||
Pause, then jump to the new value. If t == 1.0, t = 1.0. Otherwise, t'
|
||||
@@ -562,6 +565,13 @@ than t is 1.0 when it runs.)
|
||||
``easeout``
|
||||
Start slow, then speed up. t' = 1.0 - math.cos(t * math.pi / 2.0)
|
||||
|
||||
In addition, most of Robert Penner's easing functions are supported. To
|
||||
make the names match those above, the functions have been renamed
|
||||
somewhat. Graphs of these standard functions can be found at
|
||||
http://www.easings.net/.
|
||||
|
||||
.. include:: inc/easings
|
||||
|
||||
New warpers can be defined using the renpy.atl_warper decorator, in a python
|
||||
early block. It should be placed in a file that is parsed before any file
|
||||
that uses the warper. The code looks like:
|
||||
|
||||
@@ -2,6 +2,76 @@
|
||||
Full Changelog
|
||||
==============
|
||||
|
||||
Ren'Py 6.99.8
|
||||
=============
|
||||
|
||||
Tags, Layers, and Transforms
|
||||
----------------------------
|
||||
|
||||
The new :var:`config.tag_layer` variable makes it possible to specify the
|
||||
default layer used by an image on a per image tag basis. This makes it
|
||||
possible to place an image on its own layer without having to use onlayer.
|
||||
The new :var:`config.default_tag_layer` variable specifies the default layer
|
||||
for unknown tags.
|
||||
|
||||
The new :func:`renpy.add_layer` function provides as way to add a new
|
||||
layer above or below the existing layers, if and only if the layer
|
||||
does not already exist.
|
||||
|
||||
The new :var:`config.tag_transform` variable makes it possible to specify a
|
||||
default transform (or list of transforms) to use when a transform is not
|
||||
provided as part of a show or scene statement.
|
||||
|
||||
Easing Functions
|
||||
----------------
|
||||
|
||||
Thanks to Nyaatrap, Ren'Py now supports Robert Penner's easing functions
|
||||
in ATL. These functions speed up and slow down interpolations (and in some
|
||||
cases, can cause interpolations to overshoot their targets), in order to
|
||||
provide more pleasing and natural motion.
|
||||
|
||||
The new easing functions are documented int the :ref:`warpers` section.
|
||||
|
||||
Side Images
|
||||
-----------
|
||||
|
||||
New-style side image functionality (using images with the side tag) has been
|
||||
overhauled. It's now possible to apply an ATL transform, and hence a t
|
||||
ransition, whenever the side image changes. Different transforms can be used
|
||||
in the case where the character changes and the case where it stays the same.
|
||||
|
||||
See the :ref:`side-images` section for complete documentation.
|
||||
|
||||
Other
|
||||
-----
|
||||
|
||||
Fixed a major bug where Ren'Py would put an extra space at the end of each
|
||||
text block. This could change the layout of text (and hence other portions of
|
||||
the interface.) The fix reverts the change that added the space, causing it
|
||||
to be smaller than in 6.99.7 (but the same size as 6.99.6 and before.)
|
||||
|
||||
Ren'Py now supports HighDPI ("retina") displays on the Windows platform,
|
||||
displaying text at the native screen resolution.
|
||||
|
||||
The new :var:`config.overlay_screens` variable takes a list of screens
|
||||
that are displayed whenever a pre-screens overlay would be displayed,
|
||||
and hidden otherwise. This makes it easy to have a screen as a permanent
|
||||
part of the in-game interface, even if the game can be entered from
|
||||
multiple places (like a Replay).
|
||||
|
||||
Ren'Py now clears focus (causing unhover events to trigger) when the mouse
|
||||
leaves the game window.
|
||||
|
||||
The hbox and vbox displayables now support the :propref:`xminimum` and
|
||||
:propref:`yminimum` style properties (and hence, :propref:`xsize`,
|
||||
:propref`ysize`, :propref:`xysize`, and :propref`area` properties.)
|
||||
|
||||
The new :func:`PlayCharacterVoice` action makes it possible to play
|
||||
a sample of a character's voice at that character's voice volume level.
|
||||
|
||||
The Traditional Chinese translation has been updated.
|
||||
|
||||
|
||||
Ren'Py 6.99.7
|
||||
=============
|
||||
|
||||
|
||||
@@ -363,6 +363,10 @@ Occasionally Used
|
||||
window to the window size, this can be used to report cases where the
|
||||
dialogue is too large for its window.
|
||||
|
||||
.. var:: config.default_tag_layer = "master:
|
||||
|
||||
The layer an image is show on if its tag is not found in config.tag_layer.
|
||||
|
||||
.. var:: config.default_transform = ...
|
||||
|
||||
When a displayable is shown using the show or scene statements,
|
||||
@@ -587,6 +591,12 @@ Occasionally Used
|
||||
A list of functions. When called, each function is expected to
|
||||
use ui functions to add displayables to the overlay layer.
|
||||
|
||||
.. var:: config.overlay_screens = [ ... ]
|
||||
|
||||
A list of screens that are displayed when the overlay is enabled,
|
||||
and hidden when the overlay is supressed. (The screens are shown
|
||||
on the screens layer, not the overlay layer.)
|
||||
|
||||
.. var:: config.python_callbacks = [ ]
|
||||
|
||||
A list of functions. The functions in this list are called, without
|
||||
@@ -648,6 +658,20 @@ Occasionally Used
|
||||
beginning with an underscore (_). These keys are used by Ren'Py,
|
||||
and should not be changed.
|
||||
|
||||
.. var:: config.tag_layer = { }
|
||||
|
||||
A dictionary mapping image tag strings to layer name strings. When
|
||||
an image is shown without a specific layer name, the image's tag is
|
||||
looked up in this dictionary to get the layer to show it on. If the
|
||||
tag is not found here, :var:`config.default_tag_name` is used.
|
||||
|
||||
.. var:: config.tag_transform = { }
|
||||
|
||||
A dictionary mapping image tag strings to transforms or lists of
|
||||
transforms. When an image is newly-shown without an at clause,
|
||||
the image's tag is looked up in ths dictionary to find a transform
|
||||
or list of transforms to use.
|
||||
|
||||
.. var:: config.thumbnail_height = 75
|
||||
|
||||
The height of the thumbnails that are taken when the game is
|
||||
@@ -938,6 +962,10 @@ Rarely or Internally Used
|
||||
images used by that interaction have loaded. (Yeah, it's a lousy
|
||||
name.)
|
||||
|
||||
.. var:: config.log_width = 78
|
||||
|
||||
The width of lines logged when :var:`config.log` is used.
|
||||
|
||||
.. var:: config.longpress_duration = 0.5
|
||||
|
||||
The amount of time the player must press the screen for for a longpress
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
.. function:: renpy.log(msg)
|
||||
|
||||
If :var:`config.log` is not set, this does nothing. Otherwise, it opens
|
||||
the logfile (if not already open), formats the message to 70
|
||||
the logfile (if not already open), formats the message to :var:`config.log_width`
|
||||
columns, and prints it to the logfile.
|
||||
|
||||
.. function:: renpy.unwatch(expr)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
Flatten is a relatively expensive operation, and so should only be used
|
||||
when absolutely required.
|
||||
|
||||
.. function:: Frame(image, left, top, right=None, bottom=None, tile=False, **properties)
|
||||
.. function:: Frame(image, left=0, top=0, right=None, bottom=None, tile=False, **properties)
|
||||
|
||||
A displayable that resizes an image to fill the available area,
|
||||
while preserving the width and height of its borders. is often
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
.. csv-table::
|
||||
:header: "Ren'Py Name", "easings.net Name"
|
||||
|
||||
"ease_back", "easeInOut_back"
|
||||
"ease_bounce", "easeInOut_bounce"
|
||||
"ease_circ", "easeInOut_circ"
|
||||
"ease_cubic", "easeInOut_cubic"
|
||||
"ease_elastic", "easeInOut_elastic"
|
||||
"ease_expo", "easeInOut_expo"
|
||||
"ease_quad", "easeInOut_quad"
|
||||
"ease_quart", "easeInOut_quart"
|
||||
"ease_quint", "easeInOut_quint"
|
||||
"easein_back", "easeOut_back"
|
||||
"easein_bounce", "easeOut_bounce"
|
||||
"easein_circ", "easeOut_circ"
|
||||
"easein_cubic", "easeOut_cubic"
|
||||
"easein_elastic", "easeOut_elastic"
|
||||
"easein_expo", "easeOut_expo"
|
||||
"easein_quad", "easeOut_quad"
|
||||
"easein_quart", "easeOut_quart"
|
||||
"easein_quint", "easeOut_quint"
|
||||
"easeout_back", "easeIn_back"
|
||||
"easeout_bounce", "easeIn_bounce"
|
||||
"easeout_circ", "easeIn_circ"
|
||||
"easeout_cubic", "easeIn_cubic"
|
||||
"easeout_elastic", "easeIn_elastic"
|
||||
"easeout_expo", "easeIn_expo"
|
||||
"easeout_quad", "easeIn_quad"
|
||||
"easeout_quart", "easeIn_quart"
|
||||
"easeout_quint", "easeIn_quint"
|
||||
@@ -27,10 +27,11 @@
|
||||
|
||||
This function requests the purchase of `product`.
|
||||
|
||||
It returns true if the purchase succeded, now or at any time in the past,
|
||||
and false otherwise.
|
||||
It returns true if the purchase succeeds, or false if the purchase
|
||||
fails. If the product has been registered as consumable, the purchase
|
||||
is consumed before this call returns.
|
||||
|
||||
.. function:: iap.register(product, identifier=None, amazon=None, google=None, ios=None)
|
||||
.. function:: iap.register(product, identifier=None, amazon=None, google=None, ios=None, consumable=True)
|
||||
|
||||
Registers a product with the in-app purchase system.
|
||||
|
||||
@@ -57,6 +58,10 @@
|
||||
`ios`
|
||||
A string that identifies the product in the Apple App store for
|
||||
iOS. If not given, defaults to `identifier`.
|
||||
|
||||
`consumable`
|
||||
True if this is a consumable purchase. Right now, consumable purchases
|
||||
are only supported on iOS.
|
||||
|
||||
.. function:: iap.restore(interact=True)
|
||||
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
.. Automatically generated file - do not modify.
|
||||
|
||||
.. function:: iap.Purchase(product)
|
||||
.. function:: iap.Purchase(product, success=None)
|
||||
|
||||
An action that attempts the purchase of `product`. This action is
|
||||
sensitive iff and only if the product is purchasable (a store is
|
||||
enabled, and the product has not already been purchased.)
|
||||
|
||||
`success`
|
||||
If not None, this is an action or list of actions that are tun
|
||||
when the purchase succeeds.
|
||||
|
||||
.. function:: iap.Restore()
|
||||
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
.. Automatically generated file - do not modify.
|
||||
|
||||
.. function:: renpy.can_show(name, layer=None, tag=None)
|
||||
|
||||
Determines if `name` can be used to show an image. This interprets `name`
|
||||
as a tag and attributes. This is combined with the attributes of the
|
||||
currently-showing image with `tag` on `layer` to try to determine a unique image
|
||||
to show. If a unique image can be show, returns the name of that image as
|
||||
a tuple. Otherwise, returns None.
|
||||
|
||||
`tag`
|
||||
The image tag to get attributes from. If not given, defaults to the first
|
||||
component of `name`.
|
||||
|
||||
`layer`
|
||||
The layer to check. If None, uses the default layer for `tag`.
|
||||
|
||||
.. function:: renpy.copy_images(old, new)
|
||||
|
||||
Copies images beginning with one prefix to images beginning with
|
||||
@@ -19,6 +34,17 @@
|
||||
A space-separated string giving the components of the new image
|
||||
name.
|
||||
|
||||
.. function:: renpy.get_available_image_attributes(tag, attributes=())
|
||||
|
||||
Returns a list of tuples, with each tuple representing a possible
|
||||
combination of image attributes that can be associated with `tag`.
|
||||
If `attributes` is given, only images that contain all the attributes
|
||||
in that iterable are returned.
|
||||
|
||||
.. function:: renpy.get_available_image_tags()
|
||||
|
||||
Returns a list of image tags that have been defined.
|
||||
|
||||
.. function:: renpy.get_image_bounds(tag, width=None, height=None, layer='master')
|
||||
|
||||
If an image with `tag` exists on `layer`, returns the bounding box of
|
||||
@@ -30,6 +56,9 @@
|
||||
`width`, `height`
|
||||
The width and height of the area that contains the image. If None,
|
||||
defaults the width and height of the screen, respectively.
|
||||
|
||||
`layer`
|
||||
If None, uses the default layer for `tag`.
|
||||
|
||||
.. function:: renpy.get_placement(d)
|
||||
|
||||
@@ -82,6 +111,10 @@
|
||||
May be a string giving the image name or a tuple giving each
|
||||
component of the image name. It may also be a string giving
|
||||
only the image tag.
|
||||
|
||||
|
||||
`layer`
|
||||
The layer to check. If None, uses the default layer for `tag`.
|
||||
|
||||
.. function:: renpy.start_predict(*args)
|
||||
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
.. Automatically generated file - do not modify.
|
||||
|
||||
.. function:: renpy.add_layer(layer, above=None, below=None, menu_clear=True)
|
||||
|
||||
Adds a new layer to the screen. If the layer already exists, this
|
||||
function does nothing.
|
||||
|
||||
One of `behind` or `above` must be given.
|
||||
|
||||
`layer`
|
||||
A string giving the name of the new layer to add.
|
||||
|
||||
`above`
|
||||
If not None, a string giving the name of a layer the new layer will
|
||||
be placed above.
|
||||
|
||||
`below`
|
||||
If not None, a string giving the name of a layer the new layer will
|
||||
be placed below.
|
||||
|
||||
`menu_clear`
|
||||
If true, this layer will be cleared when entering the game menu
|
||||
context, and restored when leaving the
|
||||
|
||||
.. function:: renpy.call_stack_depth()
|
||||
|
||||
Returns the depth of the call stack of the current context - the number
|
||||
@@ -168,6 +190,9 @@
|
||||
|
||||
If not_showing is True, this only returns a side image if the image the
|
||||
attributes are taken from is not on the screen.
|
||||
|
||||
If `layer` is None, uses the default layer for the currently showing
|
||||
tag.
|
||||
|
||||
.. function:: renpy.get_transition(layer=None)
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
* :func:`Pause`
|
||||
* :func:`Pixellate`
|
||||
* Play
|
||||
* :func:`PlayCharacterVoice`
|
||||
* Position
|
||||
* :func:`Preference`
|
||||
* :func:`Queue`
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
* :func:`Pixellate`
|
||||
* :func:`Placeholder`
|
||||
* Play
|
||||
* :func:`PlayCharacterVoice`
|
||||
* Position
|
||||
* :func:`Preference`
|
||||
* :func:`Queue`
|
||||
|
||||
@@ -51,10 +51,20 @@
|
||||
|
||||
.. function:: renpy.get_screen(name, layer='screens')
|
||||
|
||||
Returns the ScreenDisplayable with the given `tag`, on
|
||||
`layer`. If no displayable with the tag is not found, it is
|
||||
interpreted as screen name. If it's still not found, None is returned.
|
||||
|
||||
Returns the ScreenDisplayable with the given `name` on layer. `name`
|
||||
is first interpreted as a tag name, and then a screen name. If the
|
||||
screen is not showing, returns None.
|
||||
|
||||
This can also take a list of names, in which case the first screen
|
||||
that is showing is returned.
|
||||
|
||||
This function can be used to check if a screen is showing, using code
|
||||
like::
|
||||
|
||||
if renpy.get_screen("say"):
|
||||
text "The say screen is showing."
|
||||
else:
|
||||
text "The say screen is hidden."
|
||||
|
||||
.. function:: renpy.get_widget(screen, id, layer='screens')
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
.. Automatically generated file - do not modify.
|
||||
|
||||
.. function:: renpy.get_at_list(name, layer='master')
|
||||
.. function:: renpy.get_at_list(name, layer=None)
|
||||
|
||||
Returns the list of transforms being applied to the image with tag `name`
|
||||
on `layer`. Returns an empty list if no transofrms are being applied, or
|
||||
None if the image is not shown.
|
||||
|
||||
If `layer` is None, uses the default layer for the given tag.
|
||||
|
||||
.. function:: renpy.hide(name, layer='master')
|
||||
.. function:: renpy.hide(name, layer=None)
|
||||
|
||||
Hides an image from a layer. The python equivalent of the hide statement.
|
||||
|
||||
@@ -15,7 +17,8 @@
|
||||
any image with the tag is hidden (the precise name does not matter).
|
||||
|
||||
`layer`
|
||||
The layer on which this function operates.
|
||||
The layer on which this function operates. If None, uses the default
|
||||
layer associated with the tag.
|
||||
|
||||
.. function:: renpy.image(name, d)
|
||||
|
||||
@@ -65,7 +68,8 @@
|
||||
|
||||
`layer`
|
||||
A string, giving the name of the layer on which the image will be shown.
|
||||
The equivalent of the ``onlayer`` property.
|
||||
The equivalent of the ``onlayer`` property. If None, uses the default
|
||||
layer associated with the tag.
|
||||
|
||||
`what`
|
||||
If not None, this is a displayable that will be shown in lieu of
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.. Automatically generated file - do not modify.
|
||||
|
||||
.. function:: SideImage(prefix_tag='side')
|
||||
.. function:: SideImage()
|
||||
|
||||
Returns the side image associated with the currently speaking character,
|
||||
or a Null displayable if no such side image exists.
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
.. Automatically generated file - do not modify.
|
||||
|
||||
.. function:: PlayCharacterVoice(voice_tag, sample)
|
||||
|
||||
This plays `sample` on the voice channel, as if said by a
|
||||
character with `voice_tag`.
|
||||
|
||||
`sample`
|
||||
The full path to a sound file. No voice-related handling
|
||||
of this file is done.
|
||||
|
||||
.. function:: SetCharacterVolume(voice_tag, volume=None)
|
||||
|
||||
This allows the volume of each characters to be adjusted.
|
||||
|
||||
@@ -22,6 +22,8 @@ with the same id. Ids are generated automatically by the screen
|
||||
language, but when doing things by hand, they must be manually
|
||||
specified.
|
||||
|
||||
Warning: UI Functions are deprecated and not recommended::
|
||||
|
||||
Here's an example python screen:
|
||||
|
||||
::
|
||||
@@ -51,6 +53,8 @@ screens.
|
||||
UI Functions
|
||||
============
|
||||
|
||||
With the advent of SL2, UI Functions are deprecated and not recommended::
|
||||
|
||||
The UI functions are python equivalents of the screen language
|
||||
statements. For each screen language statement, there is a ui function
|
||||
with the same name. For example, ui.text corresponds to the text
|
||||
|
||||
@@ -78,8 +78,8 @@ For example::
|
||||
Variations
|
||||
----------
|
||||
|
||||
There are two variants of side image support that can be selected - either alone
|
||||
or together - using config variables:
|
||||
There are a number of attributes of side images that can be controlled
|
||||
using config variables.
|
||||
|
||||
.. var:: config.side_image_tag = None
|
||||
|
||||
@@ -101,6 +101,66 @@ or together - using config variables:
|
||||
When set to true, the side image will only show if an image with that tag
|
||||
is not already being shown on the screen.
|
||||
|
||||
.. var:: config.side_image_prefix_tag = 'side'
|
||||
|
||||
The prefix that is used when searching for a side image.
|
||||
|
||||
.. var:: config.side_image_null = Null()
|
||||
|
||||
The Null displayable to use when not displaying a side image. This
|
||||
be changed, but only to other Null objects. One reason for doing so
|
||||
would be to set the side of the Null (eg. Null(width=200, height=150))
|
||||
to prevent dissolves from being cut off.
|
||||
|
||||
.. var:: config.side_image_same_transform = None
|
||||
|
||||
If not None, a transform that is used when the new side image shares the
|
||||
same image tag as the previous side image.
|
||||
|
||||
.. var:: config.side_image_change_transform = None
|
||||
|
||||
If not None, a transform that is used when the new side image does not
|
||||
share the name image tag (or one of the new or old side images does not
|
||||
exist).
|
||||
|
||||
|
||||
Transforms and Transitions
|
||||
--------------------------
|
||||
|
||||
The :var:`config.side_image_same_transform` and
|
||||
:var:`config.side_image_change_transform` transforms are called with two
|
||||
arguments - old and new side image displayables - each time the side
|
||||
image is displayed. These can be used to move around side images, or
|
||||
use a transition to go between side images.
|
||||
|
||||
This code causes the side image to slide in and out when the character
|
||||
associated with that image changes::
|
||||
|
||||
transform change_transform(old, new):
|
||||
contains:
|
||||
old
|
||||
yalign 1.0
|
||||
xpos 0.0 xanchor 0.0
|
||||
linear 0.2 xanchor 1.0
|
||||
contains:
|
||||
new
|
||||
yalign 1.0
|
||||
xpos 0.0 xanchor 1.0
|
||||
linear 0.2 xanchor 0.0
|
||||
|
||||
define config.side_image_change_transform = change_transform
|
||||
|
||||
This code is used to dissolve between old and new side images when the
|
||||
character remains the same. (For example, when the character changes
|
||||
emotion.) For the Dissolve to work correctly, both side images must
|
||||
be the same size. ::
|
||||
|
||||
transform same_transform(old, new):
|
||||
old
|
||||
new with Dissolve(0.2, alpha=True)
|
||||
|
||||
define config.side_image_same_transform = same_transform
|
||||
|
||||
|
||||
Leaving Room / Customization
|
||||
----------------------------
|
||||
|
||||
@@ -43,7 +43,7 @@ display: none;
|
||||
|
||||
<p><a name="Basic_Help" id="Basic_Help"></a></p>
|
||||
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=1" title="Edit section: Basic Help">edit</a>]</span> <span class="mw-headline">基本説明</span></h2>
|
||||
<p>若開始進行遊戲,點擊滑鼠左鍵或按空格與回車鍵。遇到選項或選單,點擊滑鼠左鍵來選擇,或者使用方向鍵來選擇選項並按回車來確定。</p>
|
||||
<p>若要開始進行遊戲,點擊滑鼠左鍵或按空白鍵與換行鍵。遇到選項或選單,點擊滑鼠左鍵來選擇,或者使用方向鍵來選擇選項並按換行鍵來確定。</p>
|
||||
<p><a name="Game_Menu" id="Game_Menu"></a></p>
|
||||
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=2" title="Edit section: Game Menu">edit</a>]</span> <span class="mw-headline">遊戲選單</span></h3>
|
||||
<p>當進行遊戲時,用滑鼠右擊或按下 Esc 鍵進入遊戲選單。遊戲選單給出以下選項:</p>
|
||||
@@ -55,7 +55,7 @@ display: none;
|
||||
<dt>載入</dt>
|
||||
<dd>允許您通過點擊來載入指定檔位的遊戲檔案。點擊「自動」將訪問自動存儲的檔位。</dd>
|
||||
<dt>設定<br></dt>
|
||||
<dd>改變遊戲的偏好(選項/配置): <dl>
|
||||
<dd>改變遊戲的偏好(options/configuration): <dl>
|
||||
<dt>顯示</dt>
|
||||
<dd>全屏模式和視窗模式之間切換。</dd>
|
||||
<dt>過渡</dt>
|
||||
@@ -65,7 +65,7 @@ display: none;
|
||||
<dt>遊戲桿</dt>
|
||||
<dd>讓您使用遊戲桿來進行遊戲。</dd>
|
||||
<dt>略過<dt>
|
||||
<dd>在選擇略過已讀資訊(遊戲中經歷的所有)和略過所有資訊之間作選擇。</dd>
|
||||
<dd>在選擇略過已讀訊息(遊戲中經歷的所有)和略過所有訊息之間作選擇。</dd>
|
||||
<dt>開始略過<br></dt>
|
||||
<dd>返回遊戲,並開始略過模式。</dd>
|
||||
<dt>選擇後<br></dt>
|
||||
@@ -88,9 +88,9 @@ display: none;
|
||||
<p><a name="Key_and_Mouse_Bindings" id="Key_and_Mouse_Bindings"></a></p>
|
||||
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=3" title="Edit section: Key and Mouse Bindings">edit</a>]</span> <span class="mw-headline">鍵盤和滑鼠綁定</span></h3>
|
||||
<dl>
|
||||
<dt>左擊,回車</dt>
|
||||
<dt>左擊,換行鍵</dt>
|
||||
<dd>繼續遊戲,確定選項按鈕和滑動塊。</dd>
|
||||
<dt>空格</dt>
|
||||
<dt>空白鍵</dt>
|
||||
<dd>繼續遊戲,但不會確認選項。</dd><dd><br></dd>
|
||||
<dt>方向鍵</dt>
|
||||
<dd>選擇選項,按鈕和滑動塊。</dd>
|
||||
@@ -111,7 +111,7 @@ display: none;
|
||||
<dt>S</dt>
|
||||
<dd>產生截圖,保存類型為 screenshootxxxx.png ,其中 xxxx 表示一組數位串。</dd>
|
||||
<dt>Alt-M, Command-M</dt>
|
||||
<dd>隱藏視窗到工作列。</dd>
|
||||
<dd>最小化視窗到工作列。</dd>
|
||||
<dt>Alt-F4, Command-Q</dt>
|
||||
<dd>離開遊戲。</dd>
|
||||
<dt>Delete</dt>
|
||||
@@ -119,6 +119,6 @@ display: none;
|
||||
</dl>
|
||||
<p><a name="Legal_Notice" id="Legal_Notice"></a></p>
|
||||
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=4" title="Edit section: Legal Notice">edit</a>]</span> <span class="mw-headline">法律公告</span></h2>
|
||||
<p>本遊戲使用了各種開源專案的原始程式碼。如果您需要獲取原始碼和清單,請參閲 Ren'py 目錄中的 LICENSE.txt 檔案,或者訪問 <a href="http://www.renpy.org/wiki/renpy/License" class="external free" title="http://www.renpy.org/wiki/renpy/License" rel="nofollow">http://www.renpy.org/wiki/renpy/License</a>。</p>
|
||||
<p>本遊戲使用了各項開源專案的原始程式碼製作。如果您需要取得原始碼和清單,請參閲 Ren'py 目錄中的 LICENSE.txt 檔案,或者訪問 <a href="http://www.renpy.org/wiki/renpy/License" class="external free" title="http://www.renpy.org/wiki/renpy/License" rel="nofollow">http://www.renpy.org/wiki/renpy/License</a>。</p>
|
||||
|
||||
</body></html>
|
||||
|
||||
@@ -1,142 +1,150 @@
|
||||
## This file contains some of the options that can be changed to customize
|
||||
## your Ren'Py game. It only contains the most common options... there
|
||||
## is quite a bit more customization you can do.
|
||||
## 本檔包含部分可用於修改與定制的選項代碼,
|
||||
## 它將會起作用於您的遊戲之中。 但這只是很多選項中的一部分,
|
||||
## 您還可以對它進行很多自由的添加與修改。
|
||||
##
|
||||
## Lines beginning with two '#' marks are comments, and you shouldn't
|
||||
## uncomment them. Lines beginning with a single '#' mark are
|
||||
## commented-out code, and you may want to uncomment them when
|
||||
## appropriate.
|
||||
## 以兩個「#」號開頭的行是注釋行,您不應該清除這些注釋。
|
||||
## 而以單個「#」號開頭的行是反注釋或備用參數,您可以在有必要的時候
|
||||
## 選擇清除掉這些行
|
||||
##
|
||||
## 注釋:Ren'py引擎對空格等符號有著嚴格的要求,並且不能識別Tab定位字元,
|
||||
## 無論是在此輸入參數,還是今後編輯遊戲腳本時,請務必小心空格的數量,
|
||||
## 同時不能存在Tab定位字元,否則將會導致整個專案無法啟動!
|
||||
|
||||
init -1 python hide:
|
||||
|
||||
## Should we enable the use of developer tools? This should be
|
||||
## set to False before the game is released, so the user can't
|
||||
## cheat using developer tools.
|
||||
## 此選項可供調整開發者工具的開關,
|
||||
## 在遊戲正式發佈之前,應設定為False,
|
||||
## 以避免使用者使用開發者工具進行遊戲作弊。
|
||||
|
||||
config.developer = True
|
||||
|
||||
## These control the width and height of the screen.
|
||||
## 這些控制螢幕的寬度和高度。
|
||||
## 此選項控制遊戲視窗的解析度。
|
||||
|
||||
config.screen_width = 800
|
||||
config.screen_height = 600
|
||||
|
||||
## This controls the title of the window, when Ren'Py is
|
||||
## running in a window.
|
||||
## 當Ren'py專案以視窗化運行時,
|
||||
## 此選項控制視窗的標題名稱。
|
||||
## 注釋:需要命名為非英文字元時,需要在雙引號前加「u」以表示Unicode字元,
|
||||
## 但即使命名為英文名稱也不一定需要將「u」去掉。
|
||||
|
||||
config.window_title = u"PROJECT_NAME"
|
||||
|
||||
# These control the name and version of the game, that are reported
|
||||
# with tracebacks and other debugging logs.
|
||||
# 當 Ren'Py 啓動時,此參數控制視窗的標題。
|
||||
# 并在一個視窗中運行。
|
||||
# 此選項控制遊戲的名稱與版本號,
|
||||
# 並將它們回饋至debug工具與日誌中。
|
||||
#
|
||||
# 注釋:此選項通常針對開發者,SDK主介面的專案名稱、開發過程中的traceback.txt、
|
||||
# 編譯時的可執行程式名稱、以及壓縮檔名稱中會有所體現,但與上述視窗標題無關。
|
||||
config.name = "PROJECT_NAME"
|
||||
config.version = "0.0"
|
||||
|
||||
#########################################
|
||||
# Themes
|
||||
# 主題
|
||||
|
||||
## We then want to call a theme function. theme.roundrect is
|
||||
## a theme that features the use of rounded rectangles.
|
||||
## 接著,我們就希望使用到主題功能。 theme.roundrect
|
||||
## 代表著使用圓角矩形特性的主題。
|
||||
##
|
||||
## The theme function takes a number of parameters that can
|
||||
## customize the color scheme.
|
||||
## 主題功能擁有幾個參數
|
||||
## 可使您對主題進行一定的自訂。
|
||||
|
||||
theme.regal(
|
||||
## Theme: Regal
|
||||
## Color scheme: Tree Frog
|
||||
theme.roundrect(
|
||||
|
||||
## The color of an idle widget face.
|
||||
widget = "#1c140d",
|
||||
## 空閒控制項的顏色。
|
||||
## 注釋:控制項通常體現在按鈕上,此處為滑鼠指標未指向時的顏色。
|
||||
widget = "#003c78",
|
||||
|
||||
## The color of a focused widget face.
|
||||
widget_hover = "#86827e",
|
||||
## 被指向控制項的顏色。
|
||||
widget_hover = "#0050a0",
|
||||
|
||||
## The color of the text in a widget.
|
||||
widget_text = "#cbe86b",
|
||||
## 控制項內文本顏色。
|
||||
widget_text = "#c8ffff",
|
||||
|
||||
## The color of the text in a selected widget. (For
|
||||
## example, the current value of a preference.)
|
||||
widget_selected = "#f2e9e1",
|
||||
## 被選中控制項內的文本顏色。
|
||||
## 例:當前使用的參數。
|
||||
widget_selected = "#ffffc8",
|
||||
|
||||
## The color of a disabled widget face.
|
||||
disabled = "#ffffff",
|
||||
## 被遮罩控制項的顏色。
|
||||
disabled = "#404040",
|
||||
|
||||
## The color of disabled widget text.
|
||||
disabled_text = "#1c140d",
|
||||
## 被遮罩控制項內文本的顏色。
|
||||
disabled_text = "#c8c8c8",
|
||||
|
||||
## The color of informational labels.
|
||||
label = "#1c140d",
|
||||
## 資訊框內的文本顏色。
|
||||
label = "#ffffff",
|
||||
|
||||
## The color of a frame containing widgets.
|
||||
frame = "#cbe86b",
|
||||
## 含框架的控制項顏色。
|
||||
frame = "#6496c8",
|
||||
|
||||
## The background of the main menu. This can be a color
|
||||
## beginning with '#', or an image filename. The latter
|
||||
## should take up the full height and width of the screen.
|
||||
mm_root = "#ffffff",
|
||||
|
||||
## The background of the game menu. This can be a color
|
||||
## beginning with '#', or an image filename. The latter
|
||||
## should take up the full height and width of the screen.
|
||||
gm_root = "#ffffff",
|
||||
|
||||
## If this is True, the in-game window is rounded. If False,
|
||||
## the in-game window is square.
|
||||
## 若設定為True,則遊戲內視窗顯示為圓角。
|
||||
## 若為False,則遊戲內視窗顯示為矩形。
|
||||
rounded_window = False,
|
||||
|
||||
## And we're done with the theme. The theme will customize
|
||||
## various styles, so if we want to change them, we should
|
||||
## do so below.
|
||||
## 主選單的背景。
|
||||
## 此處可以以「#」開頭代表一個顏色,或引用一個檔。
|
||||
## 謹記,圖片檔的解析度要與實際視窗的解析度相同。
|
||||
mm_root = "#dcebff",
|
||||
|
||||
## 遊戲內選單的背景。
|
||||
## 使用方法與注意事項同上。
|
||||
gm_root = "#dcebff",
|
||||
|
||||
## 主題的設定到此結束。
|
||||
## 主題控制著多個可視性效果,若需要修改,
|
||||
## 請參見下方參數。
|
||||
)
|
||||
|
||||
|
||||
#########################################
|
||||
## These settings let you customize the window containing the
|
||||
## dialogue and narration, by replacing it with an image.
|
||||
## 此處的設定可允許您修改含有對話或旁白的文字方塊背景。
|
||||
## 通過引用一個檔來修改它。
|
||||
|
||||
## The background of the window. In a Frame, the two numbers
|
||||
## are the size of the left/right and top/bottom borders,
|
||||
## respectively.
|
||||
## 文字方塊的背景。 在Frame後的括弧中,兩個數字分別代表
|
||||
## 左右邊距和上下邊距。
|
||||
|
||||
# style.window.background = Frame("frame.png", 12, 12)
|
||||
|
||||
## Margin is space surrounding the window, where the background
|
||||
## is not drawn.
|
||||
## 留邊參數用於設定文字方塊視窗周圍的空白部分。
|
||||
## 這些部分將不會覆蓋背景圖。
|
||||
## 注釋:如數值越大,則文字方塊周圍的空白越多,文字方塊本身越小,
|
||||
## 但這僅限於文字方塊圖形本身,文字不受此參數影響。
|
||||
|
||||
# style.window.left_margin = 6
|
||||
# style.window.right_margin = 6
|
||||
# style.window.top_margin = 6
|
||||
# style.window.bottom_margin = 6
|
||||
|
||||
## Padding is space inside the window, where the background is
|
||||
## drawn.
|
||||
## 填充參數是文字方塊視窗內的空白部分。
|
||||
## 注釋:與上一個參數作用正好相反,
|
||||
## 它會影響文字方塊內文字的顯示範圍。
|
||||
|
||||
# style.window.left_padding = 6
|
||||
# style.window.right_padding = 6
|
||||
# style.window.top_padding = 6
|
||||
# style.window.bottom_padding = 6
|
||||
|
||||
## This is the minimum height of the window, including the margins
|
||||
## and padding.
|
||||
## 此參數控制視窗最低高度,並包含留邊與填充參數。
|
||||
|
||||
# style.window.yminimum = 250
|
||||
|
||||
|
||||
#########################################
|
||||
## This lets you change the placement of the main menu.
|
||||
## 此處參數可使您修改主選單放置的位置。
|
||||
|
||||
## The way placement works is that we find an anchor point
|
||||
## inside a displayable, and a position (pos) point on the
|
||||
## screen. We then place the displayable so the two points are
|
||||
## at the same place.
|
||||
## 此參數的原理是在視覺化元素內尋找一個定位點(anchor),
|
||||
## 以及在遊戲螢幕上尋找一個位置點(pos)。
|
||||
## 接著我們會將兩個點進行重合。
|
||||
##
|
||||
## 注釋:視覺化元素內的定位點可假想為一個圖片中指定的點,
|
||||
## 當pos參數指定一個遊戲視窗內的位置(點)後,
|
||||
## 引擎便會將圖片中指定的點與視窗中指定好的點進行重合放置。
|
||||
## 預設情況下,兩軸的anchor都為0.5時,定位點位於視覺化元素中心。
|
||||
|
||||
## An anchor/pos can be given as an integer or a floating point
|
||||
## number. If an integer, the number is interpreted as a number
|
||||
## of pixels from the upper-left corner. If a floating point,
|
||||
## the number is interpreted as a fraction of the size of the
|
||||
## displayable or screen.
|
||||
## 定位點與位置點均可使用整數或小數表達。
|
||||
## 如果設定為整數,則會被理解為距離左上角的圖元數量。
|
||||
## 如果設定為小數,則會被理解為遊戲視窗分數化的位置。
|
||||
##
|
||||
## 注釋:分數化位置不難理解,如0.5,則代表遊戲視窗的二分之一處,
|
||||
## 此時xy兩軸依舊有效。
|
||||
|
||||
# style.mm_menu_frame.xpos = 0.5
|
||||
# style.mm_menu_frame.xanchor = 0.5
|
||||
@@ -145,184 +153,338 @@ init -1 python hide:
|
||||
|
||||
|
||||
#########################################
|
||||
## These let you customize the default font used for text in Ren'Py.
|
||||
## 可以在以下各項中自訂預設字型。
|
||||
## 此處可修改Ren'py遊戲內的預設字型。
|
||||
|
||||
## The file containing the default font.
|
||||
## 設定預設字型。
|
||||
## 引用一個字體檔。
|
||||
|
||||
style.default.font = "tl/None/DroidSansFallback.ttf"
|
||||
style._default.font = "tl/None/DroidSansFallback.ttf"
|
||||
|
||||
## The default size of text.
|
||||
## 更改預設文字的大小。
|
||||
## 修改字體大小。
|
||||
|
||||
# style.default.size = 22
|
||||
|
||||
## Note that these only change the size of some of the text. Other
|
||||
## buttons have their own styles.
|
||||
## 以上設定,可以變更某些文本的大小。
|
||||
## 對其他都設定為他們自己的按鈕的文本樣式。
|
||||
|
||||
## 注意此參數僅能修改部分字體的大小,
|
||||
## 一些按鈕擁有它們自己的風格參數。
|
||||
|
||||
|
||||
#########################################
|
||||
## These settings let you change some of the sounds that are used by
|
||||
## Ren'Py.
|
||||
## 此參數可使您修改Ren'py遊戲內使用的一些聲音。
|
||||
|
||||
## Set this to False if the game does not have any sound effects.
|
||||
## 若為False,您的遊戲內將不會包含任何聲音效果。
|
||||
|
||||
config.has_sound = True
|
||||
|
||||
## Set this to False if the game does not have any music.
|
||||
## 若您的遊戲內不包含任何音樂,請設定為False。
|
||||
|
||||
config.has_music = True
|
||||
|
||||
## Set this to True if the game has voicing.
|
||||
## 若您的遊戲含有人物語音,請設定為True。
|
||||
|
||||
config.has_voice = False
|
||||
|
||||
## Sounds that are used when button and imagemaps are clicked.
|
||||
## 設定在您點擊按鈕和圖片映射時的效果音。
|
||||
|
||||
# style.button.activate_sound = "click.wav"
|
||||
# style.imagemap.activate_sound = "click.wav"
|
||||
|
||||
## Sounds that are used when entering and exiting the game menu.
|
||||
## 設定在您進入和退出遊戲內選單時的聲音效果。
|
||||
|
||||
# config.enter_sound = "click.wav"
|
||||
# config.exit_sound = "click.wav"
|
||||
|
||||
## A sample sound that can be played to check the sound volume.
|
||||
## 設定一個聲音用於測試音量大小。
|
||||
|
||||
# config.sample_sound = "click.wav"
|
||||
|
||||
## Music that is played while the user is at the main menu.
|
||||
## 設定使用者位於主選單時的音樂。
|
||||
|
||||
# config.main_menu_music = "main_menu_theme.ogg"
|
||||
|
||||
|
||||
#########################################
|
||||
## Help.
|
||||
## 説明。
|
||||
## 説明
|
||||
|
||||
## This lets you configure the help option on the Ren'Py menus.
|
||||
## It may be:
|
||||
## - A label in the script, in which case that label is called to
|
||||
## show help to the user.
|
||||
## - A file name relative to the base directory, which is opened in a
|
||||
## web browser.
|
||||
## - None, to disable help.
|
||||
## 這允許您配置 Ren'Py 選單中的説明選項。
|
||||
## 此參數可讓您控制Ren'py遊戲內的「説明」選項。
|
||||
## 它可以是:
|
||||
## - 腳本中的一個label,用於在點擊後向使用者顯示一段説明。
|
||||
## - 遊戲根目錄下的一個檔,點擊後將會打開網頁瀏覽器。
|
||||
## - 若為None,則關閉此功能。
|
||||
##
|
||||
## 注釋:label通常用於遊戲劇情腳本,如script.rpy中,label start:
|
||||
## 指的就是點擊開始遊戲時指向的label。 label中可包含對話、旁白、
|
||||
## 選項、背景、聲音等參數。
|
||||
config.help = "README.html"
|
||||
|
||||
|
||||
#########################################
|
||||
## Transitions.
|
||||
## 過渡。
|
||||
## 過渡特效
|
||||
|
||||
## Used when entering the game menu from the game.
|
||||
## 進入遊戲選單(右鍵選單)時的轉場方式。
|
||||
## 從遊戲中進入遊戲內選單時的過渡特效。
|
||||
config.enter_transition = None
|
||||
|
||||
## Used when exiting the game menu to the game.
|
||||
## 脫離遊戲選單(右鍵選單)時的轉場方式。
|
||||
## 退出選單回到遊戲時的過渡特效。
|
||||
config.exit_transition = None
|
||||
|
||||
## Used between screens of the game menu.
|
||||
## 在主選單、遊戲選單、設定畫面、存讀檔畫面中交叉切換時的內部轉場方式。
|
||||
## 在遊戲選單內進行切換時的過渡特效。
|
||||
config.intra_transition = None
|
||||
|
||||
## Used when entering the game menu from the main menu.
|
||||
## 遷移到遊戲選單從主選單中的過渡時間。
|
||||
## 從主選單進入遊戲內選單時的過渡特效。
|
||||
config.main_game_transition = None
|
||||
|
||||
## Used when returning to the main menu from the game.
|
||||
## 過渡時間暫停遊戲並返回到主選單。
|
||||
## 退出選單回到主選單時的過渡特效。
|
||||
config.game_main_transition = None
|
||||
|
||||
## Used when entering the main menu from the splashscreen.
|
||||
## 開啟遊戲,第一次進入主選單時的轉場方式。
|
||||
## 從封面進入主選單時的過渡特效。
|
||||
## 注釋:封面(splashscreen)指的是打開遊戲時
|
||||
## 先看到的一些發行商圖片或遊戲宣傳視頻等。
|
||||
## 封面需要另外添加代碼實現,請參見官方文檔。
|
||||
config.end_splash_transition = None
|
||||
|
||||
## Used when entering the main menu after the game has ended.
|
||||
## 遊戲結束(碰到 return)跳回主選單時的轉場方式。
|
||||
## 當遊戲結束時返回主選單的過渡特效。
|
||||
config.end_game_transition = None
|
||||
|
||||
## Used when a game is loaded.
|
||||
## 在 load 畫面載入遊戲時採用的轉場方式。
|
||||
## 當一個進度被載入時的過渡特效。
|
||||
config.after_load_transition = None
|
||||
|
||||
## Used when the window is shown.
|
||||
## 顯式秀出對話框時使用的轉場方式(不過您目前還不知道怎麼操作)。
|
||||
## 當一個遊戲內視窗顯示時的過渡特效。
|
||||
## 注釋:遊戲內視窗多指文字方塊。
|
||||
config.window_show_transition = None
|
||||
|
||||
## Used when the window is hidden.
|
||||
## 顯式關閉對話框時使用的轉場方式(不過您目前還不知道怎麼操作)。
|
||||
## 當一個遊戲內視窗被隱藏時的過渡特效。
|
||||
config.window_hide_transition = None
|
||||
|
||||
## Used when showing NVL-mode text directly after ADV-mode text.
|
||||
## 當在 ADV-mode 文字後直接顯示 NVL-mode 文字時使用。
|
||||
## 當顯示完ADV-mode下的文本後直接轉為NVL-mode文本時的過渡特效。
|
||||
## 注釋:ADV-mode是指文本位於螢幕底部文字方塊中的遊戲模式,
|
||||
## NVL-mode是指文本全屏顯示的遊戲模式。
|
||||
config.adv_nvl_transition = dissolve
|
||||
|
||||
## Used when showing ADV-mode text directly after NVL-mode text.
|
||||
## 當在 NVL-mode 文字後直接顯示 ADV-mode 文字時使用。
|
||||
## 當顯示完NVL-mode的文本後直接轉為ADV-mode文本時的過渡特效。
|
||||
config.nvl_adv_transition = dissolve
|
||||
|
||||
## Used when yesno is shown.
|
||||
## 當顯示怒氣衝衝時使用。
|
||||
## 當確認取消按鈕出現時的過渡特效。
|
||||
config.enter_yesno_transition = None
|
||||
|
||||
## Used when the yesno is hidden.
|
||||
## 當怒氣衝衝處於隱藏狀態時使用。
|
||||
## 當確認取消按鈕隱藏時的過渡特效
|
||||
config.exit_yesno_transition = None
|
||||
|
||||
## Used when entering a replay
|
||||
## 當進入重播時使用
|
||||
## 當進入重播時的過渡特效。
|
||||
config.enter_replay_transition = None
|
||||
|
||||
## Used when exiting a replay
|
||||
## 當退出重播時使用
|
||||
## 當退出重播時的過渡特效。
|
||||
config.exit_replay_transition = None
|
||||
|
||||
## Used when the image is changed by a say statement with image attributes.
|
||||
## 圖像由對話語句向圖像屬性更改時使用。
|
||||
## 當圖像被say參數附帶屬性進行修改時的過渡特效。
|
||||
config.say_attribute_transition = None
|
||||
|
||||
#########################################
|
||||
## This is the name of the directory where the game's data is
|
||||
## stored. (It needs to be set early, before any other init code
|
||||
## is run, so the persistent information can be found by the init code.)
|
||||
## 遊戲資料存儲在硬碟中的路徑名稱。
|
||||
## 它需要及早設定,在初始化代碼運行之前,所以持續的資訊可以通過初始化代碼中找到。
|
||||
## 此處可使您修改遊戲存檔資料存放的目錄。
|
||||
## 這需要在遊戲開發之初,在任何init代碼都未被運行之前就進行設定,
|
||||
## 以便在init中找到正確的持久性資料資訊。
|
||||
python early:
|
||||
config.save_directory = "PROJECT_NAME-UNIQUE"
|
||||
|
||||
init -1 python hide:
|
||||
#########################################
|
||||
## Default values of Preferences.
|
||||
## 首選項的預設值。
|
||||
## 設定中的預設選項。
|
||||
|
||||
## Note: These options are only evaluated the first time a
|
||||
## game is run. To have them run a second time, delete
|
||||
## 注意:這些選項僅會在第一次運行遊戲時生效。
|
||||
## 若需要再生效一次,請刪除:
|
||||
## game/saves/persistent
|
||||
## 注釋:僅當運行的遊戲第一次來計算的值時,此選項才可用。
|
||||
## 如果你想要應用的修改後的遊戲值請返回到
|
||||
## game/saves/persistent 請刪除該檔。
|
||||
|
||||
## Should we start in fullscreen mode?
|
||||
## 全螢幕模式嗎?
|
||||
## 是否開啟全螢幕模式?
|
||||
|
||||
config.default_fullscreen = False
|
||||
|
||||
## The default text speed in characters per second. 0 is infinite.
|
||||
## 預設文本字元 / 秒的表示速度。0 表示無限。
|
||||
## 預設的每秒顯示文字數量,0為無限。
|
||||
|
||||
config.default_text_cps = 0
|
||||
|
||||
## The default auto-forward time setting.
|
||||
## 設定預設自動前進時間。
|
||||
## 預設的自動閱讀模式等待時間。
|
||||
|
||||
config.default_afm_time = 10
|
||||
|
||||
## 預設開啟換行後保持語音播放功能。
|
||||
|
||||
config.default_voice_sustain = True
|
||||
|
||||
#########################################
|
||||
## More customizations can go here.
|
||||
## 您可以從此處開始進行更多的自訂設定。
|
||||
## 注釋:以下為範本原文的追加代碼。
|
||||
|
||||
## 此選項可讓您使用滑鼠滾輪閱讀劇情。
|
||||
# config.keymap['dismiss'].append('mousedown_5')
|
||||
|
||||
## Windows 用標題列圖示設定。
|
||||
## 圖像尺寸必須為 32x32 。
|
||||
# config.windows_icon = "image/head.png"
|
||||
|
||||
## 圖像快取最高值設定。
|
||||
## 數量過高有可能導致遊戲崩潰。
|
||||
# config.image_cache_size = 8
|
||||
|
||||
## 設定跳過文字功能。
|
||||
## 無法停止暫時性跳過時,請設定為None。
|
||||
# config.allow_skipping = True
|
||||
|
||||
## 設定跳過文字的延遲時間。
|
||||
# config.skip_delay = 25
|
||||
|
||||
## 是否允許非開發者通過>鍵使用快速略過模式。
|
||||
## 注釋:快速略過模式非常快,所有未讀文字也將被略過。
|
||||
# config.fast_skipping = False
|
||||
|
||||
## 設定文字回滾功能。
|
||||
## 若需要持續回滾劇情,請使用renpy.block_rollback()。
|
||||
## hard_rollback_limit 參數記錄回滾的行數。
|
||||
# config.rollback_enabled = True
|
||||
# config.hard_rollback_limit = 500
|
||||
|
||||
## 修改存檔位的縮略圖解析度。
|
||||
# config.thumbnail_height = 75
|
||||
# config.thumbnail_width = 100
|
||||
|
||||
## 若角色圖片檔使用image命令顯示時,
|
||||
## 若此參數設定為True,則角色圖像僅以側邊圖(side image)
|
||||
## 形式呈現。
|
||||
# config.side_image_only_not_showing = False
|
||||
|
||||
## 預設圖層。
|
||||
# config.layers = [ 'master', 'transient', 'screens', 'overlay' ]
|
||||
|
||||
## 添加最上方圖層。
|
||||
## 此圖層不受過渡特效影響。
|
||||
# config.top_layers = [ ]
|
||||
|
||||
## 回滾劇情時使用NVL-mode。
|
||||
# config.nvl_paged_rollback = True
|
||||
|
||||
## 選項出現時使用NVL-mode。
|
||||
# menu = nvl_menu
|
||||
|
||||
## 設定是否允許通過滑鼠拖拽改變視窗大小。
|
||||
# config.gl_resize = False
|
||||
|
||||
## 遊戲啟動時視窗居中。
|
||||
# import os
|
||||
# os.environ['SDL_VIDEO_CENTERED'] = '1'
|
||||
|
||||
## 設定音樂預設的淡化(fade)時間。
|
||||
# config.fade_music = 0.0
|
||||
|
||||
## 定義一個角色語音存放的資料夾,在腳本中可以直接進行調用。
|
||||
## 定義以後,您只需輸入音訊的檔案名即可播放音訊。
|
||||
# config.auto_voice = "voice/{filename}.ogg"
|
||||
# config.voice_filename_format = "{filename}.ogg"
|
||||
|
||||
## 預設聲音通道。
|
||||
## file_prefix中填入路徑,file_suffix中填入尾碼名,
|
||||
## 即可實現僅需輸入檔案名就能重播聲音。
|
||||
# renpy.music.register_channel("music", mixer="music" loop = True, file_prefix="", file_suffix="")
|
||||
# renpy.music.register_channel("sound", mixer="sfx", loop = False, file_prefix="", file_suffix="")
|
||||
# renpy.music.register_channel("voice", mixer="voice", loop = False, file_prefix="", file_suffix="")
|
||||
|
||||
## 按鍵連按參數。
|
||||
## (.3,.03)的情況下,按住按鍵.3秒後,將會以.03秒為間隔自動連按。
|
||||
# config.key_repeat = (.3, .03)
|
||||
|
||||
|
||||
## 此區域控制您將如何產生一個釋出版本程式。
|
||||
|
||||
init python:
|
||||
|
||||
## 此參數用於修改發行版本壓縮檔與資料夾的名稱。
|
||||
## 假如設定為「mygame-1.0」,則將會在產生Windows釋出版本時自動將遊戲放置在
|
||||
## 「mygame-1.0-win」資料夾下,並產生mygame-1.0-win.zip的壓縮檔。
|
||||
## 產生其他平臺的釋出版本時除「win」字元以外其他依舊沿用此處設定。
|
||||
build.directory_name = "HANA-Build-1.0"
|
||||
|
||||
## 遊戲可執行程式的檔案名。
|
||||
## 例如設定為「mygame」時,則產生發行版本後,
|
||||
## 其遊戲目錄下可執行檔的檔案名將會為「mygame.exe」,
|
||||
build.executable_name = "SHIRAYUKI"
|
||||
|
||||
## 如果設定為True,則此Ren'py遊戲將包含升級資訊,
|
||||
## 使其允許升級程式運行。
|
||||
build.include_update = False
|
||||
|
||||
## 檔案模式:
|
||||
|
||||
## 以下功能稱作檔案模式,檔案模式對大小寫並不敏感,
|
||||
## 並且將「/」用於表示目錄的分層。
|
||||
## 若存在多個檔案模式,則優先使用第一個。
|
||||
|
||||
## 在檔案模式中:
|
||||
|
||||
## /
|
||||
## 這是一個目錄的分隔符號。
|
||||
|
||||
## *
|
||||
## 代表所有字元,除目錄分隔符號以外。
|
||||
|
||||
## **
|
||||
## 代表所有字元,包括目錄分隔符號。
|
||||
|
||||
## 例如:
|
||||
|
||||
## *.txt
|
||||
## 代表遊戲根目錄下的所有txt檔。
|
||||
|
||||
## game/**.ogg
|
||||
## 代表game資料夾下及其所有子資料夾中的ogg檔。
|
||||
|
||||
## **.psd
|
||||
## 代表專案中所有地方的psd檔。
|
||||
|
||||
## 定義為None的檔將不會被包含在分佈版中。
|
||||
|
||||
build.classify('**~', None)
|
||||
# build.classify('**.bak', None)
|
||||
# build.classify('**/.**', None)
|
||||
build.classify('**/#**', None)
|
||||
build.classify('**/thumbs.db', None)
|
||||
|
||||
## 此處用於定義遊戲資源封裝的名稱。
|
||||
## 注釋:您需要預先在此處預先定義封裝的名稱後,
|
||||
## 才能在下一個參數中設定使用對應名稱的封裝。
|
||||
# build.archive('script', 'all')
|
||||
# build.archive('image', 'all')
|
||||
# build.archive('bg', 'all')
|
||||
# build.archive('voice', 'all')
|
||||
# build.archive('char', 'all')
|
||||
# build.archive('sound', 'all')
|
||||
# build.archive('data', 'all')
|
||||
|
||||
## 若要將遊戲資源檔封裝,
|
||||
## 請將它們定義為「archive」。
|
||||
## 注釋:此處用於定義需要放進封裝的遊戲資源檔案清單,需要事先定義。
|
||||
## 同時,在上方定義好archive的名稱後,可以在下方直接使用自訂名稱。
|
||||
# build.classify('game/*.rpy', 'script')
|
||||
# build.classify('game/*.rpyc', 'script')
|
||||
# build.classify('game/*.rpyb', 'script')
|
||||
# build.classify('game/bg/*.png', 'image')
|
||||
# build.classify('game/char/*.png', 'image')
|
||||
# build.classify('game/image/*.png', 'image')
|
||||
# build.classify('game/voice/*.ogg', 'voice')
|
||||
# build.classify('game/sound/*.ogg', 'sound')
|
||||
# build.classify('game/data/**.*', 'data')
|
||||
# build.classify('game/data/mask/**.*', 'data')
|
||||
|
||||
## 符合documentation樣式的檔,
|
||||
## 在mac用分發版中同時包含在app與zip中。
|
||||
|
||||
build.documentation('*.html')
|
||||
build.documentation('*.txt')
|
||||
|
||||
## 定義一整個資料夾的圖像,在腳本中可直接使用檔案名進行調用,
|
||||
## 避免單個檔定義的繁瑣步驟。
|
||||
## 注釋:詳細使用方法請參閱官方文檔。
|
||||
# config.automatic_images = [ '/' ]
|
||||
# config.automatic_images_strip = [ '/' ]
|
||||
|
||||
## 打開行動平臺上的視頻硬體加速,提升視頻播放效能。
|
||||
## 理論上絕大多數平臺支援硬體加速功能。
|
||||
# config.hw_video = True
|
||||
|
||||
## 打開選擇肢自動封存功能,存檔將會放到Q.Save位置。
|
||||
# config.autosave_on_choice = True
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
# This file is in the public domain. Feel free to modify it as a basis
|
||||
# for your own screens.
|
||||
# 此檔屬於公共領域,
|
||||
# 請為屬於您的遊戲螢幕內容自由地定制。
|
||||
|
||||
##############################################################################
|
||||
# Say
|
||||
#
|
||||
# Screen that's used to display adv-mode dialogue.
|
||||
# 用於顯示adv-mode對話的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#say
|
||||
screen say:
|
||||
|
||||
# Defaults for side_image and two_window
|
||||
# 側邊圖(side_image)與雙文字方塊的預設值。
|
||||
default side_image = None
|
||||
default two_window = False
|
||||
|
||||
# Decide if we want to use the one-window or two-window variant.
|
||||
# 決定單文字方塊或雙文字方塊的變數:
|
||||
if not two_window:
|
||||
|
||||
# The one window variant.
|
||||
# 單文字方塊。
|
||||
window:
|
||||
id "window"
|
||||
|
||||
@@ -29,7 +29,7 @@ screen say:
|
||||
|
||||
else:
|
||||
|
||||
# The two window variant.
|
||||
# 雙文字方塊。
|
||||
vbox:
|
||||
style "say_two_window_vbox"
|
||||
|
||||
@@ -48,20 +48,20 @@ screen say:
|
||||
|
||||
text what id "what"
|
||||
|
||||
# If there's a side image, display it above the text.
|
||||
# 如果存在側邊圖,將其顯示于文字上方。
|
||||
if side_image:
|
||||
add side_image
|
||||
else:
|
||||
add SideImage() xalign 0.0 yalign 1.0
|
||||
|
||||
# Use the quick menu.
|
||||
# 使用快速選單。
|
||||
use quick_menu
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Choice
|
||||
#
|
||||
# Screen that's used to display in-game menus.
|
||||
# 顯示遊戲內選項的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#choice
|
||||
|
||||
screen choice:
|
||||
@@ -104,7 +104,7 @@ init -2:
|
||||
##############################################################################
|
||||
# Input
|
||||
#
|
||||
# Screen that's used to display renpy.input()
|
||||
# 用於顯示renpy.input()對應效果的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#input
|
||||
|
||||
screen input:
|
||||
@@ -120,7 +120,7 @@ screen input:
|
||||
##############################################################################
|
||||
# Nvl
|
||||
#
|
||||
# Screen used for nvl-mode dialogue and menus.
|
||||
# 用於顯示nvl-mode對話與選項的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#nvl
|
||||
|
||||
screen nvl:
|
||||
@@ -131,7 +131,7 @@ screen nvl:
|
||||
has vbox:
|
||||
style "nvl_vbox"
|
||||
|
||||
# Display dialogue.
|
||||
# 顯示對話。
|
||||
for who, what, who_id, what_id, window_id in dialogue:
|
||||
window:
|
||||
id window_id
|
||||
@@ -144,7 +144,7 @@ screen nvl:
|
||||
|
||||
text what id what_id
|
||||
|
||||
# Display a menu, if given.
|
||||
# 顯示選項,如果有。
|
||||
if items:
|
||||
|
||||
vbox:
|
||||
@@ -171,19 +171,19 @@ screen nvl:
|
||||
##############################################################################
|
||||
# Main Menu
|
||||
#
|
||||
# Screen that's used to display the main menu, when Ren'Py first starts
|
||||
# 用於初次啟動時顯示Ren'py遊戲主選單的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#main-menu
|
||||
|
||||
screen main_menu:
|
||||
|
||||
# This ensures that any other menu screen is replaced.
|
||||
# 確保其他的選單螢幕被替換。
|
||||
tag menu
|
||||
|
||||
# The background of the main menu.
|
||||
# 主選單背景。
|
||||
window:
|
||||
style "mm_root"
|
||||
|
||||
# The main menu buttons.
|
||||
# 主選單按鈕。
|
||||
frame:
|
||||
style_group "mm"
|
||||
xalign .98
|
||||
@@ -199,7 +199,7 @@ screen main_menu:
|
||||
|
||||
init -2:
|
||||
|
||||
# Make all the main menu buttons be the same size.
|
||||
# 使所有選單按鈕的大小一致。
|
||||
style mm_button:
|
||||
size_group "mm"
|
||||
|
||||
@@ -208,16 +208,17 @@ init -2:
|
||||
##############################################################################
|
||||
# Navigation
|
||||
#
|
||||
# Screen that's included in other screens to display the game menu
|
||||
# navigation and background.
|
||||
# 遊戲螢幕內的另一個螢幕,用於顯示
|
||||
# 遊戲選項的導航與背景。
|
||||
# 注釋:參見Ren'py引擎SDK附帶的tutorial。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#navigation
|
||||
screen navigation:
|
||||
|
||||
# The background of the game menu.
|
||||
# 遊戲選單的背景。
|
||||
window:
|
||||
style "gm_root"
|
||||
|
||||
# The various buttons.
|
||||
# 不同的按鈕。
|
||||
frame:
|
||||
style_group "gm_nav"
|
||||
xalign .98
|
||||
@@ -235,7 +236,7 @@ screen navigation:
|
||||
|
||||
init -2:
|
||||
|
||||
# Make all game menu navigation buttons the same size.
|
||||
# 使所有導航選項按鈕大小相同。
|
||||
style gm_nav_button:
|
||||
size_group "gm_nav"
|
||||
|
||||
@@ -243,13 +244,13 @@ init -2:
|
||||
##############################################################################
|
||||
# Save, Load
|
||||
#
|
||||
# Screens that allow the user to save and load the game.
|
||||
# 使用者能夠存檔與讀檔的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#save
|
||||
# http://www.renpy.org/doc/html/screen_special.html#load
|
||||
|
||||
# Since saving and loading are so similar, we combine them into
|
||||
# a single screen, file_picker. We then use the file_picker screen
|
||||
# from simple load and save screens.
|
||||
# 因為存檔與讀檔都非常相似,
|
||||
# 因此我們將它們混合到一個螢幕中,file_picker。
|
||||
# 於是我們就用file_picker螢幕來實現簡單的存檔與讀檔。
|
||||
|
||||
screen file_picker:
|
||||
|
||||
@@ -258,8 +259,8 @@ screen file_picker:
|
||||
|
||||
has vbox
|
||||
|
||||
# The buttons at the top allow the user to pick a
|
||||
# page of files.
|
||||
# 頂部的按鈕可允許使用者選擇
|
||||
# 存檔的頁數。
|
||||
hbox:
|
||||
style_group "file_picker_nav"
|
||||
|
||||
@@ -282,23 +283,23 @@ screen file_picker:
|
||||
$ columns = 2
|
||||
$ rows = 5
|
||||
|
||||
# Display a grid of file slots.
|
||||
# 顯示存檔位網格。
|
||||
grid columns rows:
|
||||
transpose True
|
||||
xfill True
|
||||
style_group "file_picker"
|
||||
|
||||
# Display ten file slots, numbered 1 - 10.
|
||||
# 顯示十個存檔位,編號為1-10。
|
||||
for i in range(1, columns * rows + 1):
|
||||
|
||||
# Each file slot is a button.
|
||||
# 每個存檔位都是一個按鈕。
|
||||
button:
|
||||
action FileAction(i)
|
||||
xfill True
|
||||
|
||||
has hbox
|
||||
|
||||
# Add the screenshot.
|
||||
# 添加螢幕截圖。
|
||||
add FileScreenshot(i)
|
||||
|
||||
$ file_name = FileSlotName(i, columns * rows)
|
||||
@@ -312,7 +313,7 @@ screen file_picker:
|
||||
|
||||
screen save:
|
||||
|
||||
# This ensures that any other menu screen is replaced.
|
||||
# 確保其他任何選單都被覆蓋。
|
||||
tag menu
|
||||
|
||||
use navigation
|
||||
@@ -320,7 +321,7 @@ screen save:
|
||||
|
||||
screen load:
|
||||
|
||||
# This ensures that any other menu screen is replaced.
|
||||
# 確保其他任何選單都被覆蓋。
|
||||
tag menu
|
||||
|
||||
use navigation
|
||||
@@ -337,22 +338,22 @@ init -2:
|
||||
##############################################################################
|
||||
# Preferences
|
||||
#
|
||||
# Screen that allows the user to change the preferences.
|
||||
# 允許使用者更改偏好設置的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#prefereces
|
||||
|
||||
screen preferences:
|
||||
|
||||
tag menu
|
||||
|
||||
# Include the navigation.
|
||||
# 包含導航選項。
|
||||
use navigation
|
||||
|
||||
# Put the navigation columns in a three-wide grid.
|
||||
# 縱向放置導航選項于三個寬列中。
|
||||
grid 3 1:
|
||||
style_group "prefs"
|
||||
xfill True
|
||||
|
||||
# The left column.
|
||||
# 左側縱欄。
|
||||
vbox:
|
||||
frame:
|
||||
style_group "pref"
|
||||
@@ -383,7 +384,7 @@ screen preferences:
|
||||
|
||||
textbutton _("Joystick...") action Preference("joystick")
|
||||
|
||||
|
||||
# 中間縱欄
|
||||
vbox:
|
||||
frame:
|
||||
style_group "pref"
|
||||
@@ -416,7 +417,7 @@ screen preferences:
|
||||
|
||||
if config.has_voice:
|
||||
textbutton _("Wait for Voice") action Preference("wait for voice", "toggle")
|
||||
|
||||
# 右側縱欄
|
||||
vbox:
|
||||
frame:
|
||||
style_group "pref"
|
||||
@@ -475,7 +476,7 @@ init -2:
|
||||
##############################################################################
|
||||
# Yes/No Prompt
|
||||
#
|
||||
# Screen that asks the user a yes or no question.
|
||||
# 用於詢問使用者確定與否的螢幕。
|
||||
# http://www.renpy.org/doc/html/screen_special.html#yesno-prompt
|
||||
|
||||
screen yesno_prompt:
|
||||
@@ -509,7 +510,7 @@ screen yesno_prompt:
|
||||
textbutton _("Yes") action yes_action
|
||||
textbutton _("No") action no_action
|
||||
|
||||
# Right-click and escape answer "no".
|
||||
# 按右鍵進行回避並回答「否」。
|
||||
key "game_menu" action no_action
|
||||
|
||||
init -2:
|
||||
@@ -524,11 +525,12 @@ init -2:
|
||||
##############################################################################
|
||||
# Quick Menu
|
||||
#
|
||||
# A screen that's included by the default say screen, and adds quick access to
|
||||
# several useful functions.
|
||||
# 包含在預設的say螢幕中的螢幕,
|
||||
# 用於快速訪問某些實用功能。
|
||||
# 注釋:也就是文字方塊下方的存檔、讀檔等按鈕。
|
||||
screen quick_menu:
|
||||
|
||||
# Add an in-game quick menu.
|
||||
# 添加一個遊戲內快速訪問的選單。
|
||||
hbox:
|
||||
style_group "quick"
|
||||
|
||||
|
||||
@@ -1,21 +1,17 @@
|
||||
# You can place the script of your game in this file.
|
||||
# 此檔包含遊戲腳本。
|
||||
# 您可以在此編寫遊戲的腳本。
|
||||
|
||||
# Declare images below this line, using the image statement.
|
||||
# image 定義圖像使用門。
|
||||
# image命令可用於定義一個圖像。
|
||||
# eg. image eileen happy = "eileen_happy.png"
|
||||
|
||||
# Declare characters used by this game.
|
||||
# 定義在遊戲中使用的字元。
|
||||
define e = Character('艾琳', color="#c8ffc8")
|
||||
# define命令可定義遊戲中出現的角色名稱與對應文本顏色。
|
||||
define e = Character('Eileen', color="#c8ffc8")
|
||||
|
||||
|
||||
# The game starts here.
|
||||
# 遊戲從這裡開始。
|
||||
label start:
|
||||
|
||||
e "您已經創建了一個新的 Ren'Py 遊戲。"
|
||||
|
||||
e "一旦您添加了一個故事、 圖片和音樂,您可以將它發佈給全世界 !"
|
||||
e "當您添加一段故事, 圖片和音樂, 您就可以將它發佈給全世界!"
|
||||
|
||||
return
|
||||
|
||||
@@ -1,306 +1,21 @@
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00action_file.rpy:118
|
||||
# renpy/common/00action_file.rpy:142
|
||||
old "%b %d, %H:%M"
|
||||
new "%m月%d日, %H:%M"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00gltest.rpy:50
|
||||
old "Graphics Acceleration"
|
||||
new "圖形加速"
|
||||
|
||||
# renpy/common/00gltest.rpy:54
|
||||
old "Automatically Choose"
|
||||
new "自動選擇"
|
||||
|
||||
# renpy/common/00gltest.rpy:59
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "強制 Angle/DirectX 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:63
|
||||
old "Force OpenGL Renderer"
|
||||
new "強制 OpenGL 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:67
|
||||
old "Force Software Renderer"
|
||||
new "強制軟體渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:73
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "更改將會在下次啟動程式時生效。"
|
||||
|
||||
|
||||
# renpy/common/00gltest.rpy:112
|
||||
old "Performance Warning"
|
||||
new "效能警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:117
|
||||
old "This computer is using software rendering."
|
||||
new "該電腦正在使用軟體渲染。"
|
||||
|
||||
# renpy/common/00gltest.rpy:119
|
||||
old "This computer is not using shaders."
|
||||
new "該電腦沒有使用著色器"
|
||||
|
||||
# renpy/common/00gltest.rpy:121
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "該電腦圖形顯示緩慢。"
|
||||
|
||||
# renpy/common/00gltest.rpy:123
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "該電腦圖形顯示出錯:[problem]。"
|
||||
|
||||
# renpy/common/00gltest.rpy:128
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "目前的圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。升級 DirectX 可能會解決該問題。"
|
||||
|
||||
# renpy/common/00gltest.rpy:130
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new "目前圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。"
|
||||
|
||||
# renpy/common/00gltest.rpy:135
|
||||
old "Update DirectX"
|
||||
new "更新 DirectX"
|
||||
|
||||
# renpy/common/00gltest.rpy:141
|
||||
old "Continue, Show this warning again"
|
||||
new "繼續,下次再顯示該警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:145
|
||||
old "Continue, Don't show warning again"
|
||||
new "繼續,不再顯示該警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:171
|
||||
old "Updating DirectX."
|
||||
new "正在更新 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:175
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "DirectX 線上安裝已啟動。將會最小化到狀態列中。請按照說明安裝 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:179
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}警告:{/b} Microsoft's DirectX 線上安裝程式會預設安裝 Bing 瀏覽器工具列。如果您不需要安裝這個工具列,請取消勾選對應選項。"
|
||||
|
||||
# renpy/common/00gltest.rpy:183
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "當安裝完成後請點選下方來重新啟動應用程式。"
|
||||
|
||||
# renpy/common/00gltest.rpy:185
|
||||
old "Restart"
|
||||
new "重新啟動"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00keymap.rpy:167
|
||||
old "Saved screenshot as %s."
|
||||
new "儲存螢幕截圖為 %s。"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00layout.rpy:439
|
||||
old "Are you sure?"
|
||||
new "是否確認?"
|
||||
|
||||
# renpy/common/00layout.rpy:443
|
||||
old "Are you sure you want to quit?"
|
||||
new "您確定您要離開嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:444
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "您確定您想回到標題畫面嗎?\n這將使您失去所有未儲存的進度。"
|
||||
|
||||
# renpy/common/00layout.rpy:441
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "您確定您要覆寫您的存檔?"
|
||||
|
||||
# renpy/common/00layout.rpy:442
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "載入將會失去所有未儲存的進度。\n您確定您要這麼做嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:440
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "您確定您要刪掉這份存檔嗎?"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00library.rpy:77
|
||||
old "Skip Mode"
|
||||
new "跳過對話模式"
|
||||
|
||||
# renpy/common/00library.rpy:80
|
||||
old "Fast Skip Mode"
|
||||
new "快速跳過對話模式"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00updater.rpy:1258
|
||||
old "Updater"
|
||||
new "更新"
|
||||
|
||||
# renpy/common/00updater.rpy:1267
|
||||
old "This program is up to date."
|
||||
new "該程式已是最新版本。"
|
||||
|
||||
# renpy/common/00updater.rpy:1269
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] 已釋出。是否確認安裝?"
|
||||
|
||||
# renpy/common/00updater.rpy:1271
|
||||
old "Preparing to download the updates."
|
||||
new "正在準備下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1273
|
||||
old "Downloading the updates."
|
||||
new "正在下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1275
|
||||
old "Unpacking the updates."
|
||||
new "解壓縮更新檔案。"
|
||||
|
||||
# renpy/common/00updater.rpy:1279
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "該更新檔案已安裝,程式將會重新啟動。"
|
||||
|
||||
# renpy/common/00updater.rpy:1281
|
||||
old "The updates have been installed."
|
||||
new "已完成更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1283
|
||||
old "The updates were cancelled."
|
||||
new "已取消更新。"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/_compat/preferences.rpym:411
|
||||
old "Joystick Mapping"
|
||||
new "遊戲桿映射"
|
||||
|
||||
translate None strings:
|
||||
|
||||
|
||||
# renpy/common/_errorhandling.rpym:408
|
||||
old "An exception has occurred."
|
||||
new "發生一個異常狀況。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:434
|
||||
old "Rollback"
|
||||
new "回滾"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:436
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "嘗試回滾到先前的狀態,使您可以存檔或者選擇不同選項。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:439
|
||||
old "Ignore"
|
||||
new "忽略"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:441
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "忽略異常,讓您可以繼續。這通常會產生額外的錯誤。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:444
|
||||
old "Reload"
|
||||
new "重新載入"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:446
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "從硬碟重新載入遊戲,請您儲存遊戲狀態。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:448
|
||||
old "Open Traceback"
|
||||
new "開啟回溯"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:450
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "在編輯器中開啟回溯檔案(traceback.txt)。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:456
|
||||
old "Quits the game."
|
||||
new "離開遊戲。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:483
|
||||
old "Parsing the script failed."
|
||||
new "解析腳本失敗。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:510
|
||||
old "Open Parse Errors"
|
||||
new "開啟解析錯誤"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:512
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "在編輯器中開啟解析錯誤檔案(errors.txt)。"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:152
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:161
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00action_file.rpy:587
|
||||
# renpy/common/00action_file.rpy:621
|
||||
old "Quick save complete."
|
||||
new "快速儲存。"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00gallery.rpy:521
|
||||
old "Image [index] of [count] locked."
|
||||
new "[count]個圖片中的第[index]個圖片被鎖定。"
|
||||
|
||||
# renpy/common/00gallery.rpy:539
|
||||
old "prev"
|
||||
new "上一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:540
|
||||
old "next"
|
||||
new "下一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:541
|
||||
old "slideshow"
|
||||
new "幻燈片"
|
||||
|
||||
# renpy/common/00gallery.rpy:542
|
||||
old "return"
|
||||
new "返回"
|
||||
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00layout.rpy:427
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "是否確定開始略過?"
|
||||
|
||||
# renpy/common/00layout.rpy:428
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "是否確定跳到下一個選項?"
|
||||
|
||||
# renpy/common/00layout.rpy:429
|
||||
old "Are you sure you want to skip to unseen dialogue or the next choice?"
|
||||
new "是否確定略過未看過的訊息或下一選項?"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00console.rpy:179
|
||||
old "%(version)s console, originally by Shiz, C, and delta.\n"
|
||||
new "%(version)s 控制臺,作者: Shiz, C, delta。"
|
||||
new "%(version)s 控制臺, 作者: Shiz, C, delta\n"
|
||||
|
||||
# renpy/common/00console.rpy:180
|
||||
old "Press <esc> to exit console. Type help for help.\n"
|
||||
@@ -324,11 +39,11 @@ translate None strings:
|
||||
|
||||
# renpy/common/00console.rpy:407
|
||||
old " <renpy script statement>: run the statement\n"
|
||||
new " <renpy script statement>:運行語句\n"
|
||||
new "<Ren'py 腳本語句>: 運行語句\n"
|
||||
|
||||
# renpy/common/00console.rpy:409
|
||||
old " <python expression or statement>: run the expression or statement"
|
||||
new " <python expression or statement>:運行運算式或語句"
|
||||
new " <Python 運算式或語句>: 運行運算式或語句"
|
||||
|
||||
# renpy/common/00console.rpy:417
|
||||
old "clear: clear the console history"
|
||||
@@ -340,11 +55,11 @@ translate None strings:
|
||||
|
||||
# renpy/common/00console.rpy:429
|
||||
old "load <slot>: loads the game from slot"
|
||||
new "load <slot>:載入遊戲存檔(以 slot 為存檔號)"
|
||||
new "load <檔位>: 從檔位載入遊戲"
|
||||
|
||||
# renpy/common/00console.rpy:442
|
||||
old "save <slot>: saves the game in slot"
|
||||
new "save <slot>:儲存遊戲存檔(以 slot 為存檔號)"
|
||||
new "save <檔位>: 保存遊戲到檔位"
|
||||
|
||||
# renpy/common/00console.rpy:453
|
||||
old "reload: reloads the game, refreshing the scripts"
|
||||
@@ -352,20 +67,309 @@ translate None strings:
|
||||
|
||||
# renpy/common/00console.rpy:461
|
||||
old "watch <expression>: watch a python expression"
|
||||
new "watch <expression>: 監視一個 python 運算式"
|
||||
new "watch <運算式>: 監視一個 python 運算式"
|
||||
|
||||
# renpy/common/00console.rpy:470
|
||||
old "unwatch <expression>: stop watching an expression"
|
||||
new "unwatch <expression>:停止監視某個運算式"
|
||||
new "unwatch <運算式>: 停止監視某個運算式"
|
||||
|
||||
# renpy/common/00console.rpy:478
|
||||
old "unwatchall: stop watching all expressions"
|
||||
new "unwatchall:停止監視索引運算式"
|
||||
new "unwatchall: 停止監視索引運算式"
|
||||
|
||||
# renpy/common/00console.rpy:484
|
||||
old "jump <label>: jumps to label"
|
||||
new "jump <label>: 跳移至標籤"
|
||||
new "jump <標籤>: 跳移至標籤"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00gallery.rpy:561
|
||||
old "Image [index] of [count] locked."
|
||||
new "[count] 個圖片中的第 [index] 個圖片被鎖定。"
|
||||
|
||||
# renpy/common/00gallery.rpy:581
|
||||
old "prev"
|
||||
new "上一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:582
|
||||
old "next"
|
||||
new "下一頁"
|
||||
|
||||
# renpy/common/00gallery.rpy:583
|
||||
old "slideshow"
|
||||
new "幻燈片"
|
||||
|
||||
# renpy/common/00gallery.rpy:584
|
||||
old "return"
|
||||
new "返回"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00gltest.rpy:68
|
||||
old "Graphics Acceleration"
|
||||
new "圖形加速"
|
||||
|
||||
# renpy/common/00gltest.rpy:72
|
||||
old "Automatically Choose"
|
||||
new "自動選擇"
|
||||
|
||||
# renpy/common/00gltest.rpy:77
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "強制 Angle/DirectX 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:81
|
||||
old "Force OpenGL Renderer"
|
||||
new "強制 OpenGL 渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:85
|
||||
old "Force Software Renderer"
|
||||
new "強制軟體渲染"
|
||||
|
||||
# renpy/common/00gltest.rpy:91
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "變更將會在下次啟動程式時生效。"
|
||||
|
||||
# renpy/common/00gltest.rpy:130
|
||||
old "Performance Warning"
|
||||
new "效能警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:135
|
||||
old "This computer is using software rendering."
|
||||
new "該電腦正在使用軟體渲染。"
|
||||
|
||||
# renpy/common/00gltest.rpy:137
|
||||
old "This computer is not using shaders."
|
||||
new "該電腦沒有使用著色器"
|
||||
|
||||
# renpy/common/00gltest.rpy:139
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "該電腦圖形顯示緩慢。"
|
||||
|
||||
# renpy/common/00gltest.rpy:141
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "該電腦圖形顯示出錯:[problem]。"
|
||||
|
||||
# renpy/common/00gltest.rpy:146
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "目前的圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。更新 DirectX 可能會解決該問題。"
|
||||
|
||||
# renpy/common/00gltest.rpy:148
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new "目前圖形驅動程式版本可能過舊或者運作不正確。這樣會導致圖形顯示緩慢或者錯誤。"
|
||||
|
||||
# renpy/common/00gltest.rpy:153
|
||||
old "Update DirectX"
|
||||
new "更新 DirectX"
|
||||
|
||||
# renpy/common/00gltest.rpy:159
|
||||
old "Continue, Show this warning again"
|
||||
new "繼續,下次再顯示此警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:163
|
||||
old "Continue, Don't show warning again"
|
||||
new "繼續,不再顯示此警告"
|
||||
|
||||
# renpy/common/00gltest.rpy:189
|
||||
old "Updating DirectX."
|
||||
new "正在更新 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:193
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "DirectX 線上安裝已啟動。將會最小化到狀態列中。請按照說明安裝 DirectX。"
|
||||
|
||||
# renpy/common/00gltest.rpy:197
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}警告:{/b} Microsoft's DirectX 線上安裝程式會預設安裝 Bing 瀏覽器工具列。如果您不需要安裝這個工具列,請取消勾選對應選項。"
|
||||
|
||||
# renpy/common/00gltest.rpy:201
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "當安裝完成後請點選下方來重新啟動應用程式。"
|
||||
|
||||
# renpy/common/00gltest.rpy:203
|
||||
old "Restart"
|
||||
new "重新啟動"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00keymap.rpy:206
|
||||
old "Saved screenshot as %s."
|
||||
new "儲存螢幕截圖為 %s。"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00layout.rpy:444
|
||||
old "Are you sure?"
|
||||
new "是否確認?"
|
||||
|
||||
# renpy/common/00layout.rpy:445
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "您確定您要刪掉這份存檔嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:446
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "您確定您要覆寫您的存檔?"
|
||||
|
||||
# renpy/common/00layout.rpy:447
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "載入將會失去所有未儲存的進度。\n您確定您要這麼做嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:448
|
||||
old "Are you sure you want to quit?"
|
||||
new "您確定您要離開嗎?"
|
||||
|
||||
# renpy/common/00layout.rpy:449
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "您確定您想回到標題畫面嗎?\n這將使您失去所有未儲存的進度。"
|
||||
|
||||
# renpy/common/00layout.rpy:450
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "是否確定開始略過?"
|
||||
|
||||
# renpy/common/00layout.rpy:451
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "是否確定跳到下一個選項?"
|
||||
|
||||
# renpy/common/00layout.rpy:452
|
||||
old "Are you sure you want to skip to unseen dialogue or the next choice?"
|
||||
new "是否確定略過未看過的訊息或下一選項?"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00library.rpy:149
|
||||
old "Skip Mode"
|
||||
new "略過對話模式"
|
||||
|
||||
# renpy/common/00library.rpy:152
|
||||
old "Fast Skip Mode"
|
||||
new "快速略過對話模式"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00preferences.rpy:387
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "Clipboard voicing 已啟用。按 'shift+C' 禁用"
|
||||
|
||||
# renpy/common/00preferences.rpy:389
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "Self-voicing 已啟用。按 'v' 禁用"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/00updater.rpy:362
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "Ren'Py 的更新不支援在行動裝置上使用。"
|
||||
|
||||
# renpy/common/00updater.rpy:478
|
||||
old "An error is being simulated."
|
||||
new "正在類比錯誤。"
|
||||
|
||||
# renpy/common/00updater.rpy:654
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "此專案不支援更新,或者更新狀態檔已被刪除。"
|
||||
|
||||
# renpy/common/00updater.rpy:668
|
||||
old "This account does not have permission to perform an update."
|
||||
new "此帳戶不具有執行更新的權限。"
|
||||
|
||||
# renpy/common/00updater.rpy:671
|
||||
old "This account does not have permission to write the update log."
|
||||
new "此帳戶沒有更新日誌的寫入權限。"
|
||||
|
||||
# renpy/common/00updater.rpy:696
|
||||
old "Could not verify update signature."
|
||||
new "無法驗證更新簽名。"
|
||||
|
||||
# renpy/common/00updater.rpy:956
|
||||
old "The update file was not downloaded."
|
||||
new "不下載更新檔。"
|
||||
|
||||
# renpy/common/00updater.rpy:974
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "無法驗證更新檔案 — 它可能已損壞。"
|
||||
|
||||
# renpy/common/00updater.rpy:1030
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "正在解壓缩 {},未知類型 {}。"
|
||||
|
||||
# renpy/common/00updater.rpy:1380
|
||||
old "Updater"
|
||||
new "更新"
|
||||
|
||||
# renpy/common/00updater.rpy:1385
|
||||
old "An error has occured:"
|
||||
new "一個錯誤發生:"
|
||||
|
||||
# renpy/common/00updater.rpy:1387
|
||||
old "Checking for updates."
|
||||
new "正在檢查更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1389
|
||||
old "This program is up to date."
|
||||
new "該程式已是最新版本。"
|
||||
|
||||
# renpy/common/00updater.rpy:1391
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] 已釋出。是否確認安裝?"
|
||||
|
||||
# renpy/common/00updater.rpy:1393
|
||||
old "Preparing to download the updates."
|
||||
new "正在準備下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1395
|
||||
old "Downloading the updates."
|
||||
new "正在下載更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1397
|
||||
old "Unpacking the updates."
|
||||
new "解壓縮更新檔案。"
|
||||
|
||||
# renpy/common/00updater.rpy:1399
|
||||
old "Finishing up."
|
||||
new "即將完成。"
|
||||
|
||||
# renpy/common/00updater.rpy:1401
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "該更新檔案已安裝,程式將會重新啟動。"
|
||||
|
||||
# renpy/common/00updater.rpy:1403
|
||||
old "The updates have been installed."
|
||||
new "已完成更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1405
|
||||
old "The updates were cancelled."
|
||||
new "已取消更新。"
|
||||
|
||||
# renpy/common/00updater.rpy:1419
|
||||
old "Proceed"
|
||||
new "繼續"
|
||||
|
||||
# renpy/common/00updater.rpy:1422
|
||||
old "Cancel"
|
||||
new "取消"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/_compat/preferences.rpym:428
|
||||
old "Joystick Mapping"
|
||||
new "遊戲桿映射"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
@@ -375,11 +379,11 @@ translate None strings:
|
||||
|
||||
# renpy/common/_developer/developer.rpym:67
|
||||
old "Reload Game (Shift+R)"
|
||||
new "重新載入遊戲(Shift+R)"
|
||||
new "重新載入遊戲 (Shift+R)"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:69
|
||||
old "Console (Shift+O)"
|
||||
new "控制臺(Shift+O)"
|
||||
new "控制臺 (Shift+O)"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:71
|
||||
old "Variable Viewer"
|
||||
@@ -405,72 +409,147 @@ translate None strings:
|
||||
old "Hide Image Load Log"
|
||||
new "隱藏圖片載入記錄"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:149
|
||||
# renpy/common/_developer/developer.rpym:150
|
||||
old "No variables have changed since the game started."
|
||||
new "遊戲開始至此沒有任何變數被改變。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:152
|
||||
# renpy/common/_developer/developer.rpym:153
|
||||
old "Return to the developer menu"
|
||||
new "回到開發者選單"
|
||||
|
||||
# renpy/c72
|
||||
old "{b}Missing Images{/b}"
|
||||
new "{b}丟失圖片{/b}"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:424
|
||||
# renpy/common/_developer/developer.rpym:398
|
||||
old "Rectangle: %r"
|
||||
new "矩形區域:%r"
|
||||
new "矩形區域: %r"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:429
|
||||
# renpy/common/_developer/developer.rpym:403
|
||||
old "Mouse position: %r"
|
||||
new "滑鼠位置:%r"
|
||||
new "滑鼠位置: %r"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:431
|
||||
# renpy/common/_developer/developer.rpym:408
|
||||
old "Right-click or escape to quit."
|
||||
new "點選滑鼠右鍵或者按 Esc 鍵來退出。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:482
|
||||
# renpy/common/_developer/developer.rpym:437
|
||||
old "Rectangle copied to clipboard."
|
||||
new "選擇區域複製到剪貼簿。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:440
|
||||
old "Position copied to clipboard."
|
||||
new "選擇位置複製到剪貼簿。"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:471
|
||||
old "Done"
|
||||
new "完成"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:43
|
||||
# renpy/common/_developer/inspector.rpym:46
|
||||
old "Displayable Inspector"
|
||||
new "Displayable 檢閱器"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:49
|
||||
# renpy/common/_developer/inspector.rpym:52
|
||||
old "Nothing to inspect."
|
||||
new "沒有東西被檢閱"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:58
|
||||
# renpy/common/_developer/inspector.rpym:70
|
||||
old "Size"
|
||||
new "大小"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:63
|
||||
# renpy/common/_developer/inspector.rpym:74
|
||||
old "Style"
|
||||
new "風格"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:123
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "檢閱[displayable_name!q]的風格"
|
||||
# renpy/common/_developer/inspector.rpym:80
|
||||
old "Location"
|
||||
new "位置"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:135
|
||||
old "displayable:"
|
||||
new "displayable"
|
||||
# renpy/common/_developer/inspector.rpym:142
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "檢閱 [displayable_name!q] 的風格"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:155
|
||||
old "displayable:"
|
||||
new "Displayable:"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:162
|
||||
old " (no properties affect the displayable)"
|
||||
new " (沒有偏好的可顯示屬性)"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:144
|
||||
# renpy/common/_developer/inspector.rpym:164
|
||||
old " (default properties omitted)"
|
||||
new " (忽略預設屬性)"
|
||||
new " (省略預設屬性)"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:174
|
||||
# renpy/common/_developer/inspector.rpym:206
|
||||
old "<repr() failed>"
|
||||
new "<repr() failed>"
|
||||
new "<repr() 失敗>"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/_errorhandling.rpym:450
|
||||
old "An exception has occurred."
|
||||
new "發生一個異常狀況。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:476
|
||||
old "Rollback"
|
||||
new "回滾"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:478
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "嘗試回滾到先前的狀態,使您可以存檔或者選擇不同選項。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:481
|
||||
old "Ignore"
|
||||
new "忽略"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:483
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "忽略異常,讓您可以繼續。這通常會產生額外的錯誤。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:486
|
||||
old "Reload"
|
||||
new "重新載入"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:488
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "從硬碟重新載入遊戲,請您儲存遊戲狀態。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:490
|
||||
old "Open Traceback"
|
||||
new "開啟回溯"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:492
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "在編輯器中開啟回溯檔案。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:498
|
||||
old "Quits the game."
|
||||
new "離開遊戲。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:525
|
||||
old "Parsing the script failed."
|
||||
new "解析腳本失敗。"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:552
|
||||
old "Open Parse Errors"
|
||||
new "開啟解析錯誤"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:554
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "在編輯器中開啟解析錯誤檔案。"
|
||||
|
||||
# TODO: Translation updated at 2015-03-26 20:17
|
||||
|
||||
translate None strings:
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:170
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:179
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
|
||||
@@ -175,4 +175,4 @@ translate None strings:
|
||||
|
||||
# game/screens.rpy:453
|
||||
old "Voice Sustain"
|
||||
new "聲音維持"
|
||||
new "聲音維持"
|
||||
Reference in New Issue
Block a user