├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── game ├── demos │ ├── color_picker.rpy │ └── waves.rpy ├── gui.rpy ├── gui │ ├── bar │ │ ├── bottom.png │ │ ├── left.png │ │ ├── right.png │ │ └── top.png │ ├── button │ │ ├── check_foreground.png │ │ ├── check_selected_foreground.png │ │ ├── choice_hover_background.png │ │ ├── choice_idle_background.png │ │ ├── hover_background.png │ │ ├── idle_background.png │ │ ├── quick_hover_background.png │ │ ├── quick_idle_background.png │ │ ├── radio_foreground.png │ │ ├── radio_selected_foreground.png │ │ ├── slot_hover_background.png │ │ └── slot_idle_background.png │ ├── frame.png │ ├── game_menu.png │ ├── main_menu.png │ ├── namebox.png │ ├── notify.png │ ├── nvl.png │ ├── overlay │ │ ├── confirm.png │ │ ├── game_menu.png │ │ └── main_menu.png │ ├── phone │ │ ├── bar │ │ │ ├── bottom.png │ │ │ ├── left.png │ │ │ ├── right.png │ │ │ └── top.png │ │ ├── button │ │ │ ├── check_foreground.png │ │ │ ├── check_selected_foreground.png │ │ │ ├── choice_hover_background.png │ │ │ ├── choice_idle_background.png │ │ │ ├── hover_background.png │ │ │ ├── idle_background.png │ │ │ ├── radio_foreground.png │ │ │ ├── radio_selected_foreground.png │ │ │ ├── slot_hover_background.png │ │ │ └── slot_idle_background.png │ │ ├── nvl.png │ │ ├── overlay │ │ │ ├── game_menu.png │ │ │ └── main_menu.png │ │ ├── scrollbar │ │ │ ├── horizontal_hover_bar.png │ │ │ ├── horizontal_hover_thumb.png │ │ │ ├── horizontal_idle_bar.png │ │ │ ├── horizontal_idle_thumb.png │ │ │ ├── vertical_hover_bar.png │ │ │ ├── vertical_hover_thumb.png │ │ │ ├── vertical_idle_bar.png │ │ │ └── vertical_idle_thumb.png │ │ ├── slider │ │ │ ├── horizontal_hover_bar.png │ │ │ ├── horizontal_hover_thumb.png │ │ │ ├── horizontal_idle_bar.png │ │ │ ├── horizontal_idle_thumb.png │ │ │ ├── vertical_hover_bar.png │ │ │ ├── vertical_hover_thumb.png │ │ │ ├── vertical_idle_bar.png │ │ │ └── vertical_idle_thumb.png │ │ └── textbox.png │ ├── scrollbar │ │ ├── horizontal_hover_bar.png │ │ ├── horizontal_hover_thumb.png │ │ ├── horizontal_idle_bar.png │ │ ├── horizontal_idle_thumb.png │ │ ├── vertical_hover_bar.png │ │ ├── vertical_hover_thumb.png │ │ ├── vertical_idle_bar.png │ │ └── vertical_idle_thumb.png │ ├── skip.png │ ├── slider │ │ ├── horizontal_hover_bar.png │ │ ├── horizontal_hover_thumb.png │ │ ├── horizontal_idle_bar.png │ │ ├── horizontal_idle_thumb.png │ │ ├── vertical_hover_bar.png │ │ ├── vertical_hover_thumb.png │ │ ├── vertical_idle_bar.png │ │ └── vertical_idle_thumb.png │ ├── textbox.png │ └── window_icon.png ├── images │ ├── color_picker │ │ ├── hue_picker.png │ │ └── sat_value_picker.png │ └── ext_beach_day.jpg ├── options.rpy ├── screens.rpy ├── script.rpy ├── shaders │ ├── color_picker.rpy │ ├── shader_helpers.rpy │ ├── utils.rpy │ └── waves.rpy └── tl │ └── None │ └── common.rpym └── preview_images └── color_picker.png /.gitignore: -------------------------------------------------------------------------------- 1 | # macOS-related files 2 | .DS_Store 3 | .AppleDouble 4 | .LSOverride 5 | 6 | # Windows-related files 7 | Thumbs.db 8 | Thumbs.db:encryptable 9 | ehthumbs.db 10 | ehthumbs_vista.db 11 | [Dd]esktop.ini 12 | 13 | # Python related files. 14 | *.pyc 15 | *.pyo 16 | *.pyi 17 | 18 | # Editor files. 19 | *~ 20 | *.bak 21 | 22 | # Compiled Ren'Py files. 23 | *.rpyc 24 | *.rpyb 25 | *.rpymc 26 | 27 | # Ren'Py log files. 28 | log.txt 29 | errors.txt 30 | traceback.txt 31 | lint.txt 32 | 33 | # Created directories. 34 | saves/ 35 | tmp/ 36 | cache/ 37 | 38 | # Executables. 39 | /renpy.exe 40 | /renpy2.exe 41 | /renpy3.exe 42 | /renpy-32.exe 43 | 44 | /renpy.sh 45 | /renpy2.sh 46 | /renpy3.sh 47 | 48 | /renpy2.app 49 | /renpy3.app 50 | 51 | # Libraries. 52 | /lib 53 | 54 | # Platforms. 55 | /rapt 56 | /rapt2 57 | /rapt3 58 | 59 | /renios 60 | /renios2 61 | /renios3 62 | 63 | /web 64 | 65 | # Docs. 66 | /sphinx/source/inc 67 | /sphinx/source/thequestion.rst 68 | /doc 69 | /doc-web 70 | /LICENSE.txt 71 | 72 | # Gui template. 73 | /gui/game/gui 74 | 75 | # Editors. 76 | /jedit 77 | /atom 78 | 79 | # Generated source. 80 | /renpy/vc_version.py 81 | /module/gen/ 82 | /module/gen3/ 83 | /module/gen-static/ 84 | /module/gen3-static/ 85 | /tutorial/game/tutorial_director.rpy 86 | 87 | # Module build. 88 | /module/build 89 | /module/dist 90 | /module/emscripten-static 91 | 92 | # Download target. 93 | /dl 94 | 95 | # Pygame_sdl2. 96 | /pygame_sdl2 97 | 98 | # Steam. 99 | steam_appid.txt 100 | 101 | # Type analysis. 102 | /typings 103 | 104 | 105 | # Live2D 106 | cubism 107 | CubismSdkForNative-4-*.zip 108 | 109 | # Created files. 110 | /launcher/theme 111 | /screenshot* 112 | .android.json 113 | 114 | # Old files. 115 | /0old 116 | 117 | # Works in progress, throwaway scripts, etc. 118 | /scratch -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "**/*.rpyc": true 4 | } 5 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 valery-iwanofu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ren'Py shader collection 2 | 3 | ## Available shaders: 4 | ### Waves ([Code](game/shaders/waves.rpy) | [Demo](game/demos/waves.rpy)) 5 | 6 | Usage: 7 | ``` 8 | TODO 9 | ``` 10 | ### Color picker ([Code](game/shaders/color_picker.rpy) | [Demo](game/demos/color_picker.rpy)) 11 | 12 | ![Preview](preview_images/color_picker.png) 13 | 14 | Usage: 15 | ```python 16 | default color = Color(rgb=(.33, .0, .33)) 17 | screen test_color_picker: 18 | use color_picker( 19 | VariableSimpleValue('color') 20 | ) 21 | ``` 22 | Also, you can use color picker components(like *SaturationValueRect*, *ColorPickerHueRect*, *collection.color_picker.sat_value_rect* shader, etc) separately -------------------------------------------------------------------------------- /game/demos/color_picker.rpy: -------------------------------------------------------------------------------- 1 | default color_picker_demo_color = Color('#922222') 2 | 3 | init python: 4 | def __color_picker_demo_bg(st, at): 5 | return Transform('images/ext_beach_day.jpg', matrixcolor=TintMatrix(color_picker_demo_color)), None 6 | 7 | image color_picker_demo_bg = DynamicDisplayable(__color_picker_demo_bg) 8 | 9 | screen color_picker_demo: 10 | frame: 11 | xalign .5 12 | yalign .5 13 | vbox: 14 | hbox: 15 | frame: 16 | xsize 300 17 | ysize 300 18 | background Solid(color_picker_demo_color) 19 | 20 | use color_picker( 21 | VariableSimpleValue('color_picker_demo_color') 22 | ) 23 | textbutton 'Return' action Return(True) 24 | 25 | label color_picker_demo: 26 | scene color_picker_demo_bg 27 | show screen color_picker_demo with dissolve 28 | 29 | $ ui.interact() 30 | 31 | hide screen color_picker_demo with dissolve 32 | 33 | return -------------------------------------------------------------------------------- /game/demos/waves.rpy: -------------------------------------------------------------------------------- 1 | default waves_demo_wave_size = 150.0 2 | default waves_demo_amplitude = 30.0 3 | 4 | init python: 5 | class ControlableWaves(WavesBase): 6 | def __init__(self, image, wave_size, amplitude, **kwargs): 7 | WavesBase.__init__(self, image, **kwargs) 8 | self._wave_size = wave_size 9 | self._amplitude = amplitude 10 | 11 | def _get_wave_size(self): 12 | return self._wave_size.get() 13 | 14 | def _get_amplitude(self): 15 | return self._amplitude.get() 16 | 17 | style waves_demo_field is hbox 18 | 19 | 20 | screen waves_demo: 21 | frame: 22 | xalign 1.0 23 | yoffset 32 24 | xoffset -32 25 | xsize 600 26 | 27 | vbox: 28 | vbox: 29 | text _('Wave size(%.3f):'% waves_demo_wave_size) 30 | bar style 'slider' value VariableValue('waves_demo_wave_size', 500.0) 31 | vbox: 32 | text _('Wave amplitude(%.3f):'% waves_demo_amplitude) 33 | bar style 'slider' value VariableValue('waves_demo_amplitude', 500.0) 34 | textbutton 'Return' xalign 1.0 action Return(True) 35 | 36 | label waves_demo: 37 | scene expression ControlableWaves('bg ext_beach_day', VariableSimpleValue('waves_demo_wave_size'), VariableSimpleValue('waves_demo_amplitude')) 38 | show screen waves_demo with dissolve 39 | 40 | $ ui.interact() 41 | 42 | hide screen waves_demo with dissolve 43 | 44 | return 45 | 46 | transform waves_demo_transform: 47 | contains waves_shader -------------------------------------------------------------------------------- /game/gui.rpy: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## Initialization 3 | ################################################################################ 4 | 5 | ## The init offset statement causes the initialization statements in this file 6 | ## to run before init statements in any other file. 7 | init offset = -2 8 | 9 | ## Calling gui.init resets the styles to sensible default values, and sets the 10 | ## width and height of the game. 11 | init python: 12 | gui.init(1920, 1080) 13 | 14 | 15 | 16 | ################################################################################ 17 | ## GUI Configuration Variables 18 | ################################################################################ 19 | 20 | 21 | ## Colors ###################################################################### 22 | ## 23 | ## The colors of text in the interface. 24 | 25 | ## An accent color used throughout the interface to label and highlight text. 26 | define gui.accent_color = u'#0099cc' 27 | 28 | ## The color used for a text button when it is neither selected nor hovered. 29 | define gui.idle_color = u'#888888' 30 | 31 | ## The small color is used for small text, which needs to be brighter/darker to 32 | ## achieve the same effect. 33 | define gui.idle_small_color = u'#aaaaaa' 34 | 35 | ## The color that is used for buttons and bars that are hovered. 36 | define gui.hover_color = u'#66c1e0' 37 | 38 | ## The color used for a text button when it is selected but not focused. A 39 | ## button is selected if it is the current screen or preference value. 40 | define gui.selected_color = u'#ffffff' 41 | 42 | ## The color used for a text button when it cannot be selected. 43 | define gui.insensitive_color = u'#8888887f' 44 | 45 | ## Colors used for the portions of bars that are not filled in. These are not 46 | ## used directly, but are used when re-generating bar image files. 47 | define gui.muted_color = u'#003d51' 48 | define gui.hover_muted_color = u'#005b7a' 49 | 50 | ## The colors used for dialogue and menu choice text. 51 | define gui.text_color = u'#ffffff' 52 | define gui.interface_text_color = u'#ffffff' 53 | 54 | 55 | ## Fonts and Font Sizes ######################################################## 56 | 57 | ## The font used for in-game text. 58 | define gui.text_font = "DejaVuSans.ttf" 59 | 60 | ## The font used for character names. 61 | define gui.name_text_font = "DejaVuSans.ttf" 62 | 63 | ## The font used for out-of-game text. 64 | define gui.interface_text_font = "DejaVuSans.ttf" 65 | 66 | ## The size of normal dialogue text. 67 | define gui.text_size = 33 68 | 69 | ## The size of character names. 70 | define gui.name_text_size = 45 71 | 72 | ## The size of text in the game's user interface. 73 | define gui.interface_text_size = 33 74 | 75 | ## The size of labels in the game's user interface. 76 | define gui.label_text_size = 36 77 | 78 | ## The size of text on the notify screen. 79 | define gui.notify_text_size = 24 80 | 81 | ## The size of the game's title. 82 | define gui.title_text_size = 75 83 | 84 | 85 | ## Main and Game Menus ######################################################### 86 | 87 | ## The images used for the main and game menus. 88 | define gui.main_menu_background = "gui/main_menu.png" 89 | define gui.game_menu_background = "gui/game_menu.png" 90 | 91 | 92 | ## Dialogue #################################################################### 93 | ## 94 | ## These variables control how dialogue is displayed on the screen one line at a 95 | ## time. 96 | 97 | ## The height of the textbox containing dialogue. 98 | define gui.textbox_height = 278 99 | 100 | ## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is 101 | ## center, and 1.0 is the bottom. 102 | define gui.textbox_yalign = 1.0 103 | 104 | 105 | ## The placement of the speaking character's name, relative to the textbox. 106 | ## These can be a whole number of pixels from the left or top, or 0.5 to center. 107 | define gui.name_xpos = 360 108 | define gui.name_ypos = 0 109 | 110 | ## The horizontal alignment of the character's name. This can be 0.0 for left- 111 | ## aligned, 0.5 for centered, and 1.0 for right-aligned. 112 | define gui.name_xalign = 0.0 113 | 114 | ## The width, height, and borders of the box containing the character's name, or 115 | ## None to automatically size it. 116 | define gui.namebox_width = None 117 | define gui.namebox_height = None 118 | 119 | ## The borders of the box containing the character's name, in left, top, right, 120 | ## bottom order. 121 | define gui.namebox_borders = Borders(5, 5, 5, 5) 122 | 123 | ## If True, the background of the namebox will be tiled, if False, the 124 | ## background of the namebox will be scaled. 125 | define gui.namebox_tile = False 126 | 127 | 128 | ## The placement of dialogue relative to the textbox. These can be a whole 129 | ## number of pixels relative to the left or top side of the textbox, or 0.5 to 130 | ## center. 131 | define gui.dialogue_xpos = 402 132 | define gui.dialogue_ypos = 75 133 | 134 | ## The maximum width of dialogue text, in pixels. 135 | define gui.dialogue_width = 1116 136 | 137 | ## The horizontal alignment of the dialogue text. This can be 0.0 for left- 138 | ## aligned, 0.5 for centered, and 1.0 for right-aligned. 139 | define gui.dialogue_text_xalign = 0.0 140 | 141 | 142 | ## Buttons ##################################################################### 143 | ## 144 | ## These variables, along with the image files in gui/button, control aspects of 145 | ## how buttons are displayed. 146 | 147 | ## The width and height of a button, in pixels. If None, Ren'Py computes a size. 148 | define gui.button_width = None 149 | define gui.button_height = None 150 | 151 | ## The borders on each side of the button, in left, top, right, bottom order. 152 | define gui.button_borders = Borders(6, 6, 6, 6) 153 | 154 | ## If True, the background image will be tiled. If False, the background image 155 | ## will be linearly scaled. 156 | define gui.button_tile = False 157 | 158 | ## The font used by the button. 159 | define gui.button_text_font = gui.interface_text_font 160 | 161 | ## The size of the text used by the button. 162 | define gui.button_text_size = gui.interface_text_size 163 | 164 | ## The color of button text in various states. 165 | define gui.button_text_idle_color = gui.idle_color 166 | define gui.button_text_hover_color = gui.hover_color 167 | define gui.button_text_selected_color = gui.selected_color 168 | define gui.button_text_insensitive_color = gui.insensitive_color 169 | 170 | ## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0 171 | ## is right). 172 | define gui.button_text_xalign = 0.0 173 | 174 | 175 | ## These variables override settings for different kinds of buttons. Please see 176 | ## the gui documentation for the kinds of buttons available, and what each is 177 | ## used for. 178 | ## 179 | ## These customizations are used by the default interface: 180 | 181 | define gui.radio_button_borders = Borders(27, 6, 6, 6) 182 | 183 | define gui.check_button_borders = Borders(27, 6, 6, 6) 184 | 185 | define gui.confirm_button_text_xalign = 0.5 186 | 187 | define gui.page_button_borders = Borders(15, 6, 15, 6) 188 | 189 | define gui.quick_button_borders = Borders(15, 6, 15, 0) 190 | define gui.quick_button_text_size = 21 191 | define gui.quick_button_text_idle_color = gui.idle_small_color 192 | define gui.quick_button_text_selected_color = gui.accent_color 193 | 194 | ## You can also add your own customizations, by adding properly-named variables. 195 | ## For example, you can uncomment the following line to set the width of a 196 | ## navigation button. 197 | 198 | # define gui.navigation_button_width = 250 199 | 200 | 201 | ## Choice Buttons ############################################################## 202 | ## 203 | ## Choice buttons are used in the in-game menus. 204 | 205 | define gui.choice_button_width = 1185 206 | define gui.choice_button_height = None 207 | define gui.choice_button_tile = False 208 | define gui.choice_button_borders = Borders(150, 8, 150, 8) 209 | define gui.choice_button_text_font = gui.text_font 210 | define gui.choice_button_text_size = gui.text_size 211 | define gui.choice_button_text_xalign = 0.5 212 | define gui.choice_button_text_idle_color = "#cccccc" 213 | define gui.choice_button_text_hover_color = "#ffffff" 214 | define gui.choice_button_text_insensitive_color = "#444444" 215 | 216 | 217 | ## File Slot Buttons ########################################################### 218 | ## 219 | ## A file slot button is a special kind of button. It contains a thumbnail 220 | ## image, and text describing the contents of the save slot. A save slot uses 221 | ## image files in gui/button, like the other kinds of buttons. 222 | 223 | ## The save slot button. 224 | define gui.slot_button_width = 414 225 | define gui.slot_button_height = 309 226 | define gui.slot_button_borders = Borders(15, 15, 15, 15) 227 | define gui.slot_button_text_size = 21 228 | define gui.slot_button_text_xalign = 0.5 229 | define gui.slot_button_text_idle_color = gui.idle_small_color 230 | define gui.slot_button_text_selected_idle_color = gui.selected_color 231 | define gui.slot_button_text_selected_hover_color = gui.hover_color 232 | 233 | ## The width and height of thumbnails used by the save slots. 234 | define config.thumbnail_width = 384 235 | define config.thumbnail_height = 216 236 | 237 | ## The number of columns and rows in the grid of save slots. 238 | define gui.file_slot_cols = 3 239 | define gui.file_slot_rows = 2 240 | 241 | 242 | ## Positioning and Spacing ##################################################### 243 | ## 244 | ## These variables control the positioning and spacing of various user interface 245 | ## elements. 246 | 247 | ## The position of the left side of the navigation buttons, relative to the left 248 | ## side of the screen. 249 | define gui.navigation_xpos = 60 250 | 251 | ## The vertical position of the skip indicator. 252 | define gui.skip_ypos = 15 253 | 254 | ## The vertical position of the notify screen. 255 | define gui.notify_ypos = 68 256 | 257 | ## The spacing between menu choices. 258 | define gui.choice_spacing = 33 259 | 260 | ## Buttons in the navigation section of the main and game menus. 261 | define gui.navigation_spacing = 6 262 | 263 | ## Controls the amount of spacing between preferences. 264 | define gui.pref_spacing = 15 265 | 266 | ## Controls the amount of spacing between preference buttons. 267 | define gui.pref_button_spacing = 0 268 | 269 | ## The spacing between file page buttons. 270 | define gui.page_spacing = 0 271 | 272 | ## The spacing between file slots. 273 | define gui.slot_spacing = 15 274 | 275 | ## The position of the main menu text. 276 | define gui.main_menu_text_xalign = 1.0 277 | 278 | 279 | ## Frames ###################################################################### 280 | ## 281 | ## These variables control the look of frames that can contain user interface 282 | ## components when an overlay or window is not present. 283 | 284 | ## Generic frames. 285 | define gui.frame_borders = Borders(6, 6, 6, 6) 286 | 287 | ## The frame that is used as part of the confirm screen. 288 | define gui.confirm_frame_borders = Borders(60, 60, 60, 60) 289 | 290 | ## The frame that is used as part of the skip screen. 291 | define gui.skip_frame_borders = Borders(24, 8, 75, 8) 292 | 293 | ## The frame that is used as part of the notify screen. 294 | define gui.notify_frame_borders = Borders(24, 8, 60, 8) 295 | 296 | ## Should frame backgrounds be tiled? 297 | define gui.frame_tile = False 298 | 299 | 300 | ## Bars, Scrollbars, and Sliders ############################################### 301 | ## 302 | ## These control the look and size of bars, scrollbars, and sliders. 303 | ## 304 | ## The default GUI only uses sliders and vertical scrollbars. All of the other 305 | ## bars are only used in creator-written screens. 306 | 307 | ## The height of horizontal bars, scrollbars, and sliders. The width of vertical 308 | ## bars, scrollbars, and sliders. 309 | define gui.bar_size = 38 310 | define gui.scrollbar_size = 18 311 | define gui.slider_size = 38 312 | 313 | ## True if bar images should be tiled. False if they should be linearly scaled. 314 | define gui.bar_tile = False 315 | define gui.scrollbar_tile = False 316 | define gui.slider_tile = False 317 | 318 | ## Horizontal borders. 319 | define gui.bar_borders = Borders(6, 6, 6, 6) 320 | define gui.scrollbar_borders = Borders(6, 6, 6, 6) 321 | define gui.slider_borders = Borders(6, 6, 6, 6) 322 | 323 | ## Vertical borders. 324 | define gui.vbar_borders = Borders(6, 6, 6, 6) 325 | define gui.vscrollbar_borders = Borders(6, 6, 6, 6) 326 | define gui.vslider_borders = Borders(6, 6, 6, 6) 327 | 328 | ## What to do with unscrollable scrollbars in the gui. "hide" hides them, while 329 | ## None shows them. 330 | define gui.unscrollable = "hide" 331 | 332 | 333 | ## History ##################################################################### 334 | ## 335 | ## The history screen displays dialogue that the player has already dismissed. 336 | 337 | ## The number of blocks of dialogue history Ren'Py will keep. 338 | define config.history_length = 250 339 | 340 | ## The height of a history screen entry, or None to make the height variable at 341 | ## the cost of performance. 342 | define gui.history_height = 210 343 | 344 | ## The position, width, and alignment of the label giving the name of the 345 | ## speaking character. 346 | define gui.history_name_xpos = 233 347 | define gui.history_name_ypos = 0 348 | define gui.history_name_width = 233 349 | define gui.history_name_xalign = 1.0 350 | 351 | ## The position, width, and alignment of the dialogue text. 352 | define gui.history_text_xpos = 255 353 | define gui.history_text_ypos = 3 354 | define gui.history_text_width = 1110 355 | define gui.history_text_xalign = 0.0 356 | 357 | 358 | ## NVL-Mode #################################################################### 359 | ## 360 | ## The NVL-mode screen displays the dialogue spoken by NVL-mode characters. 361 | 362 | ## The borders of the background of the NVL-mode background window. 363 | define gui.nvl_borders = Borders(0, 15, 0, 30) 364 | 365 | ## The maximum number of NVL-mode entries Ren'Py will display. When more entries 366 | ## than this are to be show, the oldest entry will be removed. 367 | define gui.nvl_list_length = 6 368 | 369 | ## The height of an NVL-mode entry. Set this to None to have the entries 370 | ## dynamically adjust height. 371 | define gui.nvl_height = 173 372 | 373 | ## The spacing between NVL-mode entries when gui.nvl_height is None, and between 374 | ## NVL-mode entries and an NVL-mode menu. 375 | define gui.nvl_spacing = 15 376 | 377 | ## The position, width, and alignment of the label giving the name of the 378 | ## speaking character. 379 | define gui.nvl_name_xpos = 645 380 | define gui.nvl_name_ypos = 0 381 | define gui.nvl_name_width = 225 382 | define gui.nvl_name_xalign = 1.0 383 | 384 | ## The position, width, and alignment of the dialogue text. 385 | define gui.nvl_text_xpos = 675 386 | define gui.nvl_text_ypos = 12 387 | define gui.nvl_text_width = 885 388 | define gui.nvl_text_xalign = 0.0 389 | 390 | ## The position, width, and alignment of nvl_thought text (the text said by the 391 | ## nvl_narrator character.) 392 | define gui.nvl_thought_xpos = 360 393 | define gui.nvl_thought_ypos = 0 394 | define gui.nvl_thought_width = 1170 395 | define gui.nvl_thought_xalign = 0.0 396 | 397 | ## The position of nvl menu_buttons. 398 | define gui.nvl_button_xpos = 675 399 | define gui.nvl_button_xalign = 0.0 400 | 401 | ## Localization ################################################################ 402 | 403 | ## This controls where a line break is permitted. The default is suitable 404 | ## for most languages. A list of available values can be found at https:// 405 | ## www.renpy.org/doc/html/style_properties.html#style-property-language 406 | 407 | define gui.language = "unicode" 408 | 409 | 410 | ################################################################################ 411 | ## Mobile devices 412 | ################################################################################ 413 | 414 | init python: 415 | 416 | ## This increases the size of the quick buttons to make them easier to touch 417 | ## on tablets and phones. 418 | if renpy.variant("touch"): 419 | 420 | gui.quick_button_borders = Borders(60, 21, 60, 0) 421 | 422 | ## This changes the size and spacing of various GUI elements to ensure they 423 | ## are easily visible on phones. 424 | if renpy.variant("small"): 425 | 426 | ## Font sizes. 427 | gui.text_size = 45 428 | gui.name_text_size = 54 429 | gui.notify_text_size = 38 430 | gui.interface_text_size = 45 431 | gui.button_text_size = 45 432 | gui.label_text_size = 51 433 | 434 | ## Adjust the location of the textbox. 435 | gui.textbox_height = 360 436 | gui.name_xpos = 120 437 | gui.dialogue_xpos = 135 438 | gui.dialogue_width = 1650 439 | 440 | ## Change the size and spacing of various things. 441 | gui.slider_size = 54 442 | 443 | gui.choice_button_width = 1860 444 | gui.choice_button_text_size = 45 445 | 446 | gui.navigation_spacing = 30 447 | gui.pref_button_spacing = 15 448 | 449 | gui.history_height = 285 450 | gui.history_text_width = 1035 451 | 452 | gui.quick_button_text_size = 30 453 | 454 | ## File button layout. 455 | gui.file_slot_cols = 2 456 | gui.file_slot_rows = 2 457 | 458 | ## NVL-mode. 459 | gui.nvl_height = 255 460 | 461 | gui.nvl_name_width = 458 462 | gui.nvl_name_xpos = 488 463 | 464 | gui.nvl_text_width = 1373 465 | gui.nvl_text_xpos = 518 466 | gui.nvl_text_ypos = 8 467 | 468 | gui.nvl_thought_width = 1860 469 | gui.nvl_thought_xpos = 30 470 | 471 | gui.nvl_button_width = 1860 472 | gui.nvl_button_xpos = 30 473 | 474 | 475 | 476 | -------------------------------------------------------------------------------- /game/gui/bar/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/bar/bottom.png -------------------------------------------------------------------------------- /game/gui/bar/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/bar/left.png -------------------------------------------------------------------------------- /game/gui/bar/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/bar/right.png -------------------------------------------------------------------------------- /game/gui/bar/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/bar/top.png -------------------------------------------------------------------------------- /game/gui/button/check_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/check_foreground.png -------------------------------------------------------------------------------- /game/gui/button/check_selected_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/check_selected_foreground.png -------------------------------------------------------------------------------- /game/gui/button/choice_hover_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/choice_hover_background.png -------------------------------------------------------------------------------- /game/gui/button/choice_idle_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/choice_idle_background.png -------------------------------------------------------------------------------- /game/gui/button/hover_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/hover_background.png -------------------------------------------------------------------------------- /game/gui/button/idle_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/idle_background.png -------------------------------------------------------------------------------- /game/gui/button/quick_hover_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/quick_hover_background.png -------------------------------------------------------------------------------- /game/gui/button/quick_idle_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/quick_idle_background.png -------------------------------------------------------------------------------- /game/gui/button/radio_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/radio_foreground.png -------------------------------------------------------------------------------- /game/gui/button/radio_selected_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/radio_selected_foreground.png -------------------------------------------------------------------------------- /game/gui/button/slot_hover_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/slot_hover_background.png -------------------------------------------------------------------------------- /game/gui/button/slot_idle_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/button/slot_idle_background.png -------------------------------------------------------------------------------- /game/gui/frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/frame.png -------------------------------------------------------------------------------- /game/gui/game_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/game_menu.png -------------------------------------------------------------------------------- /game/gui/main_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/main_menu.png -------------------------------------------------------------------------------- /game/gui/namebox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/namebox.png -------------------------------------------------------------------------------- /game/gui/notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/notify.png -------------------------------------------------------------------------------- /game/gui/nvl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/nvl.png -------------------------------------------------------------------------------- /game/gui/overlay/confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/overlay/confirm.png -------------------------------------------------------------------------------- /game/gui/overlay/game_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/overlay/game_menu.png -------------------------------------------------------------------------------- /game/gui/overlay/main_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/overlay/main_menu.png -------------------------------------------------------------------------------- /game/gui/phone/bar/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/bar/bottom.png -------------------------------------------------------------------------------- /game/gui/phone/bar/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/bar/left.png -------------------------------------------------------------------------------- /game/gui/phone/bar/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/bar/right.png -------------------------------------------------------------------------------- /game/gui/phone/bar/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/bar/top.png -------------------------------------------------------------------------------- /game/gui/phone/button/check_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/check_foreground.png -------------------------------------------------------------------------------- /game/gui/phone/button/check_selected_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/check_selected_foreground.png -------------------------------------------------------------------------------- /game/gui/phone/button/choice_hover_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/choice_hover_background.png -------------------------------------------------------------------------------- /game/gui/phone/button/choice_idle_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/choice_idle_background.png -------------------------------------------------------------------------------- /game/gui/phone/button/hover_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/hover_background.png -------------------------------------------------------------------------------- /game/gui/phone/button/idle_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/idle_background.png -------------------------------------------------------------------------------- /game/gui/phone/button/radio_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/radio_foreground.png -------------------------------------------------------------------------------- /game/gui/phone/button/radio_selected_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/radio_selected_foreground.png -------------------------------------------------------------------------------- /game/gui/phone/button/slot_hover_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/slot_hover_background.png -------------------------------------------------------------------------------- /game/gui/phone/button/slot_idle_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/button/slot_idle_background.png -------------------------------------------------------------------------------- /game/gui/phone/nvl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/nvl.png -------------------------------------------------------------------------------- /game/gui/phone/overlay/game_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/overlay/game_menu.png -------------------------------------------------------------------------------- /game/gui/phone/overlay/main_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/overlay/main_menu.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/horizontal_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/horizontal_hover_bar.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/horizontal_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/horizontal_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/horizontal_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/horizontal_idle_bar.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/horizontal_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/horizontal_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/vertical_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/vertical_hover_bar.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/vertical_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/vertical_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/vertical_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/vertical_idle_bar.png -------------------------------------------------------------------------------- /game/gui/phone/scrollbar/vertical_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/scrollbar/vertical_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/slider/horizontal_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/horizontal_hover_bar.png -------------------------------------------------------------------------------- /game/gui/phone/slider/horizontal_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/horizontal_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/slider/horizontal_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/horizontal_idle_bar.png -------------------------------------------------------------------------------- /game/gui/phone/slider/horizontal_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/horizontal_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/slider/vertical_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/vertical_hover_bar.png -------------------------------------------------------------------------------- /game/gui/phone/slider/vertical_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/vertical_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/slider/vertical_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/vertical_idle_bar.png -------------------------------------------------------------------------------- /game/gui/phone/slider/vertical_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/slider/vertical_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/phone/textbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/phone/textbox.png -------------------------------------------------------------------------------- /game/gui/scrollbar/horizontal_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/horizontal_hover_bar.png -------------------------------------------------------------------------------- /game/gui/scrollbar/horizontal_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/horizontal_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/scrollbar/horizontal_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/horizontal_idle_bar.png -------------------------------------------------------------------------------- /game/gui/scrollbar/horizontal_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/horizontal_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/scrollbar/vertical_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/vertical_hover_bar.png -------------------------------------------------------------------------------- /game/gui/scrollbar/vertical_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/vertical_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/scrollbar/vertical_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/vertical_idle_bar.png -------------------------------------------------------------------------------- /game/gui/scrollbar/vertical_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/scrollbar/vertical_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/skip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/skip.png -------------------------------------------------------------------------------- /game/gui/slider/horizontal_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/horizontal_hover_bar.png -------------------------------------------------------------------------------- /game/gui/slider/horizontal_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/horizontal_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/slider/horizontal_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/horizontal_idle_bar.png -------------------------------------------------------------------------------- /game/gui/slider/horizontal_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/horizontal_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/slider/vertical_hover_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/vertical_hover_bar.png -------------------------------------------------------------------------------- /game/gui/slider/vertical_hover_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/vertical_hover_thumb.png -------------------------------------------------------------------------------- /game/gui/slider/vertical_idle_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/vertical_idle_bar.png -------------------------------------------------------------------------------- /game/gui/slider/vertical_idle_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/slider/vertical_idle_thumb.png -------------------------------------------------------------------------------- /game/gui/textbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/textbox.png -------------------------------------------------------------------------------- /game/gui/window_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/gui/window_icon.png -------------------------------------------------------------------------------- /game/images/color_picker/hue_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/images/color_picker/hue_picker.png -------------------------------------------------------------------------------- /game/images/color_picker/sat_value_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/images/color_picker/sat_value_picker.png -------------------------------------------------------------------------------- /game/images/ext_beach_day.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/valery-iwanofu/renpy-shader-collection/64a77fc6ef393835624d13d84409f432a1e8629c/game/images/ext_beach_day.jpg -------------------------------------------------------------------------------- /game/options.rpy: -------------------------------------------------------------------------------- 1 | ## This file contains options that can be changed to customize your game. 2 | ## 3 | ## Lines beginning with two '#' marks are comments, and you shouldn't uncomment 4 | ## them. Lines beginning with a single '#' mark are commented-out code, and you 5 | ## may want to uncomment them when appropriate. 6 | 7 | 8 | ## Basics ###################################################################### 9 | 10 | ## A human-readable name of the game. This is used to set the default window 11 | ## title, and shows up in the interface and error reports. 12 | ## 13 | ## The _() surrounding the string marks it as eligible for translation. 14 | 15 | define config.name = _("renpy_shaders") 16 | 17 | 18 | ## Determines if the title given above is shown on the main menu screen. Set 19 | ## this to False to hide the title. 20 | 21 | define gui.show_name = True 22 | 23 | 24 | ## The version of the game. 25 | 26 | define config.version = "1.0" 27 | 28 | 29 | ## Text that is placed on the game's about screen. Place the text between the 30 | ## triple-quotes, and leave a blank line between paragraphs. 31 | 32 | define gui.about = _p(""" 33 | """) 34 | 35 | 36 | ## A short name for the game used for executables and directories in the built 37 | ## distribution. This must be ASCII-only, and must not contain spaces, colons, 38 | ## or semicolons. 39 | 40 | define build.name = "renpy_shaders" 41 | 42 | 43 | ## Sounds and music ############################################################ 44 | 45 | ## These three variables control which mixers are shown to the player by 46 | ## default. Setting one of these to False will hide the appropriate mixer. 47 | 48 | define config.has_sound = True 49 | define config.has_music = True 50 | define config.has_voice = True 51 | 52 | 53 | ## To allow the user to play a test sound on the sound or voice channel, 54 | ## uncomment a line below and use it to set a sample sound to play. 55 | 56 | # define config.sample_sound = "sample-sound.ogg" 57 | # define config.sample_voice = "sample-voice.ogg" 58 | 59 | 60 | ## Uncomment the following line to set an audio file that will be played while 61 | ## the player is at the main menu. This file will continue playing into the 62 | ## game, until it is stopped or another file is played. 63 | 64 | # define config.main_menu_music = "main-menu-theme.ogg" 65 | 66 | 67 | ## Transitions ################################################################# 68 | ## 69 | ## These variables set transitions that are used when certain events occur. 70 | ## Each variable should be set to a transition, or None to indicate that no 71 | ## transition should be used. 72 | 73 | ## Entering or exiting the game menu. 74 | 75 | define config.enter_transition = dissolve 76 | define config.exit_transition = dissolve 77 | 78 | 79 | ## Between screens of the game menu. 80 | 81 | define config.intra_transition = dissolve 82 | 83 | 84 | ## A transition that is used after a game has been loaded. 85 | 86 | define config.after_load_transition = None 87 | 88 | 89 | ## Used when entering the main menu after the game has ended. 90 | 91 | define config.end_game_transition = None 92 | 93 | 94 | ## A variable to set the transition used when the game starts does not exist. 95 | ## Instead, use a with statement after showing the initial scene. 96 | 97 | 98 | ## Window management ########################################################### 99 | ## 100 | ## This controls when the dialogue window is displayed. If "show", it is always 101 | ## displayed. If "hide", it is only displayed when dialogue is present. If 102 | ## "auto", the window is hidden before scene statements and shown again once 103 | ## dialogue is displayed. 104 | ## 105 | ## After the game has started, this can be changed with the "window show", 106 | ## "window hide", and "window auto" statements. 107 | 108 | define config.window = "auto" 109 | 110 | 111 | ## Transitions used to show and hide the dialogue window 112 | 113 | define config.window_show_transition = Dissolve(.2) 114 | define config.window_hide_transition = Dissolve(.2) 115 | 116 | 117 | ## Preference defaults ######################################################### 118 | 119 | ## Controls the default text speed. The default, 0, is infinite, while any other 120 | ## number is the number of characters per second to type out. 121 | 122 | default preferences.text_cps = 0 123 | 124 | 125 | ## The default auto-forward delay. Larger numbers lead to longer waits, with 0 126 | ## to 30 being the valid range. 127 | 128 | default preferences.afm_time = 15 129 | 130 | 131 | ## Save directory ############################################################## 132 | ## 133 | ## Controls the platform-specific place Ren'Py will place the save files for 134 | ## this game. The save files will be placed in: 135 | ## 136 | ## Windows: %APPDATA\RenPy\ 137 | ## 138 | ## Macintosh: $HOME/Library/RenPy/ 139 | ## 140 | ## Linux: $HOME/.renpy/ 141 | ## 142 | ## This generally should not be changed, and if it is, should always be a 143 | ## literal string, not an expression. 144 | 145 | define config.save_directory = "renpy_shaders-1645608382" 146 | 147 | 148 | ## Icon ######################################################################## 149 | ## 150 | ## The icon displayed on the taskbar or dock. 151 | 152 | define config.window_icon = "gui/window_icon.png" 153 | 154 | 155 | ## Build configuration ######################################################### 156 | ## 157 | ## This section controls how Ren'Py turns your project into distribution files. 158 | 159 | init python: 160 | 161 | ## The following functions take file patterns. File patterns are case- 162 | ## insensitive, and matched against the path relative to the base directory, 163 | ## with and without a leading /. If multiple patterns match, the first is 164 | ## used. 165 | ## 166 | ## In a pattern: 167 | ## 168 | ## / is the directory separator. 169 | ## 170 | ## * matches all characters, except the directory separator. 171 | ## 172 | ## ** matches all characters, including the directory separator. 173 | ## 174 | ## For example, "*.txt" matches txt files in the base directory, "game/ 175 | ## **.ogg" matches ogg files in the game directory or any of its 176 | ## subdirectories, and "**.psd" matches psd files anywhere in the project. 177 | 178 | ## Classify files as None to exclude them from the built distributions. 179 | 180 | build.classify('**~', None) 181 | build.classify('**.bak', None) 182 | build.classify('**/.**', None) 183 | build.classify('**/#**', None) 184 | build.classify('**/thumbs.db', None) 185 | 186 | ## To archive files, classify them as 'archive'. 187 | 188 | # build.classify('game/**.png', 'archive') 189 | # build.classify('game/**.jpg', 'archive') 190 | 191 | ## Files matching documentation patterns are duplicated in a mac app build, 192 | ## so they appear in both the app and the zip file. 193 | 194 | build.documentation('*.html') 195 | build.documentation('*.txt') 196 | 197 | 198 | ## A Google Play license key is required to download expansion files and perform 199 | ## in-app purchases. It can be found on the "Services & APIs" page of the Google 200 | ## Play developer console. 201 | 202 | # define build.google_play_key = "..." 203 | 204 | 205 | ## The username and project name associated with an itch.io project, separated 206 | ## by a slash. 207 | 208 | # define build.itch_project = "renpytom/test-project" 209 | -------------------------------------------------------------------------------- /game/screens.rpy: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## Initialization 3 | ################################################################################ 4 | 5 | init offset = -1 6 | 7 | 8 | ################################################################################ 9 | ## Styles 10 | ################################################################################ 11 | 12 | style default: 13 | properties gui.text_properties() 14 | language gui.language 15 | 16 | style input: 17 | properties gui.text_properties("input", accent=True) 18 | adjust_spacing False 19 | 20 | style hyperlink_text: 21 | properties gui.text_properties("hyperlink", accent=True) 22 | hover_underline True 23 | 24 | style gui_text: 25 | properties gui.text_properties("interface") 26 | 27 | 28 | style button: 29 | properties gui.button_properties("button") 30 | 31 | style button_text is gui_text: 32 | properties gui.text_properties("button") 33 | yalign 0.5 34 | 35 | 36 | style label_text is gui_text: 37 | properties gui.text_properties("label", accent=True) 38 | 39 | style prompt_text is gui_text: 40 | properties gui.text_properties("prompt") 41 | 42 | 43 | style bar: 44 | ysize gui.bar_size 45 | left_bar Frame("gui/bar/left.png", gui.bar_borders, tile=gui.bar_tile) 46 | right_bar Frame("gui/bar/right.png", gui.bar_borders, tile=gui.bar_tile) 47 | 48 | style vbar: 49 | xsize gui.bar_size 50 | top_bar Frame("gui/bar/top.png", gui.vbar_borders, tile=gui.bar_tile) 51 | bottom_bar Frame("gui/bar/bottom.png", gui.vbar_borders, tile=gui.bar_tile) 52 | 53 | style scrollbar: 54 | ysize gui.scrollbar_size 55 | base_bar Frame("gui/scrollbar/horizontal_[prefix_]bar.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) 56 | thumb Frame("gui/scrollbar/horizontal_[prefix_]thumb.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) 57 | 58 | style vscrollbar: 59 | xsize gui.scrollbar_size 60 | base_bar Frame("gui/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) 61 | thumb Frame("gui/scrollbar/vertical_[prefix_]thumb.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) 62 | 63 | style slider: 64 | ysize gui.slider_size 65 | base_bar Frame("gui/slider/horizontal_[prefix_]bar.png", gui.slider_borders, tile=gui.slider_tile) 66 | thumb "gui/slider/horizontal_[prefix_]thumb.png" 67 | 68 | style vslider: 69 | xsize gui.slider_size 70 | base_bar Frame("gui/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile) 71 | thumb "gui/slider/vertical_[prefix_]thumb.png" 72 | 73 | 74 | style frame: 75 | padding gui.frame_borders.padding 76 | background Frame("gui/frame.png", gui.frame_borders, tile=gui.frame_tile) 77 | 78 | 79 | 80 | ################################################################################ 81 | ## In-game screens 82 | ################################################################################ 83 | 84 | 85 | ## Say screen ################################################################## 86 | ## 87 | ## The say screen is used to display dialogue to the player. It takes two 88 | ## parameters, who and what, which are the name of the speaking character and 89 | ## the text to be displayed, respectively. (The who parameter can be None if no 90 | ## name is given.) 91 | ## 92 | ## This screen must create a text displayable with id "what", as Ren'Py uses 93 | ## this to manage text display. It can also create displayables with id "who" 94 | ## and id "window" to apply style properties. 95 | ## 96 | ## https://www.renpy.org/doc/html/screen_special.html#say 97 | 98 | screen say(who, what): 99 | style_prefix "say" 100 | 101 | window: 102 | id "window" 103 | 104 | if who is not None: 105 | 106 | window: 107 | id "namebox" 108 | style "namebox" 109 | text who id "who" 110 | 111 | text what id "what" 112 | 113 | 114 | ## If there's a side image, display it above the text. Do not display on the 115 | ## phone variant - there's no room. 116 | if not renpy.variant("small"): 117 | add SideImage() xalign 0.0 yalign 1.0 118 | 119 | 120 | ## Make the namebox available for styling through the Character object. 121 | init python: 122 | config.character_id_prefixes.append('namebox') 123 | 124 | style window is default 125 | style say_label is default 126 | style say_dialogue is default 127 | style say_thought is say_dialogue 128 | 129 | style namebox is default 130 | style namebox_label is say_label 131 | 132 | 133 | style window: 134 | xalign 0.5 135 | xfill True 136 | yalign gui.textbox_yalign 137 | ysize gui.textbox_height 138 | 139 | background Image("gui/textbox.png", xalign=0.5, yalign=1.0) 140 | 141 | style namebox: 142 | xpos gui.name_xpos 143 | xanchor gui.name_xalign 144 | xsize gui.namebox_width 145 | ypos gui.name_ypos 146 | ysize gui.namebox_height 147 | 148 | background Frame("gui/namebox.png", gui.namebox_borders, tile=gui.namebox_tile, xalign=gui.name_xalign) 149 | padding gui.namebox_borders.padding 150 | 151 | style say_label: 152 | properties gui.text_properties("name", accent=True) 153 | xalign gui.name_xalign 154 | yalign 0.5 155 | 156 | style say_dialogue: 157 | properties gui.text_properties("dialogue") 158 | 159 | xpos gui.dialogue_xpos 160 | xsize gui.dialogue_width 161 | ypos gui.dialogue_ypos 162 | 163 | 164 | ## Input screen ################################################################ 165 | ## 166 | ## This screen is used to display renpy.input. The prompt parameter is used to 167 | ## pass a text prompt in. 168 | ## 169 | ## This screen must create an input displayable with id "input" to accept the 170 | ## various input parameters. 171 | ## 172 | ## https://www.renpy.org/doc/html/screen_special.html#input 173 | 174 | screen input(prompt): 175 | style_prefix "input" 176 | 177 | window: 178 | 179 | vbox: 180 | xalign gui.dialogue_text_xalign 181 | xpos gui.dialogue_xpos 182 | xsize gui.dialogue_width 183 | ypos gui.dialogue_ypos 184 | 185 | text prompt style "input_prompt" 186 | input id "input" 187 | 188 | style input_prompt is default 189 | 190 | style input_prompt: 191 | xalign gui.dialogue_text_xalign 192 | properties gui.text_properties("input_prompt") 193 | 194 | style input: 195 | xalign gui.dialogue_text_xalign 196 | xmaximum gui.dialogue_width 197 | 198 | 199 | ## Choice screen ############################################################### 200 | ## 201 | ## This screen is used to display the in-game choices presented by the menu 202 | ## statement. The one parameter, items, is a list of objects, each with caption 203 | ## and action fields. 204 | ## 205 | ## https://www.renpy.org/doc/html/screen_special.html#choice 206 | 207 | screen choice(items): 208 | style_prefix "choice" 209 | 210 | vbox: 211 | for i in items: 212 | textbutton i.caption action i.action 213 | 214 | 215 | ## When this is true, menu captions will be spoken by the narrator. When false, 216 | ## menu captions will be displayed as empty buttons. 217 | define config.narrator_menu = True 218 | 219 | 220 | style choice_vbox is vbox 221 | style choice_button is button 222 | style choice_button_text is button_text 223 | 224 | style choice_vbox: 225 | xalign 0.5 226 | ypos 405 227 | yanchor 0.5 228 | 229 | spacing gui.choice_spacing 230 | 231 | style choice_button is default: 232 | properties gui.button_properties("choice_button") 233 | 234 | style choice_button_text is default: 235 | properties gui.button_text_properties("choice_button") 236 | 237 | 238 | ## Quick Menu screen ########################################################### 239 | ## 240 | ## The quick menu is displayed in-game to provide easy access to the out-of-game 241 | ## menus. 242 | 243 | screen quick_menu(): 244 | 245 | ## Ensure this appears on top of other screens. 246 | zorder 100 247 | 248 | if quick_menu: 249 | 250 | hbox: 251 | style_prefix "quick" 252 | 253 | xalign 0.5 254 | yalign 1.0 255 | 256 | textbutton _("Back") action Rollback() 257 | textbutton _("History") action ShowMenu('history') 258 | textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True) 259 | textbutton _("Auto") action Preference("auto-forward", "toggle") 260 | textbutton _("Save") action ShowMenu('save') 261 | textbutton _("Q.Save") action QuickSave() 262 | textbutton _("Q.Load") action QuickLoad() 263 | textbutton _("Prefs") action ShowMenu('preferences') 264 | 265 | 266 | ## This code ensures that the quick_menu screen is displayed in-game, whenever 267 | ## the player has not explicitly hidden the interface. 268 | init python: 269 | config.overlay_screens.append("quick_menu") 270 | 271 | default quick_menu = True 272 | 273 | style quick_button is default 274 | style quick_button_text is button_text 275 | 276 | style quick_button: 277 | properties gui.button_properties("quick_button") 278 | 279 | style quick_button_text: 280 | properties gui.button_text_properties("quick_button") 281 | 282 | 283 | ################################################################################ 284 | ## Main and Game Menu Screens 285 | ################################################################################ 286 | 287 | ## Navigation screen ########################################################### 288 | ## 289 | ## This screen is included in the main and game menus, and provides navigation 290 | ## to other menus, and to start the game. 291 | 292 | screen navigation(): 293 | 294 | vbox: 295 | style_prefix "navigation" 296 | 297 | xpos gui.navigation_xpos 298 | yalign 0.5 299 | 300 | spacing gui.navigation_spacing 301 | 302 | if main_menu: 303 | 304 | textbutton _("Start") action Start() 305 | 306 | else: 307 | 308 | textbutton _("History") action ShowMenu("history") 309 | 310 | textbutton _("Save") action ShowMenu("save") 311 | 312 | textbutton _("Load") action ShowMenu("load") 313 | 314 | textbutton _("Preferences") action ShowMenu("preferences") 315 | 316 | if _in_replay: 317 | 318 | textbutton _("End Replay") action EndReplay(confirm=True) 319 | 320 | elif not main_menu: 321 | 322 | textbutton _("Main Menu") action MainMenu() 323 | 324 | textbutton _("About") action ShowMenu("about") 325 | 326 | if renpy.variant("pc") or (renpy.variant("web") and not renpy.variant("mobile")): 327 | 328 | ## Help isn't necessary or relevant to mobile devices. 329 | textbutton _("Help") action ShowMenu("help") 330 | 331 | if renpy.variant("pc"): 332 | 333 | ## The quit button is banned on iOS and unnecessary on Android and 334 | ## Web. 335 | textbutton _("Quit") action Quit(confirm=not main_menu) 336 | 337 | 338 | style navigation_button is gui_button 339 | style navigation_button_text is gui_button_text 340 | 341 | style navigation_button: 342 | size_group "navigation" 343 | properties gui.button_properties("navigation_button") 344 | 345 | style navigation_button_text: 346 | properties gui.button_text_properties("navigation_button") 347 | 348 | 349 | ## Main Menu screen ############################################################ 350 | ## 351 | ## Used to display the main menu when Ren'Py starts. 352 | ## 353 | ## https://www.renpy.org/doc/html/screen_special.html#main-menu 354 | 355 | screen main_menu(): 356 | 357 | ## This ensures that any other menu screen is replaced. 358 | tag menu 359 | 360 | add gui.main_menu_background 361 | 362 | ## This empty frame darkens the main menu. 363 | frame: 364 | style "main_menu_frame" 365 | 366 | ## The use statement includes another screen inside this one. The actual 367 | ## contents of the main menu are in the navigation screen. 368 | use navigation 369 | 370 | if gui.show_name: 371 | 372 | vbox: 373 | style "main_menu_vbox" 374 | 375 | text "[config.name!t]": 376 | style "main_menu_title" 377 | 378 | text "[config.version]": 379 | style "main_menu_version" 380 | 381 | 382 | style main_menu_frame is empty 383 | style main_menu_vbox is vbox 384 | style main_menu_text is gui_text 385 | style main_menu_title is main_menu_text 386 | style main_menu_version is main_menu_text 387 | 388 | style main_menu_frame: 389 | xsize 420 390 | yfill True 391 | 392 | background "gui/overlay/main_menu.png" 393 | 394 | style main_menu_vbox: 395 | xalign 1.0 396 | xoffset -30 397 | xmaximum 1200 398 | yalign 1.0 399 | yoffset -30 400 | 401 | style main_menu_text: 402 | properties gui.text_properties("main_menu", accent=True) 403 | 404 | style main_menu_title: 405 | properties gui.text_properties("title") 406 | 407 | style main_menu_version: 408 | properties gui.text_properties("version") 409 | 410 | 411 | ## Game Menu screen ############################################################ 412 | ## 413 | ## This lays out the basic common structure of a game menu screen. It's called 414 | ## with the screen title, and displays the background, title, and navigation. 415 | ## 416 | ## The scroll parameter can be None, or one of "viewport" or "vpgrid". When 417 | ## this screen is intended to be used with one or more children, which are 418 | ## transcluded (placed) inside it. 419 | 420 | screen game_menu(title, scroll=None, yinitial=0.0): 421 | 422 | style_prefix "game_menu" 423 | 424 | if main_menu: 425 | add gui.main_menu_background 426 | else: 427 | add gui.game_menu_background 428 | 429 | frame: 430 | style "game_menu_outer_frame" 431 | 432 | hbox: 433 | 434 | ## Reserve space for the navigation section. 435 | frame: 436 | style "game_menu_navigation_frame" 437 | 438 | frame: 439 | style "game_menu_content_frame" 440 | 441 | if scroll == "viewport": 442 | 443 | viewport: 444 | yinitial yinitial 445 | scrollbars "vertical" 446 | mousewheel True 447 | draggable True 448 | pagekeys True 449 | 450 | side_yfill True 451 | 452 | vbox: 453 | transclude 454 | 455 | elif scroll == "vpgrid": 456 | 457 | vpgrid: 458 | cols 1 459 | yinitial yinitial 460 | 461 | scrollbars "vertical" 462 | mousewheel True 463 | draggable True 464 | pagekeys True 465 | 466 | side_yfill True 467 | 468 | transclude 469 | 470 | else: 471 | 472 | transclude 473 | 474 | use navigation 475 | 476 | textbutton _("Return"): 477 | style "return_button" 478 | 479 | action Return() 480 | 481 | label title 482 | 483 | if main_menu: 484 | key "game_menu" action ShowMenu("main_menu") 485 | 486 | 487 | style game_menu_outer_frame is empty 488 | style game_menu_navigation_frame is empty 489 | style game_menu_content_frame is empty 490 | style game_menu_viewport is gui_viewport 491 | style game_menu_side is gui_side 492 | style game_menu_scrollbar is gui_vscrollbar 493 | 494 | style game_menu_label is gui_label 495 | style game_menu_label_text is gui_label_text 496 | 497 | style return_button is navigation_button 498 | style return_button_text is navigation_button_text 499 | 500 | style game_menu_outer_frame: 501 | bottom_padding 45 502 | top_padding 180 503 | 504 | background "gui/overlay/game_menu.png" 505 | 506 | style game_menu_navigation_frame: 507 | xsize 420 508 | yfill True 509 | 510 | style game_menu_content_frame: 511 | left_margin 60 512 | right_margin 30 513 | top_margin 15 514 | 515 | style game_menu_viewport: 516 | xsize 1380 517 | 518 | style game_menu_vscrollbar: 519 | unscrollable gui.unscrollable 520 | 521 | style game_menu_side: 522 | spacing 15 523 | 524 | style game_menu_label: 525 | xpos 75 526 | ysize 180 527 | 528 | style game_menu_label_text: 529 | size gui.title_text_size 530 | color gui.accent_color 531 | yalign 0.5 532 | 533 | style return_button: 534 | xpos gui.navigation_xpos 535 | yalign 1.0 536 | yoffset -45 537 | 538 | 539 | ## About screen ################################################################ 540 | ## 541 | ## This screen gives credit and copyright information about the game and Ren'Py. 542 | ## 543 | ## There's nothing special about this screen, and hence it also serves as an 544 | ## example of how to make a custom screen. 545 | 546 | screen about(): 547 | 548 | tag menu 549 | 550 | ## This use statement includes the game_menu screen inside this one. The 551 | ## vbox child is then included inside the viewport inside the game_menu 552 | ## screen. 553 | use game_menu(_("About"), scroll="viewport"): 554 | 555 | style_prefix "about" 556 | 557 | vbox: 558 | 559 | label "[config.name!t]" 560 | text _("Version [config.version!t]\n") 561 | 562 | ## gui.about is usually set in options.rpy. 563 | if gui.about: 564 | text "[gui.about!t]\n" 565 | 566 | text _("Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]") 567 | 568 | 569 | style about_label is gui_label 570 | style about_label_text is gui_label_text 571 | style about_text is gui_text 572 | 573 | style about_label_text: 574 | size gui.label_text_size 575 | 576 | 577 | ## Load and Save screens ####################################################### 578 | ## 579 | ## These screens are responsible for letting the player save the game and load 580 | ## it again. Since they share nearly everything in common, both are implemented 581 | ## in terms of a third screen, file_slots. 582 | ## 583 | ## https://www.renpy.org/doc/html/screen_special.html#save https:// 584 | ## www.renpy.org/doc/html/screen_special.html#load 585 | 586 | screen save(): 587 | 588 | tag menu 589 | 590 | use file_slots(_("Save")) 591 | 592 | 593 | screen load(): 594 | 595 | tag menu 596 | 597 | use file_slots(_("Load")) 598 | 599 | 600 | screen file_slots(title): 601 | 602 | default page_name_value = FilePageNameInputValue(pattern=_("Page {}"), auto=_("Automatic saves"), quick=_("Quick saves")) 603 | 604 | use game_menu(title): 605 | 606 | fixed: 607 | 608 | ## This ensures the input will get the enter event before any of the 609 | ## buttons do. 610 | order_reverse True 611 | 612 | ## The page name, which can be edited by clicking on a button. 613 | button: 614 | style "page_label" 615 | 616 | key_events True 617 | xalign 0.5 618 | action page_name_value.Toggle() 619 | 620 | input: 621 | style "page_label_text" 622 | value page_name_value 623 | 624 | ## The grid of file slots. 625 | grid gui.file_slot_cols gui.file_slot_rows: 626 | style_prefix "slot" 627 | 628 | xalign 0.5 629 | yalign 0.5 630 | 631 | spacing gui.slot_spacing 632 | 633 | for i in range(gui.file_slot_cols * gui.file_slot_rows): 634 | 635 | $ slot = i + 1 636 | 637 | button: 638 | action FileAction(slot) 639 | 640 | has vbox 641 | 642 | add FileScreenshot(slot) xalign 0.5 643 | 644 | text FileTime(slot, format=_("{#file_time}%A, %B %d %Y, %H:%M"), empty=_("empty slot")): 645 | style "slot_time_text" 646 | 647 | text FileSaveName(slot): 648 | style "slot_name_text" 649 | 650 | key "save_delete" action FileDelete(slot) 651 | 652 | ## Buttons to access other pages. 653 | hbox: 654 | style_prefix "page" 655 | 656 | xalign 0.5 657 | yalign 1.0 658 | 659 | spacing gui.page_spacing 660 | 661 | textbutton _("<") action FilePagePrevious() 662 | 663 | if config.has_autosave: 664 | textbutton _("{#auto_page}A") action FilePage("auto") 665 | 666 | if config.has_quicksave: 667 | textbutton _("{#quick_page}Q") action FilePage("quick") 668 | 669 | ## range(1, 10) gives the numbers from 1 to 9. 670 | for page in range(1, 10): 671 | textbutton "[page]" action FilePage(page) 672 | 673 | textbutton _(">") action FilePageNext() 674 | 675 | 676 | style page_label is gui_label 677 | style page_label_text is gui_label_text 678 | style page_button is gui_button 679 | style page_button_text is gui_button_text 680 | 681 | style slot_button is gui_button 682 | style slot_button_text is gui_button_text 683 | style slot_time_text is slot_button_text 684 | style slot_name_text is slot_button_text 685 | 686 | style page_label: 687 | xpadding 75 688 | ypadding 5 689 | 690 | style page_label_text: 691 | text_align 0.5 692 | layout "subtitle" 693 | hover_color gui.hover_color 694 | 695 | style page_button: 696 | properties gui.button_properties("page_button") 697 | 698 | style page_button_text: 699 | properties gui.button_text_properties("page_button") 700 | 701 | style slot_button: 702 | properties gui.button_properties("slot_button") 703 | 704 | style slot_button_text: 705 | properties gui.button_text_properties("slot_button") 706 | 707 | 708 | ## Preferences screen ########################################################## 709 | ## 710 | ## The preferences screen allows the player to configure the game to better suit 711 | ## themselves. 712 | ## 713 | ## https://www.renpy.org/doc/html/screen_special.html#preferences 714 | 715 | screen preferences(): 716 | 717 | tag menu 718 | 719 | use game_menu(_("Preferences"), scroll="viewport"): 720 | 721 | vbox: 722 | 723 | hbox: 724 | box_wrap True 725 | 726 | if renpy.variant("pc") or renpy.variant("web"): 727 | 728 | vbox: 729 | style_prefix "radio" 730 | label _("Display") 731 | textbutton _("Window") action Preference("display", "window") 732 | textbutton _("Fullscreen") action Preference("display", "fullscreen") 733 | 734 | vbox: 735 | style_prefix "radio" 736 | label _("Rollback Side") 737 | textbutton _("Disable") action Preference("rollback side", "disable") 738 | textbutton _("Left") action Preference("rollback side", "left") 739 | textbutton _("Right") action Preference("rollback side", "right") 740 | 741 | vbox: 742 | style_prefix "check" 743 | label _("Skip") 744 | textbutton _("Unseen Text") action Preference("skip", "toggle") 745 | textbutton _("After Choices") action Preference("after choices", "toggle") 746 | textbutton _("Transitions") action InvertSelected(Preference("transitions", "toggle")) 747 | 748 | ## Additional vboxes of type "radio_pref" or "check_pref" can be 749 | ## added here, to add additional creator-defined preferences. 750 | 751 | null height (4 * gui.pref_spacing) 752 | 753 | hbox: 754 | style_prefix "slider" 755 | box_wrap True 756 | 757 | vbox: 758 | 759 | label _("Text Speed") 760 | 761 | bar value Preference("text speed") 762 | 763 | label _("Auto-Forward Time") 764 | 765 | bar value Preference("auto-forward time") 766 | 767 | vbox: 768 | 769 | if config.has_music: 770 | label _("Music Volume") 771 | 772 | hbox: 773 | bar value Preference("music volume") 774 | 775 | if config.has_sound: 776 | 777 | label _("Sound Volume") 778 | 779 | hbox: 780 | bar value Preference("sound volume") 781 | 782 | if config.sample_sound: 783 | textbutton _("Test") action Play("sound", config.sample_sound) 784 | 785 | 786 | if config.has_voice: 787 | label _("Voice Volume") 788 | 789 | hbox: 790 | bar value Preference("voice volume") 791 | 792 | if config.sample_voice: 793 | textbutton _("Test") action Play("voice", config.sample_voice) 794 | 795 | if config.has_music or config.has_sound or config.has_voice: 796 | null height gui.pref_spacing 797 | 798 | textbutton _("Mute All"): 799 | action Preference("all mute", "toggle") 800 | style "mute_all_button" 801 | 802 | 803 | style pref_label is gui_label 804 | style pref_label_text is gui_label_text 805 | style pref_vbox is vbox 806 | 807 | style radio_label is pref_label 808 | style radio_label_text is pref_label_text 809 | style radio_button is gui_button 810 | style radio_button_text is gui_button_text 811 | style radio_vbox is pref_vbox 812 | 813 | style check_label is pref_label 814 | style check_label_text is pref_label_text 815 | style check_button is gui_button 816 | style check_button_text is gui_button_text 817 | style check_vbox is pref_vbox 818 | 819 | style slider_label is pref_label 820 | style slider_label_text is pref_label_text 821 | style slider_slider is gui_slider 822 | style slider_button is gui_button 823 | style slider_button_text is gui_button_text 824 | style slider_pref_vbox is pref_vbox 825 | 826 | style mute_all_button is check_button 827 | style mute_all_button_text is check_button_text 828 | 829 | style pref_label: 830 | top_margin gui.pref_spacing 831 | bottom_margin 3 832 | 833 | style pref_label_text: 834 | yalign 1.0 835 | 836 | style pref_vbox: 837 | xsize 338 838 | 839 | style radio_vbox: 840 | spacing gui.pref_button_spacing 841 | 842 | style radio_button: 843 | properties gui.button_properties("radio_button") 844 | foreground "gui/button/radio_[prefix_]foreground.png" 845 | 846 | style radio_button_text: 847 | properties gui.button_text_properties("radio_button") 848 | 849 | style check_vbox: 850 | spacing gui.pref_button_spacing 851 | 852 | style check_button: 853 | properties gui.button_properties("check_button") 854 | foreground "gui/button/check_[prefix_]foreground.png" 855 | 856 | style check_button_text: 857 | properties gui.button_text_properties("check_button") 858 | 859 | style slider_slider: 860 | xsize 525 861 | 862 | style slider_button: 863 | properties gui.button_properties("slider_button") 864 | yalign 0.5 865 | left_margin 15 866 | 867 | style slider_button_text: 868 | properties gui.button_text_properties("slider_button") 869 | 870 | style slider_vbox: 871 | xsize 675 872 | 873 | 874 | ## History screen ############################################################## 875 | ## 876 | ## This is a screen that displays the dialogue history to the player. While 877 | ## there isn't anything special about this screen, it does have to access the 878 | ## dialogue history stored in _history_list. 879 | ## 880 | ## https://www.renpy.org/doc/html/history.html 881 | 882 | screen history(): 883 | 884 | tag menu 885 | 886 | ## Avoid predicting this screen, as it can be very large. 887 | predict False 888 | 889 | use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0): 890 | 891 | style_prefix "history" 892 | 893 | for h in _history_list: 894 | 895 | window: 896 | 897 | ## This lays things out properly if history_height is None. 898 | has fixed: 899 | yfit True 900 | 901 | if h.who: 902 | 903 | label h.who: 904 | style "history_name" 905 | substitute False 906 | 907 | ## Take the color of the who text from the Character, if 908 | ## set. 909 | if "color" in h.who_args: 910 | text_color h.who_args["color"] 911 | 912 | $ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags) 913 | text what: 914 | substitute False 915 | 916 | if not _history_list: 917 | label _("The dialogue history is empty.") 918 | 919 | 920 | ## This determines what tags are allowed to be displayed on the history screen. 921 | 922 | define gui.history_allow_tags = { "alt", "noalt" } 923 | 924 | 925 | style history_window is empty 926 | 927 | style history_name is gui_label 928 | style history_name_text is gui_label_text 929 | style history_text is gui_text 930 | 931 | style history_text is gui_text 932 | 933 | style history_label is gui_label 934 | style history_label_text is gui_label_text 935 | 936 | style history_window: 937 | xfill True 938 | ysize gui.history_height 939 | 940 | style history_name: 941 | xpos gui.history_name_xpos 942 | xanchor gui.history_name_xalign 943 | ypos gui.history_name_ypos 944 | xsize gui.history_name_width 945 | 946 | style history_name_text: 947 | min_width gui.history_name_width 948 | text_align gui.history_name_xalign 949 | 950 | style history_text: 951 | xpos gui.history_text_xpos 952 | ypos gui.history_text_ypos 953 | xanchor gui.history_text_xalign 954 | xsize gui.history_text_width 955 | min_width gui.history_text_width 956 | text_align gui.history_text_xalign 957 | layout ("subtitle" if gui.history_text_xalign else "tex") 958 | 959 | style history_label: 960 | xfill True 961 | 962 | style history_label_text: 963 | xalign 0.5 964 | 965 | 966 | ## Help screen ################################################################# 967 | ## 968 | ## A screen that gives information about key and mouse bindings. It uses other 969 | ## screens (keyboard_help, mouse_help, and gamepad_help) to display the actual 970 | ## help. 971 | 972 | screen help(): 973 | 974 | tag menu 975 | 976 | default device = "keyboard" 977 | 978 | use game_menu(_("Help"), scroll="viewport"): 979 | 980 | style_prefix "help" 981 | 982 | vbox: 983 | spacing 23 984 | 985 | hbox: 986 | 987 | textbutton _("Keyboard") action SetScreenVariable("device", "keyboard") 988 | textbutton _("Mouse") action SetScreenVariable("device", "mouse") 989 | 990 | if GamepadExists(): 991 | textbutton _("Gamepad") action SetScreenVariable("device", "gamepad") 992 | 993 | if device == "keyboard": 994 | use keyboard_help 995 | elif device == "mouse": 996 | use mouse_help 997 | elif device == "gamepad": 998 | use gamepad_help 999 | 1000 | 1001 | screen keyboard_help(): 1002 | 1003 | hbox: 1004 | label _("Enter") 1005 | text _("Advances dialogue and activates the interface.") 1006 | 1007 | hbox: 1008 | label _("Space") 1009 | text _("Advances dialogue without selecting choices.") 1010 | 1011 | hbox: 1012 | label _("Arrow Keys") 1013 | text _("Navigate the interface.") 1014 | 1015 | hbox: 1016 | label _("Escape") 1017 | text _("Accesses the game menu.") 1018 | 1019 | hbox: 1020 | label _("Ctrl") 1021 | text _("Skips dialogue while held down.") 1022 | 1023 | hbox: 1024 | label _("Tab") 1025 | text _("Toggles dialogue skipping.") 1026 | 1027 | hbox: 1028 | label _("Page Up") 1029 | text _("Rolls back to earlier dialogue.") 1030 | 1031 | hbox: 1032 | label _("Page Down") 1033 | text _("Rolls forward to later dialogue.") 1034 | 1035 | hbox: 1036 | label "H" 1037 | text _("Hides the user interface.") 1038 | 1039 | hbox: 1040 | label "S" 1041 | text _("Takes a screenshot.") 1042 | 1043 | hbox: 1044 | label "V" 1045 | text _("Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}.") 1046 | 1047 | 1048 | screen mouse_help(): 1049 | 1050 | hbox: 1051 | label _("Left Click") 1052 | text _("Advances dialogue and activates the interface.") 1053 | 1054 | hbox: 1055 | label _("Middle Click") 1056 | text _("Hides the user interface.") 1057 | 1058 | hbox: 1059 | label _("Right Click") 1060 | text _("Accesses the game menu.") 1061 | 1062 | hbox: 1063 | label _("Mouse Wheel Up\nClick Rollback Side") 1064 | text _("Rolls back to earlier dialogue.") 1065 | 1066 | hbox: 1067 | label _("Mouse Wheel Down") 1068 | text _("Rolls forward to later dialogue.") 1069 | 1070 | 1071 | screen gamepad_help(): 1072 | 1073 | hbox: 1074 | label _("Right Trigger\nA/Bottom Button") 1075 | text _("Advances dialogue and activates the interface.") 1076 | 1077 | hbox: 1078 | label _("Left Trigger\nLeft Shoulder") 1079 | text _("Rolls back to earlier dialogue.") 1080 | 1081 | hbox: 1082 | label _("Right Shoulder") 1083 | text _("Rolls forward to later dialogue.") 1084 | 1085 | 1086 | hbox: 1087 | label _("D-Pad, Sticks") 1088 | text _("Navigate the interface.") 1089 | 1090 | hbox: 1091 | label _("Start, Guide") 1092 | text _("Accesses the game menu.") 1093 | 1094 | hbox: 1095 | label _("Y/Top Button") 1096 | text _("Hides the user interface.") 1097 | 1098 | textbutton _("Calibrate") action GamepadCalibrate() 1099 | 1100 | 1101 | style help_button is gui_button 1102 | style help_button_text is gui_button_text 1103 | style help_label is gui_label 1104 | style help_label_text is gui_label_text 1105 | style help_text is gui_text 1106 | 1107 | style help_button: 1108 | properties gui.button_properties("help_button") 1109 | xmargin 12 1110 | 1111 | style help_button_text: 1112 | properties gui.button_text_properties("help_button") 1113 | 1114 | style help_label: 1115 | xsize 375 1116 | right_padding 30 1117 | 1118 | style help_label_text: 1119 | size gui.text_size 1120 | xalign 1.0 1121 | text_align 1.0 1122 | 1123 | 1124 | 1125 | ################################################################################ 1126 | ## Additional screens 1127 | ################################################################################ 1128 | 1129 | 1130 | ## Confirm screen ############################################################## 1131 | ## 1132 | ## The confirm screen is called when Ren'Py wants to ask the player a yes or no 1133 | ## question. 1134 | ## 1135 | ## https://www.renpy.org/doc/html/screen_special.html#confirm 1136 | 1137 | screen confirm(message, yes_action, no_action): 1138 | 1139 | ## Ensure other screens do not get input while this screen is displayed. 1140 | modal True 1141 | 1142 | zorder 200 1143 | 1144 | style_prefix "confirm" 1145 | 1146 | add "gui/overlay/confirm.png" 1147 | 1148 | frame: 1149 | 1150 | vbox: 1151 | xalign .5 1152 | yalign .5 1153 | spacing 45 1154 | 1155 | label _(message): 1156 | style "confirm_prompt" 1157 | xalign 0.5 1158 | 1159 | hbox: 1160 | xalign 0.5 1161 | spacing 150 1162 | 1163 | textbutton _("Yes") action yes_action 1164 | textbutton _("No") action no_action 1165 | 1166 | ## Right-click and escape answer "no". 1167 | key "game_menu" action no_action 1168 | 1169 | 1170 | style confirm_frame is gui_frame 1171 | style confirm_prompt is gui_prompt 1172 | style confirm_prompt_text is gui_prompt_text 1173 | style confirm_button is gui_medium_button 1174 | style confirm_button_text is gui_medium_button_text 1175 | 1176 | style confirm_frame: 1177 | background Frame([ "gui/confirm_frame.png", "gui/frame.png"], gui.confirm_frame_borders, tile=gui.frame_tile) 1178 | padding gui.confirm_frame_borders.padding 1179 | xalign .5 1180 | yalign .5 1181 | 1182 | style confirm_prompt_text: 1183 | text_align 0.5 1184 | layout "subtitle" 1185 | 1186 | style confirm_button: 1187 | properties gui.button_properties("confirm_button") 1188 | 1189 | style confirm_button_text: 1190 | properties gui.button_text_properties("confirm_button") 1191 | 1192 | 1193 | ## Skip indicator screen ####################################################### 1194 | ## 1195 | ## The skip_indicator screen is displayed to indicate that skipping is in 1196 | ## progress. 1197 | ## 1198 | ## https://www.renpy.org/doc/html/screen_special.html#skip-indicator 1199 | 1200 | screen skip_indicator(): 1201 | 1202 | zorder 100 1203 | style_prefix "skip" 1204 | 1205 | frame: 1206 | 1207 | hbox: 1208 | spacing 9 1209 | 1210 | text _("Skipping") 1211 | 1212 | text "▸" at delayed_blink(0.0, 1.0) style "skip_triangle" 1213 | text "▸" at delayed_blink(0.2, 1.0) style "skip_triangle" 1214 | text "▸" at delayed_blink(0.4, 1.0) style "skip_triangle" 1215 | 1216 | 1217 | ## This transform is used to blink the arrows one after another. 1218 | transform delayed_blink(delay, cycle): 1219 | alpha .5 1220 | 1221 | pause delay 1222 | 1223 | block: 1224 | linear .2 alpha 1.0 1225 | pause .2 1226 | linear .2 alpha 0.5 1227 | pause (cycle - .4) 1228 | repeat 1229 | 1230 | 1231 | style skip_frame is empty 1232 | style skip_text is gui_text 1233 | style skip_triangle is skip_text 1234 | 1235 | style skip_frame: 1236 | ypos gui.skip_ypos 1237 | background Frame("gui/skip.png", gui.skip_frame_borders, tile=gui.frame_tile) 1238 | padding gui.skip_frame_borders.padding 1239 | 1240 | style skip_text: 1241 | size gui.notify_text_size 1242 | 1243 | style skip_triangle: 1244 | ## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE 1245 | ## glyph in it. 1246 | font "DejaVuSans.ttf" 1247 | 1248 | 1249 | ## Notify screen ############################################################### 1250 | ## 1251 | ## The notify screen is used to show the player a message. (For example, when 1252 | ## the game is quicksaved or a screenshot has been taken.) 1253 | ## 1254 | ## https://www.renpy.org/doc/html/screen_special.html#notify-screen 1255 | 1256 | screen notify(message): 1257 | 1258 | zorder 100 1259 | style_prefix "notify" 1260 | 1261 | frame at notify_appear: 1262 | text "[message!tq]" 1263 | 1264 | timer 3.25 action Hide('notify') 1265 | 1266 | 1267 | transform notify_appear: 1268 | on show: 1269 | alpha 0 1270 | linear .25 alpha 1.0 1271 | on hide: 1272 | linear .5 alpha 0.0 1273 | 1274 | 1275 | style notify_frame is empty 1276 | style notify_text is gui_text 1277 | 1278 | style notify_frame: 1279 | ypos gui.notify_ypos 1280 | 1281 | background Frame("gui/notify.png", gui.notify_frame_borders, tile=gui.frame_tile) 1282 | padding gui.notify_frame_borders.padding 1283 | 1284 | style notify_text: 1285 | properties gui.text_properties("notify") 1286 | 1287 | 1288 | ## NVL screen ################################################################## 1289 | ## 1290 | ## This screen is used for NVL-mode dialogue and menus. 1291 | ## 1292 | ## https://www.renpy.org/doc/html/screen_special.html#nvl 1293 | 1294 | 1295 | screen nvl(dialogue, items=None): 1296 | 1297 | window: 1298 | style "nvl_window" 1299 | 1300 | has vbox: 1301 | spacing gui.nvl_spacing 1302 | 1303 | ## Displays dialogue in either a vpgrid or the vbox. 1304 | if gui.nvl_height: 1305 | 1306 | vpgrid: 1307 | cols 1 1308 | yinitial 1.0 1309 | 1310 | use nvl_dialogue(dialogue) 1311 | 1312 | else: 1313 | 1314 | use nvl_dialogue(dialogue) 1315 | 1316 | ## Displays the menu, if given. The menu may be displayed incorrectly if 1317 | ## config.narrator_menu is set to True, as it is above. 1318 | for i in items: 1319 | 1320 | textbutton i.caption: 1321 | action i.action 1322 | style "nvl_button" 1323 | 1324 | add SideImage() xalign 0.0 yalign 1.0 1325 | 1326 | 1327 | screen nvl_dialogue(dialogue): 1328 | 1329 | for d in dialogue: 1330 | 1331 | window: 1332 | id d.window_id 1333 | 1334 | fixed: 1335 | yfit gui.nvl_height is None 1336 | 1337 | if d.who is not None: 1338 | 1339 | text d.who: 1340 | id d.who_id 1341 | 1342 | text d.what: 1343 | id d.what_id 1344 | 1345 | 1346 | ## This controls the maximum number of NVL-mode entries that can be displayed at 1347 | ## once. 1348 | define config.nvl_list_length = gui.nvl_list_length 1349 | 1350 | style nvl_window is default 1351 | style nvl_entry is default 1352 | 1353 | style nvl_label is say_label 1354 | style nvl_dialogue is say_dialogue 1355 | 1356 | style nvl_button is button 1357 | style nvl_button_text is button_text 1358 | 1359 | style nvl_window: 1360 | xfill True 1361 | yfill True 1362 | 1363 | background "gui/nvl.png" 1364 | padding gui.nvl_borders.padding 1365 | 1366 | style nvl_entry: 1367 | xfill True 1368 | ysize gui.nvl_height 1369 | 1370 | style nvl_label: 1371 | xpos gui.nvl_name_xpos 1372 | xanchor gui.nvl_name_xalign 1373 | ypos gui.nvl_name_ypos 1374 | yanchor 0.0 1375 | xsize gui.nvl_name_width 1376 | min_width gui.nvl_name_width 1377 | text_align gui.nvl_name_xalign 1378 | 1379 | style nvl_dialogue: 1380 | xpos gui.nvl_text_xpos 1381 | xanchor gui.nvl_text_xalign 1382 | ypos gui.nvl_text_ypos 1383 | xsize gui.nvl_text_width 1384 | min_width gui.nvl_text_width 1385 | text_align gui.nvl_text_xalign 1386 | layout ("subtitle" if gui.nvl_text_xalign else "tex") 1387 | 1388 | style nvl_thought: 1389 | xpos gui.nvl_thought_xpos 1390 | xanchor gui.nvl_thought_xalign 1391 | ypos gui.nvl_thought_ypos 1392 | xsize gui.nvl_thought_width 1393 | min_width gui.nvl_thought_width 1394 | text_align gui.nvl_thought_xalign 1395 | layout ("subtitle" if gui.nvl_text_xalign else "tex") 1396 | 1397 | style nvl_button: 1398 | properties gui.button_properties("nvl_button") 1399 | xpos gui.nvl_button_xpos 1400 | xanchor gui.nvl_button_xalign 1401 | 1402 | style nvl_button_text: 1403 | properties gui.button_text_properties("nvl_button") 1404 | 1405 | 1406 | 1407 | ################################################################################ 1408 | ## Mobile Variants 1409 | ################################################################################ 1410 | 1411 | style pref_vbox: 1412 | variant "medium" 1413 | xsize 675 1414 | 1415 | ## Since a mouse may not be present, we replace the quick menu with a version 1416 | ## that uses fewer and bigger buttons that are easier to touch. 1417 | screen quick_menu(): 1418 | variant "touch" 1419 | 1420 | zorder 100 1421 | 1422 | if quick_menu: 1423 | 1424 | hbox: 1425 | style_prefix "quick" 1426 | 1427 | xalign 0.5 1428 | yalign 1.0 1429 | 1430 | textbutton _("Back") action Rollback() 1431 | textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True) 1432 | textbutton _("Auto") action Preference("auto-forward", "toggle") 1433 | textbutton _("Menu") action ShowMenu() 1434 | 1435 | 1436 | style window: 1437 | variant "small" 1438 | background "gui/phone/textbox.png" 1439 | 1440 | style radio_button: 1441 | variant "small" 1442 | foreground "gui/phone/button/radio_[prefix_]foreground.png" 1443 | 1444 | style check_button: 1445 | variant "small" 1446 | foreground "gui/phone/button/check_[prefix_]foreground.png" 1447 | 1448 | style nvl_window: 1449 | variant "small" 1450 | background "gui/phone/nvl.png" 1451 | 1452 | style main_menu_frame: 1453 | variant "small" 1454 | background "gui/phone/overlay/main_menu.png" 1455 | 1456 | style game_menu_outer_frame: 1457 | variant "small" 1458 | background "gui/phone/overlay/game_menu.png" 1459 | 1460 | style game_menu_navigation_frame: 1461 | variant "small" 1462 | xsize 510 1463 | 1464 | style game_menu_content_frame: 1465 | variant "small" 1466 | top_margin 0 1467 | 1468 | style pref_vbox: 1469 | variant "small" 1470 | xsize 600 1471 | 1472 | style bar: 1473 | variant "small" 1474 | ysize gui.bar_size 1475 | left_bar Frame("gui/phone/bar/left.png", gui.bar_borders, tile=gui.bar_tile) 1476 | right_bar Frame("gui/phone/bar/right.png", gui.bar_borders, tile=gui.bar_tile) 1477 | 1478 | style vbar: 1479 | variant "small" 1480 | xsize gui.bar_size 1481 | top_bar Frame("gui/phone/bar/top.png", gui.vbar_borders, tile=gui.bar_tile) 1482 | bottom_bar Frame("gui/phone/bar/bottom.png", gui.vbar_borders, tile=gui.bar_tile) 1483 | 1484 | style scrollbar: 1485 | variant "small" 1486 | ysize gui.scrollbar_size 1487 | base_bar Frame("gui/phone/scrollbar/horizontal_[prefix_]bar.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) 1488 | thumb Frame("gui/phone/scrollbar/horizontal_[prefix_]thumb.png", gui.scrollbar_borders, tile=gui.scrollbar_tile) 1489 | 1490 | style vscrollbar: 1491 | variant "small" 1492 | xsize gui.scrollbar_size 1493 | base_bar Frame("gui/phone/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) 1494 | thumb Frame("gui/phone/scrollbar/vertical_[prefix_]thumb.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile) 1495 | 1496 | style slider: 1497 | variant "small" 1498 | ysize gui.slider_size 1499 | base_bar Frame("gui/phone/slider/horizontal_[prefix_]bar.png", gui.slider_borders, tile=gui.slider_tile) 1500 | thumb "gui/phone/slider/horizontal_[prefix_]thumb.png" 1501 | 1502 | style vslider: 1503 | variant "small" 1504 | xsize gui.slider_size 1505 | base_bar Frame("gui/phone/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile) 1506 | thumb "gui/phone/slider/vertical_[prefix_]thumb.png" 1507 | 1508 | style slider_vbox: 1509 | variant "small" 1510 | xsize None 1511 | 1512 | style slider_slider: 1513 | variant "small" 1514 | xsize 900 1515 | -------------------------------------------------------------------------------- /game/script.rpy: -------------------------------------------------------------------------------- 1 |  2 | image bg ext_beach_day = 'images/ext_beach_day.jpg' 3 | 4 | define config.log_gl_shaders = True 5 | 6 | 7 | 8 | label start: 9 | jump loop 10 | 11 | label loop: 12 | scene bg ext_beach_day with dissolve 13 | menu: 14 | 'Waves': 15 | call waves_demo 16 | 'Color picker': 17 | call color_picker_demo 18 | 19 | jump loop 20 | -------------------------------------------------------------------------------- /game/shaders/color_picker.rpy: -------------------------------------------------------------------------------- 1 | # адаптация https://www.shadertoy.com/view/ls2yRz под renpy 2 | init -10 python: 3 | from renpy.gl2.gl2mesh2 import Mesh2 4 | from renpy.display.layout import Container 5 | import pygame 6 | 7 | # sat_value picker 8 | renpy.register_shader("collection.color_picker.sat_value_rect", 9 | variables=""" 10 | varying vec2 v_tex_coord; 11 | varying vec2 v_position; 12 | 13 | attribute vec2 a_tex_coord; 14 | 15 | uniform vec3 u_color; 16 | """, 17 | fragment_functions=""" 18 | vec2 get_sat_val_from_position(in vec2 pos) { 19 | 20 | vec2 result = vec2(0.0); 21 | 22 | vec2 tl = vec2(0.0, 0.0); 23 | vec2 bl = vec2(0.0, 0.0); 24 | vec2 br = vec2(0.0, 1.0); 25 | vec2 tr = vec2(1.0, 0.0); 26 | 27 | vec2 interp_b = mix(bl, br, pos.x); 28 | vec2 interp_t = mix(tl, tr, pos.x); 29 | 30 | result = mix(interp_b, interp_t, pos.y); 31 | 32 | return result; 33 | } 34 | 35 | vec3 apply_sat_val_to_color(in vec2 sat_val, in vec3 color) { 36 | vec3 val = mix(vec3(0.0), vec3(1.0), sat_val.y); 37 | return mix(val, color, sat_val.x); 38 | } 39 | """, 40 | vertex_300=""" 41 | v_tex_coord = a_tex_coord; 42 | v_position = a_position.xy; 43 | """, 44 | fragment_300=""" 45 | vec2 uv = v_tex_coord; 46 | 47 | vec2 sat_value = get_sat_val_from_position(uv); 48 | gl_FragColor = vec4(apply_sat_val_to_color(sat_value, u_color), 1.0); 49 | """ 50 | ) 51 | 52 | renpy.register_shader("collection.color_picker.hue_rect", 53 | variables=""" 54 | varying vec2 v_tex_coord; 55 | varying vec2 v_position; 56 | 57 | attribute vec2 a_tex_coord; 58 | """, 59 | fragment_functions=""" 60 | const int num_color_stops = 6; 61 | vec3 get_color_stop(int i) { 62 | vec3 result = vec3(0); 63 | 64 | if (i == 0) result = vec3(1.0, 0.0, 0.0); 65 | else if (i == 1) result = vec3(1.0, 0.0, 1.0); 66 | else if (i == 2) result = vec3(0.0, 0.0, 1.0); 67 | else if (i == 3) result = vec3(0.0, 1.0, 1.0); 68 | else if (i == 4) result = vec3(0.0, 1.0, 0.0); 69 | else if (i == 5) result = vec3(1.0, 1.0, 0.0); 70 | 71 | return result; 72 | 73 | } 74 | vec3 get_hue_from_position(in float pos) { 75 | const float frac = 1.0 / float(num_color_stops); 76 | int i = int(pos * float(num_color_stops)); 77 | int ni = i + 1; 78 | 79 | float next_pos = float(ni) * frac; 80 | float diff = (next_pos - pos); 81 | float percent = 1.0 - diff / frac; 82 | 83 | //ni %= num_color_stops; 84 | if(ni == num_color_stops){ 85 | ni = 0; 86 | } 87 | 88 | vec3 current = get_color_stop(i); 89 | vec3 next = get_color_stop(ni); 90 | 91 | return mix(current, next, percent); 92 | } 93 | """, 94 | vertex_300=""" 95 | v_tex_coord = a_tex_coord; 96 | v_position = a_position.xy; 97 | """, 98 | fragment_300=""" 99 | vec2 uv = v_tex_coord; 100 | 101 | gl_FragColor = vec4(get_hue_from_position(1.0 - uv.y), 1.0); 102 | """ 103 | ) 104 | 105 | 106 | __COLOR_STOPS = [ 107 | (1.0, 0.0, 0.0), 108 | (1.0, 0.0, 1.0), 109 | (0.0, 0.0, 1.0), 110 | (0.0, 1.0, 1.0), 111 | (0.0, 1.0, 0.0), 112 | (1.0, 1.0, 0.0) 113 | ] 114 | 115 | def get_hue_from_position(pos): 116 | from store.shaders import vec3, mix 117 | 118 | num_color_stops = len(__COLOR_STOPS) 119 | 120 | frac = 1.0 / num_color_stops 121 | i = int(pos * num_color_stops) 122 | if i == num_color_stops: 123 | i = num_color_stops - 1 124 | ni = i + 1 125 | 126 | next_pos = float(ni) * frac 127 | diff = next_pos - pos 128 | percent = 1.0 - diff / frac 129 | 130 | ni %= num_color_stops 131 | 132 | current = vec3(*__COLOR_STOPS[i]) 133 | next = vec3(*__COLOR_STOPS[ni]) 134 | 135 | return mix(current, next, percent) 136 | 137 | 138 | class SaturationValueRect(renpy.Displayable): 139 | def __init__(self, hue, **kwargs): 140 | renpy.Displayable.__init__(self, **kwargs) 141 | self._hue = hue 142 | 143 | self._size = (0, 0) 144 | 145 | def render(self, width, height, st, at): 146 | rv = renpy.Render(width, height) 147 | self._size = (width, height) 148 | 149 | rv.mesh = Mesh2.texture_rectangle( 150 | 0, 0, width, height, 151 | 0.0, 0.0, 1.0, 1.0, 152 | ) 153 | rv.add_shader('collection.color_picker.sat_value_rect') 154 | rv.add_uniform('u_color', get_hue_from_position(1.0 - self._hue.get())) 155 | 156 | return rv 157 | 158 | def event(self, ev, x, y, st): 159 | w, h = self._size 160 | if x >= w or y >= h: 161 | return None 162 | if (ev.type != pygame.MOUSEBUTTONDOWN) or ev.button != 1: 163 | return None 164 | return self._click_handler(x, y, *self._size) 165 | 166 | class ColorPickerHueRect(renpy.Displayable): 167 | def __init__(self, **kwargs): 168 | renpy.Displayable.__init__(self, **kwargs) 169 | self._size = (0, 0) 170 | 171 | def render(self, width, height, st, at): 172 | rv = renpy.Render(width, height) 173 | self._size = (width, height) 174 | 175 | rv.mesh = Mesh2.texture_rectangle( 176 | 0, 0, width, height, 177 | 0.0, 0.0, 1.0, 1.0, 178 | ) 179 | rv.add_shader('collection.color_picker.hue_rect') 180 | 181 | return rv 182 | 183 | 184 | class SaturationValuePicker(renpy.Displayable): 185 | def __init__(self, cursor, hue, saturation, value, action=None, **kwargs): 186 | renpy.Displayable.__init__(self, **kwargs) 187 | 188 | self._cursor = renpy.easy.displayable(cursor) 189 | 190 | self._hue = hue 191 | self._sat = saturation 192 | self._value = value 193 | self._action = None 194 | 195 | self._sat_value_rect = SaturationValueRect(hue) 196 | 197 | self._size = (0, 0) 198 | 199 | self.focusable = True 200 | 201 | def render(self, width, height, st, at): 202 | sat, value = self._sat.get(), self._value.get() 203 | 204 | cursor = self._cursor 205 | rect_render = renpy.render(self._sat_value_rect, width, height, st, at) 206 | width, height = self._size = rect_render.get_size() 207 | 208 | rv = renpy.Render(width, height) 209 | cursor_render = renpy.render(cursor, width, height, st, at) 210 | rv.blit(rect_render, (0, 0)) 211 | cursor.place( 212 | rv, 213 | width * value - cursor_render.width / 2, 214 | height * sat - cursor_render.height / 2, 215 | width, 216 | height, 217 | cursor_render 218 | ) 219 | if self.focusable: 220 | rv.add_focus(self, None, 0, 0, width, height) 221 | 222 | return rv 223 | 224 | def _map_activate(self, ev): 225 | return ev.type == pygame.MOUSEBUTTONDOWN and ev.button == 1 226 | 227 | def _map_deactivate(self, ev): 228 | return ev.type == pygame.MOUSEBUTTONUP and ev.button == 1 229 | 230 | def event(self, ev, x, y, st): 231 | if not self.focusable: 232 | return None 233 | if not self.is_focused(): 234 | return None 235 | 236 | grabbed = (renpy.display.focus.get_grab() is self) 237 | just_grabbed = False 238 | ignore_event = False 239 | 240 | old_value = value = self._sat.get(), self._value.get() 241 | 242 | def update_value(): 243 | if old_value != value: 244 | if old_value[0] != value[0]: 245 | self._sat.set(value[0]) 246 | if old_value[1] != value[1]: 247 | self._value.set(value[1]) 248 | 249 | renpy.run(self._action) 250 | 251 | w, h = self._size 252 | 253 | if not grabbed and self._map_activate(ev): 254 | renpy.display.focus.set_grab(self) 255 | ignore_event = True 256 | grabbed = True 257 | just_grabbed = True 258 | 259 | if grabbed: 260 | if ev.type in (pygame.MOUSEMOTION, pygame.MOUSEBUTTONUP, pygame.MOUSEBUTTONDOWN): 261 | value = min(1.0, max(0.0, y / float(h))), min(1.0, max(0.0, x / float(w))) 262 | 263 | if grabbed and not just_grabbed and self._map_deactivate(ev): 264 | renpy.display.focus.set_grab(None) 265 | 266 | update_value() 267 | 268 | raise renpy.display.core.IgnoreEvent() 269 | 270 | update_value() 271 | 272 | if ignore_event: 273 | raise renpy.display.core.IgnoreEvent() 274 | 275 | def visit(self): 276 | return [self._sat_value_rect, self._cursor] 277 | 278 | 279 | transform color_picker_sat_value(color): 280 | shader "collection.color_picker.sat_value_rect" 281 | u_color color 282 | 283 | init python: 284 | class HSVComponentValue(SimpleValue): 285 | def __init__(self, simple_value, index): 286 | self._value = simple_value 287 | self._index = index 288 | 289 | def get(self): 290 | color = Color(self._value.get()) 291 | return color.hsv[self._index] 292 | 293 | def set(self, value): 294 | color = Color(self._value.get()) 295 | hsv = list(color.hsv) 296 | hsv[self._index] = value 297 | self._value.set(Color(hsv=tuple(hsv))) 298 | 299 | class __ColorChangedAction: 300 | def __init__(self, callback, hue, saturation, value): 301 | self._callback = callback 302 | self._hue = hue 303 | self._sat = saturation 304 | self._value = value 305 | 306 | def __call__(self): 307 | callback = self._callback 308 | if callback is not None: 309 | callback(self._hue.get(), self._sat.get(), self._value.get()) 310 | 311 | screen color_picker(color): 312 | hbox: 313 | #spacing 4 314 | 315 | add SaturationValuePicker( 316 | 'images/color_picker/sat_value_picker.png', 317 | HSVComponentValue(color, 0), 318 | HSVComponentValue(color, 1), 319 | HSVComponentValue(color, 2), 320 | xsize=300, 321 | ysize=300 322 | ) 323 | 324 | vbar: 325 | value SimpleBarValue(HSVComponentValue(color, 0), 1.0) 326 | ysize 300 327 | style 'vslider' 328 | base_bar ColorPickerHueRect() 329 | bar_invert True 330 | -------------------------------------------------------------------------------- /game/shaders/shader_helpers.rpy: -------------------------------------------------------------------------------- 1 | init -100 python in shaders: 2 | class vec2(tuple): 3 | def __new__(cls, *args): 4 | if len(args) == 1: 5 | return tuple.__new__(cls, (args[0], args[0])) 6 | elif len(args) == 2: 7 | return tuple.__new__(cls, args) 8 | raise ValueError('vec2 accept 1 or 2 arguments, not %s' % len(args)) 9 | 10 | @property 11 | def x(self): 12 | return self[0] 13 | 14 | @property 15 | def y(self): 16 | return self[1] 17 | 18 | def __add__(self, o): 19 | return vec2(self[0] + o[0], self[1] + o[1]) 20 | 21 | def __sub__(self, o): 22 | return vec2(self[0] - o[0], self[1] - o[1]) 23 | 24 | def __mul__(self, m): 25 | return vec2(self[0] * m, self[1] * m) 26 | 27 | class vec3(tuple): 28 | def __new__(cls, *args): 29 | if len(args) == 1: 30 | return tuple.__new__(cls, (args[0], args[0], args[0])) 31 | elif len(args) == 3: 32 | return tuple.__new__(cls, args) 33 | raise ValueError('vec3 accept 1 or 3 arguments, not %s' % len(args)) 34 | 35 | @property 36 | def x(self): 37 | return self[0] 38 | 39 | @property 40 | def y(self): 41 | return self[1] 42 | 43 | @property 44 | def z(self): 45 | return self[2] 46 | 47 | def __add__(self, o): 48 | return vec3(self[0] + o[0], self[1] + o[1], self[2] + o[2]) 49 | 50 | def __sub__(self, o): 51 | return vec3(self[0] - o[0], self[1] - o[1], self[2] - o[2]) 52 | 53 | def __mul__(self, m): 54 | return vec3(self[0] * m, self[1] * m, self[2] * m) 55 | 56 | def mix(x, y, a): 57 | return x * (1 - a) + y * a 58 | -------------------------------------------------------------------------------- /game/shaders/utils.rpy: -------------------------------------------------------------------------------- 1 | init -100 python: 2 | @renpy.pure 3 | class SimpleValue(renpy.object.Object): 4 | def get(self): 5 | raise Exception("Not implemented.") 6 | 7 | def set(self, value): 8 | raise Exception("Not implemented.") 9 | 10 | @renpy.pure 11 | class FieldSimpleValue(SimpleValue): 12 | def __init__(self, obj, name): 13 | self._obj = obj 14 | self._name = name 15 | 16 | def get(self): 17 | return getattr(self._obj, self._name) 18 | 19 | def set(self, value): 20 | setattr(self._obj, self._name, value) 21 | renpy.restart_interaction() 22 | 23 | @renpy.pure 24 | def VariableSimpleValue(name): 25 | return FieldSimpleValue(store, name) 26 | 27 | @renpy.pure 28 | class ScreenSimpleValue(SimpleValue): 29 | def __init__(self, name): 30 | self._name = name 31 | self._screen = renpy.current_screen() 32 | 33 | def get(self): 34 | return self._screen.scope[self._name] 35 | 36 | def set(self, value): 37 | self._screen.scope[self._name] = value 38 | renpy.restart_interaction() 39 | 40 | @renpy.pure 41 | class SimpleBarValue(BarValue): 42 | def __init__(self, simple_value, range, max_is_zero=False, style='bar', offset=0, step=None, action=None, force_step=False): 43 | self._simple_value = simple_value 44 | 45 | self.range = range 46 | self.max_is_zero = max_is_zero 47 | self.style = style 48 | self.offset = offset 49 | self.force_step = force_step 50 | 51 | if step is None: 52 | if isinstance(range, float): 53 | step = range / 10.0 54 | else: 55 | step = max(range / 10, 1) 56 | 57 | self.step = step 58 | self.action = action 59 | 60 | def changed(self, value): 61 | if self.max_is_zero: 62 | if value == self.range: 63 | value = 0 64 | else: 65 | value = value + 1 66 | 67 | value += self.offset 68 | 69 | self._simple_value.set(value) 70 | renpy.restart_interaction() 71 | 72 | renpy.run(self.action) 73 | 74 | def get_adjustment(self): 75 | value = self._simple_value.get() 76 | 77 | value -= self.offset 78 | 79 | if self.max_is_zero: 80 | if value == 0: 81 | value = self.range 82 | else: 83 | value = value - 1 84 | 85 | return ui.adjustment( 86 | range=self.range, 87 | value=value, 88 | changed=self.changed, 89 | step=self.step, 90 | force_step=self.force_step, 91 | ) 92 | 93 | def get_style(self): 94 | return self.style, "v" + self.style -------------------------------------------------------------------------------- /game/shaders/waves.rpy: -------------------------------------------------------------------------------- 1 | init -10 python: 2 | from renpy.display.layout import Container 3 | 4 | renpy.register_shader("collection.waves", variables=""" 5 | uniform float u_lod_bias; 6 | uniform sampler2D tex0; 7 | 8 | varying vec2 v_tex_coord; 9 | varying vec2 v_position; 10 | 11 | uniform float u_wave_size; 12 | uniform float u_amplitude; 13 | 14 | uniform float u_custom_time; 15 | """, vertex_300=""" 16 | v_tex_coord = a_tex_coord; 17 | v_position = a_position.xy; 18 | """, fragment_300=""" 19 | vec2 uv = v_tex_coord; 20 | 21 | vec2 center_dist = 1.0 - abs(uv - .5) / .5; 22 | vec4 color = texture2D(tex0, uv, u_lod_bias); 23 | float arg = sin(u_custom_time + v_position.y / u_wave_size); 24 | 25 | gl_FragColor = texture2D(tex0, uv + arg / u_amplitude * center_dist); 26 | """) 27 | 28 | class WavesBase(Container): 29 | def __init__(self, image, **kwargs): 30 | child = renpy.easy.displayable(image) 31 | Container.__init__(self, child, **kwargs) 32 | 33 | def _get_amplitude(self): 34 | raise NotImplementedError 35 | 36 | def _get_wave_size(self): 37 | raise NotImplementedError 38 | 39 | def _get_time_offset(self): 40 | return 0 41 | 42 | def render(self, width, height, st, at): 43 | child = self.child 44 | child_render = renpy.render(child, width, height, st, at) 45 | rv = renpy.Render(child_render.width, child_render.height) 46 | child_pos = child.place(rv, 0, 0, width, height, child_render) 47 | self.offsets = [child_pos] 48 | 49 | rv.add_shader('collection.waves') 50 | rv.add_uniform('u_wave_size', self._get_wave_size()) 51 | rv.add_uniform('u_amplitude', self._get_amplitude()) 52 | rv.add_uniform('u_custom_time', st) 53 | 54 | renpy.redraw(self, 0) 55 | 56 | return rv 57 | 58 | class Waves(WavesBase): 59 | def __init__(self, image, wave_size=150.0, amplitude=30.0, time_offset=0, **kwargs): 60 | WavesBase.__init__(self, image, **kwargs) 61 | self._wave_size = wave_size 62 | self._amplitude = amplitude 63 | self._time_offset = time_offset 64 | 65 | def _get_wave_size(self): 66 | return self._wave_size 67 | 68 | def _get_amplitude(self): 69 | return self._amplitude 70 | 71 | def _get_time_offset(self): 72 | return self._time_offset 73 | 74 | 75 | transform waves_shader(wave_size=150.0, amplitude=30.0): 76 | shader "collection.waves" 77 | u_wave_size wave_size 78 | u_amplitude amplitude 79 | u_custom_time 0.0 80 | # so bad 81 | block: 82 | linear 100000000 u_custom_time 100000000 83 | u_custom_time 0.0 84 | repeat -------------------------------------------------------------------------------- /game/tl/None/common.rpym: -------------------------------------------------------------------------------- 1 |  2 | translate None strings: 3 | 4 | # renpy/common/00accessibility.rpy:28 5 | old "Self-voicing disabled." 6 | new "Self-voicing disabled." 7 | 8 | # renpy/common/00accessibility.rpy:29 9 | old "Clipboard voicing enabled. " 10 | new "Clipboard voicing enabled. " 11 | 12 | # renpy/common/00accessibility.rpy:30 13 | old "Self-voicing enabled. " 14 | new "Self-voicing enabled. " 15 | 16 | # renpy/common/00accessibility.rpy:32 17 | old "bar" 18 | new "bar" 19 | 20 | # renpy/common/00accessibility.rpy:33 21 | old "selected" 22 | new "selected" 23 | 24 | # renpy/common/00accessibility.rpy:34 25 | old "viewport" 26 | new "viewport" 27 | 28 | # renpy/common/00accessibility.rpy:35 29 | old "horizontal scroll" 30 | new "horizontal scroll" 31 | 32 | # renpy/common/00accessibility.rpy:36 33 | old "vertical scroll" 34 | new "vertical scroll" 35 | 36 | # renpy/common/00accessibility.rpy:37 37 | old "activate" 38 | new "activate" 39 | 40 | # renpy/common/00accessibility.rpy:38 41 | old "deactivate" 42 | new "deactivate" 43 | 44 | # renpy/common/00accessibility.rpy:39 45 | old "increase" 46 | new "increase" 47 | 48 | # renpy/common/00accessibility.rpy:40 49 | old "decrease" 50 | new "decrease" 51 | 52 | # renpy/common/00accessibility.rpy:128 53 | old "Font Override" 54 | new "Font Override" 55 | 56 | # renpy/common/00accessibility.rpy:132 57 | old "Default" 58 | new "Default" 59 | 60 | # renpy/common/00accessibility.rpy:136 61 | old "DejaVu Sans" 62 | new "DejaVu Sans" 63 | 64 | # renpy/common/00accessibility.rpy:140 65 | old "Opendyslexic" 66 | new "Opendyslexic" 67 | 68 | # renpy/common/00accessibility.rpy:146 69 | old "Text Size Scaling" 70 | new "Text Size Scaling" 71 | 72 | # renpy/common/00accessibility.rpy:152 73 | old "Reset" 74 | new "Reset" 75 | 76 | # renpy/common/00accessibility.rpy:158 77 | old "Line Spacing Scaling" 78 | new "Line Spacing Scaling" 79 | 80 | # renpy/common/00accessibility.rpy:171 81 | old "Self-Voicing" 82 | new "Self-Voicing" 83 | 84 | # renpy/common/00accessibility.rpy:175 85 | old "Off" 86 | new "Off" 87 | 88 | # renpy/common/00accessibility.rpy:179 89 | old "Text-to-speech" 90 | new "Text-to-speech" 91 | 92 | # renpy/common/00accessibility.rpy:183 93 | old "Clipboard" 94 | new "Clipboard" 95 | 96 | # renpy/common/00accessibility.rpy:187 97 | old "Debug" 98 | new "Debug" 99 | 100 | # renpy/common/00accessibility.rpy:193 101 | old "Self-Voicing Volume Drop" 102 | new "Self-Voicing Volume Drop" 103 | 104 | # renpy/common/00accessibility.rpy:202 105 | old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was." 106 | new "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was." 107 | 108 | # renpy/common/00accessibility.rpy:207 109 | old "Return" 110 | new "Return" 111 | 112 | # renpy/common/00action_file.rpy:26 113 | old "{#weekday}Monday" 114 | new "{#weekday}Monday" 115 | 116 | # renpy/common/00action_file.rpy:26 117 | old "{#weekday}Tuesday" 118 | new "{#weekday}Tuesday" 119 | 120 | # renpy/common/00action_file.rpy:26 121 | old "{#weekday}Wednesday" 122 | new "{#weekday}Wednesday" 123 | 124 | # renpy/common/00action_file.rpy:26 125 | old "{#weekday}Thursday" 126 | new "{#weekday}Thursday" 127 | 128 | # renpy/common/00action_file.rpy:26 129 | old "{#weekday}Friday" 130 | new "{#weekday}Friday" 131 | 132 | # renpy/common/00action_file.rpy:26 133 | old "{#weekday}Saturday" 134 | new "{#weekday}Saturday" 135 | 136 | # renpy/common/00action_file.rpy:26 137 | old "{#weekday}Sunday" 138 | new "{#weekday}Sunday" 139 | 140 | # renpy/common/00action_file.rpy:37 141 | old "{#weekday_short}Mon" 142 | new "{#weekday_short}Mon" 143 | 144 | # renpy/common/00action_file.rpy:37 145 | old "{#weekday_short}Tue" 146 | new "{#weekday_short}Tue" 147 | 148 | # renpy/common/00action_file.rpy:37 149 | old "{#weekday_short}Wed" 150 | new "{#weekday_short}Wed" 151 | 152 | # renpy/common/00action_file.rpy:37 153 | old "{#weekday_short}Thu" 154 | new "{#weekday_short}Thu" 155 | 156 | # renpy/common/00action_file.rpy:37 157 | old "{#weekday_short}Fri" 158 | new "{#weekday_short}Fri" 159 | 160 | # renpy/common/00action_file.rpy:37 161 | old "{#weekday_short}Sat" 162 | new "{#weekday_short}Sat" 163 | 164 | # renpy/common/00action_file.rpy:37 165 | old "{#weekday_short}Sun" 166 | new "{#weekday_short}Sun" 167 | 168 | # renpy/common/00action_file.rpy:47 169 | old "{#month}January" 170 | new "{#month}January" 171 | 172 | # renpy/common/00action_file.rpy:47 173 | old "{#month}February" 174 | new "{#month}February" 175 | 176 | # renpy/common/00action_file.rpy:47 177 | old "{#month}March" 178 | new "{#month}March" 179 | 180 | # renpy/common/00action_file.rpy:47 181 | old "{#month}April" 182 | new "{#month}April" 183 | 184 | # renpy/common/00action_file.rpy:47 185 | old "{#month}May" 186 | new "{#month}May" 187 | 188 | # renpy/common/00action_file.rpy:47 189 | old "{#month}June" 190 | new "{#month}June" 191 | 192 | # renpy/common/00action_file.rpy:47 193 | old "{#month}July" 194 | new "{#month}July" 195 | 196 | # renpy/common/00action_file.rpy:47 197 | old "{#month}August" 198 | new "{#month}August" 199 | 200 | # renpy/common/00action_file.rpy:47 201 | old "{#month}September" 202 | new "{#month}September" 203 | 204 | # renpy/common/00action_file.rpy:47 205 | old "{#month}October" 206 | new "{#month}October" 207 | 208 | # renpy/common/00action_file.rpy:47 209 | old "{#month}November" 210 | new "{#month}November" 211 | 212 | # renpy/common/00action_file.rpy:47 213 | old "{#month}December" 214 | new "{#month}December" 215 | 216 | # renpy/common/00action_file.rpy:63 217 | old "{#month_short}Jan" 218 | new "{#month_short}Jan" 219 | 220 | # renpy/common/00action_file.rpy:63 221 | old "{#month_short}Feb" 222 | new "{#month_short}Feb" 223 | 224 | # renpy/common/00action_file.rpy:63 225 | old "{#month_short}Mar" 226 | new "{#month_short}Mar" 227 | 228 | # renpy/common/00action_file.rpy:63 229 | old "{#month_short}Apr" 230 | new "{#month_short}Apr" 231 | 232 | # renpy/common/00action_file.rpy:63 233 | old "{#month_short}May" 234 | new "{#month_short}May" 235 | 236 | # renpy/common/00action_file.rpy:63 237 | old "{#month_short}Jun" 238 | new "{#month_short}Jun" 239 | 240 | # renpy/common/00action_file.rpy:63 241 | old "{#month_short}Jul" 242 | new "{#month_short}Jul" 243 | 244 | # renpy/common/00action_file.rpy:63 245 | old "{#month_short}Aug" 246 | new "{#month_short}Aug" 247 | 248 | # renpy/common/00action_file.rpy:63 249 | old "{#month_short}Sep" 250 | new "{#month_short}Sep" 251 | 252 | # renpy/common/00action_file.rpy:63 253 | old "{#month_short}Oct" 254 | new "{#month_short}Oct" 255 | 256 | # renpy/common/00action_file.rpy:63 257 | old "{#month_short}Nov" 258 | new "{#month_short}Nov" 259 | 260 | # renpy/common/00action_file.rpy:63 261 | old "{#month_short}Dec" 262 | new "{#month_short}Dec" 263 | 264 | # renpy/common/00action_file.rpy:250 265 | old "%b %d, %H:%M" 266 | new "%b %d, %H:%M" 267 | 268 | # renpy/common/00action_file.rpy:363 269 | old "Save slot %s: [text]" 270 | new "Save slot %s: [text]" 271 | 272 | # renpy/common/00action_file.rpy:444 273 | old "Load slot %s: [text]" 274 | new "Load slot %s: [text]" 275 | 276 | # renpy/common/00action_file.rpy:497 277 | old "Delete slot [text]" 278 | new "Delete slot [text]" 279 | 280 | # renpy/common/00action_file.rpy:576 281 | old "File page auto" 282 | new "File page auto" 283 | 284 | # renpy/common/00action_file.rpy:578 285 | old "File page quick" 286 | new "File page quick" 287 | 288 | # renpy/common/00action_file.rpy:580 289 | old "File page [text]" 290 | new "File page [text]" 291 | 292 | # renpy/common/00action_file.rpy:638 293 | old "Page {}" 294 | new "Page {}" 295 | 296 | # renpy/common/00action_file.rpy:638 297 | old "Automatic saves" 298 | new "Automatic saves" 299 | 300 | # renpy/common/00action_file.rpy:638 301 | old "Quick saves" 302 | new "Quick saves" 303 | 304 | # renpy/common/00action_file.rpy:779 305 | old "Next file page." 306 | new "Next file page." 307 | 308 | # renpy/common/00action_file.rpy:851 309 | old "Previous file page." 310 | new "Previous file page." 311 | 312 | # renpy/common/00action_file.rpy:912 313 | old "Quick save complete." 314 | new "Quick save complete." 315 | 316 | # renpy/common/00action_file.rpy:930 317 | old "Quick save." 318 | new "Quick save." 319 | 320 | # renpy/common/00action_file.rpy:949 321 | old "Quick load." 322 | new "Quick load." 323 | 324 | # renpy/common/00action_other.rpy:375 325 | old "Language [text]" 326 | new "Language [text]" 327 | 328 | # renpy/common/00director.rpy:708 329 | old "The interactive director is not enabled here." 330 | new "The interactive director is not enabled here." 331 | 332 | # renpy/common/00director.rpy:1481 333 | old "⬆" 334 | new "⬆" 335 | 336 | # renpy/common/00director.rpy:1487 337 | old "⬇" 338 | new "⬇" 339 | 340 | # renpy/common/00director.rpy:1551 341 | old "Done" 342 | new "Done" 343 | 344 | # renpy/common/00director.rpy:1561 345 | old "(statement)" 346 | new "(statement)" 347 | 348 | # renpy/common/00director.rpy:1562 349 | old "(tag)" 350 | new "(tag)" 351 | 352 | # renpy/common/00director.rpy:1563 353 | old "(attributes)" 354 | new "(attributes)" 355 | 356 | # renpy/common/00director.rpy:1564 357 | old "(transform)" 358 | new "(transform)" 359 | 360 | # renpy/common/00director.rpy:1589 361 | old "(transition)" 362 | new "(transition)" 363 | 364 | # renpy/common/00director.rpy:1601 365 | old "(channel)" 366 | new "(channel)" 367 | 368 | # renpy/common/00director.rpy:1602 369 | old "(filename)" 370 | new "(filename)" 371 | 372 | # renpy/common/00director.rpy:1631 373 | old "Change" 374 | new "Change" 375 | 376 | # renpy/common/00director.rpy:1633 377 | old "Add" 378 | new "Add" 379 | 380 | # renpy/common/00director.rpy:1636 381 | old "Cancel" 382 | new "Cancel" 383 | 384 | # renpy/common/00director.rpy:1639 385 | old "Remove" 386 | new "Remove" 387 | 388 | # renpy/common/00director.rpy:1674 389 | old "Statement:" 390 | new "Statement:" 391 | 392 | # renpy/common/00director.rpy:1695 393 | old "Tag:" 394 | new "Tag:" 395 | 396 | # renpy/common/00director.rpy:1711 397 | old "Attributes:" 398 | new "Attributes:" 399 | 400 | # renpy/common/00director.rpy:1729 401 | old "Transforms:" 402 | new "Transforms:" 403 | 404 | # renpy/common/00director.rpy:1748 405 | old "Behind:" 406 | new "Behind:" 407 | 408 | # renpy/common/00director.rpy:1767 409 | old "Transition:" 410 | new "Transition:" 411 | 412 | # renpy/common/00director.rpy:1785 413 | old "Channel:" 414 | new "Channel:" 415 | 416 | # renpy/common/00director.rpy:1803 417 | old "Audio Filename:" 418 | new "Audio Filename:" 419 | 420 | # renpy/common/00gui.rpy:384 421 | old "Are you sure?" 422 | new "Are you sure?" 423 | 424 | # renpy/common/00gui.rpy:385 425 | old "Are you sure you want to delete this save?" 426 | new "Are you sure you want to delete this save?" 427 | 428 | # renpy/common/00gui.rpy:386 429 | old "Are you sure you want to overwrite your save?" 430 | new "Are you sure you want to overwrite your save?" 431 | 432 | # renpy/common/00gui.rpy:387 433 | old "Loading will lose unsaved progress.\nAre you sure you want to do this?" 434 | new "Loading will lose unsaved progress.\nAre you sure you want to do this?" 435 | 436 | # renpy/common/00gui.rpy:388 437 | old "Are you sure you want to quit?" 438 | new "Are you sure you want to quit?" 439 | 440 | # renpy/common/00gui.rpy:389 441 | old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress." 442 | new "Are you sure you want to return to the main menu?\nThis will lose unsaved progress." 443 | 444 | # renpy/common/00gui.rpy:390 445 | old "Are you sure you want to end the replay?" 446 | new "Are you sure you want to end the replay?" 447 | 448 | # renpy/common/00gui.rpy:391 449 | old "Are you sure you want to begin skipping?" 450 | new "Are you sure you want to begin skipping?" 451 | 452 | # renpy/common/00gui.rpy:392 453 | old "Are you sure you want to skip to the next choice?" 454 | new "Are you sure you want to skip to the next choice?" 455 | 456 | # renpy/common/00gui.rpy:393 457 | old "Are you sure you want to skip unseen dialogue to the next choice?" 458 | new "Are you sure you want to skip unseen dialogue to the next choice?" 459 | 460 | # renpy/common/00keymap.rpy:306 461 | old "Failed to save screenshot as %s." 462 | new "Failed to save screenshot as %s." 463 | 464 | # renpy/common/00keymap.rpy:318 465 | old "Saved screenshot as %s." 466 | new "Saved screenshot as %s." 467 | 468 | # renpy/common/00library.rpy:195 469 | old "Skip Mode" 470 | new "Skip Mode" 471 | 472 | # renpy/common/00library.rpy:281 473 | old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}." 474 | new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}." 475 | 476 | # renpy/common/00preferences.rpy:247 477 | old "display" 478 | new "display" 479 | 480 | # renpy/common/00preferences.rpy:259 481 | old "transitions" 482 | new "transitions" 483 | 484 | # renpy/common/00preferences.rpy:268 485 | old "skip transitions" 486 | new "skip transitions" 487 | 488 | # renpy/common/00preferences.rpy:270 489 | old "video sprites" 490 | new "video sprites" 491 | 492 | # renpy/common/00preferences.rpy:279 493 | old "show empty window" 494 | new "show empty window" 495 | 496 | # renpy/common/00preferences.rpy:288 497 | old "text speed" 498 | new "text speed" 499 | 500 | # renpy/common/00preferences.rpy:296 501 | old "joystick" 502 | new "joystick" 503 | 504 | # renpy/common/00preferences.rpy:296 505 | old "joystick..." 506 | new "joystick..." 507 | 508 | # renpy/common/00preferences.rpy:303 509 | old "skip" 510 | new "skip" 511 | 512 | # renpy/common/00preferences.rpy:306 513 | old "skip unseen [text]" 514 | new "skip unseen [text]" 515 | 516 | # renpy/common/00preferences.rpy:311 517 | old "skip unseen text" 518 | new "skip unseen text" 519 | 520 | # renpy/common/00preferences.rpy:313 521 | old "begin skipping" 522 | new "begin skipping" 523 | 524 | # renpy/common/00preferences.rpy:317 525 | old "after choices" 526 | new "after choices" 527 | 528 | # renpy/common/00preferences.rpy:324 529 | old "skip after choices" 530 | new "skip after choices" 531 | 532 | # renpy/common/00preferences.rpy:326 533 | old "auto-forward time" 534 | new "auto-forward time" 535 | 536 | # renpy/common/00preferences.rpy:340 537 | old "auto-forward" 538 | new "auto-forward" 539 | 540 | # renpy/common/00preferences.rpy:347 541 | old "Auto forward" 542 | new "Auto forward" 543 | 544 | # renpy/common/00preferences.rpy:350 545 | old "auto-forward after click" 546 | new "auto-forward after click" 547 | 548 | # renpy/common/00preferences.rpy:359 549 | old "automatic move" 550 | new "automatic move" 551 | 552 | # renpy/common/00preferences.rpy:368 553 | old "wait for voice" 554 | new "wait for voice" 555 | 556 | # renpy/common/00preferences.rpy:377 557 | old "voice sustain" 558 | new "voice sustain" 559 | 560 | # renpy/common/00preferences.rpy:386 561 | old "self voicing" 562 | new "self voicing" 563 | 564 | # renpy/common/00preferences.rpy:395 565 | old "self voicing volume drop" 566 | new "self voicing volume drop" 567 | 568 | # renpy/common/00preferences.rpy:403 569 | old "clipboard voicing" 570 | new "clipboard voicing" 571 | 572 | # renpy/common/00preferences.rpy:412 573 | old "debug voicing" 574 | new "debug voicing" 575 | 576 | # renpy/common/00preferences.rpy:421 577 | old "emphasize audio" 578 | new "emphasize audio" 579 | 580 | # renpy/common/00preferences.rpy:430 581 | old "rollback side" 582 | new "rollback side" 583 | 584 | # renpy/common/00preferences.rpy:440 585 | old "gl powersave" 586 | new "gl powersave" 587 | 588 | # renpy/common/00preferences.rpy:446 589 | old "gl framerate" 590 | new "gl framerate" 591 | 592 | # renpy/common/00preferences.rpy:449 593 | old "gl tearing" 594 | new "gl tearing" 595 | 596 | # renpy/common/00preferences.rpy:452 597 | old "font transform" 598 | new "font transform" 599 | 600 | # renpy/common/00preferences.rpy:455 601 | old "font size" 602 | new "font size" 603 | 604 | # renpy/common/00preferences.rpy:463 605 | old "font line spacing" 606 | new "font line spacing" 607 | 608 | # renpy/common/00preferences.rpy:471 609 | old "system cursor" 610 | new "system cursor" 611 | 612 | # renpy/common/00preferences.rpy:480 613 | old "renderer menu" 614 | new "renderer menu" 615 | 616 | # renpy/common/00preferences.rpy:483 617 | old "accessibility menu" 618 | new "accessibility menu" 619 | 620 | # renpy/common/00preferences.rpy:496 621 | old "music volume" 622 | new "music volume" 623 | 624 | # renpy/common/00preferences.rpy:497 625 | old "sound volume" 626 | new "sound volume" 627 | 628 | # renpy/common/00preferences.rpy:498 629 | old "voice volume" 630 | new "voice volume" 631 | 632 | # renpy/common/00preferences.rpy:499 633 | old "mute music" 634 | new "mute music" 635 | 636 | # renpy/common/00preferences.rpy:500 637 | old "mute sound" 638 | new "mute sound" 639 | 640 | # renpy/common/00preferences.rpy:501 641 | old "mute voice" 642 | new "mute voice" 643 | 644 | # renpy/common/00preferences.rpy:502 645 | old "mute all" 646 | new "mute all" 647 | 648 | # renpy/common/00preferences.rpy:583 649 | old "Clipboard voicing enabled. Press 'shift+C' to disable." 650 | new "Clipboard voicing enabled. Press 'shift+C' to disable." 651 | 652 | # renpy/common/00preferences.rpy:585 653 | old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable." 654 | new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable." 655 | 656 | # renpy/common/00preferences.rpy:587 657 | old "Self-voicing enabled. Press 'v' to disable." 658 | new "Self-voicing enabled. Press 'v' to disable." 659 | 660 | # renpy/common/_compat/gamemenu.rpym:198 661 | old "Empty Slot." 662 | new "Empty Slot." 663 | 664 | # renpy/common/_compat/gamemenu.rpym:355 665 | old "Previous" 666 | new "Previous" 667 | 668 | # renpy/common/_compat/gamemenu.rpym:362 669 | old "Next" 670 | new "Next" 671 | 672 | # renpy/common/_compat/preferences.rpym:428 673 | old "Joystick Mapping" 674 | new "Joystick Mapping" 675 | 676 | # renpy/common/_developer/developer.rpym:38 677 | old "Developer Menu" 678 | new "Developer Menu" 679 | 680 | # renpy/common/_developer/developer.rpym:43 681 | old "Interactive Director (D)" 682 | new "Interactive Director (D)" 683 | 684 | # renpy/common/_developer/developer.rpym:45 685 | old "Reload Game (Shift+R)" 686 | new "Reload Game (Shift+R)" 687 | 688 | # renpy/common/_developer/developer.rpym:47 689 | old "Console (Shift+O)" 690 | new "Console (Shift+O)" 691 | 692 | # renpy/common/_developer/developer.rpym:49 693 | old "Variable Viewer" 694 | new "Variable Viewer" 695 | 696 | # renpy/common/_developer/developer.rpym:51 697 | old "Image Location Picker" 698 | new "Image Location Picker" 699 | 700 | # renpy/common/_developer/developer.rpym:53 701 | old "Filename List" 702 | new "Filename List" 703 | 704 | # renpy/common/_developer/developer.rpym:57 705 | old "Show Image Load Log (F4)" 706 | new "Show Image Load Log (F4)" 707 | 708 | # renpy/common/_developer/developer.rpym:60 709 | old "Hide Image Load Log (F4)" 710 | new "Hide Image Load Log (F4)" 711 | 712 | # renpy/common/_developer/developer.rpym:63 713 | old "Image Attributes" 714 | new "Image Attributes" 715 | 716 | # renpy/common/_developer/developer.rpym:90 717 | old "[name] [attributes] (hidden)" 718 | new "[name] [attributes] (hidden)" 719 | 720 | # renpy/common/_developer/developer.rpym:94 721 | old "[name] [attributes]" 722 | new "[name] [attributes]" 723 | 724 | # renpy/common/_developer/developer.rpym:143 725 | old "Nothing to inspect." 726 | new "Nothing to inspect." 727 | 728 | # renpy/common/_developer/developer.rpym:154 729 | old "Hide deleted" 730 | new "Hide deleted" 731 | 732 | # renpy/common/_developer/developer.rpym:154 733 | old "Show deleted" 734 | new "Show deleted" 735 | 736 | # renpy/common/_developer/developer.rpym:278 737 | old "Return to the developer menu" 738 | new "Return to the developer menu" 739 | 740 | # renpy/common/_developer/developer.rpym:443 741 | old "Rectangle: %r" 742 | new "Rectangle: %r" 743 | 744 | # renpy/common/_developer/developer.rpym:448 745 | old "Mouse position: %r" 746 | new "Mouse position: %r" 747 | 748 | # renpy/common/_developer/developer.rpym:453 749 | old "Right-click or escape to quit." 750 | new "Right-click or escape to quit." 751 | 752 | # renpy/common/_developer/developer.rpym:485 753 | old "Rectangle copied to clipboard." 754 | new "Rectangle copied to clipboard." 755 | 756 | # renpy/common/_developer/developer.rpym:488 757 | old "Position copied to clipboard." 758 | new "Position copied to clipboard." 759 | 760 | # renpy/common/_developer/developer.rpym:506 761 | old "Type to filter: " 762 | new "Type to filter: " 763 | 764 | # renpy/common/_developer/developer.rpym:631 765 | old "Textures: [tex_count] ([tex_size_mb:.1f] MB)" 766 | new "Textures: [tex_count] ([tex_size_mb:.1f] MB)" 767 | 768 | # renpy/common/_developer/developer.rpym:635 769 | old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)" 770 | new "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)" 771 | 772 | # renpy/common/_developer/developer.rpym:645 773 | old "✔ " 774 | new "✔ " 775 | 776 | # renpy/common/_developer/developer.rpym:648 777 | old "✘ " 778 | new "✘ " 779 | 780 | # renpy/common/_developer/developer.rpym:653 781 | old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}" 782 | new "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}" 783 | 784 | # renpy/common/_developer/inspector.rpym:38 785 | old "Displayable Inspector" 786 | new "Displayable Inspector" 787 | 788 | # renpy/common/_developer/inspector.rpym:61 789 | old "Size" 790 | new "Size" 791 | 792 | # renpy/common/_developer/inspector.rpym:65 793 | old "Style" 794 | new "Style" 795 | 796 | # renpy/common/_developer/inspector.rpym:71 797 | old "Location" 798 | new "Location" 799 | 800 | # renpy/common/_developer/inspector.rpym:122 801 | old "Inspecting Styles of [displayable_name!q]" 802 | new "Inspecting Styles of [displayable_name!q]" 803 | 804 | # renpy/common/_developer/inspector.rpym:139 805 | old "displayable:" 806 | new "displayable:" 807 | 808 | # renpy/common/_developer/inspector.rpym:145 809 | old " (no properties affect the displayable)" 810 | new " (no properties affect the displayable)" 811 | 812 | # renpy/common/_developer/inspector.rpym:147 813 | old " (default properties omitted)" 814 | new " (default properties omitted)" 815 | 816 | # renpy/common/_developer/inspector.rpym:185 817 | old "" 818 | new "" 819 | 820 | # renpy/common/_layout/classic_load_save.rpym:170 821 | old "a" 822 | new "a" 823 | 824 | # renpy/common/_layout/classic_load_save.rpym:179 825 | old "q" 826 | new "q" 827 | 828 | # renpy/common/00iap.rpy:219 829 | old "Contacting App Store\nPlease Wait..." 830 | new "Contacting App Store\nPlease Wait..." 831 | 832 | # renpy/common/00updater.rpy:374 833 | old "The Ren'Py Updater is not supported on mobile devices." 834 | new "The Ren'Py Updater is not supported on mobile devices." 835 | 836 | # renpy/common/00updater.rpy:496 837 | old "An error is being simulated." 838 | new "An error is being simulated." 839 | 840 | # renpy/common/00updater.rpy:680 841 | old "Either this project does not support updating, or the update status file was deleted." 842 | new "Either this project does not support updating, or the update status file was deleted." 843 | 844 | # renpy/common/00updater.rpy:694 845 | old "This account does not have permission to perform an update." 846 | new "This account does not have permission to perform an update." 847 | 848 | # renpy/common/00updater.rpy:697 849 | old "This account does not have permission to write the update log." 850 | new "This account does not have permission to write the update log." 851 | 852 | # renpy/common/00updater.rpy:724 853 | old "Could not verify update signature." 854 | new "Could not verify update signature." 855 | 856 | # renpy/common/00updater.rpy:995 857 | old "The update file was not downloaded." 858 | new "The update file was not downloaded." 859 | 860 | # renpy/common/00updater.rpy:1013 861 | old "The update file does not have the correct digest - it may have been corrupted." 862 | new "The update file does not have the correct digest - it may have been corrupted." 863 | 864 | # renpy/common/00updater.rpy:1067 865 | old "While unpacking {}, unknown type {}." 866 | new "While unpacking {}, unknown type {}." 867 | 868 | # renpy/common/00updater.rpy:1433 869 | old "Updater" 870 | new "Updater" 871 | 872 | # renpy/common/00updater.rpy:1440 873 | old "An error has occured:" 874 | new "An error has occured:" 875 | 876 | # renpy/common/00updater.rpy:1442 877 | old "Checking for updates." 878 | new "Checking for updates." 879 | 880 | # renpy/common/00updater.rpy:1444 881 | old "This program is up to date." 882 | new "This program is up to date." 883 | 884 | # renpy/common/00updater.rpy:1446 885 | old "[u.version] is available. Do you want to install it?" 886 | new "[u.version] is available. Do you want to install it?" 887 | 888 | # renpy/common/00updater.rpy:1448 889 | old "Preparing to download the updates." 890 | new "Preparing to download the updates." 891 | 892 | # renpy/common/00updater.rpy:1450 893 | old "Downloading the updates." 894 | new "Downloading the updates." 895 | 896 | # renpy/common/00updater.rpy:1452 897 | old "Unpacking the updates." 898 | new "Unpacking the updates." 899 | 900 | # renpy/common/00updater.rpy:1454 901 | old "Finishing up." 902 | new "Finishing up." 903 | 904 | # renpy/common/00updater.rpy:1456 905 | old "The updates have been installed. The program will restart." 906 | new "The updates have been installed. The program will restart." 907 | 908 | # renpy/common/00updater.rpy:1458 909 | old "The updates have been installed." 910 | new "The updates have been installed." 911 | 912 | # renpy/common/00updater.rpy:1460 913 | old "The updates were cancelled." 914 | new "The updates were cancelled." 915 | 916 | # renpy/common/00updater.rpy:1475 917 | old "Proceed" 918 | new "Proceed" 919 | 920 | # renpy/common/00compat.rpy:320 921 | old "Fullscreen" 922 | new "Fullscreen" 923 | 924 | # renpy/common/00gallery.rpy:590 925 | old "Image [index] of [count] locked." 926 | new "Image [index] of [count] locked." 927 | 928 | # renpy/common/00gallery.rpy:610 929 | old "prev" 930 | new "prev" 931 | 932 | # renpy/common/00gallery.rpy:611 933 | old "next" 934 | new "next" 935 | 936 | # renpy/common/00gallery.rpy:612 937 | old "slideshow" 938 | new "slideshow" 939 | 940 | # renpy/common/00gallery.rpy:613 941 | old "return" 942 | new "return" 943 | 944 | # renpy/common/00gltest.rpy:89 945 | old "Renderer" 946 | new "Renderer" 947 | 948 | # renpy/common/00gltest.rpy:93 949 | old "Automatically Choose" 950 | new "Automatically Choose" 951 | 952 | # renpy/common/00gltest.rpy:100 953 | old "Force GL Renderer" 954 | new "Force GL Renderer" 955 | 956 | # renpy/common/00gltest.rpy:105 957 | old "Force ANGLE Renderer" 958 | new "Force ANGLE Renderer" 959 | 960 | # renpy/common/00gltest.rpy:110 961 | old "Force GLES Renderer" 962 | new "Force GLES Renderer" 963 | 964 | # renpy/common/00gltest.rpy:116 965 | old "Force GL2 Renderer" 966 | new "Force GL2 Renderer" 967 | 968 | # renpy/common/00gltest.rpy:121 969 | old "Force ANGLE2 Renderer" 970 | new "Force ANGLE2 Renderer" 971 | 972 | # renpy/common/00gltest.rpy:126 973 | old "Force GLES2 Renderer" 974 | new "Force GLES2 Renderer" 975 | 976 | # renpy/common/00gltest.rpy:132 977 | old "Gamepad" 978 | new "Gamepad" 979 | 980 | # renpy/common/00gltest.rpy:136 981 | old "Enable (No Blocklist)" 982 | new "Enable (No Blocklist)" 983 | 984 | # renpy/common/00gltest.rpy:140 985 | old "Enable" 986 | new "Enable" 987 | 988 | # renpy/common/00gltest.rpy:144 989 | old "Disable" 990 | new "Disable" 991 | 992 | # renpy/common/00gltest.rpy:150 993 | old "Calibrate" 994 | new "Calibrate" 995 | 996 | # renpy/common/00gltest.rpy:159 997 | old "Powersave" 998 | new "Powersave" 999 | 1000 | # renpy/common/00gltest.rpy:173 1001 | old "Framerate" 1002 | new "Framerate" 1003 | 1004 | # renpy/common/00gltest.rpy:177 1005 | old "Screen" 1006 | new "Screen" 1007 | 1008 | # renpy/common/00gltest.rpy:181 1009 | old "60" 1010 | new "60" 1011 | 1012 | # renpy/common/00gltest.rpy:185 1013 | old "30" 1014 | new "30" 1015 | 1016 | # renpy/common/00gltest.rpy:191 1017 | old "Tearing" 1018 | new "Tearing" 1019 | 1020 | # renpy/common/00gltest.rpy:207 1021 | old "Changes will take effect the next time this program is run." 1022 | new "Changes will take effect the next time this program is run." 1023 | 1024 | # renpy/common/00gltest.rpy:214 1025 | old "Quit" 1026 | new "Quit" 1027 | 1028 | # renpy/common/00gltest.rpy:242 1029 | old "Performance Warning" 1030 | new "Performance Warning" 1031 | 1032 | # renpy/common/00gltest.rpy:247 1033 | old "This computer is using software rendering." 1034 | new "This computer is using software rendering." 1035 | 1036 | # renpy/common/00gltest.rpy:249 1037 | old "This game requires use of GL2 that can't be initialised." 1038 | new "This game requires use of GL2 that can't be initialised." 1039 | 1040 | # renpy/common/00gltest.rpy:251 1041 | old "This computer has a problem displaying graphics: [problem]." 1042 | new "This computer has a problem displaying graphics: [problem]." 1043 | 1044 | # renpy/common/00gltest.rpy:255 1045 | old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display." 1046 | new "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display." 1047 | 1048 | # renpy/common/00gltest.rpy:259 1049 | old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer." 1050 | new "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer." 1051 | 1052 | # renpy/common/00gltest.rpy:264 1053 | old "More details on how to fix this can be found in the {a=[url]}documentation{/a}." 1054 | new "More details on how to fix this can be found in the {a=[url]}documentation{/a}." 1055 | 1056 | # renpy/common/00gltest.rpy:269 1057 | old "Continue, Show this warning again" 1058 | new "Continue, Show this warning again" 1059 | 1060 | # renpy/common/00gltest.rpy:273 1061 | old "Continue, Don't show warning again" 1062 | new "Continue, Don't show warning again" 1063 | 1064 | # renpy/common/00gltest.rpy:281 1065 | old "Change render options" 1066 | new "Change render options" 1067 | 1068 | # renpy/common/00gamepad.rpy:32 1069 | old "Select Gamepad to Calibrate" 1070 | new "Select Gamepad to Calibrate" 1071 | 1072 | # renpy/common/00gamepad.rpy:35 1073 | old "No Gamepads Available" 1074 | new "No Gamepads Available" 1075 | 1076 | # renpy/common/00gamepad.rpy:54 1077 | old "Calibrating [name] ([i]/[total])" 1078 | new "Calibrating [name] ([i]/[total])" 1079 | 1080 | # renpy/common/00gamepad.rpy:58 1081 | old "Press or move the '[control!s]' [kind]." 1082 | new "Press or move the '[control!s]' [kind]." 1083 | 1084 | # renpy/common/00gamepad.rpy:68 1085 | old "Skip (A)" 1086 | new "Skip (A)" 1087 | 1088 | # renpy/common/00gamepad.rpy:71 1089 | old "Back (B)" 1090 | new "Back (B)" 1091 | 1092 | # renpy/common/_errorhandling.rpym:542 1093 | old "Open" 1094 | new "Open" 1095 | 1096 | # renpy/common/_errorhandling.rpym:544 1097 | old "Opens the traceback.txt file in a text editor." 1098 | new "Opens the traceback.txt file in a text editor." 1099 | 1100 | # renpy/common/_errorhandling.rpym:546 1101 | old "Copy BBCode" 1102 | new "Copy BBCode" 1103 | 1104 | # renpy/common/_errorhandling.rpym:548 1105 | old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/." 1106 | new "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/." 1107 | 1108 | # renpy/common/_errorhandling.rpym:550 1109 | old "Copy Markdown" 1110 | new "Copy Markdown" 1111 | 1112 | # renpy/common/_errorhandling.rpym:552 1113 | old "Copies the traceback.txt file to the clipboard as Markdown for Discord." 1114 | new "Copies the traceback.txt file to the clipboard as Markdown for Discord." 1115 | 1116 | # renpy/common/_errorhandling.rpym:581 1117 | old "An exception has occurred." 1118 | new "An exception has occurred." 1119 | 1120 | # renpy/common/_errorhandling.rpym:604 1121 | old "Rollback" 1122 | new "Rollback" 1123 | 1124 | # renpy/common/_errorhandling.rpym:606 1125 | old "Attempts a roll back to a prior time, allowing you to save or choose a different choice." 1126 | new "Attempts a roll back to a prior time, allowing you to save or choose a different choice." 1127 | 1128 | # renpy/common/_errorhandling.rpym:609 1129 | old "Ignore" 1130 | new "Ignore" 1131 | 1132 | # renpy/common/_errorhandling.rpym:613 1133 | old "Ignores the exception, allowing you to continue." 1134 | new "Ignores the exception, allowing you to continue." 1135 | 1136 | # renpy/common/_errorhandling.rpym:615 1137 | old "Ignores the exception, allowing you to continue. This often leads to additional errors." 1138 | new "Ignores the exception, allowing you to continue. This often leads to additional errors." 1139 | 1140 | # renpy/common/_errorhandling.rpym:619 1141 | old "Reload" 1142 | new "Reload" 1143 | 1144 | # renpy/common/_errorhandling.rpym:621 1145 | old "Reloads the game from disk, saving and restoring game state if possible." 1146 | new "Reloads the game from disk, saving and restoring game state if possible." 1147 | 1148 | # renpy/common/_errorhandling.rpym:624 1149 | old "Console" 1150 | new "Console" 1151 | 1152 | # renpy/common/_errorhandling.rpym:626 1153 | old "Opens a console to allow debugging the problem." 1154 | new "Opens a console to allow debugging the problem." 1155 | 1156 | # renpy/common/_errorhandling.rpym:639 1157 | old "Quits the game." 1158 | new "Quits the game." 1159 | 1160 | # renpy/common/_errorhandling.rpym:660 1161 | old "Parsing the script failed." 1162 | new "Parsing the script failed." 1163 | 1164 | # renpy/common/_errorhandling.rpym:686 1165 | old "Opens the errors.txt file in a text editor." 1166 | new "Opens the errors.txt file in a text editor." 1167 | 1168 | # renpy/common/_errorhandling.rpym:690 1169 | old "Copies the errors.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/." 1170 | new "Copies the errors.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/." 1171 | 1172 | # renpy/common/_errorhandling.rpym:694 1173 | old "Copies the errors.txt file to the clipboard as Markdown for Discord." 1174 | new "Copies the errors.txt file to the clipboard as Markdown for Discord." 1175 | 1176 | # renpy/common/00console.rpy:492 1177 | old "Press to exit console. Type help for help.\n" 1178 | new "Press to exit console. Type help for help.\n" 1179 | 1180 | # renpy/common/00console.rpy:496 1181 | old "Ren'Py script enabled." 1182 | new "Ren'Py script enabled." 1183 | 1184 | # renpy/common/00console.rpy:498 1185 | old "Ren'Py script disabled." 1186 | new "Ren'Py script disabled." 1187 | 1188 | # renpy/common/00console.rpy:745 1189 | old "help: show this help" 1190 | new "help: show this help" 1191 | 1192 | # renpy/common/00console.rpy:750 1193 | old "commands:\n" 1194 | new "commands:\n" 1195 | 1196 | # renpy/common/00console.rpy:760 1197 | old " : run the statement\n" 1198 | new " : run the statement\n" 1199 | 1200 | # renpy/common/00console.rpy:762 1201 | old " : run the expression or statement" 1202 | new " : run the expression or statement" 1203 | 1204 | # renpy/common/00console.rpy:770 1205 | old "clear: clear the console history" 1206 | new "clear: clear the console history" 1207 | 1208 | # renpy/common/00console.rpy:774 1209 | old "exit: exit the console" 1210 | new "exit: exit the console" 1211 | 1212 | # renpy/common/00console.rpy:782 1213 | old "load : loads the game from slot" 1214 | new "load : loads the game from slot" 1215 | 1216 | # renpy/common/00console.rpy:795 1217 | old "save : saves the game in slot" 1218 | new "save : saves the game in slot" 1219 | 1220 | # renpy/common/00console.rpy:806 1221 | old "reload: reloads the game, refreshing the scripts" 1222 | new "reload: reloads the game, refreshing the scripts" 1223 | 1224 | # renpy/common/00console.rpy:814 1225 | old "watch : watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is" 1226 | new "watch : watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is" 1227 | 1228 | # renpy/common/00console.rpy:849 1229 | old "unwatch : stop watching an expression" 1230 | new "unwatch : stop watching an expression" 1231 | 1232 | # renpy/common/00console.rpy:884 1233 | old "unwatchall: stop watching all expressions" 1234 | new "unwatchall: stop watching all expressions" 1235 | 1236 | # renpy/common/00console.rpy:901 1237 | old "jump